// JavaScript Document

/** insieme di funzioni ed oggetti utili per interagire con ajax */

/** FUNZIONI */

// funzione per prendere un elemento con id univoco
	function pedi(id_elemento) {
		var elemento;
		if(document.getElementById)
			elemento = document.getElementById(id_elemento);
		else
			elemento = document.all[id_elemento];
		return elemento;
	};

// funzione per assegnare un oggetto XMLHttpRequest
	function assegnaXMLHttpRequest() {
		var
			XHR = null,
			browserUtente = navigator.userAgent.toUpperCase();
		if(typeof(XMLHttpRequest) === "function" || typeof(XMLHttpRequest) === "object")
			XHR = new XMLHttpRequest();
		else if(window.ActiveXObject && browserUtente.indexOf("MSIE 4") < 0) {
			if(browserUtente.indexOf("MSIE 5") < 0)
				XHR = new ActiveXObject("Msxml2.XMLHTTP");
			else
				XHR = new ActiveXObject("Microsoft.XMLHTTP");
		}
		return XHR;
	};



/** OGGETTI / ARRAY */

	// oggetto di verifica stato
		var readyState = {
			INATTIVO:	0,
			INIZIALIZZATO:	1,
			RICHIESTA:	2,
			RISPOSTA:	3,
			COMPLETATO:	4
		};

	// array descrittivo dei codici restituiti dal server
	// [la scelta dell' array  per evitare problemi con vecchi browsers]
		var statusText = new Array();
		statusText[100] = "Continue";
		statusText[101] = "Switching Protocols";
		statusText[200] = "OK";
		statusText[201] = "Created";
		statusText[202] = "Accepted";
		statusText[203] = "Non-Authoritative Information";
		statusText[204] = "No Content";
		statusText[205] = "Reset Content";
		statusText[206] = "Partial Content";
		statusText[300] = "Multiple Choices";
		statusText[301] = "Moved Permanently";
		statusText[302] = "Found";
		statusText[303] = "See Other";
		statusText[304] = "Not Modified";
		statusText[305] = "Use Proxy";
		statusText[306] = "(unused, but reserved)";
		statusText[307] = "Temporary Redirect";
		statusText[400] = "Bad Request";
		statusText[401] = "Unauthorized";
		statusText[402] = "Payment Required";
		statusText[403] = "Forbidden";
		statusText[404] = "Not Found";
		statusText[405] = "Method Not Allowed";
		statusText[406] = "Not Acceptable";
		statusText[407] = "Proxy Authentication Required";
		statusText[408] = "Request Timeout";
		statusText[409] = "Conflict";
		statusText[410] = "Gone";
		statusText[411] = "Length Required";
		statusText[412] = "Precondition Failed";
		statusText[413] = "Request Entity Too Large";
		statusText[414] = "Request-URI Too Long";
		statusText[415] = "Unsupported Media Type";
		statusText[416] = "Requested Range Not Satisfiable";
		statusText[417] = "Expectation Failed";
		statusText[500] = "Internal Server Error";
		statusText[501] = "Not Implemented";
		statusText[502] = "Bad Gateway";
		statusText[503] = "Service Unavailable";
		statusText[504] = "Gateway Timeout";
		statusText[505] = "HTTP Version Not Supported";
		statusText[509] = "Bandwidth Limit Exceeded";

// Funzione per invio dati
/* Dati necessari (
URL pagina,
tipo invio (POST o GET),
copia di valori da inviare,
Id del DIV da aggiornare nella pagina
)*/
function Invio_dati(strURL, tipo, valore, id_div, id_div_att) {

	// assegnazione oggetto XMLHttpRequest
    var ajax = assegnaXMLHttpRequest();
// --- POST ---------------------------------------------
	if(tipo == 'p'){
		ajax.open('POST', strURL, true);
		ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		ajax.onreadystatechange = function() {
			if (ajax.readyState == 4) {
				Aggiorna_pagina(ajax.responseText);
			}
		}
		ajax.send(valore);
		
		// Mostro l'immagine di loading
		document.getElementById(id_div_att).className = "aj_div_attesa_vedi";
		//aj_div_attesa.className="aj_div_attesa_vedi";
		// Nascondo il div principale
		document.getElementById(id_div).className = "aj_div_principale_nascondi";
		//aj_div_principale.className="aj_div_principale_nascondi";
		
	}
	
	
//var mutante = (document.getElementById(DIV).className == "attuale")? document.getElementById(DIV).className = "nuova" : document.getElementById(DIV).className = "attuale";
// --- GET ---------------------------------------------
	if(tipo == 'g'){
		ajax.open('GET', strURL, true);
		ajax.onreadystatechange = function() {
			if (ajax.readyState == 4) {
				Aggiorna_pagina(ajax.responseText);
			}
		}
		ajax.send(null);
		
		// Mostro l'immagine di loading
		//document.getElementById('aj_div_attesa').style="aj_div_attesa_vedi";
		//document.getElementById('aj_div_attesa').setAttribute('class','aj_div_attesa_vedi')
		document.getElementById(id_div_att).className = "aj_div_attesa_vedi";
		//aj_div_attesa.className="aj_div_attesa_vedi";
		// Nascondo il div principale
		//document.getElementById('aj_div_principale').style="aj_div_principale_nascondi";
		//document.getElementById('aj_div_principale').setAttribute('class','aj_div_principale_nascondi')
		document.getElementById(id_div).className = "aj_div_principale_nascondi";
		//aj_div_principale.className="aj_div_principale_nascondi";

	}




	// Funzione per aggiornare la pagina
	function Aggiorna_pagina(str){
		pedi(id_div).innerHTML = str;
		
		// Nascondo il div attesa
		//document.getElementById('aj_div_attesa')="aj_div_attesa_nascondi";
		//document.getElementById('aj_div_attesa').setAttribute('class','aj_div_attesa_nascondi')
		
		document.getElementById(id_div_att).className = "aj_div_attesa_nascondi";
		//aj_div_attesa.className="aj_div_attesa_nascondi";
		// Mostro il div principale
		//document.getElementById('aj_div_principale').style="aj_div_principale_vedi";
		//document.getElementById('aj_div_principale').setAttribute('class','aj_div_principale_vedi')
		
		document.getElementById(id_div).className = "aj_div_principale_vedi";
		//aj_div_principale.className="aj_div_principale_vedi";
	}
}

// Preload della immagine di "LOADING"
img_LOADING = new Image;
img_LOADING.src = "images/loading.gif";


//-----------------------------------------------------------------
//crea la stringa dei parametri da utilizzare con ajax
//-----------------------------------------------------------------
function dati_form_aj(form)
{
    if(typeof(form) == "undefined")
        return;
    else if(typeof(form) == "string")
    {
        var f = document.getElementById(form);
        if(!f) return;
    }
    else if(typeof(form) == "object")
        var f = form;
    
    
    var elements = f.elements;
    if(!elements) return;
    var n = elements.length;
    var s = [];
    for(var i = 0; i < n; i++)
    {
        var element = elements[i];
        var name = element.name;
        if(name != "")
        {
            var type = element.type;
            var value = encodeURIComponent(element.value);
            if(type == "text" || type == "file" || type == "password" )
            {
                s.push(name + "=" + value);
            }
            
            else if(type == "hidden")
            {
                //non considero gli elementi riservati quali:
                //__EVENTTARGET, __EVENTARGUMENT, __VIEWSTATE, __EVENTVALIDATION
                if(name.indexOf("__", 0) == -1) s.push(name + "=" + value);
            }
            
            else if(type == "checkbox" || type == "radio" )
            {
                if(element.checked)
                {
                    s.push(name + "=" + value);
                }            
            }
            else if(type == "textarea")
            {
                s.push(name + "=" + value);
            }
            
            else if(type == "select-one" || type == "select-multiple")
            {
                var c = options_value_selezionati_join(element) + "";
                if(c != "") s.push(name + "=" + c);
            }
            
        }
        
    }
    s = s.join("&");
    return s;


    //------------------------------------------------------------
    //restituisce gli elementi value selezionati da una lista
    //separati da virgola
    //------------------------------------------------------------
    function options_value_selezionati_join(lista)
    {
	    var s = "";
	    for(var i = 0; i < lista.options.length; i++)
	    {
		    if(lista.options[i].selected) s += "," + lista.options[i].value;
	    }
	    return s.substr(1);
    }




}
