// Libreria Ajax per PX
// Astrazione Cross Browser indipendente dal Server
// Permette di inviare una richiesta generica su http e processare il risultato
// con un Handler standard oppure definito dall'utente

//var agt = navigator.userAgent.toLowerCase();
//var is_ie5 = (agt.indexOf('msie 5') != -1);


	
// Keyboard input validator Object by Damiano
// vanno attivati nella funzione initPage con la sintassi seguente:
// Event.observe('<elementId>', 'keydown', keyValidator.typeXXX);

var Validator = {
	// accetta solo key numerici, i tasti Ctrl e  v per il paste (v da solo viene corretto da correctUserInput)
	
	typeInt: function(event) {
		id=Event.element(event).id;
		if(
			(event.keyCode < 48 || (event.keyCode > 57 && event.keyCode < 96) || event.keyCode > 105 ) && 
			event.keyCode!=Event.KEY_BACKSPACE && 
			event.keyCode!=Event.KEY_TAB &&
			event.keyCode!=Event.KEY_LEFT &&
			event.keyCode!=Event.KEY_RIGHT &&
			event.keyCode!=17 &&
			event.keyCode!=86			
		) 	Event.stop(event);
		setTimeout("correctUserInput('"+id+"',"+new RegExp(/[^0-9]/)+")", 100);		
	},
	typeCurrency: function(event) {
		id=Event.element(event).id;
		if(
			(event.keyCode < 48 || (event.keyCode > 57 && event.keyCode < 96) || event.keyCode > 105 ) && 
			event.keyCode!=Event.KEY_BACKSPACE && 
			event.keyCode!=Event.KEY_TAB &&
			event.keyCode!=Event.KEY_LEFT &&
			event.keyCode!=Event.KEY_RIGHT &&
			event.keyCode!=17 &&
			event.keyCode!=110 &&			
			event.keyCode!=188 &&			
			event.keyCode!=190						
		) 	Event.stop(event);
		setTimeout("correctUserInput('"+id+"',"+new RegExp(/[^0-9.,]/)+")", 100);		
	},	
	// accetta solo key alfabetici
	typeAlpha: function(event) {
		id=Event.element(event).id;	
		if(
			(event.keyCode > 97 || event.keyCode <= 65) && 
			event.keyCode!=Event.KEY_BACKSPACE && 
			event.keyCode!=Event.KEY_TAB &&
			event.keyCode!=Event.KEY_LEFT &&
			event.keyCode!=Event.KEY_RIGHT
		) Event.stop(event);
		setTimeout("correctUserInput('"+id+"',"+new RegExp(/[^a-zA-Z]/)+")", 100);
	},
	// accetta solo key alfanumerici	
	typeAlnum: function(event) {
		id=Event.element(event).id;
		if(
			(event.keyCode < 48 || (event.keyCode > 57 && event.keyCode < 65) || event.keyCode > 105) &&
			event.keyCode!=Event.KEY_BACKSPACE && 
			event.keyCode!=Event.KEY_TAB &&
			event.keyCode!=Event.KEY_LEFT &&
			event.keyCode!=Event.KEY_RIGHT
		) Event.stop(event); 
		setTimeout("correctUserInput('"+id+"',"+new RegExp(/[^a-zA-Z0-9]/)+")", 100);
	},
	typeAlnumSp: function(event) {
		id=Event.element(event).id;
		if(
			(event.keyCode < 48 || (event.keyCode > 57 && event.keyCode < 65) || event.keyCode > 105) &&
			event.keyCode!=32 && 
			event.keyCode!=Event.KEY_BACKSPACE && 
			event.keyCode!=Event.KEY_TAB &&
			event.keyCode!=Event.KEY_LEFT &&
			event.keyCode!=Event.KEY_RIGHT
		) Event.stop(event); 
		setTimeout("correctUserInput('"+id+"',"+new RegExp(/[^a-zA-Z0-9 ]/)+")", 100);
	}
}

function correctUserInput (elementid,wrong) {
	while ($(elementid).value.match(wrong)) 
		$(elementid).value = $(elementid).value.replace(wrong,'');
} 



// Crea XML HTTP request object
// cross-browser

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;
}


// Crea una richiesta GET e gestisce il risultato

var ajax_req = null;

function ajaxGet(url,handler) {
    var a = new Array("placeholder");
    for (var j=2; j<arguments.length; j++) {
        a[a.length] = arguments[j];
    }
    var myhandler = function() {
        var content = ajaxOk();
        if (content != false) {
            a[0] = content;
            try {
                return handler.apply(this, a);
            } catch(e) {
                return myDummyApply(handler, a);
            }
        }
    }
    ajax_req = CreateXmlHttpReq(myhandler);
    ajax_req.open("GET",url);
    ajax_req.send(null);
}


// IE 5.0 non ha il metodo apply(),
// questa è una patch

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);
}


// Evita i caching di IE

function ajaxGetRand(url,handler) {
    url += (url.indexOf("?") == -1) ? "?" : "&";
    url += "rand="+escape(Math.random());
    arguments[0] = url;
    try {
        return ajaxGet.apply(this,arguments);
    } catch(e) {
        return myDummyApply(ajaxGet,arguments);
    }
}


// Ritorna esito della chiamata

function ajaxOk() {
    if (ajax_req.readyState == 4 && ajax_req.status == 200) {
        return ajax_req.responseText;
    } else {
        return false;
    }
}


// Crea una funzione che ricorda lo stato boolean e lo cambia

function State() {
    var c=0;
    return function() {
        if (c==0) c=1; else c=0;
		return c;
    }
}

// Questa funzione permette di ripristinare l'esecuzione dei javascript
// Nell'HTML caricato dinamicamente in un tag DIV
// va chiamata dopo aver inserito l'innerHtml nel tag div
function runScripts(idelement) {
	var d = document.getElementById(idelement).getElementsByTagName("script");
	var t = d.length;
	for (var x=0;x<t;x++){
		var newScript = document.createElement('script');
		newScript.type = "text/javascript";
		newScript.text = d[x].text;
		document.getElementById(idelement).appendChild(newScript);
	}
}


// Handler predefiniti gestiscono il risultato della http GET request

// Handler vuoto
// gestisce richieste che non necessitano di risposta
function DummyHandler() {
    return true;
}

// Handler che visualizza il conetenuto passato in un tag div con id=elementid
function htmlDivHandlerSet(content,elementid) {
    var e = document.getElementById(elementid);
   	e.innerHTML = content;
   	runScripts(elementid);
}

// Questa funzione richiede un contenuto Html al server e visualizza il risultato nel TAG Div 
// con id specificato da idelement.
// urlRequest=Array() con chiavi id delle div e valori le url da visualizzare nelle div
// states=Array() con chiavi id delle div e valori 0,1 = visualizza div vuota o urlRequest[idelement]

function switchDiv(idelement, states, urlRequest)
{
		if (states && states[idelement]()==1) {
			Effect = new Fx.Style(idelement, 'opacity', {duration: 800, transition: Fx.Transitions.quartInOut} );
			ajaxGetRand(urlRequest[idelement],htmlDivHandlerSet, idelement);
			Effect._start(0.1,1);
		}
		else {
			htmlDivHandlerSet("",idelement);
			//ajaxGetRand('empty.html',htmlDivHandlerSet,idelement);
		}
}

function switchDivSimple (idelement, urlRequest, urlPost)
{
	var e = document.getElementById(idelement);
   	if (e.innerHTML) {
	//submitForm('form1','userarea',urlPost); 
		//e.innerHTML="";
		if (Element.visible(idelement))
		Element.hide(idelement);
		else
		Element.show(idelement);

		}
	else 
		ajaxGetRand(urlRequest,htmlDivHandlerSet,idelement);

		//Element.show(idelement);
}


function htmlIframeHandlerSet(content,name) {
    var e = window.frames[name];
   	e.document.open();
   	e.document.write(content);
	e.document.close()
}

function setIframeUrl(urlRequest,name) {
	    var e = window.frames[name];
		e.location.href=urlRequest;
}

function submitForm(idelement,idtargetdiv, url) {
		var formSerialized = Form.serialize($(idelement));
		//Element.show('pacco');
		//document.write (formSerialized);
		var myAjax = new Ajax.Updater('', url, { method: 'post', parameters: formSerialized, oncomplete: terminateSave()  });
	}


function terminateSave() {
	Field.disable('savebutton');
//	Element.setStyle('savebutton', {color:'#06A'} );
	alert('salvato')
}

function EnableButton(id) {
try {	var element = Form.getInputs('form1','button');
	// document.write(elements);
	// Form.enable(element);
	Field.enable('savebutton');
	//alert ($('savebutton').getStyle('background-color'));
//	Element.setStyle('savebutton', {color:'#900'} );
}
catch (e) {}
}

function alertMe() {
		if(this.transport.readyState == 4) {
			alert(this.options.postBody);
		}
	}
	

