/***********************************************************
* Form Validation
************************************************************/
var node_text = 3;	// DOM text node-type
var emptyString = new RegExp(/^\s*$/ );

function trim(str)
{
  return str.replace(/^\s+|\s+$/g, '');
}

function msg(fld, msgtype, messtext, messnumber){
	var dispmessnumber;
	if (emptyString.test(messtext)) 
		dispmessnumber = String.fromCharCode(160);    
	else  
		dispmessnumber = messtext;
	var elem = document.getElementById(fld);
	elem.firstChild.nodeValue = dispmessnumber;
	elem.className=msgtype;
}

var proceed = 2;  

function commonCheck(valfield, infoID)
{
	if (!document.getElementById) 
		return true;  // not available on this browser - leave validation to the server
	var elem = document.getElementById(infoID);
	if (!elem.firstChild) return true;  // not available on this browser 
	if (elem.firstChild.nodeType != node_text) return true;  // infoID is wrong type of node  

	return proceed;
}

function validaterequired(valfield, infoID)
{
  var stat = commonCheck (valfield, infoID);
  if (stat != proceed) return stat;
  
    if (emptyString.test(valfield.value)) {
      msg (infoID, "warning", 'This is a required field', 1);  
      return false;
    }

  msg (infoID, "valid", "*", 3);  
  return true;
}

function validateemail  (valfield, infoID)
{
  var stat = commonCheck (valfield, infoID);
  if (stat != proceed) return stat;

  var tfld = trim(valfield.value);  // value of field with whitespace trimmed off
  var email = new RegExp(/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i);
  if (!email.test(tfld)) {
    msg (infoID, "warning", 'You have entered an invalid e-mail address', 1);
    return false;
  } else {
  	msg (infoID, "valid", "*", 3);
  	return true;
	}
}

function validatenumber (valfield, infoID)
{
	var stat = commonCheck (valfield, infoID);
	if (stat != proceed) return stat;

	var tfld = trim(valfield.value);

	if (emptyString.test(valfield.value)) {
		msg (infoID, "warning", 'This is not a valid number', 1);
		return false
	}

	var numberRE = new RegExp(/^[0-9 ]*$/);
	if (!numberRE.test(tfld)) {
		msg (infoID, "warning", 'This is not a valid number', 1);
		return false;
	}	
	msg (infoID, "valid", "*", 3);
	return true;
}
			
function validateOnSubmit(form) {
	var elem;
	var errs=0;
	
	var infoLinks = getElementsByClassName('required','span', form);
	for (var i=0; i < infoLinks.length; i++){
		//alert(infoLinks[i].id);
		//infoLinks[i].className = '';
		infoLinks[i].firstChild.nodeValue = '*';
	}
	
	var dateLinks = getElementsByClassName('date','input', form);
	for (var i=0; i < dateLinks.length; i++){
		//alert('info_'+dateLinks[i].name);
		if (!validatedate(dateLinks[i], 'info_'+dateLinks[i].name)) errs +=1;
	}

	var numberLinks = getElementsByClassName('number','input', form);
	for (var i=0; i < numberLinks.length; i++){
		//alert('info_'+numberLinks[i].name);
		if (!validatenumber(numberLinks[i], 'info_'+numberLinks[i].name)) errs +=1;
	}

	var emailLinks = getElementsByClassName('email','input', form);
	for (var i=0; i < emailLinks.length; i++){
		//alert('info_'+emailLinks[i].name);
		if (!validateemail(emailLinks[i], 'info_'+emailLinks[i].name)) errs +=1;
	}

	var requireLinks = getElementsByClassName('require','input', form);
	var requireLinks1 = getElementsByClassName('require','textarea', form);
	for (var i=0; i < requireLinks.length; i++){
		//alert(requireLinks[i].id);
		if (!validaterequired(requireLinks[i], 'info_'+requireLinks[i].name)) errs +=1;
	}
	for (var i=0; i < requireLinks1.length; i++){
		//alert('info_'+requireLinks[i].name);
		if (!validaterequired(requireLinks1[i], 'info_'+requireLinks1[i].name)) errs +=1;
	}
	
	if(document.getElementById('agree_terms')){
		if(document.getElementById('agree_terms').checked==true){
			return true;
		} else {
			document.getElementById('info_agree_terms').innerHTML = '* You must agree to the Terms &amp; Conditions to proceed';
			return false;
		}
	}
	return (errs==0);
};

/***********************************************************
* Set up the links in the page with their onblur and onsubmit handlers
************************************************************/  
function preparePage(){	
	var forms = getElementsByClassName('validate','form');
	for (var i=0; i < forms.length; i++){
		forms[i].onsubmit = function(){
			return validateOnSubmit(this);	
		}				
	}

}

/*
  http://muffinresearch.co.uk/archives/2006/04/29/getelementsbyclassname-deluxe-edition/
*/
function getElementsByClassName(strClass, strTag, objContElm) {
  strTag = strTag || "*";
  objContElm = objContElm || document;
  var objColl = objContElm.getElementsByTagName(strTag);
  if (!objColl.length &&  strTag == "*" &&  objContElm.all) objColl = objContElm.all;
  var arr = new Array();
  var delim = strClass.indexOf('|') != -1  ? '|' : ' ';
  var arrClass = strClass.split(delim);
  for (var i = 0, j = objColl.length; i < j; i++) {
    var arrObjClass = objColl[i].className.split(' ');
    if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
    var c = 0;
    comparisonLoop:
    for (var k = 0, l = arrObjClass.length; k < l; k++) {
      for (var m = 0, n = arrClass.length; m < n; m++) {
        if (arrClass[m] == arrObjClass[k]) c++;
        if (( delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {
          arr.push(objColl[i]);
          break comparisonLoop;
        }
      }
    }
  }
  return arr;
}

// To cover IE 5.0's lack of the push method
Array.prototype.push = function(value) {
  this[this.length] = value;
}

//
// addLoadEvent()
// Adds event to window.onload without overwriting currently assigned onload functions.
// Function found at Simon Willison's weblog - http://simon.incutio.com/
//
function addLoadEvent(func)
{	
	var oldonload = window.onload;
	if (typeof window.onload != 'function'){
    	window.onload = func;
	} else {
		window.onload = function(){
		oldonload();
		func();
		}
	}

}



addLoadEvent(preparePage);	// run preparePage onLoad