/*
 * Web Forms 0.3.7 - jQuery plugin
 * 
 * Copyright (c) 2007 - 2008 Scott Gonzalez
 * 
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */
(function(F){function A(M){var L=0;F('input[name="'+M+'"]').each(function(){if(F(this).is(":checked")){L++}});return L}function K(L){return/^-?\d*\.?\d+(e-?\d+)?$/.test(L)}var D={typeMismatch:false,rangeUnderflow:false,rangeOverflow:false,stepMismatch:false,tooLong:false,patternMismatch:false,valueMissing:false,customError:false,valid:true};var H={typeMismatch:function(M){var L=F(M).attr("wftype");switch(L){case"email":return"Value must be an email address.";case"number":return"Value must be a number.";case"url":return"Value must be a URL."}},rangeUnderflow:function(L){return"Value may not be less than "+F(L).attr("min")+"."},rangeOverflow:function(L){return"Value may not be more than "+F(L).attr("max")+"."},stepMismatch:"Step mismatch.",tooLong:function(L){return"Value may not be more than "+F(L).attr("maxlength")+" characters."},patternMismatch:function(L){var M=F(L).attr("title");return(M?M:"Pattern mismatch")},valueMissing:"* required.",customError:function(L){return J(L).customErrorMessage}};var B={typeMismatch:function(L){var M=L.attr("wftype");var N=L.val();if(N!==""){switch(M){case"email":return/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|(\x22((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?\x22))@((([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])))\.?$/i.test(N);case"number":return K(N);case"url":return/^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\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])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\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})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([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})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([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(N)}}return true},rangeUnderflow:function(L){var M=L.attr("min");if((M!=="")&&K(M)){var N=L.val();if(K(N)){return(Number(M)<=Number(N))}}return true},rangeOverflow:function(M){var L=M.attr("max");if((L!=="")&&K(L)){var N=M.val();if(K(N)){return(Number(L)>=Number(N))}}return true},stepMismatch:function(L){var M=L.attr("step");if(M&&K(M)){var N=L.attr("min");if((N==="")||!K(N)){N=L.attr("max")}if((N!=="")&&K(N)){var O=L.val();if(K(O)){return(parseInt((O-N)/M,10)==((O-N)/M))}}}return true},tooLong:function(L){var M=L.attr("maxlength");if(M&&(M>0)){return(M>=L.val().length)}return true},patternMismatch:function(L){var N=L.attr("pattern");var O=L.val();if((N||(N===0))&&(O!=="")){var M=new RegExp("^(?:"+N+")$");if(!M.test(O)){return false}}return true},valueMissing:function(M){if(M.attr("required")){switch(M.attr("type")){case"checkbox":case"radio":var L=A(M.attr("name"));if(M.is(":checkbox")){return(L>=1)}else{return(L==1)}break;default:if(M.val()===""){return false}break}}return true}};var E=':input:not(:disabled):not([readonly]):not([type="hidden"]):not(:button):not(:reset):not(:submit)';function C(L){var M={willValidate:F(L).willValidate(),validity:F.extend({},D),customErrorMessage:""};F.data(L,"webForms",M);return M}function J(L){var M=F.data(L,"webForms");if(M===undefined){M=C(L)}return M}function I(M,N){var L=F(M);N.validity.valid=!N.validity.customError;F.each(B,function(P,O){N.validity.valid=!(N.validity[P]=!O(L))&&N.validity.valid})}function G(N,O){var L=F.extend({},O.validity);delete L.valid;var M="";F.each(L,function(Q,P){if(P){if(typeof H[Q]=="string"){M+=H[Q]+"\n"}else{if(F.isFunction(H[Q])){M+=H[Q](N)+"\n"}}}});return F.trim(M)}F.extend({webForms:{beforeValidate:function(L){},errorHandler:function(L){},validationMessages:function(L){F.extend(H,L)}},isDefaultSubmit:function(L){return L===F(L.form).find(":submit:first")[0]},isIndeterminate:function(L){return L.type=="radio"&&A(L.name)===0}});F.extend(F.expr[":"],{checked:'a.checked || a.selected || jQuery.attr(a, "selected")',indeterminate:"jQuery.isIndeterminate(a)","default":"jQuery.isDefaultSubmit(a) || a.defaultChecked || a.defaultSelected",valid:"jQuery(a).validity().valid",invalid:"!jQuery(a).validity().valid","in-range":"!jQuery(a).validity().typeMismatch && !jQuery(a).validity().rangeUnderflow && !jQuery(a).validity().rangeOverflow","out-of-range":"jQuery(a).validity().rangeUnderflow || jQuery(a).validity().rangeOverflow",required:'jQuery(a).attr("required")',optional:'/input|textarea/i.test(a.nodeName) && !/hidden|image|reset|submit|button/i.test(a.type) && !jQuery(a).attr("required")',"read-only":'jQuery(a).is("[readonly]")',"read-write":'!jQuery(a).is("[readonly]")'});F.fn.extend({willValidate:function(){return this.is(E)},validity:function(){if(this.length){return J(this[0]).validity}},setCustomValidity:function(M){M=M||"";var L=!!M;return this.each(function(){var N=J(this);N.customErrorMessage=M;N.validity.valid=!(N.validity.customError=L);for(e in B){N.validity.valid=N.validity.valid&&!N.validity[e]}F.data(this,"webForms",N)})},checkValidity:function(){if(this.length){var M=this[0];F.webForms.beforeValidate(M);if(F(M).is("form")){var L=true;F(E,M).each(function(){L=F(this).checkValidity()&&L});if(!L){F(":invalid:eq(0)",M)[0].focus()}return L}else{var N=J(M);if(N.willValidate){I(M,N);if(!N.validity.valid){if(F(M).triggerHandler("invalid")!==false){F.webForms.errorHandler(M)}}return N.validity.valid}}}},validationMessage:function(){var L="";if(this.length){var M=J(this[0]);if(!M.validity.valid){L=G(this[0],M)}}return L}})})(jQuery);

/*
 * Automatic setup for Web Forms plugin
 * 
 * Copyright (c) 2007 Scott Gonzalez
 * 
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */
(function($) {

$.extend($.webForms, {
    beforeValidate: function(elem) {
        $(':input', elem).add(elem).removeClass('error-input-highlight').next('div.error-validation-txt').remove();
    },
    
    errorHandler: function(elem) {
        $(elem).addClass('error-input-highlight').after(
            '<div class="error-validation-txt">' + $(elem).validationMessage() + '</div>');
    }
});

function initFormValidation() {
    if ($.fn.livequery) {
        $('form').livequery(function() {
            $(this).bind('submit', function() {
                return $(this).checkValidity();
            });
        });
    } else {
        $('form').bind('submit', function() {
            return $(this).checkValidity();
        });
    }
}

$(document).ready(function() {
    initFormValidation();
});

})(jQuery);
