var debug = window.document.location.search.indexOf('debug') != -1;

// THIS FILE CONTAINS GENERIC VALIDATION FUNCTIONS
// IT DOES NOT CONTAIN SPECIFIC VALIDATION FOR ALL THE FIELDS IN ANY SINGLE FORM


function validateSpecialOffer() {
  if (document.forms[0].elements[0].value == "") {
    alert ("Please enter a First Name.");
    return false;
  }
  
  if (document.forms[0].elements[1].value == "") {
    alert ("Please enter a Last Name.");
    return false;
  }
  
  if (document.forms[0].elements[3].value == "") {
    alert ("Please enter a Company Name.");
    return false;
  }

  if (document.forms[0].elements[4].value == "") {
    alert ("Please enter an Address.");
    return false;
  }

  if (document.forms[0].elements[5].value == "") {
    alert ("Please enter an State.");
    return false;
  }

  if (document.forms[0].elements[6].value == "") {
    alert ("Please enter an Zip Code.");
    return false;
  }

  if (document.forms[0].elements[7].value == "") {
    alert ("Please enter an Email Address.");
    return false;
  }

  if (document.forms[0].elements[8].value == "") {
    alert ("Please enter a Website URL.");
    return false;
  }

  return true;
}

// -----------------------------------------------------------------------------
// CHECK FOR THE UNDER AGE COOKIE
// IF FOUND, REDIRECT TO LINK SPECIFIED BY underage_file
function checkAgeCookie(underage_file) {
  underage = document.cookie;

  if (underage.indexOf('EmailAge') > -1) {
    window.location = underage_file;
  }
}


// -----------------------------------------------------------------------------
// SET THE UNDER AGE COOKIE
function setAgeCookie() {
  today = new Date();
  tomorrow = new Date();
  tomorrow.setTime(today.getTime()+(60*60*24*1000));
  document.cookie='EmailAge=true; path=/; expires=' + tomorrow.toGMTString();
}


// -----------------------------------------------------------------------------
// BASED ON MONTH AND YEAR DETERMINES IF USER IS UNDER 13.
function under13(form) {
  return underAge(form, 13);
}

// -----------------------------------------------------------------------------
// BASED ON MONTH AND YEAR DETERMINES IF USER IS UNDER THE SPECIFIED AGE
function underAge(form, age) {
  // skip this check if values are undefined
  if (form.sf_birth_month[form.sf_birth_month.selectedIndex].value == "none" ||
    form.sf_birth_year[form.sf_birth_year.selectedIndex].value == "none") {
    return false;
  }

  var minimum_year = age;

  var now = new Date();
  var thisMonth = now.getMonth() + 1;
  var thisYear = now.getFullYear();
  var birthMonth = form.sf_birth_month.value;
  var birthYear = form.sf_birth_year.value;
  var user_age = thisYear - birthYear;

  if (user_age < minimum_year) {
    return true;
  }
  if (user_age > minimum_year) {
    return false;
  }
  if (thisMonth < birthMonth) { // user_age == minimum_year
    return true;
  }
  return false;
}


// -----------------------------------------------------------------------------
// TRUE IF THE VALUE OF THE ARG IS BLANK, NULL, OR AN END-OF-LINE CHARACTER
function isBlank(s) {
  if (s == "") {
    return true;
  }
  // loop checks for instance of any non-eol character
  for(var i = 0; i < s.length; i++) {
    var c = s.charAt(i);
    if ((c != ' ') && (c != '\n') && (c != '\t'))
      return false;
  }
  return true;
}


// -----------------------------------------------------------------------------
// RETRIEVE THE INDEX OF THE FIRST SELECTED CHECKBOX 
// OR -1
function getCheckedIndex(s) {
  val = -1;
  for (var i = 0; i < s.length; i++) {
    if (s[i].checked) {
      val = i;
      break;
    }
  }
  return val;
}

// -----------------------------------------------------------------------------
// RETRIEVE THE VALUE IN THE CHECKBOX LIST OR EMPTY STRING IF NONE ARE CHECKED
// IF MORE THAN ONE, COMMA DELIMITED
function getCheckedValue(s) {
  val = "";
  for (var i = 0; i < s.length; i++) {
    if (s[i].checked) {
      if (val == "") {
        val = s[i].value;
      } else {
        val = val + "," + s[i].value;
      }
    }
  }
  return val;
}

// -----------------------------------------------------------------------------
// TRUE IF ANY BOX IN THE CHECKBOX LIST HAS BEEN CHECKED BY THE USER
function isChecked(s) {
  for (var i = 0; i < s.length; i++) {
    if (s[i].checked) return true;
  }
  return false;
}


/* This function is from "http://javascript.internet.com/forms/check-email.html".   
   Comments were taken out to conserve space.  You can look at the comments from the example
   at the URL above.  This basically checks ALL standard W3C email address formats.
*/
function checkEmailAddress( emailStr ) {

  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=emailStr.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
  }

  // Make sure there's a host name preceding the domain.
  if (len<2) {
     return false
  }
  return true;
} 

// TRUE if the args value if a 5-digit integer
function isZipcode(zip){
    // number pattern
    var numberPattern = /\d{5}/;

    // make sure it is a number
  var zipArray=zip.match(numberPattern)
  if (zipArray==null) {
      return false
  }
  // make sure the length is 5 characters
  if(zip.length != 5){
      return false
  }
    return true
}




/** Validate a first name has been entered */
function validFirstName(form) {
    if (isBlank(form.sf_first_nme.value)) {
        alert("Please enter your first name.");
        form.sf_first_nme.focus();
        return false;
  }
  return true;
}

/** Validate a last name has been entered */
function validLastName(form) {
    if (isBlank(form.sf_last_nme.value)) {
        alert("Please enter your last name.");
        form.sf_last_nme.focus();
        return false;
  }
  return true;
}


/** 
 *  Validate email has been entered and is of proper format
 *  Optionally validate the email against the confirm field
 */
function validEmail(form) {
    if (isBlank(form.sf_email_addr.value)) {
        alert("Please enter your email address.");
        form.sf_email_addr.focus();
        return false;
  }
  if (form.email_addr_confirm) {
    if (isBlank(form.email_addr_confirm.value)) {
      alert("Please confirm your email address.");
      form.email_addr_confirm.focus();
      return false;
    }
    if (form.sf_email_addr.value != form.email_addr_confirm.value) {
      alert("The email addresses do not match. Please try again.");
      form.sf_email_addr.focus();
      return false;
    }
  }
  if (!checkEmailAddress(form.sf_email_addr.value)) {  
        alert("Please enter a valid email address.");
        form.sf_email_addr.focus();
        return false;
  }
  return true;
}


/** Validate a street address 1 has been entered */
function validStreetAddress(form) {
    if (isBlank(form.sf_address1.value)) {
        alert("Please enter your street address.");
        form.sf_address1.focus();
        return false;
  }
  return true;
}


/** Validate that a zip code of proper format has been entered */
function validZipcode(form) {
    if (isBlank(form.sf_postal_cd.value)) {
        alert("Please enter your zip code.");
        form.sf_postal_cd.focus();
        return false;
  }
  if(!isZipcode(form.sf_postal_cd.value)) {
    window.alert("Please enter a valid zip code.  This is a number of 5 digits.");
    form.sf_postal_cd.focus();
    return false;
  }
  return true;
}


/** Validate birth date fields have been selected */
function validBirthDate(form) {
    if (form.sf_birth_month[form.sf_birth_month.selectedIndex].value == "none") {
    window.alert("Please select your birth month.");
    form.sf_birth_month.focus();
    return false;
  }
    if (form.sf_birth_year[form.sf_birth_year.selectedIndex].value == "none") {
    window.alert("Please select your birth year.");
    form.sf_birth_year.focus();
    return false;
  }
  return true;
}

/** Validate the user is old enough to submit the form */
function validAge(form) {  
    if (under13(form)) {
        setAgeCookie();
        window.location.href = form.underageURL.value;
        return false;
  }
  return true;
}

/** Insert the values from the checkbox group into a hidden field in a comma-delimited list */
function flattenCheckboxGroup(checkboxGroup, hiddenField) {
  if (debug) alert("flattening checkbox");
  values = "";
  for (var i = 0; i < checkboxGroup.length; i++) {
    if (checkboxGroup[i].checked) {

      if (values == "") {
        values = checkboxGroup[i].value;
      } else {
        values = values + "," + checkboxGroup[i].value;
      }
    }
  }
  hiddenField.value = values;
}

