

function validateAtLeastOneChecked( frm, field_name, custErr ) {
 var checkboxes_checked = 0;
 for (i=0; i< frm.elements.length; i++) {
   if (frm.elements[i].name == field_name) {
     if (frm.elements[i].checked) {
    checkboxes_checked = 1;
  }
   }
 }
 if (checkboxes_checked == 0) {
   return '-> ' + custErr + "\n";
 } else {
  return '';
 }
}

function validateEmail(email) {
 var emailPat=/^(.+)@(.+)$/;
 var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
 var validChars="\[^\\s" + specialChars + "\]";
 var quotedUser="(\"[^\"]*\")";
 var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
 var atom=validChars + '+';
 var word="(" + atom + "|" + quotedUser + ")";
 var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
 var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
 var matchArray=email.match(emailPat);

 if (matchArray==null) {
  return false;
}

 var user=matchArray[1];
 var domain=matchArray[2];

 if (user.match(userPat)==null) {
  return false;
}

 var IPArray=domain.match(ipDomainPat);
 if (IPArray!=null) {
   for (var i=1;i<=4;i++) {
     if (IPArray[i]>255) {
    return false;
  }
   }
  return true;
 }

 var domainArray=domain.match(domainPat);
 if (domainArray==null) {
  return false;
}

 var atomPat=new RegExp(atom,"g");
 var domArr=domain.match(atomPat);
 var len=domArr.length;
 if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) {
  return false;
}

 if (len<2) {
  return false;
}

 return true;
}

  function validateData(strValidateStr,objValue,custErr) {
 var strErr = '';
 var epos = strValidateStr.search("=");
 var command  = "";
 var cmdvalue = "";
 if(epos >= 0) {
  command  = strValidateStr.substring(0,epos);
  cmdvalue = strValidateStr.substr(epos+1);
} else {
  command = strValidateStr;
 }

 switch(command) {

 case "req": case "required": {
   if (eval(objValue.value.length) == 0) {
     if (!custErr || custErr.length == 0) {
    strErr = '-> ' + objValue.name + " : Required Field.\n";
  } else {
    strErr = '-> ' + custErr + "\n";
   }
   }
  break;
 }

 case "maxlength":
 case "maxlen": {
   if (eval(objValue.value.length) >  eval(cmdvalue)) {
     if (!custErr || custErr.length == 0) {
    strErr = '-> ' + objValue.name + " : "+cmdvalue+" characters maximum."
           + "\n       [Current length = " + objValue.value.length + " ].\n";
  } else {
    strErr = '-> ' + custErr + "\n";
   }
   }
  break;
 }

 case "minlength": 
 case "minlen": {
   if (eval(objValue.value.length) <  eval(cmdvalue)) {
     if (!custErr || custErr.length == 0) {
    strErr = '-> ' + objValue.name + " : " + cmdvalue + " characters minimum."
           + "\n       [Current length = " + objValue.value.length + " ].\n";
  } else {
    strErr = '-> ' + custErr + "\n";
   }
   }
  break;
 }

 case "alnum":
 case "alphanumeric": {
  var charpos = objValue.value.search("[^A-Za-z0-9]");
  if (objValue.value.length > 0 &&  charpos >= 0) {
    if (!custErr || custErr.length == 0) {
    strErr = objValue.name+": Only alpha-numeric characters allowed."
           + "\n       [Error character position " + eval(charpos+1)+"].";
  } else {
    strErr = '-> ' + custErr + "\n";
   }
  }
  break; 
 }

 case "num": 
 case "numeric": {
  var charpos = objValue.value.search("[^0-9]");
  if (objValue.value.length > 0 &&  charpos >= 0) {
    if (!custErr || custErr.length == 0) {
    strErr = '-> ' + objValue.name+": Only digits allowed "
           + "\n       [Error character position " + eval(charpos+1)+"].\n";
  } else {
    strErr = '-> ' + custErr + "\n";
   }
  }
  break;
 }

 case "alphabetic":
 case "alpha": {
  var charpos = objValue.value.search("[^A-Za-z]");
  if (objValue.value.length > 0 &&  charpos >= 0) {
    if (!custErr || custErr.length == 0) {
    strErr = '-> ' + objValue.name+": Only alphabetic characters allowed"
           + "\n       [Error character position " + eval(charpos+1)+"].\n";
  } else {
    strErr = '-> ' + custErr + "\n";
   }
  }
  break; 
 }

 case "email": {
   if (!validateEmail(objValue.value,strErr)) {
     if (!custErr || custErr.length == 0) {
    strErr = '-> ' + objValue.name+": Enter a valid Email address.\n";
  } else {
    strErr = '-> ' + custErr + "\n";
   }
   }
  break;
 }

 case "lt": 
 case "lessthan": {
   if (isNaN(objValue.value)) {
   strErr = strError + '-> ' + objValue.name+": Should be a number.\n";
 } else {
   if (eval(objValue.value) >=  eval(cmdvalue)) {
     if (!custErr || custErr.length == 0) {
     strErr = '-> ' + objValue.name
            + " : value should be less than "+ cmdvalue +".\n";
   } else {
     strErr = '-> ' + custErr + "\n";
    }
   }
  }
  break;
 }

 case "gt": 
 case "greaterthan": {
   if (isNaN(objValue.value)) {
   strErr = '-> ' + objValue.name+": Should be a number.\n";
 } else {
   if (eval(objValue.value) <=  eval(cmdvalue)) {
     if (!custErr || custErr.length == 0) {
     strErr = '-> ' + objValue.name
            + " : value should be greater than " + cmdvalue + ".\n";
   } else {
     strErr = '-> ' + custErr + "\n";
    }
   }
  }
  break;
 }

 case "regexp": {
   if (!objValue.value.match(cmdvalue))  {
     if (!custErr || custErr.length == 0) {
    strErr = '-> ' + objValue.name+": Invalid characters found.\n";
  } else {
    strErr = '-> ' + custErr + "\n";
   }
   }
  break;
 }

 case "notregexp": case "!regexp": {
   if (objValue.value.match(cmdvalue)) {
     if (!custErr || custErr.length == 0) {
    strErr = '-> ' + objValue.name+": Invalid characters found.\n";
  } else {
    strErr = '-> ' + custErr + "\n";
   }
   }
  break;
 }

 case "dontselect": {
   if (objValue.selectedIndex == null) {
   alert("BUG: dontselect command for non-select Item");
 } else {
   if (objValue.selectedIndex == eval(cmdvalue)) {
     if (!custErr || custErr.length == 0) {
     strErr = '-> ' + objValue.name+": Please Select one option.\n";
   } else {
     strErr = '-> ' + custErr + "\n";
    }
   }
  }
  break;
 }

}
 return strErr;
}

  function validateForm(objFrm,arrObjDesc) {
 var strErr = '';
 for(var itrobj=0; itrobj < arrObjDesc.length; itrobj++) {
  var strErr_element = '';
  if(objFrm.elements.length <= itrobj)  { 
   alert("BUG: Obj descriptor for a non existent form element"); 
   return false; 
 }
  for (var itrdesc=0; itrdesc < arrObjDesc[itrobj].length ;itrdesc++) {
    if (strErr_element != '') {
    break;
  }
   strErr_element = validateData( arrObjDesc[itrobj][itrdesc][0],
                                  objFrm[itrobj],
                                  arrObjDesc[itrobj][itrdesc][1] );
  }
  strErr = strErr + strErr_element;
}
 return strErr;
}

//-- if using this method, you must specify the validation array
//-- in reverse order as well
  function validateFormReverse(objFrm,arrObjDesc) {
 var strErr = '';
 for(var itrobj=0; itrobj < arrObjDesc.length; itrobj++) {
  var strErr_element = '';
  if(objFrm.elements.length <= itrobj)  { 
   alert("BUG: Obj descriptor for a non existent form element"); 
   return false; 
 }
  for (var itrdesc=0; itrdesc < arrObjDesc[itrobj].length ;itrdesc++) {
    if (strErr_element != '') {
    break;
  }
   strErr_element = validateData( arrObjDesc[itrobj][itrdesc][0],
                                  objFrm[objFrm.length-1-itrobj],
                                  arrObjDesc[itrobj][itrdesc][1] );
  }
  strErr = strErr + strErr_element;
}
 return strErr;
}

  function displayErrors( header, strErr ) {
    if ((strErr) && (strErr.length > 0)) {
  alert( header + "\n" + strErr );
  return true;
} else {
  return false;
 }
  }

    function submit_new() {
      var validation_array = [];
      var default_validation = [];

      default_validation['email'] = [
        ['required','You must enter your email address in order to signup.'],
        ['email',   'Your email address appears to be invalid.']
      ];

      default_validation['gender'] = [
      ];

      default_validation['first_name'] = [
      ];

      default_validation['last_name'] = [
      ];

      default_validation['age'] = [
        [ "regexp=^(|1[3-9]|[2-9][0-9][0-9]?)$",
          "Your have entered an invalid age. (13+ and digits only)" ]
      ];

      default_validation['zip'] = [
      ['regexp=^(|[0-9A-Za-z -.][0-9A-Za-z -.][0-9A-Za-z -.][0-9A-Za-z -.]*)$',
       'Your postal code appears to be invalid.']
      ];

      // loop through list ids looking for list ids that require more
      for (var i=0;i<document.foca_pop.elements.length;i++) {
        if (document.foca_pop.elements[i].name == 'list_id' &&
            document.foca_pop.elements[i].checked == true) {

          // harris
          if (document.foca_pop.elements[i].value == 2839
              || document.foca_pop.elements[i].value == 2840
              || document.foca_pop.elements[i].value == 4131) {

            default_validation['zip'].unshift(
              ['required', "Please enter your zip code."]
            );

            default_validation['age'].unshift(
              ['required', "Please enter your age"]
            );

            default_validation['gender'].unshift(
              ['dontselect=0', "Please select your gender."]
            );

          }

        }

      }

      for (var i=0;i<document.foca_pop.elements.length;i++) {

        if (default_validation[document.foca_pop.elements[i].name]) {
          validation_array[i] =
            default_validation[document.foca_pop.elements[i].name];
        } else {
          validation_array[i] = [];
        }

      }

      var strErr = validateForm(document.foca_pop,validation_array);

      strErr = strErr + validateAtLeastOneChecked(document.foca_pop,'list_id',
                        'Please select at least one list.' );

      if (displayErrors( 'There were problems with your request:'      + "\n" +
                     '===========================================', strErr)) {
        return false;
      } else {
        return true;
      }
    }


  document.write( '<table cellspacing=0 cellpadding="3" border="0" bgcolor="#ccff66"><form target=_self method="POST" action="http://www.focalex.com/subscriber/subscribe.mpl/249517" onsubmit="return submit_new();" name="foca_pop"><input ' );
  document.write( 'type="hidden" name="affiliate_id" value="249517"><input ' );
  document.write( 'type="hidden" name="form_type" value="embedded"><input type=hidden ' );
  document.write( 'name="form_version" value="webmaster_2.2"><input ' );
  document.write( 'type="hidden" name="gatherer_id" value="default"> ' );
  document.write( '<input type=hidden name="country_code_guess" value="US"> ' );
  document.write( ' ' );
  document.write( ' ' );
  document.write( ' ' );
  document.write( '<tr><td align=center><table cellpadding=1 cellspacing="1" border="0"> ' );
  document.write( '<tr><td align=center><font size=4 color="#000000" ' );
  document.write( 'face="Arial,Helvetica" style="font-size:14pt"> ' );
  document.write( '<b>Pick your topics, and we'+"'"+'ll send you great deals, ' );
  document.write( '<br> ' );
  document.write( 'free information, and special offers by email ' );
  document.write( '<br> ' );
  document.write( 'from Focalex.</b> ' );
  document.write( '</font></td></tr></table></td></tr><tr> ' );
  document.write( '<td align=center> <table border=0 cellspacing="0" cellpadding="0" ' );
  document.write( 'bgcolor="#ffffff"> ' );
  document.write( '<tr><td align=center><table border=0 cellspacing="0" cellpadding="0" ' );
  document.write( 'bgcolor="#ffffff"> ' );
  document.write( ' ' );
  document.write( ' ' );
  document.write( '<tr><td nowrap><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;"><input type=checkbox ' );
  document.write( 'name="list_id" value="345" checked> Webmasters</font></td><td ' );
  document.write( 'nowrap><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;"><input type=checkbox ' );
  document.write( 'name="list_id" value="521" checked> Affiliate Programs</font></td><td ' );
  document.write( 'nowrap><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;"><input type=checkbox ' );
  document.write( 'name="list_id" value="254"> Free/Special Offers</font></td></tr> ' );
  document.write( ' ' );
  document.write( '<tr><td nowrap><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;"><input type=checkbox ' );
  document.write( 'name="list_id" value="1203"> IT Professional</font></td><td ' );
  document.write( 'nowrap><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;"><input type=checkbox ' );
  document.write( 'name="list_id" value="240"> Web Design</font></td><td ' );
  document.write( 'nowrap><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;"><input type=checkbox ' );
  document.write( 'name="list_id" value="236"> Web Hosting</font></td></tr> ' );
  document.write( ' ' );
  document.write( '<tr><td nowrap><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;"><input type=checkbox ' );
  document.write( 'name="list_id" value="245"> Web Software</font></td><td ' );
  document.write( 'nowrap><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;"><input type=checkbox ' );
  document.write( 'name="list_id" value="344"> Freeware/Shareware</font></td><td ' );
  document.write( 'nowrap><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;"><input type=checkbox ' );
  document.write( 'name="list_id" value="401"> Business Owners</font></td></tr> ' );
  document.write( ' ' );
  document.write( '<tr><td nowrap><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;"><input type=checkbox ' );
  document.write( 'name="list_id" value="257"> Home Based Office</font></td><td ' );
  document.write( 'nowrap><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;"><input type=checkbox ' );
  document.write( 'name="list_id" value="213"> Personal Finance</font></td><td ' );
  document.write( 'nowrap><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;"><input type=checkbox ' );
  document.write( 'name="list_id" value="37"> Finance</font></td></tr> ' );
  document.write( ' ' );
  document.write( '<tr><td nowrap><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;"><input type=checkbox ' );
  document.write( 'name="list_id" value="76"> Health</font></td><td ' );
  document.write( 'nowrap><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;"><input type=checkbox ' );
  document.write( 'name="list_id" value="41"> Investing</font></td><td ' );
  document.write( 'nowrap><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;"><input type=checkbox ' );
  document.write( 'name="list_id" value="291"> Business Opportunities</font></td></tr> ' );
  document.write( ' ' );
  document.write( '<tr><td nowrap><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;"><input type=checkbox ' );
  document.write( 'name="list_id" value="1481"> Online Trading</font></td><td ' );
  document.write( 'nowrap><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;"><input type=checkbox ' );
  document.write( 'name="list_id" value="237"> Web Advertising</font></td><td ' );
  document.write( 'nowrap><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;"><input type=checkbox ' );
  document.write( 'name="list_id" value="241"> Web Promotion</font></td></tr> ' );
  document.write( ' ' );
  document.write( ' ' );
  document.write( '<tr><td colspan=3 style="padding:3px;" align="center"> ' );
  document.write( '<table width=340 bgcolor="#ccff66"><td><input type=checkbox name="list_id" value="2583" checked></td> ' );
  document.write( '<td><font color="#000000" face="Arial,Helvetica" size="1" style="font-size:8pt;">      Signup to <b>Offers-For-You.com</b> for great Steals & Deals ' );
  document.write( '</font></td></table> ' );
  document.write( '</td></tr> ' );
  document.write( ' ' );
  document.write( '</table></td></tr></table><table ' );
  document.write( 'border="0" cellpadding="0" cellspacing="0" width="95%"><tr><td ' );
  document.write( 'align="center" colspan="4"> ' );
  document.write( '<font color="#000000" face="Arial,Helvetica" ' );
  document.write( 'size="2" style="font-size:10pt'+"'"+'"> ' );
  document.write( 'Age: <input type=text name="age" maxlength="4" size="5"> ' );
  document.write( '      Gender: ' );
  document.write( '      <select name=gender> ' );
  document.write( '      <option value="">-- ' );
  document.write( '      <option value=F>Female ' );
  document.write( '      <option value=M>Male ' );
  document.write( '      </select>     ' );
  document.write( ' ' );
  document.write( '</font></td></tr> ' );
  document.write( '<tr><td align=center nowrap> ' );
  document.write( '<font color="#000000" face="Arial,Helvetica" ' );
  document.write( 'size="2" style="font-size:10pt"> ' );
  document.write( 'E-mail: <input type=text name="email" maxlength="50" size="10"> ' );
  document.write( '</font></td><td align=center nowrap> ' );
  document.write( '<font color="#000000" face="Arial,Helvetica" ' );
  document.write( 'size="2" style="font-size:10pt"> ' );
  document.write( 'Zip Code: <input type=text name="zip" size="5" maxlength="25"> ' );
  document.write( '</font></td><td align=center nowrap> ' );
  document.write( '<input type=submit name="x" value="Go!"> ' );
  document.write( '</td></tr><tr><td colspan=3 align="center"> ' );
  document.write( '<font color="#000000"  face="Arial,Helvetica" ' );
  document.write( 'size="2" style="font-size:10pt"> ' );
  document.write( '<b><a href="http://www.focalex.com/subs.emp?aid=249517" ' );
  document.write( 'target="_blank"><font color="#000000">Other Great ' );
  document.write( 'Lists</font></a>&nbsp; &nbsp;<a ' );
  document.write( 'href="http://www.focalex.com/affiliates/?pc=249517&ban=esf"><font color="#000000">Webmasters make ' );
  document.write( 'money.</font></a><br><br><a href="http://www.focalex.com/privacy/"  ' );
  document.write( 'target="_blank"><font color="#000000">Privacy Policy ' );
  document.write( '</font></a></font> ' );
  document.write( '</b></font></td></tr> ' );
  document.write( '</table></td></tr></form></table> ' );
