/*
 *  Version       : v1.0
 *  Author(s)     : Niels van Esch (n.vanesch /[at]/ extrawebdesign.nl)
 *  Company       : Extra-Webdesign
 *  Created on    : September 2010
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

$(document).ready(function(){

    /*
     * Email field
     */
    $("form.formvalidator :input.email").live("blur keyup", function(event){
        var validationBox = $(this).parent("div.formrow");
        if(event.type == "focusout" || event.type == "blur" || ($(".validation", validationBox).hasClass("error") == true) || ($(".validation", validationBox).hasClass("success") == true))
        {
            if( /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$/.test($(this).val()) == false)
            {
                if($(".validation", validationBox).hasClass("error") == false)
                {
                    $(".validation", validationBox).addClass("error");
                }
                if($(".validation_text.incorrect", validationBox).hasClass("error") == false)
                {
                    $(".validation_text.incorrect", validationBox).addClass("error");
                    $(".validation_text:not(.incorrect)", validationBox).removeClass("error");
                }
            }
            else if($(".validation_text:not(.incorrect).error", validationBox).length == 0)
            {
                $(".validation", validationBox).removeClass("error");
                $(".validation_text", validationBox).removeClass("error");

                if($(".validation", validationBox).hasClass("success") == false)
                {
                    $(".validation", validationBox).addClass("success");
                }
            }
        }

    });

    /*
     * Zipcode field
     */
    $("form.formvalidator :input.zipcode").live("blur keyup", function(event){
        var validationBox = $(this).parent("div.formrow");
        if(event.type == "focusout" || event.type == "blur" || ($(".validation", validationBox).hasClass("error") == true) || ($(".validation", validationBox).hasClass("success") == true))
        {
            if( /^[\s]*[0-9]{4}[\s-_]*[a-z-A-Z]{2}[\s]*$/.test($(this).val()) == false)
            {
                if($(".validation", validationBox).hasClass("error") == false)
                {
                    $(".validation", validationBox).addClass("error");
                }
                if($(".validation_text.incorrect", validationBox).hasClass("error") == false)
                {
                    $(".validation_text.incorrect", validationBox).addClass("error");
                    $(".validation_text:not(.incorrect)", validationBox).removeClass("error");
                }
            }
            else if($(".validation_text:not(.incorrect).error", validationBox).length == 0)
            {
                $(".validation", validationBox).removeClass("error");
                $(".validation_text", validationBox).removeClass("error");

                if($(".validation", validationBox).hasClass("success") == false)
                {
                    $(".validation", validationBox).addClass("success");
                }
            }
        }

    });

    /*
     * Phone field
     */
    $("form.formvalidator :input.phone").live("blur keyup", function(event){
        var validationBox = $(this).parent("div.formrow");
        if(event.type == "focusout" || event.type == "blur" || ($(".validation", validationBox).hasClass("error") == true) || ($(".validation", validationBox).hasClass("success") == true))
        {
            if( /^(\+31|0)[0-9]{9}$/.test($(this).val().replace(/[^\+a-zA-Z0-9]+/g,'')) == false)
            {
                if($(".validation", validationBox).hasClass("error") == false)
                {
                    $(".validation", validationBox).addClass("error");
                }
                if($(".validation_text.incorrect", validationBox).hasClass("error") == false)
                {
                    $(".validation_text.incorrect", validationBox).addClass("error");
                    $(".validation_text:not(.incorrect)", validationBox).removeClass("error");
                }
            }
            else if($(".validation_text:not(.incorrect).error", validationBox).length == 0)
            {
                $(".validation", validationBox).removeClass("error");
                $(".validation_text", validationBox).removeClass("error");

                if($(".validation", validationBox).hasClass("success") == false)
                {
                    $(".validation", validationBox).addClass("success");
                }
            }
        }

    });

    /*
     * textfield not empty
     */
    $("form.formvalidator :input.notempty").live("blur keyup", function(event){
        var validationBox = $(this).parent("div.formrow");
        if(event.type == "focusout" || event.type == "blur" || ($(".validation", validationBox).hasClass("error") == true) || ($(".validation", validationBox).hasClass("success") == true))
        {
            if($(this).val() == "")
            {
                if($(".validation", validationBox).hasClass("error") == false)
                {
                    $(".validation", validationBox).addClass("error");
                }
                if($(".validation_text.empty", validationBox).hasClass("error") == false)
                {
                    $(".validation_text.empty", validationBox).addClass("error");
                    $(".validation_text:not(.empty)", validationBox).removeClass("error");
                }
            }
            else if($(".validation_text.error:not(.empty)", validationBox).length == 0)
            {
                $(".validation", validationBox).removeClass("error");
                $(".validation_text", validationBox).removeClass("error");

                if($(".validation", validationBox).hasClass("success") == false)
                {
                    $(".validation", validationBox).addClass("success");
                }
            }
        }

    });

    /*
     * submit validation
     */
    $("form.formvalidator").live("submit", function(){
        if($(".submit_error", $(this)).length != 0)
        {
            $(":input", $(this)).each(function(){
                $(this).trigger("focusout");
            });
            if($("div.form_content:not(.novalidation) .validation.error", $(this)).length == 0)
            {
                return true;
            }
            else
            {
                $(".submit_error ul.error li").remove();
                $("div.form_content:not(.novalidation) .validation_text.error", $(this)).each(function(){
                    if($("p", $(this)).length == 0)
                    {
                        $(".submit_error ul.error").append('<li class="error">'+$(this).html()+'</li>');
                    }
                });
                $(".submit_error", $(this)).css("display", "block");
                return false;
            }
        }
        else
        {
            return true;
        }
    });
});
