PageSourceSearch

https://raintown.tv/onewebstatic/cf15226c0a.js

js raintown.tv collected 2026-10-06 16:36:23 UTC 277,613 bytes, 6,350 lines download raw bytes

vendor: 254,983 bytes, lines 1-5879
1if (window.innerWidth <= 650 && window.getComputedStyle(document.body).backgroundAttachment === 'fixed') {
2    document.write('<div class="blockbody" style="position: fixed;left: 0px;top: 0px;right: 0px;bottom: 0px;z-index: -1;background-attachment: initial!important;"></div>');
3}
4__init();
5/*!
6 * jQuery JavaScript Library v1.8.3
7 * http://jquery.com/
8 *
9 * Includes Sizzle.js
10 * http://sizzlejs.com/
11 *
12 * Copyright 2012 jQuery Foundation and other contributors
13 * Released under the MIT license
14 * http://jquery.org/license
15 *
16 * Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time)
17 */
18(function (window, undefined) {
19    var rootjQuery, readyList, document = window.document, location = window.location, navigator = window.navigator, _jQuery = window.jQuery, _$ = window.$, core_push = Array.prototype.push, core_slice = Array.prototype.slice, core_indexOf = Array.prototype.indexOf, core_toString = Object.prototype.toString, core_hasOwn = Object.prototype.hasOwnProperty, core_trim = String.prototype.trim, jQuery = function (selector, context) {
20            return new jQuery.fn.init(selector, context, rootjQuery);
21        }, core_pnum = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, core_rnotwhite = /\S/, core_rspace = /\s+/, rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, rvalidchars = /^[\],:{}\s]*$/, rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g, rmsPrefix = /^-ms-/, rdashAlpha = /-([\da-z])/gi, fcamelCase = function (all, letter) {
22            return (letter + '').toUpperCase();
23        }, DOMContentLoaded = function () {
24            if (document.addEventListener) {
25                document.removeEventListener('DOMContentLoaded', DOMContentLoaded, false);
26                jQuery.ready();
27            } else if (document.readyState === 'complete') {
28                document.detachEvent('onreadystatechange', DOMContentLoaded);
29                jQuery.ready();
30            }
31        }, class2type = {};
32    jQuery.fn = jQuery.prototype = {
33        constructor: jQuery,
34        init: function (selector, context, rootjQuery) {
35            var match, elem, ret, doc;
36            if (!selector) {
37                return this;
38            }
39            if (selector.nodeType) {
40                this.context = this[0] = selector;
41                this.length = 1;
42                return this;
43            }
44            if (typeof selector === 'string') {
45                if (selector.charAt(0) === '<' && selector.charAt(selector.length - 1) === '>' && selector.length >= 3) {
46                    match = [
47                        null,
48                        selector,
49                        null
50                    ];
51                } else {
52                    match = rquickExpr.exec(selector);
53                }
54                if (match && (match[1] || !context)) {
55                    if (match[1]) {
56                        context = context instanceof jQuery ? context[0] : context;
57                        doc = context && context.nodeType ? context.ownerDocument || context : document;
58                        selector = jQuery.parseHTML(match[1], doc, true);
59                        if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {
60                            this.attr.call(selector, context, true);
61                        }
62                        return jQuery.merge(this, selector);
63                    } else {
64                        elem = document.getElementById(match[2]);
65                        if (elem && elem.parentNode) {
66                            if (elem.id !== match[2]) {
67                                return rootjQuery.find(selector);
68                            }
69                            this.length = 1;
70                            this[0] = elem;
71                        }
72                        this.context = document;
73                        this.selector = selector;
74                        return this;
75                    }
76                } else if (!context || context.jquery) {
77                    return (context || rootjQuery).find(selector);
78                } else {
79                    return this.constructor(context).find(selector);
80                }
81            } else if (jQuery.isFunction(selector)) {
82                return rootjQuery.ready(selector);
83            }
84            if (selector.selector !== undefined) {
85                this.selector = selector.selector;
86                this.context = selector.context;
87            }
88            return jQuery.makeArray(selector, this);
89        },
90        selector: '',
91        jquery: '1.8.3',
92        length: 0,
93        size: function () {
94            return this.length;
95        },
96        toArray: function () {
97            return core_slice.call(this);
98        },
99        get: function (num) {
100            return num == null ? this.toArray() : num < 0 ? this[this.length + num] : this[num];
101        },
102        pushStack: function (elems, name, selector) {
103            var ret = jQuery.merge(this.constructor(), elems);
104            ret.prevObject = this;
105            ret.context = this.context;
106            if (name === 'find') {
107                ret.selector = this.selector + (this.selector ? ' ' : '') + selector;
108            } else if (name) {
109                ret.selector = this.selector + '.' + name + '(' + selector + ')';
110            }
111            return ret;
112        },
113        each: function (callback, args) {
114            return jQuery.each(this, callback, args);
115        },
116        ready: function (fn) {
117            jQuery.ready.promise().done(fn);
118            return this;
119        },
120        eq: function (i) {
121            i = +i;
122            return i === -1 ? this.slice(i) : this.slice(i, i + 1);
123        },
124        first: function () {
125            return this.eq(0);
126        },
127        last: function () {
128            return this.eq(-1);
129        },
130        slice: function () {
131            return this.pushStack(core_slice.apply(this, arguments), 'slice', core_slice.call(arguments).join(','));
132        },
133        map: function (callback) {
134            return this.pushStack(jQuery.map(this, function (elem, i) {
135                return callback.call(elem, i, elem);
136            }));
137        },
138        end: function () {
139            return this.prevObject || this.constructor(null);
140        },
141        push: core_push,
142        sort: [].sort,
143        splice: [].splice
144    };
145    jQuery.fn.init.prototype = jQuery.fn;
146    jQuery.extend = jQuery.fn.extend = function () {
147        var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false;
148        if (typeof target === 'boolean') {
149            deep = target;
150            target = arguments[1] || {};
151            i = 2;
152        }
153        if (typeof target !== 'object' && !jQuery.isFunction(target)) {
154            target = {};
155        }
156        if (length === i) {
157            target = this;
158            --i;
159        }
160        for (; i < length; i++) {
161            if ((options = arguments[i]) != null) {
162                for (name in options) {
163                    src = target[name];
164                    copy = options[name];
165                    if (target === copy) {
166                        continue;
167                    }
168                    if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) {
169                        if (copyIsArray) {
170                            copyIsArray = false;
171                            clone = src && jQuery.isArray(src) ? src : [];
172                        } else {
173                            clone = src && jQuery.isPlainObject(src) ? src : {};
174                        }
175                        target[name] = jQuery.extend(deep, clone, copy);
176                    } else if (copy !== undefined) {
177                        target[name] = copy;
178                    }
179                }
180            }
181        }
182        return target;
183    };
184    jQuery.extend({
185        noConflict: function (deep) {
186            if (window.$ === jQuery) {
187                window.$ = _$;
188            }
189            if (deep && window.jQuery === jQuery) {
190                window.jQuery = _jQuery;
191            }
192            return jQuery;
193        },
194        isReady: false,
195        readyWait: 1,
196        holdReady: function (hold) {
197            if (hold) {
198                jQuery.readyWait++;
199            } else {
200                jQuery.ready(true);
201            }
202        },
203        ready: function (wait) {
204            if (wait === true ? --jQuery.readyWait : jQuery.isReady) {
205                return;
206            }
207            if (!document.body) {
208                return setTimeout(jQuery.ready, 1);
209            }
210            jQuery.isReady = true;
211            if (wait !== true && --jQuery.readyWait > 0) {
212                return;
213            }
214            readyList.resolveWith(document, [jQuery]);
215            if (jQuery.fn.trigger) {
216                jQuery(document).trigger('ready').off('ready');
217            }
218        },
219        isFunction: function (obj) {
220            return jQuery.type(obj) === 'function';
221        },
222        isArray: Array.isArray || function (obj) {
223            return jQuery.type(obj) === 'array';
224        },
225        isWindow: function (obj) {
226            return obj != null && obj == obj.window;
227        },
228        isNumeric: function (obj) {
229            return !isNaN(parseFloat(obj)) && isFinite(obj);
230        },
231        type: function (obj) {
232            return obj == null ? String(obj) : class2type[core_toString.call(obj)] || 'object';
233        },
234        isPlainObject: function (obj) {
235            if (!obj || jQuery.type(obj) !== 'object' || obj.nodeType || jQuery.isWindow(obj)) {
236                return false;
237            }
238            try {
239                if (obj.constructor && !core_hasOwn.call(obj, 'constructor') && !core_hasOwn.call(obj.constructor.prototype, 'isPrototypeOf')) {
240                    return false;
241                }
242            } catch (e) {
243                return false;
244            }
245            var key;
246            for (key in obj) {
247            }
248            return key === undefined || core_hasOwn.call(obj, key);
249        },
250        isEmptyObject: function (obj) {
251            var name;
252            for (name in obj) {
253                return false;
254            }
255            return true;
256        },
257        error: function (msg) {
258            throw new Error(msg);
259        },
260        parseHTML: function (data, context, scripts) {
261            var parsed;
262            if (!data || typeof data !== 'string') {
263                return null;
264            }
265            if (typeof context === 'boolean') {
266                scripts = context;
267                context = 0;
268            }
269            context = context || document;
270            if (parsed = rsingleTag.exec(data)) {
271                return [context.createElement(parsed[1])];
272            }
273            parsed = jQuery.buildFragment([data], context, scripts ? null : []);
274            return jQuery.merge([], (parsed.cacheable ? jQuery.clone(parsed.fragment) : parsed.fragment).childNodes);
275        },
276        parseJSON: function (data) {
277            if (!data || typeof data !== 'string') {
278                return null;
279            }
280            data = jQuery.trim(data);
281            if (window.JSON && window.JSON.parse) {
282                return window.JSON.parse(data);
283            }
284            if (rvalidchars.test(data.replace(rvalidescape, '@').replace(rvalidtokens, ']').replace(rvalidbraces, ''))) {
285                return new Function('return ' + data)();
286            }
287            jQuery.error('Invalid JSON: ' + data);
288        },
289        parseXML: function (data) {
290            var xml, tmp;
291            if (!data || typeof data !== 'string') {
292                return null;
293            }
294            try {
295                if (window.DOMParser) {
296                    tmp = new DOMParser();
297                    xml = tmp.parseFromString(data, 'text/xml');
298                } else {
299                    xml = new ActiveXObject('Microsoft.XMLDOM');
300                    xml.async = 'false';
301                    xml.loadXML(data);
302                }
303            } catch (e) {
304                xml = undefined;
305            }
306            if (!xml || !xml.documentElement || xml.getElementsByTagName('parsererror').length) {
307                jQuery.error('Invalid XML: ' + data);
308            }
309            return xml;
310        },
311        noop: function () {
312        },
313        globalEval: function (data) {
314            if (data && core_rnotwhite.test(data)) {
315                (window.execScript || function (data) {
316                    window['eval'].call(window, data);
317                })(data);
318            }
319        },
320        camelCase: function (string) {
321            return string.replace(rmsPrefix, 'ms-').replace(rdashAlpha, fcamelCase);
322        },
323        nodeName: function (elem, name) {
324            return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
325        },
326        each: function (obj, callback, args) {
327            var name, i = 0, length = obj.length, isObj = length === undefined || jQuery.isFunction(obj);
328            if (args) {
329                if (isObj) {
330                    for (name in obj) {
331                        if (callback.apply(obj[name], args) === false) {
332                            break;
333                        }
334                    }
335                } else {
336                    for (; i < length;) {
337                        if (callback.apply(obj[i++], args) === false) {
338                            break;
339                        }
340                    }
341                }
342            } else {
343                if (isObj) {
344                    for (name in obj) {
345                        if (callback.call(obj[name], name, obj[name]) === false) {
346                            break;
347                        }
348                    }
349                } else {
350                    for (; i < length;) {
351                        if (callback.call(obj[i], i, obj[i++]) === false) {
352                            break;
353                        }
354                    }
355                }
356            }
357            return obj;
358        },
359        trim: core_trim && !core_trim.call(' ') ? function (text) {
360            return text == null ? '' : core_trim.call(text);
361        } : function (text) {
362            return text == null ? '' : (text + '').replace(rtrim, '');
363        },
364        makeArray: function (arr, results) {
365            var type, ret = results || [];
366            if (arr != null) {
367                type = jQuery.type(arr);
368                if (arr.length == null || type === 'string' || type === 'function' || type === 'regexp' || jQuery.isWindow(arr)) {
369                    core_push.call(ret, arr);
370                } else {
371                    jQuery.merge(ret, arr);
372                }
373            }
374            return ret;
375        },
376        inArray: function (elem, arr, i) {
377            var len;
378            if (arr) {
379                if (core_indexOf) {
380                    return core_indexOf.call(arr, elem, i);
381                }
382                len = arr.length;
383                i = i ? i < 0 ? Math.max(0, len + i) : i : 0;
384                for (; i < len; i++) {
385                    if (i in arr && arr[i] === elem) {
386                        return i;
387                    }
388                }
389            }
390            return -1;
391        },
392        merge: function (first, second) {
393            var l = second.length, i = first.length, j = 0;
394            if (typeof l === 'number') {
395                for (; j < l; j++) {
396                    first[i++] = second[j];
397                }
398            } else {
399                while (second[j] !== undefined) {
400                    first[i++] = second[j++];
401                }
402            }
403            first.length = i;
404            return first;
405        },
406        grep: function (elems, callback, inv) {
407            var retVal, ret = [], i = 0, length = elems.length;
408            inv = !!inv;
409            for (; i < length; i++) {
410                retVal = !!callback(elems[i], i);
411                if (inv !== retVal) {
412                    ret.push(elems[i]);
413                }
414            }
415            return ret;
416        },
417        map: function (elems, callback, arg) {
418            var value, key, ret = [], i = 0, length = elems.length, isArray = elems instanceof jQuery || length !== undefined && typeof length === 'number' && (length > 0 && elems[0] && elems[length - 1] || length === 0 || jQuery.isArray(elems));
419            if (isArray) {
420                for (; i < length; i++) {
421                    value = callback(elems[i], i, arg);
422                    if (value != null) {
423                        ret[ret.length] = value;
424                    }
425                }
426            } else {
427                for (key in elems) {
428                    value = callback(elems[key], key, arg);
429                    if (value != null) {
430                        ret[ret.length] = value;
431                    }
432                }
433            }
434            return ret.concat.apply([], ret);
435        },
436        guid: 1,
437        proxy: function (fn, context) {
438            var tmp, args, proxy;
439            if (typeof context === 'string') {
440                tmp = fn[context];
441                context = fn;
442                fn = tmp;
443            }
444            if (!jQuery.isFunction(fn)) {
445                return undefined;
446            }
447            args = core_slice.call(arguments, 2);
448            proxy = function () {
449                return fn.apply(context, args.concat(core_slice.call(arguments)));
450            };
451            proxy.guid = fn.guid = fn.guid || jQuery.guid++;
452            return proxy;
453        },
454        access: function (elems, fn, key, value, chainable, emptyGet, pass) {
455            var exec, bulk = key == null, i = 0, length = elems.length;
456            if (key && typeof key === 'object') {
457                for (i in key) {
458                    jQuery.access(elems, fn, i, key[i], 1, emptyGet, value);
459                }
460                chainable = 1;
461            } else if (value !== undefined) {
462                exec = pass === undefined && jQuery.isFunction(value);
463                if (bulk) {
464                    if (exec) {
465                        exec = fn;
466                        fn = function (elem, key, value) {
467                            return exec.call(jQuery(elem), value);
468                        };
469                    } else {
470                        fn.call(elems, value);
471                        fn = null;
472                    }
473                }
474                if (fn) {
475                    for (; i < length; i++) {
476                        fn(elems[i], key, exec ? value.call(elems[i], i, fn(elems[i], key)) : value, pass);
477                    }
478                }
479                chainable = 1;
480            }
481            return chainable ? elems : bulk ? fn.call(elems) : length ? fn(elems[0], key) : emptyGet;
482        },
483        now: function () {
484            return new Date().getTime();
485        }
486    });
487    jQuery.ready.promise = function (obj) {
488        if (!readyList) {
489            readyList = jQuery.Deferred();
490            if (document.readyState === 'complete') {
491                setTimeout(jQuery.ready, 1);
492            } else if (document.addEventListener) {
493                document.addEventListener('DOMContentLoaded', DOMContentLoaded, false);
494                window.addEventListener('load', jQuery.ready, false);
495            } else {
496                document.attachEvent('onreadystatechange', DOMContentLoaded);
497                window.attachEvent('onload', jQuery.ready);
498                var top = false;
499                try {
500                    top = window.frameElement == null && document.documentElement;
501                } catch (e) {
502                }
503                if (top && top.doScroll) {
504                    (function doScrollCheck() {
505                        if (!jQuery.isReady) {
506                            try {
507                                top.doScroll('left');
508                            } catch (e) {
509                                return setTimeout(doScrollCheck, 50);
510                            }
511                            jQuery.ready();
512                        }
513                    }());
514                }
515            }
516        }
517        return readyList.promise(obj);
518    };
519    jQuery.each('Boolean Number String Function Array Date RegExp Object'.split(' '), function (i, name) {
520        class2type['[object ' + name + ']'] = name.toLowerCase();
521    });
522    rootjQuery = jQuery(document);
523    var optionsCache = {};
524    function createOptions(options) {
525        var object = optionsCache[options] = {};
526        jQuery.each(options.split(core_rspace), function (_, flag) {
527            object[flag] = true;
528        });
529        return object;
530    }
531    jQuery.Callbacks = function (options) {
532        options = typeof options === 'string' ? optionsCache[options] || createOptions(options) : jQuery.extend({}, options);
533        var memory, fired, firing, firingStart, firingLength, firingIndex, list = [], stack = !options.once && [], fire = function (data) {
534                memory = options.memory && data;
535                fired = true;
536                firingIndex = firingStart || 0;
537                firingStart = 0;
538                firingLength = list.length;
539                firing = true;
540                for (; list && firingIndex < firingLength; firingIndex++) {
541                    if (list[firingIndex].apply(data[0], data[1]) === false && options.stopOnFalse) {
542                        memory = false;
543                        break;
544                    }
545                }
546                firing = false;
547                if (list) {
548                    if (stack) {
549                        if (stack.length) {
550                            fire(stack.shift());
551                        }
552                    } else if (memory) {
553                        list = [];
554                    } else {
555                        self.disable();
556                    }
557                }
558            }, self = {
559                add: function () {
560                    if (list) {
561                        var start = list.length;
562                        (function add(args) {
563                            jQuery.each(args, function (_, arg) {
564                                var type = jQuery.type(arg);
565                                if (type === 'function') {
566                                    if (!options.unique || !self.has(arg)) {
567                                        list.push(arg);
568                                    }
569                                } else if (arg && arg.length && type !== 'string') {
570                                    add(arg);
571                                }
572                            });
573                        }(arguments));
574                        if (firing) {
575                            firingLength = list.length;
576                        } else if (memory) {
577                            firingStart = start;
578                            fire(memory);
579                        }
580                    }
581                    return this;
582                },
583                remove: function () {
584                    if (list) {
585                        jQuery.each(arguments, function (_, arg) {
586                            var index;
587                            while ((index = jQuery.inArray(arg, list, index)) > -1) {
588                                list.splice(index, 1);
589                                if (firing) {
590                                    if (index <= firingLength) {
591                                        firingLength--;
592                                    }
593                                    if (index <= firingIndex) {
594                                        firingIndex--;
595                                    }
596                                }
597                            }
598                        });
599                    }
600                    return this;
601                },
602                has: function (fn) {
603                    return jQuery.inArray(fn, list) > -1;
604                },
605                empty: function () {
606                    list = [];
607                    return this;
608                },
609                disable: function () {
610                    list = stack = memory = undefined;
611                    return this;
612                },
613                disabled: function () {
614                    return !list;
615                },
616                lock: function () {
617                    stack = undefined;
618                    if (!memory) {
619                        self.disable();
620                    }
621                    return this;
622                },
623                locked: function () {
624                    return !stack;
625                },
626                fireWith: function (context, args) {
627                    args = args || [];
628                    args = [
629                        context,
630                        args.slice ? args.slice() : args
631                    ];
632                    if (list && (!fired || stack)) {
633                        if (firing) {
634                            stack.push(args);
635                        } else {
636                            fire(args);
637                        }
638                    }
639                    return this;
640                },
641                fire: function () {
642                    self.fireWith(this, arguments);
643                    return this;
644                },
645                fired: function () {
646                    return !!fired;
647                }
648            };
649        return self;
650    };
651    jQuery.extend({
652        Deferred: function (func) {
653            var tuples = [
654                    [
655                        'resolve',
656                        'done',
657                        jQuery.Callbacks('once memory'),
658                        'resolved'
659                    ],
660                    [
661                        'reject',
662                        'fail',
663                        jQuery.Callbacks('once memory'),
664                        'rejected'
665                    ],
666                    [
667                        'notify',
668                        'progress',
669                        jQuery.Callbacks('memory')
670                    ]
671                ], state = 'pending', promise = {
672                    state: function () {
673                        return state;
674                    },
675                    always: function () {
676                        deferred.done(arguments).fail(arguments);
677                        return this;
678                    },
679                    then: function () {
680                        var fns = arguments;
681                        return jQuery.Deferred(function (newDefer) {
682                            jQuery.each(tuples, function (i, tuple) {
683                                var action = tuple[0], fn = fns[i];
684                                deferred[tuple[1]](jQuery.isFunction(fn) ? function () {
685                                    var returned = fn.apply(this, arguments);
686                                    if (returned && jQuery.isFunction(returned.promise)) {
687                                        returned.promise().done(newDefer.resolve).fail(newDefer.reject).progress(newDefer.notify);
688                                    } else {
689                                        newDefer[action + 'With'](this === deferred ? newDefer : this, [returned]);
690                                    }
691                                } : newDefer[action]);
692                            });
693                            fns = null;
694                        }).promise();
695                    },
696                    promise: function (obj) {
697                        return obj != null ? jQuery.extend(obj, promise) : promise;
698                    }
699                }, deferred = {};
700            promise.pipe = promise.then;
701            jQuery.each(tuples, function (i, tuple) {
702                var list = tuple[2], stateString = tuple[3];
703                promise[tuple[1]] = list.add;
704                if (stateString) {
705                    list.add(function () {
706                        state = stateString;
707                    }, tuples[i ^ 1][2].disable, tuples[2][2].lock);
708                }
709                deferred[tuple[0]] = list.fire;
710                deferred[tuple[0] + 'With'] = list.fireWith;
711            });
712            promise.promise(deferred);
713            if (func) {
714                func.call(deferred, deferred);
715            }
716            return deferred;
717        },
718        when: function (subordinate) {
719            var i = 0, resolveValues = core_slice.call(arguments), length = resolveValues.length, remaining = length !== 1 || subordinate && jQuery.isFunction(subordinate.promise) ? length : 0, deferred = remaining === 1 ? subordinate : jQuery.Deferred(), updateFunc = function (i, contexts, values) {
720                    return function (value) {
721                        contexts[i] = this;
722                        values[i] = arguments.length > 1 ? core_slice.call(arguments) : value;
723                        if (values === progressValues) {
724                            deferred.notifyWith(contexts, values);
725                        } else if (!--remaining) {
726                            deferred.resolveWith(contexts, values);
727                        }
728                    };
729                }, progressValues, progressContexts, resolveContexts;
730            if (length > 1) {
731                progressValues = new Array(length);
732                progressContexts = new Array(length);
733                resolveContexts = new Array(length);
734                for (; i < length; i++) {
735                    if (resolveValues[i] && jQuery.isFunction(resolveValues[i].promise)) {
736                        resolveValues[i].promise().done(updateFunc(i, resolveContexts, resolveValues)).fail(deferred.reject).progress(updateFunc(i, progressContexts, progressValues));
737                    } else {
738                        --remaining;
739                    }
740                }
741            }
742            if (!remaining) {
743                deferred.resolveWith(resolveContexts, resolveValues);
744            }
745            return deferred.promise();
746        }
747    });
748    jQuery.support = function () {
749        var support, all, a, select, opt, input, fragment, eventName, i, isSupported, clickFn, div = document.createElement('div');
750        div.setAttribute('className', 't');
751        div.innerHTML = '  <link/><table></table><a href=\'/a\'>a</a><input type=\'checkbox\'/>';
752        all = div.getElementsByTagName('*');
753        a = div.getElementsByTagName('a')[0];
754        if (!all || !a || !all.length) {
755            return {};
756        }
757        select = document.createElement('select');
758        opt = select.appendChild(document.createElement('option'));
759        input = div.getElementsByTagName('input')[0];
760        a.style.cssText = 'top:1px;float:left;opacity:.5';
761        support = {
762            leadingWhitespace: div.firstChild.nodeType === 3,
763            tbody: !div.getElementsByTagName('tbody').length,
764            htmlSerialize: !!div.getElementsByTagName('link').length,
765            style: /top/.test(a.getAttribute('style')),
766            hrefNormalized: a.getAttribute('href') === '/a',
767            opacity: /^0.5/.test(a.style.opacity),
768            cssFloat: !!a.style.cssFloat,
769            checkOn: input.value === 'on',
770            optSelected: opt.selected,
771            getSetAttribute: div.className !== 't',
772            enctype: !!document.createElement('form').enctype,
773            html5Clone: document.createElement('nav').cloneNode(true).outerHTML !== '<:nav></:nav>',
774            boxModel: document.compatMode === 'CSS1Compat',
775            submitBubbles: true,
776            changeBubbles: true,
777            focusinBubbles: false,
778            deleteExpando: true,
779            noCloneEvent: true,
780            inlineBlockNeedsLayout: false,
781            shrinkWrapBlocks: false,
782            reliableMarginRight: true,
783            boxSizingReliable: true,
784            pixelPosition: false
785        };
786        input.checked = true;
787        support.noCloneChecked = input.cloneNode(true).checked;
788        select.disabled = true;
789        support.optDisabled = !opt.disabled;
790        try {
791            delete div.test;
792        } catch (e) {
793            support.deleteExpando = false;
794        }
795        if (!div.addEventListener && div.attachEvent && div.fireEvent) {
796            div.attachEvent('onclick', clickFn = function () {
797                support.noCloneEvent = false;
798            });
799            div.cloneNode(true).fireEvent('onclick');
800            div.detachEvent('onclick', clickFn);
801        }
802        input = document.createElement('input');
803        input.value = 't';
804        input.setAttribute('type', 'radio');
805        support.radioValue = input.value === 't';
806        input.setAttribute('checked', 'checked');
807        input.setAttribute('name', 't');
808        div.appendChild(input);
809        fragment = document.createDocumentFragment();
810        fragment.appendChild(div.lastChild);
811        support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;
812        support.appendChecked = input.checked;
813        fragment.removeChild(input);
814        fragment.appendChild(div);
815        if (div.attachEvent) {
816            for (i in {
817                    submit: true,
818                    change: true,
819                    focusin: true
820                }) {
821                eventName = 'on' + i;
822                isSupported = eventName in div;
823                if (!isSupported) {
824                    div.setAttribute(eventName, 'return;');
825                    isSupported = typeof div[eventName] === 'function';
826                }
827                support[i + 'Bubbles'] = isSupported;
828            }
829        }
830        jQuery(function () {
831            var container, div, tds, marginDiv, divReset = 'padding:0;margin:0;border:0;display:block;overflow:hidden;', body = document.getElementsByTagName('body')[0];
832            if (!body) {
833                return;
834            }
835            container = document.createElement('div');
836            container.style.cssText = 'visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px';
837            body.insertBefore(container, body.firstChild);
838            div = document.createElement('div');
839            container.appendChild(div);
840            div.innerHTML = '<table><tr><td></td><td>t</td></tr></table>';
841            tds = div.getElementsByTagName('td');
842            tds[0].style.cssText = 'padding:0;margin:0;border:0;display:none';
843            isSupported = tds[0].offsetHeight === 0;
844            tds[0].style.display = '';
845            tds[1].style.display = 'none';
846            support.reliableHiddenOffsets = isSupported && tds[0].offsetHeight === 0;
847            div.innerHTML = '';
848            div.style.cssText = 'box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;';
849            support.boxSizing = div.offsetWidth === 4;
850            support.doesNotIncludeMarginInBodyOffset = body.offsetTop !== 1;
851            if (window.getComputedStyle) {
852                support.pixelPosition = (window.getComputedStyle(div, null) || {}).top !== '1%';
853                support.boxSizingReliable = (window.getComputedStyle(div, null) || { width: '4px' }).width === '4px';
854                marginDiv = document.createElement('div');
855                marginDiv.style.cssText = div.style.cssText = divReset;
856                marginDiv.style.marginRight = marginDiv.style.width = '0';
857                div.style.width = '1px';
858                div.appendChild(marginDiv);
859                support.reliableMarginRight = !parseFloat((window.getComputedStyle(marginDiv, null) || {}).marginRight);
860            }
861            if (typeof div.style.zoom !== 'undefined') {
862                div.innerHTML = '';
863                div.style.cssText = divReset + 'width:1px;padding:1px;display:inline;zoom:1';
864                support.inlineBlockNeedsLayout = div.offsetWidth === 3;
865                div.style.display = 'block';
866                div.style.overflow = 'visible';
867                div.innerHTML = '<div></div>';
868                div.firstChild.style.width = '5px';
869                support.shrinkWrapBlocks = div.offsetWidth !== 3;
870                container.style.zoom = 1;
871            }
872            body.removeChild(container);
873            container = div = tds = marginDiv = null;
874        });
875        fragment.removeChild(div);
876        all = a = select = opt = input = fragment = div = null;
877        return support;
878    }();
879    var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, rmultiDash = /([A-Z])/g;
880    jQuery.extend({
881        cache: {},
882        deletedIds: [],
883        uuid: 0,
884        expando: 'jQuery' + (jQuery.fn.jquery + Math.random()).replace(/\D/g, ''),
885        noData: {
886            'embed': true,
887            'object': 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000',
888            'applet': true
889        },
890        hasData: function (elem) {
891            elem = elem.nodeType ? jQuery.cache[elem[jQuery.expando]] : elem[jQuery.expando];
892            return !!elem && !isEmptyDataObject(elem);
893        },
894        data: function (elem, name, data, pvt) {
895            if (!jQuery.acceptData(elem)) {
896                return;
897            }
898            var thisCache, ret, internalKey = jQuery.expando, getByName = typeof name === 'string', isNode = elem.nodeType, cache = isNode ? jQuery.cache : elem, id = isNode ? elem[internalKey] : elem[internalKey] && internalKey;
899            if ((!id || !cache[id] || !pvt && !cache[id].data) && getByName && data === undefined) {
900                return;
901            }
902            if (!id) {
903                if (isNode) {
904                    elem[internalKey] = id = jQuery.deletedIds.pop() || jQuery.guid++;
905                } else {
906                    id = internalKey;
907                }
908            }
909            if (!cache[id]) {
910                cache[id] = {};
911                if (!isNode) {
912                    cache[id].toJSON = jQuery.noop;
913                }
914            }
915            if (typeof name === 'object' || typeof name === 'function') {
916                if (pvt) {
917                    cache[id] = jQuery.extend(cache[id], name);
918                } else {
919                    cache[id].data = jQuery.extend(cache[id].data, name);
920                }
921            }
922            thisCache = cache[id];
923            if (!pvt) {
924                if (!thisCache.data) {
925                    thisCache.data = {};
926                }
927                thisCache = thisCache.data;
928            }
929            if (data !== undefined) {
930                thisCache[jQuery.camelCase(name)] = data;
931            }
932            if (getByName) {
933                ret = thisCache[name];
934                if (ret == null) {
935                    ret = thisCache[jQuery.camelCase(name)];
936                }
937            } else {
938                ret = thisCache;
939            }
940            return ret;
941        },
942        removeData: function (elem, name, pvt) {
943            if (!jQuery.acceptData(elem)) {
944                return;
945            }
946            var thisCache, i, l, isNode = elem.nodeType, cache = isNode ? jQuery.cache : elem, id = isNode ? elem[jQuery.expando] : jQuery.expando;
947            if (!cache[id]) {
948                return;
949            }
950            if (name) {
951                thisCache = pvt ? cache[id] : cache[id].data;
952                if (thisCache) {
953                    if (!jQuery.isArray(name)) {
954                        if (name in thisCache) {
955                            name = [name];
956                        } else {
957                            name = jQuery.camelCase(name);
958                            if (name in thisCache) {
959                                name = [name];
960                            } else {
961                                name = name.split(' ');
962                            }
963                        }
964                    }
965                    for (i = 0, l = name.length; i < l; i++) {
966                        delete thisCache[name[i]];
967                    }
968                    if (!(pvt ? isEmptyDataObject : jQuery.isEmptyObject)(thisCache)) {
969                        return;
970                    }
971                }
972            }
973            if (!pvt) {
974                delete cache[id].data;
975                if (!isEmptyDataObject(cache[id])) {
976                    return;
977                }
978            }
979            if (isNode) {
980                jQuery.cleanData([elem], true);
981            } else if (jQuery.support.deleteExpando || cache != cache.window) {
982                delete cache[id];
983            } else {
984                cache[id] = null;
985            }
986        },
987        _data: function (elem, name, data) {
988            return jQuery.data(elem, name, data, true);
989        },
990        acceptData: function (elem) {
991            var noData = elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()];
992            return !noData || noData !== true && elem.getAttribute('classid') === noData;
993        }
994    });
995    jQuery.fn.extend({
996        data: function (key, value) {
997            var parts, part, attr, name, l, elem = this[0], i = 0, data = null;
998            if (key === undefined) {
999                if (this.length) {
1000                    data = jQuery.data(elem);
1001                    if (elem.nodeType === 1 && !jQuery._data(elem, 'parsedAttrs')) {
1002                        attr = elem.attributes;
1003                        for (l = attr.length; i < l; i++) {
1004                            name = attr[i].name;
1005                            if (!name.indexOf('data-')) {
1006                                name = jQuery.camelCase(name.substring(5));
1007                                dataAttr(elem, name, data[name]);
1008                            }
1009                        }
1010                        jQuery._data(elem, 'parsedAttrs', true);
1011                    }
1012                }
1013                return data;
1014            }
1015            if (typeof key === 'object') {
1016                return this.each(function () {
1017                    jQuery.data(this, key);
1018                });
1019            }
1020            parts = key.split('.', 2);
1021            parts[1] = parts[1] ? '.' + parts[1] : '';
1022            part = parts[1] + '!';
1023            return jQuery.access(this, function (value) {
1024                if (value === undefined) {
1025                    data = this.triggerHandler('getData' + part, [parts[0]]);
1026                    if (data === undefined && elem) {
1027                        data = jQuery.data(elem, key);
1028                        data = dataAttr(elem, key, data);
1029                    }
1030                    return data === undefined && parts[1] ? this.data(parts[0]) : data;
1031                }
1032                parts[1] = value;
1033                this.each(function () {
1034                    var self = jQuery(this);
1035                    self.triggerHandler('setData' + part, parts);
1036                    jQuery.data(this, key, value);
1037                    self.triggerHandler('changeData' + part, parts);
1038                });
1039            }, null, value, arguments.length > 1, null, false);
1040        },
1041        removeData: function (key) {
1042            return this.each(function () {
1043                jQuery.removeData(this, key);
1044            });
1045        }
1046    });
1047    function dataAttr(elem, key, data) {
1048        if (data === undefined && elem.nodeType === 1) {
1049            var name = 'data-' + key.replace(rmultiDash, '-$1').toLowerCase();
1050            data = elem.getAttribute(name);
1051            if (typeof data === 'string') {
1052                try {
1053                    data = data === 'true' ? true : data === 'false' ? false : data === 'null' ? null : +data + '' === data ? +data : rbrace.test(data) ? jQuery.parseJSON(data) : data;
1054                } catch (e) {
1055                }
1056                jQuery.data(elem, key, data);
1057            } else {
1058                data = undefined;
1059            }
1060        }
1061        return data;
1062    }
1063    function isEmptyDataObject(obj) {
1064        var name;
1065        for (name in obj) {
1066            if (name === 'data' && jQuery.isEmptyObject(obj[name])) {
1067                continue;
1068            }
1069            if (name !== 'toJSON') {
1070                return false;
1071            }
1072        }
1073        return true;
1074    }
1075    jQuery.extend({
1076        queue: function (elem, type, data) {
1077            var queue;
1078            if (elem) {
1079                type = (type || 'fx') + 'queue';
1080                queue = jQuery._data(elem, type);
1081                if (data) {
1082                    if (!queue || jQuery.isArray(data)) {
1083                        queue = jQuery._data(elem, type, jQuery.makeArray(data));
1084                    } else {
1085                        queue.push(data);
1086                    }
1087                }
1088                return queue || [];
1089            }
1090        },
1091        dequeue: function (elem, type) {
1092            type = type || 'fx';
1093            var queue = jQuery.queue(elem, type), startLength = queue.length, fn = queue.shift(), hooks = jQuery._queueHooks(elem, type), next = function () {
1094                    jQuery.dequeue(elem, type);
1095                };
1096            if (fn === 'inprogress') {
1097                fn = queue.shift();
1098                startLength--;
1099            }
1100            if (fn) {
1101                if (type === 'fx') {
1102                    queue.unshift('inprogress');
1103                }
1104                delete hooks.stop;
1105                fn.call(elem, next, hooks);
1106            }
1107            if (!startLength && hooks) {
1108                hooks.empty.fire();
1109            }
1110        },
1111        _queueHooks: function (elem, type) {
1112            var key = type + 'queueHooks';
1113            return jQuery._data(elem, key) || jQuery._data(elem, key, {
1114                empty: jQuery.Callbacks('once memory').add(function () {
1115                    jQuery.removeData(elem, type + 'queue', true);
1116                    jQuery.removeData(elem, key, true);
1117                })
1118            });
1119        }
1120    });
1121    jQuery.fn.extend({
1122        queue: function (type, data) {
1123            var setter = 2;
1124            if (typeof type !== 'string') {
1125                data = type;
1126                type = 'fx';
1127                setter--;
1128            }
1129            if (arguments.length < setter) {
1130                return jQuery.queue(this[0], type);
1131            }
1132            return data === undefined ? this : this.each(function () {
1133                var queue = jQuery.queue(this, type, data);
1134                jQuery._queueHooks(this, type);
1135                if (type === 'fx' && queue[0] !== 'inprogress') {
1136                    jQuery.dequeue(this, type);
1137                }
1138            });
1139        },
1140        dequeue: function (type) {
1141            return this.each(function () {
1142                jQuery.dequeue(this, type);
1143            });
1144        },
1145        delay: function (time, type) {
1146            time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
1147            type = type || 'fx';
1148            return this.queue(type, function (next, hooks) {
1149                var timeout = setTimeout(next, time);
1150                hooks.stop = function () {
1151                    clearTimeout(timeout);
1152                };
1153            });
1154        },
1155        clearQueue: function (type) {
1156            return this.queue(type || 'fx', []);
1157        },
1158        promise: function (type, obj) {
1159            var tmp, count = 1, defer = jQuery.Deferred(), elements = this, i = this.length, resolve = function () {
1160                    if (!--count) {
1161                        defer.resolveWith(elements, [elements]);
1162                    }
1163                };
1164            if (typeof type !== 'string') {
1165                obj = type;
1166                type = undefined;
1167            }
1168            type = type || 'fx';
1169            while (i--) {
1170                tmp = jQuery._data(elements[i], type + 'queueHooks');
1171                if (tmp && tmp.empty) {
1172                    count++;
1173                    tmp.empty.add(resolve);
1174                }
1175            }
1176            resolve();
1177            return defer.promise(obj);
1178        }
1179    });
1180    var nodeHook, boolHook, fixSpecified, rclass = /[\t\r\n]/g, rreturn = /\r/g, rtype = /^(?:button|input)$/i, rfocusable = /^(?:button|input|object|select|textarea)$/i, rclickable = /^a(?:rea|)$/i, rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, getSetAttribute = jQuery.support.getSetAttribute;
1181    jQuery.fn.extend({
1182        attr: function (name, value) {
1183            return jQuery.access(this, jQuery.attr, name, value, arguments.length > 1);
1184        },
1185        removeAttr: function (name) {
1186            return this.each(function () {
1187                jQuery.removeAttr(this, name);
1188            });
1189        },
1190        prop: function (name, value) {
1191            return jQuery.access(this, jQuery.prop, name, value, arguments.length > 1);
1192        },
1193        removeProp: function (name) {
1194            name = jQuery.propFix[name] || name;
1195            return this.each(function () {
1196                try {
1197                    this[name] = undefined;
1198                    delete this[name];
1199                } catch (e) {
1200                }
1201            });
1202        },
1203        addClass: function (value) {
1204            var classNames, i, l, elem, setClass, c, cl;
1205            if (jQuery.isFunction(value)) {
1206                return this.each(function (j) {
1207                    jQuery(this).addClass(value.call(this, j, this.className));
1208                });
1209            }
1210            if (value && typeof value === 'string') {
1211                classNames = value.split(core_rspace);
1212                for (i = 0, l = this.length; i < l; i++) {
1213                    elem = this[i];
1214                    if (elem.nodeType === 1) {
1215                        if (!elem.className && classNames.length === 1) {
1216                            elem.className = value;
1217                        } else {
1218                            setClass = ' ' + elem.className + ' ';
1219                            for (c = 0, cl = classNames.length; c < cl; c++) {
1220                                if (setClass.indexOf(' ' + classNames[c] + ' ') < 0) {
1221                                    setClass += classNames[c] + ' ';
1222                                }
1223                            }
1224                            elem.className = jQuery.trim(setClass);
1225                        }
1226                    }
1227                }
1228            }
1229            return this;
1230        },
1231        removeClass: function (value) {
1232            var removes, className, elem, c, cl, i, l;
1233            if (jQuery.isFunction(value)) {
1234                return this.each(function (j) {
1235                    jQuery(this).removeClass(value.call(this, j, this.className));
1236                });
1237            }
1238            if (value && typeof value === 'string' || value === undefined) {
1239                removes = (value || '').split(core_rspace);
1240                for (i = 0, l = this.length; i < l; i++) {
1241                    elem = this[i];
1242                    if (elem.nodeType === 1 && elem.className) {
1243                        className = (' ' + elem.className + ' ').replace(rclass, ' ');
1244                        for (c = 0, cl = removes.length; c < cl; c++) {
1245                            while (className.indexOf(' ' + removes[c] + ' ') >= 0) {
1246                                className = className.replace(' ' + removes[c] + ' ', ' ');
1247                            }
1248                        }
1249                        elem.className = value ? jQuery.trim(className) : '';
1250                    }
1251                }
1252            }
1253            return this;
1254        },
1255        toggleClass: function (value, stateVal) {
1256            var type = typeof value, isBool = typeof stateVal === 'boolean';
1257            if (jQuery.isFunction(value)) {
1258                return this.each(function (i) {
1259                    jQuery(this).toggleClass(value.call(this, i, this.className, stateVal), stateVal);
1260                });
1261            }
1262            return this.each(function () {
1263                if (type === 'string') {
1264                    var className, i = 0, self = jQuery(this), state = stateVal, classNames = value.split(core_rspace);
1265                    while (className = classNames[i++]) {
1266                        state = isBool ? state : !self.hasClass(className);
1267                        self[state ? 'addClass' : 'removeClass'](className);
1268                    }
1269                } else if (type === 'undefined' || type === 'boolean') {
1270                    if (this.className) {
1271                        jQuery._data(this, '__className__', this.className);
1272                    }
1273                    this.className = this.className || value === false ? '' : jQuery._data(this, '__className__') || '';
1274                }
1275            });
1276        },
1277        hasClass: function (selector) {
1278            var className = ' ' + selector + ' ', i = 0, l = this.length;
1279            for (; i < l; i++) {
1280                if (this[i].nodeType === 1 && (' ' + this[i].className + ' ').replace(rclass, ' ').indexOf(className) >= 0) {
1281                    return true;
1282                }
1283            }
1284            return false;
1285        },
1286        val: function (value) {
1287            var hooks, ret, isFunction, elem = this[0];
1288            if (!arguments.length) {
1289                if (elem) {
1290                    hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];
1291                    if (hooks && 'get' in hooks && (ret = hooks.get(elem, 'value')) !== undefined) {
1292                        return ret;
1293                    }
1294                    ret = elem.value;
1295                    return typeof ret === 'string' ? ret.replace(rreturn, '') : ret == null ? '' : ret;
1296                }
1297                return;
1298            }
1299            isFunction = jQuery.isFunction(value);
1300            return this.each(function (i) {
1301                var val, self = jQuery(this);
1302                if (this.nodeType !== 1) {
1303                    return;
1304                }
1305                if (isFunction) {
1306                    val = value.call(this, i, self.val());
1307                } else {
1308                    val = value;
1309                }
1310                if (val == null) {
1311                    val = '';
1312                } else if (typeof val === 'number') {
1313                    val += '';
1314                } else if (jQuery.isArray(val)) {
1315                    val = jQuery.map(val, function (value) {
1316                        return value == null ? '' : value + '';
1317                    });
1318                }
1319                hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()];
1320                if (!hooks || !('set' in hooks) || hooks.set(this, val, 'value') === undefined) {
1321                    this.value = val;
1322                }
1323            });
1324        }
1325    });
1326    jQuery.extend({
1327        valHooks: {
1328            option: {
1329                get: function (elem) {
1330                    var val = elem.attributes.value;
1331                    return !val || val.specified ? elem.value : elem.text;
1332                }
1333            },
1334            select: {
1335                get: function (elem) {
1336                    var value, option, options = elem.options, index = elem.selectedIndex, one = elem.type === 'select-one' || index < 0, values = one ? null : [], max = one ? index + 1 : options.length, i = index < 0 ? max : one ? index : 0;
1337                    for (; i < max; i++) {
1338                        option = options[i];
1339                        if ((option.selected || i === index) && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute('disabled') === null) && (!option.parentNode.disabled || !jQuery.nodeName(option.parentNode, 'optgroup'))) {
1340                            value = jQuery(option).val();
1341                            if (one) {
1342                                return value;
1343                            }
1344                            values.push(value);
1345                        }
1346                    }
1347                    return values;
1348                },
1349                set: function (elem, value) {
1350                    var values = jQuery.makeArray(value);
1351                    jQuery(elem).find('option').each(function () {
1352                        this.selected = jQuery.inArray(jQuery(this).val(), values) >= 0;
1353                    });
1354                    if (!values.length) {
1355                        elem.selectedIndex = -1;
1356                    }
1357                    return values;
1358                }
1359            }
1360        },
1361        attrFn: {},
1362        attr: function (elem, name, value, pass) {
1363            var ret, hooks, notxml, nType = elem.nodeType;
1364            if (!elem || nType === 3 || nType === 8 || nType === 2) {
1365                return;
1366            }
1367            if (pass && jQuery.isFunction(jQuery.fn[name])) {
1368                return jQuery(elem)[name](value);
1369            }
1370            if (typeof elem.getAttribute === 'undefined') {
1371                return jQuery.prop(elem, name, value);
1372            }
1373            notxml = nType !== 1 || !jQuery.isXMLDoc(elem);
1374            if (notxml) {
1375                name = name.toLowerCase();
1376                hooks = jQuery.attrHooks[name] || (rboolean.test(name) ? boolHook : nodeHook);
1377            }
1378            if (value !== undefined) {
1379                if (value === null) {
1380                    jQuery.removeAttr(elem, name);
1381                    return;
1382                } else if (hooks && 'set' in hooks && notxml && (ret = hooks.set(elem, value, name)) !== undefined) {
1383                    return ret;
1384                } else {
1385                    elem.setAttribute(name, value + '');
1386                    return value;
1387                }
1388            } else if (hooks && 'get' in hooks && notxml && (ret = hooks.get(elem, name)) !== null) {
1389                return ret;
1390            } else {
1391                ret = elem.getAttribute(name);
1392                return ret === null ? undefined : ret;
1393            }
1394        },
1395        removeAttr: function (elem, value) {
1396            var propName, attrNames, name, isBool, i = 0;
1397            if (value && elem.nodeType === 1) {
1398                attrNames = value.split(core_rspace);
1399                for (; i < attrNames.length; i++) {
1400                    name = attrNames[i];
1401                    if (name) {
1402                        propName = jQuery.propFix[name] || name;
1403                        isBool = rboolean.test(name);
1404                        if (!isBool) {
1405                            jQuery.attr(elem, name, '');
1406                        }
1407                        elem.removeAttribute(getSetAttribute ? name : propName);
1408                        if (isBool && propName in elem) {
1409                            elem[propName] = false;
1410                        }
1411                    }
1412                }
1413            }
1414        },
1415        attrHooks: {
1416            type: {
1417                set: function (elem, value) {
1418                    if (rtype.test(elem.nodeName) && elem.parentNode) {
1419                        jQuery.error('type property can\'t be changed');
1420                    } else if (!jQuery.support.radioValue && value === 'radio' && jQuery.nodeName(elem, 'input')) {
1421                        var val = elem.value;
1422                        elem.setAttribute('type', value);
1423                        if (val) {
1424                            elem.value = val;
1425                        }
1426                        return value;
1427                    }
1428                }
1429            },
1430            value: {
1431                get: function (elem, name) {
1432                    if (nodeHook && jQuery.nodeName(elem, 'button')) {
1433                        return nodeHook.get(elem, name);
1434                    }
1435                    return name in elem ? elem.value : null;
1436                },
1437                set: function (elem, value, name) {
1438                    if (nodeHook && jQuery.nodeName(elem, 'button')) {
1439                        return nodeHook.set(elem, value, name);
1440                    }
1441                    elem.value = value;
1442                }
1443            }
1444        },
1445        propFix: {
1446            tabindex: 'tabIndex',
1447            readonly: 'readOnly',
1448            'for': 'htmlFor',
1449            'class': 'className',
1450            maxlength: 'maxLength',
1451            cellspacing: 'cellSpacing',
1452            cellpadding: 'cellPadding',
1453            rowspan: 'rowSpan',
1454            colspan: 'colSpan',
1455            usemap: 'useMap',
1456            frameborder: 'frameBorder',
1457            contenteditable: 'contentEditable'
1458        },
1459        prop: function (elem, name, value) {
1460            var ret, hooks, notxml, nType = elem.nodeType;
1461            if (!elem || nType === 3 || nType === 8 || nType === 2) {
1462                return;
1463            }
1464            notxml = nType !== 1 || !jQuery.isXMLDoc(elem);
1465            if (notxml) {
1466                name = jQuery.propFix[name] || name;
1467                hooks = jQuery.propHooks[name];
1468            }
1469            if (value !== undefined) {
1470                if (hooks && 'set' in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {
1471                    return ret;
1472                } else {
1473                    return elem[name] = value;
1474                }
1475            } else {
1476                if (hooks && 'get' in hooks && (ret = hooks.get(elem, name)) !== null) {
1477                    return ret;
1478                } else {
1479                    return elem[name];
1480                }
1481            }
1482        },
1483        propHooks: {
1484            tabIndex: {
1485                get: function (elem) {
1486                    var attributeNode = elem.getAttributeNode('tabindex');
1487                    return attributeNode && attributeNode.specified ? parseInt(attributeNode.value, 10) : rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href ? 0 : undefined;
1488                }
1489            }
1490        }
1491    });
1492    boolHook = {
1493        get: function (elem, name) {
1494            var attrNode, property = jQuery.prop(elem, name);
1495            return property === true || typeof property !== 'boolean' && (attrNode = elem.getAttributeNode(name)) && attrNode.nodeValue !== false ? name.toLowerCase() : undefined;
1496        },
1497        set: function (elem, value, name) {
1498            var propName;
1499            if (value === false) {
1500                jQuery.removeAttr(elem, name);
1501            } else {
1502                propName = jQuery.propFix[name] || name;
1503                if (propName in elem) {
1504                    elem[propName] = true;
1505                }
1506                elem.setAttribute(name, name.toLowerCase());
1507            }
1508            return name;
1509        }
1510    };
1511    if (!getSetAttribute) {
1512        fixSpecified = {
1513            name: true,
1514            id: true,
1515            coords: true
1516        };
1517        nodeHook = jQuery.valHooks.button = {
1518            get: function (elem, name) {
1519                var ret;
1520                ret = elem.getAttributeNode(name);
1521                return ret && (fixSpecified[name] ? ret.value !== '' : ret.specified) ? ret.value : undefined;
1522            },
1523            set: function (elem, value, name) {
1524                var ret = elem.getAttributeNode(name);
1525                if (!ret) {
1526                    ret = document.createAttribute(name);
1527                    elem.setAttributeNode(ret);
1528                }
1529                return ret.value = value + '';
1530            }
1531        };
1532        jQuery.each([
1533            'width',
1534            'height'
1535        ], function (i, name) {
1536            jQuery.attrHooks[name] = jQuery.extend(jQuery.attrHooks[name], {
1537                set: function (elem, value) {
1538                    if (value === '') {
1539                        elem.setAttribute(name, 'auto');
1540                        return value;
1541                    }
1542                }
1543            });
1544        });
1545        jQuery.attrHooks.contenteditable = {
1546            get: nodeHook.get,
1547            set: function (elem, value, name) {
1548                if (value === '') {
1549                    value = 'false';
1550                }
1551                nodeHook.set(elem, value, name);
1552            }
1553        };
1554    }
1555    if (!jQuery.support.hrefNormalized) {
1556        jQuery.each([
1557            'href',
1558            'src',
1559            'width',
1560            'height'
1561        ], function (i, name) {
1562            jQuery.attrHooks[name] = jQuery.extend(jQuery.attrHooks[name], {
1563                get: function (elem) {
1564                    var ret = elem.getAttribute(name, 2);
1565                    return ret === null ? undefined : ret;
1566                }
1567            });
1568        });
1569    }
1570    if (!jQuery.support.style) {
1571        jQuery.attrHooks.style = {
1572            get: function (elem) {
1573                return elem.style.cssText.toLowerCase() || undefined;
1574            },
1575            set: function (elem, value) {
1576                return elem.style.cssText = value + '';
1577            }
1578        };
1579    }
1580    if (!jQuery.support.optSelected) {
1581        jQuery.propHooks.selected = jQuery.extend(jQuery.propHooks.selected, {
1582            get: function (elem) {
1583                var parent = elem.parentNode;
1584                if (parent) {
1585                    parent.selectedIndex;
1586                    if (parent.parentNode) {
1587                        parent.parentNode.selectedIndex;
1588                    }
1589                }
1590                return null;
1591            }
1592        });
1593    }
1594    if (!jQuery.support.enctype) {
1595        jQuery.propFix.enctype = 'encoding';
1596    }
1597    if (!jQuery.support.checkOn) {
1598        jQuery.each([
1599            'radio',
1600            'checkbox'
1601        ], function () {
1602            jQuery.valHooks[this] = {
1603                get: function (elem) {
1604                    return elem.getAttribute('value') === null ? 'on' : elem.value;
1605                }
1606            };
1607        });
1608    }
1609    jQuery.each([
1610        'radio',
1611        'checkbox'
1612    ], function () {
1613        jQuery.valHooks[this] = jQuery.extend(jQuery.valHooks[this], {
1614            set: function (elem, value) {
1615                if (jQuery.isArray(value)) {
1616                    return elem.checked = jQuery.inArray(jQuery(elem).val(), value) >= 0;
1617                }
1618            }
1619        });
1620    });
1621    var rformElems = /^(?:textarea|input|select)$/i, rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/, rhoverHack = /(?:^|\s)hover(\.\S+|)\b/, rkeyEvent = /^key/, rmouseEvent = /^(?:mouse|contextmenu)|click/, rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, hoverHack = function (events) {
1622            return jQuery.event.special.hover ? events : events.replace(rhoverHack, 'mouseenter$1 mouseleave$1');
1623        };
1624    jQuery.event = {
1625        add: function (elem, types, handler, data, selector) {
1626            var elemData, eventHandle, events, t, tns, type, namespaces, handleObj, handleObjIn, handlers, special;
1627            if (elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data(elem))) {
1628                return;
1629            }
1630            if (handler.handler) {
1631                handleObjIn = handler;
1632                handler = handleObjIn.handler;
1633                selector = handleObjIn.selector;
1634            }
1635            if (!handler.guid) {
1636                handler.guid = jQuery.guid++;
1637            }
1638            events = elemData.events;
1639            if (!events) {
1640                elemData.events = events = {};
1641            }
1642            eventHandle = elemData.handle;
1643            if (!eventHandle) {
1644                elemData.handle = eventHandle = function (e) {
1645                    return typeof jQuery !== 'undefined' && (!e || jQuery.event.triggered !== e.type) ? jQuery.event.dispatch.apply(eventHandle.elem, arguments) : undefined;
1646                };
1647                eventHandle.elem = elem;
1648            }
1649            types = jQuery.trim(hoverHack(types)).split(' ');
1650            for (t = 0; t < types.length; t++) {
1651                tns = rtypenamespace.exec(types[t]) || [];
1652                type = tns[1];
1653                namespaces = (tns[2] || '').split('.').sort();
1654                special = jQuery.event.special[type] || {};
1655                type = (selector ? special.delegateType : special.bindType) || type;
1656                special = jQuery.event.special[type] || {};
1657                handleObj = jQuery.extend({
1658                    type: type,
1659                    origType: tns[1],
1660                    data: data,
1661                    handler: handler,
1662                    guid: handler.guid,
1663                    selector: selector,
1664                    needsContext: selector && jQuery.expr.match.needsContext.test(selector),
1665                    namespace: namespaces.join('.')
1666                }, handleObjIn);
1667                handlers = events[type];
1668                if (!handlers) {
1669                    handlers = events[type] = [];
1670                    handlers.delegateCount = 0;
1671                    if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {
1672                        if (elem.addEventListener) {
1673                            elem.addEventListener(type, eventHandle, false);
1674                        } else if (elem.attachEvent) {
1675                            elem.attachEvent('on' + type, eventHandle);
1676                        }
1677                    }
1678                }
1679                if (special.add) {
1680                    special.add.call(elem, handleObj);
1681                    if (!handleObj.handler.guid) {
1682                        handleObj.handler.guid = handler.guid;
1683                    }
1684                }
1685                if (selector) {
1686                    handlers.splice(handlers.delegateCount++, 0, handleObj);
1687                } else {
1688                    handlers.push(handleObj);
1689                }
1690                jQuery.event.global[type] = true;
1691            }
1692            elem = null;
1693        },
1694        global: {},
1695        remove: function (elem, types, handler, selector, mappedTypes) {
1696            var t, tns, type, origType, namespaces, origCount, j, events, special, eventType, handleObj, elemData = jQuery.hasData(elem) && jQuery._data(elem);
1697            if (!elemData || !(events = elemData.events)) {
1698                return;
1699            }
1700            types = jQuery.trim(hoverHack(types || '')).split(' ');
1701            for (t = 0; t < types.length; t++) {
1702                tns = rtypenamespace.exec(types[t]) || [];
1703                type = origType = tns[1];
1704                namespaces = tns[2];
1705                if (!type) {
1706                    for (type in events) {
1707                        jQuery.event.remove(elem, type + types[t], handler, selector, true);
1708                    }
1709                    continue;
1710                }
1711                special = jQuery.event.special[type] || {};
1712                type = (selector ? special.delegateType : special.bindType) || type;
1713                eventType = events[type] || [];
1714                origCount = eventType.length;
1715                namespaces = namespaces ? new RegExp('(^|\\.)' + namespaces.split('.').sort().join('\\.(?:.*\\.|)') + '(\\.|$)') : null;
1716                for (j = 0; j < eventType.length; j++) {
1717                    handleObj = eventType[j];
1718                    if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!namespaces || namespaces.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === '**' && handleObj.selector)) {
1719                        eventType.splice(j--, 1);
1720                        if (handleObj.selector) {
1721                            eventType.delegateCount--;
1722                        }
1723                        if (special.remove) {
1724                            special.remove.call(elem, handleObj);
1725                        }
1726                    }
1727                }
1728                if (eventType.length === 0 && origCount !== eventType.length) {
1729                    if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {
1730                        jQuery.removeEvent(elem, type, elemData.handle);
1731                    }
1732                    delete events[type];
1733                }
1734            }
1735            if (jQuery.isEmptyObject(events)) {
1736                delete elemData.handle;
1737                jQuery.removeData(elem, 'events', true);
1738            }
1739        },
1740        customEvent: {
1741            'getData': true,
1742            'setData': true,
1743            'changeData': true
1744        },
1745        trigger: function (event, data, elem, onlyHandlers) {
1746            if (elem && (elem.nodeType === 3 || elem.nodeType === 8)) {
1747                return;
1748            }
1749            var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType, type = event.type || event, namespaces = [];
1750            if (rfocusMorph.test(type + jQuery.event.triggered)) {
1751                return;
1752            }
1753            if (type.indexOf('!') >= 0) {
1754                type = type.slice(0, -1);
1755                exclusive = true;
1756            }
1757            if (type.indexOf('.') >= 0) {
1758                namespaces = type.split('.');
1759                type = namespaces.shift();
1760                namespaces.sort();
1761            }
1762            if ((!elem || jQuery.event.customEvent[type]) && !jQuery.event.global[type]) {
1763                return;
1764            }
1765            event = typeof event === 'object' ? event[jQuery.expando] ? event : new jQuery.Event(type, event) : new jQuery.Event(type);
1766            event.type = type;
1767            event.isTrigger = true;
1768            event.exclusive = exclusive;
1769            event.namespace = namespaces.join('.');
1770            event.namespace_re = event.namespace ? new RegExp('(^|\\.)' + namespaces.join('\\.(?:.*\\.|)') + '(\\.|$)') : null;
1771            ontype = type.indexOf(':') < 0 ? 'on' + type : '';
1772            if (!elem) {
1773                cache = jQuery.cache;
1774                for (i in cache) {
1775                    if (cache[i].events && cache[i].events[type]) {
1776                        jQuery.event.trigger(event, data, cache[i].handle.elem, true);
1777                    }
1778                }
1779                return;
1780            }
1781            event.result = undefined;
1782            if (!event.target) {
1783                event.target = elem;
1784            }
1785            data = data != null ? jQuery.makeArray(data) : [];
1786            data.unshift(event);
1787            special = jQuery.event.special[type] || {};
1788            if (special.trigger && special.trigger.apply(elem, data) === false) {
1789                return;
1790            }
1791            eventPath = [[
1792                    elem,
1793                    special.bindType || type
1794                ]];
1795            if (!onlyHandlers && !special.noBubble && !jQuery.isWindow(elem)) {
1796                bubbleType = special.delegateType || type;
1797                cur = rfocusMorph.test(bubbleType + type) ? elem : elem.parentNode;
1798                for (old = elem; cur; cur = cur.parentNode) {
1799                    eventPath.push([
1800                        cur,
1801                        bubbleType
1802                    ]);
1803                    old = cur;
1804                }
1805                if (old === (elem.ownerDocument || document)) {
1806                    eventPath.push([
1807                        old.defaultView || old.parentWindow || window,
1808                        bubbleType
1809                    ]);
1810                }
1811            }
1812            for (i = 0; i < eventPath.length && !event.isPropagationStopped(); i++) {
1813                cur = eventPath[i][0];
1814                event.type = eventPath[i][1];
1815                handle = (jQuery._data(cur, 'events') || {})[event.type] && jQuery._data(cur, 'handle');
1816                if (handle) {
1817                    handle.apply(cur, data);
1818                }
1819                handle = ontype && cur[ontype];
1820                if (handle && jQuery.acceptData(cur) && handle.apply && handle.apply(cur, data) === false) {
1821                    event.preventDefault();
1822                }
1823            }
1824            event.type = type;
1825            if (!onlyHandlers && !event.isDefaultPrevented()) {
1826                if ((!special._default || special._default.apply(elem.ownerDocument, data) === false) && !(type === 'click' && jQuery.nodeName(elem, 'a')) && jQuery.acceptData(elem)) {
1827                    if (ontype && elem[type] && (type !== 'focus' && type !== 'blur' || event.target.offsetWidth !== 0) && !jQuery.isWindow(elem)) {
1828                        old = elem[ontype];
1829                        if (old) {
1830                            elem[ontype] = null;
1831                        }
1832                        jQuery.event.triggered = type;
1833                        elem[type]();
1834                        jQuery.event.triggered = undefined;
1835                        if (old) {
1836                            elem[ontype] = old;
1837                        }
1838                    }
1839                }
1840            }
1841            return event.result;
1842        },
1843        dispatch: function (event) {
1844            event = jQuery.event.fix(event || window.event);
1845            var i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related, handlers = (jQuery._data(this, 'events') || {})[event.type] || [], delegateCount = handlers.delegateCount, args = core_slice.call(arguments), run_all = !event.exclusive && !event.namespace, special = jQuery.event.special[event.type] || {}, handlerQueue = [];
1846            args[0] = event;
1847            event.delegateTarget = this;
1848            if (special.preDispatch && special.preDispatch.call(this, event) === false) {
1849                return;
1850            }
1851            if (delegateCount && !(event.button && event.type === 'click')) {
1852                for (cur = event.target; cur != this; cur = cur.parentNode || this) {
1853                    if (cur.disabled !== true || event.type !== 'click') {
1854                        selMatch = {};
1855                        matches = [];
1856                        for (i = 0; i < delegateCount; i++) {
1857                            handleObj = handlers[i];
1858                            sel = handleObj.selector;
1859                            if (selMatch[sel] === undefined) {
1860                                selMatch[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) >= 0 : jQuery.find(sel, this, null, [cur]).length;
1861                            }
1862                            if (selMatch[sel]) {
1863                                matches.push(handleObj);
1864                            }
1865                        }
1866                        if (matches.length) {
1867                            handlerQueue.push({
1868                                elem: cur,
1869                                matches: matches
1870                            });
1871                        }
1872                    }
1873                }
1874            }
1875            if (handlers.length > delegateCount) {
1876                handlerQueue.push({
1877                    elem: this,
1878                    matches: handlers.slice(delegateCount)
1879                });
1880            }
1881            for (i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++) {
1882                matched = handlerQueue[i];
1883                event.currentTarget = matched.elem;
1884                for (j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++) {
1885                    handleObj = matched.matches[j];
1886                    if (run_all || !event.namespace && !handleObj.namespace || event.namespace_re && event.namespace_re.test(handleObj.namespace)) {
1887                        event.data = handleObj.data;
1888                        event.handleObj = handleObj;
1889                        ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);
1890                        if (ret !== undefined) {
1891                            event.result = ret;
1892                            if (ret === false) {
1893                                event.preventDefault();
1894                                event.stopPropagation();
1895                            }
1896                        }
1897                    }
1898                }
1899            }
1900            if (special.postDispatch) {
1901                special.postDispatch.call(this, event);
1902            }
1903            return event.result;
1904        },
1905        props: 'attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which'.split(' '),
1906        fixHooks: {},
1907        keyHooks: {
1908            props: 'char charCode key keyCode'.split(' '),
1909            filter: function (event, original) {
1910                if (event.which == null) {
1911                    event.which = original.charCode != null ? original.charCode : original.keyCode;
1912                }
1913                return event;
1914            }
1915        },
1916        mouseHooks: {
1917            props: 'button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement'.split(' '),
1918            filter: function (event, original) {
1919                var eventDoc, doc, body, button = original.button, fromElement = original.fromElement;
1920                if (event.pageX == null && original.clientX != null) {
1921                    eventDoc = event.target.ownerDocument || document;
1922                    doc = eventDoc.documentElement;
1923                    body = eventDoc.body;
1924                    event.pageX = original.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
1925                    event.pageY = original.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
1926                }
1927                if (!event.relatedTarget && fromElement) {
1928                    event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
1929                }
1930                if (!event.which && button !== undefined) {
1931                    event.which = button & 1 ? 1 : button & 2 ? 3 : button & 4 ? 2 : 0;
1932                }
1933                return event;
1934            }
1935        },
1936        fix: function (event) {
1937            if (event[jQuery.expando]) {
1938                return event;
1939            }
1940            var i, prop, originalEvent = event, fixHook = jQuery.event.fixHooks[event.type] || {}, copy = fixHook.props ? this.props.concat(fixHook.props) : this.props;
1941            event = jQuery.Event(originalEvent);
1942            for (i = copy.length; i;) {
1943                prop = copy[--i];
1944                event[prop] = originalEvent[prop];
1945            }
1946            if (!event.target) {
1947                event.target = originalEvent.srcElement || document;
1948            }
1949            if (event.target.nodeType === 3) {
1950                event.target = event.target.parentNode;
1951            }
1952            event.metaKey = !!event.metaKey;
1953            return fixHook.filter ? fixHook.filter(event, originalEvent) : event;
1954        },
1955        special: {
1956            load: { noBubble: true },
1957            focus: { delegateType: 'focusin' },
1958            blur: { delegateType: 'focusout' },
1959            beforeunload: {
1960                setup: function (data, namespaces, eventHandle) {
1961                    if (jQuery.isWindow(this)) {
1962                        this.onbeforeunload = eventHandle;
1963                    }
1964                },
1965                teardown: function (namespaces, eventHandle) {
1966                    if (this.onbeforeunload === eventHandle) {
1967                        this.onbeforeunload = null;
1968                    }
1969                }
1970            }
1971        },
1972        simulate: function (type, elem, event, bubble) {
1973            var e = jQuery.extend(new jQuery.Event(), event, {
1974                type: type,
1975                isSimulated: true,
1976                originalEvent: {}
1977            });
1978            if (bubble) {
1979                jQuery.event.trigger(e, null, elem);
1980            } else {
1981                jQuery.event.dispatch.call(elem, e);
1982            }
1983            if (e.isDefaultPrevented()) {
1984                event.preventDefault();
1985            }
1986        }
1987    };
1988    jQuery.event.handle = jQuery.event.dispatch;
1989    jQuery.removeEvent = document.removeEventListener ? function (elem, type, handle) {
1990        if (elem.removeEventListener) {
1991            elem.removeEventListener(type, handle, false);
1992        }
1993    } : function (elem, type, handle) {
1994        var name = 'on' + type;
1995        if (elem.detachEvent) {
1996            if (typeof elem[name] === 'undefined') {
1997                elem[name] = null;
1998            }
1999            elem.detachEvent(name, handle);
2000        }
2001    };
2002    jQuery.Event = function (src, props) {
2003        if (!(this instanceof jQuery.Event)) {
2004            return new jQuery.Event(src, props);
2005        }
2006        if (src && src.type) {
2007            this.originalEvent = src;
2008            this.type = src.type;
2009            this.isDefaultPrevented = src.defaultPrevented || src.returnValue === false || src.getPreventDefault && src.getPreventDefault() ? returnTrue : returnFalse;
2010        } else {
2011            this.type = src;
2012        }
2013        if (props) {
2014            jQuery.extend(this, props);
2015        }
2016        this.timeStamp = src && src.timeStamp || jQuery.now();
2017        this[jQuery.expando] = true;
2018    };
2019    function returnFalse() {
2020        return false;
2021    }
2022    function returnTrue() {
2023        return true;
2024    }
2025    jQuery.Event.prototype = {
2026        preventDefault: function () {
2027            this.isDefaultPrevented = returnTrue;
2028            var e = this.originalEvent;
2029            if (!e) {
2030                return;
2031            }
2032            if (e.preventDefault) {
2033                e.preventDefault();
2034            } else {
2035                e.returnValue = false;
2036            }
2037        },
2038        stopPropagation: function () {
2039            this.isPropagationStopped = returnTrue;
2040            var e = this.originalEvent;
2041            if (!e) {
2042                return;
2043            }
2044            if (e.stopPropagation) {
2045                e.stopPropagation();
2046            }
2047            e.cancelBubble = true;
2048        },
2049        stopImmediatePropagation: function () {
2050            this.isImmediatePropagationStopped = returnTrue;
2051            this.stopPropagation();
2052        },
2053        isDefaultPrevented: returnFalse,
2054        isPropagationStopped: returnFalse,
2055        isImmediatePropagationStopped: returnFalse
2056    };
2057    jQuery.each({
2058        mouseenter: 'mouseover',
2059        mouseleave: 'mouseout'
2060    }, function (orig, fix) {
2061        jQuery.event.special[orig] = {
2062            delegateType: fix,
2063            bindType: fix,
2064            handle: function (event) {
2065                var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj, selector = handleObj.selector;
2066                if (!related || related !== target && !jQuery.contains(target, related)) {
2067                    event.type = handleObj.origType;
2068                    ret = handleObj.handler.apply(this, arguments);
2069                    event.type = fix;
2070                }
2071                return ret;
2072            }
2073        };
2074    });
2075    if (!jQuery.support.submitBubbles) {
2076        jQuery.event.special.submit = {
2077            setup: function () {
2078                if (jQuery.nodeName(this, 'form')) {
2079                    return false;
2080                }
2081                jQuery.event.add(this, 'click._submit keypress._submit', function (e) {
2082                    var elem = e.target, form = jQuery.nodeName(elem, 'input') || jQuery.nodeName(elem, 'button') ? elem.form : undefined;
2083                    if (form && !jQuery._data(form, '_submit_attached')) {
2084                        jQuery.event.add(form, 'submit._submit', function (event) {
2085                            event._submit_bubble = true;
2086                        });
2087                        jQuery._data(form, '_submit_attached', true);
2088                    }
2089                });
2090            },
2091            postDispatch: function (event) {
2092                if (event._submit_bubble) {
2093                    delete event._submit_bubble;
2094                    if (this.parentNode && !event.isTrigger) {
2095                        jQuery.event.simulate('submit', this.parentNode, event, true);
2096                    }
2097                }
2098            },
2099            teardown: function () {
2100                if (jQuery.nodeName(this, 'form')) {
2101                    return false;
2102                }
2103                jQuery.event.remove(this, '._submit');
2104            }
2105        };
2106    }
2107    if (!jQuery.support.changeBubbles) {
2108        jQuery.event.special.change = {
2109            setup: function () {
2110                if (rformElems.test(this.nodeName)) {
2111                    if (this.type === 'checkbox' || this.type === 'radio') {
2112                        jQuery.event.add(this, 'propertychange._change', function (event) {
2113                            if (event.originalEvent.propertyName === 'checked') {
2114                                this._just_changed = true;
2115                            }
2116                        });
2117                        jQuery.event.add(this, 'click._change', function (event) {
2118                            if (this._just_changed && !event.isTrigger) {
2119                                this._just_changed = false;
2120                            }
2121                            jQuery.event.simulate('change', this, event, true);
2122                        });
2123                    }
2124                    return false;
2125                }
2126                jQuery.event.add(this, 'beforeactivate._change', function (e) {
2127                    var elem = e.target;
2128                    if (rformElems.test(elem.nodeName) && !jQuery._data(elem, '_change_attached')) {
2129                        jQuery.event.add(elem, 'change._change', function (event) {
2130                            if (this.parentNode && !event.isSimulated && !event.isTrigger) {
2131                                jQuery.event.simulate('change', this.parentNode, event, true);
2132                            }
2133                        });
2134                        jQuery._data(elem, '_change_attached', true);
2135                    }
2136                });
2137            },
2138            handle: function (event) {
2139                var elem = event.target;
2140                if (this !== elem || event.isSimulated || event.isTrigger || elem.type !== 'radio' && elem.type !== 'checkbox') {
2141                    return event.handleObj.handler.apply(this, arguments);
2142                }
2143            },
2144            teardown: function () {
2145                jQuery.event.remove(this, '._change');
2146                return !rformElems.test(this.nodeName);
2147            }
2148        };
2149    }
2150    if (!jQuery.support.focusinBubbles) {
2151        jQuery.each({
2152            focus: 'focusin',
2153            blur: 'focusout'
2154        }, function (orig, fix) {
2155            var attaches = 0, handler = function (event) {
2156                    jQuery.event.simulate(fix, event.target, jQuery.event.fix(event), true);
2157                };
2158            jQuery.event.special[fix] = {
2159                setup: function () {
2160                    if (attaches++ === 0) {
2161                        document.addEventListener(orig, handler, true);
2162                    }
2163                },
2164                teardown: function () {
2165                    if (--attaches === 0) {
2166                        document.removeEventListener(orig, handler, true);
2167                    }
2168                }
2169            };
2170        });
2171    }
2172    jQuery.fn.extend({
2173        on: function (types, selector, data, fn, one) {
2174            var origFn, type;
2175            if (typeof types === 'object') {
2176                if (typeof selector !== 'string') {
2177                    data = data || selector;
2178                    selector = undefined;
2179                }
2180                for (type in types) {
2181                    this.on(type, selector, data, types[type], one);
2182                }
2183                return this;
2184            }
2185            if (data == null && fn == null) {
2186                fn = selector;
2187                data = selector = undefined;
2188            } else if (fn == null) {
2189                if (typeof selector === 'string') {
2190                    fn = data;
2191                    data = undefined;
2192                } else {
2193                    fn = data;
2194                    data = selector;
2195                    selector = undefined;
2196                }
2197            }
2198            if (fn === false) {
2199                fn = returnFalse;
2200            } else if (!fn) {
2201                return this;
2202            }
2203            if (one === 1) {
2204                origFn = fn;
2205                fn = function (event) {
2206                    jQuery().off(event);
2207                    return origFn.apply(this, arguments);
2208                };
2209                fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);
2210            }
2211            return this.each(function () {
2212                jQuery.event.add(this, types, fn, data, selector);
2213            });
2214        },
2215        one: function (types, selector, data, fn) {
2216            return this.on(types, selector, data, fn, 1);
2217        },
2218        off: function (types, selector, fn) {
2219            var handleObj, type;
2220            if (types && types.preventDefault && types.handleObj) {
2221                handleObj = types.handleObj;
2222                jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + '.' + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);
2223                return this;
2224            }
2225            if (typeof types === 'object') {
2226                for (type in types) {
2227                    this.off(type, selector, types[type]);
2228                }
2229                return this;
2230            }
2231            if (selector === false || typeof selector === 'function') {
2232                fn = selector;
2233                selector = undefined;
2234            }
2235            if (fn === false) {
2236                fn = returnFalse;
2237            }
2238            return this.each(function () {
2239                jQuery.event.remove(this, types, fn, selector);
2240            });
2241        },
2242        bind: function (types, data, fn) {
2243            return this.on(types, null, data, fn);
2244        },
2245        unbind: function (types, fn) {
2246            return this.off(types, null, fn);
2247        },
2248        live: function (types, data, fn) {
2249            jQuery(this.context).on(types, this.selector, data, fn);
2250            return this;
2251        },
2252        die: function (types, fn) {
2253            jQuery(this.context).off(types, this.selector || '**', fn);
2254            return this;
2255        },
2256        delegate: function (selector, types, data, fn) {
2257            return this.on(types, selector, data, fn);
2258        },
2259        undelegate: function (selector, types, fn) {
2260            return arguments.length === 1 ? this.off(selector, '**') : this.off(types, selector || '**', fn);
2261        },
2262        trigger: function (type, data) {
2263            return this.each(function () {
2264                jQuery.event.trigger(type, data, this);
2265            });
2266        },
2267        triggerHandler: function (type, data) {
2268            if (this[0]) {
2269                return jQuery.event.trigger(type, data, this[0], true);
2270            }
2271        },
2272        toggle: function (fn) {
2273            var args = arguments, guid = fn.guid || jQuery.guid++, i = 0, toggler = function (event) {
2274                    var lastToggle = (jQuery._data(this, 'lastToggle' + fn.guid) || 0) % i;
2275                    jQuery._data(this, 'lastToggle' + fn.guid, lastToggle + 1);
2276                    event.preventDefault();
2277                    return args[lastToggle].apply(this, arguments) || false;
2278                };
2279            toggler.guid = guid;
2280            while (i < args.length) {
2281                args[i++].guid = guid;
2282            }
2283            return this.click(toggler);
2284        },
2285        hover: function (fnOver, fnOut) {
2286            return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);
2287        }
2288    });
2289    jQuery.each(('blur focus focusin focusout load resize scroll unload click dblclick ' + 'mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave ' + 'change select submit keydown keypress keyup error contextmenu').split(' '), function (i, name) {
2290        jQuery.fn[name] = function (data, fn) {
2291            if (fn == null) {
2292                fn = data;
2293                data = null;
2294            }
2295            return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);
2296        };
2297        if (rkeyEvent.test(name)) {
2298            jQuery.event.fixHooks[name] = jQuery.event.keyHooks;
2299        }
2300        if (rmouseEvent.test(name)) {
2301            jQuery.event.fixHooks[name] = jQuery.event.mouseHooks;
2302        }
2303    });    /*!
2304 * Sizzle CSS Selector Engine
2305 * Copyright 2012 jQuery Foundation and other contributors
2306 * Released under the MIT license
2307 * http://sizzlejs.com/
2308 */
2309    /*!
2310 * Sizzle CSS Selector Engine
2311 * Copyright 2012 jQuery Foundation and other contributors
2312 * Released under the MIT license
2313 * http://sizzlejs.com/
2314 */
2315    (function (window, undefined) {
2316        var cachedruns, assertGetIdNotName, Expr, getText, isXML, contains, compile, sortOrder, hasDuplicate, outermostContext, baseHasDuplicate = true, strundefined = 'undefined', expando = ('sizcache' + Math.random()).replace('.', ''), Token = String, document = window.document, docElem = document.documentElement, dirruns = 0, done = 0, pop = [].pop, push = [].push, slice = [].slice, indexOf = [].indexOf || function (elem) {
2317                var i = 0, len = this.length;
2318                for (; i < len; i++) {
2319                    if (this[i] === elem) {
2320                        return i;
2321                    }
2322                }
2323                return -1;
2324            }, markFunction = function (fn, value) {
2325                fn[expando] = value == null || value;
2326                return fn;
2327            }, createCache = function () {
2328                var cache = {}, keys = [];
2329                return markFunction(function (key, value) {
2330                    if (keys.push(key) > Expr.cacheLength) {
2331                        delete cache[keys.shift()];
2332                    }
2333                    return cache[key + ' '] = value;
2334                }, cache);
2335            }, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), whitespace = '[\\x20\\t\\r\\n\\f]', characterEncoding = '(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+', identifier = characterEncoding.replace('w', 'w#'), operators = '([*^$|!~]?=)', attributes = '\\[' + whitespace + '*(' + characterEncoding + ')' + whitespace + '*(?:' + operators + whitespace + '*(?:([\'"])((?:\\\\.|[^\\\\])*?)\\3|(' + identifier + ')|)|)' + whitespace + '*\\]', pseudos = ':(' + characterEncoding + ')(?:\\((?:([\'"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:' + attributes + ')|[^:]|\\\\.)*|.*))\\)|)', pos = ':(even|odd|eq|gt|lt|nth|first|last)(?:\\(' + whitespace + '*((?:-\\d)?\\d*)' + whitespace + '*\\)|)(?=[^-]|$)', rtrim = new RegExp('^' + whitespace + '+|((?:^|[^\\\\])(?:\\\\.)*)' + whitespace + '+$', 'g'), rcomma = new RegExp('^' + whitespace + '*,' + whitespace + '*'), rcombinators = new RegExp('^' + whitespace + '*([\\x20\\t\\r\\n\\f>+~])' + whitespace + '*'), rpseudo = new RegExp(pseudos), rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, rnot = /^:not/, rsibling = /[\x20\t\r\n\f]*[+~]/, rendsWithNot = /:not\($/, rheader = /h\d/i, rinputs = /input|select|textarea|button/i, rbackslash = /\\(?!\\)/g, matchExpr = {
2336                'ID': new RegExp('^#(' + characterEncoding + ')'),
2337                'CLASS': new RegExp('^\\.(' + characterEncoding + ')'),
2338                'NAME': new RegExp('^\\[name=[\'"]?(' + characterEncoding + ')[\'"]?\\]'),
2339                'TAG': new RegExp('^(' + characterEncoding.replace('w', 'w*') + ')'),
2340                'ATTR': new RegExp('^' + attributes),
2341                'PSEUDO': new RegExp('^' + pseudos),
2342                'POS': new RegExp(pos, 'i'),
2343                'CHILD': new RegExp('^:(only|nth|first|last)-child(?:\\(' + whitespace + '*(even|odd|(([+-]|)(\\d*)n|)' + whitespace + '*(?:([+-]|)' + whitespace + '*(\\d+)|))' + whitespace + '*\\)|)', 'i'),
2344                'needsContext': new RegExp('^' + whitespace + '*[>+~]|' + pos, 'i')
2345            }, assert = function (fn) {
2346                var div = document.createElement('div');
2347                try {
2348                    return fn(div);
2349                } catch (e) {
2350                    return false;
2351                } finally {
2352                    div = null;
2353                }
2354            }, assertTagNameNoComments = assert(function (div) {
2355                div.appendChild(document.createComment(''));
2356                return !div.getElementsByTagName('*').length;
2357            }), assertHrefNotNormalized = assert(function (div) {
2358                div.innerHTML = '<a href=\'#\'></a>';
2359                return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && div.firstChild.getAttribute('href') === '#';
2360            }), assertAttributes = assert(function (div) {
2361                div.innerHTML = '<select></select>';
2362                var type = typeof div.lastChild.getAttribute('multiple');
2363                return type !== 'boolean' && type !== 'string';
2364            }), assertUsableClassName = assert(function (div) {
2365                div.innerHTML = '<div class=\'hidden e\'></div><div class=\'hidden\'></div>';
2366                if (!div.getElementsByClassName || !div.getElementsByClassName('e').length) {
2367                    return false;
2368                }
2369                div.lastChild.className = 'e';
2370                return div.getElementsByClassName('e').length === 2;
2371            }), assertUsableName = assert(function (div) {
2372                div.id = expando + 0;
2373                div.innerHTML = '<a name=\'' + expando + '\'></a><div name=\'' + expando + '\'></div>';
2374                docElem.insertBefore(div, docElem.firstChild);
2375                var pass = document.getElementsByName && document.getElementsByName(expando).length === 2 + document.getElementsByName(expando + 0).length;
2376                assertGetIdNotName = !document.getElementById(expando);
2377                docElem.removeChild(div);
2378                return pass;
2379            });
2380        try {
2381            slice.call(docElem.childNodes, 0)[0].nodeType;
2382        } catch (e) {
2383            slice = function (i) {
2384                var elem, results = [];
2385                for (; elem = this[i]; i++) {
2386                    results.push(elem);
2387                }
2388                return results;
2389            };
2390        }
2391        function Sizzle(selector, context, results, seed) {
2392            results = results || [];
2393            context = context || document;
2394            var match, elem, xml, m, nodeType = context.nodeType;
2395            if (!selector || typeof selector !== 'string') {
2396                return results;
2397            }
2398            if (nodeType !== 1 && nodeType !== 9) {
2399                return [];
2400            }
2401            xml = isXML(context);
2402            if (!xml && !seed) {
2403                if (match = rquickExpr.exec(selector)) {
2404                    if (m = match[1]) {
2405                        if (nodeType === 9) {
2406                            elem = context.getElementById(m);
2407                            if (elem && elem.parentNode) {
2408                                if (elem.id === m) {
2409                                    results.push(elem);
2410                                    return results;
2411                                }
2412                            } else {
2413                                return results;
2414                            }
2415                        } else {
2416                            if (context.ownerDocument && (elem = context.ownerDocument.getElementById(m)) && contains(context, elem) && elem.id === m) {
2417                                results.push(elem);
2418                                return results;
2419                            }
2420                        }
2421                    } else if (match[2]) {
2422                        push.apply(results, slice.call(context.getElementsByTagName(selector), 0));
2423                        return results;
2424                    } else if ((m = match[3]) && assertUsableClassName && context.getElementsByClassName) {
2425                        push.apply(results, slice.call(context.getElementsByClassName(m), 0));
2426                        return results;
2427                    }
2428                }
2429            }
2430            return select(selector.replace(rtrim, '$1'), context, results, seed, xml);
2431        }
2432        Sizzle.matches = function (expr, elements) {
2433            return Sizzle(expr, null, null, elements);
2434        };
2435        Sizzle.matchesSelector = function (elem, expr) {
2436            return Sizzle(expr, null, null, [elem]).length > 0;
2437        };
2438        function createInputPseudo(type) {
2439            return function (elem) {
2440                var name = elem.nodeName.toLowerCase();
2441                return name === 'input' && elem.type === type;
2442            };
2443        }
2444        function createButtonPseudo(type) {
2445            return function (elem) {
2446                var name = elem.nodeName.toLowerCase();
2447                return (name === 'input' || name === 'button') && elem.type === type;
2448            };
2449        }
2450        function createPositionalPseudo(fn) {
2451            return markFunction(function (argument) {
2452                argument = +argument;
2453                return markFunction(function (seed, matches) {
2454                    var j, matchIndexes = fn([], seed.length, argument), i = matchIndexes.length;
2455                    while (i--) {
2456                        if (seed[j = matchIndexes[i]]) {
2457                            seed[j] = !(matches[j] = seed[j]);
2458                        }
2459                    }
2460                });
2461            });
2462        }
2463        getText = Sizzle.getText = function (elem) {
2464            var node, ret = '', i = 0, nodeType = elem.nodeType;
2465            if (nodeType) {
2466                if (nodeType === 1 || nodeType === 9 || nodeType === 11) {
2467                    if (typeof elem.textContent === 'string') {
2468                        return elem.textContent;
2469                    } else {
2470                        for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
2471                            ret += getText(elem);
2472                        }
2473                    }
2474                } else if (nodeType === 3 || nodeType === 4) {
2475                    return elem.nodeValue;
2476                }
2477            } else {
2478                for (; node = elem[i]; i++) {
2479                    ret += getText(node);
2480                }
2481            }
2482            return ret;
2483        };
2484        isXML = Sizzle.isXML = function (elem) {
2485            var documentElement = elem && (elem.ownerDocument || elem).documentElement;
2486            return documentElement ? documentElement.nodeName !== 'HTML' : false;
2487        };
2488        contains = Sizzle.contains = docElem.contains ? function (a, b) {
2489            var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode;
2490            return a === bup || !!(bup && bup.nodeType === 1 && adown.contains && adown.contains(bup));
2491        } : docElem.compareDocumentPosition ? function (a, b) {
2492            return b && !!(a.compareDocumentPosition(b) & 16);
2493        } : function (a, b) {
2494            while (b = b.parentNode) {
2495                if (b === a) {
2496                    return true;
2497                }
2498            }
2499            return false;
2500        };
2501        Sizzle.attr = function (elem, name) {
2502            var val, xml = isXML(elem);
2503            if (!xml) {
2504                name = name.toLowerCase();
2505            }
2506            if (val = Expr.attrHandle[name]) {
2507                return val(elem);
2508            }
2509            if (xml || assertAttributes) {
2510                return elem.getAttribute(name);
2511            }
2512            val = elem.getAttributeNode(name);
2513            return val ? typeof elem[name] === 'boolean' ? elem[name] ? name : null : val.specified ? val.value : null : null;
2514        };
2515        Expr = Sizzle.selectors = {
2516            cacheLength: 50,
2517            createPseudo: markFunction,
2518            match: matchExpr,
2519            attrHandle: assertHrefNotNormalized ? {} : {
2520                'href': function (elem) {
2521                    return elem.getAttribute('href', 2);
2522                },
2523                'type': function (elem) {
2524                    return elem.getAttribute('type');
2525                }
2526            },
2527            find: {
2528                'ID': assertGetIdNotName ? function (id, context, xml) {
2529                    if (typeof context.getElementById !== strundefined && !xml) {
2530                        var m = context.getElementById(id);
2531                        return m && m.parentNode ? [m] : [];
2532                    }
2533                } : function (id, context, xml) {
2534                    if (typeof context.getElementById !== strundefined && !xml) {
2535                        var m = context.getElementById(id);
2536                        return m ? m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode('id').value === id ? [m] : undefined : [];
2537                    }
2538                },
2539                'TAG': assertTagNameNoComments ? function (tag, context) {
2540                    if (typeof context.getElementsByTagName !== strundefined) {
2541                        return context.getElementsByTagName(tag);
2542                    }
2543                } : function (tag, context) {
2544                    var results = context.getElementsByTagName(tag);
2545                    if (tag === '*') {
2546                        var elem, tmp = [], i = 0;
2547                        for (; elem = results[i]; i++) {
2548                            if (elem.nodeType === 1) {
2549                                tmp.push(elem);
2550                            }
2551                        }
2552                        return tmp;
2553                    }
2554                    return results;
2555                },
2556                'NAME': assertUsableName && function (tag, context) {
2557                    if (typeof context.getElementsByName !== strundefined) {
2558                        return context.getElementsByName(name);
2559                    }
2560                },
2561                'CLASS': assertUsableClassName && function (className, context, xml) {
2562                    if (typeof context.getElementsByClassName !== strundefined && !xml) {
2563                        return context.getElementsByClassName(className);
2564                    }
2565                }
2566            },
2567            relative: {
2568                '>': {
2569                    dir: 'parentNode',
2570                    first: true
2571                },
2572                ' ': { dir: 'parentNode' },
2573                '+': {
2574                    dir: 'previousSibling',
2575                    first: true
2576                },
2577                '~': { dir: 'previousSibling' }
2578            },
2579            preFilter: {
2580                'ATTR': function (match) {
2581                    match[1] = match[1].replace(rbackslash, '');
2582                    match[3] = (match[4] || match[5] || '').replace(rbackslash, '');
2583                    if (match[2] === '~=') {
2584                        match[3] = ' ' + match[3] + ' ';
2585                    }
2586                    return match.slice(0, 4);
2587                },
2588                'CHILD': function (match) {
2589                    match[1] = match[1].toLowerCase();
2590                    if (match[1] === 'nth') {
2591                        if (!match[2]) {
2592                            Sizzle.error(match[0]);
2593                        }
2594                        match[3] = +(match[3] ? match[4] + (match[5] || 1) : 2 * (match[2] === 'even' || match[2] === 'odd'));
2595                        match[4] = +(match[6] + match[7] || match[2] === 'odd');
2596                    } else if (match[2]) {
2597                        Sizzle.error(match[0]);
2598                    }
2599                    return match;
2600                },
2601                'PSEUDO': function (match) {
2602                    var unquoted, excess;
2603                    if (matchExpr['CHILD'].test(match[0])) {
2604                        return null;
2605                    }
2606                    if (match[3]) {
2607                        match[2] = match[3];
2608                    } else if (unquoted = match[4]) {
2609                        if (rpseudo.test(unquoted) && (excess = tokenize(unquoted, true)) && (excess = unquoted.indexOf(')', unquoted.length - excess) - unquoted.length)) {
2610                            unquoted = unquoted.slice(0, excess);
2611                            match[0] = match[0].slice(0, excess);
2612                        }
2613                        match[2] = unquoted;
2614                    }
2615                    return match.slice(0, 3);
2616                }
2617            },
2618            filter: {
2619                'ID': assertGetIdNotName ? function (id) {
2620                    id = id.replace(rbackslash, '');
2621                    return function (elem) {
2622                        return elem.getAttribute('id') === id;
2623                    };
2624                } : function (id) {
2625                    id = id.replace(rbackslash, '');
2626                    return function (elem) {
2627                        var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode('id');
2628                        return node && node.value === id;
2629                    };
2630                },
2631                'TAG': function (nodeName) {
2632                    if (nodeName === '*') {
2633                        return function () {
2634                            return true;
2635                        };
2636                    }
2637                    nodeName = nodeName.replace(rbackslash, '').toLowerCase();
2638                    return function (elem) {
2639                        return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
2640                    };
2641                },
2642                'CLASS': function (className) {
2643                    var pattern = classCache[expando][className + ' '];
2644                    return pattern || (pattern = new RegExp('(^|' + whitespace + ')' + className + '(' + whitespace + '|$)')) && classCache(className, function (elem) {
2645                        return pattern.test(elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute('class') || '');
2646                    });
2647                },
2648                'ATTR': function (name, operator, check) {
2649                    return function (elem, context) {
2650                        var result = Sizzle.attr(elem, name);
2651                        if (result == null) {
2652                            return operator === '!=';
2653                        }
2654                        if (!operator) {
2655                            return true;
2656                        }
2657                        result += '';
2658                        return operator === '=' ? result === check : operator === '!=' ? result !== check : operator === '^=' ? check && result.indexOf(check) === 0 : operator === '*=' ? check && result.indexOf(check) > -1 : operator === '$=' ? check && result.substr(result.length - check.length) === check : operator === '~=' ? (' ' + result + ' ').indexOf(check) > -1 : operator === '|=' ? result === check || result.substr(0, check.length + 1) === check + '-' : false;
2659                    };
2660                },
2661                'CHILD': function (type, argument, first, last) {
2662                    if (type === 'nth') {
2663                        return function (elem) {
2664                            var node, diff, parent = elem.parentNode;
2665                            if (first === 1 && last === 0) {
2666                                return true;
2667                            }
2668                            if (parent) {
2669                                diff = 0;
2670                                for (node = parent.firstChild; node; node = node.nextSibling) {
2671                                    if (node.nodeType === 1) {
2672                                        diff++;
2673                                        if (elem === node) {
2674                                            break;
2675                                        }
2676                                    }
2677                                }
2678                            }
2679                            diff -= last;
2680                            return diff === first || diff % first === 0 && diff / first >= 0;
2681                        };
2682                    }
2683                    return function (elem) {
2684                        var node = elem;
2685                        switch (type) {
2686                        case 'only':
2687                        case 'first':
2688                            while (node = node.previousSibling) {
2689                                if (node.nodeType === 1) {
2690                                    return false;
2691                                }
2692                            }
2693                            if (type === 'first') {
2694                                return true;
2695                            }
2696                            node = elem;
2697                        case 'last':
2698                            while (node = node.nextSibling) {
2699                                if (node.nodeType === 1) {
2700                                    return false;
2701                                }
2702                            }
2703                            return true;
2704                        }
2705                    };
2706                },
2707                'PSEUDO': function (pseudo, argument) {
2708                    var args, fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error('unsupported pseudo: ' + pseudo);
2709                    if (fn[expando]) {
2710                        return fn(argument);
2711                    }
2712                    if (fn.length > 1) {
2713                        args = [
2714                            pseudo,
2715                            pseudo,
2716                            '',
2717                            argument
2718                        ];
2719                        return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {
2720                            var idx, matched = fn(seed, argument), i = matched.length;
2721                            while (i--) {
2722                                idx = indexOf.call(seed, matched[i]);
2723                                seed[idx] = !(matches[idx] = matched[i]);
2724                            }
2725                        }) : function (elem) {
2726                            return fn(elem, 0, args);
2727                        };
2728                    }
2729                    return fn;
2730                }
2731            },
2732            pseudos: {
2733                'not': markFunction(function (selector) {
2734                    var input = [], results = [], matcher = compile(selector.replace(rtrim, '$1'));
2735                    return matcher[expando] ? markFunction(function (seed, matches, context, xml) {
2736                        var elem, unmatched = matcher(seed, null, xml, []), i = seed.length;
2737                        while (i--) {
2738                            if (elem = unmatched[i]) {
2739                                seed[i] = !(matches[i] = elem);
2740                            }
2741                        }
2742                    }) : function (elem, context, xml) {
2743                        input[0] = elem;
2744                        matcher(input, null, xml, results);
2745                        return !results.pop();
2746                    };
2747                }),
2748                'has': markFunction(function (selector) {
2749                    return function (elem) {
2750                        return Sizzle(selector, elem).length > 0;
2751                    };
2752                }),
2753                'contains': markFunction(function (text) {
2754                    return function (elem) {
2755                        return (elem.textContent || elem.innerText || getText(elem)).indexOf(text) > -1;
2756                    };
2757                }),
2758                'enabled': function (elem) {
2759                    return elem.disabled === false;
2760                },
2761                'disabled': function (elem) {
2762                    return elem.disabled === true;
2763                },
2764                'checked': function (elem) {
2765                    var nodeName = elem.nodeName.toLowerCase();
2766                    return nodeName === 'input' && !!elem.checked || nodeName === 'option' && !!elem.selected;
2767                },
2768                'selected': function (elem) {
2769                    if (elem.parentNode) {
2770                        elem.parentNode.selectedIndex;
2771                    }
2772                    return elem.selected === true;
2773                },
2774                'parent': function (elem) {
2775                    return !Expr.pseudos['empty'](elem);
2776                },
2777                'empty': function (elem) {
2778                    var nodeType;
2779                    elem = elem.firstChild;
2780                    while (elem) {
2781                        if (elem.nodeName > '@' || (nodeType = elem.nodeType) === 3 || nodeType === 4) {
2782                            return false;
2783                        }
2784                        elem = elem.nextSibling;
2785                    }
2786                    return true;
2787                },
2788                'header': function (elem) {
2789                    return rheader.test(elem.nodeName);
2790                },
2791                'text': function (elem) {
2792                    var type, attr;
2793                    return elem.nodeName.toLowerCase() === 'input' && (type = elem.type) === 'text' && ((attr = elem.getAttribute('type')) == null || attr.toLowerCase() === type);
2794                },
2795                'radio': createInputPseudo('radio'),
2796                'checkbox': createInputPseudo('checkbox'),
2797                'file': createInputPseudo('file'),
2798                'password': createInputPseudo('password'),
2799                'image': createInputPseudo('image'),
2800                'submit': createButtonPseudo('submit'),
2801                'reset': createButtonPseudo('reset'),
2802                'button': function (elem) {
2803                    var name = elem.nodeName.toLowerCase();
2804                    return name === 'input' && elem.type === 'button' || name === 'button';
2805                },
2806                'input': function (elem) {
2807                    return rinputs.test(elem.nodeName);
2808                },
2809                'focus': function (elem) {
2810                    var doc = elem.ownerDocument;
2811                    return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
2812                },
2813                'active': function (elem) {
2814                    return elem === elem.ownerDocument.activeElement;
2815                },
2816                'first': createPositionalPseudo(function () {
2817                    return [0];
2818                }),
2819                'last': createPositionalPseudo(function (matchIndexes, length) {
2820                    return [length - 1];
2821                }),
2822                'eq': createPositionalPseudo(function (matchIndexes, length, argument) {
2823                    return [argument < 0 ? argument + length : argument];
2824                }),
2825                'even': createPositionalPseudo(function (matchIndexes, length) {
2826                    for (var i = 0; i < length; i += 2) {
2827                        matchIndexes.push(i);
2828                    }
2829                    return matchIndexes;
2830                }),
2831                'odd': createPositionalPseudo(function (matchIndexes, length) {
2832                    for (var i = 1; i < length; i += 2) {
2833                        matchIndexes.push(i);
2834                    }
2835                    return matchIndexes;
2836                }),
2837                'lt': createPositionalPseudo(function (matchIndexes, length, argument) {
2838                    for (var i = argument < 0 ? argument + length : argument; --i >= 0;) {
2839                        matchIndexes.push(i);
2840                    }
2841                    return matchIndexes;
2842                }),
2843                'gt': createPositionalPseudo(function (matchIndexes, length, argument) {
2844                    for (var i = argument < 0 ? argument + length : argument; ++i < length;) {
2845                        matchIndexes.push(i);
2846                    }
2847                    return matchIndexes;
2848                })
2849            }
2850        };
2851        function siblingCheck(a, b, ret) {
2852            if (a === b) {
2853                return ret;
2854            }
2855            var cur = a.nextSibling;
2856            while (cur) {
2857                if (cur === b) {
2858                    return -1;
2859                }
2860                cur = cur.nextSibling;
2861            }
2862            return 1;
2863        }
2864        sortOrder = docElem.compareDocumentPosition ? function (a, b) {
2865            if (a === b) {
2866                hasDuplicate = true;
2867                return 0;
2868            }
2869            return (!a.compareDocumentPosition || !b.compareDocumentPosition ? a.compareDocumentPosition : a.compareDocumentPosition(b) & 4) ? -1 : 1;
2870        } : function (a, b) {
2871            if (a === b) {
2872                hasDuplicate = true;
2873                return 0;
2874            } else if (a.sourceIndex && b.sourceIndex) {
2875                return a.sourceIndex - b.sourceIndex;
2876            }
2877            var al, bl, ap = [], bp = [], aup = a.parentNode, bup = b.parentNode, cur = aup;
2878            if (aup === bup) {
2879                return siblingCheck(a, b);
2880            } else if (!aup) {
2881                return -1;
2882            } else if (!bup) {
2883                return 1;
2884            }
2885            while (cur) {
2886                ap.unshift(cur);
2887                cur = cur.parentNode;
2888            }
2889            cur = bup;
2890            while (cur) {
2891                bp.unshift(cur);
2892                cur = cur.parentNode;
2893            }
2894            al = ap.length;
2895            bl = bp.length;
2896            for (var i = 0; i < al && i < bl; i++) {
2897                if (ap[i] !== bp[i]) {
2898                    return siblingCheck(ap[i], bp[i]);
2899                }
2900            }
2901            return i === al ? siblingCheck(a, bp[i], -1) : siblingCheck(ap[i], b, 1);
2902        };
2903        [
2904            0,
2905            0
2906        ].sort(sortOrder);
2907        baseHasDuplicate = !hasDuplicate;
2908        Sizzle.uniqueSort = function (results) {
2909            var elem, duplicates = [], i = 1, j = 0;
2910            hasDuplicate = baseHasDuplicate;
2911            results.sort(sortOrder);
2912            if (hasDuplicate) {
2913                for (; elem = results[i]; i++) {
2914                    if (elem === results[i - 1]) {
2915                        j = duplicates.push(i);
2916                    }
2917                }
2918                while (j--) {
2919                    results.splice(duplicates[j], 1);
2920                }
2921            }
2922            return results;
2923        };
2924        Sizzle.error = function (msg) {
2925            throw new Error('Syntax error, unrecognized expression: ' + msg);
2926        };
2927        function tokenize(selector, parseOnly) {
2928            var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[expando][selector + ' '];
2929            if (cached) {
2930                return parseOnly ? 0 : cached.slice(0);
2931            }
2932            soFar = selector;
2933            groups = [];
2934            preFilters = Expr.preFilter;
2935            while (soFar) {
2936                if (!matched || (match = rcomma.exec(soFar))) {
2937                    if (match) {
2938                        soFar = soFar.slice(match[0].length) || soFar;
2939                    }
2940                    groups.push(tokens = []);
2941                }
2942                matched = false;
2943                if (match = rcombinators.exec(soFar)) {
2944                    tokens.push(matched = new Token(match.shift()));
2945                    soFar = soFar.slice(matched.length);
2946                    matched.type = match[0].replace(rtrim, ' ');
2947                }
2948                for (type in Expr.filter) {
2949                    if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {
2950                        tokens.push(matched = new Token(match.shift()));
2951                        soFar = soFar.slice(matched.length);
2952                        matched.type = type;
2953                        matched.matches = match;
2954                    }
2955                }
2956                if (!matched) {
2957                    break;
2958                }
2959            }
2960            return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : tokenCache(selector, groups).slice(0);
2961        }
2962        function addCombinator(matcher, combinator, base) {
2963            var dir = combinator.dir, checkNonElements = base && combinator.dir === 'parentNode', doneName = done++;
2964            return combinator.first ? function (elem, context, xml) {
2965                while (elem = elem[dir]) {
2966                    if (checkNonElements || elem.nodeType === 1) {
2967                        return matcher(elem, context, xml);
2968                    }
2969                }
2970            } : function (elem, context, xml) {
2971                if (!xml) {
2972                    var cache, dirkey = dirruns + ' ' + doneName + ' ', cachedkey = dirkey + cachedruns;
2973                    while (elem = elem[dir]) {
2974                        if (checkNonElements || elem.nodeType === 1) {
2975                            if ((cache = elem[expando]) === cachedkey) {
2976                                return elem.sizset;
2977                            } else if (typeof cache === 'string' && cache.indexOf(dirkey) === 0) {
2978                                if (elem.sizset) {
2979                                    return elem;
2980                                }
2981                            } else {
2982                                elem[expando] = cachedkey;
2983                                if (matcher(elem, context, xml)) {
2984                                    elem.sizset = true;
2985                                    return elem;
2986                                }
2987                                elem.sizset = false;
2988                            }
2989                        }
2990                    }
2991                } else {
2992                    while (elem = elem[dir]) {
2993                        if (checkNonElements || elem.nodeType === 1) {
2994                            if (matcher(elem, context, xml)) {
2995                                return elem;
2996                            }
2997                        }
2998                    }
2999                }
3000            };
3001        }
3002        function elementMatcher(matchers) {
3003            return matchers.length > 1 ? function (elem, context, xml) {
3004                var i = matchers.length;
3005                while (i--) {
3006                    if (!matchers[i](elem, context, xml)) {
3007                        return false;
3008                    }
3009                }
3010                return true;
3011            } : matchers[0];
3012        }
3013        function condense(unmatched, map, filter, context, xml) {
3014            var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null;
3015            for (; i < len; i++) {
3016                if (elem = unmatched[i]) {
3017                    if (!filter || filter(elem, context, xml)) {
3018                        newUnmatched.push(elem);
3019                        if (mapped) {
3020                            map.push(i);
3021                        }
3022                    }
3023                }
3024            }
3025            return newUnmatched;
3026        }
3027        function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {
3028            if (postFilter && !postFilter[expando]) {
3029                postFilter = setMatcher(postFilter);
3030            }
3031            if (postFinder && !postFinder[expando]) {
3032                postFinder = setMatcher(postFinder, postSelector);
3033            }
3034            return markFunction(function (seed, results, context, xml) {
3035                var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(selector || '*', context.nodeType ? [context] : context, []), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems, matcherOut = matcher ? postFinder || (seed ? preFilter : preexisting || postFilter) ? [] : results : matcherIn;
3036                if (matcher) {
3037                    matcher(matcherIn, matcherOut, context, xml);
3038                }
3039                if (postFilter) {
3040                    temp = condense(matcherOut, postMap);
3041                    postFilter(temp, [], context, xml);
3042                    i = temp.length;
3043                    while (i--) {
3044                        if (elem = temp[i]) {
3045                            matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);
3046                        }
3047                    }
3048                }
3049                if (seed) {
3050                    if (postFinder || preFilter) {
3051                        if (postFinder) {
3052                            temp = [];
3053                            i = matcherOut.length;
3054                            while (i--) {
3055                                if (elem = matcherOut[i]) {
3056                                    temp.push(matcherIn[i] = elem);
3057                                }
3058                            }
3059                            postFinder(null, matcherOut = [], temp, xml);
3060                        }
3061                        i = matcherOut.length;
3062                        while (i--) {
3063                            if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf.call(seed, elem) : preMap[i]) > -1) {
3064                                seed[temp] = !(results[temp] = elem);
3065                            }
3066                        }
3067                    }
3068                } else {
3069                    matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);
3070                    if (postFinder) {
3071                        postFinder(null, results, matcherOut, xml);
3072                    } else {
3073                        push.apply(results, matcherOut);
3074                    }
3075                }
3076            });
3077        }
3078        function matcherFromTokens(tokens) {
3079            var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[' '], i = leadingRelative ? 1 : 0, matchContext = addCombinator(function (elem) {
3080                    return elem === checkContext;
3081                }, implicitRelative, true), matchAnyContext = addCombinator(function (elem) {
3082                    return indexOf.call(checkContext, elem) > -1;
3083                }, implicitRelative, true), matchers = [function (elem, context, xml) {
3084                        return !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));
3085                    }];
3086            for (; i < len; i++) {
3087                if (matcher = Expr.relative[tokens[i].type]) {
3088                    matchers = [addCombinator(elementMatcher(matchers), matcher)];
3089                } else {
3090                    matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches);
3091                    if (matcher[expando]) {
3092                        j = ++i;
3093                        for (; j < len; j++) {
3094                            if (Expr.relative[tokens[j].type]) {
3095                                break;
3096                            }
3097                        }
3098                        return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && tokens.slice(0, i - 1).join('').replace(rtrim, '$1'), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && tokens.join(''));
3099                    }
3100                    matchers.push(matcher);
3101                }
3102            }
3103            return elementMatcher(matchers);
3104        }
3105        function matcherFromGroupMatchers(elementMatchers, setMatchers) {
3106            var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function (seed, context, xml, results, expandContext) {
3107                    var elem, j, matcher, setMatched = [], matchedCount = 0, i = '0', unmatched = seed && [], outermost = expandContext != null, contextBackup = outermostContext, elems = seed || byElement && Expr.find['TAG']('*', expandContext && context.parentNode || context), dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.E;
3108                    if (outermost) {
3109                        outermostContext = context !== document && context;
3110                        cachedruns = superMatcher.el;
3111                    }
3112                    for (; (elem = elems[i]) != null; i++) {
3113                        if (byElement && elem) {
3114                            for (j = 0; matcher = elementMatchers[j]; j++) {
3115                                if (matcher(elem, context, xml)) {
3116                                    results.push(elem);
3117                                    break;
3118                                }
3119                            }
3120                            if (outermost) {
3121                                dirruns = dirrunsUnique;
3122                                cachedruns = ++superMatcher.el;
3123                            }
3124                        }
3125                        if (bySet) {
3126                            if (elem = !matcher && elem) {
3127                                matchedCount--;
3128                            }
3129                            if (seed) {
3130                                unmatched.push(elem);
3131                            }
3132                        }
3133                    }
3134                    matchedCount += i;
3135                    if (bySet && i !== matchedCount) {
3136                        for (j = 0; matcher = setMatchers[j]; j++) {
3137                            matcher(unmatched, setMatched, context, xml);
3138                        }
3139                        if (seed) {
3140                            if (matchedCount > 0) {
3141                                while (i--) {
3142                                    if (!(unmatched[i] || setMatched[i])) {
3143                                        setMatched[i] = pop.call(results);
3144                                    }
3145                                }
3146                            }
3147                            setMatched = condense(setMatched);
3148                        }
3149                        push.apply(results, setMatched);
3150                        if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {
3151                            Sizzle.uniqueSort(results);
3152                        }
3153                    }
3154                    if (outermost) {
3155                        dirruns = dirrunsUnique;
3156                        outermostContext = contextBackup;
3157                    }
3158                    return unmatched;
3159                };
3160            superMatcher.el = 0;
3161            return bySet ? markFunction(superMatcher) : superMatcher;
3162        }
3163        compile = Sizzle.compile = function (selector, group) {
3164            var i, setMatchers = [], elementMatchers = [], cached = compilerCache[expando][selector + ' '];
3165            if (!cached) {
3166                if (!group) {
3167                    group = tokenize(selector);
3168                }
3169                i = group.length;
3170                while (i--) {
3171                    cached = matcherFromTokens(group[i]);
3172                    if (cached[expando]) {
3173                        setMatchers.push(cached);
3174                    } else {
3175                        elementMatchers.push(cached);
3176                    }
3177                }
3178                cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers));
3179            }
3180            return cached;
3181        };
3182        function multipleContexts(selector, contexts, results) {
3183            var i = 0, len = contexts.length;
3184            for (; i < len; i++) {
3185                Sizzle(selector, contexts[i], results);
3186            }
3187            return results;
3188        }
3189        function select(selector, context, results, seed, xml) {
3190            var i, tokens, token, type, find, match = tokenize(selector), j = match.length;
3191            if (!seed) {
3192                if (match.length === 1) {
3193                    tokens = match[0] = match[0].slice(0);
3194                    if (tokens.length > 2 && (token = tokens[0]).type === 'ID' && context.nodeType === 9 && !xml && Expr.relative[tokens[1].type]) {
3195                        context = Expr.find['ID'](token.matches[0].replace(rbackslash, ''), context, xml)[0];
3196                        if (!context) {
3197                            return results;
3198                        }
3199                        selector = selector.slice(tokens.shift().length);
3200                    }
3201                    for (i = matchExpr['POS'].test(selector) ? -1 : tokens.length - 1; i >= 0; i--) {
3202                        token = tokens[i];
3203                        if (Expr.relative[type = token.type]) {
3204                            break;
3205                        }
3206                        if (find = Expr.find[type]) {
3207                            if (seed = find(token.matches[0].replace(rbackslash, ''), rsibling.test(tokens[0].type) && context.parentNode || context, xml)) {
3208                                tokens.splice(i, 1);
3209                                selector = seed.length && tokens.join('');
3210                                if (!selector) {
3211                                    push.apply(results, slice.call(seed, 0));
3212                                    return results;
3213                                }
3214                                break;
3215                            }
3216                        }
3217                    }
3218                }
3219            }
3220            compile(selector, match)(seed, context, xml, results, rsibling.test(selector));
3221            return results;
3222        }
3223        if (document.querySelectorAll) {
3224            (function () {
3225                var disconnectedMatch, oldSelect = select, rescape = /'|\\/g, rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, rbuggyQSA = [':focus'], rbuggyMatches = [':active'], matches = docElem.matchesSelector || docElem.mozMatchesSelector || docElem.webkitMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector;
3226                assert(function (div) {
3227                    div.innerHTML = '<select><option selected=\'\'></option></select>';
3228                    if (!div.querySelectorAll('[selected]').length) {
3229                        rbuggyQSA.push('\\[' + whitespace + '*(?:checked|disabled|ismap|multiple|readonly|selected|value)');
3230                    }
3231                    if (!div.querySelectorAll(':checked').length) {
3232                        rbuggyQSA.push(':checked');
3233                    }
3234                });
3235                assert(function (div) {
3236                    div.innerHTML = '<p test=\'\'></p>';
3237                    if (div.querySelectorAll('[test^=\'\']').length) {
3238                        rbuggyQSA.push('[*^$]=' + whitespace + '*(?:""|\'\')');
3239                    }
3240                    div.innerHTML = '<input type=\'hidden\'/>';
3241                    if (!div.querySelectorAll(':enabled').length) {
3242                        rbuggyQSA.push(':enabled', ':disabled');
3243                    }
3244                });
3245                rbuggyQSA = new RegExp(rbuggyQSA.join('|'));
3246                select = function (selector, context, results, seed, xml) {
3247                    if (!seed && !xml && !rbuggyQSA.test(selector)) {
3248                        var groups, i, old = true, nid = expando, newContext = context, newSelector = context.nodeType === 9 && selector;
3249                        if (context.nodeType === 1 && context.nodeName.toLowerCase() !== 'object') {
3250                            groups = tokenize(selector);
3251                            if (old = context.getAttribute('id')) {
3252                                nid = old.replace(rescape, '\\$&');
3253                            } else {
3254                                context.setAttribute('id', nid);
3255                            }
3256                            nid = '[id=\'' + nid + '\'] ';
3257                            i = groups.length;
3258                            while (i--) {
3259                                groups[i] = nid + groups[i].join('');
3260                            }
3261                            newContext = rsibling.test(selector) && context.parentNode || context;
3262                            newSelector = groups.join(',');
3263                        }
3264                        if (newSelector) {
3265                            try {
3266                                push.apply(results, slice.call(newContext.querySelectorAll(newSelector), 0));
3267                                return results;
3268                            } catch (qsaError) {
3269                            } finally {
3270                                if (!old) {
3271                                    context.removeAttribute('id');
3272                                }
3273                            }
3274                        }
3275                    }
3276                    return oldSelect(selector, context, results, seed, xml);
3277                };
3278                if (matches) {
3279                    assert(function (div) {
3280                        disconnectedMatch = matches.call(div, 'div');
3281                        try {
3282                            matches.call(div, '[test!=\'\']:sizzle');
3283                            rbuggyMatches.push('!=', pseudos);
3284                        } catch (e) {
3285                        }
3286                    });
3287                    rbuggyMatches = new RegExp(rbuggyMatches.join('|'));
3288                    Sizzle.matchesSelector = function (elem, expr) {
3289                        expr = expr.replace(rattributeQuotes, '=\'$1\']');
3290                        if (!isXML(elem) && !rbuggyMatches.test(expr) && !rbuggyQSA.test(expr)) {
3291                            try {
3292                                var ret = matches.call(elem, expr);
3293                                if (ret || disconnectedMatch || elem.document && elem.document.nodeType !== 11) {
3294                                    return ret;
3295                                }
3296                            } catch (e) {
3297                            }
3298                        }
3299                        return Sizzle(expr, null, null, [elem]).length > 0;
3300                    };
3301                }
3302            }());
3303        }
3304        Expr.pseudos['nth'] = Expr.pseudos['eq'];
3305        function setFilters() {
3306        }
3307        Expr.filters = setFilters.prototype = Expr.pseudos;
3308        Expr.setFilters = new setFilters();
3309        Sizzle.attr = jQuery.attr;
3310        jQuery.find = Sizzle;
3311        jQuery.expr = Sizzle.selectors;
3312        jQuery.expr[':'] = jQuery.expr.pseudos;
3313        jQuery.unique = Sizzle.uniqueSort;
3314        jQuery.text = Sizzle.getText;
3315        jQuery.isXMLDoc = Sizzle.isXML;
3316        jQuery.contains = Sizzle.contains;
3317    }(window));
3318    var runtil = /Until$/, rparentsprev = /^(?:parents|prev(?:Until|All))/, isSimple = /^.[^:#\[\.,]*$/, rneedsContext = jQuery.expr.match.needsContext, guaranteedUnique = {
3319            children: true,
3320            contents: true,
3321            next: true,
3322            prev: true
3323        };
3324    jQuery.fn.extend({
3325        find: function (selector) {
3326            var i, l, length, n, r, ret, self = this;
3327            if (typeof selector !== 'string') {
3328                return jQuery(selector).filter(function () {
3329                    for (i = 0, l = self.length; i < l; i++) {
3330                        if (jQuery.contains(self[i], this)) {
3331                            return true;
3332                        }
3333                    }
3334                });
3335            }
3336            ret = this.pushStack('', 'find', selector);
3337            for (i = 0, l = this.length; i < l; i++) {
3338                length = ret.length;
3339                jQuery.find(selector, this[i], ret);
3340                if (i > 0) {
3341                    for (n = length; n < ret.length; n++) {
3342                        for (r = 0; r < length; r++) {
3343                            if (ret[r] === ret[n]) {
3344                                ret.splice(n--, 1);
3345                                break;
3346                            }
3347                        }
3348                    }
3349                }
3350            }
3351            return ret;
3352        },
3353        has: function (target) {
3354            var i, targets = jQuery(target, this), len = targets.length;
3355            return this.filter(function () {
3356                for (i = 0; i < len; i++) {
3357                    if (jQuery.contains(this, targets[i])) {
3358                        return true;
3359                    }
3360                }
3361            });
3362        },
3363        not: function (selector) {
3364            return this.pushStack(winnow(this, selector, false), 'not', selector);
3365        },
3366        filter: function (selector) {
3367            return this.pushStack(winnow(this, selector, true), 'filter', selector);
3368        },
3369        is: function (selector) {
3370            return !!selector && (typeof selector === 'string' ? rneedsContext.test(selector) ? jQuery(selector, this.context).index(this[0]) >= 0 : jQuery.filter(selector, this).length > 0 : this.filter(selector).length > 0);
3371        },
3372        closest: function (selectors, context) {
3373            var cur, i = 0, l = this.length, ret = [], pos = rneedsContext.test(selectors) || typeof selectors !== 'string' ? jQuery(selectors, context || this.context) : 0;
3374            for (; i < l; i++) {
3375                cur = this[i];
3376                while (cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11) {
3377                    if (pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors)) {
3378                        ret.push(cur);
3379                        break;
3380                    }
3381                    cur = cur.parentNode;
3382                }
3383            }
3384            ret = ret.length > 1 ? jQuery.unique(ret) : ret;
3385            return this.pushStack(ret, 'closest', selectors);
3386        },
3387        index: function (elem) {
3388            if (!elem) {
3389                return this[0] && this[0].parentNode ? this.prevAll().length : -1;
3390            }
3391            if (typeof elem === 'string') {
3392                return jQuery.inArray(this[0], jQuery(elem));
3393            }
3394            return jQuery.inArray(elem.jquery ? elem[0] : elem, this);
3395        },
3396        add: function (selector, context) {
3397            var set = typeof selector === 'string' ? jQuery(selector, context) : jQuery.makeArray(selector && selector.nodeType ? [selector] : selector), all = jQuery.merge(this.get(), set);
3398            return this.pushStack(isDisconnected(set[0]) || isDisconnected(all[0]) ? all : jQuery.unique(all));
3399        },
3400        addBack: function (selector) {
3401            return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));
3402        }
3403    });
3404    jQuery.fn.andSelf = jQuery.fn.addBack;
3405    function isDisconnected(node) {
3406        return !node || !node.parentNode || node.parentNode.nodeType === 11;
3407    }
3408    function sibling(cur, dir) {
3409        do {
3410            cur = cur[dir];
3411        } while (cur && cur.nodeType !== 1);
3412        return cur;
3413    }
3414    jQuery.each({
3415        parent: function (elem) {
3416            var parent = elem.parentNode;
3417            return parent && parent.nodeType !== 11 ? parent : null;
3418        },
3419        parents: function (elem) {
3420            return jQuery.dir(elem, 'parentNode');
3421        },
3422        parentsUntil: function (elem, i, until) {
3423            return jQuery.dir(elem, 'parentNode', until);
3424        },
3425        next: function (elem) {
3426            return sibling(elem, 'nextSibling');
3427        },
3428        prev: function (elem) {
3429            return sibling(elem, 'previousSibling');
3430        },
3431        nextAll: function (elem) {
3432            return jQuery.dir(elem, 'nextSibling');
3433        },
3434        prevAll: function (elem) {
3435            return jQuery.dir(elem, 'previousSibling');
3436        },
3437        nextUntil: function (elem, i, until) {
3438            return jQuery.dir(elem, 'nextSibling', until);
3439        },
3440        prevUntil: function (elem, i, until) {
3441            return jQuery.dir(elem, 'previousSibling', until);
3442        },
3443        siblings: function (elem) {
3444            return jQuery.sibling((elem.parentNode || {}).firstChild, elem);
3445        },
3446        children: function (elem) {
3447            return jQuery.sibling(elem.firstChild);
3448        },
3449        contents: function (elem) {
3450            return jQuery.nodeName(elem, 'iframe') ? elem.contentDocument || elem.contentWindow.document : jQuery.merge([], elem.childNodes);
3451        }
3452    }, function (name, fn) {
3453        jQuery.fn[name] = function (until, selector) {
3454            var ret = jQuery.map(this, fn, until);
3455            if (!runtil.test(name)) {
3456                selector = until;
3457            }
3458            if (selector && typeof selector === 'string') {
3459                ret = jQuery.filter(selector, ret);
3460            }
3461            ret = this.length > 1 && !guaranteedUnique[name] ? jQuery.unique(ret) : ret;
3462            if (this.length > 1 && rparentsprev.test(name)) {
3463                ret = ret.reverse();
3464            }
3465            return this.pushStack(ret, name, core_slice.call(arguments).join(','));
3466        };
3467    });
3468    jQuery.extend({
3469        filter: function (expr, elems, not) {
3470            if (not) {
3471                expr = ':not(' + expr + ')';
3472            }
3473            return elems.length === 1 ? jQuery.find.matchesSelector(elems[0], expr) ? [elems[0]] : [] : jQuery.find.matches(expr, elems);
3474        },
3475        dir: function (elem, dir, until) {
3476            var matched = [], cur = elem[dir];
3477            while (cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery(cur).is(until))) {
3478                if (cur.nodeType === 1) {
3479                    matched.push(cur);
3480                }
3481                cur = cur[dir];
3482            }
3483            return matched;
3484        },
3485        sibling: function (n, elem) {
3486            var r = [];
3487            for (; n; n = n.nextSibling) {
3488                if (n.nodeType === 1 && n !== elem) {
3489                    r.push(n);
3490                }
3491            }
3492            return r;
3493        }
3494    });
3495    function winnow(elements, qualifier, keep) {
3496        qualifier = qualifier || 0;
3497        if (jQuery.isFunction(qualifier)) {
3498            return jQuery.grep(elements, function (elem, i) {
3499                var retVal = !!qualifier.call(elem, i, elem);
3500                return retVal === keep;
3501            });
3502        } else if (qualifier.nodeType) {
3503            return jQuery.grep(elements, function (elem, i) {
3504                return elem === qualifier === keep;
3505            });
3506        } else if (typeof qualifier === 'string') {
3507            var filtered = jQuery.grep(elements, function (elem) {
3508                return elem.nodeType === 1;
3509            });
3510            if (isSimple.test(qualifier)) {
3511                return jQuery.filter(qualifier, filtered, !keep);
3512            } else {
3513                qualifier = jQuery.filter(qualifier, filtered);
3514            }
3515        }
3516        return jQuery.grep(elements, function (elem, i) {
3517            return jQuery.inArray(elem, qualifier) >= 0 === keep;
3518        });
3519    }
3520    function createSafeFragment(document) {
3521        var list = nodeNames.split('|'), safeFrag = document.createDocumentFragment();
3522        if (safeFrag.createElement) {
3523            while (list.length) {
3524                safeFrag.createElement(list.pop());
3525            }
3526        }
3527        return safeFrag;
3528    }
3529    var nodeNames = 'abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|' + 'header|hgroup|mark|meter|nav|output|progress|section|summary|time|video', rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, rleadingWhitespace = /^\s+/, rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, rtagName = /<([\w:]+)/, rtbody = /<tbody/i, rhtml = /<|&#?\w+;/, rnoInnerhtml = /<(?:script|style|link)/i, rnocache = /<(?:script|object|embed|option|style)/i, rnoshimcache = new RegExp('<(?:' + nodeNames + ')[\\s/>]', 'i'), rcheckableType = /^(?:checkbox|radio)$/, rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, rscriptType = /\/(java|ecma)script/i, rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g, wrapMap = {
3530            option: [
3531                1,
3532                '<select multiple=\'multiple\'>',
3533                '</select>'
3534            ],
3535            legend: [
3536                1,
3537                '<fieldset>',
3538                '</fieldset>'
3539            ],
3540            thead: [
3541                1,
3542                '<table>',
3543                '</table>'
3544            ],
3545            tr: [
3546                2,
3547                '<table><tbody>',
3548                '</tbody></table>'
3549            ],
3550            td: [
3551                3,
3552                '<table><tbody><tr>',
3553                '</tr></tbody></table>'
3554            ],
3555            col: [
3556                2,
3557                '<table><tbody></tbody><colgroup>',
3558                '</colgroup></table>'
3559            ],
3560            area: [
3561                1,
3562                '<map>',
3563                '</map>'
3564            ],
3565            _default: [
3566                0,
3567                '',
3568                ''
3569            ]
3570        }, safeFragment = createSafeFragment(document), fragmentDiv = safeFragment.appendChild(document.createElement('div'));
3571    wrapMap.optgroup = wrapMap.option;
3572    wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
3573    wrapMap.th = wrapMap.td;
3574    if (!jQuery.support.htmlSerialize) {
3575        wrapMap._default = [
3576            1,
3577            'X<div>',
3578            '</div>'
3579        ];
3580    }
3581    jQuery.fn.extend({
3582        text: function (value) {
3583            return jQuery.access(this, function (value) {
3584                return value === undefined ? jQuery.text(this) : this.empty().append((this[0] && this[0].ownerDocument || document).createTextNode(value));
3585            }, null, value, arguments.length);
3586        },
3587        wrapAll: function (html) {
3588            if (jQuery.isFunction(html)) {
3589                return this.each(function (i) {
3590                    jQuery(this).wrapAll(html.call(this, i));
3591                });
3592            }
3593            if (this[0]) {
3594                var wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);
3595                if (this[0].parentNode) {
3596                    wrap.insertBefore(this[0]);
3597                }
3598                wrap.map(function () {
3599                    var elem = this;
3600                    while (elem.firstChild && elem.firstChild.nodeType === 1) {
3601                        elem = elem.firstChild;
3602                    }
3603                    return elem;
3604                }).append(this);
3605            }
3606            return this;
3607        },
3608        wrapInner: function (html) {
3609            if (jQuery.isFunction(html)) {
3610                return this.each(function (i) {
3611                    jQuery(this).wrapInner(html.call(this, i));
3612                });
3613            }
3614            return this.each(function () {
3615                var self = jQuery(this), contents = self.contents();
3616                if (contents.length) {
3617                    contents.wrapAll(html);
3618                } else {
3619                    self.append(html);
3620                }
3621            });
3622        },
3623        wrap: function (html) {
3624            var isFunction = jQuery.isFunction(html);
3625            return this.each(function (i) {
3626                jQuery(this).wrapAll(isFunction ? html.call(this, i) : html);
3627            });
3628        },
3629        unwrap: function () {
3630            return this.parent().each(function () {
3631                if (!jQuery.nodeName(this, 'body')) {
3632                    jQuery(this).replaceWith(this.childNodes);
3633                }
3634            }).end();
3635        },
3636        append: function () {
3637            return this.domManip(arguments, true, function (elem) {
3638                if (this.nodeType === 1 || this.nodeType === 11) {
3639                    this.appendChild(elem);
3640                }
3641            });
3642        },
3643        prepend: function () {
3644            return this.domManip(arguments, true, function (elem) {
3645                if (this.nodeType === 1 || this.nodeType === 11) {
3646                    this.insertBefore(elem, this.firstChild);
3647                }
3648            });
3649        },
3650        before: function () {
3651            if (!isDisconnected(this[0])) {
3652                return this.domManip(arguments, false, function (elem) {
3653                    this.parentNode.insertBefore(elem, this);
3654                });
3655            }
3656            if (arguments.length) {
3657                var set = jQuery.clean(arguments);
3658                return this.pushStack(jQuery.merge(set, this), 'before', this.selector);
3659            }
3660        },
3661        after: function () {
3662            if (!isDisconnected(this[0])) {
3663                return this.domManip(arguments, false, function (elem) {
3664                    this.parentNode.insertBefore(elem, this.nextSibling);
3665                });
3666            }
3667            if (arguments.length) {
3668                var set = jQuery.clean(arguments);
3669                return this.pushStack(jQuery.merge(this, set), 'after', this.selector);
3670            }
3671        },
3672        remove: function (selector, keepData) {
3673            var elem, i = 0;
3674            for (; (elem = this[i]) != null; i++) {
3675                if (!selector || jQuery.filter(selector, [elem]).length) {
3676                    if (!keepData && elem.nodeType === 1) {
3677                        jQuery.cleanData(elem.getElementsByTagName('*'));
3678                        jQuery.cleanData([elem]);
3679                    }
3680                    if (elem.parentNode) {
3681                        elem.parentNode.removeChild(elem);
3682                    }
3683                }
3684            }
3685            return this;
3686        },
3687        empty: function () {
3688            var elem, i = 0;
3689            for (; (elem = this[i]) != null; i++) {
3690                if (elem.nodeType === 1) {
3691                    jQuery.cleanData(elem.getElementsByTagName('*'));
3692                }
3693                while (elem.firstChild) {
3694                    elem.removeChild(elem.firstChild);
3695                }
3696            }
3697            return this;
3698        },
3699        clone: function (dataAndEvents, deepDataAndEvents) {
3700            dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
3701            deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
3702            return this.map(function () {
3703                return jQuery.clone(this, dataAndEvents, deepDataAndEvents);
3704            });
3705        },
3706        html: function (value) {
3707            return jQuery.access(this, function (value) {
3708                var elem = this[0] || {}, i = 0, l = this.length;
3709                if (value === undefined) {
3710                    return elem.nodeType === 1 ? elem.innerHTML.replace(rinlinejQuery, '') : undefined;
3711                }
3712                if (typeof value === 'string' && !rnoInnerhtml.test(value) && (jQuery.support.htmlSerialize || !rnoshimcache.test(value)) && (jQuery.support.leadingWhitespace || !rleadingWhitespace.test(value)) && !wrapMap[(rtagName.exec(value) || [
3713                        '',
3714                        ''
3715                    ])[1].toLowerCase()]) {
3716                    value = value.replace(rxhtmlTag, '<$1></$2>');
3717                    try {
3718                        for (; i < l; i++) {
3719                            elem = this[i] || {};
3720                            if (elem.nodeType === 1) {
3721                                jQuery.cleanData(elem.getElementsByTagName('*'));
3722                                elem.innerHTML = value;
3723                            }
3724                        }
3725                        elem = 0;
3726                    } catch (e) {
3727                    }
3728                }
3729                if (elem) {
3730                    this.empty().append(value);
3731                }
3732            }, null, value, arguments.length);
3733        },
3734        replaceWith: function (value) {
3735            if (!isDisconnected(this[0])) {
3736                if (jQuery.isFunction(value)) {
3737                    return this.each(function (i) {
3738                        var self = jQuery(this), old = self.html();
3739                        self.replaceWith(value.call(this, i, old));
3740                    });
3741                }
3742                if (typeof value !== 'string') {
3743                    value = jQuery(value).detach();
3744                }
3745                return this.each(function () {
3746                    var next = this.nextSibling, parent = this.parentNode;
3747                    jQuery(this).remove();
3748                    if (next) {
3749                        jQuery(next).before(value);
3750                    } else {
3751                        jQuery(parent).append(value);
3752                    }
3753                });
3754            }
3755            return this.length ? this.pushStack(jQuery(jQuery.isFunction(value) ? value() : value), 'replaceWith', value) : this;
3756        },
3757        detach: function (selector) {
3758            return this.remove(selector, true);
3759        },
3760        domManip: function (args, table, callback) {
3761            args = [].concat.apply([], args);
3762            var results, first, fragment, iNoClone, i = 0, value = args[0], scripts = [], l = this.length;
3763            if (!jQuery.support.checkClone && l > 1 && typeof value === 'string' && rchecked.test(value)) {
3764                return this.each(function () {
3765                    jQuery(this).domManip(args, table, callback);
3766                });
3767            }
3768            if (jQuery.isFunction(value)) {
3769                return this.each(function (i) {
3770                    var self = jQuery(this);
3771                    args[0] = value.call(this, i, table ? self.html() : undefined);
3772                    self.domManip(args, table, callback);
3773                });
3774            }
3775            if (this[0]) {
3776                results = jQuery.buildFragment(args, this, scripts);
3777                fragment = results.fragment;
3778                first = fragment.firstChild;
3779                if (fragment.childNodes.length === 1) {
3780                    fragment = first;
3781                }
3782                if (first) {
3783                    table = table && jQuery.nodeName(first, 'tr');
3784                    for (iNoClone = results.cacheable || l - 1; i < l; i++) {
3785                        callback.call(table && jQuery.nodeName(this[i], 'table') ? findOrAppend(this[i], 'tbody') : this[i], i === iNoClone ? fragment : jQuery.clone(fragment, true, true));
3786                    }
3787                }
3788                fragment = first = null;
3789                if (scripts.length) {
3790                    jQuery.each(scripts, function (i, elem) {
3791                        if (elem.src) {
3792                            if (jQuery.ajax) {
3793                                jQuery.ajax({
3794                                    url: elem.src,
3795                                    type: 'GET',
3796                                    dataType: 'script',
3797                                    async: false,
3798                                    global: false,
3799                                    'throws': true
3800                                });
3801                            } else {
3802                                jQuery.error('no ajax');
3803                            }
3804                        } else {
3805                            jQuery.globalEval((elem.text || elem.textContent || elem.innerHTML || '').replace(rcleanScript, ''));
3806                        }
3807                        if (elem.parentNode) {
3808                            elem.parentNode.removeChild(elem);
3809                        }
3810                    });
3811                }
3812            }
3813            return this;
3814        }
3815    });
3816    function findOrAppend(elem, tag) {
3817        return elem.getElementsByTagName(tag)[0] || elem.appendChild(elem.ownerDocument.createElement(tag));
3818    }
3819    function cloneCopyEvent(src, dest) {
3820        if (dest.nodeType !== 1 || !jQuery.hasData(src)) {
3821            return;
3822        }
3823        var type, i, l, oldData = jQuery._data(src), curData = jQuery._data(dest, oldData), events = oldData.events;
3824        if (events) {
3825            delete curData.handle;
3826            curData.events = {};
3827            for (type in events) {
3828                for (i = 0, l = events[type].length; i < l; i++) {
3829                    jQuery.event.add(dest, type, events[type][i]);
3830                }
3831            }
3832        }
3833        if (curData.data) {
3834            curData.data = jQuery.extend({}, curData.data);
3835        }
3836    }
3837    function cloneFixAttributes(src, dest) {
3838        var nodeName;
3839        if (dest.nodeType !== 1) {
3840            return;
3841        }
3842        if (dest.clearAttributes) {
3843            dest.clearAttributes();
3844        }
3845        if (dest.mergeAttributes) {
3846            dest.mergeAttributes(src);
3847        }
3848        nodeName = dest.nodeName.toLowerCase();
3849        if (nodeName === 'object') {
3850            if (dest.parentNode) {
3851                dest.outerHTML = src.outerHTML;
3852            }
3853            if (jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML))) {
3854                dest.innerHTML = src.innerHTML;
3855            }
3856        } else if (nodeName === 'input' && rcheckableType.test(src.type)) {
3857            dest.defaultChecked = dest.checked = src.checked;
3858            if (dest.value !== src.value) {
3859                dest.value = src.value;
3860            }
3861        } else if (nodeName === 'option') {
3862            dest.selected = src.defaultSelected;
3863        } else if (nodeName === 'input' || nodeName === 'textarea') {
3864            dest.defaultValue = src.defaultValue;
3865        } else if (nodeName === 'script' && dest.text !== src.text) {
3866            dest.text = src.text;
3867        }
3868        dest.removeAttribute(jQuery.expando);
3869    }
3870    jQuery.buildFragment = function (args, context, scripts) {
3871        var fragment, cacheable, cachehit, first = args[0];
3872        context = context || document;
3873        context = !context.nodeType && context[0] || context;
3874        context = context.ownerDocument || context;
3875        if (args.length === 1 && typeof first === 'string' && first.length < 512 && context === document && first.charAt(0) === '<' && !rnocache.test(first) && (jQuery.support.checkClone || !rchecked.test(first)) && (jQuery.support.html5Clone || !rnoshimcache.test(first))) {
3876            cacheable = true;
3877            fragment = jQuery.fragments[first];
3878            cachehit = fragment !== undefined;
3879        }
3880        if (!fragment) {
3881            fragment = context.createDocumentFragment();
3882            jQuery.clean(args, context, fragment, scripts);
3883            if (cacheable) {
3884                jQuery.fragments[first] = cachehit && fragment;
3885            }
3886        }
3887        return {
3888            fragment: fragment,
3889            cacheable: cacheable
3890        };
3891    };
3892    jQuery.fragments = {};
3893    jQuery.each({
3894        appendTo: 'append',
3895        prependTo: 'prepend',
3896        insertBefore: 'before',
3897        insertAfter: 'after',
3898        replaceAll: 'replaceWith'
3899    }, function (name, original) {
3900        jQuery.fn[name] = function (selector) {
3901            var elems, i = 0, ret = [], insert = jQuery(selector), l = insert.length, parent = this.length === 1 && this[0].parentNode;
3902            if ((parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1) {
3903                insert[original](this[0]);
3904                return this;
3905            } else {
3906                for (; i < l; i++) {
3907                    elems = (i > 0 ? this.clone(true) : this).get();
3908                    jQuery(insert[i])[original](elems);
3909                    ret = ret.concat(elems);
3910                }
3911                return this.pushStack(ret, name, insert.selector);
3912            }
3913        };
3914    });
3915    function getAll(elem) {
3916        if (typeof elem.getElementsByTagName !== 'undefined') {
3917            return elem.getElementsByTagName('*');
3918        } else if (typeof elem.querySelectorAll !== 'undefined') {
3919            return elem.querySelectorAll('*');
3920        } else {
3921            return [];
3922        }
3923    }
3924    function fixDefaultChecked(elem) {
3925        if (rcheckableType.test(elem.type)) {
3926            elem.defaultChecked = elem.checked;
3927        }
3928    }
3929    jQuery.extend({
3930        clone: function (elem, dataAndEvents, deepDataAndEvents) {
3931            var srcElements, destElements, i, clone;
3932            if (jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test('<' + elem.nodeName + '>')) {
3933                clone = elem.cloneNode(true);
3934            } else {
3935                fragmentDiv.innerHTML = elem.outerHTML;
3936                fragmentDiv.removeChild(clone = fragmentDiv.firstChild);
3937            }
3938            if ((!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {
3939                cloneFixAttributes(elem, clone);
3940                srcElements = getAll(elem);
3941                destElements = getAll(clone);
3942                for (i = 0; srcElements[i]; ++i) {
3943                    if (destElements[i]) {
3944                        cloneFixAttributes(srcElements[i], destElements[i]);
3945                    }
3946                }
3947            }
3948            if (dataAndEvents) {
3949                cloneCopyEvent(elem, clone);
3950                if (deepDataAndEvents) {
3951                    srcElements = getAll(elem);
3952                    destElements = getAll(clone);
3953                    for (i = 0; srcElements[i]; ++i) {
3954                        cloneCopyEvent(srcElements[i], destElements[i]);
3955                    }
3956                }
3957            }
3958            srcElements = destElements = null;
3959            return clone;
3960        },
3961        clean: function (elems, context, fragment, scripts) {
3962            var i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags, safe = context === document && safeFragment, ret = [];
3963            if (!context || typeof context.createDocumentFragment === 'undefined') {
3964                context = document;
3965            }
3966            for (i = 0; (elem = elems[i]) != null; i++) {
3967                if (typeof elem === 'number') {
3968                    elem += '';
3969                }
3970                if (!elem) {
3971                    continue;
3972                }
3973                if (typeof elem === 'string') {
3974                    if (!rhtml.test(elem)) {
3975                        elem = context.createTextNode(elem);
3976                    } else {
3977                        safe = safe || createSafeFragment(context);
3978                        div = context.createElement('div');
3979                        safe.appendChild(div);
3980                        elem = elem.replace(rxhtmlTag, '<$1></$2>');
3981                        tag = (rtagName.exec(elem) || [
3982                            '',
3983                            ''
3984                        ])[1].toLowerCase();
3985                        wrap = wrapMap[tag] || wrapMap._default;
3986                        depth = wrap[0];
3987                        div.innerHTML = wrap[1] + elem + wrap[2];
3988                        while (depth--) {
3989                            div = div.lastChild;
3990                        }
3991                        if (!jQuery.support.tbody) {
3992                            hasBody = rtbody.test(elem);
3993                            tbody = tag === 'table' && !hasBody ? div.firstChild && div.firstChild.childNodes : wrap[1] === '<table>' && !hasBody ? div.childNodes : [];
3994                            for (j = tbody.length - 1; j >= 0; --j) {
3995                                if (jQuery.nodeName(tbody[j], 'tbody') && !tbody[j].childNodes.length) {
3996                                    tbody[j].parentNode.removeChild(tbody[j]);
3997                                }
3998                            }
3999                        }
4000                        if (!jQuery.support.leadingWhitespace && rleadingWhitespace.test(elem)) {
4001                            div.insertBefore(context.createTextNode(rleadingWhitespace.exec(elem)[0]), div.firstChild);
4002                        }
4003                        elem = div.childNodes;
4004                        div.parentNode.removeChild(div);
4005                    }
4006                }
4007                if (elem.nodeType) {
4008                    ret.push(elem);
4009                } else {
4010                    jQuery.merge(ret, elem);
4011                }
4012            }
4013            if (div) {
4014                elem = div = safe = null;
4015            }
4016            if (!jQuery.support.appendChecked) {
4017                for (i = 0; (elem = ret[i]) != null; i++) {
4018                    if (jQuery.nodeName(elem, 'input')) {
4019                        fixDefaultChecked(elem);
4020                    } else if (typeof elem.getElementsByTagName !== 'undefined') {
4021                        jQuery.grep(elem.getElementsByTagName('input'), fixDefaultChecked);
4022                    }
4023                }
4024            }
4025            if (fragment) {
4026                handleScript = function (elem) {
4027                    if (!elem.type || rscriptType.test(elem.type)) {
4028                        return scripts ? scripts.push(elem.parentNode ? elem.parentNode.removeChild(elem) : elem) : fragment.appendChild(elem);
4029                    }
4030                };
4031                for (i = 0; (elem = ret[i]) != null; i++) {
4032                    if (!(jQuery.nodeName(elem, 'script') && handleScript(elem))) {
4033                        fragment.appendChild(elem);
4034                        if (typeof elem.getElementsByTagName !== 'undefined') {
4035                            jsTags = jQuery.grep(jQuery.merge([], elem.getElementsByTagName('script')), handleScript);
4036                            ret.splice.apply(ret, [
4037                                i + 1,
4038                                0
4039                            ].concat(jsTags));
4040                            i += jsTags.length;
4041                        }
4042                    }
4043                }
4044            }
4045            return ret;
4046        },
4047        cleanData: function (elems, acceptData) {
4048            var data, id, elem, type, i = 0, internalKey = jQuery.expando, cache = jQuery.cache, deleteExpando = jQuery.support.deleteExpando, special = jQuery.event.special;
4049            for (; (elem = elems[i]) != null; i++) {
4050                if (acceptData || jQuery.acceptData(elem)) {
4051                    id = elem[internalKey];
4052                    data = id && cache[id];
4053                    if (data) {
4054                        if (data.events) {
4055                            for (type in data.events) {
4056                                if (special[type]) {
4057                                    jQuery.event.remove(elem, type);
4058                                } else {
4059                                    jQuery.removeEvent(elem, type, data.handle);
4060                                }
4061                            }
4062                        }
4063                        if (cache[id]) {
4064                            delete cache[id];
4065                            if (deleteExpando) {
4066                                delete elem[internalKey];
4067                            } else if (elem.removeAttribute) {
4068                                elem.removeAttribute(internalKey);
4069                            } else {
4070                                elem[internalKey] = null;
4071                            }
4072                            jQuery.deletedIds.push(id);
4073                        }
4074                    }
4075                }
4076            }
4077        }
4078    });
4079    (function () {
4080        var matched, browser;
4081        jQuery.uaMatch = function (ua) {
4082            ua = ua.toLowerCase();
4083            var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || /(webkit)[ \/]([\w.]+)/.exec(ua) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || /(msie) ([\w.]+)/.exec(ua) || ua.indexOf('compatible') < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || [];
4084            return {
4085                browser: match[1] || '',
4086                version: match[2] || '0'
4087            };
4088        };
4089        matched = jQuery.uaMatch(navigator.userAgent);
4090        browser = {};
4091        if (matched.browser) {
4092            browser[matched.browser] = true;
4093            browser.version = matched.version;
4094        }
4095        if (browser.chrome) {
4096            browser.webkit = true;
4097        } else if (browser.webkit) {
4098            browser.safari = true;
4099        }
4100        jQuery.browser = browser;
4101        jQuery.sub = function () {
4102            function jQuerySub(selector, context) {
4103                return new jQuerySub.fn.init(selector, context);
4104            }
4105            jQuery.extend(true, jQuerySub, this);
4106            jQuerySub.superclass = this;
4107            jQuerySub.fn = jQuerySub.prototype = this();
4108            jQuerySub.fn.constructor = jQuerySub;
4109            jQuerySub.sub = this.sub;
4110            jQuerySub.fn.init = function init(selector, context) {
4111                if (context && context instanceof jQuery && !(context instanceof jQuerySub)) {
4112                    context = jQuerySub(context);
4113                }
4114                return jQuery.fn.init.call(this, selector, context, rootjQuerySub);
4115            };
4116            jQuerySub.fn.init.prototype = jQuerySub.fn;
4117            var rootjQuerySub = jQuerySub(document);
4118            return jQuerySub;
4119        };
4120    }());
4121    var curCSS, iframe, iframeDoc, ralpha = /alpha\([^)]*\)/i, ropacity = /opacity=([^)]*)/, rposition = /^(top|right|bottom|left)$/, rdisplayswap = /^(none|table(?!-c[ea]).+)/, rmargin = /^margin/, rnumsplit = new RegExp('^(' + core_pnum + ')(.*)$', 'i'), rnumnonpx = new RegExp('^(' + core_pnum + ')(?!px)[a-z%]+$', 'i'), rrelNum = new RegExp('^([-+])=(' + core_pnum + ')', 'i'), elemdisplay = { BODY: 'block' }, cssShow = {
4122            position: 'absolute',
4123            visibility: 'hidden',
4124            display: 'block'
4125        }, cssNormalTransform = {
4126            letterSpacing: 0,
4127            fontWeight: 400
4128        }, cssExpand = [
4129            'Top',
4130            'Right',
4131            'Bottom',
4132            'Left'
4133        ], cssPrefixes = [
4134            'Webkit',
4135            'O',
4136            'Moz',
4137            'ms'
4138        ], eventsToggle = jQuery.fn.toggle;
4139    function vendorPropName(style, name) {
4140        if (name in style) {
4141            return name;
4142        }
4143        var capName = name.charAt(0).toUpperCase() + name.slice(1), origName = name, i = cssPrefixes.length;
4144        while (i--) {
4145            name = cssPrefixes[i] + capName;
4146            if (name in style) {
4147                return name;
4148            }
4149        }
4150        return origName;
4151    }
4152    function isHidden(elem, el) {
4153        elem = el || elem;
4154        return jQuery.css(elem, 'display') === 'none' || !jQuery.contains(elem.ownerDocument, elem);
4155    }
4156    function showHide(elements, show) {
4157        var elem, display, values = [], index = 0, length = elements.length;
4158        for (; index < length; index++) {
4159            elem = elements[index];
4160            if (!elem.style) {
4161                continue;
4162            }
4163            values[index] = jQuery._data(elem, 'olddisplay');
4164            if (show) {
4165                if (!values[index] && elem.style.display === 'none') {
4166                    elem.style.display = '';
4167                }
4168                if (elem.style.display === '' && isHidden(elem)) {
4169                    values[index] = jQuery._data(elem, 'olddisplay', css_defaultDisplay(elem.nodeName));
4170                }
4171            } else {
4172                display = curCSS(elem, 'display');
4173                if (!values[index] && display !== 'none') {
4174                    jQuery._data(elem, 'olddisplay', display);
4175                }
4176            }
4177        }
4178        for (index = 0; index < length; index++) {
4179            elem = elements[index];
4180            if (!elem.style) {
4181                continue;
4182            }
4183            if (!show || elem.style.display === 'none' || elem.style.display === '') {
4184                elem.style.display = show ? values[index] || '' : 'none';
4185            }
4186        }
4187        return elements;
4188    }
4189    jQuery.fn.extend({
4190        css: function (name, value) {
4191            return jQuery.access(this, function (elem, name, value) {
4192                return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);
4193            }, name, value, arguments.length > 1);
4194        },
4195        show: function () {
4196            return showHide(this, true);
4197        },
4198        hide: function () {
4199            return showHide(this);
4200        },
4201        toggle: function (state, fn2) {
4202            var bool = typeof state === 'boolean';
4203            if (jQuery.isFunction(state) && jQuery.isFunction(fn2)) {
4204                return eventsToggle.apply(this, arguments);
4205            }
4206            return this.each(function () {
4207                if (bool ? state : isHidden(this)) {
4208                    jQuery(this).show();
4209                } else {
4210                    jQuery(this).hide();
4211                }
4212            });
4213        }
4214    });
4215    jQuery.extend({
4216        cssHooks: {
4217            opacity: {
4218                get: function (elem, computed) {
4219                    if (computed) {
4220                        var ret = curCSS(elem, 'opacity');
4221                        return ret === '' ? '1' : ret;
4222                    }
4223                }
4224            }
4225        },
4226        cssNumber: {
4227            'fillOpacity': true,
4228            'fontWeight': true,
4229            'lineHeight': true,
4230            'opacity': true,
4231            'orphans': true,
4232            'widows': true,
4233            'zIndex': true,
4234            'zoom': true
4235        },
4236        cssProps: { 'float': jQuery.support.cssFloat ? 'cssFloat' : 'styleFloat' },
4237        style: function (elem, name, value, extra) {
4238            if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {
4239                return;
4240            }
4241            var ret, type, hooks, origName = jQuery.camelCase(name), style = elem.style;
4242            name = jQuery.cssProps[origName] || (jQuery.cssProps[origName] = vendorPropName(style, origName));
4243            hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
4244            if (value !== undefined) {
4245                type = typeof value;
4246                if (type === 'string' && (ret = rrelNum.exec(value))) {
4247                    value = (ret[1] + 1) * ret[2] + parseFloat(jQuery.css(elem, name));
4248                    type = 'number';
4249                }
4250                if (value == null || type === 'number' && isNaN(value)) {
4251                    return;
4252                }
4253                if (type === 'number' && !jQuery.cssNumber[origName]) {
4254                    value += 'px';
4255                }
4256                if (!hooks || !('set' in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {
4257                    try {
4258                        style[name] = value;
4259                    } catch (e) {
4260                    }
4261                }
4262            } else {
4263                if (hooks && 'get' in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {
4264                    return ret;
4265                }
4266                return style[name];
4267            }
4268        },
4269        css: function (elem, name, numeric, extra) {
4270            var val, num, hooks, origName = jQuery.camelCase(name);
4271            name = jQuery.cssProps[origName] || (jQuery.cssProps[origName] = vendorPropName(elem.style, origName));
4272            hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName];
4273            if (hooks && 'get' in hooks) {
4274                val = hooks.get(elem, true, extra);
4275            }
4276            if (val === undefined) {
4277                val = curCSS(elem, name);
4278            }
4279            if (val === 'normal' && name in cssNormalTransform) {
4280                val = cssNormalTransform[name];
4281            }
4282            if (numeric || extra !== undefined) {
4283                num = parseFloat(val);
4284                return numeric || jQuery.isNumeric(num) ? num || 0 : val;
4285            }
4286            return val;
4287        },
4288        swap: function (elem, options, callback) {
4289            var ret, name, old = {};
4290            for (name in options) {
4291                old[name] = elem.style[name];
4292                elem.style[name] = options[name];
4293            }
4294            ret = callback.call(elem);
4295            for (name in options) {
4296                elem.style[name] = old[name];
4297            }
4298            return ret;
4299        }
4300    });
4301    if (window.getComputedStyle) {
4302        curCSS = function (elem, name) {
4303            var ret, width, minWidth, maxWidth, computed = window.getComputedStyle(elem, null), style = elem.style;
4304            if (computed) {
4305                ret = computed.getPropertyValue(name) || computed[name];
4306                if (ret === '' && !jQuery.contains(elem.ownerDocument, elem)) {
4307                    ret = jQuery.style(elem, name);
4308                }
4309                if (rnumnonpx.test(ret) && rmargin.test(name)) {
4310                    width = style.width;
4311                    minWidth = style.minWidth;
4312                    maxWidth = style.maxWidth;
4313                    style.minWidth = style.maxWidth = style.width = ret;
4314                    ret = computed.width;
4315                    style.width = width;
4316                    style.minWidth = minWidth;
4317                    style.maxWidth = maxWidth;
4318                }
4319            }
4320            return ret;
4321        };
4322    } else if (document.documentElement.currentStyle) {
4323        curCSS = function (elem, name) {
4324            var left, rsLeft, ret = elem.currentStyle && elem.currentStyle[name], style = elem.style;
4325            if (ret == null && style && style[name]) {
4326                ret = style[name];
4327            }
4328            if (rnumnonpx.test(ret) && !rposition.test(name)) {
4329                left = style.left;
4330                rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
4331                if (rsLeft) {
4332                    elem.runtimeStyle.left = elem.currentStyle.left;
4333                }
4334                style.left = name === 'fontSize' ? '1em' : ret;
4335                ret = style.pixelLeft + 'px';
4336                style.left = left;
4337                if (rsLeft) {
4338                    elem.runtimeStyle.left = rsLeft;
4339                }
4340            }
4341            return ret === '' ? 'auto' : ret;
4342        };
4343    }
4344    function setPositiveNumber(elem, value, subtract) {
4345        var matches = rnumsplit.exec(value);
4346        return matches ? Math.max(0, matches[1] - (subtract || 0)) + (matches[2] || 'px') : value;
4347    }
4348    function augmentWidthOrHeight(elem, name, extra, isBorderBox) {
4349        var i = extra === (isBorderBox ? 'border' : 'content') ? 4 : name === 'width' ? 1 : 0, val = 0;
4350        for (; i < 4; i += 2) {
4351            if (extra === 'margin') {
4352                val += jQuery.css(elem, extra + cssExpand[i], true);
4353            }
4354            if (isBorderBox) {
4355                if (extra === 'content') {
4356                    val -= parseFloat(curCSS(elem, 'padding' + cssExpand[i])) || 0;
4357                }
4358                if (extra !== 'margin') {
4359                    val -= parseFloat(curCSS(elem, 'border' + cssExpand[i] + 'Width')) || 0;
4360                }
4361            } else {
4362                val += parseFloat(curCSS(elem, 'padding' + cssExpand[i])) || 0;
4363                if (extra !== 'padding') {
4364                    val += parseFloat(curCSS(elem, 'border' + cssExpand[i] + 'Width')) || 0;
4365                }
4366            }
4367        }
4368        return val;
4369    }
4370    function getWidthOrHeight(elem, name, extra) {
4371        var val = name === 'width' ? elem.offsetWidth : elem.offsetHeight, valueIsBorderBox = true, isBorderBox = jQuery.support.boxSizing && jQuery.css(elem, 'boxSizing') === 'border-box';
4372        if (val <= 0 || val == null) {
4373            val = curCSS(elem, name);
4374            if (val < 0 || val == null) {
4375                val = elem.style[name];
4376            }
4377            if (rnumnonpx.test(val)) {
4378                return val;
4379            }
4380            valueIsBorderBox = isBorderBox && (jQuery.support.boxSizingReliable || val === elem.style[name]);
4381            val = parseFloat(val) || 0;
4382        }
4383        return val + augmentWidthOrHeight(elem, name, extra || (isBorderBox ? 'border' : 'content'), valueIsBorderBox) + 'px';
4384    }
4385    function css_defaultDisplay(nodeName) {
4386        if (elemdisplay[nodeName]) {
4387            return elemdisplay[nodeName];
4388        }
4389        var elem = jQuery('<' + nodeName + '>').appendTo(document.body), display = elem.css('display');
4390        elem.remove();
4391        if (display === 'none' || display === '') {
4392            iframe = document.body.appendChild(iframe || jQuery.extend(document.createElement('iframe'), {
4393                frameBorder: 0,
4394                width: 0,
4395                height: 0
4396            }));
4397            if (!iframeDoc || !iframe.createElement) {
4398                iframeDoc = (iframe.contentWindow || iframe.contentDocument).document;
4399                iframeDoc.write('<!doctype html><html><body>');
4400                iframeDoc.close();
4401            }
4402            elem = iframeDoc.body.appendChild(iframeDoc.createElement(nodeName));
4403            display = curCSS(elem, 'display');
4404            document.body.removeChild(iframe);
4405        }
4406        elemdisplay[nodeName] = display;
4407        return display;
4408    }
4409    jQuery.each([
4410        'height',
4411        'width'
4412    ], function (i, name) {
4413        jQuery.cssHooks[name] = {
4414            get: function (elem, computed, extra) {
4415                if (computed) {
4416                    if (elem.offsetWidth === 0 && rdisplayswap.test(curCSS(elem, 'display'))) {
4417                        return jQuery.swap(elem, cssShow, function () {
4418                            return getWidthOrHeight(elem, name, extra);
4419                        });
4420                    } else {
4421                        return getWidthOrHeight(elem, name, extra);
4422                    }
4423                }
4424            },
4425            set: function (elem, value, extra) {
4426                return setPositiveNumber(elem, value, extra ? augmentWidthOrHeight(elem, name, extra, jQuery.support.boxSizing && jQuery.css(elem, 'boxSizing') === 'border-box') : 0);
4427            }
4428        };
4429    });
4430    if (!jQuery.support.opacity) {
4431        jQuery.cssHooks.opacity = {
4432            get: function (elem, computed) {
4433                return ropacity.test((computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || '') ? 0.01 * parseFloat(RegExp.$1) + '' : computed ? '1' : '';
4434            },
4435            set: function (elem, value) {
4436                var style = elem.style, currentStyle = elem.currentStyle, opacity = jQuery.isNumeric(value) ? 'alpha(opacity=' + value * 100 + ')' : '', filter = currentStyle && currentStyle.filter || style.filter || '';
4437                style.zoom = 1;
4438                if (value >= 1 && jQuery.trim(filter.replace(ralpha, '')) === '' && style.removeAttribute) {
4439                    style.removeAttribute('filter');
4440                    if (currentStyle && !currentStyle.filter) {
4441                        return;
4442                    }
4443                }
4444                style.filter = ralpha.test(filter) ? filter.replace(ralpha, opacity) : filter + ' ' + opacity;
4445            }
4446        };
4447    }
4448    jQuery(function () {
4449        if (!jQuery.support.reliableMarginRight) {
4450            jQuery.cssHooks.marginRight = {
4451                get: function (elem, computed) {
4452                    return jQuery.swap(elem, { 'display': 'inline-block' }, function () {
4453                        if (computed) {
4454                            return curCSS(elem, 'marginRight');
4455                        }
4456                    });
4457                }
4458            };
4459        }
4460        if (!jQuery.support.pixelPosition && jQuery.fn.position) {
4461            jQuery.each([
4462                'top',
4463                'left'
4464            ], function (i, prop) {
4465                jQuery.cssHooks[prop] = {
4466                    get: function (elem, computed) {
4467                        if (computed) {
4468                            var ret = curCSS(elem, prop);
4469                            return rnumnonpx.test(ret) ? jQuery(elem).position()[prop] + 'px' : ret;
4470                        }
4471                    }
4472                };
4473            });
4474        }
4475    });
4476    if (jQuery.expr && jQuery.expr.filters) {
4477        jQuery.expr.filters.hidden = function (elem) {
4478            return elem.offsetWidth === 0 && elem.offsetHeight === 0 || !jQuery.support.reliableHiddenOffsets && (elem.style && elem.style.display || curCSS(elem, 'display')) === 'none';
4479        };
4480        jQuery.expr.filters.visible = function (elem) {
4481            return !jQuery.expr.filters.hidden(elem);
4482        };
4483    }
4484    jQuery.each({
4485        margin: '',
4486        padding: '',
4487        border: 'Width'
4488    }, function (prefix, suffix) {
4489        jQuery.cssHooks[prefix + suffix] = {
4490            expand: function (value) {
4491                var i, parts = typeof value === 'string' ? value.split(' ') : [value], expanded = {};
4492                for (i = 0; i < 4; i++) {
4493                    expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];
4494                }
4495                return expanded;
4496            }
4497        };
4498        if (!rmargin.test(prefix)) {
4499            jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;
4500        }
4501    });
4502    var r20 = /%20/g, rbracket = /\[\]$/, rCRLF = /\r?\n/g, rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, rselectTextarea = /^(?:select|textarea)/i;
4503    jQuery.fn.extend({
4504        serialize: function () {
4505            return jQuery.param(this.serializeArray());
4506        },
4507        serializeArray: function () {
4508            return this.map(function () {
4509                return this.elements ? jQuery.makeArray(this.elements) : this;
4510            }).filter(function () {
4511                return this.name && !this.disabled && (this.checked || rselectTextarea.test(this.nodeName) || rinput.test(this.type));
4512            }).map(function (i, elem) {
4513                var val = jQuery(this).val();
4514                return val == null ? null : jQuery.isArray(val) ? jQuery.map(val, function (val, i) {
4515                    return {
4516                        name: elem.name,
4517                        value: val.replace(rCRLF, '\r\n')
4518                    };
4519                }) : {
4520                    name: elem.name,
4521                    value: val.replace(rCRLF, '\r\n')
4522                };
4523            }).get();
4524        }
4525    });
4526    jQuery.param = function (a, traditional) {
4527        var prefix, s = [], add = function (key, value) {
4528                value = jQuery.isFunction(value) ? value() : value == null ? '' : value;
4529                s[s.length] = encodeURIComponent(key) + '=' + encodeURIComponent(value);
4530            };
4531        if (traditional === undefined) {
4532            traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
4533        }
4534        if (jQuery.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) {
4535            jQuery.each(a, function () {
4536                add(this.name, this.value);
4537            });
4538        } else {
4539            for (prefix in a) {
4540                buildParams(prefix, a[prefix], traditional, add);
4541            }
4542        }
4543        return s.join('&').replace(r20, '+');
4544    };
4545    function buildParams(prefix, obj, traditional, add) {
4546        var name;
4547        if (jQuery.isArray(obj)) {
4548            jQuery.each(obj, function (i, v) {
4549                if (traditional || rbracket.test(prefix)) {
4550                    add(prefix, v);
4551                } else {
4552                    buildParams(prefix + '[' + (typeof v === 'object' ? i : '') + ']', v, traditional, add);
4553                }
4554            });
4555        } else if (!traditional && jQuery.type(obj) === 'object') {
4556            for (name in obj) {
4557                buildParams(prefix + '[' + name + ']', obj[name], traditional, add);
4558            }
4559        } else {
4560            add(prefix, obj);
4561        }
4562    }
4563    var ajaxLocParts, ajaxLocation, rhash = /#.*$/, rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm, rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, rnoContent = /^(?:GET|HEAD)$/, rprotocol = /^\/\//, rquery = /\?/, rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, rts = /([?&])_=[^&]*/, rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, _load = jQuery.fn.load, prefilters = {}, transports = {}, allTypes = ['*/'] + ['*'];
4564    try {
4565        ajaxLocation = location.href;
4566    } catch (e) {
4567        ajaxLocation = document.createElement('a');
4568        ajaxLocation.href = '';
4569        ajaxLocation = ajaxLocation.href;
4570    }
4571    ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || [];
4572    function addToPrefiltersOrTransports(structure) {
4573        return function (dataTypeExpression, func) {
4574            if (typeof dataTypeExpression !== 'string') {
4575                func = dataTypeExpression;
4576                dataTypeExpression = '*';
4577            }
4578            var dataType, list, placeBefore, dataTypes = dataTypeExpression.toLowerCase().split(core_rspace), i = 0, length = dataTypes.length;
4579            if (jQuery.isFunction(func)) {
4580                for (; i < length; i++) {
4581                    dataType = dataTypes[i];
4582                    placeBefore = /^\+/.test(dataType);
4583                    if (placeBefore) {
4584                        dataType = dataType.substr(1) || '*';
4585                    }
4586                    list = structure[dataType] = structure[dataType] || [];
4587                    list[placeBefore ? 'unshift' : 'push'](func);
4588                }
4589            }
4590        };
4591    }
4592    function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR, dataType, inspected) {
4593        dataType = dataType || options.dataTypes[0];
4594        inspected = inspected || {};
4595        inspected[dataType] = true;
4596        var selection, list = structure[dataType], i = 0, length = list ? list.length : 0, executeOnly = structure === prefilters;
4597        for (; i < length && (executeOnly || !selection); i++) {
4598            selection = list[i](options, originalOptions, jqXHR);
4599            if (typeof selection === 'string') {
4600                if (!executeOnly || inspected[selection]) {
4601                    selection = undefined;
4602                } else {
4603                    options.dataTypes.unshift(selection);
4604                    selection = inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR, selection, inspected);
4605                }
4606            }
4607        }
4608        if ((executeOnly || !selection) && !inspected['*']) {
4609            selection = inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR, '*', inspected);
4610        }
4611        return selection;
4612    }
4613    function ajaxExtend(target, src) {
4614        var key, deep, flatOptions = jQuery.ajaxSettings.flatOptions || {};
4615        for (key in src) {
4616            if (src[key] !== undefined) {
4617                (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];
4618            }
4619        }
4620        if (deep) {
4621            jQuery.extend(true, target, deep);
4622        }
4623    }
4624    jQuery.fn.load = function (url, params, callback) {
4625        if (typeof url !== 'string' && _load) {
4626            return _load.apply(this, arguments);
4627        }
4628        if (!this.length) {
4629            return this;
4630        }
4631        var selector, type, response, self = this, off = url.indexOf(' ');
4632        if (off >= 0) {
4633            selector = url.slice(off, url.length);
4634            url = url.slice(0, off);
4635        }
4636        if (jQuery.isFunction(params)) {
4637            callback = params;
4638            params = undefined;
4639        } else if (params && typeof params === 'object') {
4640            type = 'POST';
4641        }
4642        jQuery.ajax({
4643            url: url,
4644            type: type,
4645            dataType: 'html',
4646            data: params,
4647            complete: function (jqXHR, status) {
4648                if (callback) {
4649                    self.each(callback, response || [
4650                        jqXHR.responseText,
4651                        status,
4652                        jqXHR
4653                    ]);
4654                }
4655            }
4656        }).done(function (responseText) {
4657            response = arguments;
4658            self.html(selector ? jQuery('<div>').append(responseText.replace(rscript, '')).find(selector) : responseText);
4659        });
4660        return this;
4661    };
4662    jQuery.each('ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend'.split(' '), function (i, o) {
4663        jQuery.fn[o] = function (f) {
4664            return this.on(o, f);
4665        };
4666    });
4667    jQuery.each([
4668        'get',
4669        'post'
4670    ], function (i, method) {
4671        jQuery[method] = function (url, data, callback, type) {
4672            if (jQuery.isFunction(data)) {
4673                type = type || callback;
4674                callback = data;
4675                data = undefined;
4676            }
4677            return jQuery.ajax({
4678                type: method,
4679                url: url,
4680                data: data,
4681                success: callback,
4682                dataType: type
4683            });
4684        };
4685    });
4686    jQuery.extend({
4687        getScript: function (url, callback) {
4688            return jQuery.get(url, undefined, callback, 'script');
4689        },
4690        getJSON: function (url, data, callback) {
4691            return jQuery.get(url, data, callback, 'json');
4692        },
4693        ajaxSetup: function (target, settings) {
4694            if (settings) {
4695                ajaxExtend(target, jQuery.ajaxSettings);
4696            } else {
4697                settings = target;
4698                target = jQuery.ajaxSettings;
4699            }
4700            ajaxExtend(target, settings);
4701            return target;
4702        },
4703        ajaxSettings: {
4704            url: ajaxLocation,
4705            isLocal: rlocalProtocol.test(ajaxLocParts[1]),
4706            global: true,
4707            type: 'GET',
4708            contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
4709            processData: true,
4710            async: true,
4711            accepts: {
4712                xml: 'application/xml, text/xml',
4713                html: 'text/html',
4714                text: 'text/plain',
4715                json: 'application/json, text/javascript',
4716                '*': allTypes
4717            },
4718            contents: {
4719                xml: /xml/,
4720                html: /html/,
4721                json: /json/
4722            },
4723            responseFields: {
4724                xml: 'responseXML',
4725                text: 'responseText'
4726            },
4727            converters: {
4728                '* text': window.String,
4729                'text html': true,
4730                'text json': jQuery.parseJSON,
4731                'text xml': jQuery.parseXML
4732            },
4733            flatOptions: {
4734                context: true,
4735                url: true
4736            }
4737        },
4738        ajaxPrefilter: addToPrefiltersOrTransports(prefilters),
4739        ajaxTransport: addToPrefiltersOrTransports(transports),
4740        ajax: function (url, options) {
4741            if (typeof url === 'object') {
4742                options = url;
4743                url = undefined;
4744            }
4745            options = options || {};
4746            var ifModifiedKey, responseHeadersString, responseHeaders, transport, timeoutTimer, parts, fireGlobals, i, s = jQuery.ajaxSetup({}, options), callbackContext = s.context || s, globalEventContext = callbackContext !== s && (callbackContext.nodeType || callbackContext instanceof jQuery) ? jQuery(callbackContext) : jQuery.event, deferred = jQuery.Deferred(), completeDeferred = jQuery.Callbacks('once memory'), statusCode = s.statusCode || {}, requestHeaders = {}, requestHeadersNames = {}, state = 0, strAbort = 'canceled', jqXHR = {
4747                    readyState: 0,
4748                    setRequestHeader: function (name, value) {
4749                        if (!state) {
4750                            var lname = name.toLowerCase();
4751                            name = requestHeadersNames[lname] = requestHeadersNames[lname] || name;
4752                            requestHeaders[name] = value;
4753                        }
4754                        return this;
4755                    },
4756                    getAllResponseHeaders: function () {
4757                        return state === 2 ? responseHeadersString : null;
4758                    },
4759                    getResponseHeader: function (key) {
4760                        var match;
4761                        if (state === 2) {
4762                            if (!responseHeaders) {
4763                                responseHeaders = {};
4764                                while (match = rheaders.exec(responseHeadersString)) {
4765                                    responseHeaders[match[1].toLowerCase()] = match[2];
4766                                }
4767                            }
4768                            match = responseHeaders[key.toLowerCase()];
4769                        }
4770                        return match === undefined ? null : match;
4771                    },
4772                    overrideMimeType: function (type) {
4773                        if (!state) {
4774                            s.mimeType = type;
4775                        }
4776                        return this;
4777                    },
4778                    abort: function (statusText) {
4779                        statusText = statusText || strAbort;
4780                        if (transport) {
4781                            transport.abort(statusText);
4782                        }
4783                        done(0, statusText);
4784                        return this;
4785                    }
4786                };
4787            function done(status, nativeStatusText, responses, headers) {
4788                var isSuccess, success, error, response, modified, statusText = nativeStatusText;
4789                if (state === 2) {
4790                    return;
4791                }
4792                state = 2;
4793                if (timeoutTimer) {
4794                    clearTimeout(timeoutTimer);
4795                }
4796                transport = undefined;
4797                responseHeadersString = headers || '';
4798                jqXHR.readyState = status > 0 ? 4 : 0;
4799                if (responses) {
4800                    response = ajaxHandleResponses(s, jqXHR, responses);
4801                }
4802                if (status >= 200 && status < 300 || status === 304) {
4803                    if (s.ifModified) {
4804                        modified = jqXHR.getResponseHeader('Last-Modified');
4805                        if (modified) {
4806                            jQuery.lastModified[ifModifiedKey] = modified;
4807                        }
4808                        modified = jqXHR.getResponseHeader('Etag');
4809                        if (modified) {
4810                            jQuery.etag[ifModifiedKey] = modified;
4811                        }
4812                    }
4813                    if (status === 304) {
4814                        statusText = 'notmodified';
4815                        isSuccess = true;
4816                    } else {
4817                        isSuccess = ajaxConvert(s, response);
4818                        statusText = isSuccess.state;
4819                        success = isSuccess.data;
4820                        error = isSuccess.error;
4821                        isSuccess = !error;
4822                    }
4823                } else {
4824                    error = statusText;
4825                    if (!statusText || status) {
4826                        statusText = 'error';
4827                        if (status < 0) {
4828                            status = 0;
4829                        }
4830                    }
4831                }
4832                jqXHR.status = status;
4833                jqXHR.statusText = (nativeStatusText || statusText) + '';
4834                if (isSuccess) {
4835                    deferred.resolveWith(callbackContext, [
4836                        success,
4837                        statusText,
4838                        jqXHR
4839                    ]);
4840                } else {
4841                    deferred.rejectWith(callbackContext, [
4842                        jqXHR,
4843                        statusText,
4844                        error
4845                    ]);
4846                }
4847                jqXHR.statusCode(statusCode);
4848                statusCode = undefined;
4849                if (fireGlobals) {
4850                    globalEventContext.trigger('ajax' + (isSuccess ? 'Success' : 'Error'), [
4851                        jqXHR,
4852                        s,
4853                        isSuccess ? success : error
4854                    ]);
4855                }
4856                completeDeferred.fireWith(callbackContext, [
4857                    jqXHR,
4858                    statusText
4859                ]);
4860                if (fireGlobals) {
4861                    globalEventContext.trigger('ajaxComplete', [
4862                        jqXHR,
4863                        s
4864                    ]);
4865                    if (!--jQuery.active) {
4866                        jQuery.event.trigger('ajaxStop');
4867                    }
4868                }
4869            }
4870            deferred.promise(jqXHR);
4871            jqXHR.success = jqXHR.done;
4872            jqXHR.error = jqXHR.fail;
4873            jqXHR.complete = completeDeferred.add;
4874            jqXHR.statusCode = function (map) {
4875                if (map) {
4876                    var tmp;
4877                    if (state < 2) {
4878                        for (tmp in map) {
4879                            statusCode[tmp] = [
4880                                statusCode[tmp],
4881                                map[tmp]
4882                            ];
4883                        }
4884                    } else {
4885                        tmp = map[jqXHR.status];
4886                        jqXHR.always(tmp);
4887                    }
4888                }
4889                return this;
4890            };
4891            s.url = ((url || s.url) + '').replace(rhash, '').replace(rprotocol, ajaxLocParts[1] + '//');
4892            s.dataTypes = jQuery.trim(s.dataType || '*').toLowerCase().split(core_rspace);
4893            if (s.crossDomain == null) {
4894                parts = rurl.exec(s.url.toLowerCase());
4895                s.crossDomain = !!(parts && (parts[1] !== ajaxLocParts[1] || parts[2] !== ajaxLocParts[2] || (parts[3] || (parts[1] === 'http:' ? 80 : 443)) != (ajaxLocParts[3] || (ajaxLocParts[1] === 'http:' ? 80 : 443))));
4896            }
4897            if (s.data && s.processData && typeof s.data !== 'string') {
4898                s.data = jQuery.param(s.data, s.traditional);
4899            }
4900            inspectPrefiltersOrTransports(prefilters, s, options, jqXHR);
4901            if (state === 2) {
4902                return jqXHR;
4903            }
4904            fireGlobals = s.global;
4905            s.type = s.type.toUpperCase();
4906            s.hasContent = !rnoContent.test(s.type);
4907            if (fireGlobals && jQuery.active++ === 0) {
4908                jQuery.event.trigger('ajaxStart');
4909            }
4910            if (!s.hasContent) {
4911                if (s.data) {
4912                    s.url += (rquery.test(s.url) ? '&' : '?') + s.data;
4913                    delete s.data;
4914                }
4915                ifModifiedKey = s.url;
4916                if (s.cache === false) {
4917                    var ts = jQuery.now(), ret = s.url.replace(rts, '$1_=' + ts);
4918                    s.url = ret + (ret === s.url ? (rquery.test(s.url) ? '&' : '?') + '_=' + ts : '');
4919                }
4920            }
4921            if (s.data && s.hasContent && s.contentType !== false || options.contentType) {
4922                jqXHR.setRequestHeader('Content-Type', s.contentType);
4923            }
4924            if (s.ifModified) {
4925                ifModifiedKey = ifModifiedKey || s.url;
4926                if (jQuery.lastModified[ifModifiedKey]) {
4927                    jqXHR.setRequestHeader('If-Modified-Since', jQuery.lastModified[ifModifiedKey]);
4928                }
4929                if (jQuery.etag[ifModifiedKey]) {
4930                    jqXHR.setRequestHeader('If-None-Match', jQuery.etag[ifModifiedKey]);
4931                }
4932            }
4933            jqXHR.setRequestHeader('Accept', s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== '*' ? ', ' + allTypes + '; q=0.01' : '') : s.accepts['*']);
4934            for (i in s.headers) {
4935                jqXHR.setRequestHeader(i, s.headers[i]);
4936            }
4937            if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || state === 2)) {
4938                return jqXHR.abort();
4939            }
4940            strAbort = 'abort';
4941            for (i in {
4942                    success: 1,
4943                    error: 1,
4944                    complete: 1
4945                }) {
4946                jqXHR[i](s[i]);
4947            }
4948            transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR);
4949            if (!transport) {
4950                done(-1, 'No Transport');
4951            } else {
4952                jqXHR.readyState = 1;
4953                if (fireGlobals) {
4954                    globalEventContext.trigger('ajaxSend', [
4955                        jqXHR,
4956                        s
4957                    ]);
4958                }
4959                if (s.async && s.timeout > 0) {
4960                    timeoutTimer = setTimeout(function () {
4961                        jqXHR.abort('timeout');
4962                    }, s.timeout);
4963                }
4964                try {
4965                    state = 1;
4966                    transport.send(requestHeaders, done);
4967                } catch (e) {
4968                    if (state < 2) {
4969                        done(-1, e);
4970                    } else {
4971                        throw e;
4972                    }
4973                }
4974            }
4975            return jqXHR;
4976        },
4977        active: 0,
4978        lastModified: {},
4979        etag: {}
4980    });
4981    function ajaxHandleResponses(s, jqXHR, responses) {
4982        var ct, type, finalDataType, firstDataType, contents = s.contents, dataTypes = s.dataTypes, responseFields = s.responseFields;
4983        for (type in responseFields) {
4984            if (type in responses) {
4985                jqXHR[responseFields[type]] = responses[type];
4986            }
4987        }
4988        while (dataTypes[0] === '*') {
4989            dataTypes.shift();
4990            if (ct === undefined) {
4991                ct = s.mimeType || jqXHR.getResponseHeader('content-type');
4992            }
4993        }
4994        if (ct) {
4995            for (type in contents) {
4996                if (contents[type] && contents[type].test(ct)) {
4997                    dataTypes.unshift(type);
4998                    break;
4999                }
5000            }
5001        }
5002        if (dataTypes[0] in responses) {
5003            finalDataType = dataTypes[0];
5004        } else {
5005            for (type in responses) {
5006                if (!dataTypes[0] || s.converters[type + ' ' + dataTypes[0]]) {
5007                    finalDataType = type;
5008                    break;
5009                }
5010                if (!firstDataType) {
5011                    firstDataType = type;
5012                }
5013            }
5014            finalDataType = finalDataType || firstDataType;
5015        }
5016        if (finalDataType) {
5017            if (finalDataType !== dataTypes[0]) {
5018                dataTypes.unshift(finalDataType);
5019            }
5020            return responses[finalDataType];
5021        }
5022    }
5023    function ajaxConvert(s, response) {
5024        var conv, conv2, current, tmp, dataTypes = s.dataTypes.slice(), prev = dataTypes[0], converters = {}, i = 0;
5025        if (s.dataFilter) {
5026            response = s.dataFilter(response, s.dataType);
5027        }
5028        if (dataTypes[1]) {
5029            for (conv in s.converters) {
5030                converters[conv.toLowerCase()] = s.converters[conv];
5031            }
5032        }
5033        for (; current = dataTypes[++i];) {
5034            if (current !== '*') {
5035                if (prev !== '*' && prev !== current) {
5036                    conv = converters[prev + ' ' + current] || converters['* ' + current];
5037                    if (!conv) {
5038                        for (conv2 in converters) {
5039                            tmp = conv2.split(' ');
5040                            if (tmp[1] === current) {
5041                                conv = converters[prev + ' ' + tmp[0]] || converters['* ' + tmp[0]];
5042                                if (conv) {
5043                                    if (conv === true) {
5044                                        conv = converters[conv2];
5045                                    } else if (converters[conv2] !== true) {
5046                                        current = tmp[0];
5047                                        dataTypes.splice(i--, 0, current);
5048                                    }
5049                                    break;
5050                                }
5051                            }
5052                        }
5053                    }
5054                    if (conv !== true) {
5055                        if (conv && s['throws']) {
5056                            response = conv(response);
5057                        } else {
5058                            try {
5059                                response = conv(response);
5060                            } catch (e) {
5061                                return {
5062                                    state: 'parsererror',
5063                                    error: conv ? e : 'No conversion from ' + prev + ' to ' + current
5064                                };
5065                            }
5066                        }
5067                    }
5068                }
5069                prev = current;
5070            }
5071        }
5072        return {
5073            state: 'success',
5074            data: response
5075        };
5076    }
5077    var oldCallbacks = [], rquestion = /\?/, rjsonp = /(=)\?(?=&|$)|\?\?/, nonce = jQuery.now();
5078    jQuery.ajaxSetup({
5079        jsonp: 'callback',
5080        jsonpCallback: function () {
5081            var callback = oldCallbacks.pop() || jQuery.expando + '_' + nonce++;
5082            this[callback] = true;
5083            return callback;
5084        }
5085    });
5086    jQuery.ajaxPrefilter('json jsonp', function (s, originalSettings, jqXHR) {
5087        var callbackName, overwritten, responseContainer, data = s.data, url = s.url, hasCallback = s.jsonp !== false, replaceInUrl = hasCallback && rjsonp.test(url), replaceInData = hasCallback && !replaceInUrl && typeof data === 'string' && !(s.contentType || '').indexOf('application/x-www-form-urlencoded') && rjsonp.test(data);
5088        if (s.dataTypes[0] === 'jsonp' || replaceInUrl || replaceInData) {
5089            callbackName = s.jsonpCallback = jQuery.isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback;
5090            overwritten = window[callbackName];
5091            if (replaceInUrl) {
5092                s.url = url.replace(rjsonp, '$1' + callbackName);
5093            } else if (replaceInData) {
5094                s.data = data.replace(rjsonp, '$1' + callbackName);
5095            } else if (hasCallback) {
5096                s.url += (rquestion.test(url) ? '&' : '?') + s.jsonp + '=' + callbackName;
5097            }
5098            s.converters['script json'] = function () {
5099                if (!responseContainer) {
5100                    jQuery.error(callbackName + ' was not called');
5101                }
5102                return responseContainer[0];
5103            };
5104            s.dataTypes[0] = 'json';
5105            window[callbackName] = function () {
5106                responseContainer = arguments;
5107            };
5108            jqXHR.always(function () {
5109                window[callbackName] = overwritten;
5110                if (s[callbackName]) {
5111                    s.jsonpCallback = originalSettings.jsonpCallback;
5112                    oldCallbacks.push(callbackName);
5113                }
5114                if (responseContainer && jQuery.isFunction(overwritten)) {
5115                    overwritten(responseContainer[0]);
5116                }
5117                responseContainer = overwritten = undefined;
5118            });
5119            return 'script';
5120        }
5121    });
5122    jQuery.ajaxSetup({
5123        accepts: { script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript' },
5124        contents: { script: /javascript|ecmascript/ },
5125        converters: {
5126            'text script': function (text) {
5127                jQuery.globalEval(text);
5128                return text;
5129            }
5130        }
5131    });
5132    jQuery.ajaxPrefilter('script', function (s) {
5133        if (s.cache === undefined) {
5134            s.cache = false;
5135        }
5136        if (s.crossDomain) {
5137            s.type = 'GET';
5138            s.global = false;
5139        }
5140    });
5141    jQuery.ajaxTransport('script', function (s) {
5142        if (s.crossDomain) {
5143            var script, head = document.head || document.getElementsByTagName('head')[0] || document.documentElement;
5144            return {
5145                send: function (_, callback) {
5146                    script = document.createElement('script');
5147                    script.async = 'async';
5148                    if (s.scriptCharset) {
5149                        script.charset = s.scriptCharset;
5150                    }
5151                    script.src = s.url;
5152                    script.onload = script.onreadystatechange = function (_, isAbort) {
5153                        if (isAbort || !script.readyState || /loaded|complete/.test(script.readyState)) {
5154                            script.onload = script.onreadystatechange = null;
5155                            if (head && script.parentNode) {
5156                                head.removeChild(script);
5157                            }
5158                            script = undefined;
5159                            if (!isAbort) {
5160                                callback(200, 'success');
5161                            }
5162                        }
5163                    };
5164                    head.insertBefore(script, head.firstChild);
5165                },
5166                abort: function () {
5167                    if (script) {
5168                        script.onload(0, 1);
5169                    }
5170                }
5171            };
5172        }
5173    });
5174    var xhrCallbacks, xhrOnUnloadAbort = window.ActiveXObject ? function () {
5175            for (var key in xhrCallbacks) {
5176                xhrCallbacks[key](0, 1);
5177            }
5178        } : false, xhrId = 0;
5179    function createStandardXHR() {
5180        try {
5181            return new window.XMLHttpRequest();
5182        } catch (e) {
5183        }
5184    }
5185    function createActiveXHR() {
5186        try {
5187            return new window.ActiveXObject('Microsoft.XMLHTTP');
5188        } catch (e) {
5189        }
5190    }
5191    jQuery.ajaxSettings.xhr = window.ActiveXObject ? function () {
5192        return !this.isLocal && createStandardXHR() || createActiveXHR();
5193    } : createStandardXHR;
5194    (function (xhr) {
5195        jQuery.extend(jQuery.support, {
5196            ajax: !!xhr,
5197            cors: !!xhr && 'withCredentials' in xhr
5198        });
5199    }(jQuery.ajaxSettings.xhr()));
5200    if (jQuery.support.ajax) {
5201        jQuery.ajaxTransport(function (s) {
5202            if (!s.crossDomain || jQuery.support.cors) {
5203                var callback;
5204                return {
5205                    send: function (headers, complete) {
5206                        var handle, i, xhr = s.xhr();
5207                        if (s.username) {
5208                            xhr.open(s.type, s.url, s.async, s.username, s.password);
5209                        } else {
5210                            xhr.open(s.type, s.url, s.async);
5211                        }
5212                        if (s.xhrFields) {
5213                            for (i in s.xhrFields) {
5214                                xhr[i] = s.xhrFields[i];
5215                            }
5216                        }
5217                        if (s.mimeType && xhr.overrideMimeType) {
5218                            xhr.overrideMimeType(s.mimeType);
5219                        }
5220                        if (!s.crossDomain && !headers['X-Requested-With']) {
5221                            headers['X-Requested-With'] = 'XMLHttpRequest';
5222                        }
5223                        try {
5224                            for (i in headers) {
5225                                xhr.setRequestHeader(i, headers[i]);
5226                            }
5227                        } catch (_) {
5228                        }
5229                        xhr.send(s.hasContent && s.data || null);
5230                        callback = function (_, isAbort) {
5231                            var status, statusText, responseHeaders, responses, xml;
5232                            try {
5233                                if (callback && (isAbort || xhr.readyState === 4)) {
5234                                    callback = undefined;
5235                                    if (handle) {
5236                                        xhr.onreadystatechange = jQuery.noop;
5237                                        if (xhrOnUnloadAbort) {
5238                                            delete xhrCallbacks[handle];
5239                                        }
5240                                    }
5241                                    if (isAbort) {
5242                                        if (xhr.readyState !== 4) {
5243                                            xhr.abort();
5244                                        }
5245                                    } else {
5246                                        status = xhr.status;
5247                                        responseHeaders = xhr.getAllResponseHeaders();
5248                                        responses = {};
5249                                        xml = xhr.responseXML;
5250                                        if (xml && xml.documentElement) {
5251                                            responses.xml = xml;
5252                                        }
5253                                        try {
5254                                            responses.text = xhr.responseText;
5255                                        } catch (e) {
5256                                        }
5257                                        try {
5258                                            statusText = xhr.statusText;
5259                                        } catch (e) {
5260                                            statusText = '';
5261                                        }
5262                                        if (!status && s.isLocal && !s.crossDomain) {
5263                                            status = responses.text ? 200 : 404;
5264                                        } else if (status === 1223) {
5265                                            status = 204;
5266                                        }
5267                                    }
5268                                }
5269                            } catch (firefoxAccessException) {
5270                                if (!isAbort) {
5271                                    complete(-1, firefoxAccessException);
5272                                }
5273                            }
5274                            if (responses) {
5275                                complete(status, statusText, responses, responseHeaders);
5276                            }
5277                        };
5278                        if (!s.async) {
5279                            callback();
5280                        } else if (xhr.readyState === 4) {
5281                            setTimeout(callback, 0);
5282                        } else {
5283                            handle = ++xhrId;
5284                            if (xhrOnUnloadAbort) {
5285                                if (!xhrCallbacks) {
5286                                    xhrCallbacks = {};
5287                                    jQuery(window).unload(xhrOnUnloadAbort);
5288                                }
5289                                xhrCallbacks[handle] = callback;
5290                            }
5291                            xhr.onreadystatechange = callback;
5292                        }
5293                    },
5294                    abort: function () {
5295                        if (callback) {
5296                            callback(0, 1);
5297                        }
5298                    }
5299                };
5300            }
5301        });
5302    }
5303    var fxNow, timerId, rfxtypes = /^(?:toggle|show|hide)$/, rfxnum = new RegExp('^(?:([-+])=|)(' + core_pnum + ')([a-z%]*)$', 'i'), rrun = /queueHooks$/, animationPrefilters = [defaultPrefilter], tweeners = {
5304            '*': [function (prop, value) {
5305                    var end, unit, tween = this.createTween(prop, value), parts = rfxnum.exec(value), target = tween.cur(), start = +target || 0, scale = 1, maxIterations = 20;
5306                    if (parts) {
5307                        end = +parts[2];
5308                        unit = parts[3] || (jQuery.cssNumber[prop] ? '' : 'px');
5309                        if (unit !== 'px' && start) {
5310                            start = jQuery.css(tween.elem, prop, true) || end || 1;
5311                            do {
5312                                scale = scale || '.5';
5313                                start = start / scale;
5314                                jQuery.style(tween.elem, prop, start + unit);
5315                            } while (scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations);
5316                        }
5317                        tween.unit = unit;
5318                        tween.start = start;
5319                        tween.end = parts[1] ? start + (parts[1] + 1) * end : end;
5320                    }
5321                    return tween;
5322                }]
5323        };
5324    function createFxNow() {
5325        setTimeout(function () {
5326            fxNow = undefined;
5327        }, 0);
5328        return fxNow = jQuery.now();
5329    }
5330    function createTweens(animation, props) {
5331        jQuery.each(props, function (prop, value) {
5332            var collection = (tweeners[prop] || []).concat(tweeners['*']), index = 0, length = collection.length;
5333            for (; index < length; index++) {
5334                if (collection[index].call(animation, prop, value)) {
5335                    return;
5336                }
5337            }
5338        });
5339    }
5340    function Animation(elem, properties, options) {
5341        var result, index = 0, tweenerIndex = 0, length = animationPrefilters.length, deferred = jQuery.Deferred().always(function () {
5342                delete tick.elem;
5343            }), tick = function () {
5344                var currentTime = fxNow || createFxNow(), remaining = Math.max(0, animation.startTime + animation.duration - currentTime), temp = remaining / animation.duration || 0, percent = 1 - temp, index = 0, length = animation.tweens.length;
5345                for (; index < length; index++) {
5346                    animation.tweens[index].run(percent);
5347                }
5348                deferred.notifyWith(elem, [
5349                    animation,
5350                    percent,
5351                    remaining
5352                ]);
5353                if (percent < 1 && length) {
5354                    return remaining;
5355                } else {
5356                    deferred.resolveWith(elem, [animation]);
5357                    return false;
5358                }
5359            }, animation = deferred.promise({
5360                elem: elem,
5361                props: jQuery.extend({}, properties),
5362                opts: jQuery.extend(true, { specialEasing: {} }, options),
5363                originalProperties: properties,
5364                originalOptions: options,
5365                startTime: fxNow || createFxNow(),
5366                duration: options.duration,
5367                tweens: [],
5368                createTween: function (prop, end, easing) {
5369                    var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing);
5370                    animation.tweens.push(tween);
5371                    return tween;
5372                },
5373                stop: function (gotoEnd) {
5374                    var index = 0, length = gotoEnd ? animation.tweens.length : 0;
5375                    for (; index < length; index++) {
5376                        animation.tweens[index].run(1);
5377                    }
5378                    if (gotoEnd) {
5379                        deferred.resolveWith(elem, [
5380                            animation,
5381                            gotoEnd
5382                        ]);
5383                    } else {
5384                        deferred.rejectWith(elem, [
5385                            animation,
5386                            gotoEnd
5387                        ]);
5388                    }
5389                    return this;
5390                }
5391            }), props = animation.props;
5392        propFilter(props, animation.opts.specialEasing);
5393        for (; index < length; index++) {
5394            result = animationPrefilters[index].call(animation, elem, props, animation.opts);
5395            if (result) {
5396                return result;
5397            }
5398        }
5399        createTweens(animation, props);
5400        if (jQuery.isFunction(animation.opts.start)) {
5401            animation.opts.start.call(elem, animation);
5402        }
5403        jQuery.fx.timer(jQuery.extend(tick, {
5404            anim: animation,
5405            queue: animation.opts.queue,
5406            elem: elem
5407        }));
5408        return animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);
5409    }
5410    function propFilter(props, specialEasing) {
5411        var index, name, easing, value, hooks;
5412        for (index in props) {
5413            name = jQuery.camelCase(index);
5414            easing = specialEasing[name];
5415            value = props[index];
5416            if (jQuery.isArray(value)) {
5417                easing = value[1];
5418                value = props[index] = value[0];
5419            }
5420            if (index !== name) {
5421                props[name] = value;
5422                delete props[index];
5423            }
5424            hooks = jQuery.cssHooks[name];
5425            if (hooks && 'expand' in hooks) {
5426                value = hooks.expand(value);
5427                delete props[name];
5428                for (index in value) {
5429                    if (!(index in props)) {
5430                        props[index] = value[index];
5431                        specialEasing[index] = easing;
5432                    }
5433                }
5434            } else {
5435                specialEasing[name] = easing;
5436            }
5437        }
5438    }
5439    jQuery.Animation = jQuery.extend(Animation, {
5440        tweener: function (props, callback) {
5441            if (jQuery.isFunction(props)) {
5442                callback = props;
5443                props = ['*'];
5444            } else {
5445                props = props.split(' ');
5446            }
5447            var prop, index = 0, length = props.length;
5448            for (; index < length; index++) {
5449                prop = props[index];
5450                tweeners[prop] = tweeners[prop] || [];
5451                tweeners[prop].unshift(callback);
5452            }
5453        },
5454        prefilter: function (callback, prepend) {
5455            if (prepend) {
5456                animationPrefilters.unshift(callback);
5457            } else {
5458                animationPrefilters.push(callback);
5459            }
5460        }
5461    });
5462    function defaultPrefilter(elem, props, opts) {
5463        var index, prop, value, length, dataShow, toggle, tween, hooks, oldfire, anim = this, style = elem.style, orig = {}, handled = [], hidden = elem.nodeType && isHidden(elem);
5464        if (!opts.queue) {
5465            hooks = jQuery._queueHooks(elem, 'fx');
5466            if (hooks.unqueued == null) {
5467                hooks.unqueued = 0;
5468                oldfire = hooks.empty.fire;
5469                hooks.empty.fire = function () {
5470                    if (!hooks.unqueued) {
5471                        oldfire();
5472                    }
5473                };
5474            }
5475            hooks.unqueued++;
5476            anim.always(function () {
5477                anim.always(function () {
5478                    hooks.unqueued--;
5479                    if (!jQuery.queue(elem, 'fx').length) {
5480                        hooks.empty.fire();
5481                    }
5482                });
5483            });
5484        }
5485        if (elem.nodeType === 1 && ('height' in props || 'width' in props)) {
5486            opts.overflow = [
5487                style.overflow,
5488                style.overflowX,
5489                style.overflowY
5490            ];
5491            if (jQuery.css(elem, 'display') === 'inline' && jQuery.css(elem, 'float') === 'none') {
5492                if (!jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay(elem.nodeName) === 'inline') {
5493                    style.display = 'inline-block';
5494                } else {
5495                    style.zoom = 1;
5496                }
5497            }
5498        }
5499        if (opts.overflow) {
5500            style.overflow = 'hidden';
5501            if (!jQuery.support.shrinkWrapBlocks) {
5502                anim.done(function () {
5503                    style.overflow = opts.overflow[0];
5504                    style.overflowX = opts.overflow[1];
5505                    style.overflowY = opts.overflow[2];
5506                });
5507            }
5508        }
5509        for (index in props) {
5510            value = props[index];
5511            if (rfxtypes.exec(value)) {
5512                delete props[index];
5513                toggle = toggle || value === 'toggle';
5514                if (value === (hidden ? 'hide' : 'show')) {
5515                    continue;
5516                }
5517                handled.push(index);
5518            }
5519        }
5520        length = handled.length;
5521        if (length) {
5522            dataShow = jQuery._data(elem, 'fxshow') || jQuery._data(elem, 'fxshow', {});
5523            if ('hidden' in dataShow) {
5524                hidden = dataShow.hidden;
5525            }
5526            if (toggle) {
5527                dataShow.hidden = !hidden;
5528            }
5529            if (hidden) {
5530                jQuery(elem).show();
5531            } else {
5532                anim.done(function () {
5533                    jQuery(elem).hide();
5534                });
5535            }
5536            anim.done(function () {
5537                var prop;
5538                jQuery.removeData(elem, 'fxshow', true);
5539                for (prop in orig) {
5540                    jQuery.style(elem, prop, orig[prop]);
5541                }
5542            });
5543            for (index = 0; index < length; index++) {
5544                prop = handled[index];
5545                tween = anim.createTween(prop, hidden ? dataShow[prop] : 0);
5546                orig[prop] = dataShow[prop] || jQuery.style(elem, prop);
5547                if (!(prop in dataShow)) {
5548                    dataShow[prop] = tween.start;
5549                    if (hidden) {
5550                        tween.end = tween.start;
5551                        tween.start = prop === 'width' || prop === 'height' ? 1 : 0;
5552                    }
5553                }
5554            }
5555        }
5556    }
5557    function Tween(elem, options, prop, end, easing) {
5558        return new Tween.prototype.init(elem, options, prop, end, easing);
5559    }
5560    jQuery.Tween = Tween;
5561    Tween.prototype = {
5562        constructor: Tween,
5563        init: function (elem, options, prop, end, easing, unit) {
5564            this.elem = elem;
5565            this.prop = prop;
5566            this.easing = easing || 'swing';
5567            this.options = options;
5568            this.start = this.now = this.cur();
5569            this.end = end;
5570            this.unit = unit || (jQuery.cssNumber[prop] ? '' : 'px');
5571        },
5572        cur: function () {
5573            var hooks = Tween.propHooks[this.prop];
5574            return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);
5575        },
5576        run: function (percent) {
5577            var eased, hooks = Tween.propHooks[this.prop];
5578            if (this.options.duration) {
5579                this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration);
5580            } else {
5581                this.pos = eased = percent;
5582            }
5583            this.now = (this.end - this.start) * eased + this.start;
5584            if (this.options.step) {
5585                this.options.step.call(this.elem, this.now, this);
5586            }
5587            if (hooks && hooks.set) {
5588                hooks.set(this);
5589            } else {
5590                Tween.propHooks._default.set(this);
5591            }
5592            return this;
5593        }
5594    };
5595    Tween.prototype.init.prototype = Tween.prototype;
5596    Tween.propHooks = {
5597        _default: {
5598            get: function (tween) {
5599                var result;
5600                if (tween.elem[tween.prop] != null && (!tween.elem.style || tween.elem.style[tween.prop] == null)) {
5601                    return tween.elem[tween.prop];
5602                }
5603                result = jQuery.css(tween.elem, tween.prop, false, '');
5604                return !result || result === 'auto' ? 0 : result;
5605            },
5606            set: function (tween) {
5607                if (jQuery.fx.step[tween.prop]) {
5608                    jQuery.fx.step[tween.prop](tween);
5609                } else if (tween.elem.style && (tween.elem.style[jQuery.cssProps[tween.prop]] != null || jQuery.cssHooks[tween.prop])) {
5610                    jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);
5611                } else {
5612                    tween.elem[tween.prop] = tween.now;
5613                }
5614            }
5615        }
5616    };
5617    Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
5618        set: function (tween) {
5619            if (tween.elem.nodeType && tween.elem.parentNode) {
5620                tween.elem[tween.prop] = tween.now;
5621            }
5622        }
5623    };
5624    jQuery.each([
5625        'toggle',
5626        'show',
5627        'hide'
5628    ], function (i, name) {
5629        var cssFn = jQuery.fn[name];
5630        jQuery.fn[name] = function (speed, easing, callback) {
5631            return speed == null || typeof speed === 'boolean' || !i && jQuery.isFunction(speed) && jQuery.isFunction(easing) ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);
5632        };
5633    });
5634    jQuery.fn.extend({
5635        fadeTo: function (speed, to, easing, callback) {
5636            return this.filter(isHidden).css('opacity', 0).show().end().animate({ opacity: to }, speed, easing, callback);
5637        },
5638        animate: function (prop, speed, easing, callback) {
5639            var empty = jQuery.isEmptyObject(prop), optall = jQuery.speed(speed, easing, callback), doAnimation = function () {
5640                    var anim = Animation(this, jQuery.extend({}, prop), optall);
5641                    if (empty) {
5642                        anim.stop(true);
5643                    }
5644                };
5645            return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);
5646        },
5647        stop: function (type, clearQueue, gotoEnd) {
5648            var stopQueue = function (hooks) {
5649                var stop = hooks.stop;
5650                delete hooks.stop;
5651                stop(gotoEnd);
5652            };
5653            if (typeof type !== 'string') {
5654                gotoEnd = clearQueue;
5655                clearQueue = type;
5656                type = undefined;
5657            }
5658            if (clearQueue && type !== false) {
5659                this.queue(type || 'fx', []);
5660            }
5661            return this.each(function () {
5662                var dequeue = true, index = type != null && type + 'queueHooks', timers = jQuery.timers, data = jQuery._data(this);
5663                if (index) {
5664                    if (data[index] && data[index].stop) {
5665                        stopQueue(data[index]);
5666                    }
5667                } else {
5668                    for (index in data) {
5669                        if (data[index] && data[index].stop && rrun.test(index)) {
5670                            stopQueue(data[index]);
5671                        }
5672                    }
5673                }
5674                for (index = timers.length; index--;) {
5675                    if (timers[index].elem === this && (type == null || timers[index].queue === type)) {
5676                        timers[index].anim.stop(gotoEnd);
5677                        dequeue = false;
5678                        timers.splice(index, 1);
5679                    }
5680                }
5681                if (dequeue || !gotoEnd) {
5682                    jQuery.dequeue(this, type);
5683                }
5684            });
5685        }
5686    });
5687    function genFx(type, includeWidth) {
5688        var which, attrs = { height: type }, i = 0;
5689        includeWidth = includeWidth ? 1 : 0;
5690        for (; i < 4; i += 2 - includeWidth) {
5691            which = cssExpand[i];
5692            attrs['margin' + which] = attrs['padding' + which] = type;
5693        }
5694        if (includeWidth) {
5695            attrs.opacity = attrs.width = type;
5696        }
5697        return attrs;
5698    }
5699    jQuery.each({
5700        slideDown: genFx('show'),
5701        slideUp: genFx('hide'),
5702        slideToggle: genFx('toggle'),
5703        fadeIn: { opacity: 'show' },
5704        fadeOut: { opacity: 'hide' },
5705        fadeToggle: { opacity: 'toggle' }
5706    }, function (name, props) {
5707        jQuery.fn[name] = function (speed, easing, callback) {
5708            return this.animate(props, speed, easing, callback);
5709        };
5710    });
5711    jQuery.speed = function (speed, easing, fn) {
5712        var opt = speed && typeof speed === 'object' ? jQuery.extend({}, speed) : {
5713            complete: fn || !fn && easing || jQuery.isFunction(speed) && speed,
5714            duration: speed,
5715            easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
5716        };
5717        opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === 'number' ? opt.duration : opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
5718        if (opt.queue == null || opt.queue === true) {
5719            opt.queue = 'fx';
5720        }
5721        opt.old = opt.complete;
5722        opt.complete = function () {
5723            if (jQuery.isFunction(opt.old)) {
5724                opt.old.call(this);
5725            }
5726            if (opt.queue) {
5727                jQuery.dequeue(this, opt.queue);
5728            }
5729        };
5730        return opt;
5731    };
5732    jQuery.easing = {
5733        linear: function (p) {
5734            return p;
5735        },
5736        swing: function (p) {
5737            return 0.5 - Math.cos(p * Math.PI) / 2;
5738        }
5739    };
5740    jQuery.timers = [];
5741    jQuery.fx = Tween.prototype.init;
5742    jQuery.fx.tick = function () {
5743        var timer, timers = jQuery.timers, i = 0;
5744        fxNow = jQuery.now();
5745        for (; i < timers.length; i++) {
5746            timer = timers[i];
5747            if (!timer() && timers[i] === timer) {
5748                timers.splice(i--, 1);
5749            }
5750        }
5751        if (!timers.length) {
5752            jQuery.fx.stop();
5753        }
5754        fxNow = undefined;
5755    };
5756    jQuery.fx.timer = function (timer) {
5757        if (timer() && jQuery.timers.push(timer) && !timerId) {
5758            timerId = setInterval(jQuery.fx.tick, jQuery.fx.interval);
5759        }
5760    };
5761    jQuery.fx.interval = 13;
5762    jQuery.fx.stop = function () {
5763        clearInterval(timerId);
5764        timerId = null;
5765    };
5766    jQuery.fx.speeds = {
5767        slow: 600,
5768        fast: 200,
5769        _default: 400
5770    };
5771    jQuery.fx.step = {};
5772    if (jQuery.expr && jQuery.expr.filters) {
5773        jQuery.expr.filters.animated = function (elem) {
5774            return jQuery.grep(jQuery.timers, function (fn) {
5775                return elem === fn.elem;
5776            }).length;
5777        };
5778    }
5779    var rroot = /^(?:body|html)$/i;
5780    jQuery.fn.offset = function (options) {
5781        if (arguments.length) {
5782            return options === undefined ? this : this.each(function (i) {
5783                jQuery.offset.setOffset(this, options, i);
5784            });
5785        }
5786        var docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft, box = {
5787                top: 0,
5788                left: 0
5789            }, elem = this[0], doc = elem && elem.ownerDocument;
5790        if (!doc) {
5791            return;
5792        }
5793        if ((body = doc.body) === elem) {
5794            return jQuery.offset.bodyOffset(elem);
5795        }
5796        docElem = doc.documentElement;
5797        if (!jQuery.contains(docElem, elem)) {
5798            return box;
5799        }
5800        if (typeof elem.getBoundingClientRect !== 'undefined') {
5801            box = elem.getBoundingClientRect();
5802        }
5803        win = getWindow(doc);
5804        clientTop = docElem.clientTop || body.clientTop || 0;
5805        clientLeft = docElem.clientLeft || body.clientLeft || 0;
5806        scrollTop = win.pageYOffset || docElem.scrollTop;
5807        scrollLeft = win.pageXOffset || docElem.scrollLeft;
5808        return {
5809            top: box.top + scrollTop - clientTop,
5810            left: box.left + scrollLeft - clientLeft
5811        };
5812    };
5813    jQuery.offset = {
5814        bodyOffset: function (body) {
5815            var top = body.offsetTop, left = body.offsetLeft;
5816            if (jQuery.support.doesNotIncludeMarginInBodyOffset) {
5817                top += parseFloat(jQuery.css(body, 'marginTop')) || 0;
5818                left += parseFloat(jQuery.css(body, 'marginLeft')) || 0;
5819            }
5820            return {
5821                top: top,
5822                left: left
5823            };
5824        },
5825        setOffset: function (elem, options, i) {
5826            var position = jQuery.css(elem, 'position');
5827            if (position === 'static') {
5828                elem.style.position = 'relative';
5829            }
5830            var curElem = jQuery(elem), curOffset = curElem.offset(), curCSSTop = jQuery.css(elem, 'top'), curCSSLeft = jQuery.css(elem, 'left'), calculatePosition = (position === 'absolute' || position === 'fixed') && jQuery.inArray('auto', [
5831                    curCSSTop,
5832                    curCSSLeft
5833                ]) > -1, props = {}, curPosition = {}, curTop, curLeft;
5834            if (calculatePosition) {
5835                curPosition = curElem.position();
5836                curTop = curPosition.top;
5837                curLeft = curPosition.left;
5838            } else {
5839                curTop = parseFloat(curCSSTop) || 0;
5840                curLeft = parseFloat(curCSSLeft) || 0;
5841            }
5842            if (jQuery.isFunction(options)) {
5843                options = options.call(elem, i, curOffset);
5844            }
5845            if (options.top != null) {
5846                props.top = options.top - curOffset.top + curTop;
5847            }
5848            if (options.left != null) {
5849                props.left = options.left - curOffset.left + curLeft;
5850            }
5851            if ('using' in options) {
5852                options.using.call(elem, props);
5853            } else {
5854                curElem.css(props);
5855            }
5856        }
5857    };
5858    jQuery.fn.extend({
5859        position: function () {
5860            if (!this[0]) {
5861                return;
5862            }
5863            var elem = this[0], offsetParent = this.offsetParent(), offset = this.offset(), parentOffset = rroot.test(offsetParent[0].nodeName) ? {
5864                    top: 0,
5865                    left: 0
5866                } : offsetParent.offset();
5867            offset.top -= parseFloat(jQuery.css(elem, 'marginTop')) || 0;
5868            offset.left -= parseFloat(jQuery.css(elem, 'marginLeft')) || 0;
5869            parentOffset.top += parseFloat(jQuery.css(offsetParent[0], 'borderTopWidth')) || 0;
5870            parentOffset.left += parseFloat(jQuery.css(offsetParent[0], 'borderLeftWidth')) || 0;
5871            return {
5872                top: offset.top - parentOffset.top,
5873                left: offset.left - parentOffset.left
5874            };
5875        },
5876        offsetParent: function () {
5877            return this.map(function () {
5878                var offsetParent = this.offsetParent || document.body;
5879                while (offsetParent && (!rroot.test(offsetParent.
5879nodeName) && jQuery.css(offsetParent, 'position') === 'static')) {
5880                    offsetParent = offsetParent.offsetParent;
5881                }
5882                return offsetParent || document.body;
5883            });
5884        }
5885    });
5886    jQuery.each({
5887        scrollLeft: 'pageXOffset',
5888        scrollTop: 'pageYOffset'
5889    }, function (method, prop) {
5890        var top = /Y/.test(prop);
5891        jQuery.fn[method] = function (val) {
5892            return jQuery.access(this, function (elem, method, val) {
5893                var win = getWindow(elem);
5894                if (val === undefined) {
5895                    return win ? prop in win ? win[prop] : win.document.documentElement[method] : elem[method];
5896                }
5897                if (win) {
5898                    win.scrollTo(!top ? val : jQuery(win).scrollLeft(), top ? val : jQuery(win).scrollTop());
5899                } else {
5900                    elem[method] = val;
5901                }
5902            }, method, val, arguments.length, null);
5903        };
5904    });
5905    function getWindow(elem) {
5906        return jQuery.isWindow(elem) ? elem : elem.nodeType === 9 ? elem.defaultView || elem.parentWindow : false;
5907    }
5908    jQuery.each({
5909        Height: 'height',
5910        Width: 'width'
5911    }, function (name, type) {
5912        jQuery.each({
5913            padding: 'inner' + name,
5914            content: type,
5915            '': 'outer' + name
5916        }, function (defaultExtra, funcName) {
5917            jQuery.fn[funcName] = function (margin, value) {
5918                var chainable = arguments.length && (defaultExtra || typeof margin !== 'boolean'), extra = defaultExtra || (margin === true || value === true ? 'margin' : 'border');
5919                return jQuery.access(this, function (elem, type, value) {
5920                    var doc;
5921                    if (jQuery.isWindow(elem)) {
5922                        return elem.document.documentElement['client' + name];
5923                    }
5924                    if (elem.nodeType === 9) {
5925                        doc = elem.documentElement;
5926                        return Math.max(elem.body['scroll' + name], doc['scroll' + name], elem.body['offset' + name], doc['offset' + name], doc['client' + name]);
5927                    }
5928                    return value === undefined ? jQuery.css(elem, type, value, extra) : jQuery.style(elem, type, value, extra);
5929                }, type, chainable ? margin : undefined, chainable, null);
5930            };
5931        });
5932    });
5933    window.oneJQuery = jQuery;
5934    if (typeof define === 'function' && define.amd && define.amd.jQuery) {
5935    }
5936}(window));
5937window.linkOpener = function ($) {
5938    return function (event, id, url, target) {
5939        event = event || window.event;
5940        if (url.search('preview') === -1 && $(event.target).closest('.image.component').hasClass('id' + id)) {
5941            event.stopPropagation();
5942            window.open(url, target);
5943        } else {
5944            $(event.target).attr('href', url);
5945        }
5946    };
5947}(oneJQuery);
5948oneJQuery(document).ready(function () {
5949    window.setTimeout(function () {
5950        try {
5951            window.IN.parse();
5952        } catch (e) {
5953        }
5954        try {
5955            window.FB.XFBML.parse();
5956        } catch (e) {
5957        }
5958        try {
5959            window.twttr.widgets.load();
5960        } catch (e) {
5961        }
5962        try {
5963            window.gapi.plus.go();
5964        } catch (e) {
5965        }
5966    }, 1000);
5967    oneJQuery('ul.shareButtonCntnr').delegate('a', 'click', function (evt) {
5968        evt.preventDefault();
5969        evt.stopPropagation();
5970        window.open(oneJQuery(this).attr('href') + encodeURIComponent(window.location.href));
5971    });
5972});
5973oneJQuery(function ($) {
5974    var menuList = $('.menu');
5975    var moreWidth;
5976    menuList.each(function (indx, menu) {
5977        var $menu = $(menu), menuWidth = $menu.width(), moreEnabled = $menu.find('.moreEnabled'), removeIndx = null;
5978        if (moreEnabled.length) {
5979            var moreParent = moreEnabled.parent();
5980            moreWidth = moreWidth || moreEnabled.removeClass('displayNone').closest('li').width();
5981            moreParent.find('li').remove();
5982            var tmp = moreEnabled.closest('li');
5983            tmp.detach();
5984            var items = $menu.find('ul:eq(0)>li');
5985            [].slice.call(items).some(function (item, i) {
5986                item = $(item);
5987                item.find('.menuitem').removeClass('displayNone');
5988                menuWidth -= item.width();
5989                if (menuWidth - moreWidth < 0) {
5990                    removeIndx = i;
5991                    return true;
5992                }
5993            });
5994            if (items.length - 1 === removeIndx && menuWidth > 0) {
5995                removeIndx = null;
5996            }
5997            if (removeIndx !== null) {
5998                if (removeIndx === 0) {
5999                    moreEnabled.closest('li').find('.divider').remove();
6000                }
6001                var list = $menu.find('ul:eq(0)>li');
6002                for (var i = removeIndx; i < list.length; i++) {
6003                    var nodeTobeReplaced = $(list[i]);
6004                    nodeTobeReplaced.detach();
6005                    nodeTobeReplaced.find('.divider').remove();
6006                    var menuItemNode = nodeTobeReplaced.find('.menuitem');
6007                    menuItemNode.removeClass();
6008                    var clsName = tmp.find('.menucascade').attr('class').replace(' menucascade', '');
6009                    menuItemNode.addClass('menuitem ' + clsName + 'item');
6010                    if (i < list.length - 1) {
6011                        nodeTobeReplaced.append('<li class="divider ' + clsName + 'divider"></li>');
6012                    }
6013                    tmp.find('ul:eq(0)').append(nodeTobeReplaced);
6014                }
6015                $menu.find('ul:eq(0)').append(tmp);
6016                $menu.find('ul:eq(0) .menuitem').removeClass('displayNone');
6017            }
6018        }
6019    });
6020    $('.menu li > div > .menucascadeanchor, .menu li > div.menucascadeanchor').each(function () {
6021        var subMenuEl = $(this), alreadyDone = subMenuEl.closest('.bodysubmenu')[0], li = subMenuEl.closest('li');
6022        if (alreadyDone || this.childElementCount === 0) {
6023            return;
6024        }
6025        var wrapper = $(document.createElement('div')), isHorizontalMenu = !!subMenuEl.closest('.menuhorizontal').length;
6026        wrapper.addClass('bodysubmenu');
6027        if (isHorizontalMenu) {
6028            wrapper.addClass('menuhorizontal');
6029        } else {
6030            wrapper.addClass('menuvertical');
6031        }
6032        if (subMenuEl.closest('.menuhorizontalleft').length) {
6033            wrapper.addClass('menuhorizontalleft');
6034        } else if (subMenuEl.closest('.menuhorizontalcenter').length) {
6035            wrapper.addClass('menuhorizontalcenter');
6036        } else if (subMenuEl.closest('.menuhorizontalright').length) {
6037            wrapper.addClass('menuhorizontalright');
6038        } else if (subMenuEl.closest('.menuhorizontalfit').length) {
6039            wrapper.addClass('menuhorizontalfit');
6040        }
6041        subMenuEl.detach();
6042        wrapper.append(subMenuEl);
6043        $(document.body).append(wrapper);
6044        li.mouseenter(function () {
6045            var dividerEl = $('.divider', li), dividerWidth = 0;
6046            if (dividerEl) {
6047                dividerWidth = dividerEl.innerWidth();
6048            }
6049            li.addClass('hover');
6050            wrapper.css('display', 'block');
6051            var offset = li.offset();
6052            if (isHorizontalMenu) {
6053                wrapper.css('top', Math.floor(offset.top) + li.outerHeight());
6054                wrapper.css('left', offset.left + dividerWidth);
6055            } else {
6056                wrapper.css('top', Math.floor(offset.top));
6057                wrapper.css('left', offset.left + li.outerWidth() + divi
6057derWidth);
6058            }
6059        });
6060        li.mouseleave(function (e) {
6061            var inSubMenu = $.contains(wrapper[0], e.relatedTarget);
6062            if (!inSubMenu) {
6063                li.removeClass('hover');
6064                wrapper.css('display', 'none');
6065            }
6066        });
6067        wrapper.mouseout(function (e) {
6068            var inParentItem = $.contains(li, e.relatedTarget), inSubMenu = $.contains(wrapper[0], e.relatedTarget);
6069            if (!inParentItem && !inSubMenu) {
6070                li.removeClass('hover');
6071                wrapper.css('display', 'none');
6072            }
6073        });
6074        if (('ontouchstart' in window || 'onmspointerdown' in window) && !navigator.userAgent.toLowerCase().match(/windows phone os 7/i)) {
6075            var menuItems = $.merge(li.find('a[class*="expandable"]'), $('.bodysubmenu a[class*="expandable"]'));
6076            if ('onmspointerdown' in window) {
6077                menuItems.each(function () {
6078                    $(this).attr('aria-haspopup', true);
6079                });
6080            } else {
6081                var lastClicked = null;
6082                menuItems.each(function () {
6083                    var self = oneJQuery(this);
6084                    self.on('click', function (e) {
6085                        var item = oneJQuery(this);
6086                        var isCurrentPreviouslyClicked = item.is(lastClicked), isCurrentAncestorOfPrevious = oneJQuery.contains(e.target.parentNode, lastClicked);
6087                        var shouldPreventDefault = true;
6088                        if (lastClicked === null) {
6089                            shouldPreventDefault = true;
6090                        } else if (isCurrentPreviouslyClicked) {
6091                            shouldPreventDefault = false;
6092                        } else if (isCurrentAncestorOfPrevious) {
6093                            shouldPreventDefault = false;
6094                        }
6095                        if (shouldPreventDefault) {
6096                            e.preventDefault();
6097                        }
6098                        lastClicked = e.target;
6099                    });
6100                });
6101                if (navigator.userAgent.toLowerCase().match(/mac/i)) {
6102                    li.mouseenter(function (e) {
6103                        if (!lastClicked) {
6104                            lastClicked = e.target;
6105                        }
6106                    });
6107                    $(document).on('touchstart', function (e) {
6108                        if (!$(e.target).hasClass('menuitem')) {
6109                            li.trigger('mouseout', e);
6110                            lastClicked = null;
6111                        }
6112                    });
6113                }
6114            }
6115        }
6116    });
6117});
6118window.OnewebContactForm = function ($) {
6119    var ContactFormValidation;
6120    var htmlEncode = function (str) {
6121        return str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
6122    };
6123    ContactFormValidation = function (cfg) {
6124        try {
6125            this.init(cfg);
6126        } catch (e) {
6127            throw new Error('ContactForm Validation initialization failed');
6128        }
6129    };
6130    ContactFormValidation.prototype = {
6131        constructor: window.OnewebContactForm,
6132        init: function (cfg) {
6133            this.formDOMId = cfg.formDOMId;
6134            this.postURL = cfg.postURL;
6135            this.recipientEmail = decodeURIComponent(cfg.recipientEmail);
6136            this.successMessage = decodeURIComponent(cfg.successMessage);
6137            this.errorMessage = decodeURIComponent(cfg.errorMessage);
6138            this.formElementsErrorMessages = JSON.parse(cfg.formElementsErrorMessages);
6139            this.allFieldErrorMessage = JSON.parse(cfg.allFieldErrorMessage);
6140            this.emailRegex = new RegExp(cfg.emailRegex, 'i');
6141            this.urlRegex = new RegExp(cfg.urlRegex);
6142            this.numberRegex = /^[0-9+\(\)#\.\s]+$/;
6143            this.numberQuery = 'input[ctype="number"],input[type="number"]';
6144            this.previewMode = cfg.previewMode;
6145            this.attachSubmitEvent();
6146            this.attachNumberInputValidation();
6147            this.formFieldErrors = [];
6148            this.contactFormDOM = {};
6149            this.formData = {
6150                recipient: this.recipientEmail,
6151                email: this.recipientEmail,
6152                subject: decodeURIComponent(cfg.subject)
6153            };
6154            this.defaultFormData = $.extend({}, this.formData);
6155            this.originalCharset = this.getDocumentCharset();
6156            this.attachSubmitEvent();
6157        },
6158        attachSubmitEvent: function () {
6159            $('.oneWebCntForm input[type="submit"]').click($.proxy(this.validateForm, this));
6160        },
6161        attachNumberInputValidation: function () {
6162            var regex = this.numberRegex;
6163            $('.contact-form-field-container > ' + this.numberQuery).on('input', function () {
6164                var $this = $(this), value = $this.val();
6165                if (!regex.test(value)) {
6166                    var pattern = '[^' + regex.source.replace(/^\^\[(.*?)\]\+\$$/, '$1') + ']';
6167                    var newValue = value.replace(new RegExp(pattern, 'g'), '');
6168                    $this.val(newValue);
6169                }
6170            });
6171        },
6172        validateForm: function (event) {
6173            event.preventDefault();
6174            event.stopImmediatePropagation();
6175            this.removeSuccessMessageOnFormFields($('#contactFormResponseContainer'));
6176            this.contactFormDOM = $('.oneWebCntForm');
6177            this.removeErrorMessageWarningOnFormFields(this.contactFormDOM);
6178            this.setDocumentCharset('ISO-8859-1');
6179            if (this.getFormValidationErrors(this.contactFormDOM) === 0) {
6180                this.updateFormData(this.contactFormDOM);
6181                if (this.isHiddenFieldEmpty() && !this.previewMode) {
6182                    this.postContactForm();
6183                    this.formData = $.extend(true, {}, this.defaultFormData);
6184                }
6185            } else {
6186                var errEl = $('.contact-form-field-container .error-message')[0];
6187                if (errEl) {
6188                    errEl.scrollIntoView();
6189                }
6190                this.setDocumentCharset(this.originalCharset);
6191                return false;
6192            }
6193        },
6194        removeErrorMessageWarningOnFormFields: function (formDOM) {
6195            $(formDOM).find('.error-message').remove();
6196        },
6197        removeSuccessMessageOnFormFields: function (successMsgDOM) {
6198            $(successMsgDOM).html('').removeClass('formSuccess');
6199        },
6200        getFormValidationErrors: function (formDOM) {
6201            var formFields = formDOM.find('.contact-form-field-container'), emailRegex = this.emailRegex, urlRegex = this.urlRegex, messageRegex = /^\S*/g, numberRegex = this.numberRegex, errors = 0;
6202            $.each(formFields, $.proxy(function (index, element) {
6203                var errorMessage = this.formElementsErrorMessages[index], inputFieldVal, errorFound = false, text;
6204                var $numberField = $(element).find(this.numberQuery), isNumberField = $numberField.length === 1;
6205                errorMessage = errorMessage && decodeURIComponent(errorMessage);
6206                if ($(element).find('input[type="text"]')[0] && !isNumberField && errorMessage) {
6207                    text = $.trim($(element).find('input[type="text"]').val());
6208                    if (!text.length && text.match(messageRegex)) {
6209                        errorFound = true;
6210                    }
6211                } else if ($(element).find('input[type="email"]')[0]) {
6212                    inputFieldVal = $(element).find('input[type="email"]').val();
6213                    if (errorMessage || inputFieldVal) {
6214                        errorMessage = errorMessage || decodeURIComponent(this.allFieldErrorMessage[index]);
6215                        if (!emailRegex.test(inputFieldVal)) {
6216                            errorFound = true;
6217                        }
6218                    }
6219                } else if ($(element).find('input[type="url"]')[0]) {
6220                    inputFieldVal = $(element).find('input[type="url"]').val();
6221                    if (errorMessage || inputFieldVal) {
6222                        errorMessage = errorMessage || decodeURIComponent(this.allFieldErrorMessage[index]);
6223                        if (!urlRegex.test(inputFieldVal) && !urlRegex.test('http://' + inputFieldVal)) {
6224                            errorFound = true;
6225                        }
6226                    }
6227                } else if (isNumberField) {
6228                    inputFieldVal = $numberField.val();
6229                    if (errorMessage || inputFieldVal) {
6230                        errorMessage = errorMessage || decodeURIComponent(this.allFieldErrorMessage[index]);
6231                        if (!inputFieldVal.match(numberRegex)) {
6232                            errorFound = true;
6233                        }
6234                    }
6235                } else if ($(element).find('input[type="tel"]')[0]) {
6236                    inputFieldVal = $(element).find('input[type="tel"]').val();
6237                    if (errorMessage || inputFieldVal) {
6238                        errorMessage = errorMessage || decodeURIComponent(this.allFieldErrorMessage[index]);
6239                        if (!inputFieldVal.match(numberRegex)) {
6240                            errorFound = true;
6241                        }
6242                    }
6243                } else if ($(element).find('input[type="checkbox"]').length > 0 && errorMessage) {
6244                    if (!$(element).find('input[type="checkbox"]:checked')[0]) {
6245                        errorFound = true;
6246                    }
6247                } else if ($(element).find('input[type="radio"]').length > 0 && errorMessage) {
6248                    if (!$(element).find('input[type="radio"]:checked')[0]) {
6249                        errorFound = true;
6250                    }
6251                } else if ($(element).find('textarea')[0] && errorMessage) {
6252                    text = $.trim($(element).find('textarea').val());
6253                    if (!text.length && text.match(messageRegex)) {
6254                        errorFound = true;
6255                    }
6256                } else if ($(element).find('select')[0] && errorMessage) {
6257                    var selectedValue = $(element).find('select').val();
6258                    if (!selectedValue && selectedValue !== '--') {
6259                        errorFound = true;
6260                    }
6261                }
6262                var errContainer = $(element).next();
6263                if (errorFound) {
6264                    errContainer.html(htmlEncode(errorMessage));
6265                    errors = errors + 1;
6266                } else {
6267                    errContainer.html('&nbsp;');
6268                }
6269            }, this));
6270            return errors;
6271        },
6272        updateFormData: function (formDOM) {
6273            var formFields = $(formDOM).find('.contact-form-field-container');
6274            $.each(formFields, $.proxy(function (index, element) {
6275                var labelName = $(element).find('label').text().replace(' *', '');
6276                if ($(element).find('input[type="text"]')[0] || $(element).find('input[type="url"]')[0] || $(element).find(this.numberQuery)[0] || $(element).find('input[type="tel"]')[0]) {
6277                    this.formData[labelName] = $(element).find('input').val();
6278                } else if ($(element).find('input[type="email"]')[0]) {
6279                    labelName = labelName === 'email' ? 'Email' : labelName;
6280                    if (!this.formData.replyto) {
6281                        this.formData.replyto = this.formData[labelName] = $(element).find('input').val();
6282                    } else {
6283                        this.formData[labelName] = $(element).find('input').val();
6284                    }
6285                } else if ($(element).find('input[type="checkbox"]:checked')[0]) {
6286                    this.formData[labelName] = $(element).find('input[type="checkbox"]:checked').map(function (index, ele) {
6287                        return $(ele).val();
6288                    }).get();
6289                } else if ($(element).find('input[type="radio"]:checked')[0]) {
6290                    this.formData[labelName] = $(element).find('input[type="radio"]:checked').val();
6291                } else if ($(element).find('select')[0]) {
6292                    this.formData[labelName] = $(element).find('select').val();
6293                } else if ($(element).find('textarea')[0]) {
6294                    this.formData[labelName] = $(element).find('textarea').val();
6295                }
6296            }, this));
6297        },
6298        getEncodedFormData: function () {
6299            var encodedFormData = '';
6300            for (var key in this.formData) {
6301                encodedFormData += unescape(encodeURIComponent(escape(key))).replace(/\+/g, '%2B') + '=' + unescape(encodeURIComponent(escape(this.formData[key]))).replace(/\+/g, '%2B') + '&';
6302            }
6303            encodedFormData = encodedFormData.substring(0, encodedFormData.length - 1);
6304            return encodedFormData;
6305        },
6306        isHiddenFieldEmpty: function () {
6307            return $(this.contactFormDOM).find('.oneweb-hidden-field>input').text() === '';
6308        },
6309        postContactForm: function () {
6310            $.ajax({
6311                type: 'POST',
6312                url: this.postURL,
6313                beforeSend: function (xhr) {
6314                    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
6315                },
6316                data: this.getEncodedFormData(),
6317                success: $.proxy(this.ajaxSuccess, this),
6318                error: $.proxy(this.ajaxError, this)
6319            });
6320        },
6321        ajaxSuccess: function (responseText) {
6322            var responseStatus = $('#contactFormResponseContainer');
6323            if (/<title>\s*Error/i.test(responseText)) {
6324                $(responseStatus).html(htmlEncode(this.errorMessage)).addClass('formError').removeClass('formSuccess');
6325            } else {
6326                $(responseStatus).html(htmlEncode(this.successMessage)).addClass('formSuccess').removeClass('formError');
6327            }
6328            this.resetDocument();
6329        },
6330        ajaxError: function () {
6331            var responseStatus = $('#contactFormResponseContainer');
6332            $(responseStatus).html(this.errorMessage).addClass('formError');
6333        },
6334        resetDocument: function () {
6335            $(this.contactFormDOM).trigger('reset');
6336            this.setDocumentCharset(this.originalCharset);
6337        },
6338        getDocumentCharset: function () {
6339            return document.characterSet || document.charset;
6340        },
6341        setDocumentCharset: function (charset) {
6342            if (document.charset) {
6343                document.charset = charset;
6344            } else {
6345                document.characterSet = charset;
6346            }
6347        }
6348    };
6349    return ContactFormValidation;
6350}(oneJQuery);

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.