/*
	 * 
	 *     This function provide to createa valid instance of XMLHttpRequest object.
	 *     First, check the browser and then choices which kind of object has to create.
	 *
	 *     parameters: void
	 */
	 /*
	  * xmlhttprequest exception code 0x80004005:
	  * si verifica quando si passa come serverPage solo il nome della pagina, è meglio passare tutta la url completa
	  */



function _xmlDoc(obj){
	alert(obj);
	obj._txt=function(tagName,index){
		alert("buh");
	}
	return obj;
}

function _tag(tagName,index){
	return document._tag(tagName,index);
}

function _id(ID){
	var res=document.getElementById(ID);
	return document.getElementById(ID);
}


var XHRObjects=new Array();
	function getXMLHttp (){
		//Create a boolean variable to check for a valid microsoft active X instance.
		var xmlhttp = false;
		
		//Check if we are using internet explorer.
		try {
			//If the javascript version is greater than 5.
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			//If not, then use the older active x object.
			try {
				//If we are using internet explorer.
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {
				//Else we must be using a non-internet explorer browser.
				xmlhttp = false;
			}
		}
		
		//If we are using a non-internet explorer browser, create a javascript instance of the object.
		if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
			xmlhttp = new XMLHttpRequest();
		}
		
		return xmlhttp;
	}
	
	

//fa una richiesta è mette il risultato in innerHTML di un oggetto HTML
	function processRequest(serverPage, obj, getOrPost, str){
		xmlhttp = getXMLHttp ();
		str=dataReq2str(str);
		if(str===false) return false;
		/*
		if(serverPage.slice(0,1)!="/") serverPage="/"+serverPage;
		try{BASE_HOST;serverPage=BASE_HOST+serverPage;}catch(e){}
		*/
		serverPage=complete_url(serverPage);
		if (getOrPost.toUpperCase() == "GET"){
			xmlhttp.open("GET", serverPage+'?'+str, true);
			xmlhttp.onreadystatechange = function() {
				if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
					obj.innerHTML = xmlhttp.responseText;
				}
			}
		
		xmlhttp.send(null);
		} else {
			xmlhttp.open("POST", serverPage, true);
			xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
			xmlhttp.onreadystatechange = function() {
				if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
					obj.innerHTML = xmlhttp.responseText;
					/*
					if(xmlhttp.responseText != 'ok') {
						eval(xmlhttp.responseText);
					} else {
						window.location.reload();
						
					}
					*/
				}
			}
		xmlhttp.send(str);
		}
	}
	
	function processRequestAsync(serverPage, callbackfunc, getOrPost,xmlDoc, str){	
		if(xmlDoc==null) xmlDoc=true;
		var xmlhttp=getXMLHttp();
		var tmp_res;
		str=dataReq2str(str);
		if(str===false) return false; 
		/*
		if(serverPage.slice(0,1)!="/") serverPage="/"+serverPage;
		try{BASE_HOST;serverPage=BASE_HOST+serverPage;}catch(e){}
		*/
		serverPage=complete_url(serverPage);
		if (getOrPost.toUpperCase() == "GET"){
			xmlhttp.open("GET", serverPage+'?'+str, true);
			xmlhttp.onreadystatechange = function() {
				if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
					if(xmlDoc){
						tmp_res = xmlhttp.responseXML;
					}else{
						tmp_res = xmlhttp.responseText;
					}
					callbackfunc(tmp_res);
				}
			}
		
		xmlhttp.send(null);
		} else {
			try{
				xmlhttp.open("POST", serverPage, true);
			}catch(e){
				alert(e.message);
				
			}
			xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");
			xmlhttp.onreadystatechange = function() {
				if (xmlhttp.readyState == 4) {
					if(xmlDoc){
						tmp_res = xmlhttp.responseXML;
					}else{
						tmp_res = xmlhttp.responseText;
					}
					callbackfunc(tmp_res);
				}
			}
		xmlhttp.send(str);
		}
	}
	
/*
 * fa una richiesta [GET(method="GET") o POST(method="POST")] alla PAGINA serverPage
 * in MODALITA' SINCORNA e restituisce l'XML di risposta
 * 
 */
	function processRequestSync(serverPage, data, method, xmlDoc,debug){
		if(xmlDoc==null) xmlDoc=true;
		/*
		if(serverPage.slice(0,1)!="/") serverPage="/"+serverPage;
		try{BASE_HOST;serverPage=BASE_HOST+serverPage;}catch(e){}
		*/
		serverPage=complete_url(serverPage);
		data=dataReq2str(data);
		if(data===false) return false;
		xmlhttp = getXMLHttp ();
		var tmp_res;
		switch(method.toUpperCase()){
			case "POST":
				try{
					xmlhttp.open("POST", serverPage, false);
				}catch(e){
					alert(e.message);
				}
				xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");
				xmlhttp.send(data);
				break;
			
			case "GET":
				xmlhttp.open("GET", serverPage+"?"+data, false);
				xmlhttp.send(null);
				break;
			
			default:alert("method in XHR not valid");break;
		}
				
		if(xmlDoc){
			tmp_res=xmlhttp.responseXML;
		}else{
			tmp_res=xmlhttp.responseText;
		}
		if(debug) mk_debugger(xmlhttp.responseText);
		
		return tmp_res;
	}
	
	
	

function mk_debugger(responseData){
	var D=document.createElement('div');
	var A=document.createElement('a');
	A.href='javascript:void(0);';
	A.innerHTML='chiudi';
	A.setAttribute('onclick','javascript:kill_debugger(this.parentNode);');
	
	D.style.position='absolute';
	D.style.width='350px';
	//D.style.height='600px';
	D.style.top='50px';
	D.style.left='600px';
	D.style.border='1px solid';
	D.style.overflow='hidden';
	D.style.zIndex=200;
	D.appendChild(A);
	D.innerHTML+='<br>'+responseData;
	D=document.getElementsByTagName('body')[0].appendChild(D);
	return D;
}

function kill_debugger(D){
	document.getElementsByTagName('body')[0].removeChild(D);
}

function _4req(str){
	var res;
	try{
		res=str.toString();
		return res.replace("&","%26");
	}catch(e){
		alert("_4req "+arguments.length);
		alert(e);
		return str;
	}
}

function dataReq2str(data){
		switch(typeof(data)){
			case "string":
			break;
			
			case "object":
			if(data.tagName && data.tagName=="FORM") {
				data=GetFormValues(data);
			}else{
				data=getParamsValues(data);
			}
			break;
			
			default:
			alert("error on data argument in processRequestSync");
			return false;
			break;
		}
		return data;
	}


function getParamsValues(params){
	var strData="";
	var tmp;
	for(p_name in params) {
		tmp=eval("params."+p_name);
		strData+=p_name+"="+_4req(tmp)+"&";
	}
	return strData;
}

function getFormValues(theform){
	switch(typeof(theform)){
		case "string":
		var form = window.document.forms[theform];
		if(!form) form=document.getElementById(theform);
		break;
		
		case "object":
		var form=theform;
		break;
	}
	if(!form) {
		alert("ERROR in GetFormValues: Form not identified!");
		return 0;
	}
	
	var formData = '';
	
	try {
		for(var i= 0; i < form.length; i++) {
			if(form.elements[i].name)
				switch(form.elements[i].getAttribute("type")) {
					case "checkbox":
					if(form.elements[i].checked) {
						form.elements[i].value = "checked";
					} else {
						form.elements[i].value = "unchecked";
					}	
					formData += form.elements[i].name + "=" + form.elements[i].value + "&";
					break;
					
					case "radio":
					if(!form.elements[i].checked || form.elements[i].disabled) break;
					formData += form.elements[i].name + "=" + form.elements[i].value + "&";
					break;
					
					default:
					//alert(form.elements[i].name);
					formData += form.elements[i].name + "=" + _4req(form.elements[i].value) + "&";
					break;
				}
		//	formData += form.elements[i].name + "=" + _4req(form.elements[i].value) + "&";
		}			
	}catch(e) {
		alert("Error "+e.description);
	}
	/*
	if(checkURL(formData)) {
		return removeBlankSpace(formData);	
	} else {
		document.getElementById('error').innerHTML = '<br>sended url is not valid<br />';			
	}	
	*/
	var tmp;
	try{
	tmp=_get_operatorid();
	if(tmp!=-1) formData+="operatorid="+tmp+"&";
	tmp=_get_baseid();
	if(tmp!=-1) formData+="operatorbaseid="+tmp+"&";
	}catch(e){}
	//try{formData+="operatorid="+_get_operatorid()+"&operatorbaseid="+_get_baseid()+"&";}catch(e){}
	return formData;	
}



function xmlDocResponse(xmlDoc){
	this.xmlDoc=xmlDoc;
	this.value=function(tagName){
		if(this.xmlDoc.getElementsByTagName(tagName)[0].firstChild)
			return this.xmlDoc.getElementsByTagName(tagName)[0].firstChild.nodeValue;
	}
	
	this.response=this.value("response");
	
	this.list=function(tagName){
		return this.xmlDoc.getElementsByTagName(tagName);
	}
	
	this.check_error=function(){
		check_error(this.response,this.xmlDoc);
	}
}




