/*
******************************************************************
*  Form Check, JavaScript Form Validation Library
*  written by M.Neset KABAKLI <contact at neset dot com>
*
*  Please do not hesitate to contact me for comments, suggestions
*  or requests. You can also get more information and download
*  the latest version of this file from wwww.neset.com web site.
*
*  Version	: v1.0.1
*  Date		: 09/08/2003
*  Last Update	: 31/08/2004
******************************************************************
*
*  FormCheck currently supports the following contols:
*	- Null values
*	- Minimum and maximum lengths
*	- Minimum and maximum values (for numbers)
*	- Type controls
*
*  FormCheck currently supports the following input types:
*	- date (mm/dd/yyyyy)
*	- datemysql (yyyy-mm-dd)
*	- email
*	- ipaddress
*	- number
*	- text
*
*/
function securityCheck(input) {
	/*
	  SecurityCheck Function
	  Author: M. Neset KABAKLI <contact at neset dot com>
	  Date	: 09/08/2003
	  Update: 31/08/2004
	*/
	var badchars	= Array('\'','\"','%','\\');
	for(var i=0; i<badchars.length;i++) {
		if(input.indexOf(badchars[i]) != -1)
		  return false;
	}
}

function inputCheck(input,type) {
	/*
	  InputCheck Function
	  Author: M. Neset KABAKLI <contact at neset dot com>
	  Date	: 09/08/2003
	  Update: 31/08/2003
	*/
	var errors = 0;
	var expression;

	switch(type) {
		case 'email':
			expression	= /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
		break;
		case 'text':
			expression	= "";
		break;
		case 'number':
			expression	= "";
		break;
		case 'date':
			expression	= /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
		break;
		case 'datedb':
			expression	= /^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})$/;
		break;
		case 'datemysql':
			expression	= /^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})$/;
		break;
		case 'ipaddress':
			expression	= /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;
		break;
		case 'money':
			expression  = /^\d+([\.]\d\d)?$/;
		break;
		case '':
		break;
	}

	if((errors == 0) && (expression != '')) {
		if(!expression.exec(input))
		  errors++;
	}

	if(errors==0)
		return true;
	else
		return false;
}

function formCheck(cform) {
	/*
	  FormCheck Function
	  Author: M. Neset KABAKLI <contact at neset dot com>
	  Date	: 09/08/2003
	  Update: 31/08/2003
	*/
	if(!cform) {
		alert("Empty form object detected!");
		return false;
	}

	var errors		= 0;
	var message		= "Please correct the following errors: \n";
	var controlmessages	= Array();

	for(i=0;i<cform.elements.length;i++) {
		// Get manual message for this input
		if(cform.elements[i].getAttribute('vmsg'))
		  controlmessages[i] = cform.elements[i].getAttribute('vmsg');
		else
		  controlmessages[i] = "";
		// Get message

		// 1. NULL CONTROL
		if(cform.elements[i].getAttribute('vnull') && cform.elements[i].getAttribute('vnull')=='0') {
			if(cform.elements[i].value) {
				if((cform.elements[i].value == '') || (cform.elements[i].value == ' ')) {
					errors++;
					if(controlmessages[i] != "")
				  	  message +="* "+controlmessages[i]+"\n";
					else
				 	  message +="* Field "+cform.elements[i].name+" cannot be blank.\n";
				}
			} else {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Field "+cform.elements[i].name+" cannot be undefined.\n";
			}
		}
		// END OF NULL CONTROL

		// 2. TYPE CONTROL
		if((cform.elements[i].getAttribute('vtype')) && (cform.elements[i].value)) {
			if(!inputCheck(cform.elements[i].value,cform.elements[i].getAttribute('vtype'))) {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Invalid "+cform.elements[i].getAttribute('vtype')+" format in "+cform.elements[i].name+".\n";
			}
		}
		// END OF TYPE CONTROL

		// 3. LENGTH CONTROL
		if((cform.elements[i].getAttribute('vminlen')) && (cform.elements[i].value)) {
			if(cform.elements[i].value.length < cform.elements[i].getAttribute('vminlen')) {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Length of "+cform.elements[i].name+" cannot be less than "+cform.elements[i].getAttribute('vminlen')+" characters.\n";
			}
		}
		if((cform.elements[i].getAttribute('vmaxlen')) && (cform.elements[i].value)) {
			if(cform.elements[i].value.length > cform.elements[i].getAttribute('vmaxlen')) {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Length of "+cform.elements[i].name+" cannot be more than "+cform.elements[i].getAttribute('vmaxlen')+" characters.\n";
			}
		}
		// END OF LENGTH CONTROL

		// 3. MIN/MAX VALUE CONTROL FOR NUMBERS
		if((cform.elements[i].getAttribute('vmin')) && (cform.elements[i].value)) {
			if(cform.elements[i].value < cform.elements[i].getAttribute('vmin')) {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Value of "+cform.elements[i].name+" cannot be less than "+cform.elements[i].getAttribute('vmin')+".\n";
			}
		}
		if((cform.elements[i].getAttribute('vmax')) && (cform.elements[i].value)) {
			if(cform.elements[i].value > cform.elements[i].getAttribute('vmax')) {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Value of "+cform.elements[i].name+" cannot be less than "+cform.elements[i].getAttribute('vmax')+".\n";
			}
		}

		// compare 2 fields for equality (eg confirm password)
		if((cform.elements[i].getAttribute('vmatch')) && (cform.elements[i].value)) {
			if (cform.elements[i].value != cform[cform.elements[i].getAttribute('vmatch')].value) {
				errors++;
				if(controlmessages[i] != "")
				  message +="* "+controlmessages[i]+"\n";
				else
				  message +="* Value of "+cform.elements[i].name+" does not match "+cform.elements[i].getAttribute('vmatch')+".\n";
			}
		}


		// END OF MIN/MAX VALUE CONTROL
	} // END OF THE FOR LOOP

	if(errors == 0) {
	  return true;
	} else {
	  alert(message);
	  return false;
	}
}

function numbersonly(myfield, e, dec)
{
var key;
var keychar;

if (window.event)
   key = window.event.keyCode;
else if (e)
   key = e.which;
else
   return true;
keychar = String.fromCharCode(key);

// control keys
if ((key==null) || (key==0) || (key==8) ||
    (key==9) || (key==13) || (key==27) )
   return true;

// numbers
else if ((("0123456789").indexOf(keychar) > -1))
   return true;

// decimal point jump
else if (dec && (keychar == "."))
   {
   // myfield.form.elements[dec].focus();
   return true;
   }
else
   return false;
}

function legal() {
 var win = window.open('http://www.brabazonfinancial.com/legal.phtml?popup=popup','legalstuff',
  'scrollbars=yes,resizable=1,width=500,height=600,left=50,top=50');
 if( !win ) { return true; }
}

function checkForm(f) {
if (formCheck(f))
{
if (f.ReadLegalNotice.checked) 
	return true;
else
	alert('You must confirm that you have read the Legal Notice');
}
return false;
}
