/*

Input Mask plugin extensions

http://github.com/RobinHerbots/jquery.inputmask

Copyright (c) 2010 - 2014 Robin Herbots

Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)

Version: 0.0.0



Optional extensions on the jquery.inputmask base

*/

(function ($) {

    //extra definitions

    $.extend($.inputmask.defaults.definitions, {

        'A': {

            validator: "[A-Za-z]",

            cardinality: 1,

            casing: "upper" //auto uppercasing

        },

        '#': {

            validator: "[A-Za-z\u0410-\u044F\u0401\u04510-9]",

            cardinality: 1,

            casing: "upper"

        }

    });

    $.extend($.inputmask.defaults.aliases, {

        'url': {

            mask: "ir",

            placeholder: "",

            separator: "",

            defaultPrefix: "http://",

            regex: {

                urlpre1: new RegExp("[fh]"),

                urlpre2: new RegExp("(ft|ht)"),

                urlpre3: new RegExp("(ftp|htt)"),

                urlpre4: new RegExp("(ftp:|http|ftps)"),

                urlpre5: new RegExp("(ftp:/|ftps:|http:|https)"),

                urlpre6: new RegExp("(ftp://|ftps:/|http:/|https:)"),

                urlpre7: new RegExp("(ftp://|ftps://|http://|https:/)"),

                urlpre8: new RegExp("(ftp://|ftps://|http://|https://)")

            },

            definitions: {

                'i': {

                    validator: function (chrs, buffer, pos, strict, opts) {

                        return true;

                    },

                    cardinality: 8,

                    prevalidator: (function () {

                        var result = [], prefixLimit = 8;

                        for (var i = 0; i < prefixLimit; i++) {

                            result[i] = (function () {

                                var j = i;

                                return {

                                    validator: function (chrs, buffer, pos, strict, opts) {

                                        if (opts.regex["urlpre" + (j + 1)]) {

                                            var tmp = chrs, k;

                                            if (((j + 1) - chrs.length) > 0) {

                                                tmp = buffer.join('').substring(0, ((j + 1) - chrs.length)) + "" + tmp;

                                            }

                                            var isValid = opts.regex["urlpre" + (j + 1)].test(tmp);

                                            if (!strict && !isValid) {

                                                pos = pos - j;

                                                for (k = 0; k < opts.defaultPrefix.length; k++) {

                                                    buffer[pos] = opts.defaultPrefix[k]; pos++;

                                                }

                                                for (k = 0; k < tmp.length - 1; k++) {

                                                    buffer[pos] = tmp[k]; pos++;

                                                }

                                                return { "pos": pos };

                                            }

                                            return isValid;

                                        } else {

                                            return false;

                                        }

                                    }, cardinality: j

                                };

                            })();

                        }

                        return result;

                    })()

                },

                "r": {

                    validator: ".",

                    cardinality: 50

                }

            },

            insertMode: false,

            autoUnmask: false

        },

        "ip": { //ip-address mask

            mask: ["[[x]y]z.[[x]y]z.[[x]y]z.x[yz]", "[[x]y]z.[[x]y]z.[[x]y]z.[[x]y][z]"],

            definitions: {

                'x': {

                    validator: "[012]",

                    cardinality: 1,

                    definitionSymbol: "i"

                },

                'y': {

                    validator: function (chrs, buffer, pos, strict, opts) {

                        if (pos - 1 > -1 && buffer[pos - 1] != ".")

                            chrs = buffer[pos - 1] + chrs;

                        else chrs = "0" + chrs;

                        return new RegExp("2[0-5]|[01][0-9]").test(chrs);

                    },

                    cardinality: 1,

                    definitionSymbol: "i"

                },

                'z': {

                    validator: function (chrs, buffer, pos, strict, opts) {

                        if (pos - 1 > -1 && buffer[pos - 1] != ".") {

                            chrs = buffer[pos - 1] + chrs;

                            if (pos - 2 > -1 && buffer[pos - 2] != ".") {

                                chrs = buffer[pos - 2] + chrs;

                            } else chrs = "0" + chrs;

                        } else chrs = "00" + chrs;

                        return new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]").test(chrs);

                    },

                    cardinality: 1,

                    definitionSymbol: "i"

                }

            }

        }

    });

})(jQuery);

