/* Javascript by Daniel Cohen Gindi (c) danielgindi@gmail.com 054-5655765 */
/* Copyright: Daniel Cohen Gindi, and WeBuildIt */
/* Version: 2011-03-04 */
/* Depends on dgTools.js */
function formValidator(a){return this.init(a)}formValidator.SUMMARY_DIV_LIST=0;formValidator.SUMMARY_DIV_ASTERISK=1;formValidator.SUMMARY_ALERT=2;formValidator.SUMMARY_NONE=3;formValidator.prototype={summaryHeader:"",summaryObj:null,_formObj:null,_validators:null,_defaultValues:null,colorFailure:null,emailValidationRegex:/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z0-9]{1,}$/i,emailValidationOrEmptyRegex:/^([A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z0-9]{1,})?$/i,SUMMARY_DIV_LIST:formValidator.SUMMARY_DIV_LIST,SUMMARY_DIV_ASTERISK:formValidator.SUMMARY_DIV_ASTERISK,SUMMARY_ALERT:formValidator.SUMMARY_ALERT,SUMMARY_NONE:formValidator.SUMMARY_NONE,summaryMethod:0,init:function(a){this._formObj=a},getElement:function(c){var b=this._formObj?dgTools.$(this._formObj):null;var a=null;if(b){this._formObj=b;if(a=b[c]){return a}}if(a=dgTools.$(c)){return a}a=document.getElementsByName(c);if(a){if(a.length){if(a.length==1){return a[0]}else{if(a.length>1){return a}}}}return a},ensureValidatorObjects:function(a){if(a==null){return}a.obj=this.getElement(a.obj);a.obj1=this.getElement(a.obj1);a.obj2=this.getElement(a.obj2)},addDefaultValue:function(a,c){if(c===null||c===undefined){return}var b={obj:a,value:c};if(this._defaultValues==null){this._defaultValues=[]}this._defaultValues.push(b)},addCompare:function(c,b,a){var d={type:"cmp",obj1:c,obj2:b,message:a};if(this._validators==null){this._validators=[]}this._validators.push(d)},addRequired:function(a,b){var c={type:"req",obj:a,message:b};if(this._validators==null){this._validators=[]}this._validators.push(c)},addLength:function(c,b,a,d){var e={type:"len",min:b,max:a,obj:c,message:d};if(this._validators==null){this._validators=[]}this._validators.push(e)},addRegex:function(a,d,b){var c={type:"regex",obj:a,expression:d,message:b};if(this._validators==null){this._validators=[]}this._validators.push(c)},addExtensions:function(b,a,e,c){var d={type:"ext",obj:b,accept:a,deny:e,message:c};if(this._validators==null){this._validators=[]}this._validators.push(d)},clearDefaultValues:function(){if(!this._defaultValues){return}var a,c;var z=this;for(var b=0;b<this._defaultValues.length;b++){c=this.getElement(this._defaultValues[b].obj);if(!c){continue}a=z.getValue(c);if(a===this._defaultValues[b].value){z.setValue(c,"")}}c=null},restoreDefaultValues:function(){if(!this._defaultValues){return}var b,d;var a=this;for(var c=0;c<this._defaultValues.length;c++){d=this.getElement(this._defaultValues[c].obj);if(!d){continue}b=a.getValue(d);if(b===""){b=this._defaultValues[c].value;a.setValue(d,b)}}d=null},registerDefaultValues:function(){if(!this._defaultValues){return}var a=this;this._defaultValues.iterate(function(d){var c=a.getElement(d.obj);if(!c){return}if(!c._val_focus){c._val_focus=dgTools.observe(c,"focus",function(){var e=a.getValue(c);if(e===d.value){a.setValue(c,"")}})}if(!c._val_blur){c._val_blur=dgTools.observe(c,"blur",function(){var e=a.getValue(c);if(e===""){a.setValue(c,d.value)}})}var b=a.getValue(c);if(b===""){a.setValue(c,d.value)}})},unregisterDefaultValues:function(){if(!this._defaultValues){return}var a=this;this._defaultValues.iterate(function(c){var b=a.getElement(c.obj);if(!b){return}if(b._val_focus){dgTools.unobserve(b,"focus",b._val_focus)}if(b._val_blur){dgTools.unobserve(b,"blur",b._val_blur)}})},validate:function(){var c=true;var g="";var p="",f="",k="",e="";if(this._validators==null){this._validators=[]}if(this.summaryMethod==this.SUMMARY_DIV_LIST){p="<li>";f="</li>";k="<ul>";e="</ul>"}else{if(this.summaryMethod==this.SUMMARY_DIV_ASTERISK){p="*&nbsp;";f="<br />";k="";e=""}else{if(this.summaryMethod==this.SUMMARY_ALERT){p="\n";f="";k="";e=""}}}this.clearDefaultValues();this.summaryObj=dgTools.$(this.summaryObj);var n=[];for(var t=0;t<this._validators.length;t++){var h=this._validators[t];this.ensureValidatorObjects(h);if(h.type=="cmp"){if(h.obj1&&h.obj2&&h.obj1.value!=h.obj2.value){c=false;if(n.contains(h.obj1)||n.contains(h.obj2)){continue}n.push(h.obj1);n.push(h.obj2);if(this.summaryMethod!=this.SUMMARY_NONE&&h.message&&h.message.length>0){g+=p+h.message+f}}}else{if(h.type=="req"){if(h.obj&&h.obj.value!=undefined&&h.obj.value.length==0){c=false;if(n.contains(h.obj)){continue}n.push(h.obj);if(this.summaryMethod!=this.SUMMARY_NONE&&h.message&&h.message.length>0){g+=p+h.message+f}}else{if(h.obj&&h.obj.selectedIndex==undefined&&h.obj.length){var a=-1;for(var j=0;j<h.obj.length;j++){if(h.obj[j].checked){a=j;break}}if(a==-1){c=false;if(n.contains(h.obj)){continue}n.push(h.obj);if(this.summaryMethod!=this.SUMMARY_NONE&&h.message&&h.message.length>0){g+=p+h.message+f}}}}}else{if(h.type=="len"){var m=null;if(!h.obj){continue}if(h.obj.value!==undefined&&h.obj.value!==null){m=h.obj.value}if(m===null){continue}var o=h.min;var s=h.max;if(!((o===undefined||o===null||o<0||m.length>=o)&&(s===undefined||s===null||s<0||m.length<=s))){c=false;if(n.contains(h.obj)){continue}n.push(h.obj);if(this.summaryMethod!=this.SUMMARY_NONE&&h.message&&h.message.length>0){g+=p+h.message+f}}}else{if(h.type=="regex"){if(h.obj&&h.expression&&h.obj.value!=undefined&&h.obj.value.search(h.expression)==-1){c=false;if(n.contains(h.obj)){continue}n.push(h.obj);if(this.summaryMethod!=this.SUMMARY_NONE&&h.message&&h.message.length>0){g+=p+h.message+f}}}else{if(h.type=="ext"){var m=null;if(!h.obj){continue}if(h.obj.value!==undefined&&this._validators[t].obj.value!==null){m=h.obj.value}if(m===null){continue}m=m.toLowerCase();var b=(h.accept||"").toLowerCase();var l=(h.deny||"").toLowerCase();function w(v,i){return v.indexOf(i,v.length-i.length)!==-1}function r(i){return i.replace(/^\s*/,"").replace(/\s*$/,"").replace(/^\.*/,"").replace(/\.*$/,"")}l=l.split(/[, ;]/g);var d,u;for(var x=0;x<l.length;x++){d=l[x];u="."+r(d);if(u=="."){continue}if(w(m,u)){c=false;break}}if(!c){b=b.split(/[, ;]/g);for(var x=0;x<b.length;x++){d=b[x];u="."+r(d);if(u=="."){continue}if(w(m,u)){c=true;break}else{c=false}}}if(!c){if(n.contains(h.obj)){continue}n.push(h.obj);if(this.summaryMethod!=this.SUMMARY_NONE&&h.message&&h.message.length>0){g+=p+h.message+f}}}}}}}}if(!c){this.restoreDefaultValues();var q=this.summaryHeader;if(this.summaryMethod!=this.SUMMARY_NONE){if(q.length>0){if(this.summaryMethod==this.SUMMARY_ALERT){q+="\n\n"}else{if(this.summaryMethod==this.SUMMARY_DIV_LIST){q+="<br />"}else{if(this.summaryMethod==this.SUMMARY_DIV_ASTERISK){q+="<br />"}}}}g=g.replace(new RegExp("(^[\n]+)|([\n]+$)","g"),"");g=q+k+g+e;if(this.summaryMethod==this.SUMMARY_DIV_LIST||this.summaryMethod==this.SUMMARY_DIV_ASTERISK){this.summaryObj.innerHTML=g;if((typeof this.colorFailure)=="string"){this.summaryObj.style.color=this.colorFailure}}else{if(this.summaryMethod==this.SUMMARY_ALERT){alert(g)}}}return false}return true},getValue:function(a){if(!a){return null}if(a.value!==undefined){return a.value}else{if(a.text!==undefined){return a.text}else{if(a.getValue){return a.getValue()}else{return null}}}},setValue:function(b,a){if(b.value!==undefined){b.value=a}else{if(b.text!==undefined){b.text=a}else{if(b.setValue){b.setValue(a)}}}return b}};
