function display(x){win=window.open();for(var i in x)win.document.write(i+' = '+x[i]+'<br>')}var form_validation_options={"override_enter":true,"override_bksp":true};var form_validation_alerts={'>':"%%Name%% should be more than %%num%%!",'<':"%%Name%% should be less than %%num%%!",'>=':"%%Name%% should be more or equal to %%num%%!",'<=':"%%Name%% should be less or equal to %%num%%!",'ch':"%%Name%% contains invalid characters!",'chnum_':"%%Name%% contains invalid characters!",'cnt >':"You should select more than %%num%% %%name%%!",'cnt <':"You should select less than %%num%% %%name%%!",'cnt >=':"You should select at least %%num%% %%name%%!",'cnt <=':"You should select at most %%num%% %%name%%!",'cnt ==':"You should select %%num%% %%name%%!",'date':"Please, enter a valid %%name%%!",'email':"Please, enter a valid e-mail address!",'empty':"Please, enter %%name%%!",'len >':"%%Name%% should contain more than %%num%% characters!",'len <':"%%Name%% should contain less than %%num%% characters!",'len >=':"%%Name%% should contain at least %%num%% characters!",'len <=':"%%Name%% should contain at most %%num%% characters!",'len ==':"%%Name%% should contain %%num%% characters!",'num':"%%Name%% is not a valid number!",'radio':"Please, select %%name%%!",'select':"Please, select %%name%%!",'terms':"You must agree to the terms first!"};var form_validation_nonedit=' button hidden reset submit ';var form_validation_edit=' checkbox file password radio select-multiple select-one text textarea ';var form_validation_type=' file password text textarea ';var form_validation_check=' checkbox radiox select-multiple select-one ';function form_validation_alert(type,name,num){name=name.replace(/^\W*(\w*)\W*$/,"$1");msg=form_validation_alerts[type];msg=msg.replace('%%Name%%',name.substr(0,1).toUpperCase()+name.substr(1,name.length-1).toLowerCase());msg=msg.replace('%%name%%',name.toLowerCase());msg=msg.replace('%%num%%',num);alert(msg);return false}function form_validation_behave(control,key,rules){rules=form_validation_rules2array(rules);for(var i=0;i<rules.length;i++){var rule=rules[i].split(/\s*:\s*/);if(rule.length<2)continue;if(!form_validation_instring(' '+rule[0]+' ',control.name))continue;rule[1]=rule[1].split(/\s+/);switch(rule[1][0]){case'count':document.getElementById(rule[1][1]).innerHTML=control.value.length;if(rule[1].length>=5)if(control.value.length<rule[1][2])document.getElementById(rule[1][1]).style.color=rule[1][3];else document.getElementById(rule[1][1]).style.color=rule[1][4];break;case'next':if(control.value.length==rule[1][1])form_validation_focusNext(control);break;case'prev':if(control.value.length==0&&key==8)form_validation_focusPrev(control);break}}return true}function form_validation_getElement(tag,name){for(var i=0;i<tag.elements.length;i++)if(tag.elements[i].name==name)return tag.elements[i];return undefined}function form_validation_instring(str,val){return str.indexOf(' '+val+' ')>=0}function form_validation_focusNext(tag){for(var i=0;i<tag.form.elements.length;i++)if(tag.form.elements[i]==tag)for(var j=i+1;j<tag.form.elements.length;j++)if(form_validation_instring(form_validation_edit,tag.form.elements[j].type)){if(form_validation_instring(form_validation_type,tag.form.elements[j].type))form_validation_setSelection(tag.form.elements[j],0,0,'frEnd');else tag.form.elements[j].focus();return false}return true}function form_validation_focusPrev(tag){for(var i=0;i<tag.form.elements.length;i++)if(tag.form.elements[i]==tag)for(var j=i-1;j>=0;j--)if(form_validation_instring(form_validation_edit,tag.form.elements[j].type)){if(form_validation_instring(form_validation_type,tag.form.elements[j].type))form_validation_setSelection(tag.form.elements[j],0,0,'frEnd');else tag.form.elements[j].focus();return false}return true}function form_validation_initialize(control,rules){rules=form_validation_rules2array(rules);for(var i=0;i<rules.length;i++){var rule=rules[i].split(/\s*:\s*/);if(rule.length<2)continue;if(!form_validation_instring(' '+rule[0]+' ',control.name))continue;rule[1]=rule[1].split(/\s+/);switch(rule[1][0]){case'count':document.getElementById(rule[1][1]).innerHTML=control.value.length;if(rule[1].length>=5)if(control.value.length<rule[1][2])document.getElementById(rule[1][1]).style.color=rule[1][3];else document.getElementById(rule[1][1]).style.color=rule[1][4];break}}return true}function form_validation_onchange(e){var ie=navigator.appName=="Microsoft Internet Explorer";var tag=ie?window.event.srcElement:e.target;return true}function form_validation_onkeypress(e){var ie=navigator.appName=="Microsoft Internet Explorer";var tag=ie?window.event.srcElement:e.target;var key=ie?window.event.keyCode:e.which;if(form_validation_options['override_backspace'])if(key==8)return form_validation_instring(form_validation_type,tag.type);if(form_validation_options['override_enter'])if(key==13&&tag.type!='textarea')return form_validation_focusNext(tag);return true}function form_validation_onkeyup(e){var ie=navigator.appName=="Microsoft Internet Explorer";var tag=ie?window.event.srcElement:e.target;var key=ie?window.event.keyCode:e.which;var behaviours=form_validation_getElement(tag.form,'form_validation_behaviours');if(behaviours!==undefined)form_validation_behave(tag,key,behaviours.value)}function form_validation_onsubmit(e){var ie=navigator.appName=="Microsoft Internet Explorer";var tag=ie?window.event.srcElement:e.target;if(tag.tagName!='FORM')tag=tag.form;var rules=form_validation_getElement(tag,'form_validation_rules');if(rules!==undefined)for(var i=0;i<tag.elements.length;i++)if(!form_validation_validate(tag.elements[i],rules.value)){tag.elements[i].focus();if(tag.elements[i].select!==undefined)tag.elements[i].select();return false}for(var i=0;i<tag.elements.length;i++){if(tag.elements[i].name=='form_validation_rules')tag.elements[i].value='';if(tag.elements[i].name=='form_validation_behaviours')tag.elements[i].value=''}return true}function form_validation_register(){for(var i=0;i<document.forms.length;i++)with(document.forms[i]){var rules=form_validation_getElement(document.forms[i],'form_validation_rules');var behaviours=form_validation_getElement(document.forms[i],'form_validation_behaviours');if(rules===undefined&&behaviours===undefined)continue;onsubmit=form_validation_onsubmit;for(var j=0;j<elements.length;j++){if(behaviours!==undefined)form_validation_initialize(elements[j],behaviours.value);elements[j].onchange=form_validation_onchange;elements[j].onkeypress=form_validation_onkeypress;elements[j].onkeyup=form_validation_onkeyup}}}function form_validation_rules2array(rules){rules=rules.replace(/^(\s*)(\S.*)/,"$2");rules=rules.replace(/(.*\S)(\s*)$/,"$1");return rules.split(/\s*;\s*/)}function form_validation_setSelection(control,start,end,mode){if(control.focus)control.focus();if(control.selectionStart!==undefined&&control.selectionEnd!==undefined){offset=control.selectionStart;if(mode=='frStart')offset=0;if(mode=='frEnd')offset=control.textLength;control.selectionStart=offset+start;control.selectionEnd=offset+end;return true}if(control.select!==undefined&&document.selection!==undefined&&document.selection.createRange!==undefined){if(mode=='frStart'||mode=='frEnd')control.select();range=document.selection.createRange();if(mode=='frStart')range.moveEnd("character",-range.text.length);if(mode=='frEnd')range.moveStart("character",range.text.length);range.moveStart("character",start);range.moveEnd("character",end);range.select();return true}return false}function form_validation_validate(control,rules){rules=form_validation_rules2array(rules);for(var i=0;i<rules.length;i++){var rule=rules[i].split(/\s*:\s*/);if(rule.length<2)continue;if(!form_validation_instring(' '+rule[0]+' ',control.name))continue;rule[1]=rule[1].split(/\s+/);switch(rule[1][0]){case'>':if(control.value==''||isNaN(control.value))return form_validation_alert('num',control.name,0);if(control.value<=rule[1][1])return form_validation_alert('>',control.name,rule[1][1]);break;case'<':if(control.value==''||isNaN(control.value))return form_validation_alert('num',control.name,0);if(control.value>=rule[1][1])return form_validation_alert('<',control.name,rule[1][1]);break;case'>=':if(control.value==''||isNaN(control.value))return form_validation_alert('num',control.name,0);if(control.value<rule[1][1])return form_validation_alert('>=',control.name,rule[1][1]);break;case'<=':if(control.value==''||isNaN(control.value))return form_validation_alert('num',control.name,0);if(control.value>rule[1][1])return form_validation_alert('<=',control.name,rule[1][1]);break;case'ch':if(!/^([A-Za-z]+)$/.test(control.value))return form_validation_alert('ch',control.name,0);break;case'chnum_':if(!/^(\w+)$/.test(control.value))return form_validation_alert('chnum_',control.name,0);break;case'cnt':var cnt=0;if(control.type=='select-multiple')for(var k=0;k<control.options.length;k++)if(control.options[k].selected)cnt++;if(control.type=='checkbox')with(control.form)for(var k=0;k<elements.length;k++)if(elements[k].name==control.name&&elements[k].checked)cnt++;if(rule[1][1]=='>'&&cnt<=rule[1][2])return form_validation_alert('cnt >',control.name,rule[1][2]);if(rule[1][1]=='<'&&cnt>=rule[1][2])return form_validation_alert('cnt <',control.name,rule[1][2]);if(rule[1][1]=='>='&&cnt<rule[1][2])return form_validation_alert('cnt >=',control.name,rule[1][2]);if(rule[1][1]=='<='&&cnt>rule[1][2])return form_validation_alert('cnt >=',control.name,rule[1][2]);if(rule[1][1]=='=='&&cnt!=rule[1][2])return form_validation_alert('cnt ==',control.name,rule[1][2]);break;case'date':rule[0]=rule[0].split(/\s+/);if(rule[0].length==3){var year;var month;var day;with(control.form)for(var k=0;k<elements.length;k++){if(elements[k].name==rule[0][0])year=elements[k];if(elements[k].name==rule[0][1])month=elements[k];if(elements[k].name==rule[0][2])day=elements[k]}if(year!==undefined&&month!==undefined&&day!==undefined){if(control==year)if(year.value==''||isNaN(year.value))return form_validation_alert('date',year.name,0);if(control==month)if(month.value==''||isNaN(month.value)||month.value<0||month.value>12)return form_validation_alert('date',month.name,0);if(control==day){if(day.value==''||isNaN(day.value)||day.value<0||day.value>31)return form_validation_alert('date',day.name,0);date=new Date(year.value,month.value,day.value);if(date.getDate()!=day.value)return form_validation_alert('date',day.name,0)}}}break;case'email':if(!/^(\w+\.)*(\w+)@(\w+\.)+(\w+)$/.test(control.value))return form_validation_alert('email',control.name,0);break;case'empty':if(form_validation_instring(form_validation_type,control.type)&&control.value=='')return form_validation_alert('empty',control.name,0);break;case'len':if(rule[1][1]=='>'&&control.value.length<=rule[1][2])return form_validation_alert('len >',control.name,rule[1][2]);if(rule[1][1]=='<'&&control.value.length>=rule[1][2])return form_validation_alert('len <',control.name,rule[1][2]);if(rule[1][1]=='>='&&control.value.length<rule[1][2])return form_validation_alert('len >=',control.name,rule[1][2]);if(rule[1][1]=='<='&&control.value.length>rule[1][2])return form_validation_alert('len <=',control.name,rule[1][2]);if(rule[1][1]=='=='&&control.value.length!=rule[1][2])return form_validation_alert('len ==',control.name,rule[1][2]);break;case'num':if(control.value==''||isNaN(control.value))return form_validation_alert('num',control.name,0);break;case'radio':var checked=false;with(control.form)for(var k=0;k<elements.length;k++)if(elements[k].name==control.name&&elements[k].checked)checked=true;if(!checked)return form_validation_alert('radio',control.name,0);case'select':if(control.value==rule[1][1])return form_validation_alert('select',control.name,0);break;case'terms':if(!control.checked)return form_validation_alert('terms',control.name,0);break}}return true}form_validation_register();
