var DataWin = function(opts){
  	this.initialize(opts);
};
DataWin.createLI= function(el,n,v,t,chk,dsb,ev){
	var chkS = chk?'checked="checked"':'';
	var dsbS = dsb?'disabled="disabled"':'';		
	var str = '<input type="checkbox" '+ev+' name="'+n+'" id="'+n+'_'+v+'" value="'+v+'" '+chkS+' '+dsbS+'/><label for="'+n+'_'+v+'" title="'+t+'">'+t+'</label>';
	var li = document.createElement('li');
	li.innerHTML = str;
	el.appendChild(li);
};
DataWin.get= function(id,rt){
	for(var i=0;i<DataWin.data.length;i++){if(DataWin.data[i][3]==id){return DataWin.data[i][rt];}}
};
DataWin.filter= function(id){
	var ii=0;
	var oData = new Array();	
	for(var i=0;i<DataWin.data.length;i++){
		if(DataWin.data[i][0]==id){
			oData[ii] = DataWin.data[i];
			ii++;
		}
	}
	return oData;
};

DataWin.initParent= function(){
	var oDt = DataWin.filter(0);
	DataWin.slt_parent.options.length = 0;
	var sltIds = ','+DataWin.sltstr;
	for(var i=0;i<oDt.length;i++){
		var opt = document.createElement("OPTION");
		opt.value = oDt[i][3]; 
		opt.text = oDt[i][4]; 
		if(sltIds!=','&&sltIds.indexOf(','+oDt[i][3]+',')!=-1){
			opt.selected = true;
			DataWin.chk_parent.checked = true;
		}
		DataWin.slt_parent.options.add(opt);
	};
	Ext.addBehaviors({	 
		'select[id=slt_parent]@change':function(){DataWin.initChild();},
		'input[id=chk_parent]@click':function(){DataWin.choose(this,0);}
	});
	for(var i=0;i<DataWin.slt_parent.options.length;i++){
		if(DataWin.slt_parent.options[i].value=='23'||DataWin.slt_parent.options[i].value=='286'){DataWin.slt_parent.options[i].selected = true;break;}
	}
};
DataWin.initChild= function(){
	var slt_parent = DataWin.slt_parent.options[DataWin.slt_parent.selectedIndex].value;
	var sltIds = ','+DataWin.sltstr;
	var oDt = DataWin.filter(slt_parent);
	DataWin.shw_child.innerHTML = ''; 
	var dsb = false;
	var chk = false;
	if(sltIds.indexOf(','+slt_parent+',')!=-1){
		chk = dsb = DataWin.chk_parent.checked = true;
	}else{
		chk = dsb = DataWin.chk_parent.checked = false;
	};
	for(var i=0;i<oDt.length;i++){
		if(sltIds!=','&&sltIds.indexOf(','+oDt[i][3]+',')!=-1&&!dsb) chk = true;
		else chk = false;
		DataWin.createLI(DataWin.shw_child,'shw',oDt[i][3],oDt[i][4],chk,dsb,'onclick="DataWin.choose(this,1);"');
	};
};	
DataWin.remove= function(obj){
	if(typeof obj=='undefined' ) return;
	var value = DataWin.slt_parent.options[DataWin.slt_parent.selectedIndex].value;
	var pv = DataWin.get(obj.value,0);
	var els = Ext.DomQuery.select('input[name=shw]');
	var oNode = Ext.getDom('ipt_'+obj.value);
	
	if(oNode&&oNode.nodeType===1){
		DataWin.ipt_child.removeChild(oNode.parentNode);
		if(pv==0){
			for(var m=0; m< els.length; m++){
				els[m].checked = false;
				els[m].disabled = false;
			}
			DataWin.chk_parent.checked = false;
		}else{
			for(var n=0; n< els.length; n++){
				if(els[n].value==obj.value) els[n].checked = false;
			}
		}
		DataWin.iptIds();
	}
};
DataWin.removeSlt= function(obj,m){
	if(typeof obj=='undefined' ) return;
	var value = (m==0)?DataWin.slt_parent.options[DataWin.slt_parent.selectedIndex].value:obj.value;
	var eli = Ext.DomQuery.select('input[name=ipt]');
	var exist = false;
	for(var i=0; i< eli.length; i++){
		if(eli[i].value==value) exist = true;
	};
	if(exist){
		var oNode = Ext.getDom('ipt_'+value);
		if(oNode&&oNode.nodeType===1){
			DataWin.ipt_child .removeChild(oNode.parentNode);
			DataWin.iptIds();
		}
	};
};
DataWin.choose= function(obj,flag){
	if(typeof obj=='undefined' ) return;
	if(flag==0){//选中全部
		var els = Ext.DomQuery.select('input[name=shw]');
		for(var i=0; i< els.length; i++){
			els[i].checked = obj.checked;
			els[i].disabled = obj.checked;
		}
	};
	if(obj.checked){DataWin.add(obj,flag);
	}else{DataWin.removeSlt(obj,flag);}
};
DataWin.add= function(obj,flag){
	if(typeof obj=='undefined' ) return;
	var slt_parent = DataWin.slt_parent.options[DataWin.slt_parent.selectedIndex].value;
	var value = (flag==0)?slt_parent:obj.value;
	var eli = Ext.DomQuery.select('input[name=ipt]');
	if(flag==0){
		var oDt = DataWin.filter(slt_parent);	
		var oNode = null;
		for(var m=0; m< eli.length; m++){
			for(var n=0; n< oDt.length; n++){
				if(eli[m].value==oDt[n][3]){
					oNode = Ext.getDom('ipt_'+eli[m].value);
					if(oNode&&oNode.nodeType===1){
						DataWin.ipt_child.removeChild(oNode.parentNode);
					}
				}
			}
		}
		DataWin.iptIds();
	};
	if(obj.checked){
		el_ipt = DataWin.sltstr.split(',');
		if(el_ipt.length-1>=DataWin.max){
			alert('最多只能选择'+DataWin.max+'项');
			if(flag==0){
				var els = Ext.DomQuery.select('input[name=shw]');
				for(var i=0; i< els.length; i++){
					els[i].checked = false;
					els[i].disabled = false;
				}
			}
			obj.checked = false; return ;
		}
	}
	var exist = false;
	for(var i=0; i< eli.length; i++){
		if(eli[i].value==value) exist = true;
	};
	if(!exist){
		DataWin.createLI(DataWin.ipt_child,'ipt',value,DataWin.get(value,4),false,false,'onclick="DataWin.remove(this);"');
		DataWin.iptIds();
	};
};
DataWin.iptIds= function(){
	var eli = Ext.DomQuery.select('input[name=ipt]');
	var ids  = '';
	for(var i=0; i< eli.length; i++){
		if(!isNaN(parseInt(eli[i].value))) ids += eli[i].value +',';
	}
	DataWin.sltstr = ids;
	return ids ;
},
DataWin.iptNames= function(){
	var eli = DataWin.sltstr.split(','), names = '';
	for(var i=0; i< eli.length; i++){
		if(!isNaN(parseInt(eli[i]))) names += DataWin.get(eli[i],4) +',';
	}
	return names;
},
DataWin.init= function(){
	var arr = DataWin.sltstr.split(',');
	DataWin.ipt_child.innerHTML = '';
	for(var i=0; i<arr.length; i++){
		if(!isNaN(parseInt(arr[i]))){
			DataWin.createLI(DataWin.ipt_child,'ipt',arr[i],DataWin.get(arr[i],4),false,false,'onclick="DataWin.remove(this);"');
		}
	};
};
DataWin.uiStr= function(){
return ['',
		'<div class="dataDiv">',
		'<fieldset class="data_win">',
		'<legend><select id="slt_parent"></select><input id="chk_parent" type="checkbox" value="0" /><label for="chk_parent">选择以下所有<span id="the_units"></span></label></legend>',
		'<ul id="shw_child"></ul></fieldset> ',
		'<fieldset class="data_win">',
		'<legend>您选择了以下<span id="the_unit"></span> [如想取消请单击对应选项]</legend>',
		'<ul id="ipt_child"></ul></fieldset> ',
		'</div>',
		''].join('');
};
DataWin.win = null;
DataWin.data = null;
DataWin.max = 5;
DataWin.name = '';
DataWin.title =  '';
DataWin.def = '';
DataWin.sltstr =  '';
DataWin.slt_parent = '';
DataWin.chk_parent = '';
DataWin.shw_child = '';
DataWin.ipt_child = '';
DataWin.ipt_id = '';
DataWin.ipt_name = '';
DataWin.aExecute = null;

DataWin.prototype = {
	initialize: function(opts){
		var options = opts || {};
		DataWin.data = this.data = options.data || null; //数据
		DataWin.sltstr = this.sltstr = options.sltstr || ''; //初始编号
		DataWin.max = this.max = options.max || 5; //最多选择项
		DataWin.name = this.name = options.name || '地区'; //项目名
		DataWin.title = this.title = options.title || '选择工作地区'; //标题
		DataWin.def = this.def = options.def || ''; //为空时默认值
		DataWin.ipt_id = this.iptId = options.iptId || null; //输出编号ID
		DataWin.ipt_name = this.iptName = options.iptName || null; //输出名字ID
		DataWin.aExecute = this.aExecute = options.aExecute || null; //事后执行的函数
		if(this.data==null) throw new Error("没有提供数据!");
		if(!DataWin.win){
			DataWin.win = new Ext.Window({
				title:this.title, 
				layout:'fit',
				width:500,
				closeAction:'hide',
				plain: true,
				modal:true, 
				shadow:false, 
				bodyStyle:'padding:5px;', 
				html:DataWin.uiStr(),
				resizable:false ,
				autoHeight:true, 
				buttons: [{  
					text:'确定',
					handler: function(){
						if(DataWin.ipt_id) document.getElementById(DataWin.ipt_id).value = DataWin.sltstr;
						if(DataWin.ipt_name) document.getElementById(DataWin.ipt_name).value = DataWin.iptNames();
						if(DataWin.sltstr=='') document.getElementById(DataWin.ipt_name).value = DataWin.def;
						DataWin.win.hide();
						DataWin.win.close();
						if(DataWin.aExecute!=null && DataWin.aExecute!='' ) {
						  try{
							  eval(DataWin.aExecute);
						  }catch(e){
							  //alert('error');
						  }
						}						
					},
					listeners : new Ext.KeyMap(document,{
						key: 13, // or Ext.EventObject.ENTER
						fn: function(){if(DataWin.win.isVisible()){
						if(DataWin.ipt_id) document.getElementById(DataWin.ipt_id).value = DataWin.sltstr;
						if(DataWin.ipt_name) document.getElementById(DataWin.ipt_name).value = DataWin.iptNames();
						if(DataWin.sltstr=='') document.getElementById(DataWin.ipt_name).value = DataWin.def;
							DataWin.win.hide();
							DataWin.win.close();
						}}
					})
				},{
					text:'关闭',
					handler: function(){if(DataWin.win) DataWin.win.hide();DataWin.win.close();}
				}]
			});	
			//DataWin.win.hide = function(){DataWin.win.close();}
		};
	},
	show: function(){
		DataWin.win.show();
		DataWin.sltstr = document.getElementById(this.iptId).value;
		DataWin.slt_parent = this.slt_parent = document.getElementById('slt_parent');
		DataWin.chk_parent = this.chk_parent = document.getElementById('chk_parent');
		DataWin.shw_child = this.shw_child = document.getElementById('shw_child');
		DataWin.ipt_child = this.ipt_child = document.getElementById('ipt_child');
		DataWin.init();
		DataWin.initParent();
		DataWin.initChild();
		if(Ext.getDom('the_unit')) Ext.getDom('the_unit').innerHTML = DataWin.name;
		if(Ext.getDom('the_units')) Ext.getDom('the_units').innerHTML = DataWin.name;		
	}
}


