//ajaxfn.js

var xmlHttp = createXmlHttpRequestObject();
var msgOut = new Array();
var sendTime = null;

var ajax_txt_errorMsg1 = "Errore nella creazione xmlHttp\nError creating xmlHttp";
var ajax_txt_errorMsg2 = "Errore di lettura risposta dal server ";
var ajax_txt_errorMsg3 = "Problema di accesso al server\nError accessing server\n";

function createXmlHttpRequestObject()
{
	var xmlHttp=false;
	var i;
	
	try{xmlHttp=new XMLHttpRequest();}
	catch(e){
		var XmlHttpVersions = new Array('MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0',
										'MSXML2.XMLHTTP','Microsoft.XMLHTTP');
		for(i=0; i < XmlHttpVersions.length && !xmlHttp; i++){
			try{xmlHttp=new ActiveXObject(XmlHttpVersions[i]);} catch(e){}
		}
	}	
	if(!xmlHttp){alert(ajax_txt_errorMsg1);}
	return xmlHttp;
}

function msgSend(ajax_req, chFn, srv)
{
	if(!msgOut.length && sendRequest(ajax_req, chFn, srv, true)) return true;
	var msg = new Array(ajax_req, chFn, srv);
	msgOut.push(msg);
	if(!sendTime) sendTime = window.setTimeout(sendMsgQueue, 50);
}

function sendMsgQueue()
{
	if(msgOut.length && ((xmlHttp.readyState == 0) || (xmlHttp.readyState == 4)))
	{
		var msg = msgOut.shift();
		sendRequest(msg[0], msg[1], msg[2], true);
	}
	if(msgOut.length) sendTime = window.setTimeout(sendMsgQueue, 50);
	else sendTime = null;
}

function sendRequest(ajax_req, chFn, srv, asynchronous)
{
	if(!xmlHttp) return false;
	if((xmlHttp.readyState == 0) || (xmlHttp.readyState == 4))
	{
		xmlHttp.open('POST', srv , asynchronous);
		xmlHttp.onreadystatechange = chFn;
		xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		xmlHttp.send(ajax_req);
		//document.body.style.cursor="wait";
		return true;
	}
	return false;
}

function showDivDialog(divId)
{
	var div = document.getElementById(divId);
	var sSize = getSize();
	div.style.display="block";
	div.style.position="fixed";
	div.style.top="50px";
	div.style.left=(sSize[0]-div.offsetWidth)/2+"px";
}

function hideDivDialog(divId)
{
	var div = document.getElementById(divId);
	div.style.display="none";
}

function isDivDialogVisible(divId)
{
	var div = document.getElementById(divId);
	return div.style.display=="block";
}

function getXmlVal(elem, index)
{
	return (elem && elem.item(index) && elem.item(index).hasChildNodes()) ? elem.item(index).firstChild.data : "";
}

function html_entity_decode(str) {
  var ta=document.createElement("textarea");
  ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
  return ta.value;
}

function parentXML(name)
{
	return '<'+name+'>';
}
function endParentXML(name)
{
	return '</'+name+'>';
}
function nodeXml(name, value)
{
	return '<'+name+'>'+value+'</'+name+'>';
}
function getValueSelected(sel)
{
	if(navigator.appName != "Microsoft Internet Explorer")
		return sel.value;
	else
	{
		//alert('Sel idx = '+sel.selectedIndex+' child len = '+sel.childNodes.length+' val = '+ sel.childNodes[sel.selectedIndex].innerText);
		k=0;
		for(i=0; i<sel.childNodes.length; i++)
		{
			if(sel.childNodes[i].nodeType != 1) continue;
			if(k==sel.selectedIndex) return sel.childNodes[i].innerText;
			k++;
		}
	}
}
// Funzioni per validazione delle form
function getFormDataXML(f, root)
{
	var str=parentXML(root);
	str+=nodeXml('formId', f.id);
	str+=parentXML('formData');
	var inp=f.getElementsByTagName('INPUT');
	for(var i=0;i<inp.length;i++)
		if(inp.item(i).name) str+=nodeXml(inp.item(i).name, inp.item(i).value);
	var inp=f.getElementsByTagName('SELECT');
	for(var i=0;i<inp.length;i++)
		if(inp.item(i).name) str+=nodeXml(inp.item(i).name, getValueSelected(inp.item(i)));
	var inp=f.getElementsByTagName('TEXTAREA');
	for(var i=0;i<inp.length;i++)
		if(inp.item(i).name) str+=nodeXml(inp.item(i).name, inp.item(i).innerHTML);
	str+=endParentXML('formData');
	str+=endParentXML(root);
	return str;
}

function validateGenericForm(f)
{
	var str = getFormDataXML(f, 'validateForm');
	msgSend("CMD=VALIDATE_LASTFORM&VAL="+encodeURIComponent(str), genericFormWait, 'validateGenericForm.php');
	return false;
}

function genericFormWait()
{
	if(xmlHttp.readyState==4){if(xmlHttp.status==200){try{handle_genericForm();}catch(e){alert(ajax_txt_errorMsg2+ e.toString());}}
	else{alert(ajax_txt_errorMsg3+xmlHttp.statusText);}}
}

function handle_genericForm()
{
	xmlResponse = xmlHttp.responseXML;
	if(!xmlResponse || !xmlResponse.documentElement) throw(mg_validXML + xmlHttp.responseText);
	xmlDocumentElement = xmlResponse.documentElement;
	if(xmlDocumentElement.nodeName=="parseerror") throw(mg_validXML + xmlHttp.responseText);

	var formID = getXmlVal(xmlDocumentElement.getElementsByTagName("formID"), 0);
	var result = getXmlVal(xmlDocumentElement.getElementsByTagName("result"), 0);
	if(result=='KO')
	{
		var fieldID = getXmlVal(xmlDocumentElement.getElementsByTagName("fieldID"), 0);
		var errorMsg = getXmlVal(xmlDocumentElement.getElementsByTagName("errorMsg"), 0);
		document.getElementById(fieldID).focus();
		alert(errorMsg);
	}
	else
	{
		document.getElementById(formID).submit();
	}
}

var elemToComplete = null;

function getCompleteConnected(resultId, artId, tabId, xsl)
{
	elemToComplete = document.getElementById(resultId);
	if(!elemToComplete) 
		alert("Elemento "+resultId+" non trovato"); 
	else
		msgSend("ID="+encodeURIComponent(artId)+"&TAB="+encodeURIComponent(tabId)+"&XSL="+encodeURIComponent(xsl), completeWait, 'artgetdyn.php');
}

function completeWait()
{
	if(xmlHttp.readyState==4){if(xmlHttp.status==200){try{handle_completeWait();}catch(e){alert(ajax_txt_errorMsg2+ e.toString());}}
	else{alert(ajax_txt_errorMsg3+xmlHttp.statusText);}}
}

function handle_completeWait()
{
	elemToComplete.innerHTML = xmlHttp.responseText;
}



