.=< { Star Gans Tq } >=.

  • Home

  • Killme
  • Download
  • Current Path : /home/m/e/h/meharicl/home2/meharicl/www/recensement2/js/jquery/
    Upload File
    @Command ~ $  
    Current File : /home/m/e/h/meharicl/home2/meharicl/www/recensement2/js/jquery/event-manager.js

    if (!window.ccsJQuery)
        window.ccsJQuery = jQuery;
    else
        $ = jQuery = window.ccsJQuery;
    
    (function ($) {
        var UrlParameter = function(param) {
            if (arguments.length == 0) return this;
            var parts = [];
            if (param == "") {
                this.isEmpty = true;
            } else if (arguments.length == 2) {
                parts = arguments;
            } else if (typeof(param) == "string") {
                parts = param.replace( /\+/ig , " ").split("=");
                this.name = decodeURIComponent(parts[0]);
                this.value = decodeURIComponent(parts[1]);
                return this;
            } else {
                parts = param;
            };
            this.name = parts[0];
            this.value = parts[1];
            return this;
        };
    
        UrlParameter.prototype.toString = function() {
            if (this.isEmpty)
                return "";
            return encodeURIComponent(this.name) + "=" + encodeURIComponent(this.value);
        };
    
        var Url = function(url) {
            if (!url)
                url = window.location.href;
    
            var anchorIndex = url.indexOf("#");
            if (anchorIndex != -1) {
                this._anchor = url.substring(anchorIndex + 1);
                url = url.substring(0, anchorIndex);
            }
    
            this._params = [];
            var paramIndex = url.indexOf("?");
            if (paramIndex != -1) {
                this._baseUrl = url.substring(0, paramIndex);
                this.params(url.substring(paramIndex + 1));
            } else {
                this._baseUrl = url;
            }
        };
    
        Url.prototype.params = function(params) {
            var parts = params.split("&");
            for (var i = 0; i < parts.length; i++) {
                this.addParameter(parts[i]);
            };
        };
    
        Url.prototype.addParameter = function() {
            var param = UrlParameter.apply(new UrlParameter(), arguments);
            this._params.push(param);
            return param;
        };
    
        Url.prototype.removeParameter = function(name) {
            var newParams = [];
            for (var i = 0; i < this._params.length; i++) {
                var param = this._params[i];
                if (param.name != name)
                    newParams.push(param);
            };
            this._params = newParams;
        };
    
        Url.prototype.getParameter = function(name) {
            for (var i = 0; i < this._params.length; i++) {
                var param = this._params[i];
                if (param.name == name)
                    return param;
            };
            return null;
        };
    
        Url.prototype.getParameterValue = function(name) {
            var p = this.getParameter(name);
            return (!p) ? null : p.value;
        };
    
        Url.prototype.parameter = function(name, value) {
            var p = this.getParameter(name);
            if (arguments.length == 2) {
                if (p)
                    p.value = value;
                else
                    this.addParameter(name, value);
                return value;
            } else {
                return (!p) ? null : p.value;
            }
        };
    
        Url.prototype.anchor = function(anchor) {
            if (arguments.length > 0)
                this._anchor = anchor;
            return this._anchor;
        };
    
        Url.prototype.parameterString = function() {
            var r = [];
            for (var i = 0; i < this._params.length; i++) {
                r.push(this._params[i].toString());
            }
            return r.join("&");
        };
    
        Url.prototype.toString = function() {
            var res = this._baseUrl;
            if (this._params.length > 0)
                res += "?" + this.parameterString();
            if (this._anchor)
                res += "#" + this._anchor;
            return res;
        };
    
        $.fn.Url = Url;
    })(jQuery);
    
    
    (function ($) {
        
        var methods = {};
    
        var binds = {};
    
        methods.bind = function (func) {
            func.call(this);
            if (!binds[this.selector])
                binds[this.selector] = [];
            binds[this.selector].push(func);
        };
    
        methods.reBind = function () {
            var c = this;
            $.each(binds, function (selector) {
                $.each(this, function () {
                    this.call(c.find(selector));
                });
            });
        };
    
        $.fn.ccsBind = function (method) {
            if (methods[method]) {
                return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
            } else if (typeof method === 'function' || !method) {
                return methods.bind.apply(this, arguments);
            } else {
                $.error('Method ' + method + ' does not exist on jQuery.ccsBind');
                return $;
            };
        };
    })(jQuery);
    
    
    
    (function ($) {
        
        function stringToRegExp(string) {
            var str = String(string);
            str = str.replace(/\\/g, "\\\\");
            str = str.replace(/\//g, "\\/");
            str = str.replace(/\./g, "\\.");
            str = str.replace(/\(/g, "\\(");
            str = str.replace(/\)/g, "\\)");
            str = str.replace(/\[/g, "\\[");
            str = str.replace(/\]/g, "\\]");
            return str;
        };
    
        function parseParams(text,substitutions) {
            // replace the {0}, ... with corresponded substitution string and return the result
            var resString = text;
            if (resString != "" && substitutions != null) {
                var array = (typeof(substitutions) != "object") ? (new Array(substitutions)) : substitutions;
                var icount = array.length;
                for (var i = 0; i < icount; i++)
                    resString = resString.replace("{" + i + "}", array[i]);
                delete array;
                array = null;
            }
            return resString;
        };
        
        function ccsShowError(control, msg) {
            alert(msg);
            control.focus();
            return false;
        };
    
        function validate(control) {
            
            var errorMessage = control.data("ccsErrorMessage");
            var customErrorMessage = (typeof(errorMessage) != "undefined");
    
            var ccsCaption = control.data("ccsCaption");
            var ccsRequired = control.data("ccsRequired");
            var ccsMinLength = control.data("ccsMinLength");
            var ccsMaxLength = control.data("ccsMaxLength");
            var ccsInputMask = control.data("ccsInputMask");
            var ccsRegExp = control.data("ccsRegExp");
            var ccsDateFormat = control.data("ccsDateFormat");
            var ccsValidator = control.data("ccsValidator");
            var value = control.val();
    
    
            if (typeof(ccsRequired) == "boolean" && ccsRequired)
                if (value == "")
                    return ccsShowError(control, customErrorMessage ? errorMessage :
                        parseParams(Globalize.cultures["default"].messages["CCS_RequiredField"], ccsCaption));
    
            if (typeof(ccsMinLength) == "number")
                if (value != "" && value.length < parseInt(ccsMinLength))
                    return ccsShowError(control, customErrorMessage ? errorMessage :
                        parseParams(Globalize.cultures["default"].messages["CCS_MinimumLength"], [ccsCaption, parseInt(ccsMinLength)]));
    
            if (typeof(ccsMaxLength) == "number")
                if (value != "" && value.length > parseInt(ccsMaxLength))
                    return ccsShowError(control, customErrorMessage ? errorMessage :
                        parseParams(Globalize.cultures["default"].messages["CCS_MaximumLength"], [ccsCaption, parseInt(ccsMaxLength)]));
    
            if (typeof(ccsInputMask) == "string") {
                var mask = ccsInputMask;
                var maskRE = new RegExp(stringToRegExp(mask).replace(/\u01a0/g, "\\d").replace(/\u01a0/g, "[A-Za-z]"), "i");
                if (value != "" && (value.search(maskRE) == -1))
                    return ccsShowError(control, customErrorMessage ? errorMessage :
                        parseParams(Globalize.cultures["default"].messages["CCS_IncorrectValue"], ccsCaption));
            }
    
            if (typeof(ccsRegExp) == "string")
                if (value != "" && (value.search(new RegExp(ccsRegExp, "i")) == -1))
                    return ccsShowError(control, customErrorMessage ? errorMessage :
                        parseParams(Globalize.cultures["default"].messages["CCS_IncorrectValue"], ccsCaption));
    
            if (typeof(ccsDateFormat) == "string") {
                if (value != "" && ! Globalize.parseDate(value, ccsDateFormat) )
                    return ccsShowError(control, customErrorMessage ? errorMessage :
                        parseParams(Globalize.cultures["default"].messages["CCS_IncorrectFormat"], [ccsCaption, ccsDateFormat]));
            }
    
            if (typeof(ccsValidator) == "function")
                if (!ccsValidator())
                    return ccsShowError(control, customErrorMessage ? errorMessage :
                        parseParams(Globalize.cultures["default"].messages["CCS_IncorrectValue"], ccsCaption));
    
            return true;
        };
        
        $.fn.ccsValidate = function () {
            if ($("body").data("disableValidation")) return true;
            var res = true;
            $(this).each(function(){
                $(this).find("*").each(function(){
                    res = res && validate($(this)); 
                });
            });
            return res;
        };
    })(jQuery);
    
    (function ($) {
        $(function() {
            var Url = $.fn.Url;
            var changeSizeHandler = function(formName, size) {
                var u = new Url(window.location.href.toString());
                u.parameter(formName + "PageSize", size);
                u.parameter(formName + "Page", 1);
                window.location.href = u.toString();
            };
            $("select[data-grid-size]").ccsBind(function() {
                $(this).bind("change", function() {
                    var obj = $(this);
                    var handler = obj.data("ccsChangeSize");
                    if (handler)
                        handler(obj.data("grid-size"), obj.val());
                });
                $(this).each(function() {
                    if (!$(this).data("ccsChangeSize"))
                        $(this).data("ccsChangeSize", changeSizeHandler);
                });
            });
            
            var changePageHandler = function(formName, page) {
                var u = new Url(window.location.href.toString());
                u.parameter(formName + "Page", page);
                window.location.href = u.toString();
            };
            $("input[data-grid-page]").ccsBind(function() {
                $(this).bind("click", function() {
                    var obj = $(this);
                    var handler = obj.data("ccsChangePage");
                    if (handler)
                        handler(obj.data("grid-page"),  obj.parent().find("input[name='" + obj.data("grid-page") + "Page']").val());
                });
                $(this).each(function() {
                    if (!$(this).data("ccsChangePage"))
                        $(this).data("ccsChangePage", changePageHandler);
                });
            });
    
            $("div[data-emulate-form]").ccsBind(function() {
                this.each(function() {
                    var self = $(this);
                    self.find("input[type='submit'], input[type='image']").click(function() {
                        $("form[data-need-form-emulation]").data("emulate-form", self);
                    });
                });
            });
    
            $("form[data-need-form-emulation]").bind("submit", function () {
                return $($(this).data("emulate-form")).triggerHandler($.Event("submit"), {});
            });
        });
    })(jQuery);
    
    
    (function($) {
        var isO = !!window.opera, isG = (navigator.userAgent.indexOf("Firefox") > -1);
    
        var nonConstantCharacters = { "\u01a0": "\u01a0", "\u01a1": "\u01a1" };
    
        function isConstantCharacter(mask, num) {
            return !nonConstantCharacters[mask.charAt(num)];
        };
    
        var keys = {
            "backspace": 8, //  backspace
            "tab": 9, //  tab
            "enter": 13, //  enter
            "shift": 16, //  shift
            "ctrl": 17, //  ctrl
            "alt": 18, //  alt
            "pauseBreak": 19, //  pause/break
            "capsLock": 20, //  caps lock
            "escape": 27, //  escape
            "pageUp": 33, // page up, to avoid displaying alternate character and confusing people	         
            "pageDown": 34, // page down
            "end": 35, // end
            "home": 36, // home
            "leftArrow": 37, // left arrow
            "upArrow": 38, // up arrow
            "rightArrow": 39, // right arrow
            "downArrow": 40, // down arrow
            "insert": 45, // insert
            "delete": 46, // delete
            "del": 46, // delete
            "leftWindow": 91, // left window
            "rightWindow": 92, // right window
            "selectKey": 93, // select key
            "numpad0": 96, // numpad 0
            "numpad1": 97, // numpad 1
            "numpad2": 98, // numpad 2
            "numpad3": 99, // numpad 3
            "numpad4": 100, // numpad 4
            "numpad5": 101, // numpad 5
            "numpad6": 102, // numpad 6
            "numpad7": 103, // numpad 7
            "numpad8": 104, // numpad 8
            "numpad9": 105, // numpad 9
            "multiply": 106, // multiply
            "add": 107, // add
            "subtract": 109, // subtract
            "decimalPoint": 110, // decimal point
            "divide": 111, // divide
            "F1": 112, // F1
            "F2": 113, // F2
            "F3": 114, // F3
            "F4": 115, // F4
            "F5": 116, // F5
            "F6": 117, // F6
            "F7": 118, // F7
            "F8": 119, // F8
            "F9": 120, // F9
            "F10": 121, // F10
            "F11": 122, // F11
            "F12": 123, // F12
            "numLock": 144, // num lock
            "scrollLock": 145, // scroll lock
            ";": 186, // semi-colon
            "=": 187, // equal-sign
            ",": 188, // comma
            "-": 189, // dash
            ".": 190, // period
            "/": 191, // forward slash
            "`": 192, // grave accent
            "[": 219, // open bracket
            "\\": 220, // back slash
            "]": 221, // close bracket
            "'": 222 // single quote
        };
    
        function caret(element, begin, end) {
            if (typeof begin == 'number') {
                end = (typeof end == 'number') ? end : begin;
                if (element.setSelectionRange) {
                    element.focus();
                    element.setSelectionRange(begin, end);
                } else if (element.createTextRange) {
                    var range = element.createTextRange();
                    range.collapse(true);
                    range.moveEnd('character', end);
                    range.moveStart('character', begin);
                    range.select();
                }
            } else {
                if (element.setSelectionRange) {
                    begin = element.selectionStart;
                    end = element.selectionEnd;
                } else if (document.selection && document.selection.createRange) {
                    var range = document.selection.createRange();
                    begin = 0 - range.duplicate().moveStart('character', -100000);
                    end = begin + range.text.length;
                }
                return { begin: begin, end: end };
            }
        };
    
        function getKeycode(e) {
            if (window.event && window.event.keyCode)
                return window.event.keyCode;
            else
                return e.which;
        };
    
        function genSequence(str, times) {
            var res = '';
            for (var i = 0; i < times; i++)
                res += str;
            return res;
        };
    
        function sType(c, placeholder) {
            if (c.charAt(0).match(/[0-9]/g)) return '\u01a0';
            if (c.charAt(0).match(/[a-zA-Z]/g)) return '\u01a1';
            if (c.charAt(0) == placeholder) return placeholder;
            return '';
        };
    
        function getValueFromMaskedValue(val, mask, placeholder) {
            var res = "";
            var i;
            for (i = 0; i < val.length; i++)
                if (!isConstantCharacter(mask, i) && sType(val.charAt(i), placeholder) != '')
                    res += val.charAt(i);
            return res;
        };
    
        function maskCanBeApplied(val, mask, placeholder) {
            var i = 0, j = 0, res = '';
            for (i = 0; i < mask.length; i++)
                if (j < val.length && mask.charAt(i) == sType(val.charAt(j), placeholder) && !isConstantCharacter(mask, i)) {
                    res += val.charAt(j);
                    j++;
                } else if (isConstantCharacter(mask, i)) {
                    res += mask.charAt(i);
                } else if (sType(val.charAt(j), placeholder) == placeholder) {
                    res += placeholder;
                    j++;
                } else if (j >= val.length) {
                    res += isConstantCharacter(mask, i) ? mask.charAt(i) : placeholder;
                } else
                    return { ans: false };
            return { ans: true, result: res };
        };
    
        function getNextSymbolPosition(str, start, placeholder) {
            for (var i = start; i < str.length; i++)
                if (sType(str.charAt(i), placeholder) != '')
                    return i + 1;
            return start + 1;
        };
    
        function calculatedValue(e, control, keycode) {
            var s = caret(control);
            var $control = $(control);
            var placeholder = $control.data("ccsPlaceholder");
            var mask = $control.data("ccsInputMaskValue");
            var res;
            var mid = '';
            if (keycode == keys.backspace || keycode == keys.del) {
                if (s.begin == s.end)
                    if (keycode == keys.backspace) {
                        s.begin--;
                        for (var i = s.begin; i > 0; i--) {
                            if (!isConstantCharacter(mask, i)) {
                                s.begin = i;
                                $control.data("newCaretPosition", i);
                                break;
                            }
                        }
                    } else {
                        s.end++;
                        for (var i = s.end; i < mask.length; i++) {
                            if (!isConstantCharacter(mask, i)) {
                                s.end = i;
                                break;
                            }
                        }
                    }
                res = control.value.substring(0, Math.max(0, s.begin));
                for (var i = s.begin; i < s.end; i++) {
                    res += isConstantCharacter(mask, i) ? mask.charAt(i) : placeholder;
                    if (!$control.data("newCaretPosition"))
                        $control.data("newCaretPosition", i);
                }
                res += control.value.substring(Math.min(s.end, control.value.length));
            } else {
                if (s.begin == s.end)
                    s.end++;
                res = control.value.substring(0, s.begin);
                var pos;
                for (pos = s.begin; pos < control.value.length; pos++)
                    if (isConstantCharacter(mask, pos))
                        res += mask.charAt(pos);
                    else {
                        res += String.fromCharCode(keycode);
                        $control.data("newCaretPosition", pos+1);
                        break;
                    }
                if (!$control.data("newCaretPosition"))
                    $control.data("newCaretPosition", s.begin);
                for (pos++; pos < s.end; pos++)
                    if (isConstantCharacter(mask, pos))
                        res += mask.charAt(pos);
                    else
                        res += placeholder;
                res += control.value.substring(pos);
            }
            return res;
        };
    
        function getNewCaretPosition(control, keycode, newValue) {
            var res;
            var cur = caret(control);
            var $control = $(control);
            var placeholder = $control.data("ccsPlaceholder");
            var mask = $control.data("ccsInputMaskValue");
            if ($control.data("newCaretPosition")) {
                var pos = $control.data("newCaretPosition");
                $control.data("newCaretPosition", null);
                for (var i = pos; i < mask.length; i++)
                    if (!isConstantCharacter(mask, i))
                        return i;
                for (var i = mask.length; i >= 0; i--)
                    if (!isConstantCharacter(mask, i))
                        return i + 1;
            }
    
            if (keycode == keys.leftArrow) {
                if (cur.begin != cur.end)
                    return cur.begin;
                for (var i = cur.begin - 1; i >= 0; i--)
                    if (!isConstantCharacter(mask, i))
                        return i;
                return -1;
            }
    
            if (keycode == keys.rightArrow) {
                if (cur.begin != cur.end)
                    return cur.end;
                for (var i = cur.end + 1; i < mask.length; i++)
                    if (!isConstantCharacter(mask, i))
                        return i;
                for (var i = mask.length; i >= 0; i--)
                    if (!isConstantCharacter(mask, i))
                        return i + 1;
                return -1;
            }
    
            if (keycode == keys.backspace) {
                res = cur.begin;
                if (cur.end - cur.begin > 0)
                    return cur.begin;
                if (res != 0 && sType(newValue.charAt(res - 1), placeholder) != '')
                    return res - 1;
                for (var i = cur.begin - 1; i >= 0; i--)
                    if (sType(newValue.charAt(i), placeholder) != '')
                        return i + 1;
                return res;
            } else if (keycode == keys.del) {
                res = cur.begin;
                for (var i = res; i < newValue.length; i++)
                    if (sType(newValue.charAt(i), placeholder) != '')
                        return i;
                return newValue.length;
            } else {
                res = cur.begin;
                if (res + 1 == newValue.length)
                    return res + 1;
                if (sType(newValue.charAt(res), placeholder) != '')
                    return res + 1;
                for (var i = res; i < newValue.length; i++)
                    if (sType(newValue.charAt(i), placeholder) != '')
                        return i + 1;
            }
            return -1;
        };
    
        function doShift(control, clearValue, keycode) {
            if (keycode == keys.del) {
                var $control = $(control);
                var mask = $control.data("ccsInputMaskValue");
                var placeholder = $control.data("ccsPlaceholder");
                var c = caret(control);
                if (c.begin == c.end)
                    c.end++;
                var clearC = { };
                var clearMask = "";
                var j = -1;
                for (var i = 0; i<mask.length; i++) {
                    if (!isConstantCharacter(mask, i)) {
                        clearMask += mask.charAt(i);
                        j++;
                        if (isNaN(clearC.begin) && i >= c.begin)
                            clearC.begin = j;
                        else if (!isNaN(clearC.begin) && isNaN(clearC.end) && i >= c.end)
                            clearC.end = j;
                    }
                }
                var shiftLength = 0;
                var lastChar = clearMask.charAt(clearC.end - 1);
                for (var i = clearC.end-1; i >= clearC.begin; i--) {
                    if (clearMask.charAt(i) != lastChar)
                        break;
                    shiftLength++;
                }
                var lastShiftPosition;
                for (var i = clearC.end; i < clearMask.length; i++)
                    if (clearMask.charAt(i) != lastChar) {
                        lastShiftPosition = i;
                        break;
                    }
                if (isNaN(lastShiftPosition))
                    lastShiftPosition = clearMask.length;
                var shiftFragment = clearValue.substring(clearC.end - shiftLength, lastShiftPosition);
                var res = clearValue.substring(0, clearC.end - shiftLength);
                res += shiftFragment.substring(shiftLength) + genSequence(placeholder, shiftLength);
                res += clearValue.substring(lastShiftPosition);
                return res;
            }
            return clearValue;
        }
    
        function inputMask(e, sender) {
            var $sender = $(sender);
            var placeholder = $sender.data("ccsPlaceholder");
            var keycode = getKeycode(e, placeholder);
            if (keycode < 32 && keycode != keys.backspace)
                if (keycode == 0) {
                    var mask = $sender.data("ccsInputMaskValue");
                    var c = caret(sender);
                    var val = $sender.val();
                    if (mask.length == val.length)
                        setTimeout(function(parameters) {
                            $sender.val(val);
                            caret(sender, c.begin);
                        }, 100);
                    var pasteValue = val.substr(c.begin - 1, 1);
                    var newVal = val.substring(0, c.begin - 1);
                    for (var i = c.begin; i < mask.length - (val.length - c.begin) + 1; i++)
                        newVal += isConstantCharacter(mask, i) ? mask.charAt(i) : placeholder;
                    newVal += val.substring(mask.length - (val.length - c.begin) + 1);
                    $sender.val(newVal);
                    caret(sender, c.begin - 1);
                    keycode = pasteValue.charCodeAt(0);
                } else {
                    return true;
                }
            if (!String.fromCharCode(keycode).match(/[a-zA-Z0-9]/g) && keycode != keys.backspace && keycode != keys.del)
                return false;
            var newControlVal = calculatedValue(e, sender, keycode);
            var newVal = getValueFromMaskedValue(newControlVal, $sender.data("ccsInputMaskValue"), placeholder);
            newVal = doShift(sender, newVal, keycode);
            var newMaskedValue = maskCanBeApplied(newVal, $sender.data("ccsInputMaskValue"), placeholder);
            if (newMaskedValue.ans) {
                var cp = getNewCaretPosition(sender, keycode, newMaskedValue.result);
                sender.value = newMaskedValue.result;
                caret(sender, cp);
            }
            return false;
        };
    
        var events = { };
        events.onkeypress = function(e) {
            var keycode = getKeycode(e);
            if ((e.shiftKey || e.ctrlKey || e.altKey) && (keycode != keys.del && keycode != keys.backspace)) {
                return true;
            }
            return inputMask(e, this);
        };
    
        events.onkeydown = function(e) {
            var keycode = getKeycode(e);
            if ((e.shiftKey || e.ctrlKey || e.altKey) && (keycode != keys.del && keycode != keys.backspace)) {
                return true;
            }
            if (keycode == keys.backspace && !isG || keycode == keys.del || keycode == 0)
                return inputMask(e, this);
            if ((keycode == keys.leftArrow || keycode == keys.rightArrow) && !e.shiftKey) {
                var pos = getNewCaretPosition(this, keycode);
                if (pos != -1)
                    caret(this, pos);
                return false;
            }
        };
    
        events.onfocus = function(e) {
            var $this = $(this);
            var oThis = this;
            if (this.value == '') {
                this.value = $this.data("blankValue");
                setTimeout(function() {
                    caret(oThis, $this.data("blankValue").indexOf($this.data("ccsPlaceholder")));
                }, 10);
            }
        };
    
        events.onblur = function(e) {
            var $this = $(this);
            if (this.value == $this.data("blankValue"))
                this.value = '';
        };
    
        events.onpaste = function(e) {
            var $this = $(this);
            var oThis = this;
            var c = caret(this);
            var oldVal = $this.val();
            var placeholder = $this.data("ccsPlaceholder");
            var mask = $this.data("ccsInputMaskValue");
            var last = c.begin;
            setTimeout(function() {
                var pasteValue = $this.val().substring(c.begin, $this.val().length - (oldVal.length - c.end));
                var j = 0;
                var res = oldVal.substring(0, c.begin);
                for (var i = c.begin; i < mask.length; i++) {
                    if (j >= pasteValue.length) {
                        res += oldVal.charAt(i);
                    } else if (mask.charAt(i) == pasteValue.charAt(j) || (!isConstantCharacter(mask, i) && (pasteValue.charAt(j) == placeholder || sType(pasteValue.charAt(j), placeholder) == mask.charAt(i)))) {
                        res += pasteValue.charAt(j);
                        last = i + 1;
                        j++;
                    } else {
                        res += (isConstantCharacter(mask, i) ? mask.charAt(i) : oldVal.charAt(i));
                    }
                }
                $this.val(res);
                $this.data("newCaretPosition", last);
                var cu = getNewCaretPosition(oThis);
                if (cu != -1)
                    caret(oThis, cu);
            }, 20);
        };
    
        events.oncut = function(e) {
            var $this = $(this);
            var c = caret(this);
            var placeholder = $this.data("ccsPlaceholder");
            var mask = $this.data("ccsInputMaskValue");
            var res = $this.val().substring(0, c.begin);
            for (var i = c.begin; i < c.end; i++) {
                res += isConstantCharacter(mask, i) ? mask.charAt(i) : placeholder;
            }
            res += $this.val().substring(c.end);
            $this.val(res);
            caret(this, c.begin);
        };
    
    
        var defaults = {
            placeholder: "_"
        };
    
        var methods = {
            init: function(options) {
                var settings = $.extend({ }, defaults, options);
    
                return this.each(function() {
                    var control = $(this);
                    control.data("ccsPlaceholder", settings.placeholder);
                    if (settings.inputMask)
                        control.data("ccsInputMaskValue", settings.inputMask);
                    var res = '';
                    for (var i = 0; i < settings.inputMask.length; i++)
                        if (!isConstantCharacter(settings.inputMask, i))
                            res += settings.placeholder;
                        else
                            res += settings.inputMask.charAt(i);
                    control.data("blankValue", res);
                    control.bind("keypress", events.onkeypress);
                    control.bind("keydown", events.onkeydown);
                    control.bind("focus", events.onfocus);
                    control.bind("blur", events.onblur);
                    control.bind("paste", events.onpaste);
                    control.bind("cut", events.oncut);
                });
            }
        };
    
        $.fn.ccsInputMask = function(method) {
            if (methods[method]) {
                return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
            } else if (typeof method === 'object' || !method) {
                return methods.init.apply(this, arguments);
            } else {
                return methods.init.call(this, { inputMask: method });
            }
        };
    })(jQuery);
    
    
    /*
        json2.js
        2011-10-19
    
        Public Domain.
    */
    
    var JSON;
    if (!JSON) {
        JSON = {};
    }
    
    (function () {
    
        function f(n) {
            return n < 10 ? '0' + n : n;
        }
    
        if (typeof Date.prototype.toJSON !== 'function') {
    
            Date.prototype.toJSON = function (key) {
    
                return isFinite(this.valueOf())
                    ? this.getUTCFullYear()     + '-' +
                        f(this.getUTCMonth() + 1) + '-' +
                        f(this.getUTCDate())      + 'T' +
                        f(this.getUTCHours())     + ':' +
                        f(this.getUTCMinutes())   + ':' +
                        f(this.getUTCSeconds())   + 'Z'
                    : null;
            };
    
            String.prototype.toJSON      =
                Number.prototype.toJSON  =
                Boolean.prototype.toJSON = function (key) {
                    return this.valueOf();
                };
        }
    
        var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
            escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
            gap,
            indent,
            meta = {
                '\b': '\\b',
                '\t': '\\t',
                '\n': '\\n',
                '\f': '\\f',
                '\r': '\\r',
                '"' : '\\"',
                '\\': '\\\\'
            },
            rep;
    
        function quote(string) {
    
            escapable.lastIndex = 0;
            return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
                var c = meta[a];
                return typeof c === 'string'
                    ? c
                    : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
            }) + '"' : '"' + string + '"';
        }
    
    
        function str(key, holder) {
            var i,
                k,
                v,
                length,
                mind = gap,
                partial,
                value = holder[key];
    
            if (value && typeof value === 'object' &&
                    typeof value.toJSON === 'function') {
                value = value.toJSON(key);
            }
    
    
            if (typeof rep === 'function') {
                value = rep.call(holder, key, value);
            }
    
            switch (typeof value) {
            case 'string':
                return quote(value);
    
            case 'number':
    
                return isFinite(value) ? String(value) : 'null';
    
            case 'boolean':
            case 'null':
                return String(value);
            case 'object':
                if (!value) {
                    return 'null';
                }
                gap += indent;
                partial = [];
                if (Object.prototype.toString.apply(value) === '[object Array]') {
                    length = value.length;
                    for (i = 0; i < length; i += 1) {
                        partial[i] = str(i, value) || 'null';
                    }
                    v = partial.length === 0
                        ? '[]'
                        : gap
                        ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']'
                        : '[' + partial.join(',') + ']';
                    gap = mind;
                    return v;
                }
                if (rep && typeof rep === 'object') {
                    length = rep.length;
                    for (i = 0; i < length; i += 1) {
                        if (typeof rep[i] === 'string') {
                            k = rep[i];
                            v = str(k, value);
                            if (v) {
                                partial.push(quote(k) + (gap ? ': ' : ':') + v);
                            }
                        }
                    }
                } else {
                    for (k in value) {
                        if (Object.prototype.hasOwnProperty.call(value, k)) {
                            v = str(k, value);
                            if (v) {
                                partial.push(quote(k) + (gap ? ': ' : ':') + v);
                            }
                        }
                    }
                }
                v = partial.length === 0
                    ? '{}'
                    : gap
                    ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}'
                    : '{' + partial.join(',') + '}';
                gap = mind;
                return v;
            }
        }
        if (typeof JSON.stringify !== 'function') {
            JSON.stringify = function (value, replacer, space) {
                var i;
                gap = '';
                indent = '';
                if (typeof space === 'number') {
                    for (i = 0; i < space; i += 1) {
                        indent += ' ';
                    }
                } else if (typeof space === 'string') {
                    indent = space;
                }
                rep = replacer;
                if (replacer && typeof replacer !== 'function' &&
                        (typeof replacer !== 'object' ||
                        typeof replacer.length !== 'number')) {
                    throw new Error('JSON.stringify');
                }
                return str('', {'': value});
            };
        }
        if (typeof JSON.parse !== 'function') {
            JSON.parse = function (text, reviver) {
                var j;
    
                function walk(holder, key) {
                    var k, v, value = holder[key];
                    if (value && typeof value === 'object') {
                        for (k in value) {
                            if (Object.prototype.hasOwnProperty.call(value, k)) {
                                v = walk(value, k);
                                if (v !== undefined) {
                                    value[k] = v;
                                } else {
                                    delete value[k];
                                }
                            }
                        }
                    }
                    return reviver.call(holder, key, value);
                }
                text = String(text);
                cx.lastIndex = 0;
                if (cx.test(text)) {
                    text = text.replace(cx, function (a) {
                        return '\\u' +
                            ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
                    });
                }
                if (/^[\],:{}\s]*$/
                        .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
                            .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
                            .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
                    j = eval('(' + text + ')');
                    return typeof reviver === 'function'
                        ? walk({'': j}, '')
                        : j;
                }
                throw new SyntaxError('JSON.parse');
            };
        }
    }());