//##################################################################################
//## FORM SUBMIT WITH AJAX                                                        ##
//## @License: 	GNU/GPL v. 2 <http://www.gnu.org/copyleft/gpl.html>               ##
//## @Author: 	Simone Rodriguez 08/2007 ver 1.2								  ##
//## @Revision: Gianfranco Bruno 11/2009 										  ##
//##		 						- supporto IE4				              	  ##
//##		 						- handler parametrico	             		  ##
//##		 						- passaggio parametri dinamico all'handler	  ##
//##								  può non essere passato; se c'è è un 		  ##
//##								  parametro o una stringa che concatena +     ##
//##                                  paramerti separati da virgola				  ##
//##################################################################################

function xmlhttpPost(strURL,formname,responsediv,responsemsg,handler,handlerParam) {
	var xmlHttpReq = false;
	var self = this;
	// IE7+, Firefox, Chrome, Opera, Safari
	if (window.XMLHttpRequest) {
		self.xmlHttpReq = new XMLHttpRequest();
	} else {
		// per tutte le altre versioni di IE
		if (window.ActiveXObject) {
			var brw;
			brw = navigator.userAgent.toUpperCase();	// informazioni sul nome del browser
			if (brw.indexOf("MSIE 4") < 0) {
				// IE4
				self.xmlHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
			} else {
				// IE6, IE5
				self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
			}
		} else {
			// xmlHttp non supportato dal browser
			self = null;
		}
	}
		
	self.xmlHttpReq.open('POST', strURL, true);
	self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	self.xmlHttpReq.setRequestHeader("HTTP_REFERER", "http://" + window.location.href); //Facoltativo, dichiara chi effettua la chiamata

	self.xmlHttpReq.onreadystatechange = function() {
		if((self.xmlHttpReq.readyState == 4) && (self.xmlHttpReq.status == 200)) {
			// Quando pronta, visualizzo la risposta del form
			updatepage("",responsediv);
			var fx = handler+"(self.xmlHttpReq";
			if (handlerParam!=null && handlerParam!='') fx = fx + "," + handlerParam;
			fx = fx + ")";
			eval(fx);
		} else {
			// In attesa della risposta del form visualizzo il msg di attesa
			updatepage(responsemsg,responsediv);
		}
	}
	//alert(getQueryString(formname).replace(/&/g,'\n'));
	self.xmlHttpReq.send(getQueryString(formname));
}

function getQueryString(formname) {
	var form = document.forms[formname];
	var qstr = "";

	function GetElemValue(name, value) {
		qstr += (qstr.length > 0 ? "&" : "")
				+ escape(name).replace(/\+/g, "%2B") + "="
				+ escape(value ? value : "").replace(/\+/g, "%2B");
				//+ escape(value ? value : "").replace(/\n/g, "%0D");
	}
	
	var elemArray = form.elements;
	for (var i = 0; i < elemArray.length; i++) {
		var element = elemArray[i];
		var elemType = element.type.toUpperCase();
		var elemName = element.name;
		if (elemName) {
			if (elemType == "TEXT"
						|| elemType == "TEXTAREA"
						|| elemType == "PASSWORD"
						|| elemType == "BUTTON"
						|| elemType == "RESET"
						|| elemType == "SUBMIT"
						|| elemType == "FILE"
						|| elemType == "IMAGE"
						|| elemType == "HIDDEN") 											GetElemValue(elemName, element.value);
			else if (elemType == "CHECKBOX" && element.checked) GetElemValue(elemName, element.value ? element.value : "On");
			else if (elemType == "RADIO" && element.checked)		GetElemValue(elemName, element.value);
			else if (elemType.indexOf("SELECT") != -1)
				for (var j = 0; j < element.options.length; j++) {
					var option = element.options[j];
					if (option.selected)
						GetElemValue(elemName, option.value ? option.value : option.text);
				}
		}
	}
	return qstr;
}

function updatepage(str,responsediv){
	document.getElementById(responsediv).innerHTML = str;
}
