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, '&').replace(/</g, '<').replace(/>/g, '>'); 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(' '); 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.