/*****************************************************************************************************************
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();
var monurl="";
var mareq="";

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 forma;
    var req = "";
    monurl = url;
    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){
            forma=document.forms[form];
            req= ART_get_form_element(forma);
            req+="form_retour="+forma.name;
            
            if(forma.attributes['method'].nodeValue=='get'){
                if(url.indexOf("?")!=-1) url += "&"+req; else url += "?"+req;
            }
        }else{
            req+="";
        }
        
        //req= req.substring(0,req.length-1);
        //alert(req);
        http_request.open('POST', url, true);
        http_request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");        
        http_request.send(req);
        mareq = req;
    } 
    return false;
}
 
function ART_get_form_element(obj){
    var Aa_obj;
    var req='';
    for(n in obj.childNodes){
        Aa_obj = obj.childNodes[n];
        if(Aa_obj){
            if(ART_is_abled(Aa_obj) && (Aa_obj.nodeType==1)){
                switch (Aa_obj.nodeName){
                    case "INPUT":                               
                        switch (Aa_obj.attributes['type'].nodeValue){
                            case "text":
                            case "hidden":
                            case "password":
                                req += Aa_obj.attributes['name'].nodeValue+"="+Aa_obj.value+"&";
                                break;
                            case "radio":
                            case "checkbox":
                                if (Aa_obj.checked==true){
                                    if(Aa_obj.attributes['type'].nodeValue=="checkbox" && Aa_obj.getAttribute("value")==undefined) Aa_obj.value=1;
                                    req += Aa_obj.attributes['name'].nodeValue+"="+Aa_obj.value+"&"; 
                                }
                                break;
                            default:
                                break;
                        }
                        break;
                    case "SELECT": 
                        if (Aa_obj.attributes['multiple']){
                            for(n=0;n< Aa_obj.options.length;n++){
                                if(Aa_obj.options[n].selected){
                                    req += Aa_obj.attributes['name'].nodeValue+"="+Aa_obj.options[n].value+"&";
                                }
                            }
                        }else{
                            req += Aa_obj.attributes['name'].nodeValue+"="+Aa_obj.options[Aa_obj.options.selectedIndex].value+"&";
                        }
                        break;
                    case "TEXTAREA": 
                        req += Aa_obj.attributes['name'].nodeValue+"="+Aa_obj.value+"&";
                        break;
                    default:
                        break;
                }
                if (Aa_obj.childNodes !== null) req += ART_get_form_element(Aa_obj);
            }
        }
    }
    return req;
}

function ART_is_abled(obj){
    if(!obj.disabled) return true;       // pas d'attribut
    if(obj.disabled==false) return true; // attribut present et objet actif
    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; 
            if(div_info=="moteur_resultats"){
                if(http_request.responseText.indexOf('ART_no_results')==-1){
                    document.getElementById(div_info).style.visibility = "visible";
                }else{
                    document.getElementById(div_info).style.visibility = "hidden";
                }
            }else{
                $(document).ready(function(){
                    if ($("#"+div_info).is(":hidden")){
                        $("#"+div_info).fadeIn('fast');
                    }
                });
            }            
            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'+monurl+" "+mareq);
        }
    }
}


function ART_return_ajax(url,span_retour,nom_formulaire){
     document.getElementById('liaison_div').style.visibility='hidden';
     document.getElementById('liaison_contenu').innerHTML='';
     ART_ajax(url,span_retour,nom_formulaire);
}

// execution des scripts de retour ajax
function ART_test_call(){
    var n;
    var scripts=document.getElementsByTagName("script"); // recuperation des scripts
    for(n=0;n<scripts.length;n++){
        var scr = scripts[n];
        if(scr.id=="ART_ajax_callback"){
            eval(scr.text);
            scr.removeAttributeNode(scr.attributes['id']); 
        }
    }
}

function ART_ajax_form_submit(bouton_id){
    var bouton = document.getElementById(bouton_id);
    //alert(bouton.getAttribute('onclick'));
    eval(bouton.getAttribute('onclick'));
}

var aP_div=0;
var aP_div2=0;
function ART_popup(w,h,t,url,form){
    ART_getOffset(); // présente dans zoom.js  
    if(aP_div2==0) aP_div2 = document.createElement("div");
    aP_div2.id = "popup_bg";
    aP_div2.className = 'popup_bg';
    aP_div2.style.zIndex = 999; 
    aP_div2.onclick=ART_killpopup;
    aP_div2.style.display = 'none';
    document.body.appendChild(aP_div2);
    $("#popup_bg").fadeIn("slow");  
    
    if(aP_div==0) aP_div = document.createElement("div");
    aP_div.id = "popup_div";
    //aP_div.className = 'article_popup'; 
    aP_div.style.position = "absolute";
    aP_div.style.zIndex = 1000;
    aP_div.style.top = (t+page.offsety)+"px";
    aP_div.style.left = (page.width/2 - Math.floor(w/2))+"px";
    aP_div.style.width = w+"px";
    //aP_div.style.height = h+"px";
    aP_div.style.display = 'none';
    document.body.appendChild(aP_div);
    ART_ajax(url,'popup_div',form);
}

function ART_killpopup(){
    $("#popup_bg").fadeOut("slow");
    $("#popup_div").fadeOut("fast");
}


function ART_pop_swapMiniature(img){
    var aZ_td = document.getElementById('pop_grande');
    var image_en_cours = aZ_td.src;
    aZ_td.src = img.src.replace('thumb/','moyenne/');
    img.src = image_en_cours.replace('moyenne/','thumb/');
}

function chgLogo_pop(id, nb){
    for(var n=0; n<nb; n++){
        if(n!=id) document.getElementById("fleche_pop_"+n).style.visibility = 'hidden'; else document.getElementById("fleche_pop_"+n).style.visibility = 'visible';   
    }
    document.getElementById("logo_pop_txt").innerHTML = document.getElementById("txt_pop_"+id).innerHTML;
}

function getBloc_pop(bloc){
    var zebtn = document.getElementById('btn_pop_'+bloc);
    if(zebtn.className!='detail_onglet_on'){
        var blocs = new Array('carac','tech');
        for(n=0;n<blocs.length;n++){
            var btn = document.getElementById('btn_pop_'+blocs[n]);
            btn.className='detail_onglet_off';
            var blo = document.getElementById('bloc_pop_'+blocs[n]);
            blo.style.display='none';
        }
        zebtn.className='detail_onglet_on';
        $("#bloc_pop_"+bloc).fadeIn('slow');
    }
}