// constructor FormField
// Sets object variables

function FormField(field) {
  this.field = field;
  this.fieldValue = (field.type.substr(0,6) == "select") ? this.fieldValue = field.options[field.selectedIndex].value : field.value;
}

// method isEmail()
// Checks to see if field
// has a valid email address as a value

FormField.prototype.isEmail = function() {
  var re = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
  if(!re.test(this.fieldValue)){
    return false;
  } else {
    return true;
  }
}

FormField.prototype.valEmail = function(errorMsg) {
  if(!this.isEmail()) {
    alert(errorMsg);
    this.field.focus();
    return false;
  } else {
    return true;
  }
}

// method isNotEmpty()
// Checks to see if the field is empty

FormField.prototype.isNotEmpty = function() {
	var re = /^[\s ]+$/;
	if(re.test(this.fieldValue) || this.fieldValue == "") {
		return false;
	} else {
		return true;
	}
}

FormField.prototype.valNotEmpty = function(errorMsg) {
  if(!this.isNotEmpty()) {
    alert(errorMsg);
    if(this.field.type != "hidden") {
      this.field.focus();
    }
    return false;
  } else {
    return true;
  }
}

// method isNum()
// Checks to see if the field
// has a number for its value

FormField.prototype.isNum = function() {
  var re = /^-*\d+$/;
  if(!re.test(this.fieldValue)) {
    return false;
  } else {
    return true;
  }
}

FormField.prototype.valNum = function(errorMsg) {
  if(!this.isNum()) {
    alert(errorMsg);
    if(this.field.type != "hidden") {
      this.field.focus();
    }
    return false;
  } else {
    return true;
  }
}

// method isPosNum()
// Checks to see if the field
// has a positive number for its value

FormField.prototype.isPosNum = function() {
  var re = /^\d+$/;
  if(!re.test(this.fieldValue)) {
    return false;
  } else {
    return true;
  }
}

FormField.prototype.valPosNum = function(errorMsg) {
  if(!this.isPosNum()) {
    alert(errorMsg);
    if(this.field.type != "hidden") {
      this.field.focus();
    }
    return false;
  } else {
    return true;
  }
}

// method isAlpha()
// checks to see if the field
// has an alphabetical value

FormField.prototype.isAlpha = function() {
  var re = /^[a-zA-Z]+$/;
  if(!re.test(this.fieldValue)) {
    return false;
  } else {
    return true;
  }
}

FormField.prototype.valAlpha = function(errorMsg) {
  if(!this.isAlpha()) {
    alert(errorMsg);
    if(this.field.type != "hidden") {
      this.field.focus();
    }
    return false;
  } else {
    return true;
  }
}

// method isAlphaSpace()
// Checks to see if the field
// has an alphabetical + spaces value

FormField.prototype.isAlphaSpace = function() {
  var re = /^[a-zA-Z ]+$/;
  if(!re.test(this.fieldValue)) {
    return false;
  } else {
    return true;
  }
}

FormField.prototype.valAlphaSpace = function(errorMsg) {
  if(!this.isAlphaSpace()) {
    alert(errorMsg);
    if(this.field.type != "hidden") {
      this.field.focus();
    }
    return false;
  } else {
    return true;
  }
}

FormField.prototype.isAlphaExtra = function() {
  var re = /^[a-zA-Z \/.,]+$/;
  if(!re.test(this.fieldValue)) {
    return false;
  } else {
    return true;
  }
}

FormField.prototype.valAlphaExtra = function(errorMsg) {
  if(!this.isAlphaExtra()) {
    alert(errorMsg);
    if(this.field.type != "hidden") {
      this.field.focus();
    }
    return false;
  } else {
    return true;
  }
}

// method isAlphaNum()
// checks to see if the field
// has an alpha-numeric value

FormField.prototype.isAlphaNum = function() {
  var re = /^[a-zA-Z0-9 ]+$/;
  if(!re.test(this.fieldValue)) {
    return false;
  } else {
    return true;
  }
}

FormField.prototype.valAlphaNum = function(errorMsg) {
  if(!this.isAlphaNum()) {
    alert(errorMsg);
    if(this.field.type != "hidden") {
      this.field.focus();
    }
    return false;
  } else {
    return true;
  }
}

// method isAlphaNumExtra()
// checks to see if the field
// has an alpha-numeric value plus \ . , #

FormField.prototype.isAlphaNumExtra = function() {
  var re = /^[a-zA-Z0-9 \/.,'!:()-]+$/;
  if(!re.test(this.fieldValue)) {
    return false;
  } else {
    return true;
  }
}

FormField.prototype.valAlphaNumExtra = function(errorMsg) {
  if(!this.isAlphaNumExtra()) {
    alert(errorMsg);
    if(this.field.type != "hidden") {
      this.field.focus();
    }
    return false;
  } else {
    return true;
  }
}

// method isMinLength(minLength)
// checks to see if the field
// has at least minLength characters.

FormField.prototype.isMinLength = function(minLength) {
	fieldLength = this.fieldValue.length;
	
	if(fieldLength < minLength) {
		return false;
	} else {
		return true;
	}
}

FormField.prototype.valMinLength = function(minLength,errorMsg) {
	if(!this.isMinLength(minLength)) {
		alert(errorMsg);
		this.field.focus();
		return false;
	} else {
		return true;
	}
}

// method isMaxLength(maxLength)
// checks to see if the field
// has at most maxLength characters

FormField.prototype.isMaxLength = function(maxLength) {
  fieldLength = this.fieldValue.length;

  if(fieldLength > maxLength) {
    return false;
  } else {
    return true;
  }
}

FormField.prototype.valMaxLength = function(maxLength,errorMsg) {
  if(!this.isMaxLength(maxLength)) {
    alert(errorMsg);
    this.field.focus();
    return false;
  } else {
    return true;
  }
}

// function isEqualTo(compareValue)
// checks to see if the fields have the same value

FormField.prototype.isEqualTo = function(compareValue) {	
	if(this.fieldValue !== compareValue) {
		return false;
	} else {
		return true;
	}
}

FormField.prototype.valEqualTo = function(compareValue,errorMsg) {
	if(!this.isEqualTo(compareValue)) {
		alert(errorMsg);
		this.field.focus();
		return false;
	} else {
		return true;
	}
}


// function isNotEqualTo(compareValue)
// checks to see if the fields have a unique value

FormField.prototype.isNotEqualTo = function(compareValue) {	
	if(this.fieldValue === compareValue) {
		return false;
	} else {
		return true;
	}
}

FormField.prototype.valNotEqualTo = function(compareValue,errorMsg) {
	if(!this.isNotEqualTo(compareValue)) {
		alert(errorMsg);
		this.field.focus();
		return false;
	} else {
		return true;
	}
}


FormField.prototype.isChecked = function() {
	if(this.field.length) {
		checked = false;
		for(i=0; i<this.field.length; i++) {
			if(this.field[i].checked) {
				checked = true;
			}
		}
		return checked;
	} else {
		if(!this.field.checked) {
			return false;
		} else {
			return true;
		}
	}
}

FormField.prototype.valChecked = function(errorMsg) {
	if(!this.isChecked()) {
		alert(errorMsg);
		return false;
	} else {
		return true;
	}
}

FormField.prototype.isDate = function() {
	var re = /^(1[0-2]|0?\d{1})\/[0-3]?\d{1}\/\d{4,}$/;
	if(!re.test(this.fieldValue)) {
		return false;
	} else {
		return true;
	}
}

FormField.prototype.valDate = function(errorMsg) {
	if(!this.isDate()) {
		alert(errorMsg);
		this.field.focus();
		return false;
	} else {
		return true;
	}
}

FormField.prototype.isPhone = function() {
	var re = /^((\(?\d{3}\)?[-\s]?\d{3}[-\s]\d{4})|((\+?\d{1,3} ?)?\(?\d{3}\)?[-\s]?\d{3}[-\s]\d{4})|(\d{10}))/;
	if(!re.test(this.fieldValue)) {
		return false;
	} else {
		return true;
	}
}

FormField.prototype.valPhone = function(errorMsg) {
	if(!this.isPhone()) {
		alert(errorMsg);
		this.field.focus();
		return false;
	} else {
		return true;
	}
}


FormField.prototype.isUSPhone = function() {
	var re = /^((\(?\d{3}\)?[-\s]?\d{3}[-\s]\d{4})|((\+?\d{1,3} ?)?\(?\d{3}\)?[-\s]?\d{3}[-\s]\d{4})|(\d{10}))/;
	if(!re.test(this.fieldValue)) {
		return false;
	} else {
		return true;
	}
}


FormField.prototype.valUSPhone = function(errorMsg) {
	if(!this.isPhone()) {
		alert(errorMsg);
		this.field.focus();
		return false;
	} else {
		return true;
	}
}


FormField.prototype.isZip = function() {
	var re = /^((\d{5}(-\d{4})?)|([a-zA-Z]{1,2}\d(\d|[a-zA-Z])? \d[a-zA-Z]{2})|([a-zA-Z]\d[a-zA-Z] \d[a-zA-Z]\d))$/;
	if(!re.test(this.fieldValue)) {
		return false;
	} else {
		return true;
	}
}

FormField.prototype.valZip = function(errorMsg) {
	if(!this.isZip()) {
		alert(errorMsg);
		this.field.focus();
		return false;
	} else {
		return true;
	}
}



/* Called Functions */
function unsubscribeValidate(form) {
	var Email = new FormField(form.email);
	if(!Email.valEmail("Please enter a valid email address.")) return false;
	if(!Email.valMaxLength(80,"The email address you entered is longer than the 80 characters allowed.")) return false;
	return true;
}

function subscribeValidate(form) {
	var Firstname = new FormField(form.firstname);
	var Lastname = new FormField(form.lastname);
	var Email = new FormField(form.email);
	var AptSearch = new FormField(form.aptSearch);
	var PortId = new FormField(form.portid);
	if(!Firstname.valAlphaSpace("Please enter a valid first name.")) return false;
	if(!Firstname.valMaxLength(40,"The first name you entered is longer than the 40 letters allowed.")) return false;
	if(!Lastname.valAlphaSpace("Please enter a valid last name.")) return false;
	if(!Lastname.valMaxLength(40,"The last name you entered is longer than the 40 letters allowed.")) return false;
	if(!Email.valEmail("Please enter a valid email address.")) return false;
	if(!Email.valMaxLength(80,"The email address you entered is longer than the 80 characters allowed.")) return false;
	if(!AptSearch.valNotEmpty("Please search for a default departure airport.")) return false;
	if(!PortId.valNotEmpty("Please select a default departure airport.")) return false;
	return true;
}

function signinValidate(form) {
	var Email = new FormField(form.email);
	var Password = new FormField(form.password);
	if(!Email.valEmail("Please enter a valid email address.")) return false;
	if(!Password.valNotEmpty("Please enter your password.")) return false;
	return true;
}

function registerValidate(form) {
	var Prefix = new FormField(form.prefix);
	var Firstname = new FormField(form.firstname);
	var Middlename = new FormField(form.middlename);
	var NoMiddlename = new FormField(form.nomiddlename);
	var Lastname = new FormField(form.lastname);
	var Email = new FormField(form.email);
	var VerifyEmail = new FormField(form.verifyEmail);
	var Password = new FormField(form.password);
	var VerifyPassword = new FormField(form.verifyPassword);
	var TermsAgree = new FormField(form.agree);
	var AptSearch = new FormField(form.aptSearch);
	var PortId = new FormField(form.portid);
	var Birthdate = new FormField(form.birthdate);
	var Redressnum = new FormField(form.redressnum);

  if(!Prefix.valPosNum("Please select a valid prefix.")) return false;

	if(!Firstname.valAlphaSpace("Please enter a valid first name.")) return false;
	if(!Firstname.valMaxLength(40,"The first name you entered is longer than the 40 letters allowed.")) return false;

	if(document.getElementById("nomiddlename").checked != true) {
    if(!Middlename.valAlphaSpace("Please enter a valid middle name.")) return false;
    if(!Middlename.valMaxLength(40,"The middle name you entered is longer than the 40 letters allowed.")) return false;
  }
	
	if(!Lastname.valAlphaSpace("Please enter a valid last name.")) return false;
	if(!Lastname.valMaxLength(40,"The last name you entered is longer than the 40 letters allowed.")) return false;
	
  if(!Birthdate.valNotEmpty("Please enter your birthdate.")) return false;
  if(!Birthdate.valDate("Please enter your birthdate.")) return false;
	
	if(!Email.valEmail("Please enter a valid email address.")) return false;
	if(!VerifyEmail.valEqualTo(Email.fieldValue,"Please make sure the email and verify email fields match.")) return false;
	if(!Email.valMaxLength(80,"The email address you entered is longer than the 80 characters allowed.")) return false;
	if(!Password.valAlphaNum("Please enter a password with the characters a-z, A-Z, and 0-9.")) return false;
	if(!Password.valMinLength(6,"Please enter a password that is at least 6 characters long.")) return false;
	if(!Password.valMaxLength(15,"Please enter a password that is at most 15 characters long.")) return false;
	if(!VerifyPassword.valEqualTo(Password.fieldValue,"Please make sure the password and verify password fields match.")) return false;
	if(!AptSearch.valNotEmpty("Please search for a default departure airport.")) return false;
	if(!PortId.valNotEmpty("Please select a default departure airport.")) return false;
	
	if(Redressnum.isNotEmpty()) {
    if(!Redressnum.valAlphaNum("Please enter a redress number with the characters a-z, A-Z, and 0-9.")) return false;
    if(!Redressnum.valMaxLength(99,"The redress number you entered is longer than the 99 characters allowed.")) return false;
  }
  
	if(!TermsAgree.valChecked("You must agree to our terms of service in order to register.")) return false;
	
	return true;
}

function forgotValidate(form) {
	var Email = new FormField(form.email);
	if(!Email.valEmail("Please enter a valid email address.")) return false;
	if(!Email.valMaxLength(80,"The email address you entered is longer than the 80 characters allowed.")) return false;
	return true;
}


function seatValidate() {
	var validates = true;
	var inputs = $("#seatInputs input");
  $("div.pass").each(function() {
					that = this;
					if(inputs.filter(function() { return this.seat == that.id; }).length == 0) {
							validates = false;
							$("#" + this.id).addClass("warning");
              validates = false;
					}
			});

  if(!validates) {
    alert("You must place all passengers in a seat");
  }
	return validates;
}