/*
*  Creospace Jquery Validator plugin
*  (C) Creospace Limited 2010/2011
*/

validate={       
    email: function(input)
    {
        if(!$(input).val().toLowerCase().match("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"))
            return this._process(input,"Enter a valid email address.");
    },
    confirmemail: function(input)
    {
        if($(input).prevAll("input.email").val()!=$(input).val())
            return this._process(input,"Emails must match.");
    },
    notempty: function(input)
    {
        if($(input).val().length<1)
            return this._process(input,"Must be filled in.");
    },
    postcode: function(input)
    {
        $(input).val($(input).val().toUpperCase());
        
        if(!$(input).val().match("^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$"))
            return this._process(input,"Invalid Postcode");
    },
    date: function(input)
    {
        if(!$(input).val().match("^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)[0-9]{2}$"))
            return this._process(input,"Invalid Date (dd/mm/yyyy required)");
    },
    dropdown: function(input)
    {
        if($(input).val().length>1)
        {
            if($(input).val()==-1)
                return this._process(input,"Please Select an Option");
        }        
    },
    password: function(input)
    {
        if($(input).val()>0 && $(input).val().length<5)
            return this._process(input,"Must be more than 5 chars.");        
    },
    confirmpassword: function(input)
    {
        if($(input).prevAll("input.password").val()!=$(input).val())
            return this._process(input,"Passwords must match.");
    },
    _process: function(input, message)
    {        
        $(input).attr("title",message).tooltip({
            cancelDefault: true,
            position: 'right',
            tipClass: 'tooltip_validate',
            effect: 'fade',
            offset: [38,0]
        });

        $(input).unbind().data("tooltip").show();
    
        return 1;
    } 
};
    
jQuery.fn.validator=function()
{
    $(this).submit(
        function(e)
        {
            e.preventDefault();

            var errors=0;
            
            $(".tooltip_validate").fadeOut().remove();
            
            $(this).find("input:not(input:submit), select").each(
                function()
                {
                    $(this).unbind().removeData("tooltip");
                    var classes=$(this).attr("class").split(" ");
                    
                    for(var i=0; i<classes.length; i++)
                    {
                        if($.trim(classes[i]).length)
                        {
                            if(classes[i]!="_process" && $.isFunction(validate[classes[i]]))
                            {
                                if(!isNaN(validate[classes[i]](this)))
                                    errors++;
                            }
                        }
                    }
                }
            );

            if(!errors)
               $(this).unbind().submit();
        }
    );
}
