PageSourceSearch

https://frontiersemi.com/js/jquery/event-manager.js

js frontiersemi.com collected 2026-10-10 00:31:02 UTC 37,555 bytes, 1,027 lines download raw bytes

1if (!window.ccsJQuery)
2    window.ccsJQuery = jQuery;
3else
4    $ = jQuery = window.ccsJQuery;
5
6(function ($) {
7    var UrlParameter = function(param) {
8        if (arguments.length == 0) return this;
9        var parts = [];
10        if (param == "") {
11            this.isEmpty = true;
12        } else if (arguments.length == 2) {
13            parts = arguments;
14        } else if (typeof(param) == "string") {
15            parts = param.replace( /\+/ig , " ").split("=");
16            this.name = decodeURIComponent(parts[0]);
17            this.value = decodeURIComponent(parts[1]);
18            return this;
19        } else {
20            parts = param;
21        };
22        this.name = parts[0];
23        this.value = parts[1];
24        return this;
25    };
26
27    UrlParameter.prototype.toString = function() {
28        if (this.isEmpty)
29            return "";
30        return encodeURIComponent(this.name) + "=" + encodeURIComponent(this.value);
31    };
32
33    var Url = function(url) {
34        if (!url)
35            url = window.location.href;
36
37        var anchorIndex = url.indexOf("#");
38        if (anchorIndex != -1) {
39            this._anchor = url.substring(anchorIndex + 1);
40            url = url.substring(0, anchorIndex);
41        }
42
43        this._params = [];
44        var paramIndex = url.indexOf("?");
45        if (paramIndex != -1) {
46            this._baseUrl = url.substring(0, paramIndex);
47            this.params(url.substring(paramIndex + 1));
48        } else {
49            this._baseUrl = url;
50        }
51    };
52
53    Url.prototype.params = function(params) {
54        var parts = params.split("&");
55        for (var i = 0; i < parts.length; i++) {
56            this.addParameter(parts[i]);
57        };
58    };
59
60    Url.prototype.addParameter = function() {
61        var param = UrlParameter.apply(new UrlParameter(), arguments);
62        this._params.push(param);
63        return param;
64    };
65
66    Url.prototype.removeParameter = function(name) {
67        var newParams = [];
68        for (var i = 0; i < this._params.length; i++) {
69            var param = this._params[i];
70            if (param.name != name)
71                newParams.push(param);
72        };
73        this._params = newParams;
74    };
75
76    Url.prototype.getParameter = function(name) {
77        for (var i = 0; i < this._params.length; i++) {
78            var param = this._params[i];
79            if (param.name == name)
80                return param;
81        };
82        return null;
83    };
84
85    Url.prototype.getParameterValue = function(name) {
86        var p = this.getParameter(name);
87        return (!p) ? null : p.value;
88    };
89
90    Url.prototype.parameter = function(name, value) {
91        var p = this.getParameter(name);
92        if (arguments.length == 2) {
93            if (p)
94                p.value = value;
95            else
96                this.addParameter(name, value);
97            return value;
98        } else {
99            return (!p) ? null : p.value;
100        }
101    };
102
103    Url.prototype.anchor = function(anchor) {
104        if (arguments.length > 0)
105            this._anchor = anchor;
106        return this._anchor;
107    };
108
109    Url.prototype.parameterString = function() {
110        var r = [];
111        for (var i = 0; i < this._params.length; i++) {
112            r.push(this._params[i].toString());
113        }
114        return r.join("&");
115    };
116
117    Url.prototype.toString = function() {
118        var res = this._baseUrl;
119        if (this._params.length > 0)
120            res += "?" + this.parameterString();
121        if (this._anchor)
122            res += "#" + this._anchor;
123        return res;
124    };
125
126    $.fn.Url = Url;
127})(jQuery);
128
129
130(function ($) {
131    
132    var methods = {};
133
134    var binds = {};
135
136    methods.bind = function (func) {
137        func.call(this);
138        if (!binds[this.selector])
139            binds[this.selector] = [];
140        binds[this.selector].push(func);
141    };
142
143    methods.reBind = function () {
144        var c = this;
145        $.each(binds, function (selector) {
146            $.each(this, function () {
147                this.call(c.find(selector));
148            });
149        });
150    };
151
152    $.fn.ccsBind = function (method) {
153        if (methods[method]) {
154            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
155        } else if (typeof method === 'function' || !method) {
156            return methods.bind.apply(this, arguments);
157        } else {
158            $.error('Method ' + method + ' does not exist on jQuery.ccsBind');
159            return $;
160        };
161    };
162})(jQuery);
163
164
165
166(function ($) {
167    
168    function stringToRegExp(string) {
169        var str = String(string);
170        str = str.replace(/\\/g, "\\\\");
171        str = str.replace(/\//g, "\\/");
172        str = str.replace(/\./g, "\\.");
173        str = str.replace(/\(/g, "\\(");
174        str = str.replace(/\)/g, "\\)");
175        str = str.replace(/\[/g, "\\[");
176        str = str.replace(/\]/g, "\\]");
177        return str;
178    };
179
180    function parseParams(text,substitutions) {
181        // replace the {0}, ... with corresponded substitution string and return the result
182        var resString = text;
183        if (resString != "" && substitutions != null) {
184            var array = (typeof(substitutions) != "object") ? (new Array(substitutions)) : substitutions;
185            var icount = array.length;
186            for (var i = 0; i < icount; i++)
187                resString = resString.replace("{" + i + "}", array[i]);
188            delete array;
189            array = null;
190        }
191        return resString;
192    };
193    
194    function ccsShowError(control, msg) {
195        alert(msg);
196        control.focus();
197        return false;
198    };
199
200    function validate(control) {
201        
202        var errorMessage = control.data("ccsErrorMessage");
203        var customErrorMessage = (typeof(errorMessage) != "undefined");
204
205        var ccsCaption = control.data("ccsCaption");
206        var ccsRequired = control.data("ccsRequired");
207        var ccsMinLength = control.data("ccsMinLength");
208        var ccsMaxLength = control.data("ccsMaxLength");
209        var ccsInputMask = control.data("ccsInputMask");
210        var ccsRegExp = control.data("ccsRegExp");
211        var ccsDateFormat = control.data("ccsDateFormat");
212        var ccsValidator = control.data("ccsValidator");
213        var value = control.val();
214
215
216        if (typeof(ccsRequired) == "boolean" && ccsRequired)
217            if (value == "")
218                return ccsShowError(control, customErrorMessage ? errorMessage :
219                    parseParams(Globalize.cultures["default"].messages["CCS_RequiredField"], ccsCaption));
220
221        if (typeof(ccsMinLength) == "number")
222            if (value != "" && value.length < parseInt(ccsMinLength))
223                return ccsShowError(control, customErrorMessage ? errorMessage :
224                    parseParams(Globalize.cultures["default"].messages["CCS_MinimumLength"], [ccsCaption, parseInt(ccsMinLength)]));
225
226        if (typeof(ccsMaxLength) == "number")
227            if (value != "" && value.length > parseInt(ccsMaxLength))
228                return ccsShowError(control, customErrorMessage ? errorMessage :
229                    parseParams(Globalize.cultures["default"].messages["CCS_MaximumLength"], [ccsCaption, parseInt(ccsMaxLength)]));
230
231        if (typeof(ccsInputMask) == "string") {
232            var mask = ccsInputMask;
233            var maskRE = new RegExp(stringToRegExp(mask).replace(/\u01a0/g, "\\d").replace(/\u01a0/g, "[A-Za-z]"), "i");
234            if (value != "" && (value.search(maskRE) == -1))
235                return ccsShowError(control, customErrorMessage ? errorMessage :
236                    parseParams(Globalize.cultures["default"].messages["CCS_IncorrectValue"], ccsCaption));
237        }
238
239        if (typeof(ccsRegExp) == "string")
240            if (value != "" && (value.search(new RegExp(ccsRegExp, "i")) == -1))
241                return ccsShowError(control, customErrorMessage ? errorMessage :
242                    parseParams(Globalize.cultures["default"].messages["CCS_IncorrectValue"], ccsCaption));
243
244        if (typeof(ccsDateFormat) == "string") {
245            if (value != "" && ! Globalize.parseDate(value, ccsDateFormat) )
246                return ccsShowError(control, customErrorMessage ? errorMessage :
247                    parseParams(Globalize.cultures["default"].messages["CCS_IncorrectFormat"], [ccsCaption, ccsDateFormat]));
248        }
249
250        if (typeof(ccsValidator) == "function")
251            if (!ccsValidator())
252                return ccsShowError(control, customErrorMessage ? errorMessage :
253                    parseParams(Globalize.cultures["default"].messages["CCS_IncorrectValue"], ccsCaption));
254
255        return true;
256    };
257    
258    $.fn.ccsValidate = function () {
259        if ($("body").data("disableValidation")) return true;
260        var res = true;
261        $(this).each(function(){
262            $(this).find("*").each(function(){
263                res = res && validate($(this)); 
264            });
265        });
266        return res;
267    };
268})(jQuery);
269
270(function ($) {
271    $(function() {
272        var Url = $.fn.Url;
273        var changeSizeHandler = function(formName, size) {
274            var u = new Url(window.location.href.toString());
275            u.parameter(formName + "PageSize", size);
276            u.parameter(formName + "Page", 1);
277            window.location.href = u.toString();
278        };
279        $("select[data-grid-size]").ccsBind(function() {
280            $(this).bind("change", function() {
281                var obj = $(this);
282                var handler = obj.data("ccsChangeSize");
283                if (handler)
284                    handler(obj.data("grid-size"), obj.val());
285            });
286            $(this).each(function() {
287                if (!$(this).data("ccsChangeSize"))
288                    $(this).data("ccsChangeSize", changeSizeHandler);
289            });
290        });
291        
292        var changePageHandler = function(formName, page) {
293            var u = new Url(window.location.href.toString());
294            u.parameter(formName + "Page", page);
295            window.location.href = u.toString();
296        };
297        $("input[data-grid-page]").ccsBind(function() {
298            $(this).bind("click", function() {
299                var obj = $(this);
300                var handler = obj.data("ccsChangePage");
301                if (handler)
302                    handler(obj.data("grid-page"),  obj.parent().find("input[name='" + obj.data("grid-page") + "Page']").val());
303            });
304            $(this).each(function() {
305                if (!$(this).data("ccsChangePage"))
306                    $(this).data("ccsChangePage", changePageHandler);
307            });
308        });
309
310        $("div[data-emulate-form]").ccsBind(function() {
311            this.each(function() {
312                var self = $(this);
313                self.find("input[type='submit'], input[type='image']").click(function() {
314                    $("form[data-need-form-emulation]").data("emulate-form", self);
315                });
316            });
317        });
318
319        $("form[data-need-form-emulation]").bind("submit", function () {
320            return $($(this).data("emulate-form")).triggerHandler($.Event("submit"), {});
321        });
322    });
323})(jQuery);
324
325
326(function($) {
327    var isO = !!window.opera, isG = (navigator.userAgent.indexOf("Firefox") > -1);
328
329    var nonConstantCharacters = { "\u01a0": "\u01a0", "\u01a1": "\u01a1" };
330
331    function isConstantCharacter(mask, num) {
332        return !nonConstantCharacters[mask.charAt(num)];
333    };
334
335    var keys = {
336        "backspace": 8, //  backspace
337        "tab": 9, //  tab
338        "enter": 13, //  enter
339        "shift": 16, //  shift
340        "ctrl": 17, //  ctrl
341        "alt": 18, //  alt
342        "pauseBreak": 19, //  pause/break
343        "capsLock": 20, //  caps lock
344        "escape": 27, //  escape
345        "pageUp": 33, // page up, to avoid displaying alternate character and confusing people	         
346        "pageDown": 34, // page down
347        "end": 35, // end
348        "home": 36, // home
349        "leftArrow": 37, // left arrow
350        "upArrow": 38, // up arrow
351        "rightArrow": 39, // right arrow
352        "downArrow": 40, // down arrow
353        "insert": 45, // insert
354        "delete": 46, // delete
355        "del": 46, // delete
356        "leftWindow": 91, // left window
357        "rightWindow": 92, // right window
358        "selectKey": 93, // select key
359        "numpad0": 96, // numpad 0
360        "numpad1": 97, // numpad 1
361        "numpad2": 98, // numpad 2
362        "numpad3": 99, // numpad 3
363        "numpad4": 100, // numpad 4
364        "numpad5": 101, // numpad 5
365        "numpad6": 102, // numpad 6
366        "numpad7": 103, // numpad 7
367        "numpad8": 104, // numpad 8
368        "numpad9": 105, // numpad 9
369        "multiply": 106, // multiply
370        "add": 107, // add
371        "subtract": 109, // subtract
372        "decimalPoint": 110, // decimal point
373        "divide": 111, // divide
374        "F1": 112, // F1
375        "F2": 113, // F2
376        "F3": 114, // F3
377        "F4": 115, // F4
378        "F5": 116, // F5
379        "F6": 117, // F6
380        "F7": 118, // F7
381        "F8": 119, // F8
382        "F9": 120, // F9
383        "F10": 121, // F10
384        "F11": 122, // F11
385        "F12": 123, // F12
386        "numLock": 144, // num lock
387        "scrollLock": 145, // scroll lock
388        ";": 186, // semi-colon
389        "=": 187, // equal-sign
390        ",": 188, // comma
391        "-": 189, // dash
392        ".": 190, // period
393        "/": 191, // forward slash
394        "`": 192, // grave accent
395        "[": 219, // open bracket
396        "\\": 220, // back slash
397        "]": 221, // close bracket
398        "'": 222 // single quote
399    };
400
401    function caret(element, begin, end) {
402        if (typeof begin == 'number') {
403            end = (typeof end == 'number') ? end : begin;
404            if (element.setSelectionRange) {
405                element.focus();
406                element.setSelectionRange(begin, end);
407            } else if (element.createTextRange) {
408                var range = element.createTextRange();
409                range.collapse(true);
410                range.moveEnd('character', end);
411                range.moveStart('character', begin);
412                range.select();
413            }
414        } else {
415            if (element.setSelectionRange) {
416                begin = element.selectionStart;
417                end = element.selectionEnd;
418            } else if (document.selection && document.selection.createRange) {
419                var range = document.selection.createRange();
420                begin = 0 - range.duplicate().moveStart('character', -100000);
421                end = begin + range.text.length;
422            }
423            return { begin: begin, end: end };
424        }
425    };
426
427    function getKeycode(e) {
428        if (window.event && window.event.keyCode)
429            return window.event.keyCode;
430        else
431            return e.which;
432    };
433
434    function genSequence(str, times) {
435        var res = '';
436        for (var i = 0; i < times; i++)
437            res += str;
438        return res;
439    };
440
441    function sType(c, placeholder) {
442        if (c.charAt(0).match(/[0-9]/g)) return '\u01a0';
443        if (c.charAt(0).match(/[a-zA-Z]/g)) return '\u01a1';
444        if (c.charAt(0) == placeholder) return placeholder;
445        return '';
446    };
447
448    function getValueFromMaskedValue(val, mask, placeholder) {
449        var res = "";
450        var i;
451        for (i = 0; i < val.length; i++)
452            if (!isConstantCharacter(mask, i) && sType(val.charAt(i), placeholder) != '')
453                res += val.charAt(i);
454        return res;
455    };
456
457    function maskCanBeApplied(val, mask, placeholder) {
458        var i = 0, j = 0, res = '';
459        for (i = 0; i < mask.length; i++)
460            if (j < val.length && mask.charAt(i) == sType(val.charAt(j), placeholder) && !isConstantCharacter(mask, i)) {
461                res += val.charAt(j);
462                j++;
463            } else if (isConstantCharacter(mask, i)) {
464                res += mask.charAt(i);
465            } else if (sType(val.charAt(j), placeholder) == placeholder) {
466                res += placeholder;
467                j++;
468            } else if (j >= val.length) {
469                res += isConstantCharacter(mask, i) ? mask.charAt(i) : placeholder;
470            } else
471                return { ans: false };
472        return { ans: true, result: res };
473    };
474
475    function getNextSymbolPosition(str, start, placeholder) {
476        for (var i = start; i < str.length; i++)
477            if (sType(str.charAt(i), placeholder) != '')
478                return i + 1;
479        return start + 1;
480    };
481
482    function calculatedValue(e, control, keycode) {
483        var s = caret(control);
484        var $control = $(control);
485        var placeholder = $control.data("ccsPlaceholder");
486        var mask = $control.data("ccsInputMaskValue");
487        var res;
488        var mid = '';
489        if (keycode == keys.backspace || keycode == keys.del) {
490            if (s.begin == s.end)
491                if (keycode == keys.backspace) {
492                    s.begin--;
493                    for (var i = s.begin; i > 0; i--) {
494                        if (!isConstantCharacter(mask, i)) {
495                            s.begin = i;
496                            $control.data("newCaretPosition", i);
497                            break;
498                        }
499                    }
500                } else {
501                    s.end++;
502                    for (var i = s.end; i < mask.length; i++) {
503                        if (!isConstantCharacter(mask, i)) {
504                            s.end = i;
505                            break;
506                        }
507                    }
508                }
509            res = control.value.substring(0, Math.max(0, s.begin));
510            for (var i = s.begin; i < s.end; i++) {
511                res += isConstantCharacter(mask, i) ? mask.charAt(i) : placeholder;
512                if (!$control.data("newCaretPosition"))
513                    $control.data("newCaretPosition", i);
514            }
515            res += control.value.substring(Math.min(s.end, control.value.length));
516        } else {
517            if (s.begin == s.end)
518                s.end++;
519            res = control.value.substring(0, s.begin);
520            var pos;
521            for (pos = s.begin; pos < control.value.length; pos++)
522                if (isConstantCharacter(mask, pos))
523                    res += mask.charAt(pos);
524                else {
525                    res += String.fromCharCode(keycode);
526                    $control.data("newCaretPosition", pos+1);
527                    break;
528                }
529            if (!$control.data("newCaretPosition"))
530                $control.data("newCaretPosition", s.begin);
531            for (pos++; pos < s.end; pos++)
532                if (isConstantCharacter(mask, pos))
533                    res += mask.charAt(pos);
534                else
535                    res += placeholder;
536            res += control.value.substring(pos);
537        }
538        return res;
539    };
540
541    function getNewCaretPosition(control, keycode, newValue) {
542        var res;
543        var cur = caret(control);
544        var $control = $(control);
545        var placeholder = $control.data("ccsPlaceholder");
546        var mask = $control.data("ccsInputMaskValue");
547        if ($control.data("newCaretPosition")) {
548            var pos = $control.data("newCaretPosition");
549            $control.data("newCaretPosition", null);
550            for (var i = pos; i < mask.length; i++)
551                if (!isConstantCharacter(mask, i))
552                    return i;
553            for (var i = mask.length; i >= 0; i--)
554                if (!isConstantCharacter(mask, i))
555                    return i + 1;
556        }
557
558        if (keycode == keys.leftArrow) {
559            if (cur.begin != cur.end)
560                return cur.begin;
561            for (var i = cur.begin - 1; i >= 0; i--)
562                if (!isConstantCharacter(mask, i))
563                    return i;
564            return -1;
565        }
566
567        if (keycode == keys.rightArrow) {
568            if (cur.begin != cur.end)
569                return cur.end;
570            for (var i = cur.end + 1; i < mask.length; i++)
571                if (!isConstantCharacter(mask, i))
572                    return i;
573            for (var i = mask.length; i >= 0; i--)
574                if (!isConstantCharacter(mask, i))
575                    return i + 1;
576            return -1;
577        }
578
579        if (keycode == keys.backspace) {
580            res = cur.begin;
581            if (cur.end - cur.begin > 0)
582                return cur.begin;
583            if (res != 0 && sType(newValue.charAt(res - 1), placeholder) != '')
584                return res - 1;
585            for (var i = cur.begin - 1; i >= 0; i--)
586                if (sType(newValue.charAt(i), placeholder) != '')
587                    return i + 1;
588            return res;
589        } else if (keycode == keys.del) {
590            res = cur.begin;
591            for (var i = res; i < newValue.length; i++)
592                if (sType(newValue.charAt(i), placeholder) != '')
593                    return i;
594            return newValue.length;
595        } else {
596            res = cur.begin;
597            if (res + 1 == newValue.length)
598                return res + 1;
599            if (sType(newValue.charAt(res), placeholder) != '')
600                return res + 1;
601            for (var i = res; i < newValue.length; i++)
602                if (sType(newValue.charAt(i), placeholder) != '')
603                    return i + 1;
604        }
605        return -1;
606    };
607
608    function doShift(control, clearValue, keycode) {
609        if (keycode == keys.del) {
610            var $control = $(control);
611            var mask = $control.data("ccsInputMaskValue");
612            var placeholder = $control.data("ccsPlaceholder");
613            var c = caret(control);
614            if (c.begin == c.end)
615                c.end++;
616            var clearC = { };
617            var clearMask = "";
618            var j = -1;
619            for (var i = 0; i<mask.length; i++) {
620                if (!isConstantCharacter(mask, i)) {
621                    clearMask += mask.charAt(i);
622                    j++;
623                    if (isNaN(clearC.begin) && i >= c.begin)
624                        clearC.begin = j;
625                    else if (!isNaN(clearC.begin) && isNaN(clearC.end) && i >= c.end)
626                        clearC.end = j;
627                }
628            }
629            var shiftLength = 0;
630            var lastChar = clearMask.charAt(clearC.end - 1);
631            for (var i = clearC.end-1; i >= clearC.begin; i--) {
632                if (clearMask.charAt(i) != lastChar)
633                    break;
634                shiftLength++;
635            }
636            var lastShiftPosition;
637            for (var i = clearC.end; i < clearMask.length; i++)
638                if (clearMask.charAt(i) != lastChar) {
639                    lastShiftPosition = i;
640                    break;
641                }
642            if (isNaN(lastShiftPosition))
643                lastShiftPosition = clearMask.length;
644            var shiftFragment = clearValue.substring(clearC.end - shiftLength, lastShiftPosition);
645            var res = clearValue.substring(0, clearC.end - shiftLength);
646            res += shiftFragment.substring(shiftLength) + genSequence(placeholder, shiftLength);
647            res += clearValue.substring(lastShiftPosition);
648            return res;
649        }
650        return clearValue;
651    }
652
653    function inputMask(e, sender) {
654        var $sender = $(sender);
655        var placeholder = $sender.data("ccsPlaceholder");
656        var keycode = getKeycode(e, placeholder);
657        if (keycode < 32 && keycode != keys.backspace)
658            if (keycode == 0) {
659                var mask = $sender.data("ccsInputMaskValue");
660                var c = caret(sender);
661                var val = $sender.val();
662                if (mask.length == val.length)
663                    setTimeout(function(parameters) {
664                        $sender.val(val);
665                        caret(sender, c.begin);
666                    }, 100);
667                var pasteValue = val.substr(c.begin - 1, 1);
668                var newVal = val.substring(0, c.begin - 1);
669                for (var i = c.begin; i < mask.length - (val.length - c.begin) + 1; i++)
670                    newVal += isConstantCharacter(mask, i) ? mask.charAt(i) : placeholder;
671                newVal += val.substring(mask.length - (val.length - c.begin) + 1);
672                $sender.val(newVal);
673                caret(sender, c.begin - 1);
674                keycode = pasteValue.charCodeAt(0);
675            } else {
676                return true;
677            }
678        if (!String.fromCharCode(keycode).match(/[a-zA-Z0-9]/g) && keycode != keys.backspace && keycode != keys.del)
679            return false;
680        var newControlVal = calculatedValue(e, sender, keycode);
681        var newVal = getValueFromMaskedValue(newControlVal, $sender.data("ccsInputMaskValue"), placeholder);
682        newVal = doShift(sender, newVal, keycode);
683        var newMaskedValue = maskCanBeApplied(newVal, $sender.data("ccsInputMaskValue"), placeholder);
684        if (newMaskedValue.ans) {
685            var cp = getNewCaretPosition(sender, keycode, newMaskedValue.result);
686            sender.value = newMaskedValue.result;
687            caret(sender, cp);
688        }
689        return false;
690    };
691
692    var events = { };
693    events.onkeypress = function(e) {
694        var keycode = getKeycode(e);
695        if ((e.shiftKey || e.ctrlKey || e.altKey) && (keycode != keys.del && keycode != keys.backspace)) {
696            return true;
697        }
698        return inputMask(e, this);
699    };
700
701    events.onkeydown = function(e) {
702        var keycode = getKeycode(e);
703        if ((e.shiftKey || e.ctrlKey || e.altKey) && (keycode != keys.del && keycode != keys.backspace)) {
704            return true;
705        }
706        if (keycode == keys.backspace && !isG || keycode == keys.del || keycode == 0)
707            return inputMask(e, this);
708        if ((keycode == keys.leftArrow || keycode == keys.rightArrow) && !e.shiftKey) {
709            var pos = getNewCaretPosition(this, keycode);
710            if (pos != -1)
711                caret(this, pos);
712            return false;
713        }
714    };
715
716    events.onfocus = function(e) {
717        var $this = $(this);
718        var oThis = this;
719        if (this.value == '') {
720            this.value = $this.data("blankValue");
721            setTimeout(function() {
722                caret(oThis, $this.data("blankValue").indexOf($this.data("ccsPlaceholder")));
723            }, 10);
724        }
725    };
726
727    events.onblur = function(e) {
728        var $this = $(this);
729        if (this.value == $this.data("blankValue"))
730            this.value = '';
731    };
732
733    events.onpaste = function(e) {
734        var $this = $(this);
735        var oThis = this;
736        var c = caret(this);
737        var oldVal = $this.val();
738        var placeholder = $this.data("ccsPlaceholder");
739        var mask = $this.data("ccsInputMaskValue");
740        var last = c.begin;
741        setTimeout(function() {
742            var pasteValue = $this.val().substring(c.begin, $this.val().length - (oldVal.length - c.end));
743            var j = 0;
744            var res = oldVal.substring(0, c.begin);
745            for (var i = c.begin; i < mask.length; i++) {
746                if (j >= pasteValue.length) {
747                    res += oldVal.charAt(i);
748                } else if (mask.charAt(i) == pasteValue.charAt(j) || (!isConstantCharacter(mask, i) && (pasteValue.charAt(j) == placeholder || sType(pasteValue.charAt(j), placeholder) == mask.charAt(i)))) {
749                    res += pasteValue.charAt(j);
750                    last = i + 1;
751                    j++;
752                } else {
753                    res += (isConstantCharacter(mask, i) ? mask.charAt(i) : oldVal.charAt(i));
754                }
755            }
756            $this.val(res);
757            $this.data("newCaretPosition", last);
758            var cu = getNewCaretPosition(oThis);
759            if (cu != -1)
760                caret(oThis, cu);
761        }, 20);
762    };
763
764    events.oncut = function(e) {
765        var $this = $(this);
766        var c = caret(this);
767        var placeholder = $this.data("ccsPlaceholder");
768        var mask = $this.data("ccsInputMaskValue");
769        var res = $this.val().substring(0, c.begin);
770        for (var i = c.begin; i < c.end; i++) {
771            res += isConstantCharacter(mask, i) ? mask.charAt(i) : placeholder;
772        }
773        res += $this.val().substring(c.end);
774        $this.val(res);
775        caret(this, c.begin);
776    };
777
778
779    var defaults = {
780        placeholder: "_"
781    };
782
783    var methods = {
784        init: function(options) {
785            var settings = $.extend({ }, defaults, options);
786
787            return this.each(function() {
788                var control = $(this);
789                control.data("ccsPlaceholder", settings.placeholder);
790                if (settings.inputMask)
791                    control.data("ccsInputMaskValue", settings.inputMask);
792                var res = '';
793                for (var i = 0; i < settings.inputMask.length; i++)
794                    if (!isConstantCharacter(settings.inputMask, i))
795                        res += settings.placeholder;
796                    else
797                        res += settings.inputMask.charAt(i);
798                control.data("blankValue", res);
799                control.bind("keypress", events.onkeypress);
800                control.bind("keydown", events.onkeydown);
801                control.bind("focus", events.onfocus);
802                control.bind("blur", events.onblur);
803                control.bind("paste", events.onpaste);
804                control.bind("cut", events.oncut);
805            });
806        }
807    };
808
809    $.fn.ccsInputMask = function(method) {
810        if (methods[method]) {
811            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
812        } else if (typeof method === 'object' || !method) {
813            return methods.init.apply(this, arguments);
814        } else {
815            return methods.init.call(this, { inputMask: method });
816        }
817    };
818})(jQuery);
819
820
821/*
822    json2.js
823    2011-10-19
824
825    Public Domain.
826*/
827
828var JSON;
829if (!JSON) {
830    JSON = {};
831}
832
833(function () {
834
835    function f(n) {
836        return n < 10 ? '0' + n : n;
837    }
838
839    if (typeof Date.prototype.toJSON !== 'function') {
840
841        Date.prototype.toJSON = function (key) {
842
843            return isFinite(this.valueOf())
844                ? this.getUTCFullYear()     + '-' +
845                    f(this.getUTCMonth() + 1) + '-' +
846                    f(this.getUTCDate())      + 'T' +
847                    f(this.getUTCHours())     + ':' +
848                    f(this.getUTCMinutes())   + ':' +
849                    f(this.getUTCSeconds())   + 'Z'
850                : null;
851        };
852
853        String.prototype.toJSON      =
854            Number.prototype.toJSON  =
855            Boolean.prototype.toJSON = function (key) {
856                return this.valueOf();
857            };
858    }
859
860    var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
861        escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
862        gap,
863        indent,
864        meta = {
865            '\b': '\\b',
866            '\t': '\\t',
867            '\n': '\\n',
868            '\f': '\\f',
869            '\r': '\\r',
870            '"' : '\\"',
871            '\\': '\\\\'
872        },
873        rep;
874
875    function quote(string) {
876
877        escapable.lastIndex = 0;
878        return escapable.test(string) ? '"' + string.replace(escapable, function (a) {
879            var c = meta[a];
880            return typeof c === 'string'
881                ? c
vendor: 4,414 bytes, lines 882-1011
882                : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
883        }) + '"' : '"' + string + '"';
884    }
885
886
887    function str(key, holder) {
888        var i,
889            k,
890            v,
891            length,
892            mind = gap,
893            partial,
894            value = holder[key];
895
896        if (value && typeof value === 'object' &&
897                typeof value.toJSON === 'function') {
898            value = value.toJSON(key);
899        }
900
901
902        if (typeof rep === 'function') {
903            value = rep.call(holder, key, value);
904        }
905
906        switch (typeof value) {
907        case 'string':
908            return quote(value);
909
910        case 'number':
911
912            return isFinite(value) ? String(value) : 'null';
913
914        case 'boolean':
915        case 'null':
916            return String(value);
917        case 'object':
918            if (!value) {
919                return 'null';
920            }
921            gap += indent;
922            partial = [];
923            if (Object.prototype.toString.apply(value) === '[object Array]') {
924                length = value.length;
925                for (i = 0; i < length; i += 1) {
926                    partial[i] = str(i, value) || 'null';
927                }
928                v = partial.length === 0
929                    ? '[]'
930                    : gap
931                    ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']'
932                    : '[' + partial.join(',') + ']';
933                gap = mind;
934                return v;
935            }
936            if (rep && typeof rep === 'object') {
937                length = rep.length;
938                for (i = 0; i < length; i += 1) {
939                    if (typeof rep[i] === 'string') {
940                        k = rep[i];
941                        v = str(k, value);
942                        if (v) {
943                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
944                        }
945                    }
946                }
947            } else {
948                for (k in value) {
949                    if (Object.prototype.hasOwnProperty.call(value, k)) {
950                        v = str(k, value);
951                        if (v) {
952                            partial.push(quote(k) + (gap ? ': ' : ':') + v);
953                        }
954                    }
955                }
956            }
957            v = partial.length === 0
958                ? '{}'
959                : gap
960                ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}'
961                : '{' + partial.join(',') + '}';
962            gap = mind;
963            return v;
964        }
965    }
966    if (typeof JSON.stringify !== 'function') {
967        JSON.stringify = function (value, replacer, space) {
968            var i;
969            gap = '';
970            indent = '';
971            if (typeof space === 'number') {
972                for (i = 0; i < space; i += 1) {
973                    indent += ' ';
974                }
975            } else if (typeof space === 'string') {
976                indent = space;
977            }
978            rep = replacer;
979            if (replacer && typeof replacer !== 'function' &&
980                    (typeof replacer !== 'object' ||
981                    typeof replacer.length !== 'number')) {
982                throw new Error('JSON.stringify');
983            }
984            return str('', {'': value});
985        };
986    }
987    if (typeof JSON.parse !== 'function') {
988        JSON.parse = function (text, reviver) {
989            var j;
990
991            function walk(holder, key) {
992                var k, v, value = holder[key];
993                if (value && typeof value === 'object') {
994                    for (k in value) {
995                        if (Object.prototype.hasOwnProperty.call(value, k)) {
996                            v = walk(value, k);
997                            if (v !== undefined) {
998                                value[k] = v;
999                            } else {
1000                                delete value[k];
1001                            }
1002                        }
1003                    }
1004                }
1005                return reviver.call(holder, key, value);
1006            }
1007            text = String(text);
1008            cx.lastIndex = 0;
1009            if (cx.test(text)) {
1010                text = text.replace(cx, function (a) {
1011                    return '\\u' +
1012                        ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
1013                });
1014            }
1015            if (/^[\],:{}\s]*$/
1016                    .test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
1017                        .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
1018                        .replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
1019                j = eval('(' + text + ')');
1020                return typeof reviver === 'function'
1021                    ? walk({'': j}, '')
1022                    : j;
1023            }
1024            throw new SyntaxError('JSON.parse');
1025        };
1026    }
1027}());

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.