﻿$(function () {
    $("input:submit[name^='ssform:']").each(function () {
        attachSubmit(this);
    });
    $("input:image[name^='ssform:']").each(function () {
        attachSubmit(this);
    });
});
function attachSubmit(o) {
    $(o).click(function () {
        var formname = $(o).attr('name').substring(7, $(o).attr('name').indexOf(':', 8));
        if (ssvalidate(formname)) {
            $("input[name='ssform:postbackform']").val(formname);
        } else {
            return false;
        }
    });
}
function ssvalidate(formname) {
    $('.ssformErrorMessage').remove();
    var isValid = true;
    $("input[name^='ssform:" + formname + "'], textarea[name^='ssform:" + formname + "'], select[name^='ssform:" + formname + "']").each(function () {
        $(this).removeClass('ssformErrorField');
        if ($(this).attr('datarequired') && ($(this).attr('datarequired') == 'true') && ($(this).attr('type') != 'checkbox') && ($(this).val() == '')) { isValid = false; ssvalidateError(this, 'required'); }
        if ($(this).attr('datarequired') && ($(this).attr('datarequired') == 'true') && ($(this).attr('type') == 'checkbox') && (!$(this).checked)) { isValid = false; ssvalidateError(this, 'required'); }
        if (($(this).val() != '') && ($(this).attr('type') == 'text')) {  // test type only for text fields and if data exists
            switch ($(this).attr('datatype')) {
                case 'text':
                    break;
                case 'email':
                    var reg = /^([\w\.!#\$%\-+.'_]+@[A-Za-z0-9\-]+(\.[A-Za-z0-9\-]{2,})+)$/i;
                    if (!reg.test($(this).val())) { isValid = false; ssvalidateError(this, 'email'); }
                    break;
                case 'website':
                    var reg = /^(?:|http\:\/\/|https\:\/\/)?(\w+\@)?(www\.)?\w+(\.\w+)+(\:\d+)?\??[-\w\d\.=&\;\/\$_\+\!\*\'\(\)]*/i;
                    if (!reg.test($(this).val())) { isValid = false; ssvalidateError(this, 'website'); }
                    break;
                case 'usphone':
                    var reg = /^(([1])?\s*(\(\d{3}\))?\s*\d{3}[\s\-]?\d{4})|(([1])?[\s-]?\d{3}-\d{3}-\d{4})$/i;
                    if (!reg.test($(this).val())) { isValid = false; ssvalidateError(this, 'usphone'); }
                    break;
                case 'uszipcode':
                    var reg = /^(\d{5}-\d{4}|\d{5})$/i;
                    if (!reg.test($(this).val())) { isValid = false; ssvalidateError(this, 'uszipcode'); }
                    break;
                case 'date':
                    var reg = /^(?=\d)(?:(?!(?:1582(?:\.|-|\/)10(?:\.|-|\/)(?:0?[5-9]|1[0-4]))|(?:1752(?:\.|-|\/)0?9(?:\.|-|\/)(?:0?[3-9]|1[0-3])))(?=(?:(?!000[04]|(?:(?:1[^0-6]|[2468][^048]|[3579][^26])00))(?:(?:\d\d)(?:[02468][048]|[13579][26]))\D0?2\D29)|(?:\d{4}\D(?!(?:0?[2469]|11)\D31)(?!0?2(?:\.|-|\/)(?:29|30))))(\d{4})([-\/.])(0?\d|1[012])\2((?!00)[012]?\d|3[01])(?:$|(?=\x20\d)\x20))?((?:(?:0?[1-9]|1[012])(?::[0-5]\d){0,2}(?:\x20[aApP][mM]))|(?:[01]\d|2[0-3])(?::[0-5]\d){1,2})?$/i;
                    if (!reg.test($(this).val())) { isValid = false; ssvalidateError(this, 'date'); break; }
                    break;
                case 'integer':
                    var reg = /^-?\d+$/i;
                    if (!reg.test($(this).val())) { isValid = false; ssvalidateError(this, 'integer'); break; }
                    if ($(this).attr('datamin') != '') {
                        if (parseInt($(this).val()) < parseInt($(this).attr('datamin'))) { isValid = false; ssvalidateError(this, 'minimum'); break; }
                    }
                    if ($(this).attr('datamax') != '') {
                        if (parseInt($(this).val()) > parseInt($(this).attr('datamax'))) { isValid = false; ssvalidateError(this, 'maximum'); break; }
                    }
                    break;
                case 'decimal':
                    var reg = /^-?\d+(\.\d+)?$/i;
                    if (!reg.test($(this).val())) { isValid = false; ssvalidateError(this, 'decimal'); break; }
                    if ($(this).attr('datamin') != '') {
                        if (parseFloat($(this).val()) < parseFloat($(this).attr('datamin'))) { isValid = false; ssvalidateError(this, 'minimum'); break; }
                    }
                    if ($(this).attr('datamax') != '') {
                        if (parseFloat($(this).val()) > parseFloat($(this).attr('datamax'))) { isValid = false; ssvalidateError(this, 'maximum'); break; }
                    }
                    break;
                case 'currency':
                    var reg = /^(\$)?(([1-9]\d{0,2}(\,\d{3})*)|([1-9]\d*)|(0))(\.\d{2})?$/i;
                    if (!reg.test($(this).val())) { isValid = false; ssvalidateError(this, 'currency'); break; }
                    if ($(this).attr('datamin') != '') {
                        if (parseFloat($(this).val().substr(1)) < parseFloat($(this).attr('datamin'))) { isValid = false; ssvalidateError(this, 'minimum'); break; }
                    }
                    if ($(this).attr('datamax') != '') {
                        if (parseFloat($(this).val().substr(1)) > parseFloat($(this).attr('datamax'))) { isValid = false; ssvalidateError(this, 'maximum'); break; }
                    }
                    break;
            }
        }
        if ($(this).attr('dataregex') && ($(this).attr('dataregex') != '')) {
            var r = new RegExp($(this).attr('dataregex'));
            if (!r.test($(this).val())) { isValid = false; ssvalidateError(this, 'regex'); }
        }
    });
    $(".ssformErrorMessage").show();
    return isValid;
}
function ssvalidateError(o, type) {
    if ($(o).attr("dataerror") && ($(o).attr("dataerror") != '')) {
        $(o).after("<div class=\"ssformErrorMessageBox\"><div class=\"ssformErrorMessage\">" + $(o).attr("dataerror") + "</div></div>");
    } else {
        var errormsg = ssformERRORS['defaultformfield' + type];
        if (type == 'minimum') {
            errormsg = errormsg.replace('{MINIMUM}', $(o).attr('datamin'));
        } else if (type == 'maximum') {
            errormsg = errormsg.replace('{MAXIMUM}', $(o).attr('datamax'));
        }
        $(o).after("<div class=\"ssformErrorMessageBox\"><div class=\"ssformErrorMessage\">" + errormsg + "</div></div>");
    }
    $(o).addClass("ssformErrorField");
}
