/*****************************************************************************************************************
ajax.js : ensemble de scripts réunissant toutes les fonctions d'envoi de data et de retour en ajax 

MAJ : 

18/08/2008 : ajout d'un tableau appelé ART_cue... (beau nom n'est-ce pas ?) le principe est de stocker les appels à la fonction successifs afin de les traiter dans l'ordre d'arrivée.

fonctions : 
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ART_ajax(url,container,form) : 
    url : string - url avec ou sans get, 
    container : string - id de l'objet à remplir,
    form : string ou num : "name" du formulaire (W3C=pas d'id au fomulaire) ou 0 (chiffre zéro) si on n'utilise pas de formulaire mais seulement les paramètres get de l'url 

    ART_ajax parle en DOM au formulaire et à ses noeuds enfants, la fonction est compatible ie7, firefox2 et safari3
    l'idée est d'envoyer directement le formulaire tel qu'il est écrit, la fonction prend en compte les champs disabled ou non.
    l'attribut method (post ou get) modifie le comportement de la fonction : le fichier appelé par url recevra le tableau $_GET ou le tableau $_POST
    (dans le cas d'un envoi en post : si l'url contient des variables de get, l'url reçoit le formulaire en $_POST et le variables url en $_GET)
    return false;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////       
ART_is_form_element(obj) :
    obj : DOM object, vérifie dans le nodeName si obj est un élément DOM de formulaire (INPUT, SELECT, TEXTAREA)
    return obj ou false;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////       
ART_is_abled(obj) : 
    obj : DOM object, vérifie si le chap est actif ou non
    return true ou false;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////       
ART_alertContents() : 
    appelée au retour des infos du serveur : remplit l'objet à l'id "container" de la fonction ART_ajax avec ledit retour
    si erreur : alert;   
******************************************************************************************************************/
var div_info = "";
var ART_module, ART_action, ART_id ;
var http_request = false;
var ART_cue = new Array();
var pmv_urlDoc="";
function ART_ajax(url,container,form){
    pmv_urlDoc=url;
    //alert(url+" "+container+" "+form);
    // Je stocke dans la cue ... sous conditions (pas de répétition de requète pour éviter les boucles)
    var stock_requete = new Array(url,container,form);
    if(ART_cue[0]){
        if(stock_requete.toString()!=ART_cue[0].toString())ART_cue.push(stock_requete);
    }else{
        ART_cue.push(stock_requete);
    }
    
    // Je check ce qui est en cours
    var encours=ART_cue[0];
    if(encours[0]==url && encours[1]==container && encours[2]==form){
        // je continue je suis sur moi !!! lol
        var req="";
        http_request = false;
        // on recupere la valeur du combo
        if (window.XMLHttpRequest) { // Mozilla, Safari,...
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType('text/xml');
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                try {
                    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                } catch (e) {}
            }
        }
        if (!http_request) {
            alert('Abandon :( Impossible de créer une instance XMLHTTP');
            return false;
        }
        http_request.onreadystatechange = ART_alertContents; // fonction appelée quand ca reviens
        
        div_info=container;
        if(form!=0){
            form=document.forms[form];
            for(n in form.elements){
                if(Aa_obj = form.elements[n]){
                    if(Aa_obj.nodeName=="INPUT"){
                        if((Aa_obj.attributes['type'].nodeValue=="text" || Aa_obj.attributes['type'].nodeValue=="hidden") && ART_is_abled(Aa_obj)){
                            req += Aa_obj.attributes['name'].nodeValue+"="+Aa_obj.value+"&";
                        }else if((Aa_obj.attributes['type'].nodeValue=="radio" || Aa_obj.attributes['type'].nodeValue=="checkbox") && Aa_obj.checked==true && ART_is_abled(Aa_obj)){
                            if(Aa_obj.attributes['type'].nodeValue=="checkbox") Aa_obj.value=1;
                            req += Aa_obj.attributes['name'].nodeValue+"="+Aa_obj.value+"&"; 
                        } 
                    }else if(Aa_obj.nodeName=="SELECT" && ART_is_abled(Aa_obj)){ 
                        req += Aa_obj.attributes['name'].nodeValue+"="+Aa_obj.options[Aa_obj.options.selectedIndex].value+"&";
                    }else if(Aa_obj.nodeName=="TEXTAREA" && ART_is_abled(Aa_obj)){ 
                        req += Aa_obj.attributes['name'].nodeValue+"="+Aa_obj.value+"&";
                    }
                }
            }
            req = req.substring(0,req.length-1);
            //alert (req);
            if(form.attributes['method'].nodeValue=='get'){
                if(url.indexOf("?")!=-1) url += "&"+req; else url += "?"+req;
                req = "";
            }
        }
        
        /*ART_module=ART_setVar(url,req,'module');
        ART_action=ART_setVar(url,req,'action');
        ART_id=ART_setVar(url,req,'id'); */
        
        http_request.open('POST', url, true);
        http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");        
        http_request.send(req);
    }else{
        // sinon rien et on attend le retour du encours...
    } 
    return false;
}

function ART_setVar(url,req,nomVariable){
   var v=ART_getVar(url,nomVariable);
   if(v==0) v=ART_getVar(req,nomVariable);
   if(v==0) v= "";
   return v;
}

function ART_getVar(chaine,nomVariable){
    var infos = chaine.substring(chaine.indexOf("?")+1, chaine.length)+"&"
    if (infos.indexOf("#")!=-1)
    infos = infos.substring(0,infos.indexOf("#"))+"&"
    var variable=0
    {
    nomVariable = nomVariable + "="
    var taille = nomVariable.length
    if (infos.indexOf(nomVariable)!=-1)
        variable = infos.substring(infos.indexOf(nomVariable)+taille,infos.length).substring(0,infos.substring(infos.indexOf(nomVariable)+taille,infos.length).indexOf("&"))
    }
    return variable;
} 

function ART_is_form_element(obj){
    var rez=false;
    var form_elements = new Array("INPUT","SELECT","TEXTAREA");
    for(var Aifen in form_elements){
        if(form_elements[Aifen]==obj.nodeName){
            rez=true;
            break;
        }
    }
    if(rez==true) return obj; else return false;
}

function ART_is_abled(obj){
    if(obj.disabled==false){
        return true;
    }else{
        return false;
    }
    
}
    
function ART_alertContents() {
    if (http_request.readyState == 4) {
        // retour effectué
        if (http_request.status == 200) {
            // retour http normal
            //alert (http_request.responseText);
            //alert (div_info);                      
            document.getElementById(div_info).innerHTML = http_request.responseText;
            setTimeout('ART_test_call();',200);
            ART_cue.shift(); 
            if(encours=ART_cue[0])ART_ajax(encours[0],encours[1],encours[2]);                                                                      
        } else {
            alert('Un problème est survenu avec la requête.\n'+requete);
        }
    }
}

function ART_test_call(){
    for(n=0;n<100;n++){
        if(scr=document.getElementsByTagName("script")[n]){
            if(scr.id=="ART_ajax_callback"){
                eval(scr.text);
                scr.id="ART_ajax_callback_done" 
                //pmv_click(phpmyvisitesURL, phpmyvisitesSite, pmv_urlDoc, pagename, "", a_vars);
            }
        }
    }
}