// 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";
    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 = "Please check one option";
        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 = "Please check one option";
        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 = "Please check one of these options";
        break;
      case "select-one":
	  	if(fo.selectedIndex > 0) break; // Eliminates both first selection (0) and no selection (-1)
      	if(fo.selectedIndex==0 && fo.name=="Evidian_JobTitle" && fo.value!=" ") 
		{
			break;
		}
		fomsg = "Please select a valid entry (not the one that begins \"Please select\")";
		break;
		
      case "text":
        var foval;
        foval = fo.value.replace(/\s/, "");
        if(foval.length == 0) {
          fomsg = "You must type something in this box";
          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 = "Please enter a valid phone number";
            break;
          case "Evidian_nol_mail":
          case "Ecom_ShipTo_Online_Email":
            var a = fo.value.split("@");
            if(a.length < 2 ) {
              fomsg = "The email address is invalid: no @";
              break;
            } else if(a.length > 2 ) {
              fomsg = "The email address is invalid: more than one @";
              break;
            } 
            var dotpos = a[1].lastIndexOf(".");
            if ((dotpos < 2) || (dotpos > a[1].length - 3)) {
              fomsg = "A valid email address looks like yourname@company.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) ? "box with a message" : bugcount + " boxes";
    alert ("Please review the " + ctmsg + " with a message in red");
    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("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    = "If you want to use the contact information you stored on your last visit, please confirm your identity by using the same email address. Otherwise, please complete the form below and press submit.";
    // 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);
    }
  }
}


