var AgatValidator={initialize:function(){AgatValidator.setupChangeListeners();AgatValidator.setupKeyEventsListeners();AgatValidator.setupDynamicExpressions();AgatValidator.setupTfsDisabled();AgatValidator.evalDynamicExpressions();},setupChangeListeners:function(){var handleEvent=function(e,elem){if(!AgatValidator.elementChangeHandler(e,elem))
setTimeout(function(){elem.focus();},1);return elem;};$('input,select,textarea,a').each(function(){if(this.tagName.toLowerCase()=="input"){switch(this.type.toLowerCase()){case"radio":$(this).bind('click',function(event){handleEvent(event,this);});$(this).bind('click',function(){AgatOnScreenKeyboard.handleInputChange("");})
break;case"checkbox":$(this).bind('click',function(event){handleEvent(event,this);});$(this).bind('click',function(){AgatOnScreenKeyboard.handleInputChange("");})
break;case"file":case"button":if($(this).prev().tfsDataType()!="date"){$(this).bind('click',function(event){handleEvent(event,this);});}
$(this).bind('click',function(){AgatOnScreenKeyboard.handleInputChange("");})
break;default:$(this).bind('change',function(event){handleEvent(event,this);});$(this).bind('focus',function(){AgatOnScreenKeyboard.handleInputChange($(this).attr("id"));})
break;}}
else if(this.tagName.toLowerCase()=="a"){$(this).bind('click',function(event){handleEvent(event,this);});$(this).bind('click',function(){AgatOnScreenKeyboard.handleInputChange("");})}
else if(this.tagName.toLowerCase()=="textarea"){$(this).bind('change',function(event){handleEvent(event,this);});$(this).bind('focus',function(){AgatOnScreenKeyboard.handleInputChange($(this).attr("id"));})}
else{$(this).bind('change',function(event){handleEvent(event,this);});$(this).bind('focus',function(){AgatOnScreenKeyboard.handleInputChange("");})}});},setupKeyEventsListeners:function(){$(':tfslookupwindow').each(function(){if($(this).hasAttribute("onkeyup")&&$(this).hasAttribute("tfslookupwindow")){if($(this).attr("onkeyup").toString().toLowerCase().indexOf("showlookupwindowfromkey")>=0){$(this).removeAttr("onkeyup");$(this).bind('keyup',function(event){AgatLookupWindow.showLookUpWindowFromKey(event,this);});}}});},setupTfsDisabled:function(){$(':tfsdisabled').each(function(){if($(this).attr("tfsDisabled").toLowerCase()!="false"){$(this).tfsDisable();}
$(this).bind("propertychange",AgatValidator.tfsDisabledHandler);});},setupDynamicExpressions:function(){var res=$('[tfsDisabledExp][id],[tfsVisible][id],[tfsRequired][id]');var ids=$.makeArray();for(var i=0;i<res.length;i++){if(ids[('*'+res[i].id)]==undefined){ids['*'+res[i].id]=true;if($(res[i]).hasAttribute("tfsVisible")){var expr=$(res[i]).attr("tfsVisible");if(expr.toLowerCase()=="true"){$(res[i]).tfsShow();}else if(expr.toLowerCase()=="false"){$(res[i]).tfsHide();}else{AgatEngine.addDynamicExpression(res[i].id,$(res[i]).attr("tfsVisible"),AgatValidator.tfsVisibleHandler);}}
if($(res[i]).hasAttribute("tfsDisabledExp")){var expr=$(res[i]).attr("tfsDisabledExp");if(expr.toLowerCase()=="true"){$(res[i]).tfsDisable();}else if(expr.toLowerCase()=="false"){$(res[i]).tfsEnable();}else{AgatEngine.addDynamicExpression(res[i].id,$(res[i]).attr("tfsDisabledExp"),AgatValidator.tfsDisabledExpHandler);}}
if($(res[i]).hasAttribute("tfsRequired")){var expr=$(res[i]).attr("tfsRequired");if(AgatEngine.getGeneralAttribute("tfsRequiredMark")!="background"||expr.toLowerCase()=="false"){continue;}else if(expr.toLowerCase()=="true"){$(res[i]).css("background-color","#FEF4B7");}else{AgatEngine.addDynamicExpression(res[i].id,$(res[i]).attr("tfsRequired"),AgatValidator.tfsRequiredHandler);}}}}},tfsDisabledHandler:function(evt1){var evt=evt1.originalEvent;if(evt.eventPhase!=null){if(evt.eventPhase!=evt.AT_TARGET)return;if(evt.attrChange==evt.MODIFICATION&&evt.attrName.toLowerCase()=="tfsdisabled"){var disabled=evt.newValue.toLowerCase()!="false";disabled?$(evt.srcElement).tfsDisable():$(evt.srcElement).tfsEnable();}}
else{if(evt.propertyName.toLowerCase()=="tfsdisabled"){var disabled=evt.srcElement.getAttribute("tfsdisabled").toString().toLowerCase()!="false";disabled?$(evt.srcElement).tfsDisable():$(evt.srcElement).tfsEnable();}}},tfsVisibleHandler:function(elem,value){value?$(elem).tfsShow():$(elem).tfsHide();},tfsDisabledExpHandler:function(elem,value){value?$(elem).tfsDisable():$(elem).tfsEnable();},tfsRequiredHandler:function(elem,value){value?$(elem).css("background-color","#FEF4B7"):$(elem).css("background-color","#FFFFFF");},elementChangeHandler:function(e,elem){if(AgatEngine.getGeneralAttribute("tfsOnScreenKeyboard").toLowerCase()=="yes"){if(elem.id==AgatEngine.getWindowProperty("glbFocusedInput")&&(elem.type.toLowerCase()=="text"||elem.tagName.toLowerCase()=="textarea")){return true;}}
AgatEvents.userOnChange(elem.id);if(AgatValidator.validateElement(elem,true)!=""){if(AgatEngine.getGeneralAttribute("tfsUIMode")==""||AgatEngine.getGeneralAttribute("tfsUIMode").toLowerCase()!="wizard"){$(elem).tfsClear();}
else{AgatEngine.setWindowProperty("ElemToFocus",$(elem).attr("id"));}
return false;}
if($(elem).hasAttribute("tfsOnChange")){AgatValidator.handleTfsOnChange($(elem).attr("tfsOnChange"));}
if($(elem).hasAttribute("tfsLookupWindow")){if(!AgatLookupWindow.validateLookupWindow(elem)){$(elem).tfsClear();return false;}}
if(AgatEngine.getGeneralAttribute("tfsRequiredErrorDisplay")!=""){if(!AgatValidator.checkTfsRequired(elem)){$(elem).css("border-color","");$(elem).css("border-style","");$(elem).css("border-width","");$(elem).css("background-color","");}}
if($(elem).hasAttribute("tfsSubmit")){AgatSubmit.handleTfsSubmit($(elem).attr("tfsSubmit"));}
AgatValidator.evalDynamicExpressions();return true;},handleTfsOnChange:function(expr){var val;try{val=AgatEngine.evalInContentContext(expr,Boolean);}catch(e){}},validateForm:function(id){var errors=[];var seen_names=$.makeArray();if(id){var res=$("#"+id+" input,#"+id+" textarea,#"+id+" select,#"+id+" img");}
else{var res=$("input,textarea,select,img,span[tfsDataType]");}
var firstElemWithError=null;for(var i=0;i<res.length;i++){var elem=res[i];if(elem.tagName=="SPAN"&&$(elem).tfsDataType()!="signature"){continue;}
var err=AgatValidator.validateElement(elem,false);if(err&&!firstElemWithError){firstElemWithError=$(elem).attr("id");}
if(!err&&$(elem).hasAttribute("tfsRequired")){if(elem.tagName=="INPUT"&&elem.type.toLowerCase()=="radio"){if(seen_names['*'+elem.name]!=undefined)continue;seen_names['*'+elem.name]=true;}
if(AgatValidator.checkTfsRequired(elem)){err=AgatValidator.checkTfsRequired(elem);if(err&&!firstElemWithError){firstElemWithError=$(elem).attr("id");}
if(AgatEngine.getGeneralAttribute("tfsRequiredErrorDisplay")!=""){var array=AgatEngine.getGeneralAttribute("tfsRequiredErrorDisplay").split(":");if(array.length==2&&(array[0].toLowerCase()=="border"||array[0].toLowerCase()=="background")){$(elem).css(array[0]+"-color",array[1]);if(array[0].toLowerCase()=="border"){$(elem).css("border-style","solid");$(elem).css("border-width","1px");}}}}}
if(err)errors.push(err);}
res=null;if(id){var res=$("#"+id+" table:tfsdata");}
else{res=$("table:tfsdata");}
for(var i=0;i<res.length;i++){var table=res[i];var elemName=($(table).attr("tfsName")||table.id)||"";if($(table).hasAttribute("tfsMaxrowcount")){var maxlines=$(table).attr("tfsMaxrowcount");if(AgatTables.countRows(table)>maxlines){var err=AgatEngine.getString("IN_TABLE","WINDOW_TITLE",elemName)+
AgatEngine.getString("NUMBER_OF_ROWS_ALLOWED","WINDOW_TITLE",maxlines);if(err)errors.push(err);}}
if($(table).hasAttribute("tfsUnique")){var tuples=$(table).attr("tfsUnique").split(";");for(var j=0;j<tuples.length;j++){var tuple=tuples[j].split(",");var err=AgatValidator.validateTableUniqueConstraint(table,tuple,elemName);if(err)errors.push(err);}}}
if(firstElemWithError){AgatEngine.setWindowProperty("ElemToFocus",firstElemWithError)}
if(errors.length>0){var errstr=errors.join("\n");AgatEngine.displayMsgBox("GENERAL_ERROR_MSG",errstr);return false;}
if(firstElemWithError){AgatEngine.setWindowProperty("ElemToFocus","")}
return true;},validateElement:function(elem,interactive){var user_defined_msg;var user_defined_title;if($(elem).hasAttribute("tfsErrorAlert")){user_defined_msg=user_defined_title="";var arr=$(elem).attr("tfsErrorAlert").split(";");for(var i=0;i<arr.length;i++){var pair=arr[i].match(/([^:]*):(.*)/);if(pair){switch(pair[1]){case"message":user_defined_msg=pair[2];break;case"title":user_defined_title=pair[2];break;}}else{user_defined_msg=arr[i];}}}
if($(elem).hasAttribute("tfsRowData")){var table=AgatTables.getContainingDynamicTable(elem);if(table){var tHeadRows=table.tHead?table.tHead.rows.length:0;var row=AgatTables.getContainingDynamicTableRow(elem);if(row){var index=row.rowIndex-tHeadRows+1;AgatEngine.setWindowProperty("glbCurrRecordNumber",index);}}}
var value=$(elem).tfsValue();var elemName=($(elem).attr("tfsName")||elem.id)||"";try{if($(elem).hasAttribute("tfsDataType")){var datatype=$(elem).attr("tfsDataType");var format=$(elem).attr("tfsFormat")||null;AgatValidator.validateTypedValue(datatype,value,elemName,format);}
var check_constraint=(value!="")||!interactive;if(check_constraint&&$(elem).hasAttribute("tfsConstraint")){var constraint=$(elem).attr("tfsConstraint");constraint=constraint.replace(/this\.value/g,'"'+value+'"');try{AgatValidator.validateConstraint(constraint,elemName);}catch(e){if((e instanceof AgatValidator.ValidationError)&&$(elem).hasAttribute("tfsConstraintAlert")){var usermsg=$(elem).attr("tfsConstraintAlert");if(usermsg=="false"){e.inhibit_alert=true;}else{e.msg=usermsg;}
user_defined_msg=null;}
throw e;}}
if(value!=""&&$(elem).hasAttribute("tfsMinLength")){var minlength=$(elem).attr("tfsMinLength");if(value.length<minlength){var msg=AgatEngine.getString("TOO_SHORT_VALUE","WINDOW_TITLE",elemName)+"\n"+
AgatEngine.getString("VALUE_LENGTH","WINDOW_TITLE",minlength);throw new AgatValidator.ValidationError(msg);}}
if(value!=""&&$(elem).hasAttribute("tfsUnique")){var table=AgatTables.getContainingDynamicTable(elem);var columnIter=$(table).select('#'+elem.id);var found_duplicate=false;var other_elem;for(var i=0;i<columnIter.lenght;i++){other_elem=columnIter[i];if(elem==other_elem)continue;var other_value=$(other_elem).tfsValue();if(value==other_value){found_duplicate=true;break;}}
if(found_duplicate){var msg=AgatEngine.getString("DUPLICATE_VALUE","WINDOW_TITLE",elemName);throw new AgatValidator.ValidationError(msg);}}}catch(e){if(e instanceof AgatValidator.ValidationError){var res=e.msg;if(!user_defined_msg){if(interactive&&!e.inhibit_alert){AgatEngine.displayMsgBox("GENERAL_ERROR_MSG",res);}
return res;}else{if(interactive&&!e.inhibit_alert){AgatEngine.userMsgBox(user_defined_msg,user_defined_title);}
return user_defined_msg;}}else{throw e;}}
return"";},validateConstraint:function(constraint,elemName){var val=AgatEngine.evalInContentContext(constraint,Boolean);if(!val){var res=AgatEngine.getString("INVALID_VALUE_IN_FIELD","WINDOW_TITLE",elemName);throw new AgatValidator.ValidationError(res);}},validateTypedValue:function(datatype,value,elemName,format){var validateDate=function(){format=format||"";format=format.replace(/^\s*|\s*$/g,"");if(format=="")format="dmy";var arr=value.split("/");if(arr.length!=3){return false;}
var day,month,year;if(format=="dmy"){day=arr[0];month=arr[1];year=arr[2];}else{month=arr[0];day=arr[1];year=arr[2];}
if(/\D/.test(day))return false;day=parseInt(day,10);if(isNaN(day)||day>31)return false;if(/\D/.test(month))return false;month=parseInt(month,10);if(isNaN(month)||month>12)return false;if(/\D/.test(year))return false;if(year.length!=2&&year.length!=4)return false;return true;}
var validateDecimal=function(){value=value.toString().replace(",",".");var arr=value.match(/^\s*(?:0|[-+]?([0-9]\d*))?(?:\.(\d+))?\s*$/);if(!arr)return AgatEngine.getString("NUMBERS_ONLY","WINDOW_TITLE");var before_point=arr[1]||"0";var after_point=arr[2];format=format||"";format=format.replace(/^\s*|\s*$/g,"");if(!format)return null;arr=format.split(".");var allowed_before_point=arr[0]?arr[0].length:0;var allowed_after_point=arr[1]?arr[1].length:0;var err_str=AgatEngine.getString("BEFORE_DECIMAL_POINT_NUMBER","WINDOW_TITLE",allowed_before_point)+" "+AgatEngine.getString("AFTER_DECIMAL_POINT_NUMBER","WINDOW_TITLE",allowed_after_point);if(before_point!="0"){if(before_point.length>allowed_before_point)return err_str;}
if(after_point){after_point=after_point.replace(/0+$/,"");if(after_point.length>allowed_after_point)return err_str;}
return null;}
var validateIDNumber=function(){if(value==""||value=="0"||/\D/.test(value))return false;var sum=0;for(var i=0;i<value.length-1;i++){var digit=1*value.charAt(value.length-2-i);if(i%2==0){digit*=2;if(digit>9)digit-=9;}
sum+=digit;}
var checksum=(10-(sum%10))%10;return value.charAt(value.length-1)==checksum;}
if(value=="")return;var res=null;switch(datatype.toLowerCase()){case"date":if(!validateDate()){res=AgatEngine.getString("DATE_INVALID","WINDOW_TITLE");}
break;case"numeric":if(/\D/.test(value)){res=AgatEngine.getString("NUMBERS_ONLY","WINDOW_TITLE");}
break;case"integer":if(!/^(0|[-+]?[1-9]\d*)$/.test(value)){res=AgatEngine.getString("NUMBERS_ONLY","WINDOW_TITLE");}
break;case"unsignedinteger":if(!/^(0|[1-9]\d*)$/.test(value)){res=AgatEngine.getString("POSITIVE_INTEGER","WINDOW_TITLE");}
break;case"decimal":res=validateDecimal();break;case"idnum":if(!validateIDNumber()){res=AgatEngine.getString("INVALID_FIELD","WINDOW_TITLE")}
break;}
if(res){res=AgatEngine.getString("VALUE_MSG","WINDOW_TITLE",elemName)+" "+res;throw new AgatValidator.ValidationError(res);}},validateTableUniqueConstraint:function(table,tuple,elemName){return null;},checkTfsRequired:function(elem){var elemName=$(elem).attr("tfsName")||"";function isRequired(){var expr=$(elem).attr("tfsRequired");if(!expr)return true;return AgatEngine.evalInContentContext(expr,Boolean);}
if(elem.tagName=="INPUT"){switch(elem.type.toLowerCase()){case"radio":var found=false;var radiolist=document.getElementsByName(elem.name);for(var i=0;i<radiolist.length;i++){if(radiolist[i].checked){found=true;break;}}
if(!found&&isRequired()){return AgatEngine.getString("REQUIRED_RADIO","WINDOW_TITLE",elemName);}
break;case"checkbox":if(!elem.checked&&isRequired()){return AgatEngine.getString("REQUIRED_CHECK_BOX","WINDOW_TITLE",elemName);}
break;case"text":case"password":if(!(/\S/.test(elem.value))&&isRequired()){return AgatEngine.getString("FIELD_REQUIRED","WINDOW_TITLE",elemName);}
break;default:}}else if(elem.tagName=="SELECT"||elem.tagName=="TEXTAREA"){if(!(/\S/.test(elem.value))&&isRequired()){return AgatEngine.getString("FIELD_REQUIRED","WINDOW_TITLE",elemName);}}
return null;},ValidationError:function(msg){this.msg=msg;this.inhibit_alert=false;},evalDynamicExpressions:function(){var begin=new Date();var origRowNumber=AgatEngine.getWindowProperty("glbCurrRecordNumber");var exprs=AgatEngine.dynamicExpressions;for(var key in exprs){var id=key.substr(1);var entry=exprs[key];var elem=$('#'+id);var res=$(elem.attr("tagName")+'[id='+id+']');for(var i=0;i<res.length;i++){var elem=res[i];AgatEngine.setWindowProperty("glbCurrRecordNumber",i+1);var val;try{val=AgatEngine.evalInContentContext(entry.expr,Boolean);}catch(e){continue;}
entry.callback(elem,val);}}
AgatEngine.setWindowProperty("glbCurrRecordNumber",origRowNumber);}};