/*********************************************************************************************/
/* BlakeMedia Library
/* "Validator" plugin
/*
/* DESC:    	Validates forms.
/* AUTHOR:		Jared Williams (BlakeMedia)
/* VERSION:		1.0
/* CREATED: 	25 October 2012
/* MODIFIED:	18 February 2013
/*
/* (c) Copyright 2002-2013 BlakeMedia & MediaIQ Group PLC
/*********************************************************************************************/
var validator=function(j){var v=this;this.instantiated=false;var D="",B=null,r=null,g=new Array(),x="change blur",e=null,E=function(){},k=function(){},y=function(){},z=function(){},l=true;function q(){b();if(!D){bm.logConsole("Form name not defined",LOG_ERROR_FATAL,v)}if(l){F()}}function b(){if("form" in j){D=j.form}if("onsubmit" in j){E=j.onsubmit}if("onvalid" in j){k=j.onvalid}if("oninvalid" in j){y=j.oninvalid}if("onupdate" in j){z=j.onupdate}if("custom" in j){e=j.custom}if("autoload" in j){l=j.autoload}bm.logConsole("Variables passed and filled",LOG_SYSTEM,v)}this.about=function(){return{name:"Validator",shortname:"validator",description:"Validates forms.",version:"1.0",library:"2.0",author:"Jared Williams (BlakeMedia)",datecreated:"25 Oct 2012",datemodified:"18 Feb 2013"}};function F(){t();p();d()}function t(){B=$("FORM[name="+D+"]");if(B){r=B.find("INPUT, TEXTAREA");if(!r.length){bm.logConsole("No inputs in form!",LOG_ERROR_FATAL,v)}}else{bm.logConsole('Form "'+D+'" does not exist!',LOG_ERROR_FATAL,v)}}function p(){B.submit(function(){E()});r.each(function(){$(this).bind(x,function(){var H=$(this),J=H.attr("name"),M=H.val();if(H.attr("data-validate")){z(H);var K=H.attr("data-validate").split(" ");for(i=0;i<K.length;i++){var I=K[i].split("-"),L=I[0],G=I[1];if(f(M,L,G)){k(H);s(J,true)}else{y(H);s(J,false);break}}}})})}function d(){B.submit(function(G){G.preventDefault();return false})}function s(H,G){g[H]=G}function u(){r.each(function(){$(this).trigger(x)})}function f(H,G,I){if(H){if(G){switch(G){case"required":return a(H);break;case"alphanum":case"alphanumeric":return c(H);break;case"alpha":return A(H);break;case"num":case"numeric":return w(H);break;case"email":return n(H);break;case"url":return m(H);break;case"phone":return C(H,I);break;case"currency":return o(H,I);break;default:return h(H,G,I)}}else{}}else{if(G!="required"){return true}}return false}function a(G){return(G.length>0)?true:false}function c(G){return/^[0-9a-zA-Z\s]+$/.test(G)}function A(G){return/^[a-zA-Z]*$/.test(G)}function w(G){return !isNaN(parseFloat(G))&&isFinite(G)}function n(G){return/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/.test(G)}function m(G){return/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(G)}function C(G,H){switch(H){default:return/^\+?[0-9]?[0-9 \(\)]*[0-9]$/.test(G)}return false}function o(G,H){switch(H){default:return/^[1-9]\d*(((,\d{3}){1})?(\.\d{0,2})?)$/.test(G)}return false}function h(H,G,I){if(e[G]){var J=e[G];return J(H)}return false}this.validateForm=function(H){u();r.each(function(){$(this).trigger("change")});for(var G in g){if(g[G]!=true){bm.logConsole("Form invalid",LOG_NOTICE,v);return false}}bm.logConsole("Form valid",LOG_NOTICE,v);return true};this.validate=function(G){return v.validateForm(G)};q()};