// Copyright 2004-2008 Evidian 


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";
    if(fo.className.indexOf("radios") > -1)  fotype = "radios";
       
    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 = "Requires 2 or more servers";
          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 = "Seleccione un valor";
        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 = "Seleccione un valor";
        break;
      case "radios": // Note: class="check" is always set only on the last element of a set of radio buttons, which typically have ids fo6301-0 to fo6301-3
			  // alert("checking radios");
				var chop = fo.id.indexOf('-');
				var baseid = fo.id.substr(0,chop);
				var topidx = fo.id.substr(1+chop);
				var nonechecked = true;
        fodad = document.getElementById("ftdlb" + baseid);
				for (j=0; j<=topidx; j++) {
          if(document.getElementById(baseid + "-" + j).checked) {
						nonechecked = false;
						break;
					}
				}
				if(nonechecked) fomsg = "Seleccione un valor";
        break;
      case "select-one":
        if(fo.selectedIndex > 0) break; // Eliminates both first selection (0) and no selection (-1)
        fomsg = "Seleccione un valor correcto";
        break;
      case "text":
        var foval;
        foval = fo.value.replace(/\s/, "");
        if(foval.length == 0) {
          fomsg = "Introduzca una valor";
          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 = "Por favor introduzca un n&uacute;mero de tel&eacute;fono v&aacute;lido";
            break;
          case "Evidian_nol_mail":
          case "Ecom_ShipTo_Online_Email":
            var a = fo.value.split("@");
            if(a.length < 2 ) {
              fomsg = "Introduzca una direcci&oacute;n e-mail correcta";
              break;
            } else if(a.length > 2 ) {
              fomsg = "Introduzca una direcci&oacute;n e-mail correcta";
              break;
            } 
            var dotpos = a[1].lastIndexOf(".");
            if ((dotpos < 2) || (dotpos > a[1].length - 3)) {
              fomsg = "Introduzca una direcci&oacute;n e-mail correcta";
              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 casilla" : "las " + bugcount + " casillas";
    alert ("Revise " + ctmsg + " con un mensaje en rojo");
    if(bug1) bug1.focus();
    return false;
  }
          
  if(fonum2total == 0) {
    alert ("No servers selected");
    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("Debe confirmar su direcci&oacute;n de e-mail para acceder a sus datos guardados");
    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 quiere utilizar la informaci&oacute;n de contacto almacenada en su &uacute;ltima visita, por favor confirme su identidad usando la misma direcci&oacute;n de e-mail. De otro modo, por favor complete el formulario y presione Presentaci&oacute;n.";
    // 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);
    }
  }
}


