Validate = {

    /* Alpha-numeric characters */
    regAlnum:        /^[a-zа-я_0-9 ]*$/i,

    /* Text only allowed */
    regAlpha:        /^[a-zа-я_ ]*$/i,

    /* Only numbers (allow decimal) */
    regDigits:       /^[\d\.]*$/,

    /* Integers only */
    regInt:          /^\d*$/,

    /* Phone number characters */
    regPhone:        /^[\d \-\(\)\+]*$/,

    /* YYYY/dd/mm */
    regDateUsa:      /^\d{4}\/([0,1,2][0-9]|3[0,1])\/(0[0-9]|1[0,1,2])$/,

    /* YYYY-dd-mm */
    regDateIso8601:  /^\d{4}-(0[0-9]|1[0,1,2])-([0,1,2][0-9]|3[0,1])$/,

    /* dd.mm.YYYY */
    regDateGost:     /^([0,1,2][0-9]|3[0,1]).(0[0-9]|1[0,1,2]).\d{4}$/,

    /* dd.mm.YYYY hh:mm */
    regDateTime:     /^([0,1,2][0-9]|3[0,1]).(0[0-9]|1[0,1,2]).\d{4}\s([0-1][0-9]|[2][0-3])(:([0-5][0-9])){1,2}$/,

    /* hh:mm */
    regTime: /^([0-1][0-9]|[2][0-3])(:([0-5][0-9])){1,2}$/,

    /* Something valid-ish for an email */
    regEmail:        /^[a-z\d\.\-_]+@[a-z\d\.\-_]{2,}\.[a-z]{2,10}$/i,
    /* Something valid-ish for an email */
    _regMailTo:      /^mailto:[a-z\d\.\-_]+@[a-z\d\.\-_]{2,}\.[a-z]{2,10}$/i,

    /* Currency (using "$", "," and ".") */
    regCurrency:     /^\$?\d*,?\.?\d{0,2}$/i,

    /* Base Address rule */
    regAddress: /^[a-zа-я_0-9-\s\.\(\)\[\]\/,#№]*$/i,

    /* Good for validating names */
    regName: /^[a-zа-я_0-9,\-\. ]*$/i,

    /* Freeform, text, num and some chars */
    regFreeform: /^[[a-zа-я_0-9\-\+\(\)\[\]\\/&,\.\«\»\"\%\:\s?! ]*$/i,

    /* Denies SQL which could be harmful */
    regNoBadSql: /((delete|drop|update|replace|kill|lock) )/gi,

    /* Requires 'anything' */
    regNotNull: /.+/,

    regLink: /^[a-z_0-9\-]*$/i,
    
    regImageExt: /^.*(\.(gif|jpg|jpeg|png|GIF|JPG|JPEG|PNG))$/,
    
    regPathToFile: /$/,
    
    reqIcq: /^[d{2}]$/i,

    regFullUrl: /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,

    /* Alpha-numeric characters */
    regAlnumWithSpace:        /^[a-zа-я_0-9 \s ]*$/i,
    
    /* Url adress witjot http:// */
    regUrl: /(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/,
    
    /* Chekc by given expression */
    valueByExpression: function(testValue, regularExp)
    {
        return regularExp.test(testValue);
    },

    alnum: function(testValue)
    {
        return this.regAlnum.test(testValue);
    },

    alpha: function(testValue)
    {
        return this.regAlpha.test(testValue);
    },

    digits: function(testValue)
    {
        return this.regDigits.test(testValue);
    },

    int: function(testValue)
    {
        return this.regInt.test(testValue);
    },

    phone: function(testValue)
    {
        return this.regPhone.test(testValue);
    },

    date: function(testValue, format)
    {
        if('usa' === format) {
            return this.regDateUsa.test(testValue);
        } else if('iso8601' === format) {
            return this.regDateIso8601.test(testValue);
        } else if('gost' === format) {
            return this.regDateGost.test(testValue);
        } else {
            return this.date(testValue, 'gost');
        }
    },

    dateTime: function(testValue)
    {
        return this.regDateTime.test(testValue);
    },

    time: function(testValue)
    {
        return this.regTime.test(testValue);
    },

    email: function(testValue)
    {
        return this.regEmail.test(testValue);
    },

    currency: function(testValue)
    {
        return this.regCurrency.test(testValue);
    },

    address: function(testValue)
    {
        return this.regAddress.test(testValue);
    },

    name: function(testValue)
    {
        return this.regName.test(testValue);
    },

    freeform: function(testValue)
    {
        return this.regFreeform.test(testValue);
    },

    noBadSql: function(testValue)
    {
        return this.regNoBadSql.test(testValue);
    },

    notNull: function(testValue)
    {
        return this.regNotNull.test(testValue);
    },

    isArray: function(object) {
        if (object.constructor.toString().indexOf("Array") == -1) {
            return false;
        } else {
            return true;
        }
    },
    url: function(testValue) {
        return this.regUrl.test(testValue);
    },
    link: function(testValue)
    {
        return this.regLink.test(testValue);
    },
    
    imageExt: function(testValue)
    {
        return this.regImageExt.test(testValue);
    },
    
    pathToFile: function(testValue)
    {
        if(!(Prototype.Browser.Opera)) {
            return this.regPathToFile.test(testValue);
        } else {
            return true;
        }
    },
    
    icq: function(testValue)
    {
        return this.regIcq.test(testValue);
    },
    
    url: function(testValue)
    {
        return this.regUrl.test(testValue);
    },
    fullUrl: function(testValue) {
        return this.regFullUrl.test(testValue);
    },
    mailTo: function(testValue)
    {
        return this._regMailTo.test(testValue);
    }
};
/*
@implement:

Date Format (m/d/y)    ^([\d]|1[0,1,2])/([0-9]|[0,1,2][0-9]|3[0,1])/\d{4}$    12/21/2005    TEST
Decimal Number         ^\d*[0-9](\.\d*[0-9])?$    234.342    TEST
Document Filenames     ^[a-zA-Z0-9-_\.]+\.(pdf|txt|doc|csv)$    world-domination.pdf    TEST
E-mail Address         ^([0-9a-zA-Z]+([_.-]?[0-9a-zA-Z]+)*@[0-9a-zA-Z]+[0-9,a-z,A-Z,.,-]*(.){1}[a-zA-Z]{2,4})+$    info@netshiftmedia.com    TEST
HTML Color Codes       ^#?([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?$    #00ccff    TEST
Image Filenames        ^[a-zA-Z0-9-_\.]+\.(jpg|gif|png)$    new-pic_company.jpg    TEST
IP Address             ^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})$    192.168.0.1    TEST
Multimedia Filenames   ^[a-zA-Z0-9-_\.]+\.(swf|mov|wma|mpg|mp3|wav)$    company-presentation.swf    TEST
MySQL Date Format      ^\d{4}-(0[0-9]|1[0,1,2])-([0,1,2][0-9]|3[0,1])$    2005-09-02    TEST
Phone Number           ^[2-9]\d{2}-\d{3}-\d{4}$    250-555-4542    TEST
Postal Code (CAD)      ^([A-Z][0-9]){3}$    V2B2S3    TEST
Time Format (HH:MM)    ^([0-1][0-9]|[2][0-3])(:([0-5][0-9])){1,2}$    12:29    TEST
URL                    ^(http[s]?://|ftp://)?(www\.)?[a-zA-Z0-9-\.]+\.(com|org|net|mil|edu|ca|co.uk|com.au|gov)$    http://www.netshiftmedia.com    TEST
Versatile Phone Number ^(([0-9]{1})*[- .(]*([0-9a-zA-Z]{3})*[- .)]*[0-9a-zA-Z]{3}[- .]*[0-9a-zA-Z]{4})+$    1.245.532.3422    TEST

*/


