// Title: Tigra Form Validator PRO// URL: http://www.softcomplex.com/products/tigra_form_validator_pro/// Version: 1.3// Date: 01/17/2007// Notes: Registration needed to use this script legally. Visit official site for details.var re_dt=/^(\d{1,2})\-(\d{1,2})\-(\d{4})$/,re_tm=/^(\d{1,2})\:(\d{1,2})\:(\d{1,2})$/,a_formats={'alpha':/^[a-zA-Z\.\-]*$/,'alphanum':/^\w+$/,'unsigned':/^\d+$/,'integer':/^[\+\-]?\d*$/,'real':/^[\+\-]?\d*\.?\d*$/,'email':/^[\w-\.]+\@[\w\.-]+\.[a-z]{2,4}$/,'phone':/^[\d\.\s\-]+$/,'date':function(s_date){if(!re_dt.test(s_date))return false;if(RegExp.$1>31||RegExp.$2>12)return false;var dt_test=new Date(RegExp.$3,Number(RegExp.$2-1),RegExp.$1);if(dt_test.getMonth()!=Number(RegExp.$2-1))return false;return true;},'time':function(s_time){if(!re_tm.test(s_time))return false;if(RegExp.$1>23||RegExp.$2>59||RegExp.$3>59)return false;return true;}};function vconfig(){this.alert=0;this.alert_class=[];this.to_disable=[];this.messages={'setup':['No form name passed to validator construction routine','No array of "%form%" form fields passed to validator construction routine','Form "%form%" can not be found in this document','Can not find area for error message box (id="error_%form%")','Incomplete "%n%" form field descriptor entry. Attribute "%attr%" is missing','Can not find form field "%n%" in the form "%form%"','Can not find label tag (id="%t%")','Can not verify match. Field "%m%" was not found'],'fill':['"%l%" is a required field','"%v%" is not valid value for "%l%"','Value for "%l%" must be %mn% characters or more','Value for "%l%" must be no longer than %mx% characters','"%l%" must match "%ml%"'],'boxes':['<table cellpadding="0" cellspacing="0" border="0" width="100%">'+'<tr><td bgcolor="#cc0000"><table cellpadding="15" cellspacing="1" border="0" width="100%">'+'<tr><td bgcolor="#ffdbdb" style="color: black;">%error%</td></tr>'+'</table></td></tr><tr><td height="10">&nbsp;</td></tr></table>','<table cellpadding="0" cellspacing="0" border="0" width="100%">'+'<tr><td bgcolor="#CCCCcc"><table cellpadding="15" cellspacing="1" border="0" width="100%">'+'<tr><td bgcolor="#FFFFDA" style="color: green; font-weight: bold;">Submitting ...</td></tr>'+'</table></td></tr><tr><td height="10">&nbsp;</td></tr></table>'],'confirm':['The "%form%" form is to be submitted. Are you sure?']}}function validator(s_form,a_fields,o_cfg){this.f_error=validator_error;var o_cfg_full=new vconfig();validator_build_cfg(o_cfg,o_cfg_full);this.o_cfg=o_cfg_full;this._alert=o_cfg_full.alert;this.f_alert=this._alert&4?function(s_msg){alert(s_msg);return false}:function(){return false};this.s_errcss=o_cfg_full.alert_class;if(!s_form)return this.f_alert(this.f_error('setup',0));this.s_form=s_form;if(!a_fields||typeof(a_fields)!='object')return this.f_alert(this.f_error('setup',1));this.a_fields=a_fields;this.a_2disable=o_cfg_full.to_disable;this.exec=validator_exec;}function validator_exec(){var o_form=document.forms[this.s_form];if(!o_form)return this.f_alert(this.f_error('setup',2));var e_errbox=get_element('error_'+this.s_form),b_dom=document.body&&document.body.innerHTML;if((this._alert&2)||(this._alert&8)){if(b_dom&&!e_errbox)return this.f_alert(this.f_error('setup',3));if(b_dom){e_errbox.style.display='none';e_errbox.innerHTML='';}}var a_reqattrs=['l'];for(var n_key in this.a_fields){this.a_fields[n_key]['n']=n_key;for(n_attr in a_reqattrs)if(!this.a_fields[n_key][a_reqattrs[n_attr]])return this.f_alert(this.f_error('setup',4,this.a_fields[n_key],{'attr':a_reqattrs[n_attr]}));o_input=o_form.elements[n_key];if(!o_input)return this.f_alert(this.f_error('setup',5,this.a_fields[n_key]));this.a_fields[n_key].o_input=o_input;}if(b_dom)for(var n_key in this.a_fields)if(this.a_fields[n_key]['t']){var s_labeltag=this.a_fields[n_key]['t'],e_labeltag=get_element(s_labeltag);if(!e_labeltag)return this.f_alert(this.f_error('setup',6,this.a_fields[n_key]));this.a_fields[n_key].o_tag=e_labeltag;e_labeltag.className=this.s_errcss[1];}for(var n_key in this.a_fields){o_input=this.a_fields[n_key].o_input;this.a_fields[n_key]['v']=null;if(o_input.type=='checkbox'){if(o_input.checked&&o_input.value)this.a_fields[n_key]['v']=o_input.value;}else if(o_input.value)this.a_fields[n_key]['v']=o_input.value;else if(o_input.options&&o_input.selectedIndex>-1)this.a_fields[n_key]['v']=o_input.options[o_input.selectedIndex].value;else if(o_input.length>0)for(var n_index=0;n_index<o_input.length;n_index++)if(o_input[n_index].checked){this.a_fields[n_key]['v']=o_input[n_index].value;break;}}var n_errors_count=0,s_correct,n_another,o_format_check,b_format_func;for(var n_key in this.a_fields){o_field=this.a_fields[n_key];o_format_check=o_field['f']?(a_formats[o_field['f']]?a_formats[o_field['f']]:o_field['f']):null;b_format_func=(o_format_check+'').indexOf('function')>-1;o_field.n_error=null;if(o_field['r']&&!o_field['v']){o_field.n_error=1;n_errors_count++;continue;}if(o_field['m']){for(var n_key2 in this.a_fields)if(n_key2==o_field['m']){n_another=n_key2;break;}if(n_another==null)return this.f_alert(this.f_error('setup',7,o_field));if(this.a_fields[n_another]['v']!=o_field['v']){o_field['ml']=this.a_fields[n_another]['l'];o_field.n_error=5;n_errors_count++;continue;}}if(o_field['c']&&typeof(o_field['c'])=='function'){var s_result=o_field['c'](o_field,this.a_fields);if(s_result){n_errors_count++;var n_error_code=this.o_cfg.messages.fill.length;this.o_cfg.messages.fill[n_error_code]=s_result;o_field.n_error=(n_error_code+1);continue;}}if(!o_field['v'])continue;if(o_field['mn']&&String(o_field['v']).length<o_field['mn']){o_field.n_error=3;n_errors_count++;continue;}if(o_field['mx']&&String(o_field['v']).length>o_field['mx']){o_field.n_error=4;n_errors_count++;continue;}if(o_format_check&&((b_format_func&&(s_correct=o_format_check(o_field['v'],o_form))!=true)||(!b_format_func&&o_field['v']&&!o_format_check.test(o_field['v'])))){o_field.n_error=typeof(s_correct)!='string'?2:s_correct;n_errors_count++;continue;}}var s_html_message='',s_alert_message='',e_first_error;if(n_errors_count){for(var n_key in this.a_fields){var n_error_type=this.a_fields[n_key].n_error,s_message='';if(n_error_type){s_message=this.f_error('fill',n_error_type-1,this.a_fields[n_key]);if(!s_message)s_message=n_error_type;}if(s_message){if(!e_first_error)e_first_error=o_form.elements[n_key];s_html_message+=s_message+'<br>';s_alert_message+=s_message+"\n";if(b_dom&&this.s_errcss&&this.a_fields[n_key].o_tag)this.a_fields[n_key].o_tag.className=this.s_errcss[0];}}s_html_message=this.f_error('boxes',0,{'error':s_html_message});if(typeof(this._alert)!='function'){if(this._alert&1)alert(s_alert_message);if(b_dom&&(this._alert&2)){e_errbox.innerHTML=s_html_message;e_errbox.style.display='block';}if(e_first_error.focus&&e_first_error.type!='hidden')e_first_error.focus();return false;}}if(typeof(this._alert)=='function')return this._alert(s_alert_message,s_html_message,e_errbox);else{if((this._alert&16)&&!confirm(this.f_error('confirm',0)))return false;if(b_dom&&(this._alert&8)){e_errbox.innerHTML=this.f_error('boxes',1);e_errbox.style.display='block';}for(n_key in this.a_2disable){var e_input=get_element(this.a_2disable[n_key]);if(e_input&&e_input.disabled!=null)e_input.disabled=true;}}return true;}function validator_build_cfg(o_fragment,o_fragment_def){for(var s_ in o_fragment)if(o_fragment[s_]!=null){if(typeof(o_fragment[s_])=='object'){if(typeof(o_fragment_def[s_])!='object')alert("Type mismatch ("+s_+"). Array in place of scalar.");validator_build_cfg(o_fragment[s_],o_fragment_def[s_]);}else{if(typeof(o_fragment_def[s_])=='object')alert("Type mismatch ("+s_+"). Scalar in place of array.");o_fragment_def[s_]=o_fragment[s_];}}}function validator_error(s_group,n_index){var s_=this.o_cfg.messages[s_group][n_index],n_i=2,s_key;if(!s_)return false;if(typeof(s_)=='function')s_=s_(this.s_form);for(;n_i<arguments.length;n_i++)for(s_key in arguments[n_i])s_=s_.replace('%'+s_key+'%',arguments[n_i][s_key]);s_=s_.replace('%form%',this.s_form);return s_}function get_element(s_id){return(document.all?document.all[s_id]:(document.getElementById?document.getElementById(s_id):null));}// 'field is required': 'when method is'var A_METHOD_LOOKUP = {	//'Email':'Email',	//'Postcode':'Letter',	//'Address':'Letter',	'Daytime_Tel':'Daytime Tel',	'Evening_Tel':'Evening Tel',	'Mobile':'Mobile'};function f_validateContact (o_field, a_fields) {	var s_methodSelected = a_fields['Contact_Method']['v'];	if (!s_methodSelected) return false;		var s_currentField = A_METHOD_LOOKUP[o_field['n']];	return (s_methodSelected ==  s_currentField && !o_field['v'])			? '"' + o_field['l'] + '" is required field when selected contact method is "' + s_methodSelected + '"'			: false;}// form fields description structurevar a_fields = {	'Day':{'l':'Day','r':true,'t':'t_Day'},	'Month':{'l':'Month','r':true,'t':'t_Month'},	'Year':{'l':'Year','r':true,'t':'t_Year'},	'Name':{'l':'Name','r':true,'t':'t_Name'},	'DoB_Day':{'l':'DoB Day','r':true,'t':'t_DoB_Day'},	'DoB_Month':{'l':'DoB Month','r':true,'t':'t_DoB_Month'},	'DoB_Year':{'l':'DoB Year','r':true,'t':'t_DoB_Year'},	'email':{'l':'E-mail','r':true,'f':'email','t':'t_email'},	'Address':{'l':'Address','r':true,'t':'t_Address'},	'Postcode':{'l':'Postcode','r':true,'t':'t_Postcode', 'c': f_validateContact},	'Daytime_Tel':{'l':'Daytime Tel','f':'phone','t':'t_Daytime_Tel', 'c': f_validateContact},	'Evening_Tel':{'l':'Evening Tel','f':'phone','t':'t_Evening_Tel', 'c': f_validateContact},	'Mobile':{'l':'Mobile','f':'phone','t':'t_Mobile', 'c': f_validateContact},		'Contact_Method':{'l':'Contact method','r':true,'t':'t_Contact_Method'},	'Agree_T_and_C':{'l':'Terms & Conditions','r':true,'t':'t_Agree_T_and_C'}},o_config = {	'to_disable' : ['Submit', 'Reset'],	// 1 - fill error dialog,	// 2 - fill error HTML box,	// 4 - debug alert,	// 8 - submit ok HTML box	// 16 - submit confirmation dialog,	// function - custom function(array of messages)	'alert' : 2 + 8,	'alert_class' : ['inputHighlighted', 'inputNormal']}// validator constructor callvar v = new validator('registration', a_fields, o_config)
