function validate(form) {
    var formSelector = "form";

    if (arguments.length > 0)
        formSelector = form;

    var divContext = $('div#translation_div');

    var messagesObj = new Object();

    $(formSelector).find(":input").each(function() {

        var elem = $(this);
        var name = elem.attr("name");

        if (this.name) {
            var messageObj = new Object();

            if (elem.hasClass("required")) {
                messageObj["required"] = $('#required_message', divContext).html();
            }

            if (elem.hasClass("rut")) {
                messageObj["rut"] = $('#rut_message', divContext).html();
            }

            if (elem.hasClass("digits")) {
                messageObj["digits"] = $('#digits_message', divContext).html();
            }

            if (elem.hasClass("email")) {
                messageObj["email"] = $('#email_message', divContext).html();
            }

            if (elem.hasClass("url")) {
                messageObj["url"] = $('#url_message', divContext).html();
            }

            if (elem.hasClass("alphanumeric")) {
                messageObj["alphanumeric"] = $('#alphanumeric_message', divContext).html();
            }

            if (elem.hasClass("lettersonly")) {
                messageObj["lettersonly"] = $('#lettersonly_message', divContext).html();
            }

            if (elem.hasClass("hasOptions")) {
                messageObj["hasOptions"] = $('#hasOptions_message', divContext).html();
            }
            
            if (elem.attr("equalTo") != undefined) {
                messageObj["equalTo"] = $('#equalTo_message', divContext).html();
            }

            if (elem.attr("maxlength") != undefined) {
                messageObj["maxlength"] = $.validator.format($('#maxlength_message', divContext).html());
            }

            if (elem.attr("minlength") != undefined) {
                messageObj["minlength"] = $.validator.format($('#minlength_message', divContext).html());
            }

            if (elem.attr("masked-max") != undefined) {
                messageObj["masked-max"] = $.validator.format($('#max_message', divContext).html());
            }

            if (elem.attr("min-masked") != undefined) {
                messageObj["min-masked"] = $.validator.format($('#min_message', divContext).html());
            }

            if (elem.attr("max") != undefined) {
                messageObj["max"] = $.validator.format($('#max_message', divContext).html());
            }

            if (elem.attr("min") != undefined) {
                messageObj["min"] = $.validator.format($('#min_message', divContext).html());
            } 

            if (elem.attr("remote") != undefined) {
                if(elem.hasClass("catcha"))
                    messageObj["remote"] = $('#captcha_message', divContext).html();
                else if(elem.hasClass("username-col"))
                    messageObj["remote"] = $('#username-col_message', divContext).html();
                else if (elem.hasClass("email-col"))
                    messageObj["remote"] = $('#email-col_message', divContext).html();
            }

            var isEmpty = true;

            for (var prop in messageObj) {
                isEmpty = false;
                break;
            }

            if (!isEmpty) {
                messagesObj[name] = messageObj;
            }
        }
    });

    var objEmpty = true;

    for (var prop in messagesObj) {
        objEmpty = false;
        break;
    }

    if (!objEmpty) {
        if ($("#uplist").length) {
            $(formSelector).validate({
                messages: messagesObj,
                errorPlacement: errorPlacementFunc
            });

            $("#uplist").find("tr").each(function() {
                validateRow(this);
            });
        } else {
            $(formSelector).validate({
                messages: messagesObj,
                errorPlacement: errorPlacementFunc
            });
        }
    }
}

function validateOnSubmit(form) {
    var formSelector = "form";

    if (arguments.length > 0)
        formSelector = form;

    var divContext = $('div#translation_div');

    var messagesObj = new Object();

    $(formSelector).find(":input").each(function() {

        var elem = $(this);
        var name = elem.attr("name");

        if (this.name) {
            var messageObj = new Object();

            if (elem.hasClass("required")) {
                messageObj["required"] = $('#required_message', divContext).html();
            }

            if (elem.hasClass("rut")) {
                messageObj["rut"] = $('#rut_message', divContext).html();
            }

            if (elem.hasClass("digits")) {
                messageObj["digits"] = $('#digits_message', divContext).html();
            }

            if (elem.hasClass("email")) {
                messageObj["email"] = $('#email_message', divContext).html();
            }

            if (elem.hasClass("url")) {
                messageObj["url"] = $('#url_message', divContext).html();
            }

            if (elem.hasClass("alphanumeric")) {
                messageObj["alphanumeric"] = $('#alphanumeric_message', divContext).html();
            }

            if (elem.hasClass("lettersonly")) {
                messageObj["lettersonly"] = $('#lettersonly_message', divContext).html();
            }

            if (elem.hasClass("hasOptions")) {
                messageObj["hasOptions"] = $('#hasOptions_message', divContext).html();
            }

            if (elem.attr("equalTo") != undefined) {
                messageObj["equalTo"] = $('#equalTo_message', divContext).html();
            }

            if (elem.attr("maxlength") != undefined) {
                messageObj["maxlength"] = $.validator.format($('#maxlength_message', divContext).html());
            }

            if (elem.attr("minlength") != undefined) {
                messageObj["minlength"] = $.validator.format($('#minlength_message', divContext).html());
            }

            if (elem.attr("masked-max") != undefined) {
                messageObj["masked-max"] = $.validator.format($('#max_message', divContext).html());
            }

            if (elem.attr("min-masked") != undefined) {
                messageObj["min-masked"] = $.validator.format($('#min_message', divContext).html());
            }

            if (elem.attr("max") != undefined) {
                messageObj["max"] = $.validator.format($('#max_message', divContext).html());
            }

            if (elem.attr("min") != undefined) {
                messageObj["min"] = $.validator.format($('#min_message', divContext).html());
            }

            if (elem.attr("remote") != undefined) {
                if(elem.hasClass("catcha"))
                    messageObj["remote"] = $('#captcha_message', divContext).html();
                else if(elem.hasClass("username-col"))
                    messageObj["remote"] = $('#username-col_message', divContext).html();
                else if (elem.hasClass("email-col"))
                    messageObj["remote"] = $('#email-col_message', divContext).html();
            }
            
            var isEmpty = true;

            for (var prop in messageObj) {
                isEmpty = false;
                break;
            }

            if (!isEmpty) {
                messagesObj[name] = messageObj;
            }
        }
    });

    var objEmpty = true;

    for (var prop in messagesObj) {
        objEmpty = false;
        break;
    }

    if (!objEmpty) {
        if ($("#uplist").length) {
            $(formSelector).validate({
                messages: messagesObj,
                errorPlacement: errorPlacementFunc
            });

            $("#uplist").find("tr").each(function() {
                validateRow(this);
            });
        } else {
            $(formSelector).validate({
                messages: messagesObj,
                errorPlacement: errorPlacementFunc,
                onkeyup: false
            });
        }
    }
}

function errorPlacementFunc(error, elem) 
{
    $(elem).tooltip({ 
        bodyHandler: function() { 
            return error.html(); 
        }
    });
}
/*
function validateRow(row) {

    var divContext = $('div#translation_div');

    $(row).find(":input").each(function() {
        var elem = $(this);
        var name = elem.attr("name");

        if (name != "") {
            var messageObj = new Object();

            var groupMessageHtml = $('#group_message', divContext).html();

            if (elem.hasClass("required")) {
                messageObj["required"] = groupMessageHtml;
            }

            if (elem.hasClass("rut")) {
                messageObj["rut"] = $('#rut_message', divContext).html();
            }

            if (elem.hasClass("digits")) {
                messageObj["digits"] = groupMessageHtml;
            }

            if (elem.hasClass("email")) {
                messageObj["email"] = groupMessageHtml;
            }

            if (elem.hasClass("url")) {
                messageObj["url"] = groupMessageHtml;
            }

            if (elem.hasClass("equalTo")) {
                messageObj["equalTo"] = groupMessageHtml;
            }

            if (elem.hasClass("hasOptions")) {
                messageObj["hasOptions"] = groupMessageHtml;
            }

            if (elem.hasClass("alphanumeric")) {
                messageObj["alphanumeric"] = groupMessageHtml;
            }

            if (elem.hasClass("lettersonly")) {
                messageObj["lettersonly"] = groupMessageHtml;
            }

            if (elem.attr("maxlength") != undefined) {
                messageObj["maxlength"] = groupMessageHtml;
            }

            if (elem.attr("minlength") != undefined) {
                messageObj["minlength"] = groupMessageHtml;
            }

            if (elem.attr("max") != undefined) {
                messageObj["max"] = groupMessageHtml;
            }

            if (elem.attr("min") != undefined) {
                messageObj["min"] = groupMessageHtml;
            }

            if (elem.attr("max-masked") != undefined) {
                messageObj["max-masked"] = groupMessageHtml;
            }

            if (elem.attr("min-masked") != undefined) {
                messageObj["min-masked"] = groupMessageHtml;
            }

            var isEmpty = true;

            for (prop in messageObj) {
                isEmpty = false;
                break;
            }

            if (!isEmpty) {
                elem.rules('add', { messages: messageObj });
            }
        }
    });

    $('.masked_input', row).setMask();
}*/
