// JavaScript Document

function login(){
	var password=$('password').value;
	var username=$('username').value;
	var today=new Date();
	var d=Math.round(today.getTime()/360000)*360;
	var passhash=hex_sha1(d+" "+hex_md5(password));
	var varhash=new Hash();
	varhash.set('email',username);
	varhash.set('passhash',passhash);
	varhash.set('dateAcc',360);
	varhash.set('dateAct',d);
	new Ajax.Request("/panel/ajax/login_components.php?method=login", {
		  method: 'post',
                  parameters:varhash,
		  onSuccess: function(t) {
			  if(callback_uri == undefined || callback_uri=='std')
				  window.location=t.responseText;
			  else window.location=callback_uri;
		  },onFailure:function (t){
			  switch(t.responseText){
				  case 'invalid':
				  	alert("We could not log you in.\nPlease check/re-enter your username and password, and ensure that your system time is set correctly.");
				  break;
				  case 'insufficient':
				  	alert("We could not log you in.\nPlease check that you have entered a valid username and password.");
				  break;
				  case 'inactive':
				  	alert("We could not log you in.\nYour account has not yet been activated. Please check the email you received at signup.");
				  break;
				  case 'notcp':
				  	alert("We could not log you in.\nYour TinyGrab Free account is not for use with our control panel. Taking you to our free-cp.");
					window.location="./free";
				  break;
				  case 'legacy':
				  	alert("We could not log you in.\nYour account has not yet been TinyGrab 2.0 -enabled. Please use the current control panel.");
				  break;
				  default:
				  	alert("We could not log you in.\nAn unknown error has occurred. Please try again."+t.responseText);
					window.location=window.location;
				  break;
			  }
		  }
		});
}

var trans_duration=0.5;
var debounce=0;
var step=1;
function nextStep(){
	eval("s_step"+step+"(step"+(step+1)+");");
}
function step1(){
	step=1;
	if(debounce!=1){
		debounce=1;
	//	Effect.Fade('step1',{duration:trans_duration});
		Effect.Fade('step2',{duration:trans_duration});
		Effect.Fade('step3',{duration:trans_duration,afterFinish:function(){Effect.Appear('step1',{duration:trans_duration,afterFinish:function(){$('fullname').focus();$('fullname').select();}});debounce=0;}});
	}
}
function s_step1(c){
	var e2="Please rectify the following errors: \n";
	var errors=e2;
	if(!checkEmail($('email'))||(!requireValue($('email')))) errors+=" - Please enter a valid email address.\n";
	if((!requireLength($('fullname'),6,100))||(!requireValue($('fullname')))) errors+=" - Please enter your full name.\n";
	if(errors==e2) c();
	else alert(errors);
}

function step2(){
	step=2;
	if(debounce!=1){
		debounce=1;
		Effect.Fade('step1',{duration:trans_duration});
	//	Effect.Fade('step3',{duration:trans_duration});
		Effect.Fade('step3',{duration:trans_duration,afterFinish:function(){Effect.Appear('step2',{duration:trans_duration,afterFinish:function(){$('password').focus();$('password').select();}});$('password').focus();$('password').select();debounce=0;}});
	}
}
function s_step2(c){
	var e2="Please rectify the following errors: \n";
	var errors=e2;
	if((!requireLength($('password'),6,50))||(!requireValue($('password')))) errors+=" - Please enter a password of between 6 and 50 characters.\n";
	if(!requireConfirmation($('confirm'),$('password'))||(!requireValue($('confirm')))) errors+=" - Please ensure that your two passwords match.\n";
	if(errors==e2) c();
	else alert(errors);
}
function s_step2_silent(c){
	var e2="Please rectify the following errors: \n";
	var errors=e2;
	if((!requireLength($('password'),6,50))||(!requireValue($('password')))) errors+=" - Please enter a password of between 6 and 50 characters.\n";
	if(!requireConfirmation($('confirm'),$('password'))||(!requireValue($('confirm')))) errors+=" - Please ensure that your two passwords match.\n";
	if(errors==e2) c();
}

function step3(){
	step=3;
	if(debounce!=1){
		debounce=1;
		$('loginform1').request({
			  onSuccess: function(r){
					Effect.Fade('step1',{duration:trans_duration});
					Effect.Fade('step2',{duration:trans_duration,afterFinish:function(){Effect.Appear('step3',{duration:trans_duration});debounce=0;}});
			  }, 
			  onFailure: function(t){
				  alert(t.responseText);
				  debounce=0;
			  }
		})
	}
}

function step4(){
	step=4;
	if(debounce!=1){
		debounce=1;
		Effect.Fade('step3',{duration:trans_duration,afterFinish:function(){Effect.Appear('step4',{duration:trans_duration});debounce=0;}});
	}
}

function s_step4(c){
	window.location="./panel/signup?laststep=1&acctype="+getradiovalue($('loginform1').acctype);
}
function step5(){
}

function beta_step0(){
	Effect.Fade('beta_step1',{duration:0.5});
	Effect.Fade('beta_step2',{duration:0.5});
	Effect.Appear('beta_step0',{delay:0.5});
}

function beta_step1(){
	Effect.Fade('beta_step0',{duration:0.5});
	Effect.Fade('beta_step2',{duration:0.5});
	Effect.Appear('beta_step1',{delay:0.5});
}
function beta_step1_(){
	Effect.Fade('beta_step0',{duration:0.5});
	Effect.Fade('beta_step2',{duration:0.5});
	Effect.Appear('beta_step1',{delay:1.5,duration:0.5});
}
function shrinklogo(){
	new Effect.Morph('l_header',{style:'height:126px;',delay:1,duration:0.5});
}
function beta_s_step1(c){
	var e2="Please rectify the following errors: \n";
	var errors=e2;
	if(!checkEmail($('email'))||(!requireValue($('email')))) errors+=" - Please enter a valid email address.\n";
	if((!requireLength($('fullname'),6,100))||(!requireValue($('fullname')))) errors+=" - Please enter your full name.\n";
	if(errors==e2) c();
	else alert(errors);
}
function beta_step2(){
	if(debounce!=1){
		debounce=1;
		$('loginform1').request({
			  onSuccess: function(r){
					beta_c_step2();
			  }, 
			  onFailure: function(t){
				  alert(t.responseText);
				  debounce=0;
			  }
		})
	}
}
function beta_c_step2(){
	Effect.Fade('beta_step1',{duration:0.5});
	Effect.Appear('beta_step2', {delay:0.5,duration:0.5});
}
function beta_failed(){
	Effect.Fade('beta_step1',{duration:0.5});
	Effect.Fade('beta_step2',{duration:0.5});
	Effect.Appear('beta_failed', {delay:1.5,duration:0.5});
}
function beta_success(){
	Effect.Fade('beta_step1',{duration:0.5});
	Effect.Fade('beta_step2',{duration:0.5});
	Effect.Appear('beta_success', {delay:1.5,duration:0.5});
}

function usecase_comp_step0(){
	Effect.Fade('usecase_comp_step1',{duration:0.5});
	Effect.Fade('usecase_comp_step2',{duration:0.5});
	Effect.Appear('usecase_comp_step0',{delay:0.5});
}

function usecase_comp_step1(){
	Effect.Fade('usecase_comp_step0',{duration:0.5});
	Effect.Fade('usecase_comp_step2',{duration:0.5});
	Effect.Appear('usecase_comp_step1',{delay:0.5});
}
function usecase_comp_step1_(){
	Effect.Fade('usecase_comp_step0',{duration:0.5});
	Effect.Fade('usecase_comp_step2',{duration:0.5});
	Effect.Appear('usecase_comp_step1',{delay:1.5,duration:0.5});
}
function shrinklogo(){
	new Effect.Morph('l_header',{style:'height:126px;',delay:1,duration:0.5});
}
function usecase_comp_s_step1(c){
	var e2="Please rectify the following errors: \n";
	var errors=e2;
	if(!checkEmail($('email'))||(!requireValue($('email')))) errors+=" - Please enter a valid email address.\n";
	if(errors==e2) c();
	else alert(errors);
}
function usecase_comp_step2(){
	Effect.Fade('usecase_comp_step1',{duration:0.5});
	Effect.Appear('usecase_comp_step2', {delay:0.5,duration:0.5});
}
function usecase_comp_c_step2(){
	if(debounce!=1){
		debounce=1;
		$('loginform1').request({
			  onSuccess: function(r){
					usecase_comp_success();
			  }, 
			  onFailure: function(t){
				  alert(t.responseText);
				  debounce=0;
			  }
		})
	}
}
function usecase_comp_failed(){
	Effect.Fade('usecase_comp_step1',{duration:0.5});
	Effect.Fade('usecase_comp_step2',{duration:0.5});
	Effect.Appear('usecase_comp_failed', {delay:1.5,duration:0.5});
}
function usecase_comp_success(){
	Effect.Fade('usecase_comp_step1',{duration:0.5});
	Effect.Fade('usecase_comp_step2',{duration:0.5});
	Effect.Appear('usecase_comp_success', {delay:1.5,duration:0.5});
}

function getradiovalue(r){for (var i=0; i < r.length; i++)  {  if (r[i].checked) { return r[i].value; } }}

/////////////////////////// MD5 ////////////////////////////////////////

/*
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */
var hexcase=0;function hex_md5(a){return rstr2hex(rstr_md5(str2rstr_utf8(a)))}function hex_hmac_md5(a,b){return rstr2hex(rstr_hmac_md5(str2rstr_utf8(a),str2rstr_utf8(b)))}function md5_vm_test(){return hex_md5("abc").toLowerCase()=="900150983cd24fb0d6963f7d28e17f72"}function rstr_md5(a){return binl2rstr(binl_md5(rstr2binl(a),a.length*8))}function rstr_hmac_md5(c,f){var e=rstr2binl(c);if(e.length>16){e=binl_md5(e,c.length*8)}var a=Array(16),d=Array(16);for(var b=0;b<16;b++){a[b]=e[b]^909522486;d[b]=e[b]^1549556828}var g=binl_md5(a.concat(rstr2binl(f)),512+f.length*8);return binl2rstr(binl_md5(d.concat(g),512+128))}function rstr2hex(c){try{hexcase}catch(g){hexcase=0}var f=hexcase?"0123456789ABCDEF":"0123456789abcdef";var b="";var a;for(var d=0;d<c.length;d++){a=c.charCodeAt(d);b+=f.charAt((a>>>4)&15)+f.charAt(a&15)}return b}function str2rstr_utf8(c){var b="";var d=-1;var a,e;while(++d<c.length){a=c.charCodeAt(d);e=d+1<c.length?c.charCodeAt(d+1):0;if(55296<=a&&a<=56319&&56320<=e&&e<=57343){a=65536+((a&1023)<<10)+(e&1023);d++}if(a<=127){b+=String.fromCharCode(a)}else{if(a<=2047){b+=String.fromCharCode(192|((a>>>6)&31),128|(a&63))}else{if(a<=65535){b+=String.fromCharCode(224|((a>>>12)&15),128|((a>>>6)&63),128|(a&63))}else{if(a<=2097151){b+=String.fromCharCode(240|((a>>>18)&7),128|((a>>>12)&63),128|((a>>>6)&63),128|(a&63))}}}}}return b}function rstr2binl(b){var a=Array(b.length>>2);for(var c=0;c<a.length;c++){a[c]=0}for(var c=0;c<b.length*8;c+=8){a[c>>5]|=(b.charCodeAt(c/8)&255)<<(c%32)}return a}function binl2rstr(b){var a="";for(var c=0;c<b.length*32;c+=8){a+=String.fromCharCode((b[c>>5]>>>(c%32))&255)}return a}function binl_md5(p,k){p[k>>5]|=128<<((k)%32);p[(((k+64)>>>9)<<4)+14]=k;var o=1732584193;var n=-271733879;var m=-1732584194;var l=271733878;for(var g=0;g<p.length;g+=16){var j=o;var h=n;var f=m;var e=l;o=md5_ff(o,n,m,l,p[g+0],7,-680876936);l=md5_ff(l,o,n,m,p[g+1],12,-389564586);m=md5_ff(m,l,o,n,p[g+2],17,606105819);n=md5_ff(n,m,l,o,p[g+3],22,-1044525330);o=md5_ff(o,n,m,l,p[g+4],7,-176418897);l=md5_ff(l,o,n,m,p[g+5],12,1200080426);m=md5_ff(m,l,o,n,p[g+6],17,-1473231341);n=md5_ff(n,m,l,o,p[g+7],22,-45705983);o=md5_ff(o,n,m,l,p[g+8],7,1770035416);l=md5_ff(l,o,n,m,p[g+9],12,-1958414417);m=md5_ff(m,l,o,n,p[g+10],17,-42063);n=md5_ff(n,m,l,o,p[g+11],22,-1990404162);o=md5_ff(o,n,m,l,p[g+12],7,1804603682);l=md5_ff(l,o,n,m,p[g+13],12,-40341101);m=md5_ff(m,l,o,n,p[g+14],17,-1502002290);n=md5_ff(n,m,l,o,p[g+15],22,1236535329);o=md5_gg(o,n,m,l,p[g+1],5,-165796510);l=md5_gg(l,o,n,m,p[g+6],9,-1069501632);m=md5_gg(m,l,o,n,p[g+11],14,643717713);n=md5_gg(n,m,l,o,p[g+0],20,-373897302);o=md5_gg(o,n,m,l,p[g+5],5,-701558691);l=md5_gg(l,o,n,m,p[g+10],9,38016083);m=md5_gg(m,l,o,n,p[g+15],14,-660478335);n=md5_gg(n,m,l,o,p[g+4],20,-405537848);o=md5_gg(o,n,m,l,p[g+9],5,568446438);l=md5_gg(l,o,n,m,p[g+14],9,-1019803690);m=md5_gg(m,l,o,n,p[g+3],14,-187363961);n=md5_gg(n,m,l,o,p[g+8],20,1163531501);o=md5_gg(o,n,m,l,p[g+13],5,-1444681467);l=md5_gg(l,o,n,m,p[g+2],9,-51403784);m=md5_gg(m,l,o,n,p[g+7],14,1735328473);n=md5_gg(n,m,l,o,p[g+12],20,-1926607734);o=md5_hh(o,n,m,l,p[g+5],4,-378558);l=md5_hh(l,o,n,m,p[g+8],11,-2022574463);m=md5_hh(m,l,o,n,p[g+11],16,1839030562);n=md5_hh(n,m,l,o,p[g+14],23,-35309556);o=md5_hh(o,n,m,l,p[g+1],4,-1530992060);l=md5_hh(l,o,n,m,p[g+4],11,1272893353);m=md5_hh(m,l,o,n,p[g+7],16,-155497632);n=md5_hh(n,m,l,o,p[g+10],23,-1094730640);o=md5_hh(o,n,m,l,p[g+13],4,681279174);l=md5_hh(l,o,n,m,p[g+0],11,-358537222);m=md5_hh(m,l,o,n,p[g+3],16,-722521979);n=md5_hh(n,m,l,o,p[g+6],23,76029189);o=md5_hh(o,n,m,l,p[g+9],4,-640364487);l=md5_hh(l,o,n,m,p[g+12],11,-421815835);m=md5_hh(m,l,o,n,p[g+15],16,530742520);n=md5_hh(n,m,l,o,p[g+2],23,-995338651);o=md5_ii(o,n,m,l,p[g+0],6,-198630844);l=md5_ii(l,o,n,m,p[g+7],10,1126891415);m=md5_ii(m,l,o,n,p[g+14],15,-1416354905);n=md5_ii(n,m,l,o,p[g+5],21,-57434055);o=md5_ii(o,n,m,l,p[g+12],6,1700485571);l=md5_ii(l,o,n,m,p[g+3],10,-1894986606);m=md5_ii(m,l,o,n,p[g+10],15,-1051523);n=md5_ii(n,m,l,o,p[g+1],21,-2054922799);o=md5_ii(o,n,m,l,p[g+8],6,1873313359);l=md5_ii(l,o,n,m,p[g+15],10,-30611744);m=md5_ii(m,l,o,n,p[g+6],15,-1560198380);n=md5_ii(n,m,l,o,p[g+13],21,1309151649);o=md5_ii(o,n,m,l,p[g+4],6,-145523070);l=md5_ii(l,o,n,m,p[g+11],10,-1120210379);m=md5_ii(m,l,o,n,p[g+2],15,718787259);n=md5_ii(n,m,l,o,p[g+9],21,-343485551);o=safe_add(o,j);n=safe_add(n,h);m=safe_add(m,f);l=safe_add(l,e)}return Array(o,n,m,l)}function md5_cmn(h,e,d,c,g,f){return safe_add(bit_rol(safe_add(safe_add(e,h),safe_add(c,f)),g),d)}function md5_ff(g,f,k,j,e,i,h){return md5_cmn((f&k)|((~f)&j),g,f,e,i,h)}function md5_gg(g,f,k,j,e,i,h){return md5_cmn((f&j)|(k&(~j)),g,f,e,i,h)}function md5_hh(g,f,k,j,e,i,h){return md5_cmn(f^k^j,g,f,e,i,h)}function md5_ii(g,f,k,j,e,i,h){return md5_cmn(k^(f|(~j)),g,f,e,i,h)}function safe_add(a,d){var c=(a&65535)+(d&65535);var b=(a>>16)+(d>>16)+(c>>16);return(b<<16)|(c&65535)}function bit_rol(a,b){return(a<<b)|(a>>>(32-b))};

/*
 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
 * in FIPS 180-1
 * Version 2.2 Copyright Paul Johnston 2000 - 2009.
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for details.
 */
var hexcase=0;var b64pad="";function hex_sha1(a){return rstr2hex(rstr_sha1(str2rstr_utf8(a)))}function hex_hmac_sha1(a,b){return rstr2hex(rstr_hmac_sha1(str2rstr_utf8(a),str2rstr_utf8(b)))}function sha1_vm_test(){return hex_sha1("abc").toLowerCase()=="a9993e364706816aba3e25717850c26c9cd0d89d"}function rstr_sha1(a){return binb2rstr(binb_sha1(rstr2binb(a),a.length*8))}function rstr_hmac_sha1(c,f){var e=rstr2binb(c);if(e.length>16){e=binb_sha1(e,c.length*8)}var a=Array(16),d=Array(16);for(var b=0;b<16;b++){a[b]=e[b]^909522486;d[b]=e[b]^1549556828}var g=binb_sha1(a.concat(rstr2binb(f)),512+f.length*8);return binb2rstr(binb_sha1(d.concat(g),512+160))}function rstr2hex(c){try{hexcase}catch(g){hexcase=0}var f=hexcase?"0123456789ABCDEF":"0123456789abcdef";var b="";var a;for(var d=0;d<c.length;d++){a=c.charCodeAt(d);b+=f.charAt((a>>>4)&15)+f.charAt(a&15)}return b}function str2rstr_utf8(c){var b="";var d=-1;var a,e;while(++d<c.length){a=c.charCodeAt(d);e=d+1<c.length?c.charCodeAt(d+1):0;if(55296<=a&&a<=56319&&56320<=e&&e<=57343){a=65536+((a&1023)<<10)+(e&1023);d++}if(a<=127){b+=String.fromCharCode(a)}else{if(a<=2047){b+=String.fromCharCode(192|((a>>>6)&31),128|(a&63))}else{if(a<=65535){b+=String.fromCharCode(224|((a>>>12)&15),128|((a>>>6)&63),128|(a&63))}else{if(a<=2097151){b+=String.fromCharCode(240|((a>>>18)&7),128|((a>>>12)&63),128|((a>>>6)&63),128|(a&63))}}}}}return b}function rstr2binb(b){var a=Array(b.length>>2);for(var c=0;c<a.length;c++){a[c]=0}for(var c=0;c<b.length*8;c+=8){a[c>>5]|=(b.charCodeAt(c/8)&255)<<(24-c%32)}return a}function binb2rstr(b){var a="";for(var c=0;c<b.length*32;c+=8){a+=String.fromCharCode((b[c>>5]>>>(24-c%32))&255)}return a}function binb_sha1(v,o){v[o>>5]|=128<<(24-o%32);v[((o+64>>9)<<4)+15]=o;var y=Array(80);var u=1732584193;var s=-271733879;var r=-1732584194;var q=271733878;var p=-1009589776;for(var l=0;l<v.length;l+=16){var n=u;var m=s;var k=r;var h=q;var f=p;for(var g=0;g<80;g++){if(g<16){y[g]=v[l+g]}else{y[g]=bit_rol(y[g-3]^y[g-8]^y[g-14]^y[g-16],1)}var z=safe_add(safe_add(bit_rol(u,5),sha1_ft(g,s,r,q)),safe_add(safe_add(p,y[g]),sha1_kt(g)));p=q;q=r;r=bit_rol(s,30);s=u;u=z}u=safe_add(u,n);s=safe_add(s,m);r=safe_add(r,k);q=safe_add(q,h);p=safe_add(p,f)}return Array(u,s,r,q,p)}function sha1_ft(e,a,g,f){if(e<20){return(a&g)|((~a)&f)}if(e<40){return a^g^f}if(e<60){return(a&g)|(a&f)|(g&f)}return a^g^f}function sha1_kt(a){return(a<20)?1518500249:(a<40)?1859775393:(a<60)?-1894007588:-899497514}function safe_add(a,d){var c=(a&65535)+(d&65535);var b=(a>>16)+(d>>16)+(c>>16);return(b<<16)|(c&65535)}function bit_rol(a,b){return(a<<b)|(a>>>(32-b))};

// validate.js 1.991
// a generic form validator 
// by Brian Lalonde http://webcoder.info/downloads/
// Slightly modified by the one and only Ben Balzarini :-)
// This work is licensed under the Creative Commons Attribution-Share Alike 3.0 License. 
// To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ 
// or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.

function formFocus(frm)
{ // convenient way to start the form onLoad
	if(!document.forms.length) return;
	var els= ( frm || document.forms[0] ).elements;
	for(var i= 0; i < els.length; i++)
		if(els[i].type != 'hidden') { try { els[i].focus(); return; } catch(e){} }
}

function formChanged(frm)
{ // determine whether any form fields have changed
	if(!document.forms.length) return;
	var els= ( frm || document.forms[0] ).elements;
	for(var i= 0; i < els.length; i++)
		switch(els[i].type)
		{
			case 'text': 
			case 'textarea': 
			case 'password': 
			case 'hidden':
			case 'file':
				if(els[i].defaultValue!=els[i].value)
				{ status= 'The '+fieldname(els[i])+' field has changed.'; return true; } 
				break;
			case 'checkbox':
				if(els[i].defaultChecked!=els[i].checked)
				{ status= 'The '+fieldname(els[i])+' checkbox has changed.'; return true; }
				break;
			case 'select-one':
				for(var j= 1; j < els[i].options.length; j++)
					if(els[i].options[j].defaultSelected!=els[i].options[j].selected)
					{ status= 'The '+fieldname(els[i])+' selection has changed.'; return true; }
				break;
			case 'select-multiple':
				for(var j= 0; j < els[i].options.length; j++)
					if(els[i].options[j].defaultSelected!=els[i].options[j].selected)
					{ status= 'The '+fieldname(els[i])+' selections have changed.'; return true; }
				break;
			case 'radio':
				if(els[i].length)
					for(var j= 0; j < els[i].length; j++)
						if(els[i][j].defaultChecked!=els[i][j].checked)
						{ status= 'The '+fieldname(els[i])+' choice has changed.'; return true; }
				break;
		}
	return false;
}

function fieldname(fld)
{ // get the field label text or name
	if(fld.id && document.getElementsByTagName)
	{
		for(var i= 0, lbl= document.getElementsByTagName('LABEL'); i < lbl.length; i++)
			if(lbl[i].htmlFor==fld.id) return lbl[i].nodeValue||lbl[i].textContent||lbl[i].innerText;
		for(var i= 0, lbl= document.getElementsByTagName('label'); i < lbl.length; i++)
			if(lbl[i].htmlFor==fld.id) return lbl[i].nodeValue||lbl[i].textContent||lbl[i].innerText;
	}
	return fld.name||fld.type;
}

function requireValue(fld)
{ // disallow a blank field
	if(fld.disabled) return true;
	if(!(fld.offsetWidth == undefined || fld.offsetWidth > 0)) return true;
	if(!fld.value.length)
	{ status= 'The '+fieldname(fld)+' field cannot be left blank.'; return false; }
	return true;
}

function requireChecked(fld)
{ // require a checkbox to be checked
	if(fld.disabled) return true;
	if(!fld.checked)
	{ status= 'The '+fieldname(fld)+' checkbox must be checked.'; return false; }
	return true;
}

function requireConfirmation(fld,confirmfld)
{ // require fields to match
	if(fld.disabled) return true;
	if(fld.value != confirmfld.value)
	{ status= 'The '+fieldname(fld)+' field does not match the '+fieldname(confirmfld)+' field.'; return false; }
	return true;
}

function requireRadio(radios)
{ // require at least one radio in this group to be checked
	if(!radios.length) return true; // invalid parameter
	var visible= false, enabled= false;
	for(var i= 0; i < radios.length; i++)
	{
		if(!enabled) enabled= !radios[i].disabled;
		if(radios[i].checked) return true;
		else if(typeof(radios[i].offsetWidth) == 'undefined' || radios[i].offsetWidth > 0) visible= true;
	}
	if(!visible||!enabled) return true; // no visible/enabled options in this group
	status= 'You must select one of the '+radios[0].name+' options.';
	return false;
}

function requireLength(fld,min,max)
{ // set minimum and/or maximum field lengths
	if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
	var len= fld.value.length;
	if(min > -1 && len < min)
	{ status= 'The '+fieldname(fld)+' field must be at least '+min+
		' characters long; it is currently '+len+' characters long.'; return false; }
	if(max > -1 && len > max)
	{ status= 'The '+fieldname(fld)+' field must be no more than '+max+
		' characters long; it is currently '+len+' characters long.'; return false; }
	return true;
}

function dependants(enabled,elements)
{ // convenience function to enable/disable dependant fields, passed in as an array 
	if(!elements.length) return true;
	for(var i= 0; i < elements.length; i++)
		elements[i].disabled= !enabled;
}

function allowChars(fld,chars)
{ // provide a string of acceptable chars for a field
	if(fld.disabled) return true;
	for(var i= 0; i < fld.value.length; i++)
	{
		if(chars.indexOf(fld.value.charAt(i)) == -1)
			if(fld.value.charAt(i) == " ")
				{ status= 'The '+fieldname(fld)+' field may not contain spaces.'; return false; }
			else
				{ status= 'The '+fieldname(fld)+' field may not contain "'+fld.value.charAt(i)+'" characters.'; return false; }
	}
	return true;
}

function disallowChars(fld,chars)
{ // provide a string of unacceptable chars for a field
	if(fld.disabled) return true;
	for(var i= 0; i < fld.value.length; i++)
	{
		if(chars.indexOf(fld.value.charAt(i)) != -1)
		{ status= 'The '+fieldname(fld)+' field may not contain "'+fld.value.charAt(i)+'" characters.'; return false; }
	}
	return true;
}

function checkEmail(fld)
{ // simple email check
	if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
	var phony= /@(\w+\.)*example\.(com|net|org)$/i;
	if(phony.test(fld.value))
	{ status= 'Please enter your email address in the '+fieldname(fld)+' field.'; return false; }
	var emailfmt= /^\w+([.-]\w+)*@\w+([.-]\w+)*\.\w{2,8}$/;
	if(!emailfmt.test(fld.value))
	{ status= 'The '+fieldname(fld)+' field must contain a valid email address.'; return false; }
	return true;
}

function checkIntRange(fld,minVal,maxVal,sep)
{
	if(!fixInt(fld)) return false;
	var val= parseInt(fld.value);
	if(val < minVal) { status= 'The '+fieldname(fld)+' field must be no less than '+minVal+'.'; return false; }
	if(val > maxVal) { status= 'The '+fieldname(fld)+' field must be no greater than than '+maxVal+'.'; return false; }
	return true;
}

function checkFloatRange(fld,minVal,maxVal,sep)
{
	if(!fixFloat(fld)) return false;
	var val= parseFloat(fld.value);
	if(val < minVal) { status= 'The '+fieldname(fld)+' field must be no less than '+minVal+'.'; return false; }
	if(val > maxVal) { status= 'The '+fieldname(fld)+' field must be no greater than than '+maxVal+'.'; return false; }
	return true;
}

function fixInt(fld,sep)
{ // integer check/complainer 
	if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
	var val= fld.value;
	if(typeof(sep)!='undefined') val= val.replace(new RegExp(sep,'g'),'');
	val= parseInt(val);
	if(isNaN(val))
	{ // parse error 
		status= 'The '+fieldname(fld)+' field must contain a whole number.';
		return false;
	}
	fld.value= val;
	return true;
}

function fixFloat(fld,sep)
{ // decimal number check/complainer 
	if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
	var val= fld.value;
	if(typeof(sep)!='undefined') val= val.replace(new RegExp(sep,'g'),'');
	val= parseFloat(fld.value);
	if(isNaN(val))
	{ // parse error 
		status= 'The '+fieldname(fld)+' field must contain a number.';
		return false;
	}
	fld.value= val;
	return true;
}

function fixMoney(fld,sep)
{ // monetary field check
	if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
	var val= fld.value;
	if(fieldname(fld) == 'Budget' && (val == 0 || val == 'N/A' || val == 'na' || val == 'n/a' || val == 'NA'))
	{ 
		if(val == 'N/A' || val == 'na' || val == 'n/a' || val == 'NA')
			return true;

		else
		{
		// parse error 
		status= 'The '+fieldname(fld)+' field must contain a number greater than 0.';
		return false;
		}
	}
	if(typeof(sep)!='undefined') val= val.replace(new RegExp(sep,'g'),'');
	if(val.indexOf('$') == 0)
		val= parseFloat(val.substring(1,40));
	else
		val= parseFloat(val);
	if(isNaN(val))
	{ // parse error 
		status= 'The '+fieldname(fld)+' field must contain a dollar amount.';
		return false;
	}
	var sign= ( val < 0 ? '-': '' );
	val= Number(Math.round(Math.abs(val)*100)).toString();
	while(val.length < 2) val= '0'+val;
	var len= val.length;
	val= sign + ( len == 2 ? '0' : val.substring(0,len-2) ) + '.' + val.substring(len-2,len+1);
	fld.value= val;
	return true;
}

function fixFixed(fld,dec,sep)
{ // fixed decimal fields 
	if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
	var val= fld.value;
	if(typeof(sep)!='undefined') val= val.replace(new RegExp(sep,'g'),'');
	val= parseFloat(fld.value);
	if(isNaN(val))
	{ // parse error 
		status= 'The '+fieldname(fld)+' field must contain a number.';
		return false;
	}
	var sign= ( val < 0 ? '-': '' );
	val= Number(Math.round(Math.abs(val)*Math.pow(10,dec))).toString();
	while(val.length < dec) val= '0'+val;
	var len= val.length;
	val= sign + ( len == dec ? '0' : val.substring(0,len-dec) ) + '.' + val.substring(len-dec,len+1);
	fld.value= val;
	return true;
}

function fixDate(fld)
{ // tenacious date correction 
	if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
	var val= fld.value;
	var dt= new Date(val.replace(/\D/g,'/'));
	if(!dt.valueOf())
	{ // the date was unparseable 
		status= 'The '+fieldname(fld)+' field has the wrong date.';
		return false;
	}
	fld.value= (dt.getMonth()+1)+'/'+dt.getDate()+'/'+dt.getFullYear();
	return true;
}

function fixRecentDate(fld,minyear)
{ // tenacious date correction 
	if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
	var val= fld.value;
	var dt= new Date(val.replace(/\D/g,'/'));
	if(!dt.valueOf())
	{ // the date was unparseable 
		status= 'The '+fieldname(fld)+' field has the wrong date.';
		return false;
	}
	while(dt.getFullYear() < minyear) { dt.setFullYear(dt.getFullYear()+100); }
	fld.value= (dt.getMonth()+1)+'/'+dt.getDate()+'/'+dt.getFullYear();
	return true;
}

function fixTime(fld,starthour) 
{ // tenacious time correction 
	if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
	var hour= 0; 
	var mins= 0;
	var ampm= 'am';
	val= fld.value;
	var dt= new Date('1/1/2000 ' + val);
	if(('9'+val) == parseInt('9'+val))
	{ hour= val; }
	else if(dt.valueOf())
	{ hour= dt.getHours(); mins= dt.getMinutes(); }
	else
	{
		val= val.replace(/\D+/g,':');
		hour= parseInt(val);
		mins= parseInt(val.substring(val.indexOf(':')+1,20));
		if(val.indexOf('pm') > -1) ampm= 'pm';
		if(isNaN(hour)) hour= 0;
		if(isNaN(mins)) mins= 0;
	}
	if(hour < starthour) { ampm= 'pm'; }
	while(hour > 12) { hour-= 12; ampm= 'pm'; }
	while(mins > 60) { mins-= 60; hour++; }
	if(mins < 10) mins= '0' + mins;
	if(!hour)
	{ // the date was unparseable 
		status= 'The '+fieldname(fld)+' field has the wrong time.';
		return false;
	}
	fld.value= hour + ':' + mins + ampm;
	return true;
}

function fixTime24(fld) 
{ // tenacious time correction 
	if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
	var hour= 0; 
	var mins= 0;
	val= fld.value;
	var dt= new Date('1/1/2000 ' + val);
	if(('9'+val) == parseInt('9'+val))
	{ hour= val; }
	else if(dt.valueOf())
	{ hour= dt.getHours(); mins= dt.getMinutes(); }
	else
	{
		val= val.replace(/\D+/g,':');
		hour= parseInt(val);
		mins= parseInt(val.substring(val.indexOf(':')+1,20));
		if(isNaN(hour)) hour= 0;
		if(isNaN(mins)) mins= 0;
		if(val.indexOf('pm') > -1) hour+= 12;
	}
	hour%= 24;
	mins%= 60;
	if(mins < 10) mins= '0' + mins;
	fld.value= hour + ':' + mins;
	return true;
}

function fixPhone(fld,defaultAreaCode,sep,noext)
{ // tenacious phone # correction 
	if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
	if(typeof(sep)=='undefined') sep= '-';
	if(typeof(defaultAreaCode)!='undefined') defaultAreaCode= defaultAreaCode + sep;
	var ext= '', val= fld.value.toLowerCase();
	if(val.indexOf('x') > 0)
	{
		if(!noext) ext= ' x'+val.substr(val.indexOf('x')).replace(/\D/g,'');
		val= val.substr(0,val.indexOf('x'));
	}
	val= val.replace(/\D/g,'');
	if(val.length == 7)
	{
		fld.value= defaultAreaCode + val.substring(0,3) + sep + val.substring(3,20) + ext;
		return true;
	}
	if(val.length == 10)
	{
		fld.value= val.substring(0,3) + sep + val.substring(3,6) + sep + val.substring(6,20) + ext;
		return true;
	}
	if(val.length < 7)
	{
		status= 'The phone number you supplied for the '+fieldname(fld)+' field was too short.';
		return false;
	}
	if(val.length > 10)
	{
		status= 'The phone number you supplied for the '+fieldname(fld)+' field was too long.';
		return false;
	}
	status= 'The phone number you supplied for the '+fieldname(fld)+' field was wrong.';
	return false;
}

function fixSSN(fld)
{ // tenacious SSN correction; fieldname isn't a big consideration, probably only one SSN per form 
	if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
	var val= fld.value;
	val= val.replace(/\D/g,'');
	if( val.length < 9 )
	{
		status= 'The Social Security Number you provided is not long enough.';
		return false;
	}
	if( val.length > 9 )
	{
		status= 'The Social Security Number you provided is too long.';
		return false;
	}
	fld.value= val.substring(0,3)+'-'+val.substring(3,5)+'-'+val.substring(5,12);
	return true;
}

function fixCreditCard(fld)
{ // tenacious credit card correction; fieldname isn't a big consideration, probably only one card per form 
	if(!fld.value.length||fld.disabled) return true; // blank fields are the domain of requireValue 
	var val= fld.value, ctype= 'credit card';
	val= val.replace(/\D/g,'');
	var prefix2= parseInt(val.substr(0,2));
	if( val.substr(0,1) == '4' )
	{ // Visa
		ctype= 'Visa\xae';
		if( val.length == 16 );
		else if( val.length == 13 ); // very old #, should be reassigned
		else if( val.length < 13 )
		{ status= 'The Visa\xae number you provided is not long enough.'; return false; }
		else if( val.length > 16 )
		{ status= 'The Visa\xae number you provided is too long.'; return false; }
		else
		{ status= 'The Visa\xae number you provided is either not long enough, or too long.'; return false; }
	}
	else if( prefix2 >= 51 && prefix2 <= 55 )
	{ // MC
		ctype= 'MasterCard\xae';
		if( val.length < 16 )
		{ status= 'The MasterCard\xae number you provided is not long enough.'; return false; }
		else if( val.length > 16 )
		{ status= 'The MasterCard\xae number you provided is too long.'; return false; }
	}
	else if( (prefix2 == 34) || (prefix2 == 37) )
	{ // AmEx
		ctype= 'American Express\xae card';
		if( val.length < 15 )
		{ status= 'The American Express\xae card number you provided is not long enough.'; return false; }
		else if( val.length > 15 )
		{ status= 'The American Express\xae card number you provided is too long.'; return false; }
	}
	else if( val.substr(0,4) == '6011' )
	{ // Novus/Discover
		ctype= 'Discover\xae card';
		if( val.length < 16 )
		{ status= 'The Discover\xae card number you provided is not long enough.'; return false; }
		else if( val.length > 16 )
		{ status= 'The Discover\xae card number you provided is too long.'; return false; }
	}
	else
	{ // other
		if( val.length < 13 )
		{ status= 'The credit card number you provided is not long enough.'; return false; }
		if( val.length > 19 )
		{ status= 'The credit card number you provided is too long.'; return false; }
	}
	var sum= 0, dbl= false;
	for(var i= val.length-1; i >= 0; i--)
	{
		var digit= parseInt(val.charAt(i))*((dbl=!dbl)?1:2);
		sum+= ( digit > 9 ? (digit%10)+1 : digit );

	}
	if(sum%10)
	{
		status= 'The '+ctype+' number you provided is not valid.\nPlease double-check it and try again.';
		return false;
	}
	fld.value= val;
	return true;
}

function nameContains(name,str)
{ // Check for nontrivial inclusion 
	// OK, *some* trivial cases must be handled...
	if(name == str || name.toLowerCase() == str.toLowerCase()) return true;
	var nlen= name.length;
	var slen= str.length;
	var endat= nlen - slen;
	// too small to fit?
	if(nlen > str) return false;
	if(name.toLowerCase() == name || name.toUpperCase() == name)
	{ // all lower/upper case name? underscores separate
		if(name.indexOf('_') == -1) return false;
		str= str.toLowerCase();
		if( name.indexOf(str+'_') == 0 ||
			name.indexOf('_'+str+'_') > -1 ||
			name.substring(endat-1,nlen+1) == ('_'+str) )
			return true;
	}
	else
	{ // proper case name? uppercase starts new words 
		var sep= name.substring(slen,slen+1);
		if( name.indexOf(str) == 0 && sep == sep.toUpperCase() ) return true;
		if( name.indexOf(str.toLowerCase()) == 0 && sep == sep.toUpperCase() ) return true;
		var sep= name.substring(endat-1,endat);
		if( name.substring(endat,nlen+1) == str ) return true;
		for(var index= name.indexOf(str); index > -1; index= name.indexOf(str,index+1))
		{ // for each occurence of the word, is it followed by a non-lowercase char? 
			endat= index+slen;
			sep= name.substring(endat,endat+1);
			if(sep == sep.toUpperCase()) return true;
		}
	}
	return false;
}

function autocheckByName(frm) 
{ // uses names of form elements to determine type 
	for(var index= 0; index < frm.elements.length; index++)
	{
		var el= frm.elements[index];
		if(!el.type) continue;
		if(el.type == 'text' || el.type == 'password')
		{ // text fields 
			if(( el.name.substring(0,1) == el.name.substring(0,1).toUpperCase() || 
				nameContains(el.name,'Required')) && el.value.length == 0)
			{ alert('The '+fieldname(el)+' field cannot be left blank.'); el.focus(); return false; }
			if(nameContains(el.name,'Date') && !fixDate(el))
			{ alert(status); el.focus(); return false; }
			if(nameContains(el.name,'Time24') && !fixTime24(el))
			{ alert(status); el.focus(); return false; }
			if(nameContains(el.name,'Time') && !fixTime(el))
			{ alert(status); el.focus(); return false; }
			if(nameContains(el.name,'SSN') && !fixSSN(el))
			{ alert(status); el.focus(); return false; }
			if(nameContains(el.name,'CC') && !fixCreditCard(el))
			{ alert(status); el.focus(); return false; }
			if(nameContains(el.name,'Email') && !checkEmail(el))
			{ alert(status); el.focus(); return false; }
			if( ( nameContains(el.name,'Phone') ||
				nameContains(el.name,'Fax') || 
				nameContains(el.name,'Pager') ) &&
				!fixPhone(el))
			{ alert(status); el.focus(); return false; }
		}
		// handle required select and select-multiple 
		else if(el.type.substring(0,3) == 'sel' && 
			(el.name.substring(0,1) == el.name.substring(0,1).toUpperCase() || 
			nameContains(el.name,'Required')) && el.selectedIndex == -1)
		{ alert(status); el.focus(); return false; }
		// handle required checkbox
		else if(el.type == 'checkbox' && 
			(el.name.substring(0,1) == el.name.substring(0,1).toUpperCase() || 
			nameContains(el.name,'Required')) && !requireChecked(el))
		{ alert(status); el.focus(); return false; }
		else if(el.type == 'radio' && !requireRadio(frm[el.name]))
		{ alert(status); frm.elements[index].focus(); return false; }
	}
	for(var index= 0; index < frm.elements.length; index++)
		if(frm.elements[index].type == 'submit') frm.elements[index].disabled= true;
	return true;
}

function isMemberOf(elem,classname)
{ // checks to see if elem is a member of the (style) class 
	// trivial cases first: no membership or simple equality
	if(!elem.className)
		return false
	else if(elem.className == classname)
		return true;
	else if(elem.className.indexOf(' ') > -1)
	{ // multiple class names; use split, if avail 
		if(parseInt(navigator.appVersion) >= 4)
		{
			var names= elem.className.split(' ');
			for(var index= 0; index < names.length; index++)
				if(names[index] == classname)
					return true;
		}
		// older browsers can fake it 
		// WARNING: "fine" can be found in "oldRefined"
		else if(elem.className.indexOf(classname) > -1)
			return true;
	}
	return false;
}

function checkClass(el)
{ // validate the field, based on class membership
	if(el.type == 'text' || el.type == 'password')
	{ // text fields 
		if(isMemberOf(el,'required') && !requireValue(el)) return false;
		if(isMemberOf(el,'date') && !fixDate(el)) return false;
		if(isMemberOf(el,'time') && !fixTime(el)) return false;
		if(isMemberOf(el,'time24') && !fixTime24(el)) return false;
		if(isMemberOf(el,'ssn') && !fixSSN(el)) return false;
		if(isMemberOf(el,'cc') && !fixCreditCard(el)) return false;
		if(isMemberOf(el,'phone') && !fixPhone(el)) return false;
		if(isMemberOf(el,'money') && !fixMoney(el)) return false;
		if(isMemberOf(el,'int') && !fixInt(el)) return false;
		if(isMemberOf(el,'float') && !fixFloat(el)) return false;
		if(isMemberOf(el,'email') && !checkEmail(el)) return false;
	} // handle required select and select-multiple 
	else if(el.type == 'checkbox' && 
		isMemberOf(el,'required') && !requireChecked(el)) return false;
	else if(el.type.substring(0,3) == 'sel' && 
		isMemberOf(el,'required') && el.selectedIndex == -1) return false;
	return true;
}

function autocheckByClass(frm) 
{ // uses the CSS class of form elements to determine type 
	for(var index= 0; index < frm.elements.length; index++)
	{
		var el= frm.elements[index];
		if(!el.type) continue;
		if(el.type == 'radio' && !requireRadio(frm[el.name]))
		{ alert(status); frm.elements[index].focus(); return false; }
		else if(!checkClass(frm.elements[index])) 
		{ alert(status); frm.elements[index].focus(); return false; }
	}
	for(var index= 0; index < frm.elements.length; index++)
		if(frm.elements[index].type == 'submit') frm.elements[index].disabled= true;
	return true;
}

function autocheckByBlur(frm)
{ // uses the onBlur handler of form elements to check value 
	status= '';
	for(var index= 0; index < frm.elements.length; index++)
	{
		var el= frm.elements[index];
		if(!el.type) continue;
		if(el.type == 'radio' && !requireRadio(frm[el.name]))
		{ alert(status); frm.elements[index].focus(); return false; }
		else if(el.type != 'hidden' && el.name && el.onblur)
		{
			el.onblur();
			if(status) { alert(status); el.focus(); return false; }
		}
	}
	for(var index= 0; index < frm.elements.length; index++)
		if(frm.elements[index].type == 'submit') frm.elements[index].disabled= true;
	return true;
}

function canCheckByBlur(frm)
{ // determines whether programmatic invocation of form element onblur is available
	for(var index= 0; index < frm.elements.length; index++)
	{
		var el= frm.elements[index];
		if(!el.type) continue;
		if(el.type != 'hidden' && el.name && typeof(el.onblur)=='function') return true;
	}
	return false;
}

function autocheck(frm)
{ // uses the best available method to check form values 
	var bchar= navigator.appName.substring(0,1);
	if(isMemberOf(frm,'autocheck'))
	{ return autocheckByClass(frm); }
	else if(canCheckByBlur(frm))
	{ return autocheckByBlur(frm); }
	else
	{ return autocheckByName(frm); }
}

/* eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('u 3j(a){h(!1j.1H.p)k;o b=(a||1j.1H[0]).F;E(o i=0;i<b.p;i++)h(b[i].H!=\'1F\'){2A{b[i].M();k}3Q(e){}}}u 4i(a){h(!1j.1H.p)k;o b=(a||1j.1H[0]).F;E(o i=0;i<b.p;i++)3c(b[i].H){11\'2g\':11\'44\':11\'2b\':11\'1F\':11\'47\':h(b[i].48!=b[i].r){q=\'s \'+v(b[i])+\' B 1g 1s.\';k m}1q;11\'1w\':h(b[i].2y!=b[i].1x){q=\'s \'+v(b[i])+\' 1w 1g 1s.\';k m}1q;11\'1S-2q\':E(o j=1;j<b[i].1h.p;j++)h(b[i].1h[j].2K!=b[i].1h[j].2T){q=\'s \'+v(b[i])+\' 3k 1g 1s.\';k m}1q;11\'1S-3z\':E(o j=0;j<b[i].1h.p;j++)h(b[i].1h[j].2K!=b[i].1h[j].2T){q=\'s \'+v(b[i])+\' 3A 3P 1s.\';k m}1q;11\'1K\':h(b[i].p)E(o j=0;j<b[i].p;j++)h(b[i][j].2y!=b[i][j].1x){q=\'s \'+v(b[i])+\' 43 1g 1s.\';k m}1q}k l}u v(a){h(a.23&&1j.26){E(o i=0,X=1j.26(\'4f\');i<X.p;i++)h(X[i].2L==a.23)k X[i].2N||X[i].2Q||X[i].2R;E(o i=0,X=1j.26(\'3r\');i<X.p;i++)h(X[i].2L==a.23)k X[i].2N||X[i].2Q||X[i].2R}k a.C||a.H}u 2p(a){h(a.G)k m;h(!(a.1D==1f||a.1D>0))k m;h(!a.r.p){q=\'s \'+v(a)+\' B 2C Z 2F 2G.\';k l}k m}u 2e(a){h(a.G)k m;h(!a.1x){q=\'s \'+v(a)+\' 1w S Z 1x.\';k l}k m}u 3a(a,b){h(a.G)k m;h(a.r!=b.r){q=\'s \'+v(a)+\' B 3b W 3d 1a \'+v(b)+\' B.\';k l}k m}u 1M(a){h(!a.p)k m;o b=l,1N=l;E(o i=0;i<a.p;i++){h(!1N)1N=!a[i].G;h(a[i].1x)k m;y h(1c(a[i].1D)==\'1f\'||a[i].1D>0)b=m}h(!b||!1N)k m;q=\'3C S 1S 2q 3E 1a \'+a[0].C+\' 1h.\';k l}u 3O(a,b,c){h(!a.r.p||a.G)k m;o d=a.r.p;h(b>-1&&d<b){q=\'s \'+v(a)+\' B S Z 3Z 42 \'+b+\' 1m I; 2o O 2J \'+d+\' 1m I.\';k l}h(c>-1&&d>c){q=\'s \'+v(a)+\' B S Z 1B 4h 1b \'+c+\' 1m I; 2o O 2J \'+d+\' 1m I.\';k l}k m}u 38(a,b){h(!b.p)k m;E(o i=0;i<b.p;i++)b[i].G=!a}u 39(a,b){h(a.G)k m;E(o i=0;i<a.r.p;i++){h(b.J(a.r.1o(i))==-1)h(a.r.1o(i)==" "){q=\'s \'+v(a)+\' B 2n W 14 3h.\';k l}y{q=\'s \'+v(a)+\' B 2n W 14 "\'+a.r.1o(i)+\'" 1m.\';k l}}k m}u 3i(a,b){h(a.G)k m;E(o i=0;i<a.r.p;i++){h(b.J(a.r.1o(i))!=-1){q=\'s \'+v(a)+\' B 2n W 14 "\'+a.r.1o(i)+\'" 1m.\';k l}}k m}u 2k(a){h(!a.r.p||a.G)k m;o b=/@(\\w+\\.)*3l\\.(3m|3n|3q)$/i;h(b.2r(a.r)){q=\'3s 3t 3y 2j 2z 3B 1a \'+v(a)+\' B.\';k l}o c=/^\\w+([.-]\\w+)*@\\w+([.-]\\w+)*\\.\\w{2,8}$/;h(!c.2r(a.r)){q=\'s \'+v(a)+\' B S 14 a 2B 2j 2z.\';k l}k m}u 3M(a,b,c,d){h(!2i(a))k l;o e=Y(a.r);h(e<b){q=\'s \'+v(a)+\' B S Z 1B 2E 1b \'+b+\'.\';k l}h(e>c){q=\'s \'+v(a)+\' B S Z 1B 2d 1b 1b \'+c+\'.\';k l}k m}u 41(a,b,c,d){h(!2c(a))k l;o e=1r(a.r);h(e<b){q=\'s \'+v(a)+\' B S Z 1B 2E 1b \'+b+\'.\';k l}h(e>c){q=\'s \'+v(a)+\' B S Z 1B 2d 1b 1b \'+c+\'.\';k l}k m}u 2i(a,b){h(!a.r.p||a.G)k m;o c=a.r;h(1c(b)!=\'1f\')c=c.V(1e 1J(b,\'g\'),\'\');c=Y(c);h(1d(c)){q=\'s \'+v(a)+\' B S 14 a 4g K.\';k l}a.r=c;k m}u 2c(a,b){h(!a.r.p||a.G)k m;o c=a.r;h(1c(b)!=\'1f\')c=c.V(1e 1J(b,\'g\'),\'\');c=1r(a.r);h(1d(c)){q=\'s \'+v(a)+\' B S 14 a K.\';k l}a.r=c;k m}u 2U(a,b){h(!a.r.p||a.G)k m;o c=a.r;h(v(a)==\'36\'&&(c==0||c==\'N/A\'||c==\'2Y\'||c==\'n/a\'||c==\'30\')){h(c==\'N/A\'||c==\'2Y\'||c==\'n/a\'||c==\'30\')k m;y{q=\'s \'+v(a)+\' B S 14 a K 2d 1b 0.\';k l}}h(1c(b)!=\'1f\')c=c.V(1e 1J(b,\'g\'),\'\');h(c.J(\'$\')==0)c=1r(c.z(1,40));y c=1r(c);h(1d(c)){q=\'s \'+v(a)+\' B S 14 a 3f 3g.\';k l}o d=(c<0?\'-\':\'\');c=1G(1t.2s(1t.2t(c)*2u)).2v();1v(c.p<2)c=\'0\'+c;o e=c.p;c=d+(e==2?\'0\':c.z(0,e-2))+\'.\'+c.z(e-2,e+1);a.r=c;k m}u 3o(a,b,c){h(!a.r.p||a.G)k m;o d=a.r;h(1c(c)!=\'1f\')d=d.V(1e 1J(c,\'g\'),\'\');d=1r(a.r);h(1d(d)){q=\'s \'+v(a)+\' B S 14 a K.\';k l}o e=(d<0?\'-\':\'\');d=1G(1t.2s(1t.2t(d)*1t.3p(10,b))).2v();1v(d.p<b)d=\'0\'+d;o f=d.p;d=e+(f==b?\'0\':d.z(0,f-b))+\'.\'+d.z(f-b,f+1);a.r=d;k m}u 22(a){h(!a.r.p||a.G)k m;o b=a.r;o c=1e 1A(b.V(/\\D/g,\'/\'));h(!c.1O()){q=\'s \'+v(a)+\' B 1g 1a 1C 21.\';k l}a.r=(c.2H()+1)+\'/\'+c.2I()+\'/\'+c.1E();k m}u 3K(a,b){h(!a.r.p||a.G)k m;o c=a.r;o d=1e 1A(c.V(/\\D/g,\'/\'));h(!d.1O()){q=\'s \'+v(a)+\' B 1g 1a 1C 21.\';k l}1v(d.1E()<b){d.3L(d.1E()+2u)}a.r=(d.2H()+1)+\'/\'+d.2I()+\'/\'+d.1E();k m}u 1Z(a,b){h(!a.r.p||a.G)k m;o c=0;o d=0;o e=\'3N\';t=a.r;o f=1e 1A(\'1/1/2M \'+t);h((\'9\'+t)==Y(\'9\'+t)){c=t}y h(f.1O()){c=f.2O();d=f.2P()}y{t=t.V(/\\D+/g,\':\');c=Y(t);d=Y(t.z(t.J(\':\')+1,20));h(t.J(\'1u\')>-1)e=\'1u\';h(1d(c))c=0;h(1d(d))d=0}h(c<b){e=\'1u\'}1v(c>12){c-=12;e=\'1u\'}1v(d>1X){d-=1X;c++}h(d<10)d=\'0\'+d;h(!c){q=\'s \'+v(a)+\' B 1g 1a 1C 2V.\';k l}a.r=c+\':\'+d+e;k m}u 1V(a){h(!a.r.p||a.G)k m;o b=0;o c=0;t=a.r;o d=1e 1A(\'1/1/2M \'+t);h((\'9\'+t)==Y(\'9\'+t)){b=t}y h(d.1O()){b=d.2O();c=d.2P()}y{t=t.V(/\\D+/g,\':\');b=Y(t);c=Y(t.z(t.J(\':\')+1,20));h(1d(b))b=0;h(1d(c))c=0;h(t.J(\'1u\')>-1)b+=12}b%=24;c%=1X;h(c<10)c=\'0\'+c;a.r=b+\':\'+c;k m}u 1U(a,b,c,d){h(!a.r.p||a.G)k m;h(1c(c)==\'1f\')c=\'-\';h(1c(b)!=\'1f\')b=b+c;o e=\'\',t=a.r.1n();h(t.J(\'x\')>0){h(!d)e=\' x\'+t.1z(t.J(\'x\')).V(/\\D/g,\'\');t=t.1z(0,t.J(\'x\'))}t=t.V(/\\D/g,\'\');h(t.p==7){a.r=b+t.z(0,3)+c+t.z(3,20)+e;k m}h(t.p==10){a.r=t.z(0,3)+c+t.z(3,6)+c+t.z(6,20)+e;k m}h(t.p<7){q=\'s 1P K L 25 E 1a \'+v(a)+\' B 1R 17 3e.\';k l}h(t.p>10){q=\'s 1P K L 25 E 1a \'+v(a)+\' B 1R 17 I.\';k l}q=\'s 1P K L 25 E 1a \'+v(a)+\' B 1R 1C.\';k l}u 1T(a){h(!a.r.p||a.G)k m;o b=a.r;b=b.V(/\\D/g,\'\');h(b.p<9){q=\'s 2w 2x 1G L R O W I 1i.\';k l}h(b.p>9){q=\'s 2w 2x 1G L R O 17 I.\';k l}a.r=b.z(0,3)+\'-\'+b.z(3,5)+\'-\'+b.z(5,12);k m}u 1W(a){h(!a.r.p||a.G)k m;o b=a.r,1l=\'1Y 18\';b=b.V(/\\D/g,\'\');o c=Y(b.1z(0,2));h(b.1z(0,1)==\'4\'){1l=\'1L\\U\';h(b.p==16);y h(b.p==13);y h(b.p<13){q=\'s 1L\\U K L R O W I 1i.\';k l}y h(b.p>16){q=\'s 1L\\U K L R O 17 I.\';k l}y{q=\'s 1L\\U K L R O 3u W I 1i, 3v 17 I.\';k l}}y h(c>=3w&&c<=3x){1l=\'1Q\\U\';h(b.p<16){q=\'s 1Q\\U K L R O W I 1i.\';k l}y h(b.p>16){q=\'s 1Q\\U K L R O 17 I.\';k l}}y h((c==34)||(c==37)){1l=\'27 28\\U 18\';h(b.p<15){q=\'s 27 28\\U 18 K L R O W I 1i.\';k l}y h(b.p>15){q=\'s 27 28\\U 18 K L R O 17 I.\';k l}}y h(b.1z(0,4)==\'3D\'){1l=\'29\\U 18\';h(b.p<16){q=\'s 29\\U 18 K L R O W I 1i.\';k l}y h(b.p>16){q=\'s 29\\U 18 K L R O 17 I.\';k l}}y{h(b.p<13){q=\'s 1Y 18 K L R O W I 1i.\';k l}h(b.p>19){q=\'s 1Y 18 K L R O 17 I.\';k l}}o d=0,2a=l;E(o i=b.p-1;i>=0;i--){o e=Y(b.1o(i))*((2a=!2a)?1:2);d+=(e>9?(e%10)+1:e)}h(d%10){q=\'s \'+1l+\' K L R O W 2B.\\3F 3G-3H 2o 3I 2A 3J.\';k l}a.r=b;k m}u T(a,b){h(a==b||a.1n()==b.1n())k m;o c=a.p;o d=b.p;o e=c-d;h(c>b)k l;h(a.1n()==a||a.1k()==a){h(a.J(\'1p\')==-1)k l;b=b.1n();h(a.J(b+\'1p\')==0||a.J(\'1p\'+b+\'1p\')>-1||a.z(e-1,c+1)==(\'1p\'+b))k m}y{o f=a.z(d,d+1);h(a.J(b)==0&&f==f.1k())k m;h(a.J(b.1n())==0&&f==f.1k())k m;o f=a.z(e-1,e);h(a.z(e,c+1)==b)k m;E(o g=a.J(b);g>-1;g=a.J(b,g+1)){e=g+d;f=a.z(e,e+1);h(f==f.1k())k m}}k l}u 2S(a){E(o b=0;b<a.F.p;b++){o c=a.F[b];h(!c.H)1I;h(c.H==\'2g\'||c.H==\'2b\'){h((c.C.z(0,1)==c.C.z(0,1).1k()||T(c.C,\'2f\'))&&c.r.p==0){Q(\'s \'+v(c)+\' B 2C Z 2F 2G.\');c.M();k l}h(T(c.C,\'1A\')&&!22(c)){Q(q);c.M();k l}h(T(c.C,\'3R\')&&!1V(c)){Q(q);c.M();k l}h(T(c.C,\'3S\')&&!1Z(c)){Q(q);c.M();k l}h(T(c.C,\'3T\')&&!1T(c)){Q(q);c.M();k l}h(T(c.C,\'3U\')&&!1W(c)){Q(q);c.M();k l}h(T(c.C,\'3V\')&&!2k(c)){Q(q);c.M();k l}h((T(c.C,\'3W\')||T(c.C,\'3X\')||T(c.C,\'3Y\'))&&!1U(c)){Q(q);c.M();k l}}y h(c.H.z(0,3)==\'2W\'&&(c.C.z(0,1)==c.C.z(0,1).1k()||T(c.C,\'2f\'))&&c.2X==-1){Q(q);c.M();k l}y h(c.H==\'1w\'&&(c.C.z(0,1)==c.C.z(0,1).1k()||T(c.C,\'2f\'))&&!2e(c)){Q(q);c.M();k l}y h(c.H==\'1K\'&&!1M(a[c.C])){Q(q);a.F[b].M();k l}}E(o b=0;b<a.F.p;b++)h(a.F[b].H==\'2h\')a.F[b].G=m;k m}u P(a,b){h(!a.1y)k l y h(a.1y==b)k m;y h(a.1y.J(\' \')>-1){h(Y(2Z.45)>=4){o c=a.1y.46(\' \');E(o d=0;d<c.p;d++)h(c[d]==b)k m}y h(a.1y.J(b)>-1)k m}k l}u 2D(a){h(a.H==\'2g\'||a.H==\'2b\'){h(P(a,\'2l\')&&!2p(a))k l;h(P(a,\'21\')&&!22(a))k l;h(P(a,\'2V\')&&!1Z(a))k l;h(P(a,\'49\')&&!1V(a))k l;h(P(a,\'4a\')&&!1T(a))k l;h(P(a,\'4b\')&&!1W(a))k l;h(P(a,\'1P\')&&!1U(a))k l;h(P(a,\'4c\')&&!2U(a))k l;h(P(a,\'4d\')&&!2i(a))k l;h(P(a,\'4e\')&&!2c(a))k l;h(P(a,\'2j\')&&!2k(a))k l}y h(a.H==\'1w\'&&P(a,\'2l\')&&!2e(a))k l;y h(a.H.z(0,3)==\'2W\'&&P(a,\'2l\')&&a.2X==-1)k l;k m}u 31(a){E(o b=0;b<a.F.p;b++){o c=a.F[b];h(!c.H)1I;h(c.H==\'1K\'&&!1M(a[c.C])){Q(q);a.F[b].M();k l}y h(!2D(a.F[b])){Q(q);a.F[b].M();k l}}E(o b=0;b<a.F.p;b++)h(a.F[b].H==\'2h\')a.F[b].G=m;k m}u 32(a){q=\'\';E(o b=0;b<a.F.p;b++){o c=a.F[b];h(!c.H)1I;h(c.H==\'1K\'&&!1M(a[c.C])){Q(q);a.F[b].M();k l}y h(c.H!=\'1F\'&&c.C&&c.2m){c.2m();h(q){Q(q);c.M();k l}}}E(o b=0;b<a.F.p;b++)h(a.F[b].H==\'2h\')a.F[b].G=m;k m}u 33(a){E(o b=0;b<a.F.p;b++){o c=a.F[b];h(!c.H)1I;h(c.H!=\'1F\'&&c.C&&1c(c.2m)==\'u\')k m}k l}u 35(a){o b=2Z.4j.z(0,1);h(P(a,\'35\')){k 31(a)}y h(33(a)){k 32(a)}y{k 2S(a)}}',62,268,'|||||||||||||||||if|||return|false|true||var|length|status|value|The|val|function|fieldname|||else|substring||field|name||for|elements|disabled|type|long|indexOf|number|you|focus||is|isMemberOf|alert|provided|must|nameContains|xae|replace|not|lbl|parseInt|be||case|||contain|||too|card||the|than|typeof|isNaN|new|undefined|has|options|enough|document|toUpperCase|ctype|characters|toLowerCase|charAt|_|break|parseFloat|changed|Math|pm|while|checkbox|checked|className|substr|Date|no|wrong|offsetWidth|getFullYear|hidden|Number|forms|continue|RegExp|radio|Visa|requireRadio|enabled|valueOf|phone|MasterCard|was|select|fixSSN|fixPhone|fixTime24|fixCreditCard|60|credit|fixTime||date|fixDate|id||supplied|getElementsByTagName|American|Express|Discover|dbl|password|fixFloat|greater|requireChecked|Required|text|submit|fixInt|email|checkEmail|required|onblur|may|it|requireValue|one|test|round|abs|100|toString|Social|Security|defaultChecked|address|try|valid|cannot|checkClass|less|left|blank|getMonth|getDate|currently|defaultSelected|htmlFor|2000|nodeValue|getHours|getMinutes|textContent|innerText|autocheckByName|selected|fixMoney|time|sel|selectedIndex|na|navigator|NA|autocheckByClass|autocheckByBlur|canCheckByBlur||autocheck|Budget||dependants|allowChars|requireConfirmation|does|switch|match|short|dollar|amount|spaces|disallowChars|formFocus|selection|example|com|net|fixFixed|pow|org|label|Please|enter|either|or|51|55|your|multiple|selections|in|You|6011|of|nPlease|double|check|and|again|fixRecentDate|setFullYear|checkIntRange|am|requireLength|have|catch|Time24|Time|SSN|CC|Email|Phone|Fax|Pager|at||checkFloatRange|least|choice|textarea|appVersion|split|file|defaultValue|time24|ssn|cc|money|int|float|LABEL|whole|more|formChanged|appName'.split('|'),0,{}))*/
