var RELAT_LIST_XML_NOT_LOADED='The XML file has not been loaded, please verifies the file path.';var RELAT_LIST_XML_INVALID='You have inserted a invalid XML file, please verify documentation.';var NO_XMLHTTP='Your browser does not support XMLHTTP.';
function RelationalList(mainNode,subNode,mainXML,subXML){this.mainNode=this.getInstance(mainNode);this.subNode=this.getInstance(subNode);if(this.mainNode!=null&&this.subNode!=null){this.readXML(mainXML,'main');this.readXML(subXML,'sub');}}RelationalList.prototype={sendEvent:function(e){ua=navigator.userAgent;if(ua.match(/MSIE\s([^;]*)/)){e.fireEvent("onchange");}else{var evt=document.createEvent("HTMLEvents");evt.initEvent("change",true,true);e.dispatchEvent(evt);}},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;},state_Change:function(xmlDoc,element){if(element=='main'){this.mainXML=xmlDoc;this.loadMainNode();}else{this.subXML=xmlDoc;this.loadSubNode('*');}},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;}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;},loadMainNode:function(){var me=this,optElements=this.mainXML.getElementsByTagName("option");me.clearOptions(me.mainNode);if(optElements.length==0){alert(RELAT_LIST_XML_INVALID);return;}this.insertOptions(optElements,this.mainNode);this.mainNode.onchange=function(){me.clearOptions(me.subNode);for(var i=0;i<me.mainNode.options.length;i++)if(me.mainNode.options[i].selected){if(me.mainNode.options[i].value=='*'){me.clearOptions(me.subNode);me.loadSubNode(me.mainNode.options[i].value);break;}me.loadSubNode(me.mainNode.options[i].value);}me.sendEvent(me.subNode);}},loadSubNode:function(filterVal){var optElements=new Array();var groupsNode=this.subXML.getElementsByTagName("group");if(groupsNode.length==0){alert(RELAT_LIST_XML_INVALID);return;}if(filterVal=="*"||filterVal==null)optElements=this.subXML.getElementsByTagName("option");else{for(var i=0;i<groupsNode.length;i++)if(groupsNode[i].getAttribute("id")==filterVal){optElements=groupsNode[i].getElementsByTagName("option");break;}}this.insertOptions(optElements,this.subNode);},clearOptions:function(selectDomElement){while(selectDomElement.length>0)selectDomElement.remove(0);},insertOptions:function(optElements,selectDomElement){for(var i=0;i<optElements.length;i++){var optValue=optElements[i].getAttribute('value');var optText=(optElements[i].firstChild)?optElements[i].firstChild.nodeValue:null;if(optValue!=null&&optText!=null){optTag=document.createElement("OPTION");optTag.text=optText;optTag.value=optValue;if(navigator.userAgent.indexOf('MSIE')!=-1)selectDomElement.add(optTag);else selectDomElement.add(optTag,null);}else{this.clearOptions(selectDomElement);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();};};
