/**
 * @author Mehmet Gülbilge
 * @copyright 2011 SE-KİZ
 * @name form check v1.1 final
 */

/**
 * @version 1.2
 * added: errorClass
 */
var formChecker = {
    init:function () {
        $("body").find("INPUT[rel=defVal]").each(function () {
            $(this).css('font-style', 'italic');
            $(this).bind('focus', function () {
                $(this).css('font-style', 'normal');
                if (this.defaultValue == this.value) {
                    $(this).val('');
                }
            });
            $(this).bind('blur', function () {
                if (this.value == '') {
                    $(this).css('font-style', 'normal');
                    $(this).val(this.defaultValue);
                }
            });
        });
    },
    initKeyPress:function () {
        $('INPUT[type="text"][isNumber]:not([keyInited])').each(function (i, e) {
            $(e).attr("keyInited", true);
            $(e).bind('keyup', function () {
                core.tools.onlyNumber(e);
            });
        });
    },
    controls:{
        checkDate:function (date, format, splitter) {
            if (format == null) format = 'y-m-d';
            if (splitter == null) splitter = '-';

            //Point detect
            var yP = 0;
            var mP = 1;
            var dP = 2;
            var fmExp = format.split(splitter);
            for (var i = 0; i <= 2; i++) {
                if (fmExp[i] == 'y') yP = i;
                if (fmExp[i] == 'm') mP = i;
                if (fmExp[i] == 'd') dP = i;
            }

            var error = 0;
            var expl = date.split(splitter);
            var year = expl[yP];
            var month = expl[mP];
            var ltc = year.substr(2);
            var day = expl[dP];
            var years = new Number(year);
            var mnt = new Number(month);

            if (years < 1940 || years > 2012)
                error = 1;

            if (mnt < 0 || mnt > 12)
                error = 1;

            var yC = ltc % 4;
            if (day < 0) error = 1;
            var maxDay = 0;
            switch (month) {
                case '01':
                    maxDay = 31;
                    break;
                case '02':
                    if (yC == 0) maxDay = 29; else maxDay = 28;
                    break;
                case '03':
                    maxDay = 31;
                    break;
                case '04':
                    maxDay = 30;
                    break;
                case '05':
                    maxDay = 31;
                    break;
                case '06':
                    maxDay = 30;
                    break;
                case '07':
                    maxDay = 31;
                    break;
                case '08':
                    maxDay = 31;
                    break;
                case '09':
                    maxDay = 30;
                    break;
                case '10':
                    maxDay = 31;
                    break;
                case '11':
                    maxDay = 30;
                    break;
                case '12':
                    maxDay = 31;
                    break;
            }
            var theDay = new Number(day);
            if (theDay > maxDay) error = 1;
            return (error == 1);
        },
        checkEmail:function (e) {
            var domain = new Array();
            domain = String(e.value).split('@');
            return !((String(e.value).indexOf('@') < 2) || (domain[1].indexOf('.') < 0));
        },
        checkInt:function (val) {
            var intArray = new Array('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '.');
            for (var i = String(val).length - 1; i >= 0; i--) {
                if (intArray.indexOf(val.substr(i, 1)) < 0) {
                    return false;
                }
            }
            return true;
        }
    },
    dontAllow:function (e, options) {
        var defaults = {
            createDivs:true
        };
        options = $.extend(defaults, options || {});

        formChecker.errorObjects[e.id] = true;
        if ($(e).is('INPUT[type="text"]') || $(e).is('INPUT[type="hidden"]') || $(e).is('INPUT[type="password"]') || $(e).is('textarea') || $(e).is('select'))
            if ($(e).attr('chBorder')) $(e).css('border', '1px solid red');

        if ($(e).attr('onError')) eval($(e).attr('onError'));
        if ($(e).attr('errorClass')) $(e).addClass($(e).attr('errorClass'));
        if ($(e).attr('errorString')) {
            if (options.createDivs) {
                if (document.getElementById($(e).attr('id') + '_Error') == null) {
                    var div = document.createElement('div');
                    div.id = $(e).attr('id') + '_Error';
                    div.className = 'error_div';
                    $(e).after(div);
                }
            }
            $(div).css('display', 'none');
            $(div).html($(e).attr('errorString'));
            $(div).slideDown();
        }
    },
    allow:function (e) {
        formChecker.errorObjects[e.id] = null;
        if ($(e).is('INPUT[type=text]') || $(e).is('INPUT[type=hidden]') || $(e).is('textarea') || $(e).is('select'))
            if ($(e).attr('chBorder')) $(e).css('border', '1px solid lime');

        if ($(e).attr('errorClass')) $(e).removeClass($(e).attr('errorClass'));
        if (document.getElementById($(e).attr('id') + '_Error'))
            $('#' + $(e).attr('id') + '_Error').slideUp(function () {
                $(this).remove();
            });
    },
    check:function (form) {
        var chck = true;
        $("#" + form).find('INPUT[type="submit"]').attr("disabled", "disabled");
        formChecker.errorObjects = new Array();
        if (!formChecker.editCheck("#" + form)) chck = false;
        if (!formChecker.selectCheck("#" + form)) chck = false;
        if (!formChecker.checkboxCheck("#" + form)) chck = false;
        if (!formChecker.textareaCheck("#" + form)) chck = false;
        setTimeout(function () {
            $("#" + form).find('INPUT[type="submit"]').removeAttr("disabled");
        }, 1000);
        return chck;
    },
    errorObjects:Array(),
    editCheck:function (form) {
        var response = true;
        $(form).find('INPUT[type="text"][req="true"]').each(function (i, e) {
            if ($(e).attr('minChar') && String(e.value).length < $(e).attr('minChar')) {
                formChecker.dontAllow(e, { createDivs: $(form).attr('createDivs') });
                response = false;
            } else {
                if (formChecker.errorObjects[e.id] == null)
                    formChecker.allow(e);
            }

            if ($(e).is('[isDate="true"]')) {
                var dFormat = 'y-m-d';
                var splitter = '-';
                if ($(e).is('[dateFormat]')) dFormat = $(e).attr('dateFormat');
                if ($(e).is('[splitter]')) splitter = $(e).attr('splitter');
                if (!formChecker.controls.checkDate($(e).val(), dFormat, splitter)) {
                    formChecker.dontAllow(e, { createDivs: $(form).attr('createDivs') });
                    response = false;
                } else {
                    if (formChecker.errorObjects[e.id] == null)
                        formChecker.allow(e);
                }
            }

            if ($(e).is('[isMail="true"]') && !formChecker.controls.checkEmail(e)) {
                formChecker.dontAllow(e, { createDivs: $(form).attr('createDivs') });
                response = false;
            } else {
                if (formChecker.errorObjects[e.id] == null)
                    formChecker.allow(e);
            }

            if ($(e).is('[isNumber="true"]')) {
                if (!formChecker.controls.checkInt(e.value)) {

                    formChecker.dontAllow(e, { createDivs: $(form).attr('createDivs') });
                    response = false;
                } else {
                    if (formChecker.errorObjects[e.id] == null)
                        formChecker.allow(e);
                }
            }

        });
        $(form).find('INPUT[type="hidden"][req="true"]').each(function (i, e) {
            if ($(e).attr('minChar') && String(e.value).length < $(e).attr('minChar')) {
                formChecker.dontAllow(e, { createDivs: $(form).attr('createDivs') });
                response = false;
            } else {
                if (formChecker.errorObjects[e.id] == null)
                    formChecker.allow(e);
            }

            if ($(e).is('[isDate="true"]')) {
                var dFormat = 'y-m-d';
                var splitter = '-';
                if ($(e).is('[dateFormat]')) dFormat = $(e).attr('dateFormat');
                if ($(e).is('[splitter]')) splitter = $(e).attr('splitter');
                if (!formChecker.controls.checkDate($(e).val(), dFormat, splitter)) {
                    formChecker.dontAllow(e, { createDivs: $(form).attr('createDivs') });
                    response = false;
                } else {
                    if (formChecker.errorObjects[e.id] == null)
                        formChecker.allow(e);
                }
            }

            if ($(e).is('[isMail="true"]') && !formChecker.controls.checkEmail(e)) {
                formChecker.dontAllow(e, { createDivs: $(form).attr('createDivs') });
                response = false;
            } else {
                if (formChecker.errorObjects[e.id] == null)
                    formChecker.allow(e);
            }

            if ($(e).is('[isNumber="true"]')) {
                if (!formChecker.controls.checkInt(e.value)) {

                    formChecker.dontAllow(e, { createDivs: $(form).attr('createDivs') });
                    response = false;
                } else {
                    if (formChecker.errorObjects[e.id] == null)
                        formChecker.allow(e);
                }
            }

        });

        $(form).find('INPUT[type="password"][req="true"]').each(function (i, e) {
            if ($(e).is('[minChar]') && String(e.value).length < $(e).attr('minChar')) {
                formChecker.dontAllow(e, { createDivs: $(form).is('[createDivs]') });
                response = false;
            } else {
                if (formChecker.errorObjects[e.id] == null)
                    formChecker.allow(e);
            }

            if ($(e).is('[isPass="true"]') && $(e).is('[mustMatch]')) {
                var match = "#" + $(e).attr('mustMatch');
                if ($(e).val() != $(match).val()) {
                    formChecker.dontAllow(e, { createDivs: $(form).is('[createDivs]') });
                    response = false;
                } else {
                    if (formChecker.errorObjects[e.id] == null) {
                        formChecker.allow(e);
                    }
                }
            }
        });

        return response;
    },
    textareaCheck:function (form) {
        var response = true;
        $(form).find('textarea[req="true"]').each(function (i, e) {
            if ($(e).attr('minChar') && String(e.value).length < $(e).attr('minChar')) {
                formChecker.dontAllow(e, { createDivs: $(form).attr('createDivs') });
                response = false;

            } else {
                if (formChecker.errorObjects[e.id] == null)
                    formChecker.allow(e);
            }
        });
        return response;

    },
    checkboxCheck:function(form) {
        var response = true;
        $(form).find('INPUT[type="checkbox"][req="true"]').each(function (i, e) {
            if (!$(e).is(':checked')) {
                formChecker.dontAllow(e, { createDivs: $(form).attr('createDivs') });
                response = false;

            } else {
                if (formChecker.errorObjects[e.id] == null)
                    formChecker.allow(e);
            }
        });
        return response;

    },
    selectCheck:function (form) {
        var response = true;
        $(form).find('select[req="true"]').each(function (i, e) {
            if ($(e).is('[noValue]') && e.value == $(e).attr('noValue')) {
                formChecker.dontAllow(e, { createDivs: $(form).attr('createDivs') });
                response = false;

            } else {
                if (formChecker.errorObjects[e.id] == null)
                    formChecker.allow(e);
            }
        });
        return response;

    }
};
