var Validator=Class.create({initialize:function(){this.aValidation=[];this.aErrors=[];this.aCustomErrors=[]},add:function(C,B){var A=Object.extend({message:"",group:"",required:false,equals:false,notEquals:false,length:false,integer:false,"float":false,currency:false,date:false,numberRange:false,phone:false,webColor:false,url:false,email:false,postalCode:false,zipCode:false,filename:false,password:false,regexp:false},B||{});this.aValidation.push({element:$(C),id:C,value:this.getElementValue(C),options:A});return this},addCustomError:function(B,A){this.aCustomErrors.push({element:null,id:null,value:null,options:{message:B,group:(A?A:"")}})},clearErrors:function(){this.aErrors.clear();this.aCustomErrors.clear()},validateRequired:function(){this.aErrors.clear();this.aValidation.each(function(C){var A=C.options,B=C.value;if(A.required&&Validator.isEmpty(B)){this.aErrors.push(C)}}.bind(this));return this._validity()},validate:function(){this.aErrors.clear();this.aValidation.each(function(E){var A=E.options,D=E.value,B=true,C=Validator.isEmpty(D);if(B&&A.required&&Validator.isEmpty(D)){B=false}if(B&&A.length!==false&&!Validator.isInLength(D,A.length)){B=false}if(B&&A.regexp!==false&&!Validator._isRegexp(D,A.regexp,false)){B=false}if(B&&A.password!==false&&!Validator.isValidPassword(D,A.password)){B=false}if(!C){if(B&&A.equals&&!Validator.isEqual(D,A.equals)){B=false}if(B&&A.notEquals&&!Validator.isNotEqual(D,A.notEquals)){B=false}if(B&&A.integer!==false&&!Validator.isInteger(D)){B=false}if(B&&$H(A).get("float")!==false&&!Validator.isFloat(D)){B=false}if(B&&A.currency!==false&&!Validator.isCurrency(D)){B=false}if(B&&A.date!==false&&!Validator.isDate(D,A.date)){B=false}if(B&&A.numberRange!==false&&!Validator.isInRange(D,A.numberRange)){B=false}if(B&&A.phone!==false&&!Validator.isPhoneNumber(D)){B=false}if(B&&A.webColor!==false&&!Validator.isWebColor(D)){B=false}if(B&&A.url!==false&&!Validator.isUrl(D)){B=false}if(B&&A.email!==false&&!Validator.isEmail(D)){B=false}if(B&&A.postalCode!==false&&!Validator.isPostalCode(D)){B=false}if(B&&A.zipCode!==false&&!Validator.isZipCode(D)){B=false}if(B&&A.filename!==false&&!Validator.isFilename(D)){B=false}}if(!B){this.aErrors.push(E)}}.bind(this));return this._validity()},getFormattedMessage:function(C){var E=this.getErrors(),A=null,B=C+"\n";var D=E.sortBy(function(H,F){var G=E.min(function(J,K){var I=9999;if(H.options.group===""){I=-1}else{if(J.options.group==H.options.group){I=K}}return I});return((G*1000)+F)}.bind(this));D.each(function(F){if(A!==F.options.group){A=F.options.group;B+=A==""?"\n":"\n"+A+"\n"}B+="   - "+F.options.message+"\n"});return B},getErrors:function(){var A=this.aErrors.clone();this.aCustomErrors.each(function(B){A.push(B)});return A},getElementValue:function(B){var D=null,A=false,C=false,F;if(typeof (FCKeditorAPI)!="undefined"&&FCKeditorAPI.GetInstance(B)){A=true;D=FCKeditorAPI.GetInstance(B).GetXHTML()}if(typeof (tinymce)!="undefined"&&tinyMCE.get(B)){C=true;D=tinyMCE.get(B).getContent()}if(!A&&!C){var E=$(B);if(E.nodeName=="INPUT"&&E.readAttribute("type")&&["radio","checkbox"].include(E.readAttribute("type").toLowerCase())){F=$$('input[name="'+$(B).readAttribute("name")+'"]').findAll(function(G){return G.checked});D=F.pluck("value").join(",")}else{if(E.nodeName=="SELECT"&&E.multiple){D=$F(E).join(",")}else{D=$F(E)}}}return D},_validity:function(){return(this.aErrors.length==0&&this.aCustomErrors.length==0)}});Object.extend(Validator,{regexpInteger:"^-?[0-9]{1,10}$",regexpFloat:"^-?[0-9]{1,10}((.|,)[0-9]{1,10})?$",regexpPhoneNumber:"^(1-)?\\d{3}-\\d{3}-\\d{4}$|^(1\\.)?\\d{3}\\.\\d{3}\\.\\d{4}$|^(1\\s)?\\d{3}\\s\\d{3}\\s\\d{4}$",regexpWebColor:"^#?[0-9a-f]{6}$",regexpUrl:"^https?://.*$",regexpEmail:"([\\w\\_\\.\\-]+\\@[\\w\\_\\.\\-]+\\.[a-z]{2,5})",regexpPostalCode:"^[a-zA-Z]\\d[a-zA-Z]\\s?\\d[a-zA-Z]\\d$",regexpZipCode:"^\\d{5}((-|\\s)?\\d{4})?$",regexpFilename:"^[a-zA-Z0-9_-]+.[a-zA-Z0-9]+$",regexpDate:"^\\d{4}-\\d{1,2}-\\d{1,2}$",regexpDateFormat:"^(yyyy/mm/dd|yyyy/dd/mm|mm/yyyy/dd|mm/dd/yyyy|dd/yyyy/mm|dd/mm/yyyy|yyyy.mm.dd|yyyy.dd.mm|mm.yyyy.dd|mm.dd.yyyy|dd.yyyy.mm|dd.mm.yyyy|yyyy-mm-dd|yyyy-dd-mm|mm-yyyy-dd|mm-dd-yyyy|dd-yyyy-mm|dd-mm-yyyy)$",defaultDateFormat:"yyyy-mm-dd",isEmpty:function(A){return(A==null||A.strip()=="")},isEqual:function(B,A){return(B==A)},isNotEqual:function(B,A){return(B!=A)},isInLength:function(B,C){var A=Object.extend({min:null,max:null},C||{});return Validator.isInRange(B.length.toString(),A)},isInteger:function(B){var A=false;if(Validator._isRegexp(B,Validator.regexpInteger,true)){var C=parseFloat(B);if(C<=2147483647){A=true}}return A},isFloat:function(B){var A=false;if(Validator._isRegexp(B,Validator.regexpFloat,true)){A=true}return A},isCurrency:function(C){var B=false,A=/^((((\$|\u20AC|\u20A4|\u00A3|\u00A5)\s?)?-?(\d{1,3})(\s?\d{3})*((\.|,)\d{1,2})?)|(-?(\d{1,3})(\s?\d{3})*((\.|,)\d{1,2})?(\s?(\$|\u20AC|\u20A4|\u00A3|\u00A5))?)|(((\$|\u20AC|\u20A4|\u00A3|\u00A5)\s?)?-?(\d{1,3})(,\d{3})*(\.\d{1,2})?)|(-?(\d{1,3})(,\d{3})*(\.\d{1,2})?(\s?(\$|\u20AC|\u20A4|\u00A3|\u00A5))?))$/i;if(A.match(C)){B=true}return B},isDate:function(B,H){var L=false,D=(H===true||!H)?Validator.defaultDateFormat:H.toLowerCase();if(!Validator._isRegexp(D,Validator.regexpDateFormat,false)){throw ("isDate : Invalid date format provided");return false}var A=$A(D).find(function(N){return(N=="/"||N=="-"||N==".")}),M=D.split(A),K=B.split(A);var F=M.indexOf("yyyy"),I=M.indexOf("mm"),C=M.indexOf("dd");if(K.length==3&&K.all(function(N){return Validator.isInteger(N)})){var J=parseInt(K[F],10),G=parseInt(K[I],10),E=parseInt(K[C],10);if(G>=1&&G<=12){if(E>=1&&E<=Validator._daysInMonth(G,J)){L=true}}}return L},isInRange:function(C,B){bValid=false;var A=Object.extend({min:null,max:null},B||{});if(Validator.isFloat(C)){var D=parseFloat(C.replace(",","."));if((A.min===null||D>=A.min)&&(A.max===null||D<=A.max)){bValid=true}}return bValid},isPhoneNumber:function(A){return Validator._isRegexp(A,Validator.regexpPhoneNumber,true)},isWebColor:function(A){return Validator._isRegexp(A,Validator.regexpWebColor,true)},isUrl:function(A){return Validator._isRegexp(A,Validator.regexpUrl,true)},isEmail:function(A){return Validator._isRegexp(A,Validator.regexpEmail,true)},isPostalCode:function(A){return Validator._isRegexp(A,Validator.regexpPostalCode,true)},isZipCode:function(A){return Validator._isRegexp(A,Validator.regexpZipCode,true)},isFilename:function(B){var A=B.substring(B.lastIndexOf("\\")+1);return Validator._isRegexp(A,Validator.regexpFilename,true)},isValidPassword:function(B,E){var F=Object.extend({minLength:4,maxLength:10,digitRequired:true,lowerRequired:true,upperRequired:true,specialRequired:false,spaceAllowed:false},E||{});var J="\\d",G="[a-z]",A="[A-Z]",D="\\s",C='[|!"/%&_@;,<>{}~\\-\\(\\)\\*\\+\\$\\?\\.]',I=true,H=B;if(I&&(H.length<F.minLength||H.length>F.maxLength)){I=false}if(I&&(!F.spaceAllowed&&Validator._isRegexp(H,D,true))){I=false}if(I&&(F.digitRequired&&!Validator._isRegexp(H,J,true))){I=false}if(I&&(F.lowerRequired&&!Validator._isRegexp(H,G,false))){I=false}if(I&&(F.upperRequired&&!Validator._isRegexp(H,A,false))){I=false}if(I&&(F.specialRequired&&!Validator._isRegexp(H,C,true))){I=false}return I},_daysInMonth:function(C,D){var B=(((D%4==0)&&((!(D%100==0))||(D%400==0)))?29:28),A=[31,B,31,30,31,30,31,31,30,31,30,31];return A[C-1]},_isRegexp:function(D,F,C){var A=true,E=C?"i":"",B=(Object.isArray(F)?F:[F]);B.each(function(G){var H=new RegExp(G,E);if(A&&!H.test(D)){A=false}});return A}});