var RELAT_LIST_XML_NOT_LOADED='The XML file has not been loaded, please verifies the file path.',RELAT_LIST_XML_INVALID='You have inserted a invalid XML file, please verify documentation.',NO_XMLHTTP='Your browser does not support XMLHTTP.',FIRED_RL=[];
function RelationalList(mainNode,subNode,mainXML,subXML,mainNodeIndexSelected,subNodeIndexSelected){this.mainNode=this.getInstance(mainNode);this.mainNodeID=mainNode;this.subNode=this.getInstance(subNode);this.subNodeID=subNode;this.selectIndexs=[[],[]];if(mainNodeIndexSelected){if(mainNodeIndexSelected.push){this.selectIndexs[0]=mainNodeIndexSelected;}else{this.selectIndexs[0][0]=mainNodeIndexSelected;}}if(subNodeIndexSelected){if(subNodeIndexSelected.push){this.selectIndexs[1]=subNodeIndexSelected;}else{this.selectIndexs[1][0]=subNodeIndexSelected;}}function clearList(){FIRED_RL=[];};if(this.mainNode!=null&&this.subNode!=null){this._addEventListener(this.mainNode,'click',clearList);this._addEventListener(this.subNode,'click',clearList);this.readXML(mainXML,'main');this.readXML(subXML,'sub');}}RelationalList.prototype={_inArray:function(array,item){for(var i=0;i<array.length;i++){if(array[i]==item)return true;}return false;},_addEventListener:function(el,evt,fn){if(window.addEventListener){el.addEventListener(evt,fn,false);}else if(window.attachEvent){el.attachEvent("on"+evt,fn);}else{el["on"+evt]=fn;}},_fireEvent:function(e,evt){ua=navigator.userAgent;if(ua.match(/MSIE\s([^;]*)/)){e.fireEvent("on"+evt);}else{var ev=document.createEvent("HTMLEvents");ev.initEvent(evt,true,true);e.dispatchEvent(ev);}},_refreshMaster:function(){if(this.subNode.options[this.subNode.selectedIndex]){var masternode=this.subNode.options[this.subNode.selectedIndex].getAttribute('masternode',true);for(var i=0;i<this.mainNode.options.length;i++){if(this.mainNode.options[i].value==masternode){this.mainNode.selectedIndex=i;break;}}}},_refreshSlave:function(){var toLoad=[];for(var i=0;i<this.mainNode.options.length;i++){if(this.mainNode.options[i].selected){if(this.mainNode.options[i].value=='*'){toLoad=[];break;}toLoad[toLoad.length]=this.mainNode.options[i].value;}}if(toLoad.length==0){this.loadNodes(this.subNode,this.subXML);}else{var optElements=new Array(),groupsNode=this.subXML.getElementsByTagName('group'),groupId;for(var i=0;i<groupsNode.length;i++){groupId=groupsNode[i].getAttribute('id');if(this._inArray(toLoad,groupId)){var temp=groupsNode[i].getElementsByTagName('option');for(var j=0,l=temp.length;j<l;++j){temp[j].setAttribute('masternode',groupId);optElements[optElements.length]=temp[j];}}}this.insertOptions(optElements,this.subNode);}},getInstance:function(ident){var element=document.getElementById(ident);if(element!=null)return element;element=document.getElementsByName(ident);for(var i=0;i<element.length;i++){if(element[i].tagName.toUpperCase()=='SELECT')return element[i];}return null;},selectElements:function(node,indexs){if(indexs.length>0){for(var i=0;i<node.options.length;i++){for(var j=0;j<indexs.length;j++){if(node.options[i].value==indexs[j]){node.options[i].selected=true;}}}}},state_Change:function(xmlDoc,element){var me=this;if(element=='main'){this.mainXML=xmlDoc;this.loadNodes(this.mainNode,this.mainXML);me.selectElements(me.mainNode,me.selectIndexs[0]);this._addEventListener(this.mainNode,'change',function(){if(!me._inArray(FIRED_RL,me.subNodeID)){FIRED_RL[FIRED_RL.length]=me.mainNodeID;FIRED_RL[FIRED_RL.length]=me.subNodeID;me._refreshSlave();me._fireEvent(me.subNode,'change');}});}else{this.subXML=xmlDoc;this.loadNodes(this.subNode,this.subXML);if(me.selectIndexs[0].length>0){me._refreshSlave();}me.selectElements(me.subNode,me.selectIndexs[1]);if(this.subNode.options.length>=(this.selectIndexs[1]+1)){this.subNode.selectedIndex=this.selectIndexs[1];}this._addEventListener(this.subNode,'change',function(){if(!me._inArray(FIRED_RL,me.mainNodeID)){FIRED_RL[FIRED_RL.length]=me.subNodeID;FIRED_RL[FIRED_RL.length]=me.mainNodeID;me._refreshMaster();me._fireEvent(me.mainNode,'change');}});}},loadNodes:function(selectNode,xml){var me=this,optElements=new Array(),groupsNode=xml.getElementsByTagName('group'),groupId;if(groupsNode.length==0){optElements=xml.getElementsByTagName('option');}else{for(var i=0;i<groupsNode.length;i++){groupId=groupsNode[i].getAttribute('id');var temp=groupsNode[i].getElementsByTagName('option');for(var j=0,l=temp.length;j<l;++j){temp[j].setAttribute('masternode',groupId);optElements[optElements.length]=temp[j];}}}if(optElements.length==0){alert(RELAT_LIST_XML_INVALID);return;}this.insertOptions(optElements,selectNode);},readXML:function(xmlUrl,element){var xmlHTTP,me=this;xmlUrl+='?'+(new Date()).getTime();if(window.XMLHttpRequest){xmlHTTP=new XMLHttpRequest();xmlHTTP.onreadystatechange=function(){if(xmlHTTP.readyState==4)if(xmlHTTP.status==200){me.state_Change(xmlHTTP.responseXML,element);}else{alert(RELAT_LIST_XML_NOT_LOADED);}};xmlHTTP.open('GET',xmlUrl,true);xmlHTTP.send(null);return true;}else if(window.ActiveXObject){var i,activexlist=['MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP','Microsoft.XMLHTTP','Microsoft.XMLDOM'];for(i=0;i<activexlist.length;i++){try{xmlHTTP=new ActiveXObject(activexlist[i]);break;}catch(e){}};if(xmlHTTP){if(i==activexlist.length-1){xmlHTTP.onreadystatechange=function(){if(xmlHTTP.readyState==4)if(xmlHTTP.status==200){me.state_Change(xmlHTTP,element);}else{alert(RELAT_LIST_XML_NOT_LOADED);}};xmlHTTP.load(xmlUrl);}else{xmlHTTP.onreadystatechange=function(){if(xmlHTTP.readyState==4)if(xmlHTTP.status==200){me.state_Change(xmlHTTP.responseXML,element);}else{alert(RELAT_LIST_XML_NOT_LOADED);}};xmlHTTP.open('GET',xmlUrl,true);xmlHTTP.send(null);}return true;}}alert(NO_XMLHTTP);return false;},clearOptions:function(selectDomElement){while(selectDomElement.length>0){selectDomElement.remove(0);}},insertOptions:function(optElements,selectDomElement){this.clearOptions(selectDomElement);for(var i=0;i<optElements.length;i++){var optValue=optElements[i].getAttribute('value'),optText=(optElements[i].firstChild)?optElements[i].firstChild.nodeValue:null;if(optValue!=null&&optText!=null){optTag=document.createElement('OPTION');optTag.text=optText;optTag.value=optValue;optTag.setAttribute('masternode',optElements[i].getAttribute('masternode'),true);if(navigator.userAgent.indexOf('MSIE')!=-1){selectDomElement.add(optTag);}else{selectDomElement.add(optTag,null);}}else{alert(RELAT_LIST_XML_INVALID);return;}}}};if(document.addEventListener){window.addEventListener('load',function(){LoadRelationalList();},false);}else if(document.attachEvent){window.attachEvent('onload',function(){LoadRelationalList();});}else{window["onload"]=function(){LoadRelationalList();};};