function showInputError(form, inputName, text) {
    (function($) {
        var input = form.find(':has(:input[name='+inputName+']), :input[name='+inputName+']').first();

        var vtipObject = $('<p class="error">' + text + '</p>');

        vtipObject.insertAfter(input);
    })(jQuery);
}


function showFormError(form, text) {
    (function($) {
        form.prepend($('<p class="error">' + text + '</p>'));
    })(jQuery);
}


function resetErrors(form) {
    form.find('p.error').remove();
}


function ajaxValidation(formObject) {
    (function ($) {
        var form = $(formObject);
        var url = form.attr('action');

        var ajaxLoader = $('<div class="ajax-loader"></div>').insertAfter(form).hide();
        ajaxLoader.css('height', form.outerHeight()).css('width', form.outerWidth());
        form.hide();
        ajaxLoader.show();

        var post = form.serialize();
        if (post != '') {
            post += '&ajax=1';
        } else {
            post = 'ajax=1';
        }

        resetErrors(form);

        $.ajax({
            url: url,
            data: post,
            dataType: 'json',
            type: 'post',
            success: function(data){
                switch (data.status) {
                    case 'success':
                        if (data.actionType == 'refresh') {
                            window.location.reload();
                        } else if (data.actionType == 'redirect') {

                        } else {
                            closePopup(true);
                            $('#messageBar').html(data.messages);
                            ajaxLoader.hide();
                            form.show();
                        }
                    break;

                    case 'fail':
                        for (var i in data.messages) {
                            showInputError(form, i, data.messages[i]);
                        }
                        ajaxLoader.hide();
                        form.show();
                    break;

                    case 'error':
                        showFormError(form, data.messages);
                        ajaxLoader.hide();
                        form.show();
                    break;
                }
            }
        });


    })(jQuery);

    return false;
}


jQuery(document).ready(function($) {
    $('form.ajaxValidation').submit(function(){
        return ajaxValidation(this);
    });
});
