﻿$.validator.addMethod("notSameAsLabel", function (value, element, params) {
    return value != $(element).attr('title')
}, "Remember to fill in the field");

$.validator.addMethod("notEmptyValue", function (value, element, params) {
    return value != ''
}, "Remember to fill in the field");

$.validator.addMethod("special1", function (value, element, params) {
    var valid = false;
    if ($('.giftCertificateValueChooser input[type=radio]:checked').val() == $('.giftCertificateValueChooser input[type=radio]:last').val()) {
        var thisVal = $('.giftCertificateValueChooser input[type=text]:first').val();
        if (!isNaN(thisVal) && (1*thisVal) >= 100 && thisVal % 1 == 0) {
            valid = true
        }
    }
    else {
        valid = true
    }
    return valid
}, "Remember to fill in the field");


function buildFormValidator(formGuid, rules, messages, emails, useContour) {
    var formCssId = "#form-" + formGuid; 
    var container = $(formCssId + " .errorList");
    $(formCssId).validate({
        errorContainer: container,
        errorLabelContainer: $(container),
        wrapper: 'li',
        meta: "validate",
        rules: rules,
        messages: messages,
        focusInvalid: false,
        submitHandler: function (form) {
            $(formCssId + " .formLoading").show();

            var url = "/base/submitContourForm/CreateRecord/";
            if (useContour == 'false') {
                var url = window.location.href;
            }
            var queryString = $(formCssId).formSerialize();
            var queryString = queryString + "&formGuid=" + formGuid;

            $.post(url, queryString,
            function (data) {

                // prepareFormForSubmit(form);
                hideForm(formCssId);
                try {
                    if (useContour == 'false') {
                        $(formCssId + " .formPosted").show().removeClass("error");
                    }
                    else {
                        //data = $(data).find('value').text();
                        var response = eval("(" + data + ")");
                        if (response.success == "true" == false) {
                            showEnabledForm(formCssId);
                            var errors = serverSideErrorsObject(response);
                            $(formCssId).validate().showErrors(errors);
                            //$(this).autoscrollTo($(this).closest('.standardForm'));
                        } else {
                            $(formCssId + " .formPosted").show().removeClass("error");
                            if (pageToGoToAfterSubmit && pageToGoToAfterSubmit != '') {
                                location.href = pageToGoToAfterSubmit;
                            }
                        }
                    }
                } catch (e) {
                    showGenericError(formCssId);
                }
                //prepareFormFieldsLabelInside();

            });

        }
    });
}

function prepareFormForSubmit(argForm) {
    $(argForm).find('textarea[title]').each(function () { prepareInputValuesForSubmit($(this));  });
    $(argForm).find('input[type=text][title]').each(function () { prepareInputValuesForSubmit($(this));});

}
function prepareInputValuesForSubmit(argField) {
    if ($(argField).val() == $(argField).attr('title')) {
        $(argField).val('')
    }
}

function showGenericError(formCssId) {
    //@TODO Read a language specific generic error message from a HTML element.
    $(formCssId + " ul.errorList").html("<li>" + generelErrorMessage + "</li>");
    $(formCssId + " ul.errorList").show();
    showEnabledForm(formCssId);
}

function showEnabledForm(formCssId) {
    $(formCssId + " .formPosted").hide();
    //$(formCssId + " .formArea").show();
    $(formCssId + " .button").attr("enabled", true);
}

function hideForm(formCssId) {
    $(formCssId + " .formArea").hide();
    $(formCssId + " .formLoading").hide();
}

function serverSideErrorsObject(response) {
    var errorString = "";
    for (i = 0; i < response.errors.length; i++) {
        if (i != 0) {
           errorString = errorString + ", "
        }
        errorString = errorString + "{ \"" + response.errors[i].field + "\": " + "\"" + response.errors[i].errorMessage + "\" }";
    }

    var errors = eval("(" + errorString + ")");
    return errors;
}

$(function () {
    $.validator.addMethod(
        "regex",
        function (value, element, regexp) {
            if (regexp.constructor != RegExp)
                regexp = new RegExp(regexp);
            else if (regexp.global)
                regexp.lastIndex = 0;
            return this.optional(element) || regexp.test(value);
        },
        "This is not a valid value"
    );
});
