/* ----------------------------------------------- *\
	Gaelstorm Software Solutions    gaelstorm.com
	Copyright © 2004-2005     All Rights Reserved

	Notes:	
	Requires Event Handlers to be defined for the input text boxes, 
	as well as being defined for Netscape in the page's onLoad event.

	The following is an example of a text box definition, accepting a name:
	
	<INPUT	id=FirstName name=FirstName
			onFocus="return fnInitialiseField(gnNAME);" 
			onKeyPress="return fnHandleKeyPressEvent(event);" 
			onBlur="return fnHandleBlurEvent(event);" 
			maxLength=50 />
	
	The following is an example of a BSB text box definition, with a mask applied:
	
	<INPUT 	id=BSBNumber name=BSBNumber 
			onFocus="return fnInitialiseField(gnBSB, '###-###');" 
			onKeyPress="return fnHandleKeyPressEvent(event);" 
			onBlur="return fnHandleBlurEvent(event);" 
			maxLength=7 />
			
\* ----------------------------------------------- */

// Define the Field Type Constants that can be used
var gnDEFAULT				= -1;
var gnALPHA_ONLY			= 1;
var gnNUMERIC_ONLY			= 2;
var gnNAME					= 3;
var gnADDRESS				= 4;
var gnEMAIL					= 5;
var gnDATE					= 6;
var gnPASSWORD				= 7;
var gnACCOUNT				= 8;
var gnBSB					= 9;
var gnEXPDATE				= 10;
var gnCURRENCY				= 11;
var gnINTERNATIONAL_PHONE 	= 12;

//----------------------------------------------------------
// Define the current field type set by controls onFocus event
var gnTextFieldType = -1;			
var gsTextMaskPattern = null;	// * - any single character			Eg, "###-###" for a BSB number
								// # - a single digit				    "##-AAA-####" for dd-mmm-yyyy
								// ? - any punctation character
								// A - alphabetical character

// Define the Patterns for Matching certain Characters
var gsALPHA_LOWERCASE_STRING	= "a-z";
var gsALPHA_UPPERCASE_STRING	= "A-Z";
var gsALPHA_STRING				= gsALPHA_UPPERCASE_STRING + gsALPHA_LOWERCASE_STRING;
var gsNUMERIC_STRING			= "0-9";
var gsALPHA_NUMERIC_STRING		= gsALPHA_STRING + gsNUMERIC_STRING;
var gsFOREIGN_LANGUAGE_STRING	= 'é';

function fnTrim(an){var x="";if(an!=null){var ak=/^( *)/;var ap=/( *)$/;x=an.replace(ak,'');x=an.replace(ap,'');}return x;}function emailCheck(af){var aj=1;var w=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;var ai=/^(.+)@(.+)$/;var v="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";var ad="\[^\\s"+v+"\]";var ac="(\"[^\"]*\")";var y=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;var ab=ad+'+';var ao="("+ab+"|"+ac+")";var am=new RegExp("^"+ao+"(\\."+ao+")*$");var aq=new RegExp("^"+ab+"(\\."+ab+")*$");var matchArray=af.match(ai);if(matchArray==null){return false;}var ah=matchArray[1];var s=matchArray[2];for(i=0;i<ah.length;i++){if(ah.charCodeAt(i)>127){return false;}}for(i=0;i<s.length;i++){if(s.charCodeAt(i)>127){return false;}}if(ah.match(am)==null){return false;}var z=s.match(y);if(z!=null){for(var i=1;i<=4;i++){if(z[i]>255){return false;}}return true;}var al=new RegExp("^"+ab+"$");var o=s.split(".");var len=o.length;for(i=0;i<len;i++){if(o[i].search(al)==-1){return false;}}if(aj&&o[o.length-1].length!=2&&o[o.length-1].search(w)==-1){return false;}if(len<2){return false;}return true;}function fnValidateKeyCode(g,n){var k=0;var f=1;var r=2;var h=false;var k=k;var a='';if((g==gnDEFAULT)&&(n>31))h=true;switch(g){case 1:k=r;a="["+gsALPHA_STRING+"]";break;case 2:k=f;a="["+gsNUMERIC_STRING+"]";break;case 3:k=r;a="["+gsALPHA_STRING+" '-"+"]";break;case 4:k=k;a="["+gsALPHA_NUMERIC_STRING+" '\r\n,\.\/-"+"]";break;case 5:k=k;a="["+gsALPHA_NUMERIC_STRING+"-\.@"+"]";break;case 6:k=k;a="["+gsALPHA_NUMERIC_STRING+"-\.\/"+"]";break;case 7:k=f;a="["+gsALPHA_NUMERIC_STRING+"]";break;case 8:k=f;a="["+gsNUMERIC_STRING+"*"+"]";break;case 9:k=f;a="["+gsNUMERIC_STRING+"-"+"]";break;case 10:k=f;a="["+gsNUMERIC_STRING+"/"+"]";break;case 11:k=f;a="["+gsNUMERIC_STRING+"."+"]";break;case 12:k=f;a="["+gsNUMERIC_STRING+" +"+"]";break;}if(h==false){var j=String.fromCharCode(n);var u=new RegExp(a);h=j.search(u)!=-1;}return h;}function fnHandleKeyPressEvent(evt){var n=fnGetKeyCode(evt);if(n==8)return true;if(fnValidateKeyCode(gnTextFieldType,n)){if(gsTextMaskPattern){return fnValidateMask(evt,gsTextMaskPattern);}else{return true;}}else{return false;}}function fnFieldErrors(t,p,g,aa){var b=fnGetElementByName(t);if(!b)return"";var j=fnTrim(b.value);var i=0;if(j.length==0){if(aa){b.focus();b.select();return("'"+p+"' has not been provided");}return"";}while(i<j.length){if(!fnValidateKeyCode(g,j.charCodeAt(i))){b.focus();b.select();return("'"+p+"' contains some problem characters");}i++;}if(g==gnEMAIL){if(!emailCheck(j)){b.focus();b.select();return("'"+p+"' does not seem to be a valid email address");}}return"";}function fnHandleBlurEvent(evt){var b=fnGetSourceField(evt);var j=b.value;var i=0;var h=true;if((j!=null)&&(j!="")){while((i<j.length)&&(h==true)){if(!fnValidateKeyCode(gnTextFieldType,j.charCodeAt(i)))h=false;i++;}if((h==true)&&(gnTextFieldType==gnEMAIL)){if((h=emailCheck(j))==false){alert('The Email address is not valid.');b.focus();b.select();}}else if(h==false){alert('The field contains invalid characters.');b.focus();b.select();}}return h;}function fnInitialiseField(ae){gnTextFieldType=ae;gsTextMaskPattern=null;return true;}function fnInitialiseField(ae,mask){gnTextFieldType=ae;gsTextMaskPattern=mask;return true;}function fnValidateMask(evt,mask){var b=fnGetSourceField(evt);var m=b.value.length;var l=String.fromCharCode(fnGetKeyCode(evt));if(mask.charAt(m)=='*')return true;if(mask.charAt(m)==l)return true;if((mask.charAt(m)=='#')&&isNumeric(l))return true;if((mask.charAt(m)=='A')&&isAlpha(l))return true;if((mask.charAt(m)=='?')&&isPunct(l))return true;if(l.charCodeAt(0)<32)return true;return false;}function fnGetSourceField(e){if(e.srcElement){return e.srcElement;}if(e.target){return e.target;}}function fnGetElementByName(t){if(document.all){return document.all(t);}else if(document.getElementById){return document.getElementsByName(t);}}function fnGetKeyCode(e){if(e.srcElement){return e.keyCode}if(e.target){return e.which}}function isNumeric(c){var ag="0123456789";return(ag.indexOf(c)>-1);}function isAlpha(c){var q=c.charCodeAt(0);return(q>=65&&q<=122);}function isPunct(c){var q=c.charCodeAt(0);return(q>=32&&q<=47);}
