﻿/*******************************************************************
GESTIONE DELL'OGGETTO XMLHTTPREQUEST PER CHIAMATE AL SERVER REMOTO.
FILENAME: XMLHTTPCLIENT.JS
AUTHOR: CRISTIANO MOTTA
*******************************************************************/


/******************************************************************
VARIABILI GLOBALI ALLA PAGINA - INIZIALIZZAZIONE
/*****************************************************************/

//OGGETTO XMLHTTPREQUEST LATO CLIENT GLOBALE
var HTTPReq = null;

//OGGETTO XML DOM LATO CLIENT GLOBALE
var XMLDOC = null;

//NODO ROOT DEL DOCUMENTO XML
var XMLROOT = null;

//IE O FIREFOX (0 = IE; 1 = FIREFOX)
var IE_FIREFOX = 0;


/**********************************************************
CREO L'XML DOM E IL NODO RADICE PASSATO COME
ARGOMENTO (OPZIONALE). DA RICHIAMARE NELLA ONLOAD DEL BODY.
**********************************************************/
function InitXMLDOC(szRootName, attOperation) {

    //BROWSER SNIFFER
    (navigator.appName.toLowerCase().indexOf("explorer") != -1) ? IE_FIREFOX = 0: IE_FIREFOX = 1;
    //ROOT NODE NAME
    (typeof(szRootName) != 'undefined') ? _rootname = szRootName: _rootname = "ROOT"

    if (IE_FIREFOX == 0) {//IE
            XMLDOC = new ActiveXObject("Microsoft.XMLDOM");
    }
    else {//Firefox
            XMLDOC = document.implementation.createDocument("", "", null);
    }

    var nRoot = XMLDOC.createElement(_rootname);    
    var nAttOper = XMLDOC.createAttribute("operation");
    nAttOper.nodeValue = attOperation;
    nRoot.setAttributeNode(nAttOper);
    
    XMLROOT = XMLDOC.appendChild (nRoot);	
}


/****************************************
Funzione di Richiesta Ajax Asincrona
*****************************************/
function AsyncRequestHTTP(objXML, ProcessingPage, callback)
{
    if (IE_FIREFOX == 0)  { //IE
            HTTPReq = new ActiveXObject("Microsoft.XMLHTTP");
            //funzione di callback
            HTTPReq.onreadystatechange = callback;
    }
    else { //Firefox
            HTTPReq = new XMLHttpRequest();
    //funzione di callback
            HTTPReq.onload = callback; 
    }

    //apro la connessione al server (true per la modalità asincrona)
    HTTPReq.open("POST", ProcessingPage, true);

    //setto il Content-Type
    HTTPReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

    //invio dati
    HTTPReq.send("queryXML=" +  _serializeXML(objXML));	
}

/********************************************
Funzione di Richiesta Ajax Sincrona
*********************************************/
function RequestHTTP(objXML,ProcessingPage)
{
    if (IE_FIREFOX == 0)  { //IE
            HTTPReq = new ActiveXObject("Microsoft.XMLHTTP");
            //funzione di callback
            HTTPReq.onreadystatechange = process;
    }
    else { //Firefox
            HTTPReq = new XMLHttpRequest();
    //funzione di callback
            HTTPReq.onload = process; 
    }

    //apro la connessione al server (false per la modalità sincrona lo script deve aspettare
    //una risposta dal server prima di proseguire)
    HTTPReq.open("POST", ProcessingPage, false);

    //setto il Content-Type
    HTTPReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

    //invio dati
    HTTPReq.send("queryXML=" +  _serializeXML(objXML));	
}

/********************************************
FUNZIONE DI CALLBACK
*********************************************/
function process() {
    if ( HTTPReq.readyState == 4 ) {
        if (HTTPReq.status == 200) {
            //if (HTTPReq.responseText == "OK")
                    HTTP_RESPONSE = true;
            //else
            //      HTTP_RESPONSE = false;
        }
        else {
            HTTP_RESPONSE = false;
        }
    }
}

function AddNodeToXML(szName,szText) {
    //var nNode = XMLDOC.createNode("element",szName,"");
    var nNodeName = XMLDOC.createElement(szName);
    //nNode.text = szText;
    var nNodeText = XMLDOC.createTextNode (szText);
    nNodeName.appendChild(nNodeText);
    XMLROOT.appendChild(nNodeName);
    //alert(_serializeXML(XMLDOC));
}

/******************************************************************
RITORNA UNA STRINGA XML DA UN OGGETTO XML DOM (IE/FIREFOX)
/*****************************************************************/
function _serializeXML(objXML) {
    if (IE_FIREFOX == 0)  { //IE
        return objXML.xml;
    }
    else { //Firefox
        var serializer = new XMLSerializer();
        var __xml = serializer.serializeToString(objXML);
        return __xml;
    }
}


/******************************************************************
RITORNA UN OGGETTO XML DOM DA UNA STRINGA XML (IE/FIREFOX)
/*****************************************************************/
function  getDOMfromString(XMLString)  {
    if (IE_FIREFOX == 0)  { //IE
        var _XMLDOC = new ActiveXObject("Microsoft.XMLDOM");
        _XMLDOC.loadXML(XMLString);
        return _XMLDOC;
    }
    else { //Firefox
        //create a DOMParser
        var objDOMParser = new DOMParser();
        //create new document from string
        return (objDOMParser.parseFromString(XMLString, "text/xml"));
    }
}


