//  ============================================================================
//
//  Librairie Javascript/Ecmacript pour le au-resto.fr
//  (c) 3 mars 2007 ; Emmanuel Chavanon - deepsytomy@yahoo.fr
//
//  Fonctions propres aux Restos
//
//  ============================================================================

color_error  = "#EFB3B3";
normal_color = "#FFFFFF";
anim_time = 150;

window.onload=function()
{
    stripBorders();
}

function printFrame(nom_frame)
{
    parent.frames[nom_frame].print();
}

function popupImage(img_url)
{
    var printCheckSize = "<script type='text/javascript'>"+
    "\nfunction checksize() {"+
    "\nif (document.images[0].complete)"+
    "\n    {"+
    "\n        var w_height = document.images[0].height + 50;"+
    "\n        var w_width  = document.images[0].width + 5;"+
    "\n        window.resizeTo(w_width,w_height);"+
    "\n        window.focus();"+
    "\n    }"+
    "\n    else"+
    "\n        settimeout('checksize()',250);"+
    "\n}"+
    "\n</script>";

    var titre="Image taille réelle";
    var w=open("",'image','width=400,height=400,toolbar=no,scrollbars=no,resizable=yes');
    w.document.write("<html><head><title>"+titre+"</title>"+
                     printCheckSize +
                     "</head>");
    w.document.write("<body onload='checksize()' onblur='window.close()' onclick='window.close()' leftmargin=0 topmargin=0 marginwidth=0 marginheight=0>");
    w.document.write("<img src='"+img_url+"' border=0 alt='mon image'>");
    w.document.write("</body></html>");
    w.document.close();
}

function popupItem(url)
{
    var conf_str = "'width=300,height=300, toolbar=no, menubar=no, scrollbars=yes, resizable=no, location=no, directories=no, status=yes'";
    window.open(url, 'popup', conf_str);
    return false;
}

//  ----------------------------------------------------------------------------
//  Utilitaires divers de manipulation DOM
//  ----------------------------------------------------------------------------

//  Supprimer un élément Html
function removeElt(element_id)
{
    var element = document.getElementById(element_id);
    try{
        element.value = "";
    }
    catch(e){}

    var parent = element.parentNode;
    parent.removeChild(element);
}

// Afficher / cacher des éléments
function toggle(element_id)
{
	var element = document.getElementById(element_id);

	if (element.style.display != "block")
	   element.style.display = "block";

	else
		element.style.display = "none";
}

function hide(elt)
{
	document.getElementById(elt).style.display="none";
	return false;
}

function display(elt)
{
	document.getElementById(elt).style.display="block";
	return false;
}


function setAction(action)
{
	document.getElementById('do_action').value=action;
	return true;
}

function setFocus(elt)
{
	document.getElementById(elt).focus();
	return false;
}




// Set a class for all browsers
function setClasse(element, classe)
{
    element.setAttribute('class', classe);
    element.className = classe;
}

//  ------------------------------------------------------------------------------
//    Utilitaire pour récupérer la classe html d'un élément
//
function getClasse(element)
{
    if(window.XMLHttpRequest) // Gecko
        var classe = element.getAttribute('class');
    else if(window.ActiveXObject) // Internet Explorer
        var classe = element.getAttribute('className');

    return classe;
}

//  ==================================================================================================
//
//  GRAPHISMES & Co
//
//  ==================================================================================================
//  ------------------------------------------------------------------------------
//    Fonction dédiée à effacer les bordures des input de type checkbox et radio au démarrage
//    Pallie la lacune de IE qui ne sait traiter le selecteur CSS suivant :
//    input[type=checkbox]{border:none;}
function stripBorders()
{
    var inputz = document.getElementsByTagName("input");

    for(var i=0; i<inputz.length; i++ )
    {
        if(inputz[i].getAttribute("type") == "radio" || inputz[i].getAttribute("type") == "checkbox")
            setClasse(inputz[i], "noborder");
    }
}


//  ==================================================================================================
//
//  OUTILS COMMUNS AUX VERIFICATIONS DE FORMULAIRESS
//
//  ==================================================================================================

//  ----------------------------------------------------------------------------
// Vérification du login / Mot de passe
function verifLoginGroupe()
{
    var err = "";
    var login = document.getElementById('login');
    var password = document.getElementById('password');

    // RAZ
    login.style.borderColor = "#9E9E9E";
    password.style.borderColor = "#9E9E9E";

    if(login.value == "")
    {
        err += "Vous devez spécifier un Identifiant.\n";
        login.style.borderColor = color_error;
    }
    if(password.value == "")
    {
        err += "Vous devez spécifier un mot de passe.\n";
        password.style.borderColor = color_error;
    }

    return renderErrorAlert(err);
}

// Vérification pour le module de rappel
function verifRappel()
{
    var err = "";
    var should_not_be_empty_fields = new Array();
    // Champs obligatoires
    should_not_be_empty_fields.push( document.getElementById('prenom') );
    should_not_be_empty_fields.push( document.getElementById('nom') );
    should_not_be_empty_fields.push( document.getElementById('telephone') );


    // Vérification des champs vides
    err = verifEmptyElements(should_not_be_empty_fields);
    if(err != "")
        err = "Les champs suivants sont manquants : \n" + err;

    return renderErrorAlert(err);
}


// Vérification pour le module de contact
function verifContact()
{
    var err = "";
    var err_brochure = "";
	var email = document.getElementById('email');
    email.parentNode.style.backgroundColor = normal_color;
    var brochure = document.getElementById('brochure_on');

    var should_not_be_empty_fields = new Array();
    // Champs obligatoires
    should_not_be_empty_fields.push( document.getElementById('email') );
    should_not_be_empty_fields.push( document.getElementById('nom') );
    should_not_be_empty_fields.push( document.getElementById('prenom') );


    if(brochure && brochure.checked)
    {
        should_not_be_empty_fields.push( document.getElementById('adresse') );
        should_not_be_empty_fields.push( document.getElementById('code_postal') );
        should_not_be_empty_fields.push( document.getElementById('ville') );
        should_not_be_empty_fields.push( document.getElementById('pays') );
        err_brochure = " pour une demande de brochure ";
    }

    // Vérification des champs vides
    err = verifEmptyElements(should_not_be_empty_fields);
    if(err != "")
        err = "Les champs suivants sont manquants "+err_brochure+": \n" + err;

    if(!verif_mail(email.value))
    {
        err += "L'email n'est pas correct.\n";
        email.parentNode.style.backgroundColor = color_error;
    }

    return renderErrorAlert(err);
}


// Vérification pour le module de contact
function verifDemandeDevis()
{
    var err = "";
    var err_brochure = "";
	var email = document.getElementById('email');
    email.parentNode.style.backgroundColor = normal_color;
    var brochure = document.getElementById('brochure');

    var should_not_be_empty_fields = new Array();
    // Champs obligatoires
    should_not_be_empty_fields.push( document.getElementById('email') );
    should_not_be_empty_fields.push( document.getElementById('nom') );
    should_not_be_empty_fields.push( document.getElementById('prenom') );
    should_not_be_empty_fields.push( document.getElementById('destination') );
    should_not_be_empty_fields.push( document.getElementById('ville_depart') );

    if(brochure && brochure.checked)
    {
        should_not_be_empty_fields.push( document.getElementById('adresse') );
        should_not_be_empty_fields.push( document.getElementById('code_postal') );
        should_not_be_empty_fields.push( document.getElementById('ville') );
        should_not_be_empty_fields.push( document.getElementById('pays') );
        err_brochure = " pour une demande de brochure ";
    }

    // Vérification des champs vides
    err = verifEmptyElements(should_not_be_empty_fields);
    if(err != "")
        err = "Les champs suivants sont manquants "+err_brochure+": \n" + err;

    if(!verif_mail(email.value))
    {
        err += "L'email n'est pas correct.\n";
        email.parentNode.style.backgroundColor = color_error;
    }

    return renderErrorAlert(err);
}

//  ------------------------------------------------------------------------------
//  Vérifier le format d'un email
function verif_mail(a_mail) {
   mymail = a_mail;
   var mail_err = 0
   var r_mail = /^[A-Za-z0-9._-]+@[A-Za-z0-9.-]{2,}[.][A-Za-z]{2,4}$/
   ok_mail = r_mail.exec(mymail);
   if (!ok_mail) {
      return false;
   } else {
      return true;
   }
}

// -----------------------------------------------------------------------------
// Générique pour la vérification des champs vides
// Le focus est placé sur le 1er élément vide de la liste
// Avec un adapter pour tinyMCE
function verifEmptyElements(array)
{
    var err = "";
    var first_element = null;
    for(var i=0; i< array.length; i++)
    {
        var element = array[i];
        try{ element.parentNode.style.backgroundColor = normal_color;}
        catch(e){
            alert ("problème avec l'élément " + i);
            return false;
        }


        try{      var element_value = tinyMCE.getContent(element.id);}
        catch(e){ var element_value = element.value;}

        if(element_value == "")
        {
            err += "- " + element.title + "\n";
            element.parentNode.style.backgroundColor = color_error;
            if(first_element == null)
            {
                first_element = element;
                element.focus();
            }
        }
    }

    return err;
}

// -----------------------------------------------------------------------------
// Générique pour une vérif de date vide
function verifEmptyDate(date_str)
{
    if(date_str == "" || date_str == "0000-00-00")
        return true;

    return false;
}

// -----------------------------------------------------------------------------
// Générique pour l'affichage de l'erreur
function renderErrorAlert(err)
{
    if(err != "")
    {
        alert(err);
        return false;
    }
    else
        return true;
}

// Permet d'afficher le champ parcourir traditionnel.
function checkPieceJointe(element, input_file)
{
    var input_file = document.getElementById(input_file);

    if(element.value == "change")
    {
        input_file.style.display = "inline";
    }
    else
    {
        input_file.style.display = "none";
        input_file.value = "";
    }
}


// ==============================================================================
// SPECIAL POUR SWFUPLOAD
// -----------------------------------------------------------------------------
// Générique pour la fin des traitements d'upload. Vérifie que TOUS les uploads sont ok.
function uploadDone(form_id) {
	try {
		document.getElementById(form_id).submit();
	} catch (ex) {"uploadDone : " + alert(ex.message);}
}

// Vérification des fichiers en cours d'upload
function isFileToCheckUpload(swf_upload_control)
{
    // On récupère le conteneur HTML des fichiers en transit
    var progress_target     = swf_upload_control.getSetting("progress_target");
    var progress_target_elt = document.getElementById(progress_target);
    progress_target_elt.parentNode.parentNode.style.backgroundColor = normal_color;

    // on vérifie les éléments en cours d'upload
    var SWFUploads = progress_target_elt.getElementsByTagName("div");
    if(SWFUploads.length == 0) // Si on ne trouve pas d'élément
        return false;

    // On parcourt les éléments pour voir s'ils sont "annulés".
    var canceled   = 0;
    var containers = 0;
    for(var i = 0 ; i < SWFUploads.length; i++)
    {
        var s_class = getClasse(SWFUploads[i]);
        var s_text  = SWFUploads[i].innerHTML;
        if(s_class == "progressContainer")
            containers++;
        else if(s_class == "progressBarStatus" && s_text == "Annulé")
            canceled++;
    }

    //alert("containers : " + containers + "\ncanceled : " + canceled);

    // Si tous les éléments trouvés ont été annulés, il n'y a donc aucun fichier...
    if(containers == canceled || containers == 0)
        return false;
    else
        return true;
}

// Ceci vérifie s'il y a des fichiers à uploader.
function checkFiles(swf_upload_control)
{
    allow_no_files = swf_upload_control.getSetting("allow_no_file");
    if(allow_no_files)
        return true;

    // On récupère le conteneur HTML des fichiers en transit
    var progress_target     = swf_upload_control.getSetting("progress_target");
    var progress_target_elt = document.getElementById(progress_target);
    progress_target_elt.parentNode.parentNode.style.backgroundColor = normal_color;

    // On récupère d'abord les potentiels déjà fichiers présents
    // Ce nombre est donné dans une variable
    swf_upload_control_id = swf_upload_control.getSetting("multiple_id");
    nb_fichiers_existants = parseInt(document.getElementById("nb_fichiers_" +swf_upload_control_id).value);
    var test_nb_fichiers = 0;
    if(nb_fichiers_existants != 0)
    {
        for(var i = 0; i <= nb_fichiers_existants; i++)
        {
            try{
                var str = "fichier_" + swf_upload_control_id + "_" + i;
                var test = document.getElementById(str);
                if(test.id)
                    test_nb_fichiers++;
            }catch(e){
                var test = "Pas de fichier";
            }
        }
    }
    // Si on a pas trouvé de fichier DEJA uploadé, alors, on regarde s'il y en a en
    // "projet" d'upload
    if(test_nb_fichiers == 0)
    {
        // on vérifie les éléments en cours d'upload
        var SWFUploads = progress_target_elt.getElementsByTagName("div");
        if(SWFUploads.length == 0) // Si on ne trouve pas d'élément
            return renderNoFileError(progress_target_elt);

        // On parcourt les éléments pour voir s'ils sont "annulés".
        var canceled   = 0;
        var containers = 0;
        for(var i = 0 ; i < SWFUploads.length; i++)
        {
            var s_class = getClasse(SWFUploads[i]);
            var s_text  = SWFUploads[i].innerHTML;
            if(s_class == "progressContainer")
                containers++;
            else if(s_class == "progressBarStatus" && s_text == "Annulé")
                canceled++;
        }

        // Si tous les éléments trouvés ont été annulés, il n'y a donc aucun fichier...
        if(containers == canceled)
            return renderNoFileError(progress_target_elt);
    }
    return true;
}

// Ceci vérifie s'il y a des fichiers à uploader.
function renderNoFileError(progress_target_elt)
{
    progress_target_elt.parentNode.parentNode.style.backgroundColor = color_error;
    alert("Vous n'avez pas choisi de fichier à télécharger.");
    return false;
}

//  ----------------------------------------------------------------------------
// Check du nombre de fichier dans une liste
// Utilisé avec SWFUpload.
// nb_max_files  = nombre max de fichiers autorisés
// id_file_field = id du champ HTML censé contenir le fichier initial
// id_file_div   = id du div conteneur, qui sera ôté le cas échéant
function checkNbFiles(nb_max_files, id_file_field, id_file_div)
{
    if(nb_max_files == "1")
    {
        try{
            var fichier = document.getElementById(id_file_field);
            if(fichier.value != "")
            {
                var suppr = confirm("Un fichier est déjà spécifié.\nEn en choisissant un autre, vous supprimerez l'actuel");
                if(suppr)
                    removeElt(id_file_div);
            }
            return suppr;
        }
        catch(e){
            //alert("checkNbFiles() : " + e.message);
        }
    }
    return true;
}


//  ----------------------------------------------------------------------------
//  Animations jQuery
function slideThese(button, elements_to_slide_str)
{
    if($(button).attr('checked'))
        $(elements_to_slide_str).slideDown(anim_time);
    else
        $(elements_to_slide_str).slideUp(anim_time);
}
