﻿/// <reference path="UIElements.js" />
/*************************************************
*     Модуль проверки на коректность ввода,     *
*     соответствие строк формату и так далее.   *
*                                               *
*     Автор:                     Агроник А.Ю.   *
*     Дата создания:             08.06.2007     *
*                                               *
*		Внимание! данный файл является          *
*		частью программного продукта SCSC       *
*      и не поставляется отдельно. Права        *
*      на программный продукт SCSC              *
*      принадлежат компании A2 www.a2soft.ru    *
*											   	*
*************************************************/

Validator = $Check =
{
    Mask:
    {
        EmailReg: /^(([a-zA-Z0-9]+[a-zA-Z0-9\.\-\_]*[a-zA-Z0-9]+)|([a-zA-Z0-9]+))@(([a-zA-Z0-9]+[a-zA-Z0-9\.\-\_]*[a-zA-Z0-9]+)|([a-zA-Z0-9]+))\.[a-zA-Z0-9]+$/,
        TagsReg: /^([a-zA-Zа-яА-Я0-9\-\_\+\s]*, )*[a-zA-Zа-яА-Я0-9\-\_\+\s]+$/,
        DoubleDotts: /(\.\.)|(\.\-)|(\.\_)|(\-\.)|(\-\-)|(\-\_)|(\_\.)|(\_\-)|(\_\_)/,
        Email: "1234567890qwertyuiopasdfghjklzxcvbnm_-.@",
        Phone: "0123456789()-+",
        DateTime: /^[0-3][0-9]\.(0[0-9]|1[0-2])\.[0-2][0-9][0-9][0-9] ([0-1][0-9]|2[0-3]):[0-5][0-9]$/,
        Date: /^[0-3][0-9]\.(0[0-9]|1[0-2])\.[0-2][0-9][0-9][0-9]$/,
        Integer: /^[0-9]+$/,
        Double: /^(-?[0-9]+|-?[0-9]+.[0-9]+)$/,
        NumbersReg: /[0-9]/,
        Numbers: "0123456789",
        SmallCharsReg: /[a-z]/,
        SmallChars: "abcdefghijklmnopqrstuvwxyz",
        BigCharsReg: /[A-Z]/,
        BigChars: "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
        SpecialCharsReg: /\$|\@|\!|\%|\|\{|\}|\(|\)|\&|\^|\#\:\;\"\'\~\`\№\?\*/,
        SpecialChars: "$@!%|{}()&^#:;\"\'~`№?*"
    },
    NotAValue: function(value, not)
    {
        return (value != not); //&&(value != "");
    },
    FitsMask: function(filter, source)
    {
        var resok = true;
        var result = source.toLocaleLowerCase();
        if (filter && source)
        {
            for (var i = 0; i < result.length; i++)
            {
                var ok = false;
                var c = result.charAt(i);
                for (var j = 0; j < filter.length; j++)
                {
                    ok = ok || (c == filter.toLocaleLowerCase().charAt(j));
                }
                resok = resok && ok;
            }
        }
        return resok;
    },
    ByRegExp: function(e, obj, reg, notreg, notempty)
    {
        var exp = (reg.test(obj.value) && (notreg ? !notreg.test(obj.value) : true));
        if (notempty ? exp : (exp || obj.value == ""))
            $G.ClearError(obj);
        else
            $G.SetError(obj);
    },
    FilterFieldByMask: function(e, obj)
    {
        var kcode = window.event ? e.keyCode : e.which;

        if (kcode != null)
        {
            if ((kcode < 34 || kcode > 40) && kcode != 13)
            {
                if (this.FitsMask(this.Mask.Numbers, obj.value))
                    $global.ClearError(obj);
                else
                {
                    obj.value = $global.StepToNumber(obj.value);
                    if (this.FitsMask(this.Mask.Numbers, obj.value))
                        $global.ClearError(obj);
                    else
                        $global.SetError(obj);
                }
            }
        }
    }
}