var loadingImage = '<img style="border: 0px" id="loadingImage" src="/img/loading.gif">';


function ToggleAjaxCall(id, s1, s2, method, url) {
    var el = document.getElementById(id);
    el.style.display = "none";
    var c = document.createElement("div");
    c.style.textAlign = "center";
    var link = document.createElement("a");
    link.href = "#";
    link.style.fontSize = "10px";
    link.appendChild(document.createTextNode(s1));
    link.onclick = function() {
        link.firstChild.nodeValue = (link.firstChild.nodeValue == s1) ? s2 : s1;
        el.style.display = (el.style.display == "none") ? "block" : "none";
        if (el.style.display == "block")
            ajaxCall(method, url, id, link);
        return (false);
    }
    c.appendChild(link);
    el.parentNode.insertBefore(c, el);
}

// procedura asincrona!!

/**
 * effettua chiamata ajax a una determinata pagina e restituisce la risposta
 * @param method get/post
 * @param url indirizzo che soddisferà la richiesta
 * @param id vettore di id degli elementi in cui andrà la risposta
 * @param objCaller generalmente this
 * @return
 */
function ajaxCall(method, url, id, objCaller) {
    ajaxCall(method, url, id, objCaller, false);
}

/**
 * effettua chiamata ajax a una determinata pagina e restituisce la risposta
 * @param method get/post
 * @param url indirizzo che soddisferà la richiesta
 * @param id vettore di id degli elementi in cui andrà la risposta
 * @param objCaller generalmente this
 * @param withSJ true/false se la risposta è in json e contiene js da eseguire, il json deve contenere html e js
 * @return
 */
function ajaxCall(method, url, id, objCaller, withSJ) {
    var xmlhttp;

    if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
        alert("Your browser does not support XMLHTTP!");
    }

    //creo loader
    if((typeof id) != 'object')
        id = new Array(id);

    manageLoader(id, true);

    objCaller.disabled = true;

    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4) {
            if (xmlhttp.status == 200) {
                if(withSJ) {
                    eval('response='+xmlhttp.responseText);
					
                    responseHTML = response.html;
                    responseJS = response.js;
                } else {
                    responseHTML = xmlhttp.responseText;
                }

                var ar = "new Array(\"" + id.join("\", \"") + "\")";
                
                str2eval = "manageAnswer(";
                str2eval += ar + ", ";
                r = responseHTML.replace(/"/g, '\\"').replace(/\n/g, "")
                .replace(/\r/g, "").replace(/\t/g, "");
                str2eval += '"' + r + '")';

                eval(str2eval);

                manageLoader(id, false);
		
                if(withSJ)
                    eval(responseJS);
				
                objCaller.disabled = false;
            } else {
                alert("Problem retrieving XML data!\nStatus: " + xmlhttp.status
                    + "\nMessage: " + xmlhttp.statusText);
            }
        }
    }

    xmlhttp.open(method, url, true);
    xmlhttp.send(null);
}

function manageLoader(ids, show)
{
    for (var x in ids)
    {
        var obj = document.getElementById(ids[x]);
        var newdiv = document.getElementById("loader" + obj.id.replace('[', '').replace(']', ''));
        if(newdiv == null) {
            newdiv = document.createElement('span');
            newdiv.setAttribute("id", "loader" + obj.id.replace('[', '').replace(']', ''));
            newdiv.innerHTML = loadingImage;
        }

        if(obj.tagName.toUpperCase() == 'DIV') {
            if(show)
                obj.innerHTML = '<center>' + loadingImage + "</center>";
        } else {
            if(show)
                obj.parentNode.appendChild(newdiv);
            else
                obj.parentNode.removeChild(newdiv);
        }
    }
}

function manageAnswer(ids, response)
{
    for (var x in ids)
    {
        var obj = document.getElementById(ids[x]);
        var r = response;
        var key = obj.id.substr(obj.id.indexOf("[") + 1, obj.id.indexOf("]") - obj.id.indexOf("[") - 1);
        if(ids.length > 1)
        {
            var jsonObject = eval('(' + response + ')');
            r = eval("jsonObject." + key );
        }

        switch(obj.tagName.toUpperCase())
        {
            case 'DIV':
                Div(obj, r);
                break;

            case 'SELECT':
                Select(obj, r);
                break;

            case 'INPUT':
                Input(obj, r);
                break;
            
            default:
                alert(obj.tagName + ' not defined!')
        }
    }
}

function Div(obj, response) {
    obj.innerHTML = response;
}

function Input(obj, response) {
    obj.value = response;
}

function Select(obj, response) {
    if((typeof response) != 'object') //retrocompatibilita
        response = eval('(' + response + ')');
    
    obj.innerHTML = "";
    for (var elem in response) {
        var newop = document.createElement('option');
        newop.setAttribute("value", elem);
        newop.innerHTML = response[elem];
        obj.appendChild(newop);
    }
}
