// 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 = false;
var errorCount = 0;

$(document).ready(function() {
		$("form").submit(function() {
				$('#submit-message').remove();
				$(':input.required').trigger('blur');
				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
			
			//$(this).next("label").next("span").remove();
			//$(this).parents(".radiolist").next("span.form-invlaid").remove(); 
			
			if ($(this).is('.required')) {
				var label = "";
				if ( ((this.type == "checkbox" || this.type == "radio") && ! this.checked) ||
				this.value == "") {
					
					//checking radio list
					if((this.type == "radio")) {
						
						//$(this).parent(".radiolist").children('span.form-invalid').remove();// remove any pre-existing messages
						
						
						if($(this).parents(".radiolist").length != 0) {
							if($(this).parents("td.radiolist .required:checked").length == 0) {
								$(this).parents("td.radiolist").children(".required").css('color','#930');
								/*$('<span>Invlaid</span>')
								.addClass('form-invalid')
								.insertAfter($(this).parents(".radiolist").children("span:first"));*/ 
							}
						}
						return;
					}
					
					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("")
						.addClass('form-invalid')
						.insertAfter(this);
					return;
				} else {
					$(this).removeClass('errorfld').addClass('validfld');
				}					
			} // end 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') && this.value != "" ) {
				if (isValidDate(this.value) == false) {
					var fld = $(this);
					$(this).addClass('errorfld').removeClass('validfld');
					$('<span></span>')
						.text('')
						.addClass('form-invalid')
						.insertAfter(this);
				}else{
					$(this).removeClass('errorfld').addClass('validfld');
				}
			} // end date check
		});

});

function isValidDate(s) {
  // format yyyy-mm-dd
  var dateFormat = /^\d{1,4}[\.|\/|-]\d{1,2}[\.|\/|-]\d{1,4}$/;
  if (dateFormat.test(s)) {
    // remove any leading zeros from date values
    s = s.replace(/0*(\d*)/gi,"$1");
    var dateArray = s.split(/[\.|\/|-]/);
    // correct month value
    dateArray[1] = dateArray[1]-1;
    // correct year value
    if (dateArray[2].length<4) {
      dateArray[2] = (parseInt(dateArray[2]) < 50) ? 2000 + parseInt(dateArray[2]) : 1900 + parseInt(dateArray[2]);
    }
    var testDate = new Date(dateArray[2], dateArray[1], dateArray[0]);
    if (testDate.getDate()!=dateArray[0] || testDate.getMonth()!=dateArray[1] || testDate.getFullYear()!=dateArray[2]) {
      return false;
    } else {
      return true;
    }
  } else {
    return false;
  }
}


