// Copyright 2004-2007 Evidian 
// v110 ! Killed Dutch special test

function clearpqs(myclass) { 
    // empty all project question text boxes
    if(!document.getElementById ) return true;
    var pqblock = document.getElementById("mfpqs");
    var els = pqblock.getElementsByTagName("INPUT");
    for (var i=0; i<els.length; i++){ 
      if(els[i].className.indexOf(myclass) < 0) continue; // ignore if no checking on this form element
      els[i].value = "";
    }  
  }

function adjustMailOpts(myid, jsid) {
    var el= document.getElementById(myid);
    var mycountry = el.options[el.selectedIndex].value;
    if(false) { // disactivates the display
      document.getElementById(jsid).value = "1";
      document.getElementById("divmmbox").style.display = "block";
      document.getElementById("divmmlabel").style.display = "block";
    }
    return true;
  }

function checkForm(fname) {
  if(!document.getElementById ) return true;
  var bug1  = null;
  var bugcount = 0;
  var fo, fomsg, fotype, fodad;
  var fonum2total = -1 ; // Initial value
  var f = document.getElementById(fname);
  for (var i=0; i<f.length; i++) {
    fo = f.elements[i];
    if(fo.className.indexOf("check") < 0) continue; // ignore if no checking on this form element
    fomsg  = false;
    fodad  = fo.parentNode
    fotype = (fo.type) ? fo.type : fo.tagName;
    if(fo.className.indexOf("checkx") > -1) fotype = "checkx";
    if(fo.className.indexOf("num2") > -1)   fotype = "num2";
    if(fo.className.indexOf("radio12") > -1) fotype = "radio12";
       
    switch(fotype){
      case "num2": // Must be empty or contain a number >=2
        if(fonum2total == -1) fonum2total = 0; // Indicates that form contains at least one of these fields
        var foval;
        // alert("Checking field " + fo.name);
        foval = fo.value;
        if(foval.length == 0) {
          // No problem leaving fields blank
          break;
        }
        var fonum = foval.replace(/\D/g, ""); // Kill everything except digits
        if( fonum == "1") {
          fomsg = "Option disponible à partir de 2 serveurs";
          break;
        } 
        if( fonum == "0") {
          // No problem entering "0"
          break;
        }
        fo.value = fonum;
        // if we get here the field contains an integer
        fonum2total += parseInt(fonum);
        break;
      case "checkx": // Special project fields: php embeds what's needed in the <head>
        fomsg = checkspecialproj(fo);
        fodad = fo.dad;
        break;
      case "radio": // Note: set checking only on the "NO" element of a radio pair
        fodad = document.getElementById("ftdlb" + fo.id);
        if(fo.checked) break;
        if(document.getElementById(fo.id + "y").checked) break;
        fomsg = "Veuillez cocher une des options";
        break;
      case "radio12": // Note: set checking only on the "NO" element of a radio pair
			  // alert("checking radio12");
        fodad = document.getElementById("ftdlb" + fo.id);
        if(fo.checked) break;
        if(document.getElementById(fo.id + "y").checked) break;
        if(document.getElementById(fo.id + "x").checked) break;
        fomsg = "Veuillez cocher une des options";
        break;
      case "select-one":
        if(fo.selectedIndex > 0) break; // Eliminates both first selection (0) and no selection (-1)
        fomsg = (fo.selectedIndex) ? "Veuillez sélectionner une valeur" : "Sélection invalide";
        break;
      case "text":
        var foval;
        foval = fo.value.replace(/\s/, "");
        if(foval.length == 0) {
          fomsg = "Merci de renseigner cette case";
          break;
        }
        switch(fo.name){
          case "Ecom_ShipTo_Telecom_Phone_Number":
            var fonum = foval.replace(/\D/g, ""); // Kill everything except digits
            if(fonum.length < 6) fomsg = "Veuillez entrer un numéro de téléphone valide";
            break;
          case "Evidian_nol_mail":
          case "Ecom_ShipTo_Online_Email":
            var a = fo.value.split("@");
            if(a.length < 2 ) {
              fomsg = "Une adresse valable contient un @";
              break;
            } else if(a.length > 2 ) {
              fomsg = "Adresse invalide: plusieurs @";
              break;
            } 
            var dotpos = a[1].lastIndexOf(".");
            if ((dotpos < 2) || (dotpos > a[1].length - 3)) {
              fomsg = "Une adresse valable ressemble à 'votrenom@societe.com'";
              break;
            } // Leave more extensive checks to the server
        }
      default:
        break;
    }
    if(fomsg) {
      if(fo.disabled) {
        fomsg = "";
      } else {
        bugcount++ ;
        if(!bug1) bug1 = fo;
      }
    }
    // Update any existing error messages
    var em = document.getElementById("em" + fo.id);
    if(!em) { // No existing error message...
      if(!fomsg) continue; // ...and no error
      var em = document.createElement("P");
      em.className = "emfo";
      em.id = "em" + fo.id;
      fodad.appendChild(em);
    } 
    if (em.childNodes.length) { // Error message already exists...
      if(fomsg) { //... Replace it if there is still an error
        em.childNodes[0].nodeValue = fomsg;
      } else { //... or clear it if the error has been removed
        fodad.removeChild(em);
      }
    } else { // no error message yet - create it
      var emnew = document.createTextNode(fomsg);
      em.appendChild(emnew);
    }
  }

  if(bugcount > 0) {
    var ctmsg = (bugcount == 1) ? "la case avec un message" : "les " + bugcount + " cases avec messages";
    alert ("Veuillez revoir " + ctmsg + " en rouge");
    if(bug1) bug1.focus();
    return false;
  }
          
  if(fonum2total == 0) {
    alert ("Aucun serveur précisé");
    return false;
  }
          
  setjscaps();

return true;
}
   
function setjscaps() { // href recall request
  // This should be the very last action before form submission
  // 1) Report Javascript bugs
  var j = checkjscaps(-1); // -1 says omit event checking
  var d = new Date();
  if(document.getElementById("fo50")) document.getElementById("fo50").value = j + "_" + d.getTime() + "_" + d.getTimezoneOffset();
}

function b2recall() { // href recall request
  // alert("running b2recall");
  var myform = document.getElementById("mainform");
  document.getElementById("fo51").disabled = false;
  setjscaps();
  myform.submit();
  return false;
}
function b1review() { // href recall request
  // alert("running b1review");
  var myform = document.getElementById("mainform");
  document.getElementById("fo51").disabled = false;
  setjscaps();
  myform.submit();
  return false;
}
function c2recall() { // href recall request
  // alert("running c2recall");
  var myform = document.getElementById("mainform");
  var test = ismd5ok();
  if(test == 1) {
    // alert("ismd5ok returns OK ");
    document.getElementById("fo51").disabled = false;
    setjscaps();
    myform.submit();
    return false;
  } else {
    alert("You must confirm your email address to access your stored data");
    return false;
  }
}
function hidelong(myval) { // Evolution of longflip
  // Hides (if myval=true... short form) or displays (if myval=false... long form) all hidden fields
  // Disables field after hiding and enables fields before showing
  // alert("running longflip");
  var elbase = document.getElementById("mfemail");
  var goodstyle = geteffectivestyle(elbase, "display");
  // alert("goodstyle is " + goodstyle);
  if(myval == true) { // Hide fields before disabling
    if(document.getElementById("mfuserinfo")) document.getElementById("mfuserinfo").style.display = "none"; // ...hide contact info
    if(document.getElementById("mffmn"))      document.getElementById("mffmn").style.display = "none";      // ...and remember-me option
  }

  var hiddenids = new Array (79, 110, 120, 130, 140, 210, 220, 230, 240, 310, 311, 312, 320, 330, 340, 992);
  var idx, elid;
  var shorttag = '256';
  var longtag  = '512';
  while (idx = hiddenids.pop()) {
    elid = "fo" + idx;
    if (document.getElementById(elid)) {
      document.getElementById(elid).disabled = myval ;
    }
  }
  if (document.getElementById("fo78")) {
    document.getElementById("fo78").value = (myval) ? shorttag : longtag ; 
  }

  if(myval == false) { // Show fields after enabling
    if(document.getElementById("mfuserinfo")) document.getElementById("mfuserinfo").style.display = goodstyle; // ...hide contact info
    if(document.getElementById("mffmn"))      document.getElementById("mffmn").style.display = goodstyle;      // ...and remember-me option
  }
}

function ismd5ok() { // Performs the md5 check
  // Returns  1  if OK
  // Returns -1  if check is bad
  // Returns -2  if no email provided
  // Returns  0  if unable to complete check (e.g. javascript not capable)
  // Otherwise display long form
  if(!document.getElementById("fo100")) return 0;
  if(!document.getElementById("fo97"))   return 0;
  if(!document.getElementById("fo97b")) return 0;
  var esrc  = document.getElementById("fo100");
  var etest = document.getElementById("fo97b");
  var ebase = document.getElementById("fo97");
  var euser = bTrim(esrc.value.toLowerCase());
  if(euser == "") return -2 ;
  var md5   = hex_md5(euser);
  etest.value = md5;  // 104 Kill this step when debugging complete
  if(md5 == ebase.value){
    goodmd5 = 1;
    return 1; 
  } else {
    goodmd5 = -1;
    return -1;
  }
}

function checkmd5() { // Launched when C1 login and user email address changes...
  var previous = goodmd5; // 0, 1, or -1
  var elbase = document.getElementById("mfemail");
  var goodstyle = geteffectivestyle(elbase, "display");
  switch (ismd5ok()) { 
    case 1 : // Signatures match
      md5message(false); // Hide the MD5 error message
      hidelong(true); // and disable them (and adjust the "this is a long form" flag
      if(document.getElementById("divrecall")) document.getElementById("divrecall").style.display = "block"; // 
      return true; 
      break;
    default : // All other cases
      break;
  }
  md5message(true); // Show the MD5 error message
  hidelong(false); // Enable the hidden fields and the "this is a long form" tag...
  if(document.getElementById("divrecall")) document.getElementById("divrecall").style.display = "none"; // 
  return false;
}

function md5message(toggle){ // toggle is true (add the message) or false (remove it)
  var fo     = document.getElementById("fo100");
  var fomsg  = false;
  var msg;    // generic message for alert boxes
  var fodad  = fo.parentNode;
  var em;    // error message  object
  if (toggle) { // Turn the message on
    fomsg    = "Si vous voulez utiliser les coordonnées que vous avez stockées lors de votre dernière visite, merci de confirmer votre identité en utilisant la même adresse email. Sinon, merci de remplir le formulaire ci-dessous et activez le bouton 'Envoi'";
    // Update / create error message
    if (document.getElementById("em" + fo.id)) {  // if error message already in place
      em = document.getElementById("em" + fo.id);
    } else { // No existing error message...
      em = document.createElement("P");
      em.className = "emfo";
      em.id = "em" + fo.id;
      fodad.appendChild(em);
    } 
    if (em.childNodes.length) { // Error message already exists...
      em.childNodes[0].nodeValue = fomsg;
    } else { // no error message yet - create it
      var emnew = document.createTextNode(fomsg);
      em.appendChild(emnew);
    }
  } else { // Turn the message off
    if (document.getElementById("em" + fo.id)) {  // if error message already in place
      em = document.getElementById("em" + fo.id);
      fodad.removeChild(em);
    }
  }
}

