// validateform.js : v1.6 14/05/2008
var requiredFlag = '<em>*</em>';
var errorMessage = "Please enter a value";
var errorMessage2 = "Please select an option";
var useLabelNames = true;
var errorCount = 0;
var dependentField = null;		// if of form element upon which field validation dependencies are based
var dependentFieldValue = null;		// the value of the dependent form field to check for 
var depval = null;
var dateReformat = "DD/MM/YYYY";	// THE FORMAT THAT VALIDATED DATES SHOULD BE REFORMATTED AS

$(function() {
		$("form").submit(function() {
				$('#submit-message').remove();
				$(':input.required').trigger('blur');
				$(':input.dep-required').trigger('blur');
				
				if($('#pickup_date').val()=="")
				{
				      $('<span></span>')
						.text('Please enter estimated shipping date.')
						.addClass('form-invalid')
						.insertAfter($('#date', this));
							
				}
				
				
				var errors = $('.form-invalid', this).length;
				if (errors){
					// show summary message
					$('#submitbutton', this).addClass('noedit');
					$('<span id="submit-message"></span>')
							.text('Please correct errors above before submitting form')
							.addClass('errormsg')
							.insertAfter($('#submitbutton', this));					
					return false;
				}
			return true;
		});

		// flag corres labels for required form fields
		$('form :input').filter('.required').prev('label').addClass('required').append(requiredFlag);
		// validation event handler
		$('form :input').blur(function() {
			$(this).next('span.form-invalid').remove();// remove any pre-existing messages
			if ($(this).is('.required')&& this.id != 'pickup_date') {
				var label = "";
				if ( ((this.type == "checkbox" || this.type == "radio") && ! this.checked) ||
					this.value == "") {
					var fld = $(this);
					$(this).addClass('errorfld').removeClass('validfld');

					if (useLabelNames) { // shall we use the label names as part of error message ??
						label = ' for '+$(this).prev('label').text();
						label = label.substr(0, label.indexOf(" *"));
					};
					if (this.type == "checkbox" || this.type == "radio" || this.type.substr(0,6) == "select") {
						var msg = errorMessage2;
					}
					else {
						var msg = errorMessage;
					}
					$('<span></span>')
						.text(msg+label)
						.addClass('form-invalid')
						.insertAfter(this);
					return;
				}else{
					$(this).removeClass('errorfld').addClass('validfld');
				}					
			} // end required check
			
			// check for fields which are required provided some dependant field is also present
			if ( $(this).is('.dep-required') ) {
				var label = "";
				var dependent_field_present = false;
				// check for empty mandatory fields
				if ( ((this.type == "checkbox" || this.type == "radio") && ! this.checked) ||
					this.value == "") {
						
					if (dependentField != null ) {
						depval = document.getElementById(dependentField).value;
						if (depval == dependentFieldValue) {
							dependent_field_present = true;
						}
					}	

					if (dependent_field_present) {	// is the field on which this form field is dependent also present/has value ??
						var fld = $(this);
						$(this).addClass('errorfld').removeClass('validfld');

						if (useLabelNames) { // shall we use the label names as part of error message ??
							label = ' for '+$(this).prev('label').text() 
						};
						if (this.type == "checkbox" || this.type == "radio" || this.type == "select") {
							var msg = errorMessage2;
						}
						else {
							var msg = errorMessage;
						}
						$('<span></span>')
							.text(msg+label)
							.addClass('form-invalid')
							.insertAfter(this);
					}
					return;
				}else{
					$(this).removeClass('errorfld').addClass('validfld');
				}
				
			} // end dep-required check
			
			// check for invalid email addresses
			if ( $(this).is('.email') && this.value != "" ) {
				if (!/.+@.+\.[a-zA-Z]{2,4}$/.test(this.value)) {	// properly formed email addr
					var fld = $(this);
					$(this).addClass('errorfld').removeClass('validfld');
					$('<span></span>')
						.text('Invalid email address')
						.addClass('form-invalid')
						.insertAfter(this);
				}else{
					$(this).removeClass('errorfld').addClass('validfld');
				}
			} // end email check
			
			// check for currency fields
			if ( $(this).is('.currency') && this.value != "" ) {
				if (!/^[0-9]+\.?[0-9]{0,2}$/.test(this.value)) {	// looks like currency ?
					var fld = $(this);
					$(this).addClass('errorfld').removeClass('validfld');
					$('<span></span>')
						.text('This is an invalid amount')
						.addClass('form-invalid')
						.insertAfter(this);
				}else{
					$(this).removeClass('errorfld').addClass('validfld');
				}
			} // end currency check
			
			// check for date fields
			if ( $(this).is('.date-dmy') && this.value != "" ) {
				if (isDateValid(this, dateReformat) == false) {
					var fld = $(this);
					$(this).addClass('errorfld').removeClass('validfld');
					$('<span></span>')
						.text('This is an invalid date')
						.addClass('form-invalid')
						.insertAfter(this);
				}else{
					$(this).removeClass('errorfld').addClass('validfld');
				}
			} // end date check
		});
});

function isDateValid(objName, reformat) {
// var strDatestyle = "US"; //United States date style
var strDatestyle = "EU";  //European date style
var strDate;
var strDateArray;
var strDay;
var strMonth;
var strYear;
var intday;
var intMonth;
var intYear;
var booFound = false;
var datefield = objName;
var strSeparatorArray = new Array("-"," ","/",".");
var intElementNr;
var err = 0;

strDate = datefield.value;

if (strDate.length < 1) {
return false;
}
// 55
for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
	if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
		strDateArray = strDate.split(strSeparatorArray[intElementNr]);
		if (strDateArray.length != 3) {
			err = 1;
			return false;
		}
		else {
			strDay = strDateArray[0];
			strMonth = strDateArray[1];
			strYear = strDateArray[2];
		}
		booFound = true;
	   }
}
if (booFound == false) {
    if (strDate.length == 8){
        strDay = strDate.substr(0, 2);
        strMonth = strDate.substr(2, 2);
        strYear = strDate.substr(4);
       }
       else {
	       return false;
       }
    }

if (strYear.length == 2) 
    {
    intYear = parseInt(strYear);
    if (intYear >= 20)
        {
        strYear = '19' + strYear;
        }
    else
        {
        strYear = '20' + strYear;
        }
    }

// US style
if (strDatestyle == "US") {
strTemp = strDay;
strDay = strMonth;
strMonth = strTemp;
}
intday = parseInt(strDay, 10);
if (isNaN(intday)) {
err = 2;
return false;
}
intMonth = parseInt(strMonth, 10);
if (isNaN(intMonth)) {
for (i = 0;i<12;i++) {
if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
intMonth = i+1;
strMonth = strMonthArray[i];
i = 12;
   }
}
if (isNaN(intMonth)) {
err = 3;
return false;
   }
}
intYear = parseInt(strYear, 10);
if (isNaN(intYear)) {
err = 4;
return false;
}
if (intMonth>12 || intMonth<1) {
err = 5;
return false;
}
if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) {
err = 6;
return false;
}
if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
err = 7;
return false;
}
if (intMonth == 2) {
if (intday < 1) {
err = 8;
return false;
}
if (LeapYear(intYear) == true) {
if (intday > 29) {
err = 9;
return false;
}
}
else {
if (intday > 28) {
err = 10;
return false;
}
}
}
var strDay = new String(intday);
var strMonth = new String(intMonth);
strDay = (strDay.length == 1) ? "0" + strDay : strDay;
strMonth = (strMonth.length == 1) ? "0" + intMonth : strMonth;
if (reformat == "DD MMM YYYY") {
    datefield.value = strDay + " " + strMonthArray[intMonth-1] + " " + strYear;
}
else {
if (reformat == "DD/MM/YYYY") {
    datefield.value = strDay + "/" + strMonth + "/" + strYear;
}
else {
if (reformat == "DD/MM/YY") {
    datefield.value = strDay + "/" + strMonth + "/" + strYear;
}
}
}
return true;
}

function LeapYear(intYear) {
if (intYear % 100 == 0) {
if (intYear % 400 == 0) { return true; }
}
else {
if ((intYear % 4) == 0) { return true; }
}
return false;
}
var strMonthArray = new Array(12);
strMonthArray[0] = "Jan";
strMonthArray[1] = "Feb";
strMonthArray[2] = "Mar";
strMonthArray[3] = "Apr";
strMonthArray[4] = "May";
strMonthArray[5] = "Jun";
strMonthArray[6] = "Jul";
strMonthArray[7] = "Aug";
strMonthArray[8] = "Sep";
strMonthArray[9] = "Oct";
strMonthArray[10] = "Nov";
strMonthArray[11] = "Dec";
