1 "use strict";var alv={};alv.util={jQuery:$,trim:function(t){return t.replace(/^\s+|\s+$/g,"")},getPageItemValue:function(t){return t.substring(0,2)==="#P"?$(t).val():t},getConditionResult:function(pCondition){return pCondition.length!==0?eval(pCondition):!0},getDateFromString:function(t){var e=t.split("/"),s=parseInt(e[2]),i=parseInt(e[1],10),a=parseInt(e[0],10);return new Date(s,i-1,a)},convertDate:function(t,e){var s,i,a,n,r,o=e.toUpperCase();return n=t.replace(/\d+/g,""),r=o.replace(/[A-Z]+/g,""),(t.length===e.length||n===r)&&(s=o.indexOf("DD")===-1?"xx":t.substring(o.indexOf("DD"),o.indexOf("DD")+2),i=o.indexOf("MM")===-1?"xx":t.substring(o.indexOf("MM"),o.indexOf("MM")+2),a=o.indexOf("YYYY")===-1?o.indexOf("RRRR")===-1?o.indexOf("YY")===-1?o.indexOf("RR")===-1?"xxxx":t.substring(o.indexOf("RR"),o.indexOf("RR")+2):t.substring(o.indexOf("YY"),o.indexOf("YY")+2):t.substring(o.indexOf("RRRR"),o.indexOf("RRRR")+4):t.substring(o.indexOf("YYYY"),o.indexOf("YYYY")+4)),s+"/"+i+"/"+a}},alv.validators={jQuery:$,util:alv.util,isEmpty:function(t){return t===""},isEqual:function(t,e){return t===e},regex:function(t,e){return RegExp(e).test(t)||this.isEmpty(t)},isAlphanumeric:function(t){return this.regex(t,/^[a-z0-9]+$/i)},isNumber:function(t){return this.regex(t,/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/)},isDigit:function(t){return this.regex(t,/^\d+$/)},isEmail:function(t){return this.regex(t,/^[^\s@]+@[^\s@]+\.[^\s@]+$/)},isUrl:function(t){return this.regex(t,/(http|ftp|https):\/\/[\w-]+(\.[\w-]+)+([\w.,@?^=%&:\/~+#-]*[\w@?^=%&\/~+#-])?/)},isDate:function(t,e){var s=!1,i=this.util.convertDate(t,e),a=RegExp("^(3[01]|[12][0-9]|0?[1-9])/(1[0-2]|0?[1-9])/(?:[0-9]{2})?[0-9]{2}$");if(i.match(a)){var n=i.split("/"),r=parseInt(n[2]),o=parseInt(n[1],10),l=parseInt(n[0],10),g=new Date(r,o-1,l);g.getMonth()+1===o&&g.getDate()===l&&g.getFullYear()===r&&(s=!0)}return s||this.isEmpty(t)},minLength:function(t,e){return t.length>=e||this.isEmpty(t)},maxLength:function(t,e){return e>=t.length||this.isEmpty(t)},rangeLength:function(t,e,s){return this.minLength(t,e)&&this.maxLength(t,s)||this.isEmpty(t)},minNumber:function(t,e){return t>=e||this.isEmpty(t)},maxNumber:function(t,e){return e>=t||this.isEmpty(t)},rangeNumber:function(t,e,s){return this.minNumber(t,e)&&this.maxNumber(t,s)||this.isEmpty(t)},minCheck:function(t,e,s){var i=$(t).filter(":checked").length;return s?this.minNumber(i,e)||i===0:this.minNumber(i,e)},maxCheck:function(t,e){var s=$(t).filter(":checked").length;return this.maxNumber(s,e)||s===0},rangeCheck:function(t,e,s){var i=$(t).filter(":checked").length;return this.rangeNumber(i,e,s)||i===0},minDate:function(t,e,s){var i=new Date,a=new Date;return!this.isEmpty(t)&&!this.isEmpty(e)&&this.isDate(t,s)&&this.isDate(e,s)?(i=this.util.getDateFromString(this.util.convertDate(t,s)),a=this.util.getDateFromString(this.util.convertDate(e,s)),i>=a):!0},maxDate:function(t,e,s){var i=new Date,a=new Date;return!this.isEmpty(t)&&!this.isEmpty(e)&&this.isDate(t,s)&&this.isDate(e,s)?(i=this.util.getDateFromString(this.util.convertDate(t,s)),a=this.util.getDateFromString(this.util.convertDate(e,s)),a>=i):!0},rangeDate:function(t,e,s,i){var a=new Date,n=new Date,r=new Date;return!this.isEmpty(t)&&!this.isEmpty(e)&&!this.isEmpty(s)&&this.isDate(t,i)&&this.isDate(e,i)&&this.isDate(s,i)?(a=this.util.getDateFromString(this.util.convertDate(t,i)),n=this.util.getDateFromString(this.util.convertDate(e,i)),r=this.util.getDateFromString(this.util.convertDate(s,i)),n>r?!0:a>=n&&r>=a):!0}},function($,util,validators){$.fn.alv=function(method,options){function restorePluginSettings(t){var e=$(t);return e.data(constants.pluginId)!==void 0?($.extend(settings,e.data(constants.pluginId)),!0):!1}function extendSettings(t){t&&$.extend(settings,t)}function bindSettings(t,e){extendSettings(e),$(t).data(constants.pluginId,settings)}function init(t){var e=settings.triggeringEvent+"."+constants.pluginPrefix,s="change."+constants.pluginPrefix;switch(settings.validate){case"notEmpty":($(t).hasClass(constants.apexCheckboxClass)||$(t).hasClass(constants.apexRadioClass)||$(t).hasClass(constants.apexShuttleClass)||$(t).prop("tagName")==="SELECT"||$(t).attr("type")==="file")&&settings.triggeringEvent!=="change"&&(e=e+" "+s),t.on(e,isEmptyHandler);break;case"equal":t.on(e,isEqualHandler);break;case"regex":t.on(e,regexHandler);break;case"itemType":t.on(e,itemTypeHandler);break;case"charLength":t.on(e,charLengthHandler);break;case"numberSize":t.on(e,numberSizeHandler);break;case"dateOrder":t.on(e,dateOrderHandler);break;case"totalChecked":t.on(s,totalCheckedHandler);break;default:}return t}function isEmptyHandler(){var t,e=setMsg(settings.errorMsg,"value required");allowValidation(this,constants.notEmptyClass)&&(t=$(this).hasClass(constants.apexCheckboxClass)||$(this).hasClass(constants.apexRadioClass)?!validators.minCheck($(this).find(":checkbox, :radio"),1,!1):$(this).hasClass(constants.apexShuttleClass)?!$(this).find("select.shuttle_right").val():$(this).prop("tagName")==="SELECT"||$(this).attr("type")==="file"?validators.isEmpty(this.value):settings.allowWhitespace?validators.isEmpty(this.value):validators.isEmpty(util.trim(this.value)),t&&util.getConditionResult(settings.condition)?(setValidationResult(this,constants.notEmptyClass,!1),showMessage(this,e)):(setValidationResult(this,constants.notEmptyClass,!0),hideMessage(this)))}function isEqualHandler(){var t=setMsg(settings.errorMsg,"values do not equal");allowValidation(this,constants.equalClass)&&validators.minLength(this.value,settings.validationMinLength)&&(!validators.isEqual(this.value,$("#"+settings.equal).val())&&util.getConditionResult(settings.condition)?(setValidationResult(this,constants.equalClass,!1),showMessage(this,t)):(setValidationResult(this,constants.equalClass,!0),hideMessage(this)))}function regexHandler(){var t=setMsg(settings.errorMsg,"invalid value");allowValidation(this,constants.regexClass)&&validators.minLength(this.value,settings.validationMinLength)&&(!validators.regex(this.value,settings.regex)&&util.getConditionResult(settings.condition)?(setValidationResult(this,constants.regexClass,!1),showMessage(this,t)):(setValidationResult(this,constants.regexClass,!0),hideMessage(this)))}function itemTypeHandler(){var t,e;if(allowValidation(this,constants.itemTypeClass)&&validators.minLength(this.value,settings.validationMinLength)){switch(settings.itemType){case"alphanumeric":t=validators.isAlphanumeric(this.value),e=setMsg(settings.errorMsg,"not an alphanumeric value");break;case"number":t=validators.isNumber(this.value),e=setMsg(settings.errorMsg,"not a valid number");break;case"digit":t=validators.isDigit(this.value),e=setMsg(settings.errorMsg,"not a valid digit combination");break;case"email":t=validators.isEmail(this.value),e=setMsg(settings.errorMsg,"not a valid e-mail address");break;case"url":t=validators.isUrl(this.value),e=setMsg(settings.errorMsg,"not a valid URL");break;case"date":t=validators.isDate(this.value,settings.dateFormat),e=replaceMsgVars(setMsg(settings.errorMsg,"not a valid date (&1)"),settings.dateFormat);break;default:}!t&&util.getConditionResult(settings.condition)?(setValidationResult(this,constants.itemTypeClass,!1),showMessage(this,e)):(setValidationResult(this,constants.itemTypeClass,!0),hideMessage(this))}}function charLengthHandler(){var t,e;allowValidation(this,constants.charLengthClass)&&validators.minLength(this.value,settings.validationMinLength)&&(validators.isEmpty(settings.max)?(t=validators.minLength(this.value,settings.min),e=replaceMsgVars(setMsg(settings.errorMsg,"value length too short - min. &1"),settings.min)):validators.isEmpty(settings.min)?(t=validators.maxLength(this.value,settings.max),e=replaceMsgVars(setMsg(settings.errorMsg,"value length too long - max. &1"),settings.max)):(t=validators.rangeLength(this.value,settings.min,settings.max),e=replaceMsgVars(setMsg(settings.errorMsg,"invalid value length - between &1 and &2 only"),settings.min,settings.max)),!t&&util.getConditionResult(settings.condition)?(setValidationResult(this,constants.charLengthClass,!1),showMessage(this,e)):(setValidationResult(this,constants.charLengthClass,!0),hideMessage(this)))}function numberSizeHandler(){var t,e,s=Number(this.value),i=Number(util.getPageItemValue(settings.min)),a=Number(util.getPageItemValue(settings.max));allowValidation(this,constants.numberSizeClass)&&validators.minLength(this.value,settings.validationMinLength)&&(validators.isEmpty(settings.max)?(t=validators.minNumber(s,i),e=replaceMsgVars(setMsg(settings.errorMsg,"number too small - min. &1"),i)):validators.isEmpty(settings.min)?(t=validators.maxNumber(s,a),e=replaceMsgVars(setMsg(settings.errorMsg,"number too large - max. &1"),a)):(t=validators.rangeNumber(s,i,a),e=replaceMsgVars(setMsg(settings.errorMsg,"invalid number size - between &1 and &2 only"),i,a)),!t&&util.getConditionResult(settings.condition)?(setValidationResult(this,constants.numberSizeClass,!1),showMessage(this,e)):(setValidationResult(this,constants.numberSizeClass,!0),hideMessage(this)))}function totalCheckedHandler(){var t,e,s=$(this).find(":checkbox, :radio");allowValidation(this,constants.totalCheckedClass)&&(validators.isEmpty(settings.max)?(t=validators.minCheck(s,settings.min,!0),e=replaceMsgVars(setMsg(settings.errorMsg,"please select at least &1 choice(s)"),settings.min)):validators.isEmpty(settings.min)?(t=validators.maxCheck(s,settings.max),e=replaceMsgVars(setMsg(settings.errorMsg,"please select no more than &1 choice(s)"),settings.max)):(t=validators.rangeCheck(s,settings.min,settings.max),e=replaceMsgVars(setMsg(settings.errorMsg,"please select between &1 and &2 choice(s)"),settings.min,settings.max)),!t&&util.getConditionResult(settings.condition)?(setValidationResult(this,constants.totalCheckedClass,!1),showMessage(this,e)):(setValidationResult(this,constants.totalCheckedClass,!0),hideMessage(this)))}function dateOrderHandler(){var t,e,s=util.getPageItemValue(settings.min),i=util.getPageItemValue(settings.max);allowValidation(this,constants.dateOrderClass)&&validators.minLength(this.value,settings.validationMinLength)&&(validators.isEmpty(settings.max)?(t=validators.minDate(this.value,s,settings.dateFormat),e=replaceMsgVars(setMsg(settings.errorMsg,"this date should lie after &1"),s)):validators.isEmpty(settings.min)?(t=validators.maxDate(this.value,i,settings.dateFormat),e=replaceMsgVars(setMsg(settings.errorMsg,"this date should lie before &1"),i)):(t=validators.rangeDate(this.value,s,i,settings.dateFormat),e=replaceMsgVars(setMsg(settings.errorMsg,"this date should lie between &1 and &2"),s,i)),!t&&util.getConditionResult(settings.condition)?(setValidationResult(this,constants.dateOrderClass,!1),showMessage(this,e)):(setValidationResult(this,constants.dateOrderClass,!0),hideMessage(this)))}function showMessage(t,e){var s=$(t),i='<span class="'+constants.errorMsgClass+'" data-alv-for="'+t.id+'">'+e+"</span>";if(s.hasClass(constants.itemErrorClass)){var a=s.siblings("[data-alv-for="+t.id+"]"),n=a.index(),r=s.index();r>n&&settings.errorMsgLocation==="before"?a.text(e):r>n&&settings.errorMsgLocation==="after"?(a.remove(),s.after(i)):n>r&&settings.errorMsgLocation==="after"?a.text(e):(a.remove(),s.before(i))}else s.addClass(constants.itemErrorClass),settings.errorMsgLocation==="before"?s.before(i):s.after(i)}function hideMessage(t){var e=$(t);e.hasClass(constants.itemErrorClass)&&(e.removeClass(constants.itemErrorClass),e.siblings("[data-alv-for="+t.id+"]").remove())}function setMsg(t,e){return t!==""?t:e}function replaceMsgVars(t){for(var e=t,s=1,i=arguments.length;i>s;s++)e=e.replace("&"+s,arguments[s]);return e}function setValidationResult(t,e,s){$(t).data(e,s)}function keyExists(t,e){return $(t).data(e)!==void 0}function allowValidation(t,e){var s=!0,i=$(t);return keyExists(t,e)?$.each(i.data(),function(t){t.substring(0,3)===constants.pluginPrefix&&i.removeData(t)}):$.each(i.data(),function(t,e){t.substring(0,3)===constants.pluginPrefix&&s===!0&&(s=e)}),setValidationResult(t,e,!0),s}function formHasErrors(t){var e,s,i,a=!1,n=$(t),r=n.find("input, textarea, select, fieldset");return $.each(r,function(){e=$(this),s=e.data("events"),s!==void 0&&$.each(s,function(t){i=t,$.each(this,function(t,s){s.namespace===constants.pluginPrefix&&e.trigger(i+"."+constants.pluginPrefix)})})}),$.each(r,function(){return e=$(this),e.hasClass(constants.itemErrorClass)?(e.focus(),a=!0,!1):void 0}),a}function validateFormBeforeSubmit(pForm){var origClickEventKey=constants.pluginPrefix+"-"+"origClickEvent",origClickEvent,firingElem,fixErrorsMsg=setMsg(settings.errorMsg,"Please fix all errors before continuing"),messageBoxId="#alv-msg-box",msgBox='<div class="alv-alert-msg">';msgBox=msgBox+'  <a href="#" class="alv-close" onclick="$(\''+messageBoxId+"').children().fadeOut();return false;\">x</a>",msgBox=msgBox+"  <p>"+fixErrorsMsg+"</p>",msgBox+="</div>",$.each(settings.formSubmitElems.split(","),function(index,item){firingElem=$(item),firingElem.length!==0&&(firingElem.prop("tagName")==="BUTTON"?(origClickEvent=firingElem.attr("click"),firingElem.data(origClickEventKey,origClickEvent),firingElem.removeAttr("click")):(origClickEvent=firingElem.attr("href"),firingElem.data(origClickEventKey,origClickEvent),firingElem.removeAttr("href")),firingElem.on("click",function(){formHasErrors(pForm)?($(messageBoxId).length||$("body").append('<div id="'+messageBoxId.substring(1)+'"></div>'),$(messageBoxId).html(msgBox)):eval($(this).data(origClickEventKey))}))})}var constants={pluginId:"be.ctb.jq.alv",pluginName:"APEX Live Validation",pluginPrefix:"alv",itemErrorClass:"apex-page-item-error",errorMsgClass:"label-error",apexCheckboxClass:"checkbox_group",apexRadioClass:"radio_group",apexShuttleClass:"shuttle"};$.extend(constants,{notEmptyClass:constants.pluginPrefix+"-"+"notEmpty",equalClass:constants.pluginPrefix+"-"+"equal",regexClass:constants.pluginPrefix+"-"+"regex",itemTypeClass:constants.pluginPrefix+"-"+"itemType",charLengthClass:constants.pluginPrefix+"-"+"charLength",numberSizeClass:constants.pluginPrefix+"-"+"numberSize",dateOrderClass:constants.pluginPrefix+"-"+"dateOrder",totalCheckedClass:constants.pluginPrefix+"-"+"totalChecked"});var settings={validate:"notEmpty",triggeringEvent:"blur",condition:"",validationMinLength:0,errorMsg:"",errorMsgLocation:"after",allowWhitespace:!0,itemType:"",dateFormat:"",min:"",max:"",equal:"",regex:"",formSubmitElems:""},methods={init:function(t){var e=$(this);bindSettings(e,t),init(e)},remove:function(){var t=$(this);restorePluginSettings(t)&&method()},validateForm:function(t){var e=$(this);bindSettings(e,t),validateFormBeforeSubmit(e)}};return $(this).each(function(){return methods[method]?methods[method].call($(this),options):typeof method!="object"&&method?($.error("Method "+method+" does not exist on jQuery. "+constants.pluginName),!1):methods.init.call($(this),method)})}}(jQuery,alv.util,alv.validators)