function radioCheck(ss) {
  for(var i = 0; i < ss.length; i++) {
	  if(ss[i].checked) { return ss[i].value; }
	  }
  return false;
}

function checkbox_empty(ss) {
  for(var i = 0; i < ss.length; i++) {
	   if(ss[i].checked) { return false; }
	 }
  return true;
}

function dropdown_empty(ss){
// Note: ss will need to be fetched via document.getElementById('ss-id-name') for multi-select menus
  for(var i = 0; i < ss.length; i++) {
    if(ss[i].selected) {
      if(ss[i].value.length) { return false; }
    }
  }
  return true;
}

function stripChars(pstrSource){ 
  var m_strOut = new String(pstrSource); 
		// Non-alpha characters
  //m_strOut = m_strOut.replace(/[^0-9]/g, '');
		
		// remove spaces, ( ), -, and .
		m_strOut = m_strOut.replace(/[\-|(|)|\.|\+| ]/g, ''); 

  return m_strOut; 
}
	
function disableForm(formID){
  var element = document.getElementById(formID);
  element.style.display = "none;";
}

// ----------- validation functions ------------------------------------------

function validateDate( strValue ) {
/************************************************
DESCRIPTION: Validates that a string contains only
    valid dates with 2 digit month, 2 digit day,
    4 digit year. Date separator can be ., -, or /.
    Uses combination of regular expressions and
    string parsing to validate date.
    Ex. mm/dd/yyyy or mm-dd-yyyy or mm.dd.yyyy

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.

REMARKS:
   Avoids some of the limitations of the Date.parse()
   method such as the date separator character.
*************************************************/
  var objRegExp = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
 
  //check to see if in correct format
  if(!objRegExp.test(strValue)){
    return false; //doesn't match pattern, bad date
	}
  else{
    var strSeparator = strValue.substring(2,3);
    var arrayDate = strValue.split(strSeparator); 
    //create a lookup for months not equal to Feb.
    var arrayLookup = { '01' : 31,'03' : 31, 
                        '04' : 30,'05' : 31,
                        '06' : 30,'07' : 31,
                        '08' : 31,'09' : 30,
                        '10' : 31,'11' : 30,'12' : 31};
    var intDay = parseInt(arrayDate[1],10); 

    //check if month value and day value agree
    if(arrayLookup[arrayDate[0]] !== null) {
      if(intDay <= arrayLookup[arrayDate[0]] && intDay !== 0){
        return true; //found in lookup table, good date
			}
    }
    
    //check for February (bugfix 20050322)
    //bugfix  for parseInt kevin
    //bugfix  biss year  O.Jp Voutat
    var intMonth = parseInt(arrayDate[0],10);
    if (intMonth == 2) { 
       var intYear = parseInt(arrayDate[2]);
       if (intDay > 0 && intDay < 29) {
           return true;
       }
       else if (intDay == 29) {
         if ((intYear % 4 === 0) && (intYear % 100 !== 0) || 
             (intYear % 400 === 0)) {
              // year div by 4 and ((not div by 100) or div by 400) ->ok
             return true;
         }   
       }
    }
  }  
  return false; //any other values, bad date
}	

function  validateNumeric( strValue ) {
/*****************************************************************
DESCRIPTION: Validates that a string contains only valid numbers.

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
  True if valid, otherwise false.
******************************************************************/
var objRegExp  =  /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;

  //check for numeric characters
  return objRegExp.test(strValue);
}

	
function validateEmail( strValue) {
/************************************************
DESCRIPTION: Validates that a string contains a
  valid email pattern.

 PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.

REMARKS: Accounts for email with country appended
  does not validate that email contains valid URL
  type (.com, .gov, etc.) or valid country suffix.
*************************************************/
//var objRegExp = /(^[a-z]([a-z_\.]*)@([a-z_\.]*)([.][a-z]{3})$)|(^[a-z]([a-z_\.]*)@([a-z_\.]*)(\.[a-z]{3})(\.[a-z]{2})*$)/i;
var objRegExp = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;

  //check for valid email
  return objRegExp.test(strValue);
}

function validateUSPhone( strValue ) {
/************************************************
DESCRIPTION: Validates that a string contains valid
  US phone pattern.
  Ex. (999) 999-9999 or (999)999-9999

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.
*************************************************/
  var objRegExp  = /^\([1-9]\d{2}\)\s?\d{3}\-\d{4}$/;

  //check for valid us phone with or without space between
  //area code
  return objRegExp.test(strValue);
}

function validateZip( strValue ) {
/************************************************
DESCRIPTION: Validates that a string a United
  States zip code in 5 digit format or zip+4
  format. 99999 or 99999-9999

PARAMETERS:
   strValue - String to be tested for validity

RETURNS:
   True if valid, otherwise false.

*************************************************/
var objRegExp  = /(^\d{5}$)|(^\d{5}-\d{4}$)/;

  //check for valid US Zipcode
  return objRegExp.test(strValue);
}

// function to see if date 1 occurs before date 2
function validFromDate(fromDate,toDate){

	// Assuming that the date was in the correct format, this is our separator
 var separator1 = fromDate.charAt(2);
	var arrDate1 = fromDate.split(separator1);

	var checkFromDate = new Date();
	checkFromDate.setFullYear(arrDate1[2],arrDate1[0]-1,arrDate1[1]);
	
 var separator2 = toDate.charAt(2);
	var arrDate2 = toDate.split(separator2);
	
	var checkToDate = new Date();
	checkToDate.setFullYear(arrDate2[2],arrDate2[0]-1,arrDate2[1]);
	
	if (checkToDate > checkFromDate){
	  return true;
	}
	else {
	  return false;
	}
}

function checkContactForm(){
	$('p label').removeClass("form-error-label");
	error = false;
	var error_msg = "";
	
	// required fields
	var first_name = document.contactForm.fname.value;
	var last_name = document.contactForm.lname.value;
	var email = document.contactForm.email.value;
	var security_code = document.contactForm.security_code.value;
	
	if (first_name === ""){
		error_msg = error_msg + "<li>Please enter your <b>First Name</b>.</li>";
		$('#fname-label').addClass("form-error-label");
		error = true;
	}
	
	if (last_name === ""){
		error_msg = error_msg + "<li>Please enter your <b>Last Name</b>.</li>";
		$('#lname-label').addClass("form-error-label");
		error = true;
	}
	
	if ((email === "")||(!validateEmail(email))){
		error_msg = error_msg + "<li>Please enter a valid <b>Email Address</b>.</li>";
		$('#email-label').addClass("form-error-label");
		error = true;
	}
	
	if (security_code === ""){
		error_msg = error_msg + "<li>Please enter the <b>Security Text</b> as seen in the image below.</li>";
		$('#security-code-label').addClass("form-error-label");
		error = true;
	}

	error_msg = "<ul>" + error_msg + "</ul>";
	
	if(!error){
	  $('p label').removeClass("form-error-label");
		$('#form_errors').hide('fast');
		return true;
	}
	else{
		$('#form_errors').show('slow');
		$('#form_error_msg').html(error_msg);
		window.scrollTo(50,70);
		return false;
	}
}

function check_apply_form(){
	$('p label').removeClass("form-error-label");
	error = false;
	var error_msg = "";
	
	// required fields
	var first_name = document.applyForm.fname.value;
	var last_name = document.applyForm.lname.value;
	var email = document.applyForm.email.value;
	
	if (first_name === ""){
		error_msg = error_msg + "<li>Please enter your <b>First Name</b>.</li>";
		$('#fname-label').addClass("form-error-label");
		error = true;
	}
	
	if (last_name === ""){
		error_msg = error_msg + "<li>Please enter your <b>Last Name</b>.</li>";
		$('#lname-label').addClass("form-error-label");
		error = true;
	}
	
	if ((email === "")||(!validateEmail(email))){
		error_msg = error_msg + "<li>Please enter a valid <b>Email Address</b>.</li>";
		$('#email-label').addClass("form-error-label");
		error = true;
	}

	error_msg = "<ul>" + error_msg + "</ul>";
	
	if(!error){
	  $('p label').removeClass("form-error-label");
		$('#form_errors').hide('fast');
		return true;
	}
	else{
		$('#form_errors').show('slow');
		$('#form_error_msg').html(error_msg);
		window.scrollTo(50,70);
		return false;
	}
}

function check_mailing_list(){
	$('p label').removeClass("form-error-label");
	error = false;
	var error_msg = "";
	
	// required fields
	var first_name = document.mailing_list.fname.value;
	var last_name = document.mailing_list.lname.value;
	var email = document.mailing_list.email.value;
	var address1 = document.mailing_list.address1.value;
	var city = document.mailing_list.city.value;
	var state = document.mailing_list.state;
	var zip = document.mailing_list.zip.value;
	var security_code = document.mailing_list.security_code.value;
	
	if (first_name === ""){
		error_msg = error_msg + "<li>Please enter your <b>First Name</b>.</li>";
		$('#fname-label').addClass("form-error-label");
		error = true;
	}
	
	if (last_name === ""){
		error_msg = error_msg + "<li>Please enter your <b>Last Name</b>.</li>";
		$('#lname-label').addClass("form-error-label");
		error = true;
	}
	
	if ((email === "")||(!validateEmail(email))){
		error_msg = error_msg + "<li>Please enter a valid <b>Email Address</b>.</li>";
		$('#email-label').addClass("form-error-label");
		error = true;
	}
	
	if (address1 === ""){
		error_msg = error_msg + "<li>Please enter your <b>Address</b>.</li>";
		$('#address1-label').addClass("form-error-label");
		error = true;
	}
	
	if (city === ""){
		error_msg = error_msg + "<li>Please enter your <b>City</b>.</li>";
		$('#city-label').addClass("form-error-label");
		error = true;
	}
	
	if (dropdown_empty(state)){
		error_msg = error_msg + "<li>Please select your <b>State</b>.</li>";
		$('#state-label').addClass("form-error-label");
		error = true;
	}
	
	if (zip === ""){
		error_msg = error_msg + "<li>Please enter your <b>First Name</b>.</li>";
		$('#zip-label').addClass("form-error-label");
		error = true;
	}
	
	if (security_code === ""){
		error_msg = error_msg + "<li>Please enter the <b>Security Text</b> as seen in the image below.</li>";
		$('#security-code-label').addClass("form-error-label");
		error = true;
	}

	error_msg = "<ul>" + error_msg + "</ul>";
	
	if(!error){
	  $('p label').removeClass("form-error-label");
		$('#form_errors').hide('fast');
		return true;
	}
	else{
		$('#form_errors').show('slow');
		$('#form_error_msg').html(error_msg);
		window.scrollTo(50,70);
		return false;
	}
}

function check_quote_form(){
	$('p label').removeClass("form-error-label");
	error = false;
	var error_msg = "";
	
	// required fields
	var first_name = document.quoteForm.fname.value;
	var last_name = document.quoteForm.lname.value;
	var email = document.quoteForm.email.value;
	var coach_type = document.quoteForm.coachtype;
	var security_code = document.quoteForm.security_code.value;
	
	if (first_name === ""){
		error_msg = error_msg + "<li>Please enter your <b>First Name</b>.</li>";
		$('#fname-label').addClass("form-error-label");
		error = true;
	}
	
	if (last_name === ""){
		error_msg = error_msg + "<li>Please enter your <b>Last Name</b>.</li>";
		$('#lname-label').addClass("form-error-label");
		error = true;
	}
	
	if ((email === "")||(!validateEmail(email))){
		error_msg = error_msg + "<li>Please enter a valid <b>Email Address</b>.</li>";
		$('#email-label').addClass("form-error-label");
		error = true;
	}
	
	var depart = document.quoteForm.departYear.value + "/" + document.quoteForm.departMonth.value + "/" + document.quoteForm.departDay.value;
	var dropoff = document.quoteForm.dropYear.value + "/" + document.quoteForm.dropMonth.value + "/" + document.quoteForm.dropDay.value;
				
	var departDate = validateDate(depart);
	var dropoffDate = validateDate(dropoff);
	if (!departDate){
		error_msg = error_msg + "<li>Invalid <b>Departure Date</b>.</li>";
		$('#departure-date-label').addClass("form-error-label");
		error = true;
	}
	if (!dropoffDate){
		error_msg = error_msg + "<li>Invalid <b>Return Date</b>.</li>";
		$('#dropoff-date-label').addClass("form-error-label");
		error = true;
	}
	if (departDate > dropoffDate){
		error_msg = error_msg + "<li><b>Departure Date</b> cannot occur after <b>Return Date</b>.</li>";
		$('#departure-date-label').addClass("form-error-label");
		$('#dropoff-date-label').addClass("form-error-label");
		error = true;
	}
	
	if (!radioCheck(coach_type)){
		error_msg = error_msg + "<li>Please select a <b>Coach Type</b>.</li>";
		$('#coach-type-label').addClass("form-error-label");
		error = true;
	}
	
	if (security_code === ""){
		error_msg = error_msg + "<li>Please enter the <b>Security Text</b> as seen in the image below.</li>";
		$('#security-code-label').addClass("form-error-label");
		error = true;
	}

	error_msg = "<ul>" + error_msg + "</ul>";
	
	if(!error){
	  $('p label').removeClass("form-error-label");
		$('#form_errors').hide('fast');
		return true;
	}
	else{
		$('#form_errors').show('slow');
		$('#form_error_msg').html(error_msg);
		window.scrollTo(50,70);
		return false;
	}
}


		function checkQuoteForm(theForm)
			{
				
			  // Customize these calls for your form

			  // Start ------->
			  	if (!validRequired(theForm.fname,"First Name"))
					return false;
					
				if (!validRequired(theForm.lname,"Last Name"))
					return false;

				if (!validEmail(theForm.email, "Email", true))
					return false;
					
				if (!checkCoachType(theForm.coachtype))
					return false;
				
			    var depart = theForm.departYear.value + "/" + theForm.departMonth.value + "/" + theForm.departDay.value;
				var dropoff = theForm.dropYear.value + "/" + theForm.dropMonth.value + "/" + theForm.dropDay.value;
				

				departDate = validateDate(depart);
				dropoffDate = validateDate(dropoff)
				if (!departDate)
				{
					alert('Invalid departure date.')
					return false;
				}
				else if (!dropoffDate)
				{
					alert('Invalid dropoff date.')
					return false;
				}
				else if (departDate > dropoffDate)
				{
					alert('Invalid dropoff date.');
					return false;
				}
				else
					return true;

			  // <--------- End

				return true;
			}

			function stripBlanks(fld) 
			{
				var result = "";
				for (i=0; i<fld.length; i++) 
				{
					if (fld.charAt(i) != " " || c > 0) 
					{
						result += fld.charAt(i);

					if (fld.charAt(i) != " ") 
						c = result.length;
					}
				}
				return result.substr(0,c);
			}
			
			var numb = '0123456789';

			function isValid(parm,val) 
			{
				if (parm == "") 
					return true;
				for (i=0; i<parm.length; i++) 
				{
					if (val.indexOf(parm.charAt(i),0) == -1)
						return false;
				}
				return true;
			}

			function isNum(parm) 
			{
				return isValid(parm,numb);
			}
			var mth = new Array(' ','january','february','march','april','may','june','july','august','september','october','november','december');
			var day = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

			function validateDate(fld) 
			{
				var dd, mm, yy;
				var today = new Date;
				var t = new Date;
				fld = stripBlanks(fld);
				if (fld == '') 
					return false;
				
				var d1 = fld.split('\/');
				if (d1.length != 3) 
					d1 = fld.split(' ');
				if (d1.length != 3) 
					return false;
			
				dd = d1[2]; mm = d1[1]; yy = d1[0];
			
				var n = dd.lastIndexOf('st');
				if (n > -1) 
					dd = dd.substr(0,n);
				
				n = dd.lastIndexOf('nd');
				if (n > -1) dd = dd.substr(0,n);
					n = dd.lastIndexOf('rd');
					
				if (n > -1) 
					dd = dd.substr(0,n);
					
				n = dd.lastIndexOf('th');
				if (n > -1) 
					dd = dd.substr(0,n);
					
				n = dd.lastIndexOf(',');
				if (n > -1) 
					dd = dd.substr(0,n);
					
				n = mm.lastIndexOf(',');
				if (n > -1) 
					mm = mm.substr(0,n);
				if (!isNum(dd)) 
					return false;
				if (!isNum(yy)) 
					return false;
				if (!isNum(mm)) 
				{
				  var nn = mm.toLowerCase();
				  for (var i=1; i < 13; i++) 
				  {
				    if (nn == mth[i] || nn == mth[i].substr(0,3)) {mm = i; i = 13;}
				  }
				}
				if (!isNum(mm)) 
					return false;

				dd = parseFloat(dd); 
				mm = parseFloat(mm); 
				yy = parseFloat(yy);
				if (yy < 100) yy += 2000;
				
				if (yy < 1582 || yy > 4881) 
					return false;
					
				if (mm == 2 && (yy%400 == 0 || (yy%4 == 0 && yy%100 != 0))) 
					day[mm-1]++;
					
				if (mm < 1 || mm > 12) 
					return false;
					
				if (dd < 1 || dd > day[mm-1]) 
					return false;
					
				t.setDate(dd); 
				t.setMonth(mm-1); 
				t.setFullYear(yy);

				if (t < today) 
					return false;
				
				return t;
			}


			function validNum(formField,fieldLabel,required)
			{
			  var result = true;

			  if (required && !validRequired(formField,fieldLabel))
				result = false;

			   if (result)
			   {
				 var num = parseInt(formField.value,10);
				 if (isNaN(num))
				 {
				   alert('Please enter a number for the "' + fieldLabel +'" field.');
				  formField.focus();
				  result = false;
				}
			  }

			  return result;
			}

			function validDate(formField,fieldLabel,required)
			{
			  var result = true;

			  if (required && !validRequired(formField,fieldLabel))
				result = false;

			   if (result)
			   {
				 var elems = formField.value.split("/");

				 result = (elems.length == 3); // should be three components

				 if (result)
				 {
				   	var month = parseInt(elems[0],10);
					var day = parseInt(elems[1],10);
				   	var year = parseInt(elems[2],10);
				  	result = !isNaN(month) && (month > 0) && (month < 13) &&
						!isNaN(day) && (day > 0) && (day < 32) &&
						!isNaN(year) && (elems[2].length == 4);
				 }

				  if (!result)
				 {
				   alert('Please select a valid date for the "' + fieldLabel +'" field.');
				  formField.focus();
				}
			  }

			  return result;
			}