/*****************************************************************************************************************
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 http_request = false;
var ART_cue = new Array();

function ART_ajax(url,container,form){
    //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 = "";
            }
        }
        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_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?
        //alert(http_request.status);
        if (http_request.status == 200) {
            // retour http normal
            //alert (http_request.responseText);           
            document.getElementById(div_info).innerHTML = http_request.responseText;
            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'+url+"?"+req);
        }
    }
}