Emv.Kinode.Tools = {};

Emv.Kinode.Tools.Validate = {

    url: '/tools/validate-value?format=json',

    bind: function (formId, buttonId, options) {

        Emv.Form.ajaxBind(formId, buttonId);

        $("#" + formId).bind("submit", {options: options, url: this.url}, Emv.Kinode.Tools.Validate.ajaxValidate);
    },

    ajaxValidate: function(event) {

        event.preventDefault();

        for (var i=0; i<event.data.options.length; i++) {

            event.data.options[i].value = $("#" + event.data.options[i].element).val();
        }

        var request = new Emv.Ajax();
        request.setSubmitForm(this);
        request.setCallback(Emv.Kinode.Tools.Validate.ajaxCallback);
        request.request(event.data.url, {options: event.data.options});
    },

    ajaxCallback: function (response, submitForm) {

        if ('undefined' == typeof(response.validation.valid) ||
            (true !== response.validation.valid && 'undefined' == typeof(response.validation.fields))) {

            // Invalid status return!
            $("#jq-dialog").dialog( "option", "title", "Es ist ein Fehler aufgetreten" );
            $("#jq-dialog").html("<p>Undefinierter Fehler beim Senden der Anfrage</p>");
            $("#jq-dialog").dialog("open");

            return false;
        }

        if (true !== response.validation.valid) {

            for (var i=0; i<response.validation.fields.length; i++) {

                if (true !== response.validation.fields[i].valid) {

                    $("#jq-dialog").dialog( "option", "title", "Es ist ein Fehler aufgetreten" );

                    switch (response.validation.fields[i].validator) {
                        case "email":
                            $("#jq-dialog").html("<p>Bitte geben Sie eine gültige E-Mail-Adresse im Feld <strong>" +  response.validation.fields[i].label + "</strong> an.</p>");
                            break;

                        case "phone":
                            $("#jq-dialog").html("<p>Bitte geben Sie eine gültige Telefonnummer im Feld <strong>" +  response.validation.fields[i].label + "</strong> an.</p>");
                            break;

                        default:
                            break;
                    }

                    $("#jq-dialog").dialog("open");
                    $("#" + response.validation.fields[i].element).addClass("error");

                    return false;
                }
            }
        } else if ("undefined" != submitForm) {

            submitForm.submit();
        }

        return true;
    }
};
