function Validator(a){this.validate_on_killfocus=false;if(this.formobj=document.forms[a]){if(this.formobj.onsubmit){this.formobj.old_onsubmit=this.formobj.onsubmit;this.formobj.onsubmit=null}else this.formobj.old_onsubmit=null;this.formobj._sfm_form_name=a;this.formobj.onsubmit=form_submit_handler;this.addValidation=add_validation;this.formobj.addnlvalidations=[];this.addAddnlValidationFunction=add_addnl_vfunction;this.formobj.runAddnlValidations=run_addnl_validations;this.clearAllValidations=clear_all_validations;
this.disable_validations=false;document.error_disp_handler=new sfm_ErrorDisplayHandler;this.EnableOnPageErrorDisplay=validator_enable_OPED;this.EnableOnPageErrorDisplaySingleBox=validator_enable_OPED_SB;this.show_errors_together=false;this.EnableMsgsTogether=sfm_enable_show_msgs_together;document.set_focus_onerror=true;this.EnableFocusOnError=sfm_validator_enable_focus;this.formobj.error_display_loc="right";this.SetMessageDisplayPos=sfm_validator_message_disp_pos}else alert("Error: couldnot get Form object "+
a)}function sfm_validator_enable_focus(a){document.set_focus_onerror=a}function add_addnl_vfunction(){var a={};a.func=arguments[0];a.arguments=[];for(var b=1;b<arguments.length;b++)a.arguments.push(arguments[b]);this.formobj.addnlvalidations.push(a)}function run_addnl_validations(){for(var a=true,b=0;b<this.addnlvalidations.length;b++){var c=this.addnlvalidations[b],d=c.arguments||[];c.func.apply(null,d)||(a=false)}return a}
function sfm_set_focus(a){document.set_focus_onerror&&!a.disabled&&a.type!="hidden"&&a.focus()}function sfm_enable_show_msgs_together(){this.show_errors_together=true;this.formobj.show_errors_together=true}function sfm_validator_message_disp_pos(a){this.formobj.error_display_loc=a}function clear_all_validations(){for(var a=0;a<this.formobj.elements.length;a++)this.formobj.elements[a].validationset=null}
function form_submit_handler(){var a=true;document.error_disp_handler.clear_msgs();for(var b=0;b<this.elements.length;b++){if(this.elements[b].validationset&&!this.elements[b].validationset.validate())a=false;if(!a&&!this.show_errors_together)break}if(this.show_errors_together||a&&!this.show_errors_together)this.runAddnlValidations()||(a=false);if(!a){document.error_disp_handler.FinalShowMsg();return false}return true}
function add_validation(a,b,c){var d=null;if(arguments.length>3)d=arguments[3];if(this.formobj){var e=this.formobj[a];if(e.length&&isNaN(e.selectedIndex))e=e[0];if(e){if(true==this.validate_on_killfocus)e.onblur=handle_item_on_killfocus;if(!e.validationset)e.validationset=new ValidationSet(e,this.show_errors_together);e.validationset.add(b,c,d);e.validatorobj=this}else alert("Error: Couldnot get the input object named: "+a)}else alert("Error: The form object is not set properly")}
function handle_item_on_killfocus(){if(this.validatorobj.disable_validations==true)return this.validatorobj.disable_validations=false;if(null!=this.validationset){document.error_disp_handler.clear_msgs();if(false==this.validationset.validate()){document.error_disp_handler.FinalShowMsg();return false}}}function validator_enable_OPED(){document.error_disp_handler.EnableOnPageDisplay(false)}function validator_enable_OPED_SB(){document.error_disp_handler.EnableOnPageDisplay(true)}
function sfm_ErrorDisplayHandler(){this.msgdisplay=new AlertMsgDisplayer;this.EnableOnPageDisplay=edh_EnableOnPageDisplay;this.ShowMsg=edh_ShowMsg;this.FinalShowMsg=edh_FinalShowMsg;this.all_msgs=[];this.clear_msgs=edh_clear_msgs}function edh_clear_msgs(){this.msgdisplay.clearmsg(this.all_msgs);this.all_msgs=[]}function edh_FinalShowMsg(){this.all_msgs.length!=0&&this.msgdisplay.showmsg(this.all_msgs)}
function edh_EnableOnPageDisplay(a){this.msgdisplay=true==a?new SingleBoxErrorDisplay:new DivMsgDisplayer}function edh_ShowMsg(a,b){var c=[];c.input_element=b;c.msg=a;this.all_msgs.push(c)}function AlertMsgDisplayer(){this.showmsg=alert_showmsg;this.clearmsg=alert_clearmsg}function alert_clearmsg(a){}function alert_showmsg(a){for(var b="",c=null,d=0;d<a.length;d++){if(null==c)c=a[d].input_element;b+=a[d].msg+"\n"}alert(b);null!=c&&sfm_set_focus(c)}
function sfm_show_error_msg(a,b){document.error_disp_handler.ShowMsg(a,b)}function SingleBoxErrorDisplay(){this.showmsg=sb_div_showmsg;this.clearmsg=sb_div_clearmsg}function sb_div_clearmsg(a){a=form_error_div_name(a);sfm_show_div_msg(a,"")}function sb_div_showmsg(a){for(var b="<ul>\n",c=0;c<a.length;c++)b+="<li>"+a[c].msg+"</li>\n";b+="</ul>";a=form_error_div_name(a);c=a+"_loc";b="<a name='"+c+"' >"+b;sfm_show_div_msg(a,b);window.location.hash=c}
function form_error_div_name(a){var b=null;for(var c in a)if(b=a[c].input_element)break;a="";if(b)a=b.form._sfm_form_name+"_errorloc";return a}
function sfm_show_div_msg(a,b){if(a.length<=0)return false;if(document.layers){divlayer=document.layers[a];if(!divlayer)return;divlayer.document.open();divlayer.document.write(b);divlayer.document.close()}else if(document.all){divlayer=document.all[a];if(!divlayer)return;divlayer.innerHTML=b}else if(document.getElementById){divlayer=document.getElementById(a);if(!divlayer)return;divlayer.innerHTML=b}divlayer.style.visibility="visible";return false}
function DivMsgDisplayer(){this.showmsg=div_showmsg;this.clearmsg=div_clearmsg}function div_clearmsg(a){for(var b in a){var c=element_div_name(a[b].input_element);(c=document.getElementById(c))&&c.parentNode.removeChild(c)}}function element_div_name(a){a=a.form._sfm_form_name+"_"+a.name+"_errorloc";return a=a.replace(/[\[\]]/gi,"")}function sfm_getAbsX(a){var b=0;if(a.offsetParent)for(;a.offsetParent;){b+=a.offsetLeft;a=a.offsetParent}else if(a.x)b=a.x;return b}
function sfm_getAbsY(a){var b=0;if(a.offsetParent)for(;a.offsetParent;){b+=a.offsetTop;a=a.offsetParent}else if(a.y)b=a.y;return b}function div_showmsg(a){var b=null;this.clearmsg(a);for(var c in a){if(null==b)b=a[c].input_element;var d=element_div_name(a[c].input_element);sfm_show_floating_div_msg(d,a[c].msg,a[c].input_element)}null!=b&&sfm_set_focus(b)}function sfm_removeNode(a){a=document.getElementById(a);a.parentNode.removeChild(a)}
function sfm_show_floating_div_msg(a,b,c){if(a.length<=0)return false;b="<div class='sfm_float_error_box' id='"+a+"' ><table border='0' cellspacing='0' ><tr><td class='sfm_float_box_td'>"+b+" &nbsp; </td> <td class='sfm_close_box' width='20px' onclick='sfm_removeNode(\""+a+"\")'>X</td></tr></table></div>";var d=document.createElement("div");d.innerHTML=b;c.form.appendChild(d);var e=c;if(c.parentNode&&c.parentNode.className=="sfm_element_container")e=c.parentNode;else if(c.type&&(c.type=="checkbox"||
c.type=="radio")&&c.parentNode)e=c.parentNode;b=sfm_getAbsX(e);d=sfm_getAbsY(e);a=document.getElementById(a);if(c.form.error_display_loc=="top"){d-=a.offsetHeight;d+=2;b+=10}else if(c.form.error_display_loc=="right"){c=e.offsetWidth;e=e.offsetHeight;b+=c;b+=4;d+=(e-a.offsetHeight)/2}a.style.top=d+"px";a.style.left=b+"px";a.handlerobj=new SFM_MoveablePopup(a);return false}function ValidationDesc(a,b,c,d){this.desc=b;this.error=c;this.itemobj=a;this.condition=d;this.validate=vdesc_validate}
function vdesc_validate(){if(this.condition!=null)if(!eval(this.condition))return true;if(!validateInput(this.desc,this.itemobj,this.error)){this.itemobj.validatorobj.disable_validations=true;sfm_set_focus(this.itemobj);return false}return true}function ValidationSet(a,b){this.vSet=[];this.add=add_validationdesc;this.validate=vset_validate;this.itemobj=a;this.msgs_together=b}function add_validationdesc(a,b,c){this.vSet[this.vSet.length]=new ValidationDesc(this.itemobj,a,b,c)}
function vset_validate(){for(var a=true,b=0;b<this.vSet.length;b++){a=a&&this.vSet[b].validate();if(!a&&!this.msgs_together)break}return a}function validateEmail(a){a=a.match("^(.+)@(.+)$");if(a==null)return false;if(a[1]!=null){var b=/^\"?[\w-_\.]*\"?$/;if(a[1].match(b)==null)return false}if(a[2]!=null){b=/^[\w-\.]*\.[A-Za-z]{2,4}$/;if(a[2].match(b)==null){b=/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;if(a[2].match(b)==null)return false}return true}return false}
function TestComparison(a,b,c,d){var e=true,g=null;if(!a.form){sfm_show_error_msg("Error: No Form object!",a);return false}g=a.form.elements[b];if(!g){sfm_show_error_msg("Error: Element with name"+b+" not found !",a);return false}b=a.value;var f=g.value;if(c!="eqelmnt"&&c!="neelmnt"){b=b.replace(/\,/g,"");f=f.replace(/\,/g,"");if(isNaN(b)){sfm_show_error_msg(a.name+": Should be a number ",a);return false}if(isNaN(f)){sfm_show_error_msg(g.name+": Should be a number ",g);return false}}g="";switch(c){case "eqelmnt":if(b!=
f){g=" should be equal to ";e=false}break;case "ltelmnt":if(eval(b)>=eval(f)){g=" should be less than ";e=false}break;case "leelmnt":if(eval(b)>eval(f)){g=" should be less than or equal to";e=false}break;case "gtelmnt":if(eval(b)<=eval(f)){g=" should be greater than";e=false}break;case "geelmnt":if(eval(b)<eval(f)){g=" should be greater than or equal to";e=false}break;case "neelmnt":if(b.length>0&&f.length>0&&b==f){g=" should be different from ";e=false}break}if(e==false){if(!d||d.length==0)d=a.name+
g+f;sfm_show_error_msg(d,a)}return e}function TestSelMin(a,b,c){var d=true,e=a.form.elements[a.name],g=0;if(e.length)for(var f=0;f<e.length;f++)e[f].checked=="1"&&g++;else g=e.checked=="1"?1:0;b=eval(b);if(g<b){if(!c||c.length==0)c="Please Select atleast"+b+" check boxes for"+a.name;sfm_show_error_msg(c,a);d=false}return d}
function TestSelMax(a,b,c){var d=true,e=a.form.elements[a.name],g=0;if(e.length)for(var f=0;f<e.length;f++)e[f].checked=="1"&&g++;else g=e.checked=="1"?1:0;b=eval(b);if(g>b){if(!c||c.length==0)c="Please Select atmost "+b+" check boxes for"+a.name;sfm_show_error_msg(c,a);d=false}return d}
function IsCheckSelected(a,b){var c=false,d=a.form.elements[a.name];if(d.length){a=-1;for(var e=0;e<d.length;e++)if(d[e].value==b){a=e;break}if(a>=0)if(d[a].checked=="1")c=true}else if(a.checked=="1")c=true;return c}function TestDontSelectChk(a,b,c){var d=true;d=IsCheckSelected(a,b)?false:true;if(d==false){if(!c||c.length==0)c="Can't Proceed as you selected "+a.name;sfm_show_error_msg(c,a)}return d}
function TestShouldSelectChk(a,b,c){var d=true;d=IsCheckSelected(a,b)?true:false;if(d==false){if(!c||c.length==0)c="You should select"+a.name;sfm_show_error_msg(c,a)}return d}function TestRequiredInput(a,b){var c=true;if(VWZ_IsEmpty(a.value))c=false;else if(a.getcal&&!a.getcal())c=false;if(!c){if(!b||b.length==0)b=a.name+" : Required Field";sfm_show_error_msg(b,a)}return c}
function TestFileExtension(a,b,c){var d=false;d=false;if(a.value.length<=0)return true;for(var e=b.split(";"),g=0;g<e.length;g++){ext=a.value.substr(a.value.length-e[g].length,e[g].length);ext=ext.toLowerCase();if(ext==e[g]){d=true;break}}if(d)d=true;else{if(!c||c.length==0)c=a.name+" allowed file extensions are: "+b;sfm_show_error_msg(c,a);d=false}return d}
function TestMaxLen(a,b,c){var d=true;if(eval(a.value.length)>eval(b)){if(!c||c.length==0)c=a.name+" : "+b+" characters maximum ";sfm_show_error_msg(c,a);d=false}return d}function TestMinLen(a,b,c){var d=true;if(eval(a.value.length)<eval(b)){if(!c||c.length==0)c=a.name+" : "+b+" characters minimum  ";sfm_show_error_msg(c,a);d=false}return d}function TestInputType(a,b,c,d){var e=true;b=a.value.search(b);if(a.value.length>0&&b>=0){if(!c||c.length==0)c=d;sfm_show_error_msg(c,a);e=false}return e}
function TestEmail(a,b){var c=true;if(a.value.length>0&&!validateEmail(a.value)){if(!b||b.length==0)b=a.name+": Enter a valid Email address ";sfm_show_error_msg(b,a);c=false}return c}function TestLessThan(a,b,c){var d=true,e=a.value.replace(/\,/g,"");b=b.replace(/\,/g,"");if(isNaN(e)){sfm_show_error_msg(a.name+": Should be a number ",a);d=false}else if(eval(e)>=eval(b)){if(!c||c.length==0)c=a.name+" : value should be less than "+b;sfm_show_error_msg(c,a);d=false}return d}
function TestGreaterThan(a,b,c){var d=true,e=a.value.replace(/\,/g,"");b=b.replace(/\,/g,"");if(isNaN(e)){sfm_show_error_msg(a.name+": Should be a number ",a);d=false}else if(eval(e)<=eval(b)){if(!c||c.length==0)c=a.name+" : value should be greater than "+b;sfm_show_error_msg(c,a);d=false}return d}function TestRegExp(a,b,c){var d=true;if(a.value.length>0&&!a.value.match(b)){if(!c||c.length==0)c=a.name+": Invalid characters found ";sfm_show_error_msg(c,a);d=false}return d}
function TestDontSelect(a,b,c){var d=true;if(a.value==null){sfm_show_error_msg("Error: dontselect command for non-select Item",a);d=false}else if(a.value==b){if(!c||c.length==0)c=a.name+": Please Select one option ";sfm_show_error_msg(c,a);d=false}return d}function TestSelectOneRadio(a,b){for(var c=a.form.elements[a.name],d=false,e=0;e<c.length;e++)if(c[e].checked=="1"){d=true;break}if(false==d){if(!b||b.length==0)b="Please select one option from "+a.name;sfm_show_error_msg(b,a)}return d}
function TestSelectRadio(a,b,c,d){for(var e=a.form.elements[a.name],g=false,f=0;f<e.length;f++)if(e[f].value==b&&e[f].checked=="1"){g=true;break}if(d==true&&false==g||d==false&&true==g){sfm_show_error_msg(c,a);return false}return true}
function TestDateComparison(a,b,c,d){ret=false;if(a.value.length<=0)return true;b=sfm_val_getOtherDate(a,b);var e=a.getcal();if(b&&e){var g=false;if(g=d?sfm_compare_dates(b,e)<=0?true:false:sfm_compare_dates(b,e)>=0?true:false)sfm_show_error_msg(c,a);else ret=true}else{sfm_show_error_msg("Invalid date value",a);ret=false}return ret}
function sfm_val_getOtherDate(a,b){var c;if(b=="SameDay")c=new Date;else{b=b.match(/^(\w+)\(([\d\w\-]+)\)$/);if("FixedDate"==b[1]){a=b[2];a=a.match(/^(\d*)\-(\d*)\-(\d*)$/);c=new Date;c.setFullYear(parseInt(a[1],10));c.setMonth(parseInt(a[2],10)-1);c.setDate(parseInt(a[3],10))}else if("Field"==b[1]){c=b[2];c=a.form.elements[c].getcal()}}return c}
function validateInput(a,b,c){var d=true,e=a.search("="),g="",f="";if(e>=0){g=a.substring(0,e);f=a.substr(e+1)}else g=a;switch(g){case "req":case "required":d=TestRequiredInput(b,c);break;case "maxlength":case "maxlen":d=TestMaxLen(b,f,c);break;case "minlength":case "minlen":d=TestMinLen(b,f,c);break;case "alnum":case "alphanumeric":d=TestInputType(b,"[^A-Za-z0-9]",c,b.name+": Only alpha-numeric characters allowed ");break;case "alnum_s":case "alphanumeric_space":d=TestInputType(b,"[^A-Za-z0-9\\s]",
c,b.name+": Only alpha-numeric characters and space allowed ");break;case "num":case "numeric":if(b.value.length>0&&!b.value.match(/^[\-\+]?[\d\,]*\.?[\d]*$/)){sfm_show_error_msg(c,b);d=false}break;case "alphabetic":case "alpha":d=TestInputType(b,"[^A-Za-z]",c,b.name+": Only alphabetic characters allowed ");break;case "alphabetic_space":case "alpha_s":d=TestInputType(b,"[^A-Za-z\\s]",c,b.name+": Only alphabetic characters and space allowed ");break;case "email":d=TestEmail(b,c);break;case "lt":case "lessthan":d=
TestLessThan(b,f,c);break;case "gt":case "greaterthan":d=TestGreaterThan(b,f,c);break;case "regexp":d=TestRegExp(b,f,c);break;case "dontselect":d=TestDontSelect(b,f,c);break;case "dontselectchk":d=TestDontSelectChk(b,f,c);break;case "shouldselchk":d=TestShouldSelectChk(b,f,c);break;case "selmin":d=TestSelMin(b,f,c);break;case "selmax":d=TestSelMax(b,f,c);break;case "selone":d=TestSelectOneRadio(b,c);break;case "dontselectradio":d=TestSelectRadio(b,f,c,false);break;case "selectradio":d=TestSelectRadio(b,
f,c,true);break;case "eqelmnt":case "ltelmnt":case "leelmnt":case "gtelmnt":case "geelmnt":case "neelmnt":return TestComparison(b,f,g,c);case "req_file":d=TestRequiredInput(b,c);break;case "file_extn":d=TestFileExtension(b,f,c);break;case "after_date":d=TestDateComparison(b,f,c,true);break;case "before_date":d=TestDateComparison(b,f,c,false);break}return d}
function VWZ_IsListItemSelected(a,b){for(var c=0;c<a.options.length;c++)if(a.options[c].selected==true&&a.options[c].value==b)return true;return false}function VWZ_IsChecked(a,b){if(a.length)for(var c=0;c<a.length;c++){if(a[c].checked=="1"&&a[c].value==b)return true}else if(a.checked=="1")return true;return false}function sfm_str_trim(a){return a.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function sfm_compare_dates(a,b){a=a.print("%Y-%m-%d");b=b.print("%Y-%m-%d");return a<b?1:a>b?-1:0}
function VWZ_IsEmpty(a){a=sfm_str_trim(a);return a.length==0?true:false};
