/* Input Mask plugin extensions github.com/RobinHerbots/jquery.inputmask Copyright © 2010 - 2014 Robin Herbots Licensed under the MIT license (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);