(function($) {
$.widget('ui.es',{
	op:function(x){
		return eval("this.options."+x);
	},
	_$:function(x){
		return $(this.element).find(x);
	},
	_init: function() {
		var self = $(this.element),op = this.options,me=this,pos=$(this.element).offset()
		,box = (this.box=$('<div/>'))
		.hide()
		.addClass('eswin')
		.css({
			width: op.width,
			zIndex: op.zIndex,
			left:pos.left,
			top:pos.top+22,
			position:"absolute"
		})
		.insertAfter(self);
		op.ename=self.attr("enum");
		if(op.aligin=='right' || self.attr("right")=="1"){
			box.css("left",self.offset().left - box.width() + self.width());
		}
		self.click(function(){
				me.open();
				//index=$('input[enum]').index(self);
				//$(".input[enum]").neq(index).close();
				//if(!op.isOpen)me.open();else me.close();
			}
		);
		self.attr("readonly","readonly");
		if(self.attr("max")) op.ecount=self.attr("max");
		if(op.ename==null) op.ename=self.attr('enum');
		if(op.hideObj==null){
			op.hideObj=$("#"+self.attr('hide'));
			if(!op.hideObj[0]) alert('控件参数设置失败 for:'+self.attr('id'));
		};
		//this.box.show();
		if(this.box.html()==""){
			if(op.tb) me._bind();
		}
	},
	_bind:function(yb){
		var self = $(this.element),op = this.options,box=this.box,me=this,hideObj=this.options.hideObj;
		//if(typeof(L)=="function") L();
		box.html(op.loading);
		var ybb=arguments[1]?arguments[1]:true; 
		var uri="/sys/es/ename/"+op.ename+"/ecount/"+op.ecount+"/num/"+op.num;
		$.ajax({type:"GET",url:uri,success:function(data){
			box.html(data);
			box.find(".esTitle span").eq(0).click(function(){me.ok()});
			box.find("#btn_ok").click(function(){me.ok()});
			box.find("#btn_clear").click(function(){box.find("input").attr("checked",false);box.find(".esChoose span").remove();});
			box.find(".esTitle span").eq(1).click(function(){me.close()});
			box.find(".esTitle span").eq(2).click(function(){
				self.val(""),hideObj.val("");box.html("");me.close();
				window.open("/admin/enums/index/set/"+op.ename);
			});
			box.find(".esTitle span").eq(3).click(function(){
					var choose=box.find(".esChoose");
					choose.find("span").remove();
					box.find("input").attr("checked",false).attr("disabled","");
					me._autoHeight();
			});
			if(self.attr("config")!="true") box.find(".esTitle span").eq(2).hide();
			var dqSelect=box.find("#dqSelect");
			if(dqSelect[0]){me._showDq(dqSelect.val());}
			dqSelect.change(function(){me._showDq(dqSelect.val());	});

			var zwSelect=box.find("#zwSelect");
			if(zwSelect[0]){me._showZw(zwSelect.val());}
			zwSelect.change(function(){me._showZw(zwSelect.val());	});
			
			//bind checkbox
			box.find("input:checkbox").click(function(e){
				if($(this).attr("checked")) me._add($(this).parent().attr("value"),$(this).parent().attr("p"),$(this).parent().text());
				else me._del($(this).parent().attr("value"),$(this).parent().attr("p"));
				if(e.stopPropagation)	e.stopPropagation(); else window.event.cancelBubble = true;
			});
			
			//bind item
			esdata=box.find("dt,dd");
			esdata.click(function(){
				var checkbox=$(this).find("input:checkbox");
				if(checkbox.attr("disabled")) return false;
				if(!checkbox.attr("checked")){
					checkbox.attr("checked",true);
					me._add($(this).attr("value"),$(this).attr("p"),$(this).text())
				}else{
					checkbox.attr("checked",false);
					me._del($(this).attr("value"),$(this).attr("p"))
				}
				return false;
			});
			
			//bind em
			var estitle=box.find(".esTitle");
			var slist=estitle.find(".es_search_list");
			var keybox=estitle.find("#es_search");
			
			keybox.bind('keyup',function(event) {     
				 if(event.keyCode==13){     
					estitle.find("#es_search_button").triggerHandler("click");
					return false;
				 }
			}); 
			estitle.find("#es_close").click(function(){slist.hide();});
			//bind search
			estitle.find("#es_search_button").click(function(){
				var key=$.trim(keybox.val());
				if(key==""){
					alert("请输入关键字");
					slist.hide();
					keybox.focus();
					return;
				}
				var finds=esdata.find(":contains('"+key+"')");
				if(finds.length<=0){
					alert("没找到相关的分类!");
					return;
				}
				slist.find("span").remove();
				slist.show();
				finds.each(function(i){
					var txt=$(this).text();
					if($(this).attr("p")!="0")txt="&nbsp;&nbsp;"+txt;
					var item1=$("<span>"+txt+"</span>");
					item1.attr("value",$(this).attr("value"));
					item1.mouseover(function(){
   						$(this).css("background","#FF9");
					});
					item1.mouseout(function(){
   						$(this).css("background","");
					});
					item1.click(function(){
						var sel_input=$("input[value="+$(this).attr("value")+"]",esdata);
						if(!sel_input.attr("checked")){
							sel_input.attr("checked",true);
							me._add(sel_input.attr("value"),sel_input.attr("p"),sel_input.attr("vtitle"))
						}else{
							sel_input.attr("checked",false);
							me._del(sel_input.attr("value"),sel_input.attr("p"))
						}
					});
				   slist.append(item1);
				});
				//slist.find("em").remove();
			});
			var ddbox,opid,pos;
			var list1=box.find("dt");
			list1.mouseover(function(){
				me._close2(opid);
				pos=$(this).offset(),val=$(this).attr("value");
				ddbox=$("#es_2_"+val+op.num);
				if(ddbox.find("dd").length<=0) return;
				
				left1=pos.left-box.offset().left+$(this).width();
				ddbox.css({
					left:left1 - 5,
					top:pos.top-box.offset().top + 10
				});
				list1.css("background","");
				$(this).css("background","#FF9");
				var ddif=ddbox.find("#tip");
				if(!ddif[0]){
					if($.browser.version=="6.0"){
						ddbox.prepend($("<iframe frameborder='0' ></iframe>"));
						ddif=ddbox.find("iframe");
						ddif.height(ddbox.height()).width(ddbox.width() - 5).css("opacity",0);
					}
					ddbox.prepend($("<div id='tip' style='color:red;'>提示：选择子分类，可以更精确定位！</div>"));
				}
				ddbox.show();
				
				opid=val;
			});
			
			box.find(".esChoose").mouseover(function(){me._close2(opid);});
			box.find(".esList").find("em").each(function(){
				if(ddbox.find("dd[p="+$(this).attr("value")+"]").length > 0) $(this).show(); else $(this).hide();
			})
			box.find("dt>input,.esTitle").mouseover(function(){me._close2(opid);});
			me._load();
			//if(typeof(close_win)=="function") close_win();
		  }
		});
		
	},
	_close2:function(opid){
		if(opid){
			$("#es_2_"+opid+this.options.num).hide();
		}else{
			//box.find(".esdd2Box").hide();
		}
	}
	,
	_load:function(){
		var op = this.options,chooses=this.box.find(".esChoose").find("span");
		//this.box.find("input").attr("checked",false);
		chooses.remove();
		//alert(op.hideObj.val());
		if(op.hideObj.val()){
			var vals=op.hideObj.val().split(',');
			op.limited=false;
			var obj;
			for(var index in vals){
				obj= $("#es_c_"+vals[index]+op.num);
				if(obj.attr("checked")) continue;
				var parent=obj.parent().attr("p");			
				obj.attr("checked",true);
				this._add(vals[index],obj.parent().attr("p"),obj.parent().text());
			}
			op.limited=true;
		} 
	},
	open:function(){
		var self = $(this.element),op = this.options,box=this.box,me=this;
		

		$(".eswin").hide();	
		if(this.box.html()==""){
			if(op.hideObj.val()) me._bind(false); else me._bind();
		}
		op.isOpen=true;
		box.show();
		//me._load();
		this._autoHeight();
		if($.validationEngine)$.validationEngine.closePrompt(".formError",true);
	},
	_showDq:function(id){
		this.box.find("dt,dd").hide();
		this.box.find("dt[value="+id+"]").show();
		this.box.find("dd[p="+id+"]").show();
		this._autoHeight();
	},
	_showZw:function(id){
		this.box.find("dt,dd").hide();
		this.box.find("dt[value="+id+"]").show();
		this.box.find("dd[p="+id+"]").show();
		this._autoHeight();
	},
	_autoHeight:function(){
		this.box.find("#es_iframe").height(this.box.height());
	},
	close:function(){this.box.hide();this.options.isOpen=false;},
	_add:function(id,parent,title){
		var me=this,choose=this.box.find(".esChoose"),sel=$("<span value='"+id+"' p='"+parent+"'>"+title+"</span>");
		sel.click(function(){me._del(id,parent)});
		if(choose.find("span[value="+id+"]").length<=0)choose.append(sel);
		if(parent==0){
			choose.find("span[p="+id+"]").remove();
			$("#es_2_"+id+this.options.num).find("input").attr("checked",true).attr("disabled","disabled");
			//$("#es_2_"+id+this.options.num).find("input").attr("checked",false).attr("disabled","disabled");
			if(this.options.ename=='dq'){
				this.box.find("dd[p="+id+"]").find("input").attr("checked",true).attr("disabled","disabled");
			}
			if(this.options.ename=='zw'){
				this.box.find("dd[p="+id+"]").find("input").attr("checked",true).attr("disabled","disabled");
			}

		}else{
			if(this.box.find("dd[p="+parent+"]").length==this.box.find("input:checked[p="+parent+"]").length){
				me._add(parent,0,this.box.find("dd[value="+parent+"]").text());
			}
		}
		if(choose.find("span").length>this.options.ecount && me.options.limited){
			alert("最多只能选取："+this.options.ecount+"项");
			this.box.find("input[value="+id+"]").attr("checked",false).attr("disabled","");
			this.box.find("input[p="+id+"]").attr("checked",false).attr("disabled","");
			choose.find("span[value="+id+"]").remove();
			return;
		}
	},
	ok:function(){
		var  me=this,txtObj=$(this.element),hideObj=this.options.hideObj;
		var chooses=this.box.find(".esChoose").find("span"),t='',v='';
		chooses.each(function(index){
			t+=$.trim($(this).text());
			if(index+1 < chooses.length) t+=',';
		});
		
		checks=this.box.find("input:checked");
		checks.each(function(index){
			v+=$(this).val();
			if(index+1 < checks.length)v+=',';
		});
		if(t!="" && v!=""){
			txtObj.val(t);
			hideObj.val(v);
			$(this.element).trigger("blur");
		}else{
			//txtObj.val(this.box.find(".esChoose").attr("vtitle")+"(不限)");
			if(txtObj.attr("default")) txtObj.val(txtObj.attr("default")); else txtObj.val(this.box.find(".esChoose").attr("vtitle")+"(不限)");;
			hideObj.val(v);
		}
		hideObj.trigger("blur");
		me.close();
	},
	_del:function(id,parent){
		var  me=this,choose=this.box.find(".esChoose");
		this.box.find("input[value="+id+"]").attr("checked",false);
		if(parent==0){
			choose.find("span[p="+id+"]").remove();
			$("#es_2_"+id+this.options.num).find("input").attr("checked",false).attr("disabled","");
			if(this.options.ename=='dq'){
				this.box.find("dd[p="+id+"]").find("input").attr("checked",false).attr("disabled","");
			}
			if(this.options.ename=='zw'){
				this.box.find("dd[p="+id+"]").find("input").attr("checked",false).attr("disabled","");
			}
		}else{

			this.box.find(".esChoose > span[value="+parent+"]").remove();
			this.box.find("input[value="+parent+"]").attr("checked",false);

			this.box.find("input:checked[p="+parent+"]").each(function(){
				if(!choose.find("span[value="+$(this).attr("value")+"]")[0]){

					var sel=$("<span value='"+$(this).attr("value")+"' p='"+$(this).attr("p")+"'>"+$(this).attr("vtitle")+"</span>");
					sel.click(function(){
						me.box.find("input[value="+$(this).attr("value")+"]").attr("checked",false);
						$(this).remove();
					});
					choose.append(sel);
					if(me.options.limited){
						if(choose.find("span").length + 1 > me.options.ecount ){
							alert("最多只能选取："+me.options.ecount+"项");
							//me.box.find("input[p="+parent+"]").attr("checked",false);
							me._del(parent,0);
							return false;
						}
					}
				}
			})
		}
		this.box.find(".esChoose > span[value="+id+"]").remove();
	}
});	

$.extend($.ui.es, {
	version: "1.0.1",
	defaults: {
		loading:"<img src='/style/images/load.gif' />正在载入数据，请稍候...",
		width:530,
		height:'auto',
		ename:null,
		txtObj:null,
		hideObj:null,
		ecount:5,
		limited:true,
		etitle:'',
		zIndex:999999,
		isOpen:false,
		aligin:'left',
		num:"",
		tb:true
	}
});

})(jQuery);
