;(function($){
	$.fn.extend({
		/*
		*   程序入口 生成必要的输入项
		
		*   data  数据源  可以直接为json对象，也可是一个请求路径，如果为路径则直接初始化返回的数据
		*   option  select框的参数,如没有其他修改可以不传
		
			option 中 itemClick为每个选项点击后的回调函数 返回 传入list中的一个object
		*/	
		"initSelect":function(data,option){
			
			//复制输入框信息
			var tempid=$(this).attr("id");
			var tempClass=$(this).attr("class");
			var tempName=$(this).attr("name");
			var tempValue=$(this).attr("value");
			//生成输入框
//			var html='<input name="'+tempName+'" id="'+tempid+'" type="hidden"/>';
			var html=document.getElementById(tempid).cloneNode(true);
			html.type="hidden";
			$(this).after(html);
			if(document.getElementById(tempid+"_temp")){
				var templet=document.getElementById(tempid+"_temp");
				templet.type="text";
				$("#"+tempid+"_temp_select").remove();
			}else{
				var templet=document.getElementById(tempid).cloneNode(true);
				templet.name=tempName+"_temp";
				templet.id=tempid+"_temp";
				templet.readOnly="readonly";
				templet.className=" drop_icon";
				$(this).after(templet);	
			}
//			html+='<input name="'+tempName+'_temp" id="'+tempid+'_temp" type="text" class="drop_icon" readonly="readonly" />';
			//清除原有的input框
			$(this).remove();
			//获取参数
			if(!option) option=new Object();
			var config=loadConfig(option,this);
			/*获取数据
			*	如果data是请求路径的话 会请求该路径，并返回请求返回的数据
			*	如果data为object的话，直接返回data
			*/			
			if(typeof(data)=='string'){
				$.ajax({
				   type: "POST",
				   url: jCRS.webroot+data,
				   async :false,
				   success: function(result){
					      var json=eval('('+result+')');
					  	  $("#"+tempid+"_temp").bind("click",function(){	
							  $(this).loadSelect(json,tempid,config);
							  $("#"+tempid+"_temp_select").find("li").attr("class","");
							  var liId=$("#"+tempid).val();
							  if(liId){
							      $("#"+tempid+"_temp_select").find("#"+liId).attr("class","option_select");										  
							  }
						  });
						  initSelectValue(tempValue,json,tempid,config);
				   }
				}); 
			}
			if(typeof(data)=='object'){
				$("#"+tempid+"_temp").unbind("click");
				$("#"+tempid+"_temp").bind("click",function(){	
					$(this).loadSelect(data,tempid,config);
					$("#"+tempid+"_temp_select").find("li").attr("class","");
					var liId=$("#"+tempid).val();
					if(liId){
				      $("#"+tempid+"_temp_select").find("#"+liId).attr("class","option_select");										  
				    }
				});	
				if(data!=null && data.length>0){
					initSelectValue(tempValue,data,tempid,config);
				}else{
					$("#"+tempid).val("");
					$("#"+tempid+"_temp").val("");
				}
			}
		},
		/*
		 *刷新select框 select框创建后，需要改变选中的option
		 *  optionId 需要设置为选中状态的key
		 */
		"refreshSelect":function(optionId){
			var tempId=$(this).attr("id");
			//模拟鼠标点击事件  以便初始化div
			var fireOnThis = document.getElementById(tempId+"_temp");
			if (document.createEvent){
              var evObj = document.createEvent('MouseEvents');
              evObj.initEvent( 'click', true, false );
              fireOnThis.dispatchEvent(evObj);
            }
            else if (document.createEventObject){
                 fireOnThis.fireEvent('onclick');
            }
			//关闭div下拉窗口 
			$("#"+tempId+"_temp_select").hide();
			//隐藏的输入框
			$("#"+tempId).val(optionId);
			//用于显示的下拉框
			var optionValue=$("#"+optionId).text();
			if(optionValue!=null && optionValue!=""){
				$("#"+tempId+"_temp").val(optionValue);
			}else{
				alert("select框中不存在key为"+optionId+"的选项");
			}
		},
		/*
		* 销毁select框
		*/
		"destorySelect":function(){
			var tempId=$(this).attr("id");
			$("#"+tempId+"_temp").val("");
			$("#"+tempId).val("");
			$("#"+tempId+"_temp_select").remove();
		},
		/*
		* 生成div的选择项的方法,以及绑定事件
		*   jsonObj  数据源  json对象
		*   hiddenTargetId  隐藏的表单域  用于提交select框的ID
		*	config  参数信息
		*/	
		"loadSelect":function(jsonObj,hiddenTargetId,config){
//			alert(jsonObj[0].id);
			var tempName=this.attr("id");
			
			//生成显示select框数据的div			
			var divId=this.attr("id")+"_select";
			//判断div是否存在
			if($("#"+divId).attr("class")==null || $("#"+divId).attr("class")==""){
				//生成用于显示选择内容的div，和内部内容
				createDiv(jsonObj,divId,config,this);
				//循环所有元素
				$("#"+divId).find("li").each(function(){
					//给每个选项绑定事件
					$(this).bind("click",function(){
						$("#"+tempName).val($(this).text());
						$("#"+hiddenTargetId).val($(this).attr("id"));
						$("#"+divId).hide();
						if(config.reload){
							$("#"+divId).remove();
						}
						var tempObj=""
						if(config.itemClick){
							for(var j=0;j<jsonObj.length;j++){
								if(jsonObj[j][config.key]==$(this).attr("id")){
								    tempObj=jsonObj[j];
								    break;
								}
							}
							config.itemClick.call(window,tempObj);	
						}						
					});
					var className="";
					$(this).hover(
					  function () {
					  	className=$(this).attr("class");
					    $(this).attr("class","option_hover");
					  },
					  function () {
						$(this).attr("class",className);
					  }
					); 	
				});			
				//显示div
				$("#"+divId).show();
			}else{
				$("#"+divId).show();						
			}			
			setTimeout(function(){
		  		//点击页面关闭窗口
				$("body:not("+divId+")").bind("click", function(){			  	
				  	
				  	$("#"+divId).hide();				 
				  	$("body").unbind("click");			  				  	
				});
		  	},500);		
		}
	});
	//载入select框的初始参数
	function loadConfig (option,obj){
		var config={
			selfDefineEntity:'' ,/*下拉框的自定义option 比如：“请选择”，“全部”之类的选项
								    注：如果设置了本选项，切dafaultValue为空的时候，本选项将为选中状态，
								        如dafaultValue不为空则仅添加本选项到列表中，不为选中状态
								    当selfDefineEntity为空时，忽略此项设置
								    当selfDefineEntity=字符串时,会自动添加 {key : '',value:'字符串名'}的选项
								    当selfDefineEntity为json object时 会将传入的json对象添加到选择框中
								    json对象格式，例：{key：'all'，value：'全部'}或{key：''，value：'请选择'}
								  */
			dafaultValue:'',//下拉框的初始值  当设置成dafaultValue='firstEntity'时，默认显示下拉框的第一个值
			optionWidth:70,//每个选项的宽度
			row:'4',     //每行显示几列		
			top : 159,   //距离顶部高度  (如果不传 默认根据调用插件的元素定位)
			left : 28,	 //距离页面左端距离	(如果不传 默认根据调用插件的元素定位)
			height : 'auto', //div高度  （不要修改）
			width : 550,  //div宽度	（不要修改  会根据列数自动算出） 
			key:"key",  //传入的数据中 哪个属性被设置为select框的key值
			value:"value",  //传入的数据中 哪个属性被设置为select框的value值
			reload:false   //是否每次都刷新生成的div
//			itemClick:function(data){} 回调函数 当下拉框中内容被点击时发生，返回的data为传入的json数组的一个成员obj
		}
		$.extend(config,option);
		if(!option.top){
		   config.top=obj.offset.top;
		}else{
		   config.top=Number(obj.offset.top +10);
		}
		//宽度=行数*每行宽度+行数*15像素（因为单元格间距）
		config.width=Number(config.row)*Number(config.optionWidth)+Number(config.row)*15+"px";
	
		if(!option.left){
		   config.left=obj.offset.left;
		}
			
		return config;
	}	
	//生成用于显示选择内容的div，和内部内容
	function createDiv(jsonObj,divId,config,obj){
		var divHtml=$.browser.msie ? "<br/>" : "";
		if(config.height=='auto'){
		    divHtml+='<div id="'+divId+'" class="select" style="width:'+config.width+'"></div>';
		}else{
	       divHtml+='<div id="'+divId+'" class="select" style="overflow-y:scroll;overflow-x:hidden;width:'+config.width+';height:'+config.height+'px"></div>';
		}
		$(obj).after(divHtml);
		//在select框内填充数据
		var	html="<ul>";
		var keyStr="";
		var valueStr="";
		if(jsonObj!=null && jsonObj.length>0){
			for(var i=0;i<jsonObj.length;i++){
				html+="<li style='cursor: pointer;width:"+config.optionWidth+"px'  id="+jsonObj[i][config.key]+" title="+jsonObj[i][config.value]+">"+jsonObj[i][config.value]+"</li>";
			}
		}
		html+="</ul>"
		$("#"+divId).append(html);
		if(config.selfDefineEntity){
			var selfDefineObj={key:'',value:''};
			if(typeof(config.selfDefineEntity)=='string'){
				selfDefineObj.value=config.selfDefineEntity;
			}
			if(typeof(config.selfDefineEntity)=='object'){
				selfDefineObj=config.selfDefineEntity;
			}
			var selfLi="<li style='cursor: pointer;width:"+config.optionWidth+"px'  id="+selfDefineObj.key+">"+selfDefineObj.value+"</li>";
			$("#"+divId).prepend(selfLi);
		}
	}
	/*
	*	初始化select框的value
	*	initValue  select框的初始值 为ID 如果没有，则不进行初始化
	*   data  查询出的数据
	*   config  config.key  指定的key值   config.value 指定的value值
	*/	
	function initSelectValue(initValue,data,tempid,config){
		if(config.dafaultValue) initValue=config.dafaultValue;				
		if(initValue!=null && initValue!=""){
			if(initValue=="firstEntity"){
				$("#"+tempid).val(data[0][config.key]);
				$("#"+tempid+"_temp").val(data[0][config.value]);
			}else{
				for(var i in data){
	//				alert(data[i][config.key]+"=="+initValue);
					if(data[i][config.key]==initValue){
	//					alert(data[i][config.key]+"=="+data[i][config.value]);					
						$("#"+tempid).val(data[i][config.key]);
						$("#"+tempid+"_temp").val(data[i][config.value]);
						break;
					}	
				}
			}			
		}else{
			if(config.selfDefineEntity){
				var selfDefineObj={key:'',value:''};
				if(typeof(config.selfDefineEntity)=='string'){
					selfDefineObj.value=config.selfDefineEntity;
				}
				if(typeof(config.selfDefineEntity)=='object'){
					selfDefineObj=config.selfDefineEntity;
				}
				$("#"+tempid).val(selfDefineObj.key);
				$("#"+tempid+"_temp").val(selfDefineObj.value);
			}
		}
	}	
})(jQuery)