/*****************************************************************************************************
* Easy Javascript Validation by Daniel Boorn
* Copyright 2006, All Rights reserved by Daniel Boorn
* Contact: daniel.boorn@gmail.com - wwww.dboorn.com
* In any form element add the following form attributes to validate
* required ="yes"
* validate = { "int", "float", "text", "email" }
* message = "Error Message for Element"
* Example: <input type="text" validate="int" message="Please enter valid zip code" name="zip">
*
* It is required that you add the following to any submit button
*     onClick="validate(this.form); return document.formSubmit;"
******************************************************************************************************/

	function validate(form){
		
		var error = "";
		//for each form element
		for(var i=0; i<form.length; i++){
			var element = form[i];
			
			element.style.border = "1px outset #cfcfcf";
			//if required
			if(element.getAttribute("required") == "yes"){
				//if form element if empty
				if(!valid(element.value,element.getAttribute("validate"),element)){
					error += element.getAttribute("message") + "\r\n";
								element.style.border = "1px solid #bb0000";
				}

			}
			else if(element.getAttribute("validate") != ""){
				//if validation is need by not required
				if(element.value != ""){
					if(!valid(element.value,element.getAttribute("validate"),element)){
						error += element.getAttribute("message") + "\r\n";
						element.style.border = "1px solid #cc0000";}
				}
			}
		}
		if(error != ""){
			alert(error);
			document.formSubmit = false;
		}
		else
			document.formSubmit = true;
	}	
	
	function valid(value,type,element){
		if(value == "")
			return false;
			
		switch(type){
			case "int":
				if(isNaN(parseInt(value)))
					return false;
				break;
			case "float":
				if(isNaN(parseFloat(value)))
					return false;
				break;
			case "email":
					if(!checkEmail(value))	return false;
					break;
			case "checked":
				if(!element.checked)
					return false;
				break;
			case "dob"	:
					return checkBirthday(element);
				break;
			default://string
				break;
		}
		return true;
	}	

    function check_length(maxchars,message,div_id)
    {
    	var len = message.value.length;

        if(len > maxchars){
        	message.value = message.value.substr(0,maxchars);
        	len = maxchars;
        }

        document.getElementById(div_id).innerHTML = maxchars - len;
    }


/* Extension to Date object by glenngv 
 * (http://www.codingforums.com/member.p...poster&t=62011)
 */
Date.prototype.getDiff = function(date, interval){
   
  if (typeof date == "String"){
  date = new Date(date);
  }
  if (isNaN(date) || !(date instanceof Date)){
     return NaN; 
  }
  if (typeof interval == "undefined") interval = "ms"; 
  var diff = this - date; 
  switch(interval.toLowerCase()){
    case "s": 
      diff = diff/1000; break;
    case "n": 
      diff = diff/(1000*60); break;
    case "h": 
      diff = diff/(1000*60*60); break;
    case "d": 
      diff = diff/(1000*60*60*24); break;
    case "m": 
      diff = diff/(1000*60*60*24*30); break;
    case "y": 
      diff = diff/(1000*60*60*24*365); break;
    default:
      ; 
  }
  return Math.floor(diff);
}

function checkBirthday(obj) {
	
	if( !/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/.test(obj.value) ) {
		return false; 
		//alert( "Invalid date supplied - must be format DD/MM/YYYY" );
		//obj.focus();
		//return;
	}
	
	var d = new Date();
	var d2 = new Date(RegExp.$3, RegExp.$2, RegExp.$1);
	
	var diff = d.getDiff(d2, "y")
	if( isNaN(diff) ) {
		//alert( "Invalid date supplied" );
		return false;
	}
	else if( diff < 16 ) {
		//alert( "Difference less than 2 years" );
		return false;
	}
	return true; 
}

function checkEmail(email) {
	
var AtSym    = email.indexOf('@')
var Period   = email.lastIndexOf('.')
var Space    = email.indexOf(' ')
var Length   = email.length - 1   // Array is from 0 to length - 1

if ((AtSym < 1) ||                     // '@' cannot be in first position
    (Period <= AtSym+1) ||             // Must be atleast one valid char btwn '@' and '.'
    (Period == Length ) ||             // Must be atleast one valid char after '.'
    (Space  != -1))                    // No empty spaces permitted
   {  
	return false;
  }
  return true;
}	

String.prototype.trim=function (s) {
	s = this != window? this : s;
	return s.replace(/^\s+/g, '').replace(/\s+$/g, '');
}
