﻿(function($){
	$.fn.FList=function(options){
		var options		= options				|| {};
		var SelectColor	= options.selectColor	|| "#99FFFF";		//选中高亮色彩
		var LeftAlpha	= options.leftAlpha		|| 0;				//浮动列表据左边位置微调
		var TopAlpha	= options.topAlpha		|| 0;				//浮动列表据顶部边位置微调
		var Min			= options.min			|| 0;				//列表绑定最小值
		var Max			= options.max			|| 12;				//列表绑定最大值
		var Format		= options.format		|| "{0}";			//列表项文字格式，例如：{0}年
		var Width		= options.width			|| "80px";			//列表宽度
		var Height		= options.height		|| "120px";			//列表高度
		var OnChanged	= options.onChanged		|| function(val,obj){};	//当前列表项改变时触发的事件
		var DataSource	= options.dataSource	|| [];				//数据源：{name,value}数组
		var BindEvent	= options.bindEvent		|| "focus";			//显示浮动列表的绑定事件		
		var Container	= options.container		|| ".vOuter";		//容器
		var MenuMode	= options.menuMode		|| false;			//菜单模式
		if($(Container).length==0) Container="body";
		
		var regFormat=/\{0\}/g;
		this.each(function(){
			new LoadFList(this);
		});
		
		function LoadFList(BindTarget){
			var Target=$(BindTarget);
			var Name="_FList_"+Target.attr("id");
			var all=$("#"+Name);
			if(all.length==0){
				var pos=AbsLoc(Target);
				all=$("<div id='"+Name+"'></div>").addClass("FList").css({
				    overflow:"auto",
				    position:"absolute",
				    top:pos.top + pos.height + TopAlpha + "px",
				    left:pos.left + LeftAlpha + "px",
				    border:"solid 1px #000000",
				    width:Width,
				    height:Height,
				    background:"#F0F0F0",
				    color:"#747474",
				    cursor:"pointer"
				}).appendTo($(Container)).hide();
				
				if(MenuMode){
					BindEvent="mouseover";					
					all.mouseout(function(e){						
						if(e.relatedTarget!=this && e.relatedTarget.parentNode!=this) {
							$(this).slideUp();
						}
					});
				}
				
				if(DataSource.length==0){					
					for(var i=Min;i<Max;i++){
						DataSource[DataSource.length]={name:i,value:i};
					}
				}
				$.each(DataSource,function(i,obj){
					var d=$("<div></div>").css({padding:"5px","text-align":"center"}).mouseover(function(){
						$(this).css("backgroundColor",SelectColor);
					}).mouseout(function(){
						$(this).css("backgroundColor",'#fff');
					}).click(function(){
						Target.val($(this).text());
						all.slideUp();
						OnChanged($(this).attr("value"),this);
					}).text(Format.replace(regFormat,obj.name)).attr("value",obj.value).appendTo(all);
					$.each(obj,function(k,v){
						if(k!="name" && k!="value")	d.attr(k,v);
					});
					if(Target.val()==d.text()) d.css("backgroundColor",SelectColor);//选中默认值
					if(MenuMode){
						d.mouseout(function(e){e.stopPropagation();});
					}
				});				
				
				$(document).click(function(){if(this!=Target[0]) all.slideUp();});
				$("iframe").contents().find("body").click(function(){all.slideUp();});
				Target.click(function(e){							
					e.stopPropagation();
				}).bind(BindEvent,function(){
					$(".FList").hide();
					var pos=AbsLoc(Target);
					all.css({
						left:pos.left + LeftAlpha + "px",
						top:pos.top + pos.height + TopAlpha + "px"
					}).slideDown();					
					
					var v=Target.val();					
					all.find("div").each(function(){
						if($(this).text()==v) {
							$(this).css("backgroundColor",SelectColor);
							this.scrollIntoView(true);
						}else {
							$(this).css("backgroundColor","#fff");
						}
					});					
				});
			}
		}
		
		function AbsLoc(e){
			var elmt = e[0];
			var t = elmt.offsetTop;
			var l = elmt.offsetLeft;
			var w = elmt.offsetWidth;
			var h = elmt.offsetHeight;
			while( elmt = elmt.offsetParent ){
				if ( elmt.style.position == 'absolute' || elmt.style.position == 'relative' || ( elmt.style.overflow != 'visible' && elmt.style.overflow != '' ) ) break;			
				t += elmt.offsetTop;
				l += elmt.offsetLeft;
			}
			return { top: t, left: l,width: w, height: h };
		} 
	}
})(jQuery);