		function getXmlObject(){
		  	var xmlHttp = null;
  			try{
				xmlHttp=new XMLHttpRequest();
    			} catch (e){
   				try{
   					xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		      		}catch (e){
 
					xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
	       			}	
			}

    	
  		return xmlHttp;
 		}


		function send_http(url,div){	
			
			var ajax=getXmlObject();
			if (ajax==null){
				alert ("oops on get object");
			}	
			ajax.onreadystatechange=function(){ 
				getResponseHttp(ajax,div);
			}
			ajax.open ("GET",url,true);
			ajax.send(null);

		}
		
		function getResponseHttp(ajax,div){
			if (ajax.readyState==4){
				
				if (div!=null){
					//alert (ajax.responseText);
					document.getElementById(div).innerHTML=ajax.responseText;
					
				} else {
					var bucket=ajax.responseText;
					//alert (ajax.responseText);
				}
			}
		}
					
				
		function send_xml(url){
			var ajax=getXmlObject();
			if (ajax==null){
				alert ("oops on get object");
				return;
			}
			ajax.onreadystatechange= function(){
				getResponseXml (ajax);
			}
			ajax.open ("GET",url,true);
			ajax.send(null);
		}
		
		function getResponseXml(ajax){
			if (ajax.readyState==4){
				//alert (ajax.responseText);
				var xmlDoc = null;
				if (!(xmlDoc = validXML(ajax))){
					return;
				}
			
				var val;
				for (i=0;i<xmlDoc.childNodes.length;i++){
					if (xmlDoc.childNodes[i].childNodes.length>0){
						val=xmlDoc.childNodes[i].childNodes[0].nodeValue;
					} else {
						val='';
					}
					if (document.getElementById(xmlDoc.childNodes[i].nodeName)){	
						switch (document.getElementById(xmlDoc.childNodes[i].nodeName).type){
							case 'radio':
							case 'checkbox':
								document.getElementById(xmlDoc.childNodes[i].nodeName).checked=true;
								break;
							case undefined:
								document.getElementById(xmlDoc.childNodes[i].nodeName).innerHTML=val;
								break;	
							case 'select-one':
								var slct=document.getElementById(xmlDoc.childNodes[i].nodeName);
								for (op=0;op<slct.options.length;op++){
									//alert (slct.options[op].value);
									if (trim(slct.options[op].value)==trim(val))
										slct.options[op].selected=true;
								}
								break;
							default:
								document.getElementById(xmlDoc.childNodes[i].nodeName).value=val;
								break;
						}
					} else {
					  	/*Radio buttons will have the ID as the value.  Check for this case
						Assume spaces are replace by _ ????*/
						if (document.getElementById(val.replace(" ","_"))){
						  	if (document.getElementById(val.replace (" ","_")).type == 'radio')
							  	document.getElementById(val.replace(" ","_")).checked = true;
						}
					}
					 
				}
			}
				
		}
		
		function post_http(post_form,url,div){	
			
			var ajax=getXmlObject();
			if (ajax==null){
				alert ("oops on get object");
			}	
			ajax.onreadystatechange=function(){ 
				getResponseHttp(ajax,div);
			}
			var parms="";
			var added=0;
			var check_box;
			
			for (i=0;i<post_form.elements.length;i++){
				check_box=(post_form.elements[i].type=="radio" || post_form.elements[i].type=="checkbox");
				if ((check_box && post_form.elements[i].checked) || (!check_box)){
					if (added>0)
						parms+='&';
					parms+= post_form.elements[i].name + '=' + dirty(post_form.elements[i].value);
					added++;
				}
			}
			ajax.open('POST', url, true);
      			ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      			ajax.setRequestHeader("Content-length", parms.length);
      			ajax.setRequestHeader("Connection", "close");
      			ajax.send(parms);
		}
		
		function post_xml(post_form,url){
			var ajax=getXmlObject();
			if (ajax==null){
				alert ("oops on get object");
				return;
			}
			ajax.onreadystatechange= function(){
				getResponseXml (ajax);
			}
			var parms="";
			var added=0;
			for (i=0;i<post_form.elements.length;i++){
				check_box=(post_form.elements[i].type=="radio" || post_form.elements[i].type=="checkbox");
				if ((check_box && post_form.elements[i].checked) || (!check_box)){
					if (added>0)
						parms+='&';
					parms+= dirty(post_form.elements[i].name) + '=' + dirty(post_form.elements[i].value);
					added++;
				}
			}
			
			ajax.open('POST', url, true);
      			ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      			ajax.setRequestHeader("Content-length", parms.length);
      			ajax.setRequestHeader("Connection", "close");
      			ajax.send(parms);
		}
			
		function dirty(string){
			
			
			
			var temp = new Array();
			temp=string.split ('%');
			if (temp.length>1){
				var buf='';
				for (p=0;p<temp.length;p++){
					buf+=temp[p];
					if (p<temp.length-1)
						buf+='%25';
				}
			} else {
				buf=string;
			}
			
			temp=buf.split ('&');
			if (temp.length>1){
			
				var buf='';
				for (p=0;p<temp.length;p++){
					buf+=temp[p];
					if (p<temp.length-1){
						buf += '%26';
					}
				}
			} 
			
			var temp2=new Array();
			temp2=buf.split ('=');
			if (temp2.length==1)
				return temp2[0];
			var buf='';
			for (p=0;p<temp2.length;p++){
				buf+=temp2[p];
				if (p<temp2.length-1){
					buf += '%3d';
				}
			}
			return buf;
		}
		

function loadXMLDoc(fname){
	var xmlDoc;
	// code for IE
	//if (window.ActiveXObject){
  	//	xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
  		//xmlDoc=new ActiveXObject("Msxml2.XMLHTTP");
  	//}// code for Mozilla, Firefox, Opera, etc.
	//else if (document.implementation && document.implementation.createDocument){
		
  	//	xmlDoc=document.implementation.createDocument("","",null);
 
  	//} else {
  	//	alert('Your browser cannot handle this script');
  	//}
  	xmlDoc = getXmlObject();
	xmlDoc.open ('GET',fname,false);
	xmlDoc.send (null);
	return xmlDoc.responseXML.documentElement;
	//xmlDoc.async=false;
	
	//xmlDoc.load(fname);
	
	//return(xmlDoc);
}

function displayResult(xml,xsl,target,message){
	var ajax=getXmlObject();
	if (!message)
		message = 'Loading Module...';
	document.getElementById(target).innerHTML = '<div style="text-align:center;width:200px;margin:0px auto;"><img src="/images/wait.gif" alt="wait" /> ' + htmlentities(message) + '</div>';
	ajax.onreadystatechange=function(){
		if (ajax.readyState==4){
			//alert (ajax.responseText);
			if (!validXML(ajax))
				return;
			xml=ajax.responseXML;
			//xml=loadXMLDoc(xml);
			
			xsl=loadXMLDoc(xsl);
			// code for IE
			
			if (window.ActiveXObject){
  				
  				ex=xml.transformNode(xsl);
				
  				document.getElementById(target).innerHTML=ex;
  			}
			// code for Mozilla, Firefox, Opera, etc.
			else if (document.implementation && document.implementation.createDocument){
				
				document.getElementById(target).innerHTML = '';
  				xsltProcessor=new XSLTProcessor();
				xsltProcessor.importStylesheet(xsl);
  				resultDocument = xsltProcessor.transformToFragment(xml,document);
  				document.getElementById(target).appendChild(resultDocument);
  				//var nodetext = document.getElementById(target).innerHTML;
				//nodetext = nodetext.replace(/&amp;/gi, "&");
            			//nodetext = nodetext.replace(/&lt;/gi, "<");
            			//nodetext = nodetext.replace(/&gt;/gi, ">");
            			//document.getElementById(target).innerHTML = nodetext;
            			//alert (nodetext);
            				

  			}
  		}
	}
	ajax.open ('get',xml,true);
	ajax.send(null);
}


function displayResultServer(xml,xsl,target){
	send_http ('./displayResult.php?xml=' + urlencode(xml) + '&xsl=' + urlencode(xsl),target);
}

function displayResultHook(xml,xsl,target,hook,message){
	if (!message)
		message = 'Loading Module...';
	document.getElementById(target).innerHTML = '<div style="text-align:center;width:200px;margin:0px auto;"><img src="/images/wait.gif" alt="wait" /> ' + htmlentities(message) + '</div>';
	var ajax=getXmlObject();
	ajax.onreadystatechange=function(){
		if (ajax.readyState==4){
			if (!validXML (ajax))
				return;
			xml=ajax.responseXML;
			
			//xml=loadXMLDoc(xml);
		
			xsl=loadXMLDoc(xsl);
			// code for IE
			if (window.ActiveXObject){
  				ex=xml.transformNode(xsl);
				
  				document.getElementById(target).innerHTML=ex;
  			}
			// code for Mozilla, Firefox, Opera, etc.
			else if (document.implementation && document.implementation.createDocument){
  				document.getElementById(target).innerHTML = '';
  				xsltProcessor=new XSLTProcessor();
  				xsltProcessor.importStylesheet(xsl);
  				resultDocument = xsltProcessor.transformToFragment(xml,document);
  				document.getElementById(target).appendChild(resultDocument);
  			}
  			hook();
  		}
  		
	}
	ajax.open ('get',xml,true);
	ajax.send(null);
}

function send_post(ajax,url,parms){
	ajax.open('POST', url, true);
	ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	ajax.setRequestHeader("Content-length", parms.length);
	ajax.setRequestHeader("Connection", "close");
	ajax.send(parms);
}

function sendXmlHook(url,hookFunction){
	var ajax=getXmlObject();
	if (ajax==null){
		alert ("oops on get object");
		return;
	}
	ajax.onreadystatechange= function(){
		getResponseXmlHook (ajax,hookFunction);
	}
	ajax.open ("GET",url,true);
	ajax.send(null);
}
		
function getResponseXmlHook(ajax,hookFunction){
	if (ajax.readyState==4){
		//alert (ajax.responseText);
		var xmlDoc = null;
		if (!(xmlDoc = validXML(ajax))){
			return;
		}
			
		var val;
		for (i=0;i<xmlDoc.childNodes.length;i++){
			if (xmlDoc.childNodes[i].childNodes.length>0){
				val=xmlDoc.childNodes[i].childNodes[0].nodeValue;
			} else {
				val='';
			}
			if (document.getElementById(xmlDoc.childNodes[i].nodeName)){
				
				switch (document.getElementById(xmlDoc.childNodes[i].nodeName).type){
					case 'radio':
					case 'checkbox':
						document.getElementById(xmlDoc.childNodes[i].nodeName).checked=true;
						break;
					case undefined:
						document.getElementById(xmlDoc.childNodes[i].nodeName).innerHTML=val;
						break;	
					case 'select-one':
						var slct=document.getElementById(xmlDoc.childNodes[i].nodeName);
						for (op=0;op<slct.options.length;op++){
							//alert (slct.options[op].value);
							if (trim(slct.options[op].value)==trim(val))
								slct.options[op].selected=true;
						}
						break;
					default:
						document.getElementById(xmlDoc.childNodes[i].nodeName).value=val;
						break;
				}
			}	 
		}
		
		hookFunction();
	}
}

function populateForm (xmlDoc){	
	/*this will populate a form with the given xml (or sub-xml) document*/
	var val;
	var op;
	for (var i=0;i<xmlDoc.childNodes.length;i++){
		if (xmlDoc.childNodes[i].childNodes.length>0){
			val=xmlDoc.childNodes[i].childNodes[0].nodeValue;
		} else {
			val='';
		}
		if (document.getElementById(xmlDoc.childNodes[i].nodeName)){
			switch (document.getElementById(xmlDoc.childNodes[i].nodeName).type){
				case 'radio':
				case 'checkbox':
					document.getElementById(xmlDoc.childNodes[i].nodeName).checked=true;
					break;
				case undefined:
					document.getElementById(xmlDoc.childNodes[i].nodeName).innerHTML=val;
					break;	
				case 'select-one':
					var slct=document.getElementById(xmlDoc.childNodes[i].nodeName);
					for (op=0;op<slct.options.length;op++){
						//alert (slct.options[op].value);
						if (trim(slct.options[op].value)==trim(val))
							slct.options[op].selected=true;
					}
					break;
				default:
					document.getElementById(xmlDoc.childNodes[i].nodeName).value=val;
					break;
			}
		}
	}
}

function getSubXml (xmlDoc,tag){
	/*this will return a sub branch of xmlDoc*/
	for (var i=0;i<xmlDoc.childNodes.length;i++){
		if (xmlDoc.childNodes[i].nodeName == tag){
			return xmlDoc.childNodes[i];
		}
	}
	return null;  /*tag not found*/
}

function urlencode( str ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: AJ
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Brett Zamir (http://brettz9.blogspot.com)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: travc
    // +      input by: Brett Zamir (http://brettz9.blogspot.com)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Lars Fischer
    // %          note 1: info on what encoding functions to use from: http://xkr.us/articles/javascript/encode-compare/
    // *     example 1: urlencode('Kevin van Zonneveld!');
    // *     returns 1: 'Kevin+van+Zonneveld%21'
    // *     example 2: urlencode('http://kevin.vanzonneveld.net/');
    // *     returns 2: 'http%3A%2F%2Fkevin.vanzonneveld.net%2F'
    // *     example 3: urlencode('http://www.google.nl/search?q=php.js&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a');
    // *     returns 3: 'http%3A%2F%2Fwww.google.nl%2Fsearch%3Fq%3Dphp.js%26ie%3Dutf-8%26oe%3Dutf-8%26aq%3Dt%26rls%3Dcom.ubuntu%3Aen-US%3Aunofficial%26client%3Dfirefox-a'
                             
    var histogram = {}, unicodeStr='', hexEscStr='';
    var ret = (str+'').toString();
    
    var replacer = function(search, replace, str) {
        var tmp_arr = [];
        tmp_arr = str.split(search);
        return tmp_arr.join(replace);
    };
    
    // The histogram is identical to the one in urldecode.
    histogram["'"]   = '%27';
    histogram['(']   = '%28';
    histogram[')']   = '%29';
    histogram['*']   = '%2A';
    histogram['~']   = '%7E';
    histogram['!']   = '%21';
    histogram['%20'] = '+';
    histogram['\u00DC'] = '%DC';
    histogram['\u00FC'] = '%FC';
    histogram['\u00C4'] = '%D4';
    histogram['\u00E4'] = '%E4';
    histogram['\u00D6'] = '%D6';
    histogram['\u00F6'] = '%F6';
    histogram['\u00DF'] = '%DF';
    histogram['\u20AC'] = '%80';
    histogram['\u0081'] = '%81';
    histogram['\u201A'] = '%82';
    histogram['\u0192'] = '%83';
    histogram['\u201E'] = '%84';
    histogram['\u2026'] = '%85';
    histogram['\u2020'] = '%86';
    histogram['\u2021'] = '%87';
    histogram['\u02C6'] = '%88';
    histogram['\u2030'] = '%89';
    histogram['\u0160'] = '%8A';
    histogram['\u2039'] = '%8B';
    histogram['\u0152'] = '%8C';
    histogram['\u008D'] = '%8D';
    histogram['\u017D'] = '%8E';
    histogram['\u008F'] = '%8F';
    histogram['\u0090'] = '%90';
    histogram['\u2018'] = '%91';
    histogram['\u2019'] = '%92';
    histogram['\u201C'] = '%93';
    histogram['\u201D'] = '%94';
    histogram['\u2022'] = '%95';
    histogram['\u2013'] = '%96';
    histogram['\u2014'] = '%97';
    histogram['\u02DC'] = '%98';
    histogram['\u2122'] = '%99';
    histogram['\u0161'] = '%9A';
    histogram['\u203A'] = '%9B';
    histogram['\u0153'] = '%9C';
    histogram['\u009D'] = '%9D';
    histogram['\u017E'] = '%9E';
    histogram['\u0178'] = '%9F';
    
    // Begin with encodeURIComponent, which most resembles PHP's encoding functions
    ret = encodeURIComponent(ret);
 
    for (unicodeStr in histogram) {
        hexEscStr = histogram[unicodeStr];
        ret = replacer(unicodeStr, hexEscStr, ret); // Custom replace. No regexing
    }
    
    // Uppercase for full PHP compatibility
    return ret.replace(/(\%([a-z0-9]{2}))/g, function(full, m1, m2) {
        return "%"+m2.toUpperCase();
    });
}

function sendHttpHook (url,div,hookFunction){	
			
	var ajax=getXmlObject();
	if (ajax==null){
		alert ("oops on get object");
	}	
	ajax.onreadystatechange=function(){ 
		getResponseHttpHook(ajax,div,hookFunction);
	}
	ajax.open ("GET",url,true);
	ajax.send(null);
}	

function getResponseHttpHook(ajax,div,hookFunction){
	if (ajax.readyState==4){
		
		if (div!=null){
			//alert (ajax.responseText);
			document.getElementById(div).innerHTML=ajax.responseText;
			
		} else {
			var bucket=ajax.responseText;
			//alert (ajax.responseText);
		}
		hookFunction();
	}
}

function displayResultPost(xml,xsl,target,parms,message){
	var ajax=getXmlObject();
	if (!message)
		message = 'Loading Module...';
	document.getElementById(target).innerHTML = '<div style="text-align:center;width:200px;margin:0px auto;"><img src="/images/wait.gif" alt="wait" /> ' + htmlentities(message) + '</div>';
	ajax.onreadystatechange=function(){
		if (ajax.readyState==4){
			//alert (ajax.responseText);
			if (!validXML(ajax))
				return;
			xml=ajax.responseXML;
			//xml=loadXMLDoc(xml);
			
			xsl=loadXMLDoc(xsl);
			// code for IE
			
			if (window.ActiveXObject){
  				
  				ex=xml.transformNode(xsl);
				
  				document.getElementById(target).innerHTML=ex;
  			}
			// code for Mozilla, Firefox, Opera, etc.
			else if (document.implementation && document.implementation.createDocument){
				
				document.getElementById(target).innerHTML = '';
  				xsltProcessor=new XSLTProcessor();
  				xsltProcessor.importStylesheet(xsl);
  				resultDocument = xsltProcessor.transformToFragment(xml,document);
  				document.getElementById(target).appendChild(resultDocument);
  			}
  		}
	}
	send_post (ajax,xml,parms);
}

function displayResultPostHook (xml,xsl,target,parms,hook,message){
	var ajax=getXmlObject();
	if (!message)
		message = 'Loading Module...';
	document.getElementById(target).innerHTML = '<div style="text-align:center;width:200px;margin:0px auto;"><img src="/images/wait.gif" alt="wait" /> ' + htmlentities(message) + '</div>';
	
	ajax.onreadystatechange=function(){
		if (ajax.readyState==4){
			//alert (ajax.responseText);
			if (!validXML(ajax))
				return;
			xml=ajax.responseXML;
			//xml=loadXMLDoc(xml);
			
			xsl=loadXMLDoc(xsl);
			// code for IE
			
			if (window.ActiveXObject){
  				
  				ex=xml.transformNode(xsl);
				
  				document.getElementById(target).innerHTML=ex;
  			}
			// code for Mozilla, Firefox, Opera, etc.
			else if (document.implementation && document.implementation.createDocument){
				
				document.getElementById(target).innerHTML = '';
  				xsltProcessor=new XSLTProcessor();
  				xsltProcessor.importStylesheet(xsl);
  				resultDocument = xsltProcessor.transformToFragment(xml,document);
  				document.getElementById(target).appendChild(resultDocument);
  			}
  			hook();
  		}
	}
	send_post (ajax,xml,parms);
}

function validXML (ajax,displayError){
	//alert (ajax.responseText);
	if (!ajax.responseXML){
		
		sendError (ajax,displayError);  /*safari error*/
		return false;
	}
	var xmlDoc = ajax.responseXML.documentElement;

	if (!xmlDoc){  /*IE will not have an object if error*/
		
		sendError (ajax,displayError);  
		return false;
	}
	
	if (xmlDoc.childNodes.length == 0)
		return xmlDoc;
	if (xmlDoc.childNodes[0].nodeName == '#text') {
	
		sendError (ajax,displayError);	
		return false;
	} else {
		return xmlDoc;
	}
	function sendError (ajax,displayError){
		if (trim(ajax.responseText) == '')
			return;
		var ajax2 = getXmlObject();
		var parms = 'url=' + urlencode(location.href) + '&error=' + urlencode(ajax.responseText) + '&headers=' + urlencode(ajax.getAllResponseHeaders());
		ajax2.open ('POST','/support/xml_error.php',true);
		ajax2.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		ajax2.setRequestHeader("Content-length", parms.length);
		ajax2.setRequestHeader("Connection", "close");
		ajax2.send(parms);
		if (displayError)
			alert (ajax.responseText);
		else
			alert ("Oops - There appears to be a server error.");
	}
}

function htmlentities(texto){
    //by Micox - elmicoxcodes.blogspot.com - www.ievolutionweb.com
    var i,carac,letra,novo='';
    for(i=0;i<texto.length;i++){
        carac = texto.charCodeAt(i);
        if( (carac > 47 && carac < 58) || (carac > 62 && carac < 127) ){
            //se for numero ou letra normal
            novo += texto.substr (i,1);
        }else{
            novo += "&#" + carac + ";";
        }
    }
    return novo;
}

function displayResultXml(xml,xsl,target,message){
	if (!message)
		message = 'Loading Module...';
	document.getElementById(target).innerHTML = '<div style="text-align:center;width:200px;margin:0px auto;"><img src="/images/wait.gif" alt="wait" /> ' + htmlentities(message) + '</div>';
	xsl=loadXMLDoc(xsl);
	// code for IE
	if (window.ActiveXObject){
  		ex=xml.transformNode(xsl);
		document.getElementById(target).innerHTML=ex;
  	}
	// code for Mozilla, Firefox, Opera, etc.
	else if (document.implementation && document.implementation.createDocument){
				
		document.getElementById(target).innerHTML = '';
  		xsltProcessor=new XSLTProcessor();
  		xsltProcessor.importStylesheet(xsl);
  		resultDocument = xsltProcessor.transformToFragment(xml,document);
  		document.getElementById(target).appendChild(resultDocument);
  	}
 }
 
 function setSelectValue (slct,value){
 	var retVal = false;
 	for (var i=0;i<slct.options.length;i++){
 		if (slct.options[i].value == value){
 			slct.options[i].selected = true;
 			retVal = true;
 		}
 	}
 	return retVal;
 }
 
 function addSelectValue (slct,value,text){
 	var option = new Option (text,value);
 	slct.options[slct.options.length] = option;
 	slct.options[slct.options.length - 1].selected = true;
 }
 
 function ajaxLoadSelect(url,element,value){
   	var ajax = getXmlObject();
	ajax.onreadystatechange = function(){
	  	if (ajax.readyState == 4){
		  	var xmlDoc;
			if (!(xmlDoc = validXML(ajax)))
			  	return;
			populateSelectByValue (document.getElementById(element),xmlDoc);
			if (value){
			  	setSelectValue(document.getElementById(element),value);
			}
		}
	}
	ajax.open ('GET',url,true);
	ajax.send (null);
 }
