/*
 * jQuery Select Plugins v1.3.4
 * Copyright (c) 2009 zhangjingwei
 * Dual licensed under the MIT and GPL licenses.
 * Date: 2009-03-19 09:40
 * Revision: 1.3.4
 * Thanks for xiaofei
 */

jQuery.fn.sSelect = function(){
	var selectId = $(this).attr('id');
	var selectZindex = $(this).css('z-index');
	var selectIndex = $('#'+selectId+' > select > option').index($('#'+selectId+' > select > option:selected')[0]);
	$('#'+selectId).append('<div class="dropselectbox"><h4></h4><span class="FixSelectBrowserSpan"></span><ul style="display:none"><li></li></ul></div>');
	$('#'+selectId+' > div > h4').empty().append($('#'+selectId+' > select > option:selected').text());
	$('.dropselectbox').show();
	var selectWidth = $('#'+selectId+'> select').width();
	$('#'+selectId+' > div > h4').css({width:selectWidth});
	var selectUlwidth = selectWidth + parseInt($('#'+selectId+'> div > h4').css("padding-left").replace("px","")) + parseInt($('#'+selectId+'> div > h4').css("padding-right").replace("px",""));
	$('#'+selectId+' > div > ul').css({width:selectUlwidth});
	$('#'+selectId+' > select').hide();
	$('#'+selectId+' > div').hover(function(){
		$('#'+selectId+' > div > h4').addClass("over");
		$('#'+selectId+' > div > span').addClass("over");
	},function(){
		$('#'+selectId+' > div > h4').removeClass("over");
		$('#'+selectId+' > div > span').removeClass("over");
	});
	$('#'+selectId)
	.bind("focus",function(){
		__clearSelectMenu();
		$('#'+selectId+' > div > h4').addClass("over");
		$('#'+selectId+' > div > span').addClass("over");
	})
	.bind("click",function(e){
		if($('#'+selectId+' > div > ul').css("display") == 'block'){
			__clearSelectMenu();
			return false;
		}else{
			if ($.browser.opera){__clearSelectMenu();}
			$('#'+selectId+' > div > h4').addClass("current");
			$('#'+selectId+' > div > span').addClass("over").addClass("current");
			$('#'+selectId+' > div > ul').show();
			var selectZindex = $(this).css('z-index');
			if ($.browser.msie || $.browser.opera){$('.dropdown').css({'position':'relative','z-index':'0'});}
			$('#'+selectId).css({'position':'relative','z-index':'999'});
			__setSelectValue(selectId);
			var windowspace = ($(window).scrollTop() + document.documentElement.clientHeight) - $(this).offset().top;
			var ulspace = $('#'+selectId+' > div > ul').outerHeight(true);
			var windowspace2 = $(this).offset().top - $(window).scrollTop() - ulspace;
			if (windowspace < ulspace && windowspace2 > 0) {
				$('#'+selectId+' > div > ul').css({top:-ulspace});
			}else{
				$('#'+selectId+' > div > ul').css({top:$('#'+selectId+' > div > h4').outerHeight(true)});
			}
			selectIndex = $('#'+selectId+' > div > ul > li').index($('.selectedli')[0]);
			$(window).scroll(function(){
				var windowspace = ($(window).scrollTop() + document.documentElement.clientHeight) - $('#'+selectId).offset().top;
				var ulspace = $('#'+selectId+' > div > ul').outerHeight(true);
				if (windowspace < ulspace) {
					$('#'+selectId+' > div > ul').css({top:-ulspace});
				}else{
					$('#'+selectId+' > div > ul').css({top:$('#'+selectId+' > div > h4').outerHeight(true)});
				}
			});
			//响应鼠标点击选择
			$('#'+selectId+' > div > ul > li').click(function(e){										  
					selectIndex = $('#'+selectId+' > div > ul > li').index(this);
					$('#'+selectId+'> select')[0].selectedIndex = selectIndex;
					$('#'+selectId+' > div > h4').empty().append($('#'+selectId+' > select > option:selected').text());
					__clearSelectMenu(selectId,selectZindex);
					e.stopPropagation();
					e.cancelbubble = true;
			})
			.hover(
				   function(){
						$('#'+selectId+' > div > ul > li').removeClass("over");
						$(this).addClass("over").addClass("selectedli");
						selectIndex = $('#'+selectId+' > div > ul > li').index(this);
					},
					function(){
						$(this).removeClass("over");
					}
			);
			//End
		};
		e.stopPropagation();
	})
	.bind("mousewheel",function(){
	})
	.bind("dblclick", function(){
		__clearSelectMenu();
		return false;
	})
	.bind("keydown",function(e){
		$(this).bind('keydown',function(e){
			if (e.keyCode == 40 || e.keyCode == 38 || e.keyCode == 35 || e.keyCode == 36){
				return false;
			}
		});
		switch(e.keyCode){
			case 9:
				return true;
				break;
			case 13:
				//enter
				__clearSelectMenu();
				break;
			case 27:
				//esc
				__clearSelectMenu();
				break;
			case 33:
				$('#'+selectId+' > div > ul > li').removeClass("over");
				selectIndex = 0;
				__keyDown(selectId,selectIndex);
				break;
			case 34:
				$('#'+selectId+' > div > ul > li').removeClass("over");
				selectIndex = ($('#'+selectId+' > select > option').length - 1);
				__keyDown(selectId,selectIndex);
				break;
			case 35:
				$('#'+selectId+' > div > ul > li').removeClass("over");
				selectIndex = ($('#'+selectId+' > select > option').length - 1);
				__keyDown(selectId,selectIndex);
				break;
			case 36:
				$('#'+selectId+' > div > ul > li').removeClass("over");
				selectIndex = 0;
				__keyDown(selectId,selectIndex);
				break;
			case 38:
				//up
				$('#'+selectId+' > div > ul > li').removeClass("over");
				if (selectIndex == 0){
					selectIndex = 0;
				}else{
					selectIndex--;
				};
				__keyDown(selectId,selectIndex);
				break;
			case 40:
				//down
				$('#'+selectId+' > div > ul > li').removeClass("over");
				if (selectIndex == ($('#'+selectId+' > select > option').length - 1)){
					selectIndex = $('#'+selectId+' > select > option').length - 1;
				}else{
					selectIndex ++;
				};
				__keyDown(selectId,selectIndex);
				break;
			default:
				return false;
				break;
		};
	})
	.bind("blur",function(){
		__clearSelectMenu(selectId,selectZindex);
		return false;
	});
	$('.dropselectbox').bind("selectstart",function(){
			return false;
	});
};

function __clearSelectMenu(selectId,selectZindex){
	$('.dropselectbox > ul').empty().hide();
	$('.dropselectbox > h4').removeClass("over").removeClass("current");
	$('.dropselectbox > span').removeClass("over");
	$('#'+selectId).css({'z-index':selectZindex});
}

function __setSelectValue(sID){
	$('#'+sID+' > div > ul').empty();
	$.each($('#'+sID+' > select > option'), function(i){
		$('#'+sID+' > div > ul').append("<li class='FixSelectBrowser'>"+$(this).text()+"</li>");
	});
	$('#'+sID+' > div > h4').empty().append($('#'+sID+' > select option:selected').text());
	$('#'+sID+' > div > ul > li').eq($('#'+sID+'> select')[0].selectedIndex).addClass("over").addClass("selectedli");
}

function __keyDown(sID,selectIndex){
	$('#'+sID+'> select')[0].selectedIndex = selectIndex;
	$('#'+sID+' > div > ul > li:eq('+selectIndex+')').toggleClass("over");
	$('#'+sID+' > div > h4').empty().append($('#'+sID+' > select option:selected').text());
}