//form validation
//variables for form validation checks
var form = "";
var submitted = false;
var error = false;
var error_message = "";

//helper functions
//function taken from Matt Kruse Date Functions

//check if input is integer
//input: the value to check
//output: if it is integer => true, otherwise => false
function _isInteger(val) {
  var digits = "1234567890";
  for (var i = 0; i < val.length; i ++) {
    if (digits.indexOf(val.charAt(i)) == -1) { 
	  	return false; 
		}
  }
  return true;
}

//convert input from string to integer
//input: the value to convert
//output: the integer if successful, null if failed
function _getInt(str, i, minlength, maxlength) {
  for (var x = maxlength; x >= minlength; x--) {
		var token = str.substring(i,i + x);
		if (token.length < minlength) {
	  	return null;
		}
		if (_isInteger(token)) {
	  	return token;
    }
  }
  return null;
}

//end of helper functions

//check if two new passwords match - no empty passwords are accepted!
//input: 
// - pw1, pw2: names of the password fields to check
//output:
// - if condition passes: nothing is done
// - else: error message variable is updated.
function check_pw(pw1, pw2) {
  if (form.elements[pw1].value == "" && form.elements[pw2].value == "") {
		error_message = error_message + "* " + "Passwords missing." + "\n";
		error = true;
  }
  if (form.elements[pw1].value != form.elements[pw2].value) {
		error_message = error_message + "* " + "Passwords not matching." + "\n";
		error = true;
  }
}

//check if a checkbox is checked
//input: 
// - field_name: name of the checkboxes group
// - message: the error message to use
//output:
// - if checked: nothing is done
// - else: error message variable is updated.
function check_box(field_name, message) {
  //var checkbox = document.getElementsByName(field_name);
  var checkbox = form.elements[field_name];
	if (!checkbox.checked) {
    error_message = error_message + "* " +  message + "\n";
   	error = true;
  }
}

//check if two email addresses match - no empty values are accepted!
//input: 
// - email1, email2: names of the email address fields to check
//output:
// - if condition passes: nothing is done
// - else: error message variable is updated.
function check_emails(email1, email2) {
  if (form.elements[email1].value != form.elements[email2].value) {
		error_message = error_message + "* " + "Email Addresses not matching." + "\n";
		error = true;
  }
}

//check if email address input is valid
//input: 
// - field_name: name of the email input field
// - message: the error message to use
//output:
// - if condition passes: nothing is done
// - else: error message variable is updated.
function check_email(field_name, message) {
  if (form.elements[field_name] && (form.elements[field_name].type != "hidden")) {
    var field_value = form.elements[field_name].value;
    if (field_value == "") {
	  	error_message = error_message + "* " + message + " required." + "\n";
	  	error = true;
    }
		else if (field_value.indexOf("@") == -1 || field_value.indexOf(".") == -1) {
      error_message = error_message + "* " + message + " invalid." + "\n";
	 	 error = true;
		}
  }
}

//check if input field is empty or not
//if empty: throws out error message
//input: 
// - field_name: name of the input field
// - field_size: the minimum size of the input
// - message: the error message to use
//output:
// - if condition passes: nothing is done
// - else: error message variable is updated.
function check_input(field_name, field_size, message) {
  if (form.elements[field_name] && (form.elements[field_name].type != "hidden")) {
    var field_value = form.elements[field_name].value;
    if (field_value == "" || field_value.length < field_size) {
	  	error_message = error_message + "* " + message + "\n";
	  	error = true;
    }
  }
}

//check if input field is an integer
//input: 
// - field_name: name of the input field
// - message: the error message to use
//output:
// - if condition passes: nothing is done
// - else: error message variable is updated.
function check_integer(field_name, message) {
  if (form.elements[field_name] && (form.elements[field_name].type != "hidden")) {
    var field_value = form.elements[field_name].value;
	if (!(_isInteger(field_value))) {
	  error_message = error_message + "* " + message + "\n";
	  error = true;
    }
	else if (field_value < 0) {
	  error_message = error_message + "* " + message + "\n";
	  error = true;
    }	
  }
}

//check if a State / Province is selected
//input: 
// - field_name: name of the input field
// - message: the error message to use
//output:
// - if condition passes: nothing is done
// - else: error message variable is updated.
function check_state(field_name, message) {
  if (form.elements[field_name] && (form.elements[field_name].type != "hidden")) {
    var field_value = form.elements[field_name].value;
	if (field_value == "-") {
	  error_message = error_message + "* " + message + "\n";
	  error = true;
    }	
  }
}

//check if input field is an integer
//input: 
// - field_name: name of the input field
// - message: the error message to use
//output:
// - if condition passes: nothing is done
// - else: error message variable is updated.
function check_phone(area, pre, suf, message1, message2) {
  var area_value = form.elements[area].value;
	var pre_value = form.elements[pre].value;
	var suf_value = form.elements[suf].value;
	if (!(_isInteger(area_value)) || !(_isInteger(pre_value)) || !(_isInteger(suf_value))) {
	  error_message = error_message + "* " + message1 + "\n";
	  error = true;
  }
	else if ((area_value < 0) || (pre_value < 0) || (suf_value < 0)) {
	  error_message = error_message + "* " + message2 + "\n";
	  error = true;
  }	
	else if ((area_value == "") || (pre_value == "") || (suf_value == "")) {
	  error_message = error_message + "* " + message1 + "\n";
	  error = true;
  }	
}

//check if credit card number field is an integer
//input: 
// - field_name: name of the input field
// - message: the error message to use
//output:
// - if condition passes: nothing is done
// - else: error message variable is updated.
function check_ccnum(cardnum) {
  var number = form.elements[cardnum].value;
	if (!(_isInteger(number))) {
	  error_message = error_message + "* " + "Credit Card Number must be a number with NO spaces or dashes" + "\n";
	  error = true;
  }
	else if (number < 0) {
	  error_message = error_message + "* " + "Credit Card Number is Invalid." + "\n";
	  error = true;
  }	
	else if (number == "") {
	  error_message = error_message + "* " + "Credit Card Number is Required." + "\n";
	  error = true;
  }
	else if (number.length != 16) {
		error_message = error_message + "* " + "Credit Card Number must be 16-digits long." + "\n";
	  error = true;
	}
}

//Main Validation Groups

//Checkout Addresses form validation function
function check_address(form_name) {
  error = false;
  form = form_name;
  error_message = "Errors have occured during the process of your form.\n\nPlease make the following corrections:\n\n";
	error_message = error_message + "Billing Address:\n";
  check_input("b_name", 1, "Your name is required");
  check_input("b_address", 1, "Address is required.");
	check_input("b_city", 1, "City is required.");
	check_state("b_state", "State / Province is required.");
	check_input("b_zip", 1, "Zip / Postal Code is required.");
	error_message = error_message + "\nShipping Address:\n";
  check_input("s_name", 1, "Your name is required");
	check_input("s_address", 1, "Address is required.");
  check_input("s_city", 1, "City is required.");
	check_state("s_state", "State / Province is required.");
	check_input("s_zip", 1, "Zip / Postal Code is required.");
  if (error == true) {
		alert(error_message);
		return false;
  } 
  else {
		submitted = true;
		return true;
  }
}

//Checkout credit card info form validation function
function check_ccinfo(form_name) {
  error = false;
  form = form_name;
  error_message = "Errors have occured during the process of your form.\n\nPlease make the following corrections:\n\n";
	check_ccnum("cardnum");
  check_input("cardname", 1, "Your Name is required.");
	check_input("cardcvv", 1, "Credit Card Verification Number is required.");
	check_box("agree", "You must agree to the order restrictions.");
  if (error == true) {
		alert(error_message);
		return false;
  } 
  else {
		submitted = true;
		return true;
  }
}

//Customer Registration form validation function
function check_register_form(form_name) {
  error = false;
  form = form_name;
  error_message = "Errors have occured during the process of your form.\n\nPlease make the following corrections:\n\n";	
  check_email("email1", "Email Address is");
  check_emails("email1", "email2");
  check_pw("pw1", "pw2");
  check_input("firstname", 1, "Firstname is required.");
  check_input("lastname", 1, "Lastname is required.");
  check_input("address", 1, "Address is required.");
  check_input("city", 1, "City is required.");
  check_state("state", "State / Province is required.");
  check_input("zip", 1, "Zip / Postal Code is required.");
  check_phone("phone1area", "phone1pre", "phone1suf", "Daytime Phone Number is required.", "Daytime Phone Number is invalid.");
	check_ccnum("cardnum");
  check_input("cardname", 1, "Your Name on the Credit Card is required.");
	check_input("cardcvv", 1, "Credit Card Verification Number is required.");
	check_box("agreement", "You must agree to the Consent & Waiver of Liability document.");
  if (error == true) {
		alert(error_message);
		return false;
  } 
  else {
		submitted = true;
		return true;
  }
}

//Customer Password Change form validation function
function check_pwchange_form(form_name) {
  error = false;
  form = form_name;
  error_message = "Errors have occured during the process of your form.\n\nPlease make the following corrections:\n\n";	
  check_pw("newpw1", "newpw2");
  check_input("orgpw", 1, "Your current password is required.");
  if (error == true) {
		alert(error_message);
		return false;
  } 
  else {
		submitted = true;
		return true;
  }
}

//Customer Refill Request form validation function
function check_refill_form(form_name) {
  error = false;
  form = form_name;
  error_message = "Errors have occured during the process of your form.\n\nPlease make the following corrections:\n\n";	
  check_input("rxnum", 1, "Your Prescription Number is required.");
	check_input("product", 1, "Drug Name is required.");
	check_input("strength", 1, "Drug Strength is required.");
	check_input("quantity", 1, "Drug Quantity is required.");
  if (error == true) {
		alert(error_message);
		return false;
  } 
  else {
		submitted = true;
		return true;
  }
}

//Customer Login form validation function
function check_login(form_name) {
  error = false;
  form = form_name;
  error_message = "Errors have occured during the process of your form.\n\nPlease make the following corrections:\n\n";	
  check_email("email", "Email Address is");
  check_input("pw", 1, "Password is required.");
  if (error == true) {
		alert(error_message);
		return false;
  } 
  else {
		submitted = true;
		return true;
  }
}

//Contact form validation function
function check_contact_form(form_name) {
  error = false;
  form = form_name;
  error_message = "Errors have occured during the process of your form.\n\nPlease make the following corrections:\n\n";	
  check_email("email", "Email Address is");
  check_input("name", 1, "Your Name is required.");
	check_input("subject", 1, "Subject is required.");
	check_input("content", 1, "Your Message is required.");
  if (error == true) {
		alert(error_message);
		return false;
  } 
  else {
		submitted = true;
		return true;
  }
}


//End of Main Validation Groups

//end of form validation functions

//area show/hide script
//used in: emaillist.php
//input: 
// - name: ID attribute value for a DIV tag
//output: show/hide area identified with the given ID value
function expandarea(name) {
  styleObj = document.getElementById(name).style;
  if (styleObj.display == "none") {
    styleObj.display = "";
  }
  else { 
    styleObj.display = "none";
  }
}

//table rows show/hide script
//check for all tr tags for attribute with the input name, and show/hide them!
//input: 
// - name: ID attribute value for a TR tag
//output: show/hide rows identified with the given ID value
function expandtr(name) {
  tr = document.getElementsByTagName('tr');
  for (i = 0; i < tr.length; i ++) {
    if (tr[i].getAttribute(name)) {
	  if (tr[i].style.display == 'none') {
	    tr[i].style.display = '';
	  }
	  else {
        tr[i].style.display = 'none';
      }
    }
  }
}

//delete confirmation
function confirmDelete() {
  if (confirm("Are you sure you want to delete this entry? This action cannot be undone. Do you wish to proceed anyway?")) {
    return true;
  }
  return false;
}

//logout confirmation
function confirmLogout() {
  if (confirm("Are you sure you want to logout?")) {
    return true;
  }
  return false;
}