 var NS4DOM = document.layers ?true : false;
 var IEDOM  = document.all ?true : false;
 var W3CDOM = ((document.getElementById)&&(!IEDOM))?true:false;
 
 var lf = "<br>"
 var message = "Error: " + lf;

  function checkUser(box)
  {
    if(box.value == "") {
      box.className = "inputError";
      return("UserID cannot be blank" + lf);
    }
    re = /^\w+$/;
    if(!re.test(box.value)) {
      box.className = "inputError";
      return("ID must contain only letters, numbers and underscores" + lf);
    }

    box.className = "noError";
    return "";
  }

  function checkName(box, name)
  {
    if(box.value == "") {
      box.className = "inputError";
      return(name + " cannot be blank" + lf);
    }
    re = /^[A-Za-z'`\- \.0-9]+$/;
    if(!re.test(box.value)) {
      box.className = "inputError";
      return(name + " must contain only letters, numbers, ', ., -,and spaces" + lf);
    }
    re = /[A-Za-z]/;
    if(!re.test(box.value)) {
      box.className = "inputError";
      return(name + " must contain at least one letter" + lf);
    }
    
    box.className = "noError";
    return "";
  }
  
  function checkPassword(pwd1, pwd2)
  {
    var msg = "";
    var regup = new RegExp("[A-Z]");
    var reglow = new RegExp("[a-z]");
    var regnum = new RegExp("[0-9]");
    if(pwd1.value != "") 
    { 
      if(pwd1.value.length <= 7) 
      {  
        pwd1.className = "inputError";
        msg += ("Password must contain at least 8 characters" + lf);
      }

      if(! regnum.test(pwd1.value)){ 
        pwd1.className = "inputError";
        msg+="Password must contain at least one number (0-9)" + lf;
      }
      if(! reglow.test(pwd1.value)) {
        pwd1.className = "inputError";
        msg+="Password must contain at least one lowercase letter (a-z)" + lf; }
      if(! regup.test(pwd1.value)){
        pwd1.className = "inputError";
        msg+="Password must contain at least one uppercase letter (A-Z)" + lf; }
      if(pwd1.value.indexOf("'") >=0 ){
        pwd1.className = "inputError";
        msg+="Password cannot contain an apostorphe (')" + lf;}
      if(pwd1.value.indexOf(" ") >=0 ){
        pwd1.className = "inputError";
        msg+="Password cannot contain a space" + lf;}
    } 
    else 
    {  pwd1.className = "inputError";
       msg+="You need to enter a <a href='#' onClick=\"HelpWindow=window.open('http://www.ddtrac.com/demo/help.asp?page=Strong+Password','helpWindow','toolbar=no, Location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, width=600, height=700, left=10, top=10'); return false;\">strong password</a>" + lf; }
    
    if (pwd1.value != pwd2.value)
    { pwd2.className = "inputError";
      msg+="Password 1 and password 2 are not the same" + lf;}

    if(msg.length <= 0 ) 
    {  pwd1.className = "noError";
       pwd2.className = "noError";
    }

    return msg;
  }

  function checkDate(dbox)
  {
    var msg = "";
    var regdate = new RegExp("^[1-9]/\\d/[1-2]\\d\\d\\d|^[1-9]/[0-3]\\d/[1-2]\\d\\d\\d|^0[1-9]/\\d/[1-2]\\d\\d\\d|^0[1-9]/[0-3]\\d/[1-2]\\d\\d\\d|^1[0-2]/\\d/[1-2]\\d\\d\\d|1[0-2]/[0-3]\\d/[1-2]\\d\\d\\d");
    if(! regdate.test(dbox.value)){
     msg += "Date (" + dbox.value + ") must be in the format mm/dd/yyyy" + lf;}
   else
    {
       var matchArray = dbox.value.split("/");     
       month = matchArray[0]; // p@rse date into variables
       day = matchArray[1];
       year = matchArray[2];
       var now = new Date();

       if (month < 1 || month > 12) { // check month range
          msg += ("Month in must be between 1 and 12."  + lf);
       }
       else if (day < 1 || day > 31) {
           msg += ("Day must be between 1 and 31."  + lf);
       } 
       else if ((month==4 || month==6 || month==9 || month==11) && day==31) {
           msg += ("Month "+month+" doesn`t have " + day + " days!"  + lf)
       }
       else if (month == 2) { // check for february 29th
           var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
           if (day > 29 || (day==29 && !isleap)) {
                  msg += ("February " + year + " doesn`t have " + day + " days!"  + lf);
           }
       }
       else if ( year < 1901 || year > (now.getFullYear()+20))
       {
           msg += ("Year "+ year +" must be between 1901 and " + (now.getFullYear()+20)  + lf) ;      
       }
       
    }
    
    if(msg.length > 0 ) 
        dbox.className = "inputError";
    else
        dbox.className = "noError";
    
    return msg;  
  }
  
  function checkPhone(pbox)
  {
    var msg = "";
    var regdate = new RegExp("^(1\\s*[-\\/\\.]?)?(\\((\\d{3})\\)|(\\d{3}))\\s*[-\\/\\.]?\\s*(\\d{3})\\s*[-\\/\\.]?\\s*(\\d{4})\\s*(([xX]|[eE][xX][tT])\\.?\\s*(\\d+))*$");

    if(! regdate.test(pbox.value)) {
       regdate = new RegExp("^(\\+44\\s?7\\d{3}|\\(?07\\d{3}\\)?)\\s?\\d{3}\\s?\\d{3}$");
       if(! regdate.test(pbox.value)){
           //regdate = new RegExp("");
           if(! regdate.test(pbox.value))
           {  
              msg += "Phone (" + pbox.value + ") is not a valid phone number" + lf; }
       }
    }
    if(msg.length > 0 ) 
        pbox.className = "inputError";
    else
        pbox.className = "noError";
    return msg;
  
  }
  
  function checkZip(zbox)
  {
    var msg = "";
    var regdate = new RegExp("^((\\d{5}-\\d{4})|(\\d{5})|([AaBbCcEeGgHhJjKkLlMmNnPpRrSsTtVvXxYy]\\d[A-Za-z]\\s?\\d[A-Za-z]\\d))$");
    if(! regdate.test(zbox.value)){
       regdate = new RegExp("(?:[A-Z]{1,2}\\d(?:\\d|[A-Z])? \\d[A-Z]{2})");
       if(! regdate.test(zbox.value)){
          //regdate = new RegExp("(?:NL[- ]\\d{4} [A-Z][A-Z]|(?:[A-Z]{1,2}[- ])?\\d{2,3}(?:\\d\\d?| \\d\\d|\\d-\\d{3}))");
          if(! regdate.test(zbox.value)) { 
            msg  += "Postal code (" + zbox.value + ") is not a valid zip code" + lf;}
       }
    }
    if(msg.length > 0 ) 
        zbox.className = "inputError";
    else
        zbox.className = "noError";

    return msg;  
  }

  function checkYear(ybox)
  {
    var msg = "";
    var regdate = new RegExp("^([12]\\d{3})");
    if(! regdate.test(ybox.value)){
        msg  += "Year (" + ybox.value + ") must be in the format YYYY" + lf;
    }
    if(msg.length > 0 ) 
        ybox.className = "inputError";
    else
        ybox.className = "noError";
    return msg;  

  }
  
  function checkAttached(ybox)
  {
    var msg = "";
    //alert(ybox.value);
    if(ybox.value=="0"){
        msg  += "You must click the 'Upload File' button before you save your changes." + lf;
    }
    return msg;  
  }

  function checkState(sbox)
  {
    var msg = "";
    var regdate = new RegExp("(:?A[BKLRZ]|BC|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ABDEINOST]|N[CDEHJMVYBLTSU]|O[HKNR]|P[AER]|QC|RI|S[CDK]|T[NX]|UT|V[AIT]|W[AIVY]|YK)");
    sbox.value = sbox.value.toUpperCase();
    if(! regdate.test(sbox.value)) {
       msg += "State (" + sbox.value + ") is not a valid state or province" + lf;
    }

    if(msg.length > 0 ) 
       sbox.className = "inputError";
    else
       sbox.className = "noError";
    return msg;
  
  }


  function checkDateRange(dbox1, dbox2, mons)
  { 
    var msg = "";
    var minutes = 1000 * 60;
    var hours = minutes * 60;
    var days = hours * 24;
    var months = days * 31;
    var t = Date.parse(dbox2.value) - Date.parse(dbox1.value);
    var m = t/months;
    
    if (m < 0) 
    {   dbox2.className = "inputError";
        msg = dbox2.value + " must be after " + dbox1.value + lf;
    }
    else if (m > mons) 
    {   dbox1.className = "inputError";
        dbox2.className = "inputError";
        msg = dbox2.value + " cannot be more than " + mons + " months after " + dbox1.value + lf;
    }
    
    if(msg.length <= 0 ) 
    {
        dbox1.className = "noError";
        dbox2.className = "noError";
    }
    return msg;
  
  }
  
  function checkTime(tbox)
  {
    var msg = "";
    var regtime = new RegExp("^\\d:[0-5]\\d PM|^\\d:[0-5]\\d AM|^1[0-2]:[0-5]\\d PM|^1[0-2]:[0-5]\\d AM|^0[0-9]:[0-5]\\d PM|^0[0-9]:[0-5]\\d AM");

    if(! regtime.test(tbox.value))
    {  msg += "Time (" + tbox.value + ") must be in the format hh:mm AM or hh:mm PM" + lf;}
    
    if(msg.length > 0 ) 
         tbox.className = "inputError";
    else
         tbox.className = "noError";

    return msg;

  }
  
  
  function checkSelect(sbox, txt)
  {
    var msg = "";
    try {
      if(sbox.selectedIndex <= 0 )
      { 
       if(sbox[0].value==0 || sbox.value=='' || sbox[0].value=='' )
       { 
         msg += "You must select a " + txt + "" + lf;
       }
      }
    }
    catch (e) {;}
    if(msg.length > 0 ) 
        sbox.className = "inputError";
    else
        sbox.className = "noError";
    return msg;
   
  }
  
  function checkRadio(rbut, txt)
  {
    var msg = "";
    var selected=false;
    for(var i=0; i < rbut.length; i++ )
    { 
       if(rbut[i].checked )
       {
         selected=true;
         break;
       }
    }
    
    if(!selected)
         msg += "You must select a " + txt + "" + lf;
    return msg;
  }

  function checkEmail(ebox)
  {
    var msg = "";
 
    if(ebox.value.indexOf("@") <= 0 )
         msg += "Email must contain an @" + lf;
    if(ebox.value.indexOf("@") >= ebox.value.lastIndexOf(".") )
         msg += "Email must contain an . following the @" + lf;

    if(msg.length > 0 ) 
        ebox.className = "inputError";
    else
        ebox.className = "noError";
    return msg;
   
  }
  
  function checkLength(tbox, name, len)
  {
      var msg = "";
      if(tbox.value.length > len)
      {  
         msg += name + " is too long.  It must be less than " + len + " characters." + lf;
      }
      if(msg.length > 0 ) 
         tbox.className = "inputError";
      else
         tbox.className = "noError";
      return msg;
  }
  
  function checkNumeric(tbox, name, max)
  {
      var msg = "";
      if(isNaN(tbox.value))
         msg += name + " must be a number less than or equal to " + max + lf;
      else if(parseInt(tbox.value) > max)
         msg += name + " is too large.  It must be less than or equal to " + max + lf;
      else if(parseInt(tbox.value) < 0)
         msg += name + " is too small.  It must be greater than or equal to 0" + lf;
      
      if(msg.length > 0 ) 
         tbox.className = "inputError";
      else
         tbox.className = "noError";
      return msg;
  }
  
  function getObject(id)
  { var obj;
      if (NS4DOM) obj = eval("document." + id);
      else if (IEDOM) {
          obj = eval(id);
          try { obj.innerHTML(); }
          catch(e) {
            obj = document.getElementById(id);
          }
      }
      else if (W3CDOM) obj = document.getElementById(id);
    return obj;
  }

  function displayError(msg, form) 
  {
    var obj = getObject('error');
    if(msg.length > 13 )
    { 
      obj.innerHTML = msg + lf + lf;
      message = "Error: " + lf;
      
      try
      {
        if(typeof(form) == "object" && form) form.submit.disable = false;
      } catch (e) {}
      window.location.href = "#top"
      return false;
    } 
    return true;
    
  }
  
  function trim(mystring) 
  {
	//return stringToTrim.replace(/^\s+|\s+$/g,"");
	//var str = mystring.replace(/ /,"");
	return mystring;
  }

  function checkDelete(form, dname, cname)
  {
   var del = "false";
   var strA;
   var mes = "";
   //var message="";
      
   for(var i = 0 ; i < form.elements.length ; i ++)
   { // alert(i + ":" + form.elements[i].name + " " + form.elements[i].value);
       for(var j=0; j < dname.length; j++)
       {
         if(form.elements[i].name.indexOf(dname[j])== 0)
         { 
           if(form.elements[i].checked) 
           {  del="true";
              strA = form.elements[i].name.split("del_");
              var str1 = ""
              if (strA.length > 1 )
              {
                 str1 ="form." + strA[0] + cname + "_" + strA[1] ;
              //alert(str1 + " " + eval(str1 + ".checked"));
              try {
                if(eval(str1 + ".checked"))
                {
                  mes= "Cannot copy and delete the same goal/objective" + lf;
                  form.elements[i].checked=false;
                }
              } catch(e){}
              }
           }
         }
       }
       
   }

   if (mes.length > 2) return mes;
   else return del;

  }
  
function removeFile(tfileid, altid)
{
  var obj = document.getElementById("tfileid" + tfileid);
  var text = '<input value="0|' + tfileid + '" name="tempfile' + altid + '" type="hidden">'
  obj.innerHTML = "<td colspan=3>" + text + "</td>";
}

function attachFiles()
{
   for(var counter=0; counter < window.frames.length; counter++)
   if(window.frames[counter].document.forms[0].file1.value.length > 0)
   { 
     window.frames[counter].document.forms[0].submit();
   }
}

