
$.fn.select = function (settings){
	this.each(function () {
		return new $.fn.selectClass(this, settings);
	});
	return this;
};

$.fn.selectClass = function (target, settings) {
	settings = $.extend({}, $.fn.fancybox.defaults, settings);

	var me = this;
	var $target = $(target);
	var $select = $(settings.html || '<div class="select"><div class="select-caption"><a href="javascript:;"><span><span><span></span></span></span></a></div><div class="select-items"><div class="select-items-container"><div class="select-items-container-inside"></div></div></div></div>');
	var $document = $(document);
	
	me.droppeddown = false;

	function _initialize() {
		$target.hide();
		$target.after($select);
		me.$captionLink = $select.find('.select-caption > a')
		me.$caption = $select.find('.select-caption > a > span > span > span');
		me.$items = $select.find('.select-items');
		if (settings.optionWidth) {
			me.$items.width(settings.optionWidth);
			if ($.browser.msie && $.browser.version <= 6) {
				$select.find('.select-middle')
					.width(settings.optionWidth - 12)
					.each(function () { this.style.left = '0px'; });
			}
		}
		me.$itemsContainer = me.$items.find('.select-items-container-inside');
		if ($.browser.msie && $.browser.version <= 6) {
			$select.find(".select-items-container, .select-right, .select-left, .select-middle").fixPNG();
			$select.addClass('select-msie6');
		}
		me.$caption.html($target.find(':selected').text());
		me.$captionLink.click(_captionLinkClick);
		$target.find('option').each(function () {
			me.addOption(this.value, this.innerHTML);
		});
	}
	
	me.addOption = function (value, caption) {
		var $result = $('<div value="' + value + '" class="select-item"><a href="javascript:;"><span>' + caption + '</span></a></div>')
			.appendTo(me.$itemsContainer)
			.find('a').click(_optionLinkClick);
		if (me.$items.find('.select-item').length == 1) {
			$result.parent().addClass('select-item-first');
		}
		return $result;
	}

	me.changeValue = function (newvalue) {
		$items = me.$itemsContainer.find('.select-item');
		for (var i = 0; i < $items.length; i++) {
			if ($items[i].getAttribute('value') == newvalue) {
				me.$caption.html($($items[i]).text());
				$target.val(newvalue);
				$target.change();
			}
		}
	}

	function _optionLinkClick(e) {
		e.stopPropagation();
		e.preventDefault();
		me.changeValue($(e.target).parents('div:eq(0)').attr('value'));
		me.closeup();
	}
	
	function _documentClick(e) {
		me.closeup();
		e.stopPropagation();
		e.preventDefault();
		$document.unbind('click', arguments.callee);
	}
	
	me.dropdown = function () {
		$document.click();
		if (!me.droppeddown) {
			me.$items.slideDown('fast');
			me.droppeddown = true;
			$document.click(_documentClick);
		}
	}
	
	me.closeup = function () {
		if (me.droppeddown) {
			me.$items.slideUp('fast');
			me.droppeddown = false;
		}
	}

	function _captionLinkClick(e) {
		if (me.droppeddown) {
			me.closeup();
		} else {
			me.dropdown();
		}
		e.stopPropagation();
		e.preventDefault();
	}
	
	function _documentClickHide(e) {
		me.$items.slideDown('fast');
	}
	
	_initialize();
}

$.fn.select.defaults = {};
