
		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=ajax.responseXML.documentElement;
				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='';
					}
			
					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 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.async=false;
	xmlDoc.load(fname);
	return(xmlDoc);
}

function displayResult(xml,xsl,target){
	var ajax=getXmlObject();
	ajax.onreadystatechange=function(){
		if (ajax.readyState==4){
			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){
  				xsltProcessor=new XSLTProcessor();
  				xsltProcessor.importStylesheet(xsl);
  				resultDocument = xsltProcessor.transformToFragment(xml,document);
  				document.getElementById(target).appendChild(resultDocument);
  			}
  		}
	}
	ajax.open ('get',xml,true);
	ajax.send(null);
}

function displayResultHook(xml,xsl,target,hook){
	var ajax=getXmlObject();
	ajax.onreadystatechange=function(){
		if (ajax.readyState==4){
			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){
  				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=ajax.responseXML.documentElement;
		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='';
			}
			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='';
		}
		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();
	}
}
