/***** SPECIFIC FORM VALIDATION FUNCTIONS *****/

function validateCartUpdate() {
	var theForm = document.frmMain;

	for (i = 0; i < theForm.elements.length; i++) {
		if (theForm.elements[i].name.indexOf("chkDelete") > 0 && theForm.elements[i].checked)
			return confirm("Are you sure you would like to delete these items from your cart?");
	}

	return true;
}

/***** VALIDATE FORM INPUT FUNCTIONS *****/

/* 
	This series of functions provide common form field validation.  
	You customize the "validateForm" function to make calls to the following 
	functions with your form fields.  If the validation fails, the functions 
	will alert the user with a message and put the text input focus on the field 
	with the error.

    validRequired(formField, fieldLabel) -- checks for a field being empty
	
	validMatching(formField1, fieldLabel1, formField2, formLabel2) -- checks that two fields match
	
    validEmail(formField, fieldLabel, required) -- checks for a correctly 
	formatted email address
	
    validNum(formField, fieldLabel, required) -- checks for a valid number 
	(a string where all the characters are digits)
	
    validInt(formField, fieldLabel, required) -- checks for a number (integer) 
	that can be correctly parsed with the function parseInt
	
    validDate(formField, fieldLabel, required) -- checks for a correctly formatted date 

	The parameters to these functions are defined as:

    formField -- the document reference to your form field (e.g., myform.fieldName)
    fieldLabel -- the user friendly string that you want the error message to refer to your field by
    required -- whether the field is required to be filled in by the user (true/false) 
*/

function isEmailAddr(email)
{
  var result = false;
  var theStr = new String(email);
  var index = theStr.indexOf("@");
  if (index > 0)
  {
    var pindex = theStr.indexOf(".",index);
    if ((pindex > index+1) && (theStr.length > pindex+1))
	result = true;
  }
  return result;
}

function validRequired(formField,fieldLabel)
{
	var result = true;

	if (formField.value == "")
	{
		alert('Please enter a value for the "' + fieldLabel +'" field.');
		formField.focus();
		result = false;
	}
	
	return result;
}

function validMatching(formField1,fieldLabel1,formField2,fieldLabel2)
{
	var result = true;
	
	if (formField1.value != formField2.value)
	{
		alert('The fields for "' + fieldLabel1 +'" and "' + fieldLabel2 +'" do not match.');
		formField1.focus();
		result = false;
	}
	
	return result;
}

function allDigits(str)
{
	return inValidCharSet(str,"0123456789");
}

function inValidCharSet(str,charset)
{
	var result = true;

	// Note: doesn't use regular expressions to avoid early Mac browser bugs	
	for (var i=0;i<str.length;i++)
		if (charset.indexOf(str.substr(i,1))<0)
		{
			result = false;
			break;
		}
	
	return result;
}

function validEmail(formField,fieldLabel,required)
{
	var result = true;
	
	if (required && !validRequired(formField,fieldLabel))
		result = false;

	if (result && ((formField.value.length < 3) || !isEmailAddr(formField.value)) )
	{
		alert("Please enter a complete email address in the form: yourname@yourdomain.com");
		formField.focus();
		result = false;
	}
   
  return result;

}

function validNum(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
  
 	if (result)
 	{
 		if (!allDigits(formField.value))
 		{
 			alert('Please enter a number for the "' + fieldLabel +'" field.');
			formField.focus();		
			result = false;
		}
	} 
	
	return result;
}

function validFloat(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
  
 	if (result)
 	{
 		var num = parseFloat(formField.value);
 		if (isNaN(num))
 		{
 			alert('Please enter a number or decimal for the "' + fieldLabel +'" field.');
			formField.focus();		
			result = false;
		}
	} 
	
	return result;
}

function validInt(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 = allDigits(elems[1]) && (day > 0) && (day < 32) &&
					 allDigits(elems[0]) && (month > 0) && (month < 13) && 
					 allDigits(elems[2]) && ((elems[2].length == 2) || (elems[2].length == 4));
 		}
 		
  		if (!result)
 		{
 			alert('Please enter a date in the format DD/MM/YYYY for the "' + fieldLabel +'" field.');
			formField.focus();		
		}
	} 
	
	return result;
}

/***** END VALIDATE FORM INPUT FUNCTIONS *****/