function listNode(id, pid, text){this.id = id; this.pid = pid; this.text = text;}
function List(objName,selectClass,optioneClass){this.objName = objName; this.selectClass = selectClass; this.optioneClass = optioneClass; this.spaceStr = []; this.pidData = []; this.idData = []; this.str = ""; this.name = null; this.id = null; this.selectedVal = []; this.rootId = null; this.selectedId = null; this.is_first = true; this.listAll = false; this.level = 0; this.firstText = ''; this.otherDefaultText = '==È«²¿=='; this.func = null;}; List.prototype.clone = function(objName,selectClass,optioneClass,spaceStr){var obj = new List(objName); obj.selectClass = selectClass; obj.optioneClass = optioneClass; obj.pidData = this.pidData; obj.idData = this.idData; obj.rootId = this.rootId; obj.selectedId = this.selectedId; obj.is_first = true; obj.level = this.level; obj.listAll = this.listAll; return obj;}
List.prototype.add = function(id, pid, text){if(!this.pidData[pid])this.pidData[pid]=new Array(); this.pidData[pid][this.pidData[pid].length] = id; this.idData[id] = new listNode(id, pid, text); if(!this.idData[pid])this.rootId = id;}; List.prototype.getLevel = function(pid,level){if(this.pidData[pid]){var total=this.pidData[pid].length; for(var i=0;i<total;i++){if(level > this.level)this.level = level; this.getLevel(this.pidData[pid][i], level+1);}}}; List.prototype.display = function(){if(this.name == null)this.name = this.objName+"[]"; if(this.id == null)this.id = this.objName; this.getLevel(this.rootId,1); document.write('<span id="'+this.objName+'_span__1"></span>'); this.str=this.getStr(this.rootId,0); js.Dom.findObj(this.objName+'_span__1').innerHTML = this.str; this.setSelected(); this.is_first = true;}
List.prototype.setSelected = function(selectedId){this.selectedVal = new Array(); if(selectedId)this.selectedId = selectedId; if(!this.selectedId)return false; this.getSelected(this.selectedId); var selectedVal = this.selectedVal; this.selectedVal = new Array(); for(var i=selectedVal.length-1;i>=0;i--){this.selectedVal[this.selectedVal.length] = selectedVal[i]}
for(var i=0;i<this.selectedVal.length;i++){js.Dom.findObj(this.id+"_"+i).value=this.selectedVal[i]; this.changeChildList(this.selectedVal[i],i)}}
List.prototype.getStr = function(pid,level){var str=''; if(pid == 0|| !pid||(!this.is_first&& this.rootId == pid)){if(this.listAll)return this.getOtherStr(level); else return '';}
this.is_first = false; if(!this.pidData[pid]){return '';}
if(this.spaceStr[level])str = this.spaceStr[level]; else if(this.spaceStr[this.spaceStr.length-1])str = this.spaceStr[this.spaceStr.length-1]; str+= '<select name="'+this.name+'" id="'+this.id+'_'+level+'"'; if(this.selectClass)str+=" class=\""+this.selectClass+"\""; str+=' onchange="'+this.objName+'.changeChildList(this.options[this.selectedIndex].value,'+level+')">'; str+= '<option value="0"'; if(this.optioneClass)str+=' class="'+optioneClass+'"'; str+= '>'+(pid == this.rootId ?(this.firstText != '' ? this.firstText : '=='+this.idData[pid].text+'==') : this.otherDefaultText)+'</option>'; var total=this.pidData[pid].length; for(var i=0;i<total;i++){var cid=this.pidData[pid][i]; var cn = this.idData[cid]; str+= '<option value="'+cid+'"'; if(this.optioneClass)str+=' class="'+optioneClass+'"'; str+= '>'+cn.text+'</option>';}
str+= "</select> "; str+='<span id="'+this.objName+'_span_'+level+'">'; if(this.pidData[this.selectedVal[level]]){if(this.selectedVal[level])str+=this.getStr(this.selectedVal[level],level+1); else if(!this.firstOptionText)str+=this.getStr(this.idData[this.pidData[pid][0]].id,level+1);}else if(this.listAll)str+=this.getOtherStr(level+1); str+='</span>'; return str;}
List.prototype.getOtherStr = function(level){if(level < this.level){var str=''; if(this.spaceStr[level])str = this.spaceStr[level]; else if(this.spaceStr[this.spaceStr.length-1])str = this.spaceStr[this.spaceStr.length-1]; str+= '<select name="'+this.name+'" id="'+this.id+'_'+level+'"'; if(this.selectClass)str+=" class=\""+this.selectClass+"\""; str+= '><option value="0"'; if(this.optioneClass)str+=' class="'+optioneClass+'"'; str+= '>'+this.otherDefaultText+'</option>'; str+= "</select> "; str+='<span id="'+this.objName+'_span_'+level+'">'; str+= this.getOtherStr(level+1); str+='</span>'; return str;}else return '';}
List.prototype.changeChildList = function(pid,level){var str=this.getStr(pid,level+1); js.Dom.findObj(this.objName+"_span_"+level).innerHTML = str; if(this.func){var func = this.func; func(pid);}}
List.prototype.getSelected = function(id){if(this.idData[id]&& id != this.rootId){this.selectedVal[this.selectedVal.length] = id; this.getSelected(this.idData[id]['pid']);}}