/**
Funcions per a us d'AJAX

versio:  20061121 Canvis de codificació i timeout
versio:  20061117 versio inicial

*/

/*** INICIALITZACIO **********************************************************/
/* PRIVATE */
function ajaxCreateRequestObject()
{
    var creat;
    creat = false;
    var ro;
    var browser = navigator.appName;
    //if(browser == "Microsoft Internet Explorer")
    //{
    //    ro = new ActiveXObject("Microsoft.XMLHTTP");
    //}
    //else
    //{
    //    ro = new XMLHttpRequest();
    //}

    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
        ro = new XMLHttpRequest();
        creat=true;
    }
    else if (window.ActiveXObject) { // IE
        ro = new ActiveXObject("Microsoft.XMLHTTP");
        creat=true;
    }

/*
        //xmlDocument = new ActiveXObject("Microsoft.XMLDOM");
        //textXML = xhr_object.responseText;
        //xmlDocument.load(textXML);

    else if (window.ActiveXObject) { // IE
     try {
        http_request = new ActiveXObject("MSXML2.XMLHTTP");
        alert('MSXML2.XMLHTTP');
        creat=true;
     }
     catch (e) {
       try {
         http_request = new ActiveXObject("Microsoft.XMLHTTP");
         alert('Microsoft.XMLHTTP');
         creat=true;
        } catch (e) {
          alert(e);
        }
       }
    }
*/

    if (!creat) {
        alert('Cannot create XMLHTTP instance');
        return false;
    }
    else{
        return ro;
    }
}

var ajax_http = ajaxCreateRequestObject();
var ajax_contador=0;
var ajax_max_loop=200; // CONSTANT MODIFICABLE
/*****************************************************************************/


/*** RESPOSTA ****************************************************************/
/* PRIVATE */
function ajaxResponse()
{

    if(ajax_http.readyState == 2) // petició enviada
    {
        ajax_showById("carregant");
    }

    if(ajax_http.readyState == 3) // esperant resposta
    {
        /* DEBUG: capçaleres parcials
         alert(ajax_http.getAllResponseHeaders());
        */

        ajax_contador++;

        if(ajax_contador>=ajax_max_loop) // timeout
        {
            /* aixo dona error amb Explorer, no se perque  */
            /*ajaxErrorHandler(ajax_http.status,'Timeout');*/
            alert('Error: Timeout');
            ajax_http.abort();
        }
    }

    if(ajax_http.readyState == 4) // Pagina carregada
    {
        if(ajax_http.status == 200) // carregada correctament
        {
            ajaxResponseHandler(ajax_http.responseText);
        }
        else // error de carrega
        {
            ajaxErrorHandler(ajax_http.status,ajax_http.statusText);
        }

        ajax_hideById("carregant");
    }

}
/*****************************************************************************/

/*** PETICIO *****************************************************************/
/* PUBLIC */
/**
 Es passa la URL que es llançarà 
*/
function ajaxRequest(tipu,url_peticio)
{
    if(tipu==''){ tipu='GET'; }

    ajax_http.open(tipu,url_peticio);

/*
    if (ajax_http.overrideMimeType) {
        ajax_http.overrideMimeType("text/html; charset=ISO-8859-1"); // PER SI LA RESPOSTA NO ES UTF8
        //ajax_http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); //en cas de POST
    }
*/
    ajax_http.send(null);   //en cas de POST -> nom=valor&un_altre_nom=un_altre_valor&i_així=anar_fent
    ajax_http.onreadystatechange = ajaxResponse;
    ajax_contador=0;
}
/*****************************************************************************/


/*** FUNCIONS A MODIFICAR ****************************************************/
/* PUBLIC */
/**
 Que farà amb la resposta
*/
/*
function ajaxResponseHandler(responseText)
{
 // TODO Exemple: document.getElementById("****").innerHTML=ajax_http.responseText;
}
*/

/**
 Que farà en cas d'error
*/
/* PUBLIC */
function ajaxErrorHandler(error_no,error_text)
{
 // TODO Exemple: alert('Error '+error_no+': '+error_text);
   alert('Error '+error_no+': '+error_text);
}
/*
function exceptionHandler( request, exception )
{
        alert("exception!");
        alert(request.responseText);
        alert(exception);

}

function errorHandler( request )
{
        alert("error!");
        alert(request.responseText);

}

function compHandler( request )
{
        alert("done!");
        alert(request.responseText);

} 
*/
/*****************************************************************************/


/*** AMAGA O MOSTRA **********************************************************/
 
/* PRIVATE */
function ajaxShowHideObj(obj,ajax_action)
{
    var ajax_visible;
    var ajax_display;
    if(obj)
    {
        if(ajax_action=="show")
        {
            ajax_visible="visible";
            ajax_display="inline";
        }
        else
        {
            ajax_visible="hidden";
            ajax_display="none";
        }

            obj.style.visibility=ajax_visible;
            obj.style.display=ajax_display;

/*
        for(i=0;i<obj.length;i++)
        {
            obj[i].style.visibility=ajax_visible;
            obj[i].style.display=ajax_display;
        }
*/

    }
}


/* PUBLIC */
function ajax_showById(ajax_nom)
{
    ajaxShowHideObj(document.getElementById(ajax_nom),"show");
}

/* PUBLIC */
function ajax_hideById(ajax_nom)
{
    ajaxShowHideObj(document.getElementById(ajax_nom),"hide");
}

/* PUBLIC */
function ajax_showByName(ajax_nom)
{
 obj=document.getElementsByName(ajax_nom);

 for(i=0;i<obj.length;i++)
 {
    ajaxShowHideObj(obj[i],"show");
 }

}

/* PUBLIC */
function ajax_hideByName(ajax_nom)
{
 obj=document.getElementsByName(ajax_nom);

 for(i=0;i<obj.length;i++)
 {
    ajaxShowHideObj(obj[i],"hide");
 }

}
/*****************************************************************************/
