// alerte.js: vérifications syntaxiques sur le contenu des formulaires

function compactsp(x) { // compacter les "espaces" contigus
    var r = '';
    var cprec=''
    for (var i=0; i<x.length; i++) {
        var c = x.charAt(i);
        if (c != ' ') {r+=c; cprec=c;}
        else if (cprec!=' '){r+=c; cprec=c;}
    }
    return r;
}

function rmleadtrail(x) {// enlever les "espaces" EN DEBUT et en FIN de la chaine
    var i = 0;
    var iFirst = 0;
    var iLast = 0;
    var r='';
    while (i<x.length && x.charAt(i)==' ')  i++; // premier non espace
    iFirst = i;
    if (i==x.length) return r;  // il n'y a que des espaces!
    iLast = x.length-1;
    while (i<iLast && x.charAt(iLast)==' ') iLast--; // dernier non espace
    for (i=iFirst; i<iLast+1; i++)  
        r += x.charAt(i);
    return r;
}

// traitement pour comptage des caractères utiles:

// liste des caractères espaçant
var liste_espace = " '-"; // espace, apostrophe, tiret; virgule, ajouter le 0xA0

// liste des caractères à conserver: chiffres, lettres min/MAJ
// et tous les accentués:  C0-CF, D1-D6, D8-DD, E0-EF, F1-F6, F8-FD et la virgule
var liste_ok = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,"
    + String.fromCharCode(192,193,194,195,196,197,199,200,201,202,203,204,205,206,207,
        209,210,211,212,213,214,216,217,218,219,220,221,
        224,225,226,227,228,229,230,231,232,233,234,235,236,237,239,239,
        241,242,243,244,245,246,248,249,250,251,252,253);
    

function Compactage(val){
    var r1="";
    for (i=0; i<val.length; i++){
        c = val.charAt(i);
        if (liste_espace.indexOf(c)!=-1) // caractère assimilé à un espace
            r1 += " ";
        else if (liste_ok.indexOf(c)!=-1) // caractère à conserver
            r1 += c;
        // else traitement des ligatures, si on décide de le faire
        else if (val.charCodeAt(i)==198) // ligature AE
            r1 += "AE";
        else if (val.charCodeAt(i)==230) // ligature ae
            r1 += "ae";
        else if (val.charCodeAt(i)==140) // ligature OE
            r1 += "OE";
        else if (val.charCodeAt(i)==156) // ligature oe
            r1 += "oe";
    }
    var r2 = compactsp(r1); // compacter les espaces contigus
    return rmleadtrail(r2); // puis suppression des espaces en tete et queue
}

// vérification de valeur vide
function is_empty(obj){
    val2 = Compactage(obj.value);
    //alert("original='"+obj.value+"'\ncompacté='"+val2+"'");
    if (val2 == "") return true;
    else return false;
}

// mesure de la longueur utile d'un champ
function field_length(obj){
    val2 = Compactage(obj.value);
    return val2.length;
}

// affiche la popup d'alerte pour le numéro d'alerte indiqué
function Alerte(form, numero){
    OpenAlerte(form, numero); // popup PJI
    return false; 
}

// verification du formulaire PJ (rend true si aucun problème détecté)
// les numéros d'alerte correspondent aux numéros internes sur le serveur...

function check_form_PJ(form){
    dep=Compactage(form.FRM_DEPARTEMENT.value);
    if ((dep=='75') && is_empty(form.FRM_LOCALITE))
        form.FRM_LOCALITE.value='PARIS';
    if (field_length(form.FRM_LOCALITE)>55)
        return Alerte(form, 13);
    else if (field_length(form.FRM_DEPARTEMENT)>55)
        return Alerte(form, 14);
    else if (field_length(form.FRM_ADRESSE)>55)
        return Alerte(form, 15);
    else if (field_length(form.FRM_NOM)>55)
        return Alerte(form, 17);
    else if (!is_empty(form.FRM_ADRESSE) && is_empty(form.FRM_LOCALITE) )
        return Alerte(form, 3);
    else if (is_empty(form.FRM_DEPARTEMENT) && is_empty(form.FRM_LOCALITE))
        return Alerte(form, 4);
    else if (is_empty(form.FRM_ACTIVITE) && is_empty(form.FRM_NOM) && is_empty(form.FRM_ADRESSE)
            && (!is_empty(form.FRM_LOCALITE) ||!is_empty(form.FRM_DEPARTEMENT) ))
        return Alerte(form, 7);
    else 
        return true;
}

function check_form_PB(form){
    dep=Compactage(form.FRM_DEPARTEMENT.value);
    if ((dep=='75') && is_empty(form.FRM_LOCALITE))
        form.FRM_LOCALITE.value='PARIS';
    if (field_length(form.FRM_LOCALITE)>55)
        return Alerte(form, 13);
    else if (field_length(form.FRM_DEPARTEMENT)>55)
        return Alerte(form, 14);
    else if (field_length(form.FRM_ADRESSE)>55)
        return Alerte(form, 15);
    else if (field_length(form.FRM_NOM)>55)
        return Alerte(form, 17);
    else if (field_length(form.FRM_PRENOM)>55)
        return Alerte(form, 18);
    else    if (is_empty(form.FRM_NOM) && !is_empty(form.FRM_PRENOM))
        return Alerte(form, 1);
    else if (is_empty(form.FRM_NOM) && is_empty(form.FRM_NOM) && is_empty(form.FRM_ADRESSE))
        return Alerte(form, 2);
    else if (!is_empty(form.FRM_ADRESSE) && is_empty(form.FRM_LOCALITE))
        return Alerte(form, 3);
    else if (is_empty(form.FRM_DEPARTEMENT) && is_empty(form.FRM_LOCALITE) && !is_empty(form.FRM_NOM))
        return Alerte(form, 4);
    else 
        return true;
}

function check_form_RC(form){
    dep=Compactage(form.FRM_DEPARTEMENT.value);
    if ((dep=='75') && is_empty(form.FRM_LOCALITE))
        form.FRM_LOCALITE.value='PARIS';
    if (field_length(form.FRM_LOCALITE)>55)
        return Alerte(form, 13);
    else if (field_length(form.FRM_DEPARTEMENT)>55)
        return Alerte(form, 14);
    else if (field_length(form.FRM_ADRESSE)>55)
        return Alerte(form, 15);
    else if (is_empty(form.FRM_LOCALITE) && !is_empty(form.FRM_ADRESSE))
        return Alerte(form, 3);
    else if (!is_empty(form.FRM_LOCALITE) && is_empty(form.FRM_ADRESSE))
        return Alerte(form, 8);
    else if (is_empty(form.FRM_LOCALITE) && is_empty(form.FRM_ADRESSE))
        return Alerte(form, 11);
    else
        return true;
}

function check_form_event_PJ(form){
    // on boucle sur chaque champ chekbox RUBRIQUE du formulaire form
    flag_ok = false;
    form.LST_LIB_ACT.value = "";
    len=form.RUBRIQUE.length;
    sep = "";
    for (i=0; i<len; i++)
    {
        elem = form.RUBRIQUE[i].checked;
        if (true == elem)
        {
            flag_ok = true;
            libRub = form.RUBRIQUE[i].value.substring(form.RUBRIQUE[i].value.indexOf("|")+1, form.RUBRIQUE[i].value.length);
            form.LST_LIB_ACT.value = form.LST_LIB_ACT.value + sep + libRub;
            sep = ", ";
        }
    }
    if (false == flag_ok) return Alerte(form, 34);
    dep=Compactage(form.FRM_DEPARTEMENT.value);
    if ((dep=='75') && is_empty(form.FRM_LOCALITE))
        form.FRM_LOCALITE.value='PARIS';
    if (field_length(form.FRM_LOCALITE)>55)
        return Alerte(form, 13);
    else if (field_length(form.FRM_DEPARTEMENT)>55)
        return Alerte(form, 14);
    else if (is_empty(form.FRM_DEPARTEMENT) && is_empty(form.FRM_LOCALITE))
        return Alerte(form, 4);
    else 
        return true;
}
