//alert ("incluso js ajax");

function CreateXmlHttpReq(handler) {
  var xmlhttp = null;
  try {
    xmlhttp = new XMLHttpRequest();
  } catch(e) {
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch(e) {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  xmlhttp.onreadystatechange = handler;
  return xmlhttp;
}


function DummyHandler() {
    return true;
}

function ajaxGet_(url, handler) {
//alert ("sono in ajaxGet" );
//alert("handler="+handler);
    var a = new Array("placeholder");
    for (var j=2; j<arguments.length; j++) {
        a[a.length] = arguments[j];
    }
	/*/dbg
	for (var j=2; j<arguments.length; j++) {
        alert("[DBG] arguments[j]="+arguments[j]);
    }*/

    var ajax_req = CreateXmlHttpReq(DummyHandler);
    var myhandler = function() {
    var content = ajaxOk(ajax_req);
      if (content !== false) {
           a[0] = content;
             try {
                return handler.apply(this, a);
            } catch(e) {
                return myDummyApply(handler, a);
            }
        }
    }
	//DBG alert(myhandler);
    ajax_req.onreadystatechange = myhandler;
    ajax_req.open("GET",url);
   ajax_req.send(null);
}

function ajaxPost_(strURL,funcDachiamare,idForm) {
//alert ("sono in ajaxPost_" );
    var self = this;
	var oForms=document.forms[idForm];
	//alert("idform="+idForm+" \noForm="+oForms)
	//alert("funcDachiamare="+funcDachiamare);
	//crea i parametri da passasare alla funzione js che verra chiamata
    var a = new Array("placeholder");
    for (var j=3; j<arguments.length; j++) {
        a[a.length] = arguments[j];
    }
	 var ajax_req = CreateXmlHttpReq(DummyHandler);
		var myhandler = function() {
		var content = ajaxOk(ajax_req);
		  if (content !== false) {
			   a[0] = content;
				 try {
					return funcDachiamare.apply(this, a);
				} catch(e) {
					return myDummyApply(funcDachiamare, a);
				}
			}
		}
	ajax_req.onreadystatechange = myhandler;
    ajax_req.open('POST', strURL, true);
	ajax_req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	var qst2=getRequestBody(oForms);
		//alert("\n qst2"+qst2);
   	ajax_req.send(qst2);
}


function myDummyApply(funcname,args) {
    var e = "funcname(";
    for (var i = 0; i < args.length; i++) {
        e += "args["+i+"]";
        if (i+1 != args.length) {
            e += ",";
        }
    }
    e += ");"
    return eval(e);
}
function ajaxOk(req) {
    if (req.readyState == 4 && req.status == 200) {
								attesa_();
        return req.responseText;
    } else	{
							attesa();
							return false;
    }
}




function getRequestBody(oForm)
{	// creo un array vuoto
	var aParams = new Array();
	// eseguo la codifica come URL degli elementi del form
	for (var i=0 ; i < oForm.elements.length; i++)
	{
		// creo una variabile che contiene il nome dell'elemento del form
		var sParam = encodeURIComponent(oForm.elements[i].name);
		// sParam += ... significa sParam = sParam + ...;
		// aggiungo alla variabile sParam "="
		sParam += "=";
		// aggiungo alla variabile sParam il valore dell'elemento del form
		sParam += encodeURIComponent(oForm.elements[i].value);
		// aggiungo all'array aParams la stringa sParam che conterrà l'accoppiata nome=valore
		// push aggiunge un elemento all'array

		aParams.push(sParam);

		//alert("oForm.elements["+i+"].value="+oForm.elements[i].value+"oForm.elements["+i+"].name="+oForm.elements[i].name);
	}
	var	sRet=aParams.join("&");
	//alert ("sRet"+sRet);
	return  sRet;
}

function $html(id) {
    return document.getElementById(id).innerHTML;
}

function sethtml(id,html) {
    document.getElementById(id).innerHTML = html;
}

function appSuElm(html,id) {
    document.getElementById(id).innerHTML += html;
}

function CheckInput(types, idElemento,idDivErrore)
/* -DOC-
CONTROLLA INPUT A SECONDA DEL Type PASSATO, E DEL CONTENUTO DELL'OGGETTO RICAVATO DALL'ID
id elemento E COMUNICA EVENTUALI ERRORI NELL'OGGETTO CON ID PASSATO PER  idDivError.

TUTTI GLI ALTRI PARAMETRI PASSATI SERVONO:
3 parametro=posizione0 di args_= nome campo da visualizzare nel messaggio di errore
4 parametro=posizione1 di args_=  eventuale nome del campo da prendere tramite  document.getElementById()
	da confrontare con il valore passato[idElemento]. per prova di compatibilit�.

--> Type SUPPORTATI:
	'Mail'->				Input idElemento formato da: n lettere seguite da @ seguta da n lettere seguite da . e 2 o tre lettere
	'Stringa'->				Input idElemento formato da: solo esclusivamente lettere da[a-z] e[A-Z]
	'Password'->			Input idElemento formato da: n caratterima non spazi.
	'Ccnfirm'->				Confronta input idElemento con il 4 parametro passato:
MESSAGGIO ERRORE --in alert:[SoftDst.com- CheckInput-function.Softdst.inc.js]:ERROR: No type match;
*/
{//################################################################################################### START function CheckInput(...)
	clearTimeout();
	var e = document.getElementById(idElemento);
	var strVar = new String(e.value);
	 //DEBUG
	/*

	alert("type: "+types  );
	alert("idElemento: "+idElemento  );
	alert("e.value: "+e.value  );
	*/
	//carico gli eventuali parametri inseriti dopo quelli dichiarati.
	var args_ = new Array();
	var ret=true;

	for( i = 3; i < arguments.length; i++ ){
		args_[i-3] = arguments[i];
	}

	//eseguo il test di compatibilit� sull'input attraverso
	//espressioni regolari, a seconda del type passato
	//3 parametro=posizione0 di args_= nome campo da visualizzare nel messaggio di errore
	//4 parametro=posizione1 di args_=  eventuale nome del campo da prendere tramite  document.getElementById()
		//da confrontare con il valore passato. per prova di compatibilit�.
	var resultChk=null;
	switch(types)
	{
		case 'Mail':
		//controllo se ha inserito in un formato mail
			var myRegex = /\b\w+@\w+\.\w{2,3}\b/gi;//ogni parola composta da letter seguite
												   //da @ e lettere segiute da .e seguite 2o3 caratteri
			var indirizzi = strVar.match(myRegex);
			if (indirizzi==null)//non trova espressioni(mail) nel campo allora forma il messaggio di errore
			{
				resultChk="Campo "+args_[0]+",";
				ret=false;
			}
			break;
		case 'Stringa':
		//controllo se ha inserito in un formato stringa solo lettere
			var myRegex = /[^[a-z]|[A-Z]]\W/i;//ogni carattere non stringa compresa da a-z e A-Z
			var text = strVar.match(myRegex);
			if (text!=null)//trova espression(non caratteri) nel campo allora forma il messaggio di errore
			{
				resultChk="Campo "+args_[0]+",";
				ret=false;
			}
			break;
		case 'Password':
			var myRegex = /\s/i;//ogni carattere spazio
			var text = strVar.match(myRegex);
			if (text!=null)//trova espression(non caratteri) nel campo allora forma il messaggio di errore
			{
				resultChk="Campo "+args_[0]+",";
				ret=false;
			}
			break;
		case 'Ccnfirm':
		//controllo se corrisponde al 1campo password, è passato come N-esimo parametro non definito
		/*
		alert("strVar="+strVar);
		alert("args_[1]="+args_[1].value);
		*/
		if ((strVar!=document.getElementById(args_[1]).value)&&(strVar!=""))
		{
				resultChk="Campo "+args_[0]+" non coincidono ,";
				ret=false;
		}
			break;
		case 'Void':
		//controllo se il capmo passato non è void
		if (strVar=="")
		{
			ret=false;
		}
		default:
		alert ("[SoftDst.com- CheckInput-function.Softdst.inc.js]:ERROR: No type match");
		ret=false;
	}
	if (resultChk!=null)
	{
		scriviSuElm("ATTENZIONE ERRORE COMPILAZIONE: "+resultChk+" NON VALIDO!",idDivErrore);
		setTimeout("pulisciElm('"+idDivErrore+"')",2000);

	}
	//DBG alert ('nel js='+ret);
	return ret;
}
function pulisciElm(idElm)
{
scriviSuElm("",idElm);
}
 function limit_textarea(mytextarea,mycounter,maxdigit)
 /* - DOC -
	limita la lunghezza inseribile in una textarea
*/
 {
        //var maxdigit = 350;
       document.getElementById(mycounter).innerHTML = maxdigit - mytextarea.value.length;
        if(mytextarea.value.length >= maxdigit){
            mytextarea.value = mytextarea.value.substring(0,maxdigit);
			document.getElementById(mycounter).innerHTML = 0;
			alert("Caratteri Terminati");
        }//endif
 }
	function codiceControllo(len)
	{
		var codOut="";
		for(k=0;k<len;k++)
			codOut+=String.fromCharCode(97 + Math.round(Math.random() * 25));
		return codOut;
	}

function expand(e,w,h,interval,step,maxW,maxH){
		var prc=true;
		if (w>=maxW){ prc=false;}
		if (h>=maxH){ prc=false;}
		alert('prc='+prc);
		if(prc){
			w=w+step;
			h=h+step;
			e.style.width=w+'px';
			e.style.height=h+'px';
			e.style.top=	e.style.top-h;
			alert('e.style.width='+e.style.width);
			alert('e.style.height='+e.style.height);
		 setTimeout(function(){expand(e,w,h,interval,step,maxW,maxH);},interval);
		}
	}
function explodeH(e,h,interval,step,maxH,func){
		var prc=true;
		if (h>=maxH){ prc=false;}
		if(prc){
			h=h+step;
			e.style.height=h+'px';
		 setTimeout(function(){explodeH(e,h,interval,step,maxH,func);},interval);
		}
		else {
			setTimeout(func,interval);
		}
}
function implodeH(e,h,interval,step,minH,func){
		var prc=true;

		if (h<=minH){ prc=false;}
		if(prc){
			h=h-step;
			e.style.height=h+'px';
			e.style.top=	e.style.top-h;
		 setTimeout(function(){implodeH(e,h,interval,step,minH,func);},interval);
		}
		else {
			setTimeout(func,interval);
		}
}


	function positionaizer(e,elm){
	if(document.all)e = event;
		var leftPos = e.clientX+2;
		var st = Math.max(document.body.scrollTop,document.documentElement.scrollTop);
		if(leftPos<0)leftPos = 0;
		elm.style.left = leftPos + 'px';
		elm.style.top = e.clientY + st + 'px';
	}
