Vanadium={};Vanadium.Version="0.1";Vanadium.CompatibleWithJQuery="1.3.2";Vanadium.Type="jquery";jQuery().jquery.indexOf(Vanadium.CompatibleWithJQuery)!=0&&window.console&&window.console.warn&&console.warn("This version of Vanadium is tested with jQuery "+Vanadium.CompatibleWithJQuery+" it may not work as expected with this version ("+jQuery().jquery+")");Vanadium.each=jQuery.each;Vanadium.all_elements=function(){return jQuery("*")}; Vanadium.partition=function(a,b){var c=[],d=[];Vanadium.each(a,function(){b(this)?c.push(this):d.push(this)});return[c,d]};var HashMap=function(){this.initialize()};HashMap.hashmap_instance_id=0; HashMap.prototype={hashkey_prefix:"<#HashMapHashkeyPerfix>",hashcode_field:"<#HashMapHashcodeField>",initialize:function(){this.backing_hash={};this.code=0;HashMap.hashmap_instance_id+=1;this.instance_id=HashMap.hashmap_instance_id},hashcodeField:function(){return this.hashcode_field+this.instance_id},put:function(a,b){var c;if(a&&b){var d;if(d=typeof a==="number"||typeof a==="string"?a:a[this.hashcodeField()])c=this.backing_hash[d];else{this.code+=1;d=this.hashkey_prefix+this.code;a[this.hashcodeField()]= d}this.backing_hash[d]=[a,b]}return c===undefined?undefined:c[1]},get:function(a){var b;if(a)if(a=typeof a==="number"||typeof a==="string"?a:a[this.hashcodeField()])b=this.backing_hash[a];return b===undefined?undefined:b[1]},del:function(a){var b=false;if(a){var c;if(c=typeof a==="number"||typeof a==="string"?a:a[this.hashcodeField()]){var d=this.backing_hash[c];this.backing_hash[c]=undefined;if(d!==undefined){a[this.hashcodeField()]=undefined;b=true}}}return b},each:function(a){var b;for(b in this.backing_hash)if(a.call(this.backing_hash[b][1], this.backing_hash[b][0],this.backing_hash[b][1])===false)break;return this},toString:function(){return"HashMapJS"}};Vanadium.containers=new HashMap;var ContainerValidation=function(a){this.initialize(a)}; ContainerValidation.prototype={initialize:function(a){this.html_element=a;this.elements=[]},add_element:function(a){this.elements.push(a)},decorate:function(){var a=null;for(var b in this.elements)if(this.elements[b].invalid===undefined)a=undefined;else if(this.elements[b].invalid===true){a=false;break}else if(this.elements[b].invalid===false&&a===null)a=true;if(a===undefined){jQuery(this.html_element).removeClass(Vanadium.config.invalid_class);jQuery(this.html_element).removeClass(Vanadium.config.valid_class)}else if(a){jQuery(this.html_element).removeClass(Vanadium.config.invalid_class); jQuery(this.html_element).addClass(Vanadium.config.valid_class)}else{jQuery(this.html_element).removeClass(Vanadium.config.valid_class);jQuery(this.html_element).addClass(Vanadium.config.invalid_class)}}};var VanadiumForm=function(a){this.initialize(a)};Vanadium.forms=new HashMap;VanadiumForm.add_element=function(a){var b=a.element.form;if(b){var c=Vanadium.forms.get(b);if(c)c.validation_elements.push(a);else{c=new VanadiumForm(a);Vanadium.forms.put(b,c)}}}; VanadiumForm.prototype={initialize:function(a){this.validation_elements=[a];this.form=a.element.form;var b=this,c=function(){var d=true;b.validate().each(function(e,f){for(var g in f)if(f[g].success==false){d=false;break}if(d==false)return false});if(!d){b.decorate();return false}return d};jQuery(this.form).find(":submit").click(function(){return c()});this.form.decorate=function(){b.decorate()}},validate:function(){var a=new HashMap;Vanadium.each(this.validation_elements,function(){a.put(this,this.validate())}); return a},decorate:function(a){if(arguments.length==0)a=this.validate();a.each(function(b,c){b.decorate(c)})},validateAndDecorate:function(){this.decorate(this.validate())}};Vanadium.validators_types={};Vanadium.elements_validators_by_id={};Vanadium.all_elements_validators=[];Vanadium.created_advices=[];Vanadium.all_html_elements=new HashMap; Vanadium.config={valid_class:"vanadium-valid",invalid_class:"vanadium-invalid",message_value_class:"vanadium-message-value",advice_class:"vanadium-advice",prefix:":",separator:";",reset_defer_timeout:100};Vanadium.empty_advice_marker_class="-vanadium-empty-advice-";Vanadium.rules={};Vanadium.init=function(){this.setupValidatorTypes();this.scan_dom()};Vanadium.addValidatorType=function(a,b,c,d,e){this.validators_types[a]=new Vanadium.Type(a,b,c,d,e)}; Vanadium.addValidatorTypes=function(a){var b=this;Vanadium.each(a,function(){Vanadium.addValidatorType.apply(b,this)})}; Vanadium.scan_dom=function(){Vanadium.each(Vanadium.all_elements(),function(a,b){a=b.className.split(" ");if(Vanadium.is_input_element(b)){var c=new ElementValidation(b);if(b.id)Vanadium.elements_validators_by_id[b.id]=c;Vanadium.all_elements_validators.push(c);Vanadium.all_html_elements.put(b,c);VanadiumForm.add_element(c);Vanadium.each(a,function(){var d=Vanadium.parse_class_name(this);if(d){Vanadium.add_validation_instance(c,d);Vanadium.add_validation_modifier(c,d)}});Vanadium.each(Vanadium.get_rules(b.id), function(){var d=this;if(d){Vanadium.add_validation_instance(c,d);Vanadium.add_validation_modifier(c,d)}});c.setup()}else Vanadium.add_validation_container(b)})}; Vanadium.add_validation_container=function(a){var b=a.className.split(" ");Vanadium.each(b,function(){if(Vanadium.parse_class_name(this)[0]=="container"){Vanadium.containers.put(a,new ContainerValidation(a));return true}});Vanadium.each(Vanadium.get_rules(a.id),function(){if(this=="container"){Vanadium.containers.put(a,new ContainerValidation(a));return true}})}; Vanadium.get_rules=function(a){var b=function(e){if(typeof e==="string")return[e];else if(Vanadium.isArray(e))return e;else if(typeof e==="object")return[e.validator,e.parameter,e.advice]},c=[];a=Vanadium.rules[a];if(typeof a==="undefined")return[];else if(typeof a==="string")c.push(a);else if(Vanadium.isArray(a))for(var d in a)c.push(b(a[d]));else typeof a==="object"&&c.push(b(a));return c}; Vanadium.parse_class_name=function(a){if(a.indexOf(Vanadium.config.prefix)==0){a=a.substr(Vanadium.config.prefix.length).split(Vanadium.config.separator);for(var b in a)if(a[b]=="")a[b]=undefined;return a}else return[]};Vanadium.add_validation_instance=function(a,b){var c=b[1],d=b[2];(b=Vanadium.validators_types[b[0]])&&a.add_validation_instance(b,c,d)}; Vanadium.add_validation_modifier=function(a,b){var c=b[0];b=b[1];if(c=="only_on_blur"||c=="only_on_submit"||c=="wait"||c=="advice")a.add_validation_modifier(c,b)};Vanadium.validate=function(){var a=new HashMap;Vanadium.each(Vanadium.all_elements_validators,function(){a.put(this,this.validate())});return a};Vanadium.validateAndDecorate=function(a){if(typeof a==="undefined")Vanadium.decorate(Vanadium.validate());else if(a.nodeType==1)(a=Vanadium.all_html_elements.get(a)||Vanadium.forms.get(a))&&a.validateAndDecorate(false)}; Vanadium.decorate=function(a){if(typeof a==="object")if(a.toString()=="HashMapJS")a.each(function(d,e){d.decorate(e)});else{var b;for(b in a){var c=Vanadium.elements_validators_by_id[b];c&&c.decorate(a[b])}}};Vanadium.reset=function(){Vanadium.each(Vanadium.all_elements_validators,function(){this.reset()})};Vanadium.isArray=function(a){return a!=null&&typeof a=="object"&&"splice"in a&&"join"in a};Vanadium.isFunction=function(a){return a!=null&&a.toString()==="[object Function]"}; Vanadium.extend=function(){for(var a=[Vanadium],b=0;b<arguments.length;b++)a.push(arguments[b]);return jQuery.extend.apply(jQuery,a)};Vanadium.bind=function(a,b){return function(){return a.apply(b,arguments)}}; Vanadium.extend({getElementType:function(a){switch(true){case a.nodeName.toUpperCase()=="TEXTAREA":return Vanadium.TEXTAREA;case a.nodeName.toUpperCase()=="INPUT"&&a.type.toUpperCase()=="TEXT":return Vanadium.TEXT;case a.nodeName.toUpperCase()=="INPUT"&&a.type.toUpperCase()=="PASSWORD":return Vanadium.PASSWORD;case a.nodeName.toUpperCase()=="INPUT"&&a.type.toUpperCase()=="CHECKBOX":return Vanadium.CHECKBOX;case a.nodeName.toUpperCase()=="INPUT"&&a.type.toUpperCase()=="FILE":return Vanadium.FILE;case a.nodeName.toUpperCase()== "SELECT":return Vanadium.SELECT;case a.nodeName.toUpperCase()=="INPUT":throw new Error("Vanadium::getElementType - Cannot use Vanadium on an "+a.type+" input!");default:throw new Error("Vanadium::getElementType - Element must be an input, select, or textarea!");}},is_input_element:function(a){return a.nodeName.toUpperCase()=="TEXTAREA"||a.nodeName.toUpperCase()=="INPUT"&&a.type.toUpperCase()=="TEXT"||a.nodeName.toUpperCase()=="INPUT"&&a.type.toUpperCase()=="PASSWORD"||a.nodeName.toUpperCase()=="INPUT"&& a.type.toUpperCase()=="CHECKBOX"||a.nodeName.toUpperCase()=="INPUT"&&a.type.toUpperCase()=="FILE"||a.nodeName.toUpperCase()=="SELECT"},createAdvice:function(a,b,c){var d=document.createElement("span");d.id=b;b=document.createTextNode(c);d.appendChild(b);a.parentNode.insertBefore(d,a.nextSibling);this.created_advices.push(d)},addValidationClass:function(a,b){if(a){this.removeValidationClass(a);a.className+=b?" "+Vanadium.config.valid_class:" "+Vanadium.config.invalid_class}},removeValidationClass:function(a){if(a){if(a.className.indexOf(Vanadium.config.invalid_class)!= -1)a.className=a.className.split(Vanadium.config.invalid_class).join(" ");if(a.className.indexOf(Vanadium.config.valid_class)!=-1)a.className=a.className.split(Vanadium.config.valid_class).join(" ")}},TEXTAREA:1,TEXT:2,PASSWORD:3,CHECKBOX:4,SELECT:5,FILE:6});ElementValidation=function(a){this.initialize(a)}; ElementValidation.prototype={initialize:function(a){this.virgin=true;this.element=a;this.validations=[];this.only_on_submit=this.only_on_blur=false;this.wait=100;this.created_advices=[];this.decorated=false;this.containers=null;this.advice_id=this.invalid=undefined},add_validation_instance:function(a,b,c){this.validations.push(new Validation(this.element,a,b,c))},add_validation_modifier:function(a,b){if(a=="only_on_blur")this.only_on_blur=true;else if(a=="only_on_submit")this.only_on_submit=true; else if(a=="wait"){a=parseInt(b);if(a!=NaN&&typeof a==="number")this.wait=a}else if(a=="advice")if(document.getElementById(b))this.advice_id=b},element_containers:function(){if(this.containers===null){this.containers=new HashMap;for(var a=this.element.parentNode;a!=document;){var b=Vanadium.containers.get(a);if(b){b.add_element(this);this.containers.put(a,b)}a=a.parentNode}}return this.containers},validate:function(a,b){var c=[];Vanadium.each(this.validations,function(){c.push(this.validate(a,b))}); return c},decorate:function(a,b){b||this.reset();this.decorated=true;var c=this;b=Vanadium.partition(a,function(d){return d.success});a=b[0];b=b[1];if(b.length>0){this.invalid=true;Vanadium.addValidationClass(this.element,false)}else if(a.length>0&&!this.invalid){this.invalid=false;Vanadium.addValidationClass(this.element,true)}else this.invalid=undefined;this.element_containers().each(function(d,e){e.decorate()});Vanadium.each(b,function(d,e){d=undefined;if(c.advice_id)d=document.getElementById(c.advice_id); if(d||e.advice_id)if(d=d||document.getElementById(e.advice_id)){jQuery(d).addClass(Vanadium.config.advice_class);if(d.childNodes.length==0||jQuery(d).hasClass(Vanadium.empty_advice_marker_class)){jQuery(d).addClass(Vanadium.empty_advice_marker_class);jQuery(d).append("<span>"+e.message+"</span>")}jQuery(d).show()}else d=c.create_advice(e);else d=c.create_advice(e);Vanadium.addValidationClass(d,false)})},validateAndDecorate:function(a){if(!a||!this.virgin)this.decorate(this.validate(this,this.decorate))}, create_advice:function(a){var b=document.createElement("span");this.created_advices.push(b);jQuery(b).addClass(Vanadium.config.advice_class);jQuery(b).html(a.message);jQuery(this.element).after(b);return b},reset:function(){this.invalid=undefined;var a=document.getElementById(this.advice_id);if(a){jQuery(a).hasClass(Vanadium.empty_advice_marker_class)&&jQuery(a).empty();jQuery(a).hide()}Vanadium.each(this.validations,function(){var b=document.getElementById(this.adviceId);if(b){jQuery(b).hasClass(Vanadium.empty_advice_marker_class)&& jQuery(b).empty();jQuery(b).hide()}});for(a=this.created_advices.pop();a!==undefined;){jQuery(a).remove();a=this.created_advices.pop()}Vanadium.removeValidationClass(this.element)},deferValidation:function(){this.wait>=300&&this.reset();var a=this;a.timeout&&clearTimeout(a.timeout);a.timeout=setTimeout(function(){jQuery(a.element).trigger("validate")},a.wait)},deferReset:function(){var a=this;a.reset_timeout&&clearTimeout(a.reset_timeout);a.reset_timeout=setTimeout(function(){a.reset()},Vanadium.config.reset_defer_timeout)}, setup:function(){var a=this;this.elementType=Vanadium.getElementType(this.element);this.form=this.element.form;this.element_containers();if(!this.only_on_submit){this.observe();jQuery(a.element).bind("validate",function(){a.validateAndDecorate.call(a,true)});jQuery(a.element).bind("defer_validation",function(){a.deferValidation.call(a)});jQuery(a.element).bind("reset",function(){a.reset.call(a)})}},observe:function(){var a=this.element,b=Vanadium.getElementType(a),c=this;jQuery(a).focus(function(){c.virgin= false});switch(b){case Vanadium.CHECKBOX:jQuery(a).click(function(){c.virgin=false;jQuery(c.element).trigger("validate")});break;case Vanadium.SELECT:case Vanadium.FILE:jQuery(a).change(function(){jQuery(a).trigger("validate")});break;default:jQuery(a).keydown(function(d){d.keyCode!=9&&jQuery(a).trigger("reset")});this.only_on_blur||jQuery(a).keyup(function(d){d.keyCode!=9&&jQuery(a).trigger("defer_validation")});jQuery(a).blur(function(){jQuery(a).trigger("validate")})}}}; var Validation=function(a,b,c,d){this.initialize(a,b,c,d)}; Validation.prototype={initialize:function(a,b,c,d){this.element=a;this.validation_type=b;this.param=c;this.adviceId=d;(a=document.getElementById(d))&&jQuery(a).addClass(Vanadium.config.advice_class);this.validation_type.init&&this.validation_type.init(this)},emmit_message:function(a){if(typeof a==="string")return a;else if(typeof a==="function")return a.call(this,jQuery(this.element).val(),this.param)},validMessage:function(){return this.emmit_message(this.validation_type.validMessage())||"ok"},invalidMessage:function(){return this.emmit_message(this.validation_type.invalidMessage())|| "error"},test:function(a,b){return this.validation_type.validationFunction.call(this,jQuery(this.element).val(),this.param,this,a,b)},validate:function(a,b){var c={success:false,message:"Received invalid return value."};a=this.test(a,b);if(typeof a==="boolean")return{success:a,advice_id:this.adviceId,message:a?this.validMessage():this.invalidMessage()};else typeof a==="object"&&jQuery.extend.apply(c,a);return c}};Vanadium.Type=function(a,b,c,d,e){this.initialize(a,b,c,d,e)}; Vanadium.Type.prototype={initialize:function(a,b,c,d,e){this.className=a;this.message=d;this.error_message=c;this.validationFunction=b;this.init=e},test:function(a){return this.validationFunction.call(this,a)},validMessage:function(){return this.message},invalidMessage:function(){return this.error_message},toString:function(){return"className:"+this.className+" message:"+this.message+" error_message:"+this.error_message},init:function(a){this.init&&this.init(a)}}; Vanadium.setupValidatorTypes=function(){Vanadium.addValidatorType("empty",function(a){return a==null||a.length==0});Vanadium.addValidatorTypes([["equal",function(a,b){return a==b},function(a,b){return'The value should be equal to <span class="'+Vanadium.config.message_value_class+'">'+b+"</span>."}],["equal_ignore_case",function(a,b){return a.toLowerCase()==b.toLowerCase()},function(a,b){return'The value should be equal to <span class="'+Vanadium.config.message_value_class+'">'+b+"</span>."}],["required", function(a){return!Vanadium.validators_types.empty.test(a)},"This is a required field."],["accept",function(a,b,c){return c.element.checked},"Must be accepted!"],["integer",function(a){if(Vanadium.validators_types.empty.test(a))return true;var b=parseFloat(a);return!isNaN(b)&&b.toString()==a&&Math.round(b)==b},"Please enter a valid integer in this field."],["number",function(a){return Vanadium.validators_types.empty.test(a)||!isNaN(a)&&!/^\s+$/.test(a)},"Please enter a valid number in this field."], ["float",function(a){return Vanadium.validators_types.empty.test(a)||!isNaN(a)&&!/^\s+$/.test(a)},"Please enter a valid number in this field."],["digits",function(a){return Vanadium.validators_types.empty.test(a)||!/[^\d]/.test(a)},"Please use numbers only in this field. please avoid spaces or other characters such as dots or commas."],["alpha",function(a){return Vanadium.validators_types.empty.test(a)||/^[a-zA-Z\u00C0-\u00FF\u0100-\u017E\u0391-\u03D6]+$/.test(a)},"Please use letters only in this field."], ["asciialpha",function(a){return Vanadium.validators_types.empty.test(a)||/^[a-zA-Z]+$/.test(a)},"Please use ASCII letters only (a-z) in this field."],["alphanum",function(a){return Vanadium.validators_types.empty.test(a)||!/\W/.test(a)},"Please use only letters (a-z) or numbers (0-9) only in this field. No spaces or other characters are allowed."],["date",function(a){var b=new Date(a);return Vanadium.validators_types.empty.test(a)||!isNaN(b)},"Please enter a valid date."],["email",function(a){return Vanadium.validators_types.empty.test(a)|| /\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(a)},"Please enter a valid email address."],["url",function(a){return Vanadium.validators_types.empty.test(a)||/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(a)},"Please enter a valid URL."],["date_au",function(a){if(Vanadium.validators_types.empty.test(a))return true;var b=/^(\d{2})\/(\d{2})\/(\d{4})$/;if(!b.test(a))return false;a=new Date(a.replace(b,"$2/$1/$3"));return parseInt(RegExp.$2,10)==1+a.getMonth()&& parseInt(RegExp.$1,10)==a.getDate()&&parseInt(RegExp.$3,10)==a.getFullYear()},"Please use this date format: dd/mm/yyyy. For example 17/03/2006 for the 17th of March, 2006."],["currency_dollar",function(a){return Vanadium.validators_types.empty.test(a)||/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(a)},"Please enter a valid $ amount. For example $100.00 ."],["selection",function(a,b){return b.options?b.selectedIndex>0:!Vanadium.validators_types.empty.test(a)}, "Please make a selection"],["one_required",function(a,b){a=jQuery('input[name="'+b.name+'"]');return some(a,function(c){return getNodeAttribute(c,"value")})},"Please select one of the above options."],["length",function(a,b){return b===undefined?true:a.length==parseInt(b)},function(a,b){return'The value should be <span class="'+Vanadium.config.message_value_class+'">'+b+"</span>  characters long."}],["min_length",function(a,b){return b===undefined?true:a.length>=parseInt(b)},function(a,b){return'The value should be at least <span class="'+ Vanadium.config.message_value_class+'">'+b+"</span> characters long."}],["max_length",function(a,b){return b===undefined?true:a.length<=parseInt(b)},function(a,b){return'The value should be at most <span class="'+Vanadium.config.message_value_class+'">'+b+"</span>  characters long."}],["same_as",function(a,b){if(b===undefined)return true;else return(b=document.getElementById(b))?a==b.value:false},function(a,b){return(a=document.getElementById(b))?'The value should be the same as <span class="'+Vanadium.config.message_value_class+ '">'+(jQuery(a).attr("name")||a.id)+"</span> .":"There is no exemplar item!!!"},"",function(a){var b=document.getElementById(a.param);b&&jQuery(b).bind("validate",function(){jQuery(a.element).trigger("validate")})}],["ajax",function(a,b,c,d,e){if(Vanadium.validators_types.empty.test(a))return true;d&&e&&jQuery.getJSON(b,{value:a,id:c.element.id},function(f){e.apply(d,[[f],true])});return true}],["format",function(a,b){var c=b.match(/^\/(((\\\/)|[^\/])*)\/(((\\\/)|[^\/])*)$/);if(c.length==7){b=c[1]; c=c[4];try{return(new RegExp(b,c)).test(a)}catch(d){return false}}else return false},function(a,b){a=b.split("/");return a.length==3&&a[0]==""?'The value should match the <span class="'+Vanadium.config.message_value_class+'">'+b.toString()+"</span>  pattern.":'provided parameter <span class="'+Vanadium.config.message_value_class+'">'+b.toString()+"</span>  is not valid Regexp pattern."}]]);typeof VanadiumCustomValidationTypes!=="undefined"&&VanadiumCustomValidationTypes&&Vanadium.addValidatorTypes(VanadiumCustomValidationTypes)}; jQuery(document).ready(function(){typeof VanadiumConfig==="object"&&VanadiumConfig&&Vanadium.each(VanadiumConfig,function(a,b){Vanadium.config[a]=b});typeof VanadiumRules==="object"&&VanadiumRules&&Vanadium.each(VanadiumRules,function(a,b){Vanadium.rules[a]=b});Vanadium.init()});

