Alfresco.forms=Alfresco.forms||{};Alfresco.forms.validation=Alfresco.forms.validation||{};(function(){var d=YAHOO.util.Dom,b=YAHOO.util.Event,a=YAHOO.util.Selector,c=YAHOO.util.KeyListener;Alfresco.forms.Form=function(e){this.formId=e;this.validateOnSubmit=true;this.validateAllOnSubmit=false;this.showSubmitStateDynamically=false;this.showSubmitStateDynamicallyErrors=false;this.submitAsJSON=false;this.submitElements=[];this.validations=[];this.ajaxSubmit=false;this.ajaxSubmitMethod="POST";this.errorContainer="alert";return this};Alfresco.forms.Form.prototype={formId:null,submitElements:null,validateOnSubmit:null,validateAllOnSubmit:null,showSubmitStateDynamically:null,showSubmitStateDynamicallyErrors:null,ajaxSubmit:null,errorContainer:null,doBeforeFormSubmit:{fn:function(e,f){},obj:null,scope:this},doBeforeAjaxRequest:{fn:function(e,f){return true},obj:null,scope:this},ajaxSubmitHandlers:null,ajaxSubmitMethod:null,submitAsJSON:null,validations:null,init:function(){var k=d.get(this.formId);if(k!==null){if(k.getAttribute("forms-runtime")!="listening"){b.addListener(k,"submit",this._submitInvoked,this,true);k.setAttribute("forms-runtime","listening");if(this.ajaxSubmit){k.setAttribute("onsubmit","return false;")}var j=this;var i=function(q,o){var n=o[1],p=n.target?n.target:n.srcElement;if(p.tagName=="TEXTAREA"){return false}else{if(p.tagName=="BUTTON"){}else{var m=p.name;if(m&&(m!="-")){j._submitInvoked(n);k.attributes.action.nodeValue=""}b.stopEvent(n);return false}}};var g=new c(k,{keys:c.KEY.ENTER},i,YAHOO.env.ua.ie>0?c.KEYDOWN:"keypress");g.enable()}if(k.enctype&&k.enctype==="application/json"){this.ajaxSubmit=true;this.submitAsJSON=true}if(this.showSubmitStateDynamically){if(this.submitElements.length==0){var f=a.query("#"+this.formId+' > input[type="submit"]');for(var e=0,l=f.length;e<l;e++){var h=f[e];this.submitElements.push(h.id)}}this.updateSubmitElements()}}else{this._showInternalError("form with id of '"+this.formId+"' could not be located, ensure the form is created after the form element is available.")}},setValidateOnSubmit:function(e){this.validateOnSubmit=e},setValidateAllOnSubmit:function(e){this.validateAllOnSubmit=e},setSubmitElements:function(e){if(!YAHOO.lang.isArray(e)){this.submitElements[0]=e}else{this.submitElements=e}},setErrorContainer:function(e){this.errorContainer=e},setRepeatable:function(f,e){alert("not implemented yet")},setShowSubmitStateDynamically:function(e,f){this.showSubmitStateDynamically=e;if(f){this.showSubmitStateDynamicallyErrors=f}},setAJAXSubmit:function(f,e){this.ajaxSubmit=f;this.ajaxSubmitHandlers=e},setSubmitAsJSON:function(e){this.submitAsJSON=e},setAjaxSubmitMethod:function(e){this.ajaxSubmitMethod=e},addValidation:function(g,h,k,e,i){var j=d.get(g);if(j==null){this._showInternalError("element with id of '"+g+"' could not be located.");return}if(i===undefined){i=null}var f={fieldId:g,args:k,handler:h,message:i};this.validations.push(f);if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("Added submit validation for field: "+g+", using handler: "+(h.name||YAHOO.lang.dump(h))+", args: "+YAHOO.lang.dump(k))}if(e&&e.length>0){b.addListener(j,e,this._validationEventFired,f,this);if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("Added field validation for field: "+g+", using handler: "+(h.name||YAHOO.lang.dump(h))+", args: "+YAHOO.lang.dump(k)+", on event: "+e)}}},addError:function(i,g){YAHOO.Bubbling.fire("formValidationError",{msg:i,field:g});if(this.errorContainer!==null){if(this.errorContainer==="alert"){alert(i)}else{var f=d.get(this.errorContainer);if(f!==null){f.style.display="block";var e=f.innerHTML;var h=f.innerHTML+"<div>"+i+"</div>";f.innerHTML=h}}}},getFieldLabel:function(g){var h=null;var f=a.query("label");if(f.length>0){for(var e=0,j=f.length;e<j;e++){var i=f[e];if(i.htmlFor==g){h=i.firstChild.nodeValue}}}if(h==null){h=g}return h},applyTabFix:function(){if(YAHOO.env.ua.gecko>0){var g=d.get(this.formId);var f=function(k,i){var h=i[1];var j=h.target;if(!j.hasAttribute("tabindex")){b.stopEvent(h);a.query("[tabindex]",g)[0].focus()}};var e=new c(g,{keys:c.KEY.TAB},f,"keyup");e.enable()}},updateSubmitElements:function(){if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("Determining whether submit elements can be enabled...")}var g=this._runValidations(true);for(var e=0,h=this.submitElements.length;e<h;e++){var f=this.submitElements[e];if(f){if(typeof f=="string"){d.get(f).disabled=!g}else{f.set("disabled",!g)}}}},_clearErrors:function(){if(this.errorContainer!=="alert"){var e=d.get(this.errorContainer);if(e!==null){e.style.display="none";e.innerHTML=""}}},_validationEventFired:function(g,f){if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("Event has been fired for field: "+f.fieldId)}var e=false;if(this.showSubmitStateDynamically){if(this.showSubmitStateDynamicallyErrors){this._clearErrors()}else{e=true}}f.handler(b.getTarget(g),f.args,g,this,e,f.message);if(this.showSubmitStateDynamically){this.updateSubmitElements()}},_submitInvoked:function(i){if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("Submit invoked on form: ",this)}this._clearErrors();if(this.validateOnSubmit){if(this._runValidations(false)){var h=d.get(this.formId);this.doBeforeFormSubmit.fn.call(this.doBeforeFormSubmit.scope,h,this.doBeforeFormSubmit.obj);if(this.ajaxSubmit){b.stopEvent(i);var k=h.attributes.action.nodeValue;if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("Performing AJAX submission to url: ",k)}if(h.enctype&&h.enctype=="multipart/form-data"){var j=h.ownerDocument;var g=j.createElement("iframe");g.style.display="none";d.generateId(g,"formAjaxSubmit");g.name=g.id;document.body.appendChild(g);window.frames[g.name].name=g.name;h.target=g.name;h.submit();return}var e={method:this.ajaxSubmitMethod,url:k};if(this.ajaxSubmitHandlers){e=YAHOO.lang.merge(e,this.ajaxSubmitHandlers)}if(this.submitAsJSON){var f=this._buildAjaxForSubmit(h);e.dataObj=f;if(this.doBeforeAjaxRequest.fn.call(this.doBeforeAjaxRequest.scope,e,this.doBeforeAjaxRequest.obj)){if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("Submitting JSON data: ",e.dataObj)}Alfresco.util.Ajax.jsonRequest(e)}else{if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("JSON data request cancelled in doBeforeAjaxRequest()")}}}else{if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("Submitting data in form: ",h.enctype)}e.dataForm=h;Alfresco.util.Ajax.request(e)}}}else{b.stopEvent(i)}}else{if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("Ignoring validations as submission validation is disabled")}}},_buildAjaxForSubmit:function(f){if(f!==null){var h={};var g=f.elements.length;for(var o=0;o<g;o++){var p=f.elements[o];var e=p.name;if(e=="-"||p.disabled||p.type==="button"){continue}if(e==undefined||e==""){e=p.id}var t=YAHOO.lang.trim(p.value);if(e){if((e.length>2)&&(e.substring(e.length-2)=="[]")){e=e.substring(0,e.length-2);if(h[e]==undefined){h[e]=new Array()}h[e].push(t)}else{if(e.indexOf(".")>0){var s=e.split(".");var n=h;var r;for(var m=0,l=s.length-1;m<l;m++){r=s[m];if(n[r]===undefined){n[r]={}}n=n[r]}n[s[m]]=t}else{if(!((p.type==="checkbox"||p.type==="radio")&&!p.checked)){if(p.type=="select-multiple"){for(var m=0,q=p.options.length;m<q;m++){if(p.options[m].selected){if(h[e]==undefined){h[e]=new Array()}h[e].push(p.options[m].value)}}}else{h[e]=t}}}}}}return h}},_runValidations:function(f){var g=false;for(var e=0,j=this.validations.length;e<j;e++){var i=this.validations[e];var h=d.get(i.fieldId);if(h!==null&&!h.disabled){if(!i.handler(h,i.args,null,this,f)){g=true;if(!this.validateAllOnSubmit){if(!f){h.focus()}break}}}}return !g},_showInternalError:function(f,e){this.addError("Internal Form Error: "+f,e)}}})();Alfresco.forms.validation.mandatory=function mandatory(l,j,e,f,h,m){if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("Validating mandatory state of field '"+l.id+"'")}var c=true;if(l.type&&l.type=="radio"){var d=Dom.get(f.formId),i=d[l.name],b=false;for(var k=0,a=i.length;k<a;k++){if(i[k].checked){b=true;break}}c=b}else{c=YAHOO.lang.trim(l.value).length!==0}if(!c&&!h&&f!==null){if(e&&e.keyCode!=9&&e.keyCode!=16||!e){var g=(m!=null)?m:"is mandatory.";f.addError(f.getFieldLabel(l.id)+" "+g,l)}}return c};Alfresco.forms.validation.length=function length(h,g,b,c,f,j){if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("Validating length of field '"+h.id+"' using args: "+YAHOO.lang.dump(g))}var a=true;var i=YAHOO.lang.merge({min:-1,max:-1,crop:false,includeWhitespace:true},g);if(i.minLength){i.min=i.minLength}if(i.maxLength){i.max=i.maxLength}var d=i.includeWhitespace?h.value.length:YAHOO.lang.trim(h.value).length;if(i.min!=-1&&d<i.min){a=false}if(i.max!=-1&&d>i.max){a=false;if(i.crop){if(i.includeWhitespace){h.value=YAHOO.lang.trim(h.value)}if(h.value.length>i.max){h.value=h.value.substring(0,i.max)}if(h.type&&h.type=="textarea"){h.scrollTop=h.scrollHeight}a=true}}if(!a&&!f&&c!==null){var e=(j!=null)?j:"is not the correct length.";c.addError(c.getFieldLabel(h.id)+" "+e,h)}return a};Alfresco.forms.validation.number=function number(g,b,f,e,a,d){if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("Validating field '"+g.id+"' is a number")}var c=(isNaN(g.value)==false);if(!c&&!a&&e!==null){var h=(d!=null)?d:"is not a number.";e.addError(e.getFieldLabel(g.id)+" "+h,g)}return c};Alfresco.forms.validation.numberRange=function numberRange(i,g,b,c,f,k){if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("Validating number range of field '"+i.id+"' using args: "+YAHOO.lang.dump(g))}var a=true;var j=i.value;if(j.length>0){if(isNaN(j)){a=false;if(!f&&c!==null){var d=(k!=null)?k:"is not a number.";c.addError(c.getFieldLabel(i.id)+" "+d,i)}}else{var e=-1;var h=-1;if(g.min){e=parseInt(g.min)}if(g.minValue){e=parseInt(g.minValue)}if(g.max){h=parseInt(g.max)}if(g.maxValue){h=parseInt(g.maxValue)}if(e!=-1&&j<e){a=false}if(h!=-1&&j>h){a=false}if(!a&&!f&&c!==null){var d=(k!=null)?k:"is not within the allowable range.";c.addError(c.getFieldLabel(i.id)+" "+d,i)}}}return a};Alfresco.forms.validation.nodeName=function nodeName(f,b,e,d,a,c){if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("Validating field '"+f.id+"' is a valid node name")}if(!b){b={}}b.pattern=/([\"\*\\\>\<\?\/\:\|]+)|([\.]?[\.]+$)/;b.match=false;return Alfresco.forms.validation.regexMatch(f,b,e,d,a,c)};Alfresco.forms.validation.email=function email(f,b,e,d,a,c){if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("Validating field '"+f.id+"' is a valid email address")}if(!b){b={}}b.pattern=/(.+@.+\.[a-zA-Z0-9]{2,6})/;b.match=true;return Alfresco.forms.validation.regexMatch(f,b,e,d,a,c)};Alfresco.forms.validation.time=function time(f,b,e,d,a,c){if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("Validating field '"+f.id+"' is a valid time value")}if(!b){b={}}b.pattern=/^([0-1]\d|2[0-3]):[0-5]\d(:[0-5]\d)?$/;b.match=true;return Alfresco.forms.validation.regexMatch(f,b,e,d,a,c)};Alfresco.forms.validation.url=function url(i,h,b,c,e,j){if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("Validating field '"+i.id+"' is a valid URL")}var g=/(ftp|http|https):\/\/[\w\-_]+(\.[\w\-_]+)*([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?/,a=true;if(i.value.length>0){var f=new RegExp(g);a=i.value.replace(f,"")==="";if(!a&&!e&&c!==null){var d=(j!=null)?j:"is invalid.";c.addError(c.getFieldLabel(i.id)+" "+d,i)}}return a};Alfresco.forms.validation.regexMatch=function regexMatch(h,g,b,c,e,i){if(Alfresco.logger.isDebugEnabled()){Alfresco.logger.debug("Validating regular expression of field '"+h.id+"' using args: "+YAHOO.lang.dump(g))}var a=true;if(h.value.length>0){if(g.match===undefined){g.match=true}var f=new RegExp(g.pattern);a=f.test(h.value);if(!g.match){a=!a}if(!a&&!e&&c!==null){var d=(i!=null)?i:"is invalid.";c.addError(c.getFieldLabel(h.id)+" "+d,h)}}return a};Alfresco.forms.validation.repoRegexMatch=function repoRegexMatch(f,b,e,d,a,c){b.pattern=b.expression;b.match=b.requiresMatch;return Alfresco.forms.validation.regexMatch(f,b,e,d,a,c)};Alfresco.forms.validation.inList=function inList(f,b,e,d,a,c){return true};