/* Fonction de remplacement dans une chaine */
function remplace(expr,a,b) {
    var i=0
    while (i!=-1) {
        i=expr.indexOf(a,i);
        if (i>=0) {
            expr=expr.substring(0,i)+b+expr.substring(i+a.length);
            i+=b.length;
        }
    }
    return expr;
}

/* Prechargement des images au demarrage */
function prechargimg() { 
    var doc=document;
    if(doc.images){ if(!doc.precharg) doc.precharg=new Array();
    var i,j=doc.precharg.length,x=prechargimg.arguments; for(i=0; i<x.length; i++)
    if (x[i].indexOf("#")!=0){ doc.precharg[j]=new Image; doc.precharg[j++].src=x[i];}}
}

/****************************
 FONCTIONS POUR INFOS BULLES
 ****************************/
function bulleInformation(pElement, pTexte) {

    // On recupere les coordonnees de l'element
    var tabCoordonnnees = positionAbsolue(pElement);
    var top = tabCoordonnnees['top'];
    var left = tabCoordonnnees['left'] - 25;
    var imageId = pElement.id;
        
    if($(''+imageId+'_bulle')) {
        // Si la bulle existe
        // On recalcule quand meme sa position (pour le bug avec IE<8)
        var caseHauteur = $(''+imageId+'_bulle').offsetHeight;
        var nouveauTop = top - caseHauteur;
        $(''+imageId+'_bulle').setStyle({top:''+nouveauTop+'px'});
        
        // On ne fait que l'afficher
        $(''+imageId+'_bulle').setStyle({visibility:'visible'});
        return true;
    } else {
        // On cree la div
        var divBulle = Builder.node('div',
            { className:'bulle_information', id: ''+imageId+'_bulle',style: 'top:'+top+'px; left:'+left+'px; visibility:hidden;' }, [
            Builder.node('div',{className:'bulle_information_haut'}),
            Builder.node('div',{className:'bulle_information_milieu'} , [
                Builder.node('div',{className:'bulle_information_texte'} , [pTexte])
                ]),
            Builder.node('div',{className:'bulle_information_bas'}),
            ]);
        $('body').insert({ top: divBulle });
        
        // On calcule la hauteur de la div
        var caseHauteur = $(''+imageId+'_bulle').offsetHeight;
        var nouveauTop = top - caseHauteur;
        
        $(''+imageId+'_bulle').setStyle({top:''+nouveauTop+'px'});
        $(''+imageId+'_bulle').setStyle({visibility:'visible'});
        
        return true;
    }
}
function bulleInformationCacher(pElement) {
     var imageId = pElement.id;
     if($(''+imageId+'_bulle')) {
        $(''+imageId+'_bulle').setStyle({visibility:'hidden'});
        return true;
     }
}

function positionAbsolue(pElement) {
    var left = 0;
    var top = 0;
    var tabResult = new Array();
    
    while (pElement != null){
        left += pElement.offsetLeft;
        top += pElement.offsetTop;
        pElement = pElement.offsetParent;
    }
    tabResult['left'] = left;
    tabResult['top'] = top;
    
    return tabResult;
}

/********************
 * Fonctions du devis
 *********************/

/**
 * Affichage d'une question dependante d'une autre
 * @param string idCase L'identifiant de la case de question a afficher
 */ 
function devisAfficher(idCase) {
    if($(""+idCase+"").style.display == "none") {
        new Effect.Appear(""+idCase+"", {duration: 0.3});
    } else {
        new Effect.Fade(""+idCase+"", {duration: 0.3});
    }
}

function devisAfficherPremiereCategorie() {
    devisAfficherCategorie(1);
}
/**
 * Affichage de  la partie du devis
 * @param string pCategorie L'identifiant de la categorie a afficher
 */
categorieEnCours = "";
function devisAfficherCategorie(pCategorie) {

    // Effet de descente
    if(categorieEnCours != pCategorie) {
        if(categorieEnCours != "") {
            // On remonte l'ancien sous-menu s'il y en a un
            if($("devis_case_"+categorieEnCours+"")) {
                new Effect.SlideUp("devis_case_"+categorieEnCours+"", {duration: 1.0});
            }
        }
    }
    // On descend le nouveau menu s'il y en a un
    if($("devis_case_"+pCategorie+"")) {
        new Effect.SlideDown("devis_case_"+pCategorie+"", {queue: 'end',duration: 1.0});
    }
    
    categorieEnCours = pCategorie;
}

/**
 * Validation d'une categorie de questions
 * @param string pCategorie L'identifiant de la categorie
 */ 
var tableauErreurs = ""; // On initialise le tableau des erreurs
function requeteDevis(pCategorie,pAction,pSuivant) {
    
    // On bloque l'input
    $("bouton_validation_"+pCategorie+"").disabled = true;
    // On met l'image d'attente
    $("patientez_"+pCategorie+"").setStyle({display:'block'});
    
    // Recuperation des donnees du formulaire
    donnees_post = 'action='+pAction+'&categorie='+pCategorie;
    var monformulaire = document.getElementById('devis_formulaire_'+pCategorie);
    if(monformulaire) {
        donnees_post += '&' + Form.serialize(monformulaire) ;
    }
	// Envoi de la requete au serveur
	new Ajax.Request(
        'pages/ajax/devis.php',
        {
            method: 'post',
            parameters: donnees_post,
            onSuccess: function(transport) {
                chaine = transport.responseText;
                retour = eval('(' + chaine + ')');
                // On enleve tout le rouge precedent - Reinitialisation des cases
                if(tableauErreurs.length > 0) {
                    for(i=0 ; i<tableauErreurs.length ; i++){
                        ancienneClasse = $(""+tableauErreurs[i]+"").className;
                        nouvelleClasse = ancienneClasse.replace(/devis_erreur/g, '');
                        $(""+tableauErreurs[i]+"").className = nouvelleClasse;
                    }
                    tableauErreurs = "";
                }
                    
                if(retour.validation == "ok") {
                    // S'il n'y a pas d'erreurs
                    // Si on est a la fin, on affiche le html de confirmation
                    if(pAction == "validerderniereetape") {
                        $("devis_case_"+pSuivant+"").innerHTML = retour.affichage;
                    }
                    devisAfficherCategorie(""+pSuivant+"");
                    // On affiche le petit bouton permettant de modifier directement
                    $("devis_modifier_"+pCategorie+"").setStyle({visibility:'visible'});
                }
                else {
                    // S'il y a des erreurs, on met les champs en rouge
                    tableauErreurs = retour.erreurs.split(',');
                    for(i=0 ; i<tableauErreurs.length ; i++){
                        $(""+tableauErreurs[i]+"").className += " devis_erreur";
                    }
                }
                // On debloque l'input
                $("bouton_validation_"+pCategorie+"").disabled = false;
                // On enleve l'image d'attente
                $("patientez_"+pCategorie+"").setStyle({display:'none'});
            },
            onFailure: function() {
                alert('Erreur de chargement des donnees. Veuillez re-essayer et nous excuser de ce desagrement. Si le probleme persiste, veuillez nous contacter.');
                // On debloque l'input
                $("bouton_validation_"+pCategorie+"").disabled = false;
                // On enleve l'image d'attente
                $("patientez_"+pCategorie+"").setStyle({display:'none'});
            }
        }
    );
}

/**
 * Partie realisations
 * @param string pIdentifiant L'identifiant a afficher
 */
identifiantEnCours = "";
function afficherElement(pIdentifiant) {

    // On remonte l'ancien sous-menu s'il y en a un
    if(identifiantEnCours != "") {
        if($(""+identifiantEnCours+"")) {
            new Effect.SlideUp(""+identifiantEnCours+"", {duration: 1.0});
            $(""+identifiantEnCours+"_source").innerHTML = "En savoir plus...";
        }
    }
	// On descend le nouveau menu s'il y en a un et s'il est different du precedent
    if(identifiantEnCours != pIdentifiant) {
	    if($(""+pIdentifiant+"")) {
	        new Effect.SlideDown(""+pIdentifiant+"", {queue: 'end',duration: 1.0});
            $(""+pIdentifiant+"_source").innerHTML = "Fermer le d&eacute;tail";
	    }
	    identifiantEnCours = pIdentifiant;
    } else {
        identifiantEnCours = "";
    }
}
