/// XML Class ///
XML.prototype.setBrowser=function(){var agent=window.navigator.userAgent;if(agent.match(/msie/ig))this.browser='ie';else if(agent.match(/firefox/ig))this.browser='ff';else if(agent.match(/opera/ig))this.browser='op';}
XML.prototype.setRequestObj=function(){	if(this.browser!='ie'){this.requestObj= (new XMLHttpRequest());}else if (this.browser=='ie'){try {this.requestObj= (new ActiveXObject("Msxml2.XMLHTTP"));} catch (e){try{this.requestObj= (new ActiveXObject("Microsoft.XMLHTTP"));}catch (e){}}}else this.requestObj=null;}
XML.prototype.fromSyncRequest=function(_url,_rType, _requestHeaders,_method,_message)
{ if(!this.requestObj) this.setRequestObj(); if(!_method) _method="GET"; this.requestObj.open(_method,_url, false);
  if(_requestHeaders && _requestHeaders!=''){var headers=_requestHeaders.split('&');for(var i=0; i<headers.length; i++){var temp=headers[i].split('=')
  if(temp.length>1)this.requestObj.setRequestHeader(temp[0],temp[1]);}}if(!_message)this.requestObj.send(null);else this.requestObj.send(_message);
  switch(_rType){case 0:	return this.requestObj.responseText;case 1: return this.requestObj.responseXML;case 2: return this.requestObj.responseStream;default:return this.requestObj.responseXML;}}
XML.prototype.fromString=function(str){var dom;if(this.browser=='ie'){dom =new ActiveXObject("Microsoft.XMLDOM");dom.preserveWhiteSpace=false;dom.loadXML(str);return dom;}else{var parser=new DOMParser();parser.preserveWhiteSpace=false;parser.async=false;dom=parser.parseFromString(str, "text/xml");return dom;}}
if(document.implementation.hasFeature("XPath", "3.0")){XMLDocument.prototype.selectNodes = function(cXPathString){var objXPath = this.createNSResolver(this.documentElement);var aItems = this.evaluate(cXPathString, this, objXPath, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);var aResult = [];for( var i = 0; i < aItems.snapshotLength; i++){aResult[i] =  aItems.snapshotItem(i);}return aResult;}}

function XML(){	this.browser=null;this.setBrowser();this.requestObj=null;}

/// End of XML Class ///


function getNodes(sExpando,sTagName)
{
	var aNodes = new Array();
	if(!sExpando)
		return aNodes;
	sExpando = sExpando.toLowerCase()
	if(sTagName)
		sTagName = sTagName.toUpperCase()
	var aStack = new Array(document.body);
	while(aStack.length != 0)//for every node in stack
	{
		var oNode = aStack.pop();
		if(oNode.nodeType == 1 && (!sTagName || oNode.tagName == sTagName))//html element 	and the tag we want
		{
			for(var i=0;i<oNode.attributes.length;i++)
			{
				var oAttrib = oNode.attributes[i]	
				if(oAttrib.nodeName.toLowerCase().indexOf(sExpando) != -1)
				{
					if(!oNode[sExpando])//set the as prop for moz
						oNode[sExpando] = oAttrib.nodeValue;
					aNodes.push(oNode);
					break;
				}
			}
		}
			
		if(oNode.hasChildNodes) //append childs to stack
			for(var i = 0 ; i < oNode.childNodes.length; i++)
				aStack.push(oNode.childNodes[i]);
	}
	return aNodes;
}

function initDynPopulate(sFolder)
{
	
	var aLinked = getNodes('populate','select');
	for(var i = 0 ; i < aLinked.length; i++)
	{
		var oNode = aLinked[i];
		oNode.setAttribute('populateFolder',sFolder);
		
		oNode.onchange=function()
		{
			var oPop;
			
			
			var oPop;//= document.getElementById(this.target);
			oPop= document.getElementById(this.getAttribute('target'));
			if(!oPop)
				return;
			/*	
			if(oPop.length && oPop.length>0)
				oPop = oPop[0];
			*/
			for(var i=oPop.options.length-1;i>0;i--)
			{
				if(oPop.options[i].value != '' && oPop.options[i].value != '0')
					oPop.remove(i);
			}
			
			var aRecords;
			var loader= new XML();
			
			var _xm=loader.fromString(loader.fromSyncRequest(this.getAttribute('populateFolder')+this.getAttribute('populate')+'.htm?'+this.getAttribute('name')+'='+this.value,0));
			aRecords=_xm.selectNodes('//data/record');		
			var op=oPop.getAttribute('show');
			if(op!=null)
			{
				var reg=/>/;
			
				for(var i = 0; i < aRecords.length; i++)
				{
					var oOption = document.createElement("OPTION");
					oOption.text = aRecords.item(i).selectSingleNode('name').text.replace(reg,'');
					oOption.value = aRecords.item(i).selectSingleNode('id').text;
					oPop.options[oPop.options.length] = oOption;	
				}
			}
				else
				{
				 	for(var i = 0; i < aRecords.length; i++)
					{
						var oOption = document.createElement("OPTION");
						oOption.text=aRecords[i].getElementsByTagName('name')[0].firstChild.nodeValue;
						oOption.value=aRecords[i].getElementsByTagName('id')[0].firstChild.nodeValue;
						oPop.options[oPop.options.length] = oOption;	
					}
				}
						
				if(window.event)
				{
					oPop.fireEvent('onchange',window.event)
				}
				else
				{
					var clickevent=document.createEvent('HTMLEvents');
					clickevent.initEvent("change", true, true);
					oPop.dispatchEvent(clickevent);
				}
		}
	}
}


function fireEvent(oObj,sEvent,bBubbles)
{
	if(oObj.fireEvent)
	{
		oObj.fireEvent('on'+sEvent,window.event);
	}
	else if(document.createEvent)
	{
		var oEvtInfo= MetaEvent.getEventInfo(sEvent);
		var oEvent=document.createEvent(oEvtInfo.type);
		eval('oEvent.'+oEvtInfo.method+'(\''+oEvtInfo.event+'\', '+bBubbles+', true)');
		oObj.dispatchEvent(oEvent);
	}
}

//info for non-ie fireEvent
var MetaEvent={getEventInfo:function(sEvtName){sEvtName=sEvtName.toString().toLowerCase();var oRes={type:'',method:'',event:''};for(var i=0; i<this._data.length; i++){var oInfo=this._data[i];for(var j=0; j<oInfo.events.length; j++){if(oInfo.events[j].toLowerCase()==sEvtName){oRes.type=oInfo.type;oRes.method=oInfo.method;oRes.event=oInfo.events[j];break;}}if(oRes.type!=''){break}}return oRes;}, 

_data:[{type:'HTMLEvents',method:'initEvent',events:['load','unload','abort','error','select','change','submit','reset','focus','blur','resize','scroll']},

                        {type:'MouseEvent',method:'initMouseEvent',events:['click','mousedown','mouseup','mouseover','mousemove','mouseout']},

                        {type:'UIEvent',method:'initUIEvent',events:['DOMFocusIn','DOMFocusOut','DOMActivate']},

                        {type:'MutationEvent',method:'initMutationEvent',events:['DOMSubtreeModified','DOMNodeInserted','DOMNodeRemoved','DOMNodeRemovedFromDocument','DOMNodeInsertedIntoDocument','DOMAttrModified','DOMCharacterDataModified']}]
}

                        

			
