/**
 * $Id: validate.js 18 2006-06-29 14:11:23Z spocke $
 *
 * Various form validation methods.
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
 */
var Validator={isEmail:function(a){return this.test(a,"^[-!#$%&'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&'*+\\/0-9=?A-Z^_`a-z{|}~]+.[-!#$%&'*+\\./0-9=?A-Z^_`a-z{|}~]+$")},isAbsUrl:function(a){return this.test(a,"^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$")},isSize:function(a){return this.test(a,"^[0-9]+(px|%)?$")},isId:function(a){return this.test(a,"^[A-Za-z_]([A-Za-z0-9_])*$")},isEmpty:function(c){var a,b;if(c.nodeName=="SELECT"&&c.options[c.selectedIndex].value==""){return true}if(c.type=="checkbox"&&!c.checked){return true}if(c.type=="radio"){for(b=0,a=c.form.elements;b<a.length;b++){if(a[b].type=="radio"&&a[b].name==c.name&&a[b].checked){return false}}return true}return new RegExp("^\\s*$").test(c.nodeType==1?c.value:c)},isNumber:function(a,b){return !isNaN(a.nodeType==1?a.value:a)&&(!b||!this.test(a,"^-?[1-9]*\\.[1-9]*$"))},isDateTime:function(g,h){var b=new Array(),a,e,d,j;if(this.isEmpty(g=g.nodeType==1?g.value:g)){return true}h=h.replace(/[\.\*\?\-\[\]\{\}\/\\\x22\x27]/g,function(f,c){return"\\"+f});h=h.replace(/(YYYY|mm|dd|hh|ii|ss|HH|g|AA|aa)/g,function(f,c){b.push(f);if(f=="AA"||f=="aa"){return f=="AA"?"(AM|PM)":"(am|pm)"}return"([0-9]{"+(f=="YYYY"?4:(f=="g"?"1,2":2))+"})"});for(e=1,j=0,a=new RegExp("^"+h+"$").exec(g);a&&e<a.length;e++){r=b[e-1];d=parseInt(a[e]);j+=r=="mm"&&(d<1||d>12);j+=r=="dd"&&(d<1||d>31)}return a&&j<1},test:function(a,b){a=a.nodeType==1?a.value:a;return a==""||new RegExp(b).test(a)}};var AutoValidator={customTypes:new Array(),settings:{id_cls:"id",int_cls:"int",url_cls:"url",number_cls:"number",email_cls:"email",size_cls:"size",required_cls:"required",invalid_cls:"invalid",min_cls:"min",max_cls:"max",confirm_cls:"confirm",confirmmsg_cls:"confirmmsg",notconfirmed_cls:"notconfirmed",date_cls:"date",time_cls:"time",datetime_cls:"datetime",date_format:"dd.mm.YYYY",time_format:"HH:ii",datetime_format:"YYYY-mm-dd HH:ii"},init:function(a){var b;for(b in a){this.settings[b]=a[b]}},addCustomType:function(b,a){this.customTypes.push({cls:b,func:a})},validate:function(e){var b,a,d=this.settings,g=0;a=this.tags(e,"label");for(b=0;b<a.length;b++){this.removeClass(a[b],d.invalid_cls)}g+=this.markGroups(e);g+=this.validateElms(e,"input");g+=this.validateElms(e,"select");g+=this.validateElms(e,"textarea");this.markLabels(e,e,g==3?"":d.invalid_cls);return g==3},invalidate:function(a){this.mark(a.form,a)},reset:function(g){var d=new Array("label","input","select","textarea");var c,b,a,f=this.settings;if(g==null){return}for(c=0;c<d.length;c++){a=this.tags(g.form?g.form:g,d[c]);for(b=0;b<a.length;b++){this.removeClass(a[b],f.invalid_cls);this.removeClass(a[b],f.notconfirmed_cls)}}},markGroups:function(j){var c,e,b,a,g=this.settings,d,h=0;c=this.tags(j,"div");for(e=0;e<c.length;e++){d=0;if(this.hasClass(c[e],g.required_cls)){if(this.hasClass(c[e],g.required_cls)){a=this.tags(c[e],"input");for(b=0;b<a.length;b++){if(a[b].checked||!Validator.isEmpty(a[b])){d=1;break}}}if(!d){h+=!this.mark(j,c[e])}}}return h},validateElms:function(g,h){var a,c,b,o=this.settings,d=this.customTypes,m=true,j=Validator,l,k;a=this.tags(g,h);for(c=0;c<a.length;c++){b=a[c];this.removeClass(b,o.invalid_cls);if(this.hasClass(b,o.required_cls)&&j.isEmpty(b)){m=this.mark(g,b)}if(this.hasClass(b,o.notconfirmed_cls)){this.removeClass(b,o.confirm_cls);this.removeClass(b,o.notconfirmed_cls);this.markLabels(g,b,"",o.notconfirmed_cls)}if(this.hasClass(b,o.confirm_cls)&&j.isEmpty(b)){this.addClass(b,o.notconfirmed_cls);m=this.markLabels(g,b,o.notconfirmed_cls,0,o.confirmmsg_cls)}if(this.hasClass(b,o.number_cls)&&!j.isNumber(b)){m=this.mark(g,b)}if(this.hasClass(b,o.int_cls)&&!j.isNumber(b,true)){m=this.mark(g,b)}if(this.hasClass(b,o.url_cls)&&!j.isAbsUrl(b)){m=this.mark(g,b)}if(this.hasClass(b,o.email_cls)&&!j.isEmail(b)){m=this.mark(g,b)}if(this.hasClass(b,o.size_cls)&&!j.isSize(b)){m=this.mark(g,b)}if(this.hasClass(b,o.id_cls)&&!j.isId(b)){m=this.mark(g,b)}if(this.hasClass(b,o.min_cls,true)){l=this.getNum(b,o.min_cls);if(isNaN(l)||parseInt(b.value)<parseInt(l)){m=this.mark(g,b)}}if(this.hasClass(b,o.max_cls,true)){l=this.getNum(b,o.max_cls);if(isNaN(l)||parseInt(b.value)>parseInt(l)){m=this.mark(g,b)}}if(this.hasClass(b,o.date_cls)&&!j.isDateTime(b,o.date_format)){m=this.mark(g,b)}if(this.hasClass(b,o.time_cls)&&!j.isDateTime(b,o.time_format)){m=this.mark(g,b)}if(this.hasClass(b,o.datetime_cls)&&!j.isDateTime(b,o.datetime_format)){m=this.mark(g,b)}for(k=0;k<d.length;k++){if(this.hasClass(b,d[k].cls)&&!d[k].func(b)){m=this.mark(g,b)}}}return m},hasClass:function(e,b,a){return new RegExp("\\b"+b+(a?"[\\-?0-9]+":"")+"\\b","g").test(e.className)},getNum:function(b,a){a=b.className.match(new RegExp("\\b"+a+"\\-?([0-9]+)\\b","g"))[0];a=a.replace(/[^0-9\-]/g,"");return a},addClass:function(f,e,a){var d=this.removeClass(f,e);f.className=a?e+(d!=""?(" "+d):""):(d!=""?(d+" "):"")+e},removeClass:function(b,a){a=b.className.replace(new RegExp("(^|\\s+)"+a+"(\\s+|$)")," ");return b.className=a!=" "?a:""},tags:function(b,a){return b.getElementsByTagName(a)},mark:function(b,c){var a=this.settings;this.addClass(c,a.invalid_cls);this.markLabels(b,c,a.invalid_cls);return false},markLabels:function(e,h,a,d,g){var b,c;b=this.tags(e,"label");for(c=0;c<b.length;c++){if((b[c].getAttribute("for")==h.id||b[c].htmlFor==h.id)&&(!g||this.hasClass(b[c],g))){!d||this.removeClass(b[c],d);!a||this.addClass(b[c],a)}}return false}};
