//required.js
//version 1.1
//changes
//July 11th 2008
//email validation


document.getElementsByClassName = function(clsName){
    var retVal = new Array();
    var elements = document.getElementsByTagName("*");
    for(var i = 0;i < elements.length;i++){
        if(elements[i].className.indexOf(" ") >= 0){
            var classes = elements[i].className.split(" ");
            for(var j = 0;j < classes.length;j++){
                if(classes[j] == clsName)
                    retVal.push(elements[i]);
            }
        }
        else if(elements[i].className == clsName)
            retVal.push(elements[i]);
    }
    return retVal;
}
//

function validate()
{
var required = document.getElementsByClassName('required');
//
for(i = 0; i < required.length; i++)
{
//
if((required[i].type=="checkbox") || (required[i].type=="radio"))
{
//
var req_name = required[i].name;
var all_fields = document.getElementsByTagName('input');
var boo = false;
//
for(j = 0; j < all_fields.length; j++)
{
if((all_fields[j].name == req_name) && (all_fields[j].checked))
boo = true;
}
if(!boo)
{
alert(req_name+" is a required field");
return false;
}
//
}
//
if((required[i].value).length <= 0 )
{
alert(required[i].name+" is a required field");
required[i].select();
return false;
}
//

}

//
//check if there is any email field in the form

var email_valid = document.getElementById('email');

if(email_valid)
{

if(!isValidEmail(email_valid.value))
{
alert("Incorrect email address");
return false;
}

}

//

//check if there is any zipcode field in the form

var zip_valid = document.getElementById('zip');

if(zip_valid)
{

return validateZIP(zip_valid.value);

}

//

return true;
}

///for email validation

function isValidEmail(email, required) {
    if (required==undefined) {   // if not specified, assume it's required
        required=true;
    }
    if (email==null) {
        if (required) {
            return false;
        }
        return true;
    }
    if (email.length==0) {  
        if (required) {
            return false;
        }
        return true;
    }
    if (! allValidChars(email)) {  // check to make sure all characters are valid
        return false;
    }
    if (email.indexOf("@") < 1) { //  must contain @, and it must not be the first character
        return false;
    } else if (email.lastIndexOf(".") <= email.indexOf("@")) {  // last dot must be after the @
        return false;
    } else if (email.indexOf("@") == email.length) {  // @ must not be the last character
        return false;
    } else if (email.indexOf("..") >=0) { // two periods in a row is not valid
	return false;
    } else if (email.indexOf(".") == email.length) {  // . must not be the last character
	return false;
    }
//
    return true;
}

function allValidChars(email) {
  var parsed = true;
  var validchars = "abcdefghijklmnopqrstuvwxyz0123456789@.-_";
  for (var i=0; i < email.length; i++) {
    var letter = email.charAt(i).toLowerCase();
    if (validchars.indexOf(letter) != -1)
      continue;
    parsed = false;
    break;
  }
  return parsed;
}

//for zip code validation

function validateZIP(field) {
var valid = "0123456789-";
var hyphencount = 0;

if (field.length!=5 && field.length!=10) {
alert("Please enter your 5 digit or 5 digit+4 zip code.");
return false;
}
for (var i=0; i < field.length; i++) {
temp = "" + field.substring(i, i+1);
if (temp == "-") hyphencount++;
if (valid.indexOf(temp) == "-1") {
alert("Invalid characters in your zip code.  Please try again.");
return false;
}
if ((hyphencount > 1) || ((field.length==10) && ""+field.charAt(5)!="-")) {
alert("The hyphen character should be used with a properly formatted 5 digit+four zip code, like '12345-6789'.   Please try again.");
return false;
   }
}
//return true;
}

