
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 validate_time(s_time){if(!re_tm.test(s_time))
return false;if(RegExp.$1>23||RegExp.$2>59||RegExp.$3>59)
return false;return true;}},a_messages=['Manjka ime forme poslano k javasckripti','Manjka array od "%form%" forme (polja?)','Forme "%form%" ne najdem v tem dokumentu','Nedokončano polje "%n%" forme vstopa. "l" atribut manjka','Ne najdem polja forme "%n%" v formi "%form%"','Ne najdem label tag (id="%t%")','Ne morem preveriti enakost. Polje "%m%" nisem našel','Vrednost "%l%" je zahtevana','Vrednost "%l%" mora biti najmanj %mn% znakov dolga','Vrednost "%l%" ne sme biti večja od %mn% znakov','"%v%" ni veljavna vrednost za "%l%"','"%l%" mora biti enako "%ml%"']
function validator(s_form,a_fields,o_cfg){this.f_error=validator_error;this.f_alert=o_cfg&&o_cfg.alert?function(s_msg){alert(s_msg);return false}:function(){return false};if(!s_form)
return this.f_alert(this.f_error(0));this.s_form=s_form;if(!a_fields||typeof(a_fields)!='object')
return this.f_alert(this.f_error(1));this.a_fields=a_fields;this.a_2disable=o_cfg&&o_cfg['to_disable']&&typeof(o_cfg['to_disable'])=='object'?o_cfg['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(2));b_dom=document.body&&document.body.innerHTML;for(var n_key in this.a_fields){this.a_fields[n_key]['n']=n_key;if(!this.a_fields[n_key]['l'])
return this.f_alert(this.f_error(3,this.a_fields[n_key]));o_input=o_form.elements[n_key];if(!o_input)
return this.f_alert(this.f_error(4,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(5,this.a_fields[n_key]));this.a_fields[n_key].o_tag=e_labeltag;e_labeltag.className='formaOK';}
for(var n_key in this.a_fields){o_input=this.a_fields[n_key].o_input;if(o_input.value||o_input.checked)
this.a_fields[n_key]['v']=o_input.value;else if(o_input.options)
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,n_another,o_format_check;for(var n_key in this.a_fields){o_format_check=this.a_fields[n_key]['f']&&a_formats[this.a_fields[n_key]['f']]?a_formats[this.a_fields[n_key]['f']]:null;this.a_fields[n_key].n_error=null;if(this.a_fields[n_key]['r']&&!this.a_fields[n_key]['v']){this.a_fields[n_key].n_error=1;n_errors_count++;}
else if(this.a_fields[n_key]['mn']&&String(this.a_fields[n_key]['v']).length<this.a_fields[n_key]['mn']){this.a_fields[n_key].n_error=2;n_errors_count++;}
else if(this.a_fields[n_key]['mx']&&String(this.a_fields[n_key]['v']).length>this.a_fields[n_key]['mx']){this.a_fields[n_key].n_error=3;n_errors_count++;}
else if(this.a_fields[n_key]['v']&&this.a_fields[n_key]['f']&&((typeof(o_format_check)=='function'&&!o_format_check(this.a_fields[n_key]['v']))||(typeof(o_format_check)!='function'&&!o_format_check.test(this.a_fields[n_key]['v'])))){this.a_fields[n_key].n_error=4;n_errors_count++;}
else if(this.a_fields[n_key]['m']){for(var n_key2 in this.a_fields)
if(n_key2==this.a_fields[n_key]['m']){n_another=n_key2;break;}
if(n_another==null)
return this.f_alert(this.f_error(6,this.a_fields[n_key]));if(this.a_fields[n_another]['v']!=this.a_fields[n_key]['v']){this.a_fields[n_key]['ml']=this.a_fields[n_another]['l'];this.a_fields[n_key].n_error=5;n_errors_count++;}}}
var 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(n_error_type+6,this.a_fields[n_key]);if(s_message){if(!e_first_error)
e_first_error=o_form.elements[n_key];s_alert_message+=s_message+"\n";if(b_dom&&this.a_fields[n_key].o_tag)
this.a_fields[n_key].o_tag.className='formaNapaka';}}
alert(s_alert_message);if(e_first_error.focus)
e_first_error.focus();return false;}
for(n_key in this.a_2disable)
if(o_form.elements[this.a_2disable[n_key]])
o_form.elements[this.a_2disable[n_key]].disabled=true;}
function validator_error(n_index){var s_=a_messages[n_index],n_i=1,s_key;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));}