fast.wistia.com
Open in
urlscan Pro
2a04:4e42:3::622
Public Scan
URL:
http://fast.wistia.com/assets/external/popover-v1.js
Submission: On August 30 via manual from US
Submission: On August 30 via manual from US
Form analysis
0 forms found in the DOMText Content
/******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 18: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); // You wouldn't believe it, but IE11 does not support Object.assign(), so this // is our non-polyfill replacement. var assign=function assign(obj1){for(var _len=arguments.length,objs=Array(1<_len?_len-1:0),_key=1;_key<_len;_key++)objs[_key-1]=arguments[_key];if(Object.assign)return Object.assign.apply(Object,[obj1].concat(objs));for(var i=0;i<objs.length;i++)assignOne(obj1,objs[i]);return obj1},assignOne=function assignOne(obj1,obj2){for(var k in obj2)obj2.hasOwnProperty(k)&&(obj1[k]=obj2[k]);return obj1};/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (assign); /***/ }), /***/ 23: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "bind": () => (/* binding */ bind), /* harmony export */ "unbind": () => (/* binding */ unbind), /* harmony export */ "rebind": () => (/* binding */ rebind), /* harmony export */ "trigger": () => (/* binding */ trigger), /* harmony export */ "once": () => (/* binding */ once), /* harmony export */ "initNamespace": () => (/* binding */ initNamespace), /* harmony export */ "bindNamed": () => (/* binding */ bindNamed), /* harmony export */ "unbindNamed": () => (/* binding */ unbindNamed), /* harmony export */ "unbindAllInNamespace": () => (/* binding */ unbindAllInNamespace), /* harmony export */ "bindify": () => (/* binding */ bindify), /* harmony export */ "Bindings": () => (/* binding */ Bindings) /* harmony export */ }); /* harmony import */ var wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1); function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_arrayLikeToArray(o,minLen):void 0}}function _iterableToArray(iter){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(iter))return Array.from(iter)}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=Array(len);i<len;i++)arr2[i]=arr[i];return arr2}var aps=Array.prototype.slice;var bind=function bind(event,fn){var self=this;return self._bindings||(self._bindings={}),self._bindings[event]||(self._bindings[event]=[]),self._bindings[event].push(fn),function(){self.unbind(event,fn)}};var unbind=function unbind(event,fn){if(!this._bindings)return this;if(!this._bindings[event])return this;for(var boundFn,bindings=[],i=0;i<this._bindings[event].length;i++)boundFn=this._bindings[event][i],boundFn!==fn&&bindings.push(boundFn);this._bindings[event]=bindings};var rebind=function rebind(event,fn){return this.unbind(event,fn),this.bind(event,fn),{event:event,fn:fn}};var trigger=function trigger(event){for(var _len=arguments.length,args=Array(1<_len?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return this._bindings&&null!=this._bindings.all&&triggerImpl.apply(this,["all",event].concat(args)),triggerImpl.apply(this,[event].concat(args))};var triggerImpl=function triggerImpl(event){if(!this._bindings)return this;if(!this._bindings[event])return this;for(var unbinds,fn,args=aps.call(arguments,1),bindings=_toConsumableArray(this._bindings[event]),i=0;i<bindings.length;i++){fn=bindings[i];try{var ret=fn.apply(this,args);// special return value will unbind when triggered ret===this.unbind&&(null==unbinds&&(unbinds=[]),unbinds.push({event:event,fn:fn}))}catch(e){if(this._throwTriggerErrors)throw e;else wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.error&&wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.error(e)}}if(unbinds)for(var _unbind,_i=0;_i<unbinds.length;_i++)_unbind=unbinds[_i],this.unbind(_unbind.event,_unbind.fn);return this};var once=function once(event,fn){var wrappedFn=function wrappedFn(){return fn.apply(this,aps.call(arguments,0)),unbind};return bind(event,wrappedFn)};var initNamespace=function initNamespace(ctx,namespace){null==ctx._namedBindings&&(ctx._namedBindings={}),null==ctx._namedBindings[namespace]&&(ctx._namedBindings[namespace]={})};var getNamedBinding=function getNamedBinding(ctx,namespace,fnKey){return initNamespace(ctx,namespace),ctx._namedBindings[namespace][fnKey]},setNamedBinding=function setNamedBinding(ctx,namespace,fnKey,event,fn){initNamespace(ctx,namespace),ctx._namedBindings[namespace][fnKey]={event:event,fn:fn}};var bindNamed=function bindNamed(namespace,fnKey,event,fn){return this.unbindNamed(namespace,fnKey),setNamedBinding(this,namespace,fnKey,event,fn),this.bind(event,fn),function(){this.unbindNamed(namespace,fnKey)}};var unbindNamed=function unbindNamed(namespace,fnKey){initNamespace(this,namespace);var entry=getNamedBinding(this,namespace,fnKey);if(entry){var event=entry.event,fn=entry.fn;this.unbind(event,fn)}var namedBindings=this._namedBindings;return delete namedBindings[namespace][fnKey],isEmpty(namedBindings[namespace])&&delete namedBindings[namespace],this};var unbindAllInNamespace=function unbindAllInNamespace(namespace){var bindings=this._namedBindings&&this._namedBindings[namespace];if(null==bindings)return this;for(var fnKey in bindings)bindings.hasOwnProperty(fnKey)&&this.unbindNamed(namespace,fnKey)};var isEmpty=function isEmpty(obj){for(var k in obj)if(obj.hasOwnProperty(k))return!1;return!0};var bindify=function bindify(prototype){return prototype.bind=bind,prototype.unbind=unbind,prototype.on=bind,prototype.off=unbind,prototype.rebind=rebind,prototype.trigger=trigger,prototype.bindNamed=bindNamed,prototype.unbindNamed=unbindNamed,prototype.unbindAllInNamespace=unbindAllInNamespace,prototype};// If you don't want to mix in state with an existing object, you can use this // as a proxy, for example: // // var bindings = new Bindings(); // bindings.bind('hello', function(name) { // console.log('hi', name); // return bindings.unbind; // }); // bindings.trigger('hello', 'Max'); var Bindings=function Bindings(){};bindify(Bindings.prototype); /***/ }), /***/ 21: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "globalBind": () => (/* binding */ globalBind), /* harmony export */ "globalOn": () => (/* binding */ globalOn), /* harmony export */ "globalOff": () => (/* binding */ globalOff), /* harmony export */ "globalRebind": () => (/* binding */ globalRebind), /* harmony export */ "globalTrigger": () => (/* binding */ globalTrigger), /* harmony export */ "globalUnbind": () => (/* binding */ globalUnbind) /* harmony export */ }); /* harmony import */ var wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1); /* harmony import */ var utilities_wbindable_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(22); (0,utilities_wbindable_js__WEBPACK_IMPORTED_MODULE_1__.makeWbindable)(wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default);var globalBind=wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.bind.bind(wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default);var globalOn=wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.on.bind(wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default);var globalOff=wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.off.bind(wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default);var globalRebind=wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.rebind.bind(wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default);var globalTrigger=wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.trigger.bind(wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default);var globalUnbind=wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.unbind.bind(wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default); /***/ }), /***/ 44: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "getLocalStorage": () => (/* binding */ getLocalStorage), /* harmony export */ "removeLocalStorage": () => (/* binding */ removeLocalStorage), /* harmony export */ "setLocalStorage": () => (/* binding */ setLocalStorage), /* harmony export */ "updateLocalStorage": () => (/* binding */ updateLocalStorage) /* harmony export */ }); /* harmony import */ var wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1); /* * This module is designed as a simpler version of our old localStorage * utility. To reduce potential bundle size, it doesn't make use of Obj * utilities or wlog, and doesn't return early based on browser detection. * * To avoid multiple tab bugs, it does not try to do any kind of commit * debouncing. Every call to `set` involves JSON.serialize() and every call to * `get` involves JSON.parse(). Therefore, if you are performing many * operations, you should cache an intermediate value. The * updateLocalStorage function is also provided for doing many updates * with a single parse and serialize call. * * If you are working with localStorage on something that requires lots of * updates, you should use a separate namespace. That way there is less to * deserialize and serialize on each read and write. */var throwAsync=function throwAsync(e){setTimeout(function(){throw e},0)},OBJ_PROP="_namespacedLocalStorage",localStorageWorks=function localStorageWorks(ns){if(null!=wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._localStorageWorks)return wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._localStorageWorks;try{// no-ops that test get, set, and remove. These may throw an exception // in Private Browsing mode on iOS and Safari. var currentVal=localStorage.getItem(ns);localStorage.removeItem(ns),localStorage.setItem(ns,currentVal),wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._localStorageWorks=!0}catch(e){wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._localStorageWorks=!1}return wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._localStorageWorks},getMemory=function getMemory(){return null==wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default[OBJ_PROP]&&(wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default[OBJ_PROP]={}),wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default[OBJ_PROP]};var getLocalStorage=function getLocalStorage(ns){if(!localStorageWorks())return getMemory()[ns]||{};if(localStorage[ns])try{return"null"===localStorage[ns]?{}:JSON.parse(localStorage[ns])}catch(e){throwAsync(e)}return{}};var removeLocalStorage=function removeLocalStorage(ns){if(!localStorageWorks())return void(getMemory()[ns]={});try{localStorage.removeItem(ns)}catch(e){throwAsync(e)}};var setLocalStorage=function setLocalStorage(ns,obj){if(!localStorageWorks())return null!=obj&&"object"==typeof obj&&(getMemory()[ns]=obj),obj;try{// We set W._localStorage for compatibility with the old localStorage util, // which would otherwise overwrite any changes we make. :0 getMemory()[ns]=obj,localStorage[ns]=JSON.stringify(obj)}catch(e){throwAsync(e)}return obj};var updateLocalStorage=function updateLocalStorage(ns,fn){var obj=getLocalStorage(ns);// fn() may throw an exception. we catch and report because we don't want // an exception after modifying in-place localStorage to get our local store // out of sync. try{fn(obj)}catch(e){throwAsync(e)}return setLocalStorage(ns,obj)}; /***/ }), /***/ 36: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); var pageLoaded=function pageLoaded(fn){var timeout=1<arguments.length&&arguments[1]!==void 0?arguments[1]:4e3,doc=2<arguments.length&&arguments[2]!==void 0?arguments[2]:document,win=3<arguments.length&&arguments[3]!==void 0?arguments[3]:window;if(/loaded|complete/.test(doc.readyState))setTimeout(fn,0);else{var unbind=function unbind(){win.removeEventListener("load",onPageLoad,!1)},onPageLoad=function onPageLoad(){clearTimeout(onLoadTimeout),unbind(),fn()};win.addEventListener("load",onPageLoad,!1);var onLoadTimeout=setTimeout(function(){unbind(),fn()},timeout)}};/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (pageLoaded); /***/ }), /***/ 2: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* global globalThis */var root;try{root=self,root.self!==root&&typeof root.self!==void 0&&"undefined"!=typeof window&&(root=window)}catch(err){root="undefined"==typeof globalThis?window:globalThis}/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (root); /***/ }), /***/ 296: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "countMetric": () => (/* binding */ countMetric), /* harmony export */ "sendMetrics": () => (/* binding */ sendMetrics), /* harmony export */ "sampleMetric": () => (/* binding */ sampleMetric), /* harmony export */ "sendMetric": () => (/* binding */ sendMetric), /* harmony export */ "_clearMetricsCache": () => (/* binding */ _clearMetricsCache) /* harmony export */ }); /* harmony import */ var wistia_namespace__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1); /* harmony import */ var utilities_assign_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(18); /* harmony import */ var utilities_pageLoaded_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(36); /* harmony import */ var utilities_trackingConsentApi_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(42); /* harmony import */ var utilities_xhr_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(25); var _this=undefined;null==wistia_namespace__WEBPACK_IMPORTED_MODULE_0__.default._simpleMetricsCache&&(wistia_namespace__WEBPACK_IMPORTED_MODULE_0__.default._simpleMetricsCache={}),wistia_namespace__WEBPACK_IMPORTED_MODULE_0__.default._simpleMetricsPostFunction||(wistia_namespace__WEBPACK_IMPORTED_MODULE_0__.default._simpleMetricsPostFunction=utilities_xhr_js__WEBPACK_IMPORTED_MODULE_4__.xhrPost),null==wistia_namespace__WEBPACK_IMPORTED_MODULE_0__.default._simpleMetricsDebounceInterval&&(wistia_namespace__WEBPACK_IMPORTED_MODULE_0__.default._simpleMetricsDebounceInterval=500);var METRICS_CACHE=wistia_namespace__WEBPACK_IMPORTED_MODULE_0__.default._simpleMetricsCache;var countMetric=function countMetric(key){var val=1<arguments.length&&arguments[1]!==void 0?arguments[1]:1,extraData=2<arguments.length?arguments[2]:void 0;return sendMetric("count",key,val,extraData)};var sendMetrics=function sendMetrics(){if((0,utilities_trackingConsentApi_js__WEBPACK_IMPORTED_MODULE_3__.isVisitorTrackingEnabled)()){for(var url="https://".concat("pipedream.wistia.com","/mput?topic=metrics"),_len=arguments.length,messages=Array(_len),_key=0;_key<_len;_key++)messages[_key]=arguments[_key];return wistia_namespace__WEBPACK_IMPORTED_MODULE_0__.default._simpleMetricsPostFunction(url,messages.join("\n"))}};var sampleMetric=function sampleMetric(key,val,extraData){return sendMetric("sample",key,val,extraData)};var sendMetric=function sendMetric(type,key,val){var extraData=3<arguments.length&&arguments[3]!==void 0?arguments[3]:{};if((0,utilities_trackingConsentApi_js__WEBPACK_IMPORTED_MODULE_3__.isVisitorTrackingEnabled)())try{null==METRICS_CACHE.toMput&&(METRICS_CACHE.toMput=[]);var messageObj=(0,utilities_assign_js__WEBPACK_IMPORTED_MODULE_1__.default)({type:type,key:key,value:null==val?null:val},extraData),serialized=JSON.stringify(messageObj);METRICS_CACHE.toMput.push(serialized),clearTimeout(wistia_namespace__WEBPACK_IMPORTED_MODULE_0__.default._msendTimeout),wistia_namespace__WEBPACK_IMPORTED_MODULE_0__.default._msendTimeout=setTimeout(function(){(0,utilities_pageLoaded_js__WEBPACK_IMPORTED_MODULE_2__.default)(function(){sendMetrics.apply(_this,METRICS_CACHE.toMput),METRICS_CACHE.toMput=[]})},wistia_namespace__WEBPACK_IMPORTED_MODULE_0__.default._simpleMetricsDebounceInterval)}catch(e){console.error(e.message),console.error(e.stack)}};// only used in testing to clear the cache var _clearMetricsCache=function _clearMetricsCache(){METRICS_CACHE.toMput=[]}; /***/ }), /***/ 42: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "migrateLegacyVisitorTracking": () => (/* binding */ migrateLegacyVisitorTracking), /* harmony export */ "consent": () => (/* binding */ consent), /* harmony export */ "setVisitorTrackingEnabled": () => (/* binding */ setVisitorTrackingEnabled), /* harmony export */ "isVisitorTrackingEnabled": () => (/* binding */ isVisitorTrackingEnabled) /* harmony export */ }); /* harmony import */ var wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1); /* harmony import */ var utilities_globalBindAndTrigger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21); /* harmony import */ var utilities_wistiaLocalStorage_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(43); function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_arrayLikeToArray(o,minLen):void 0}}function _iterableToArray(iter){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(iter))return Array.from(iter)}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=Array(len);i<len;i++)arr2[i]=arr[i];return arr2}var migrateLegacyVisitorTracking=function migrateLegacyVisitorTracking(){var legacyIsEnabled=(0,utilities_wistiaLocalStorage_js__WEBPACK_IMPORTED_MODULE_2__.getWistiaLocalStorage)().visitorTrackingEnabled;null!=legacyIsEnabled&&((0,utilities_wistiaLocalStorage_js__WEBPACK_IMPORTED_MODULE_2__.updateWistiaLocalStorage)(function(ls){return delete ls.visitorTrackingEnabled}),wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._visitorTracking={},wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._visitorTracking[wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._visitorTrackingDomain]={isEnabled:legacyIsEnabled,updatedAt:Date.now()},(0,utilities_wistiaLocalStorage_js__WEBPACK_IMPORTED_MODULE_2__.updateWistiaLocalStorage)(function(ls){return ls.visitorTracking=wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._visitorTracking}))};wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._visitorTrackingDomain||(wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._visitorTrackingDomain=location.hostname||""),wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._visitorTracking||(migrateLegacyVisitorTracking(),wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._visitorTracking=(0,utilities_wistiaLocalStorage_js__WEBPACK_IMPORTED_MODULE_2__.getWistiaLocalStorage)().visitorTracking||{});var consent=function consent(val){return null==val?isVisitorTrackingEnabled():setVisitorTrackingEnabled(val)};wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.consent=consent;var setVisitorTrackingEnabled=function setVisitorTrackingEnabled(val){var domain=1<arguments.length&&arguments[1]!==void 0?arguments[1]:wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._visitorTrackingDomain;"default"===val?delete wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._visitorTracking[domain]:wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._visitorTracking[domain]={isEnabled:"true"==="".concat(val),updatedAt:Date.now()},(0,utilities_wistiaLocalStorage_js__WEBPACK_IMPORTED_MODULE_2__.updateWistiaLocalStorage)(function(obj){return obj.visitorTracking=wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._visitorTracking}),(0,utilities_globalBindAndTrigger_js__WEBPACK_IMPORTED_MODULE_1__.globalTrigger)("visitortrackingchange",val)};var isCurrentDomainOrAnyParentDomainsEnabled=function isCurrentDomainOrAnyParentDomainsEnabled(){if(wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._visitorTrackingDomain)for(var domainParts=wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._visitorTrackingDomain.split(".");0<domainParts.length;){var entry=wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._visitorTracking[domainParts.join(".")],enabledVal=entry&&entry.isEnabled;if(null!=enabledVal)return enabledVal;domainParts.shift()}// returns undefined instead of false as a result so that we can have // different behavior if it has not been set. };var isVisitorTrackingEnabled=function isVisitorTrackingEnabled(){if("boolean"==typeof wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._visitorTracking)// Legacy. We previously persisted this data as a boolean return wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._visitorTracking;if(wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._visitorTracking){// _visitorTracking has been set. Let's check the value for the current // domain. And if that's set, we return. var isEnabledVal=isCurrentDomainOrAnyParentDomainsEnabled();if(null!=isEnabledVal)return!!isEnabledVal}var apis=[];if(wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.api&&wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.api.all)try{apis.push.apply(apis,_toConsumableArray(wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.api.all()))}catch(e){// If W.api.all() is called before W._data is setup, this will throw // an exception. That's okay--it just means there are effectively no // video embeds yet. }if(wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.channel&&wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.channel.all)try{apis.push.apply(apis,_toConsumableArray(wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.channel.all()))}catch(e){// If W.api.all() is called before W._data is setup, this will throw // an exception. That's okay--it just means there are effectively no // channel embeds yet. }// By default, if any videos have privacy mode enabled, then we disable // visitor tracking for all videos on the page. In practice, we would only // see this occur if videos from multiple accounts--with different privacy // mode settings--appear on the same page. var isPrivacyModeEnabled=apis.some(function(api){var data=api._mediaData||api._galleryData||{};return!0===data.privacyMode});return!isPrivacyModeEnabled}; /***/ }), /***/ 22: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "makeWbindable": () => (/* binding */ makeWbindable), /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1); /* harmony import */ var utilities_bindify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(23); // This is an adaptation on top of bindify that is intended to provide both // legacy functionality (returning `this` instead of an "unbind" function) and // and "specialBind" functionality, which is what we use for special // "composite" bindings like "crosstime" and "betweentimes". // // If you're setting up on/off/trigger for any new things, you should use // bindify directly instead. wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.bindable||(wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.bindable={bind:function bind(event,callback){return this.specialBind&&!0===this.specialBind.apply(this,arguments)?this:callback?(utilities_bindify_js__WEBPACK_IMPORTED_MODULE_1__.bind.call(this,event,callback),this):void(wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.warn&&wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.warn(this.constructor.name,"bind","falsey value passed in as callback:",callback))},// unbind the matching callback and event for this video unbind:function unbind(event,callback){return this.specialUnbind&&!0===this.specialUnbind.apply(this,arguments)?this:(callback?utilities_bindify_js__WEBPACK_IMPORTED_MODULE_1__.unbind.call(this,event,callback):this._bindings&&(this._bindings[event]=[]),this._bindings&&this._bindings[event]&&!this._bindings[event].length&&(this._bindings[event]=null,delete this._bindings[event]),this)},on:function on(event,fn){var specialBindResult=this.specialBind&&this.specialBind.apply(this,arguments);return"function"==typeof specialBindResult?specialBindResult:utilities_bindify_js__WEBPACK_IMPORTED_MODULE_1__.bind.call(this,event,fn)},off:function off(event,fn){var specialUnbindResult=this.specialUnbind&&this.specialUnbind.apply(this,arguments);return"function"==typeof specialUnbindResult?specialUnbindResult:utilities_bindify_js__WEBPACK_IMPORTED_MODULE_1__.unbind.call(this,event,fn)},rebind:function rebind(event,callback){return this.unbind(event,callback),this.bind(event,callback),this},// fire an event trigger on the video. for play/pause/ended callbacks. trigger:function trigger(event){for(var _bindify$trigger,_len=arguments.length,args=Array(1<_len?_len-1:0),_key=1;_key<_len;_key++)args[_key-1]=arguments[_key];return(_bindify$trigger=utilities_bindify_js__WEBPACK_IMPORTED_MODULE_1__.trigger).call.apply(_bindify$trigger,[this,event].concat(args)),this},bindNamed:function bindNamed(){return utilities_bindify_js__WEBPACK_IMPORTED_MODULE_1__.bindNamed.apply(this,arguments)},unbindNamed:function unbindNamed(){return utilities_bindify_js__WEBPACK_IMPORTED_MODULE_1__.unbindNamed.apply(this,arguments)},unbindAllInNamespace:function unbindAllInNamespace(){return utilities_bindify_js__WEBPACK_IMPORTED_MODULE_1__.unbindAllInNamespace.apply(this,arguments)}});var makeWbindable=function makeWbindable(obj){for(var k in wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.bindable){var v=wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.bindable[k];obj[k]||(obj[k]=v)}};/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default.bindable); /***/ }), /***/ 43: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "getWistiaLocalStorage": () => (/* binding */ getWistiaLocalStorage), /* harmony export */ "removeWistiaLocalStorage": () => (/* binding */ removeWistiaLocalStorage), /* harmony export */ "setWistiaLocalStorage": () => (/* binding */ setWistiaLocalStorage), /* harmony export */ "updateWistiaLocalStorage": () => (/* binding */ updateWistiaLocalStorage) /* harmony export */ }); /* harmony import */ var wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1); /* harmony import */ var utilities_namespacedLocalStorage_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(44); // This localStorage utility can be used in situations where we don't need to // do very frequent updates or reads. If frequent updates or reads are // expected, you should use namespacedLocalStorage.js with its own namespace, // since the entire namespace is deserialized and serialized on read and write // respectively. var WISTIA_NAMESPACE="wistia";var getWistiaLocalStorage=function getWistiaLocalStorage(){return (0,utilities_namespacedLocalStorage_js__WEBPACK_IMPORTED_MODULE_1__.getLocalStorage)(WISTIA_NAMESPACE)};var removeWistiaLocalStorage=function removeWistiaLocalStorage(){return wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._localStorage=(0,utilities_namespacedLocalStorage_js__WEBPACK_IMPORTED_MODULE_1__.removeLocalStorage)(WISTIA_NAMESPACE),wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._localStorage};var setWistiaLocalStorage=function setWistiaLocalStorage(obj){return wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._localStorage=(0,utilities_namespacedLocalStorage_js__WEBPACK_IMPORTED_MODULE_1__.setLocalStorage)(WISTIA_NAMESPACE,obj),wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._localStorage};var updateWistiaLocalStorage=function updateWistiaLocalStorage(fn){return wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._localStorage=(0,utilities_namespacedLocalStorage_js__WEBPACK_IMPORTED_MODULE_1__.updateLocalStorage)(WISTIA_NAMESPACE,fn),wistia_namespace_js__WEBPACK_IMPORTED_MODULE_0__.default._localStorage}; /***/ }), /***/ 25: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "xhr": () => (/* binding */ xhr), /* harmony export */ "xhrGet": () => (/* binding */ xhrGet), /* harmony export */ "xhrPost": () => (/* binding */ xhrPost), /* harmony export */ "xhrJsonPost": () => (/* binding */ xhrJsonPost) /* harmony export */ }); /* harmony import */ var utilities_assign_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18); /* harmony import */ var promiscuous__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(26); /* harmony import */ var promiscuous__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(promiscuous__WEBPACK_IMPORTED_MODULE_1__); var DONE=4;var xhr=function xhr(type,url,data){var headers=3<arguments.length&&arguments[3]!==void 0?arguments[3]:{},options=4<arguments.length&&arguments[4]!==void 0?arguments[4]:{};return new (promiscuous__WEBPACK_IMPORTED_MODULE_1___default())(function(resolve,reject){var XhrClass=options.XMLHttpRequest||XMLHttpRequest,xhr=new XhrClass;options.afterConstructor&&options.afterConstructor(xhr);var onReadyStateChange=function onReadyStateChange(){if(!(xhr.readyState<DONE))// 200-300 = success, 304 = Not Modified if(!(null!=xhr.status&&(200<=xhr.status&&300>xhr.status||304==xhr.status))){var badStatusError=new Error("".concat(type," ").concat(url," - Got an unsuccessful status code: ").concat(xhr.status,". ").concat(xhr.statusText));badStatusError.status=xhr.status,console.error(badStatusError.message),reject(badStatusError)}else if(xhr.response&&"string"!=typeof xhr.response)// The browser has modified the response to a non-String type; handle // it downstream. resolve({data:xhr.response,status:xhr.status,statusText:xhr.statusText,xhr:xhr});else if("json"===options.dataType)// We're getting a string response but have asked for dataType='json'; // parse it ourselves. try{var responseJson=JSON.parse(xhr.responseText);resolve({data:responseJson,status:xhr.status,statusText:xhr.statusText,xhr:xhr})}catch(e){var badParseError=new Error("".concat(type," ").concat(url," - Error parsing response text: ").concat(xhr.responseText,"."));console.error(badParseError.message),reject(badParseError)}else// This is a simple non-JSON string response. resolve({data:xhr.responseText,status:xhr.status,statusText:xhr.statusText,xhr:xhr})};try{xhr.addEventListener("readystatechange",onReadyStateChange,!1)}catch(e){console.error(e.message),console.error(e.stack)}var onError=function onError(){var error=new Error("XHR error");error.status=xhr.status,error.xhr=xhr,reject(error)};xhr.addEventListener("error",onError,!1);var onTimeout=function onTimeout(e){var error=new Error("XHR timeout");error.status=xhr.status,error.message=e&&e.message,error.xhr=xhr,reject(e)};if(xhr.addEventListener("timeout",onTimeout,!1),xhr.open(type,url,!0),options.withCredentials&&(xhr.withCredentials=!0),options.timeout&&(xhr.timeout=options.timeout),null!=options.dataType&&(xhr.responseType=options.dataType),"POST"!==type||headers["content-type"]||xhr.setRequestHeader("content-type","application/x-www-form-urlencoded"),headers)for(var name in headers)headers.hasOwnProperty(name)&&xhr.setRequestHeader(name.toLowerCase(),headers[name]);xhr.send(data),options.afterSend&&options.afterSend(xhr)})};var xhrGet=function xhrGet(url,headers,options){return xhr("GET",url,null,headers,options)};var xhrPost=function xhrPost(url,data,headers,options){return xhr("POST",url,data,headers,options)};var xhrJsonPost=function xhrJsonPost(url,data,headers,options){return headers=(0,utilities_assign_js__WEBPACK_IMPORTED_MODULE_0__.default)({},headers,{"content-type":"application/json"}),xhr("POST",url,JSON.stringify(data),headers,options)}; /***/ }), /***/ 1: /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) /* harmony export */ }); /* harmony import */ var utilities_root__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2); null==utilities_root__WEBPACK_IMPORTED_MODULE_0__.default.Wistia&&(utilities_root__WEBPACK_IMPORTED_MODULE_0__.default.Wistia={});var W=utilities_root__WEBPACK_IMPORTED_MODULE_0__.default.Wistia;null==W._initializers&&(W._initializers={}),null==W._destructors&&(W._destructors={}),null==W.mixin&&(W.mixin=function(klass,obj){for(var k in obj)obj.hasOwnProperty(k)&&(klass[k]=obj[k])});/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (utilities_root__WEBPACK_IMPORTED_MODULE_0__.default.Wistia); /***/ }), /***/ 26: /***/ ((module) => { /**@license MIT-promiscuous-©Ruben Verborgh*/(function(func,obj){// Type checking utility function function is(type,item){return(typeof item)[0]==type}// Creates a promise, calling callback(resolve, reject), ignoring other parameters. function Promise(callback,handler){return handler=function pendingHandler(resolved,rejected,value,queue,then,i){// Case 1) handle a .then(resolved, rejected) call if(queue=pendingHandler.q,resolved!=is)return Promise(function(resolve,reject){queue.push({p:this,r:resolve,j:reject,1:resolved,0:rejected})});// Case 2) handle a resolve or reject call // (`resolved` === `is` acts as a sentinel) // The actual function signature is // .re[ject|solve](<is>, success, value) // Check if the value is a promise and try to obtain its `then` method if(value&&is(func,value)|is(obj,value))try{then=value.then}catch(reason){rejected=0,value=reason}// If the value is a promise, take over its state if(is(func,then)){var valueHandler=function valueHandler(resolved){return function(value){then&&(then=0,pendingHandler(is,resolved,value))}};try{then.call(value,valueHandler(1),rejected=valueHandler(0))}catch(reason){rejected(reason)}}// The value is not a promise; handle resolve/reject else for(handler=function handler(Resolved,Rejected){// If the Resolved or Rejected parameter is not a function, // return the original promise (now stored in the `callback` variable) return is(func,Resolved=rejected?Resolved:Rejected)?Promise(function(resolve,reject){finalize(this,resolve,reject,value,Resolved)}):callback;// Otherwise, return a finalized promise, transforming the value with the function },i=0;i<queue.length;)then=queue[i++],is(func,resolved=then[rejected])?// Otherwise, resolve/reject the promise with the result of the callback finalize(then.p,then.r,then.j,value,resolved):(rejected?then.r:then.j)(value)},handler.q=[],callback.call(callback={then:function then(resolved,rejected){return handler(resolved,rejected)},catch:function _catch(rejected){return handler(0,rejected)}},function(value){handler(is,1,value)},function(reason){handler(is,0,reason)}),callback}// Finalizes the promise by resolving/rejecting it with the transformed value function finalize(promise,resolve,reject,value,transform){var fn=function fn(){try{// Transform the value through and check whether it's a promise value=transform(value),transform=value&&is(obj,value)|is(func,value)&&value.then,is(func,transform)?value==promise?reject(TypeError()):// Take over the promise's state transform.call(value,resolve,reject):resolve(value)}catch(error){reject(error)}};// Don't polyfill setImmediate, but use it if it's available. window.setImmediate?window.setImmediate(fn):setTimeout(fn,0)}// Export the main module function ResolvedPromise(value){return Promise(function(resolve){resolve(value)})}// Creates a rejected promise // If Promise is defined globally when this runs, just use that. return window.Promise?void(module.exports=window.Promise):void(// Creates a resolved promise // Transforms an array of promises into a promise for an array // Returns a promise that resolves or rejects as soon as one promise in the array does module.exports=Promise,Promise.resolve=ResolvedPromise,Promise.reject=function(reason){return Promise(function(resolve,reject){reject(reason)})},Promise.all=function(promises){return Promise(function(resolve,reject,count,values){// Array of collected values // Resolve immediately if there are no promises // Transform all elements (`map` is shorter than `forEach`) values=[],count=promises.length||resolve(values),promises.map(function(promise,index){ResolvedPromise(promise).then(// Store the value and resolve if it was the last function(value){values[index]=value,--count||resolve(values)},// Reject if one element fails reject)})})},Promise.race=function(promises){return Promise(function(resolve,reject){// Register to all promises in the array promises.map(function(promise){ResolvedPromise(promise).then(resolve,reject)})})})})("f","o"); /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ (() => { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = (module) => { /******/ var getter = module && module.__esModule ? /******/ () => (module['default']) : /******/ () => (module); /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ (() => { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = (exports, definition) => { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ })(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ (() => { /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) /******/ })(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ (() => { /******/ // define __esModule on exports /******/ __webpack_require__.r = (exports) => { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ })(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry need to be wrapped in an IIFE because it need to be in strict mode. (() => { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony import */ var utilities_simpleMetrics__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(296); /*! * jQuery JavaScript Library v1.7.2 * http://jquery.com/ * * Copyright 2011, John Resig * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * Includes Sizzle.js * http://sizzlejs.com/ * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * * Date: Wed Mar 21 12:46:34 2012 -0700 */(0,utilities_simpleMetrics__WEBPACK_IMPORTED_MODULE_0__.countMetric)("legacy/popover-v1",1,{href:window.location.href}),window.wistiaJQuery||(function(window,undefined){// Convert String-formatted flags into Object-formatted ones and store in cache function createFlags(flags){var object=flagsCache[flags]={},i,length;for(flags=flags.split(/\s+/),i=0,length=flags.length;i<length;i++)object[flags[i]]=!0;return object}/* * Create a callback list using the following parameters: * * flags: an optional list of space-separated flags that will change how * the callback list behaves * * By default a callback list will act like an event callback list and can be * "fired" multiple times. * * Possible flags: * * once: will ensure the callback list can only be fired once (like a Deferred) * * memory: will keep track of previous values and will call any callback added * after the list has been fired right away with the latest "memorized" * values (like a Deferred) * * unique: will ensure a callback can only be added once (no duplicate in the list) * * stopOnFalse: interrupt callings when a callback returns false * */function dataAttr(elem,key,data){// If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if(void 0===data&&1===elem.nodeType){var name="data-"+key.replace(rmultiDash,"-$1").toLowerCase();if(data=elem.getAttribute(name),"string"==typeof data){try{data="true"===data||"false"!==data&&("null"===data?null:jQuery.isNumeric(data)?+data:rbrace.test(data)?jQuery.parseJSON(data):data)}catch(e){}// Make sure we set the data so it isn't changed later jQuery.data(elem,key,data)}else data=void 0}return data}// checks a cache object for emptiness function isEmptyDataObject(obj){for(var name in obj)// if the public data object is empty, the private is still empty if(!("data"==name&&jQuery.isEmptyObject(obj[name]))&&"toJSON"!=name)return!1;return!0}function handleQueueMarkDefer(elem,type,src){var deferDataKey=type+"defer",queueDataKey=type+"queue",markDataKey=type+"mark",defer=jQuery._data(elem,deferDataKey);!defer||"queue"!==src&&jQuery._data(elem,queueDataKey)||"mark"!==src&&jQuery._data(elem,markDataKey)||setTimeout(function(){jQuery._data(elem,queueDataKey)||jQuery._data(elem,markDataKey)||(jQuery.removeData(elem,deferDataKey,!0),defer.fire())},0)}function returnFalse(){return!1}function returnTrue(){return!0}// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html // A painfully simple check to see if an element is disconnected // from a document (should be improved, where feasible). function isDisconnected(node){return!node||!node.parentNode||11===node.parentNode.nodeType}// Implement the identical functionality for filter and not function winnow(elements,qualifier,keep){if(qualifier=qualifier||0,jQuery.isFunction(qualifier))return jQuery.grep(elements,function(elem,i){var retVal=!!qualifier.call(elem,i,elem);return retVal===keep});if(qualifier.nodeType)return jQuery.grep(elements,function(elem,i){return elem===qualifier===keep});if("string"==typeof qualifier){var filtered=jQuery.grep(elements,function(elem){return 1===elem.nodeType});if(isSimple.test(qualifier))return jQuery.filter(qualifier,filtered,!keep);qualifier=jQuery.filter(qualifier,filtered)}return jQuery.grep(elements,function(elem,i){return 0<=jQuery.inArray(elem,qualifier)===keep})}function createSafeFragment(document){var list=nodeNames.split("|"),safeFrag=document.createDocumentFragment();if(safeFrag.createElement)for(;list.length;)safeFrag.createElement(list.pop());return safeFrag}function root(elem,cur){return jQuery.nodeName(elem,"table")?elem.getElementsByTagName("tbody")[0]||elem.appendChild(elem.ownerDocument.createElement("tbody")):elem}function cloneCopyEvent(src,dest){if(1===dest.nodeType&&jQuery.hasData(src)){var oldData=jQuery._data(src),curData=jQuery._data(dest,oldData),events=oldData.events,type,i,l;if(events)for(type in delete curData.handle,curData.events={},events)for(i=0,l=events[type].length;i<l;i++)jQuery.event.add(dest,type,events[type][i]);// make the cloned public data object a copy from the original curData.data&&(curData.data=jQuery.extend({},curData.data))}}function cloneFixAttributes(src,dest){var nodeName;// We do not need to do anything for non-Elements 1!==dest.nodeType||(// Event data gets referenced instead of copied if the expando // gets copied too // Clear flags for bubbling special change/submit events, they must // be reattached when the newly cloned events are first activated dest.clearAttributes&&dest.clearAttributes(),dest.mergeAttributes&&dest.mergeAttributes(src),nodeName=dest.nodeName.toLowerCase(),"object"===nodeName?dest.outerHTML=src.outerHTML:"input"===nodeName&&("checkbox"===src.type||"radio"===src.type)?(src.checked&&(dest.defaultChecked=dest.checked=src.checked),dest.value!==src.value&&(dest.value=src.value)):"option"===nodeName?dest.selected=src.defaultSelected:"input"===nodeName||"textarea"===nodeName?dest.defaultValue=src.defaultValue:"script"===nodeName&&dest.text!==src.text&&(dest.text=src.text),dest.removeAttribute(jQuery.expando),dest.removeAttribute("_submit_attached"),dest.removeAttribute("_change_attached"));// clearAttributes removes the attributes, which we don't want, // but also removes the attachEvent events, which we *do* want }function getAll(elem){return"undefined"==typeof elem.getElementsByTagName?"undefined"==typeof elem.querySelectorAll?[]:elem.querySelectorAll("*"):elem.getElementsByTagName("*")}// Used in clean, fixes the defaultChecked property function fixDefaultChecked(elem){("checkbox"===elem.type||"radio"===elem.type)&&(elem.defaultChecked=elem.checked)}// Finds all inputs and passes them to fixDefaultChecked function findInputs(elem){var nodeName=(elem.nodeName||"").toLowerCase();"input"===nodeName?fixDefaultChecked(elem):"script"!==nodeName&&"undefined"!=typeof elem.getElementsByTagName&&jQuery.grep(elem.getElementsByTagName("input"),fixDefaultChecked)}// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js function shimCloneNode(elem){var div=document.createElement("div");return safeFragment.appendChild(div),div.innerHTML=elem.outerHTML,div.firstChild}function getWidthOrHeight(elem,name,extra){// Start with offset property var val="width"===name?elem.offsetWidth:elem.offsetHeight,i="width"===name?1:0,len=4;if(0<val){if("border"!==extra)for(;4>i;i+=2)extra||(val-=parseFloat(jQuery.css(elem,"padding"+cssExpand[i]))||0),"margin"===extra?val+=parseFloat(jQuery.css(elem,extra+cssExpand[i]))||0:val-=parseFloat(jQuery.css(elem,"border"+cssExpand[i]+"Width"))||0;return val+"px"}// Fall back to computed then uncomputed css if necessary // Computed unit is not pixels. Stop here and return. if(val=curCSS(elem,name),(0>val||null==val)&&(val=elem.style[name]),rnumnonpx.test(val))return val;// Normalize "", auto, and prepare for extra // Add padding, border, margin if(val=parseFloat(val)||0,extra)for(;4>i;i+=2)val+=parseFloat(jQuery.css(elem,"padding"+cssExpand[i]))||0,"padding"!==extra&&(val+=parseFloat(jQuery.css(elem,"border"+cssExpand[i]+"Width"))||0),"margin"===extra&&(val+=parseFloat(jQuery.css(elem,extra+cssExpand[i]))||0);return val+"px"}// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport function addToPrefiltersOrTransports(structure){// dataTypeExpression is optional and defaults to "*" return function(dataTypeExpression,func){if("string"!=typeof dataTypeExpression&&(func=dataTypeExpression,dataTypeExpression="*"),jQuery.isFunction(func))// For each dataType in the dataTypeExpression for(var dataTypes=dataTypeExpression.toLowerCase().split(rspacesAjax),i=0,length=dataTypes.length,dataType,list,placeBefore;i<length;i++)// We control if we're asked to add before // any existing element // then we add to the structure accordingly dataType=dataTypes[i],placeBefore=/^\+/.test(dataType),placeBefore&&(dataType=dataType.substr(1)||"*"),list=structure[dataType]=structure[dataType]||[],list[placeBefore?"unshift":"push"](func)}}// Base inspection function for prefilters and transports function inspectPrefiltersOrTransports(structure,options,originalOptions,jqXHR,dataType/* internal */,inspected/* internal */){dataType=dataType||options.dataTypes[0],inspected=inspected||{},inspected[dataType]=!0;for(var list=structure[dataType],i=0,length=list?list.length:0,executeOnly=structure===prefilters,selection;i<length&&(executeOnly||!selection);i++)selection=list[i](options,originalOptions,jqXHR),"string"==typeof selection&&(!executeOnly||inspected[selection]?selection=void 0:(options.dataTypes.unshift(selection),selection=inspectPrefiltersOrTransports(structure,options,originalOptions,jqXHR,selection,inspected)));// If we're only executing or nothing was selected // we try the catchall dataType if not done already // unnecessary when only executing (prefilters) // but it'll be ignored by the caller in that case return!executeOnly&&selection||inspected["*"]||(selection=inspectPrefiltersOrTransports(structure,options,originalOptions,jqXHR,"*",inspected)),selection}// A special extend for ajax options // that takes "flat" options (not to be deep extended) // Fixes #9887 function ajaxExtend(target,src){var flatOptions=jQuery.ajaxSettings.flatOptions||{},key,deep;for(key in src)void 0!==src[key]&&((flatOptions[key]?target:deep||(deep={}))[key]=src[key]);deep&&jQuery.extend(!0,target,deep)}function buildParams(prefix,obj,traditional,add){if(jQuery.isArray(obj))// Serialize array item. jQuery.each(obj,function(i,v){traditional||rbracket.test(prefix)?add(prefix,v):buildParams(prefix+"["+("object"==typeof v?i:"")+"]",v,traditional,add)});else if(!traditional&&"object"===jQuery.type(obj))// Serialize object item. for(var name in obj)buildParams(prefix+"["+name+"]",obj[name],traditional,add);else// Serialize scalar item. add(prefix,obj)}// This is still on the jQuery object... for now // Want to move this to jQuery.ajax some day /* Handles responses to an ajax request: * - sets all responseXXX fields accordingly * - finds the right dataType (mediates between content-type and expected dataType) * - returns the corresponding response */function ajaxHandleResponses(s,jqXHR,responses){var contents=s.contents,dataTypes=s.dataTypes,responseFields=s.responseFields,ct,type,finalDataType,firstDataType;// Fill responseXXX fields for(type in responseFields)type in responses&&(jqXHR[responseFields[type]]=responses[type]);// Remove auto dataType and get content-type in the process for(;"*"===dataTypes[0];)dataTypes.shift(),void 0===ct&&(ct=s.mimeType||jqXHR.getResponseHeader("content-type"));// Check if we're dealing with a known content-type if(ct)for(type in contents)if(contents[type]&&contents[type].test(ct)){dataTypes.unshift(type);break}// Check to see if we have a response for the expected dataType if(dataTypes[0]in responses)finalDataType=dataTypes[0];else{// Try convertible dataTypes for(type in responses){if(!dataTypes[0]||s.converters[type+" "+dataTypes[0]]){finalDataType=type;break}firstDataType||(firstDataType=type)}// Or just use first one finalDataType=finalDataType||firstDataType}// If we found a dataType // We add the dataType to the list if needed // and return the corresponding response return finalDataType?(finalDataType!==dataTypes[0]&&dataTypes.unshift(finalDataType),responses[finalDataType]):void 0}// Chain conversions given the request and the original response function ajaxConvert(s,response){s.dataFilter&&(response=s.dataFilter(response,s.dataType));var dataTypes=s.dataTypes,converters={},length=dataTypes.length,// Current and previous dataTypes current=dataTypes[0],i,key,tmp,prev,// Conversion expression conversion,// Conversion function conv,// Conversion functions (transitive conversion) conv1,conv2;// For each dataType in the chain for(i=1;i<length;i++){// Create converters map // with lowercased keys if(1===i)for(key in s.converters)"string"==typeof key&&(converters[key.toLowerCase()]=s.converters[key]);// Get the dataTypes // If current is auto dataType, update it to prev if(prev=current,current=dataTypes[i],"*"===current)current=prev;else if("*"!==prev&&prev!==current){// If there is no direct converter, search transitively if(conversion=prev+" "+current,conv=converters[conversion]||converters["* "+current],!conv)for(conv1 in conv2=void 0,converters)if(tmp=conv1.split(" "),(tmp[0]===prev||"*"===tmp[0])&&(conv2=converters[tmp[1]+" "+current],conv2)){conv1=converters[conv1],!0===conv1?conv=conv2:!0===conv2&&(conv=conv1);break}// If we found no converter, dispatch an error conv||conv2||jQuery.error("No conversion from "+conversion.replace(" "," to ")),!0!==conv&&(response=conv?conv(response):conv2(conv1(response)))}}return response}// Functions to create xhrs function createStandardXHR(){try{return new window.XMLHttpRequest}catch(e){}}function createActiveXHR(){try{return new window.ActiveXObject("Microsoft.XMLHTTP")}catch(e){}}// Create the request object // (This is still attached to ajaxSettings for backward compatibility) // Animations created synchronously will run synchronously function createFxNow(){return setTimeout(clearFxNow,0),fxNow=jQuery.now()}function clearFxNow(){fxNow=void 0}// Generate parameters to create a standard animation function genFx(type,num){var obj={};return jQuery.each(fxAttrs.concat.apply([],fxAttrs.slice(0,num)),function(){obj[this]=type}),obj}// Generate shortcuts for custom animations // Try to restore the default display value of an element function defaultDisplay(nodeName){if(!elemdisplay[nodeName]){var body=document.body,elem=jQuery("<"+nodeName+">").appendTo(body),display=elem.css("display");// Store the correct default display elem.remove(),("none"===display||""===display)&&(!iframe&&(iframe=document.createElement("iframe"),iframe.frameBorder=iframe.width=iframe.height=0),body.appendChild(iframe),(!iframeDoc||!iframe.createElement)&&(iframeDoc=(iframe.contentWindow||iframe.contentDocument).document,iframeDoc.write((jQuery.support.boxModel?"<!doctype html>":"")+"<html><body>"),iframeDoc.close()),elem=iframeDoc.createElement(nodeName),iframeDoc.body.appendChild(elem),display=jQuery.css(elem,"display"),body.removeChild(iframe)),elemdisplay[nodeName]=display}return elemdisplay[nodeName]}function getWindow(elem){return jQuery.isWindow(elem)?elem:!(9!==elem.nodeType)&&(elem.defaultView||elem.parentWindow)}// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods // Use the correct document accordingly with window argument (sandbox) var document=window.document,navigator=window.navigator,location=window.location,jQuery=function(){// The DOM ready check for Internet Explorer function doScrollCheck(){if(!jQuery.isReady){try{document.documentElement.doScroll("left")}catch(e){return void setTimeout(doScrollCheck,1)}// and execute any waiting functions jQuery.ready()}}// Define a local copy of jQuery var jQuery=function jQuery(selector,context){// The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init(selector,context,rootjQuery)},// Map over jQuery in case of overwrite _jQuery=window.jQuery,// Map over the $ in case of overwrite _$=window.$,// A simple way to check for HTML strings or ID strings // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) quickExpr=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,// Check if a string has a non-whitespace character in it rnotwhite=/\S/,// Used for trimming whitespace trimLeft=/^\s+/,trimRight=/\s+$/,// Match a standalone tag rsingleTag=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,// JSON RegExp rvalidchars=/^[\],:{}\s]*$/,rvalidescape=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,rvalidtokens=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,rvalidbraces=/(?:^|:|,)(?:\s*\[)+/g,// Useragent RegExp rwebkit=/(webkit)[ \/]([\w.]+)/,ropera=/(opera)(?:.*version)?[ \/]([\w.]+)/,rmsie=/(msie) ([\w.]+)/,rmozilla=/(mozilla)(?:.*? rv:([\w.]+))?/,// Matches dashed string for camelizing rdashAlpha=/-([a-z]|[0-9])/gi,rmsPrefix=/^-ms-/,// Used by jQuery.camelCase as callback to replace() fcamelCase=function fcamelCase(all,letter){return(letter+"").toUpperCase()},// Keep a UserAgent string for use with jQuery.browser userAgent=navigator.userAgent,// Save a reference to some core methods toString=Object.prototype.toString,hasOwn=Object.prototype.hasOwnProperty,push=Array.prototype.push,_slice=Array.prototype.slice,trim=String.prototype.trim,indexOf=Array.prototype.indexOf,// [[Class]] -> type pairs class2type={},// A central reference to the root jQuery(document) rootjQuery,// For matching the engine and version of the browser browserMatch,// The deferred used on DOM ready readyList,// The ready event handler _DOMContentLoaded2;return jQuery.fn=jQuery.prototype={constructor:jQuery,init:function init(selector,context,rootjQuery){var match,elem,ret,doc;// Handle $(""), $(null), or $(undefined) if(!selector)return this;// Handle $(DOMElement) if(selector.nodeType)return this.context=this[0]=selector,this.length=1,this;// The body element only exists once, optimize finding it if("body"===selector&&!context&&document.body)return this.context=document,this[0]=document.body,this.selector=selector,this.length=1,this;// Handle HTML strings if("string"==typeof selector){// Verify a match, and that no context was specified for #id if(match="<"===selector.charAt(0)&&">"===selector.charAt(selector.length-1)&&3<=selector.length?[null,selector,null]:quickExpr.exec(selector),match&&(match[1]||!context)){// HANDLE: $(html) -> $(array) if(match[1])return context=context instanceof jQuery?context[0]:context,doc=context?context.ownerDocument||context:document,ret=rsingleTag.exec(selector),ret?jQuery.isPlainObject(context)?(selector=[document.createElement(ret[1])],jQuery.fn.attr.call(selector,context,!0)):selector=[doc.createElement(ret[1])]:(ret=jQuery.buildFragment([match[1]],[doc]),selector=(ret.cacheable?jQuery.clone(ret.fragment):ret.fragment).childNodes),jQuery.merge(this,selector);// HANDLE: $("#id") // HANDLE: $(expr, $(...)) // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if(elem=document.getElementById(match[2]),elem&&elem.parentNode){// Handle the case where IE and Opera return items // by name instead of ID if(elem.id!==match[2])return rootjQuery.find(selector);// Otherwise, we inject the element directly into the jQuery object this.length=1,this[0]=elem}return this.context=document,this.selector=selector,this}// HANDLE: $(function) // Shortcut for document ready return!context||context.jquery?(context||rootjQuery).find(selector):this.constructor(context).find(selector)}return jQuery.isFunction(selector)?rootjQuery.ready(selector):(void 0!==selector.selector&&(this.selector=selector.selector,this.context=selector.context),jQuery.makeArray(selector,this))},// Start with an empty selector selector:"",// The current version of jQuery being used jquery:"1.7.2",// The default length of a jQuery object is 0 length:0,// The number of elements contained in the matched element set size:function size(){return this.length},toArray:function toArray(){return _slice.call(this,0)},// Get the Nth element in the matched element set OR // Get the whole matched element set as a clean array get:function get(num){return null==num?// Return a 'clean' array this.toArray():// Return just the object 0>num?this[this.length+num]:this[num]},// Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack:function pushStack(elems,name,selector){// Build a new jQuery matched element set var ret=this.constructor();// Return the newly-formed element set return jQuery.isArray(elems)?push.apply(ret,elems):jQuery.merge(ret,elems),ret.prevObject=this,ret.context=this.context,"find"===name?ret.selector=this.selector+(this.selector?" ":"")+selector:name&&(ret.selector=this.selector+"."+name+"("+selector+")"),ret},// Execute a callback for every element in the matched set. // (You can seed the arguments with an array of args, but this is // only used internally.) each:function each(callback,args){return jQuery.each(this,callback,args)},ready:function ready(fn){return jQuery.bindReady(),readyList.add(fn),this},eq:function eq(i){return i=+i,-1===i?this.slice(i):this.slice(i,i+1)},first:function first(){return this.eq(0)},last:function last(){return this.eq(-1)},slice:function slice(){return this.pushStack(_slice.apply(this,arguments),"slice",_slice.call(arguments).join(","))},map:function map(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem)}))},end:function end(){return this.prevObject||this.constructor(null)},// For internal use only. // Behaves like an Array's method, not like a jQuery method. push:push,sort:[].sort,splice:[].splice},jQuery.fn.init.prototype=jQuery.fn,jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=!1,options,name,src,copy,copyIsArray,clone;// Handle a deep copy situation for("boolean"==typeof target&&(deep=target,target=arguments[1]||{},i=2),"object"==typeof target||jQuery.isFunction(target)||(target={}),length===i&&(target=this,--i);i<length;i++)// Only deal with non-null/undefined values if(null!=(options=arguments[i]))// Extend the base object for(name in options)// Prevent never-ending loop (src=target[name],copy=options[name],target!==copy)&&(deep&©&&(jQuery.isPlainObject(copy)||(copyIsArray=jQuery.isArray(copy)))?(copyIsArray?(copyIsArray=!1,clone=src&&jQuery.isArray(src)?src:[]):clone=src&&jQuery.isPlainObject(src)?src:{},target[name]=jQuery.extend(deep,clone,copy)):void 0!==copy&&(target[name]=copy));// Recurse if we're merging plain objects or arrays // Return the modified object return target},jQuery.extend({noConflict:function noConflict(deep){return window.$===jQuery&&(window.$=_$),deep&&window.jQuery===jQuery&&(window.jQuery=_jQuery),jQuery},// Is the DOM ready to be used? Set to true once it occurs. isReady:!1,// A counter to track how many items to wait for before // the ready event fires. See #6781 readyWait:1,// Hold (or release) the ready event holdReady:function holdReady(hold){hold?jQuery.readyWait++:jQuery.ready(!0)},// Handle when the DOM is ready ready:function ready(wait){// Either a released hold or an DOMready/load event and not yet ready if(!0===wait&&! --jQuery.readyWait||!0!==wait&&!jQuery.isReady){// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if(!document.body)return setTimeout(jQuery.ready,1);// Remember that the DOM is ready // If a normal DOM Ready event fired, decrement, and wait if need be if(jQuery.isReady=!0,!0!==wait&&0<--jQuery.readyWait)return;// If there are functions bound, to execute readyList.fireWith(document,[jQuery]),jQuery.fn.trigger&&jQuery(document).trigger("ready").off("ready")}},bindReady:function bindReady(){if(!readyList){// Catch cases where $(document).ready() is called after the // browser event has already occurred. if(readyList=jQuery.Callbacks("once memory"),"complete"===document.readyState)// Handle it asynchronously to allow scripts the opportunity to delay ready return setTimeout(jQuery.ready,1);// Mozilla, Opera and webkit nightlies currently support this event if(document.addEventListener)document.addEventListener("DOMContentLoaded",_DOMContentLoaded2,!1),window.addEventListener("load",jQuery.ready,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange",_DOMContentLoaded2),window.attachEvent("onload",jQuery.ready);// If IE and not a frame // continually check to see if the document is ready var toplevel=!1;try{toplevel=null==window.frameElement}catch(e){}document.documentElement.doScroll&&toplevel&&doScrollCheck()}}},// See test/unit/core.js for details concerning isFunction. // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction:function isFunction(obj){return"function"===jQuery.type(obj)},isArray:Array.isArray||function(obj){return"array"===jQuery.type(obj)},isWindow:function isWindow(obj){return null!=obj&&obj==obj.window},isNumeric:function isNumeric(obj){return!isNaN(parseFloat(obj))&&isFinite(obj)},type:function type(obj){return null==obj?obj+"":class2type[toString.call(obj)]||"object"},isPlainObject:function isPlainObject(obj){// Must be an Object. // Because of IE, we also have to check the presence of the constructor property. // Make sure that DOM nodes and window objects don't pass through, as well if(!obj||"object"!==jQuery.type(obj)||obj.nodeType||jQuery.isWindow(obj))return!1;try{// Not own constructor property must be Object if(obj.constructor&&!hasOwn.call(obj,"constructor")&&!hasOwn.call(obj.constructor.prototype,"isPrototypeOf"))return!1}catch(e){// IE8,9 Will throw exceptions on certain host objects #9897 return!1}// Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own. var key;for(key in obj);return void 0===key||hasOwn.call(obj,key)},isEmptyObject:function isEmptyObject(obj){for(var name in obj)return!1;return!0},error:function error(msg){throw new Error(msg)},parseJSON:function parseJSON(data){return"string"==typeof data&&data?(data=jQuery.trim(data),window.JSON&&window.JSON.parse?window.JSON.parse(data):rvalidchars.test(data.replace(rvalidescape,"@").replace(rvalidtokens,"]").replace(rvalidbraces,""))?new Function("return "+data)():void jQuery.error("Invalid JSON: "+data)):null;// Make sure leading/trailing whitespace is removed (IE can't handle it) // Make sure the incoming data is actual JSON // Logic borrowed from http://json.org/json2.js },// Cross-browser xml parsing parseXML:function parseXML(data){if("string"!=typeof data||!data)return null;var xml,tmp;try{window.DOMParser?(tmp=new DOMParser,xml=tmp.parseFromString(data,"text/xml")):(xml=new ActiveXObject("Microsoft.XMLDOM"),xml.async="false",xml.loadXML(data))}catch(e){xml=void 0}return xml&&xml.documentElement&&!xml.getElementsByTagName("parsererror").length||jQuery.error("Invalid XML: "+data),xml},noop:function noop(){},// Evaluates a script in a global context // Workarounds based on findings by Jim Driscoll // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context globalEval:function globalEval(data){data&&rnotwhite.test(data)&&(window.execScript||function(data){window.eval.call(window,data)})(data)},// Convert dashed to camelCase; used by the css and data modules // Microsoft forgot to hump their vendor prefix (#9572) camelCase:function camelCase(string){return string.replace(rmsPrefix,"ms-").replace(rdashAlpha,fcamelCase)},nodeName:function nodeName(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()===name.toUpperCase()},// args is for internal usage only each:function each(object,callback,args){var i=0,length=object.length,isObj=void 0===length||jQuery.isFunction(object),name;if(args){if(isObj){for(name in object)if(!1===callback.apply(object[name],args))break;}else for(;i<length&&!1!==callback.apply(object[i++],args););// A special, fast, case for the most common use of each }else if(isObj){for(name in object)if(!1===callback.call(object[name],name,object[name]))break;}else for(;i<length&&!1!==callback.call(object[i],i,object[i++]););return object},// Use native String.trim function wherever possible trim:trim?function(text){return null==text?"":trim.call(text)}:// Otherwise use our own trimming functionality function(text){return null==text?"":text.toString().replace(trimLeft,"").replace(trimRight,"")},// results is for internal usage only makeArray:function makeArray(array,results){var ret=results||[];if(null!=array){// The window, strings (and functions) also have 'length' // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 var type=jQuery.type(array);null==array.length||"string"===type||"function"===type||"regexp"===type||jQuery.isWindow(array)?push.call(ret,array):jQuery.merge(ret,array)}return ret},inArray:function inArray(elem,array,i){var len;if(array){if(indexOf)return indexOf.call(array,elem,i);for(len=array.length,i=i?0>i?Math.max(0,len+i):i:0;i<len;i++)// Skip accessing in sparse arrays if(i in array&&array[i]===elem)return i}return-1},merge:function merge(first,second){var i=first.length,j=0;if("number"==typeof second.length)for(var l=second.length;j<l;j++)first[i++]=second[j];else for(;void 0!==second[j];)first[i++]=second[j++];return first.length=i,first},grep:function grep(elems,callback,inv){var ret=[],retVal;inv=!!inv;// Go through the array, only saving the items // that pass the validator function for(var i=0,length=elems.length;i<length;i++)retVal=!!callback(elems[i],i),inv!==retVal&&ret.push(elems[i]);return ret},// arg is for internal usage only map:function map(elems,callback,arg){var ret=[],i=0,length=elems.length,// jquery objects are treated as arrays isArray=elems instanceof jQuery||void 0!==length&&"number"==typeof length&&(0<length&&elems[0]&&elems[length-1]||0===length||jQuery.isArray(elems)),value,key;// Go through the array, translating each of the items to their if(isArray)for(;i<length;i++)value=callback(elems[i],i,arg),null!=value&&(ret[ret.length]=value);// Go through every key on the object, else for(key in elems)value=callback(elems[key],key,arg),null!=value&&(ret[ret.length]=value);// Flatten any nested arrays return ret.concat.apply([],ret)},// A global GUID counter for objects guid:1,// Bind a function to a context, optionally partially applying any // arguments. proxy:function proxy(fn,context){if("string"==typeof context){var tmp=fn[context];context=fn,fn=tmp}// Quick check to determine if target is callable, in the spec // this throws a TypeError, but we will just return undefined. if(jQuery.isFunction(fn)){// Simulated bind var args=_slice.call(arguments,2),proxy=function proxy(){return fn.apply(context,args.concat(_slice.call(arguments)))};// Set the guid of unique handler to the same of original handler, so it can be removed return proxy.guid=fn.guid=fn.guid||proxy.guid||jQuery.guid++,proxy}},// Mutifunctional method to get and set values to a collection // The value/s can optionally be executed if it's a function access:function access(elems,fn,key,value,chainable,emptyGet,pass){var bulk=null==key,i=0,length=elems.length,exec;// Sets many values if(key&&"object"==typeof key){for(i in key)jQuery.access(elems,fn,i,key[i],1,emptyGet,value);chainable=1}else if(void 0!==value){if(exec=void 0===pass&&jQuery.isFunction(value),bulk&&(exec?(exec=fn,fn=function fn(elem,key,value){return exec.call(jQuery(elem),value)}):(fn.call(elems,value),fn=null)),fn)for(;i<length;i++)fn(elems[i],key,exec?value.call(elems[i],i,fn(elems[i],key)):value,pass);chainable=1}return chainable?elems:// Gets bulk?fn.call(elems):length?fn(elems[0],key):emptyGet},now:function now(){return new Date().getTime()},// Use of jQuery.browser is frowned upon. // More details: http://docs.jquery.com/Utilities/jQuery.browser uaMatch:function uaMatch(ua){ua=ua.toLowerCase();var match=rwebkit.exec(ua)||ropera.exec(ua)||rmsie.exec(ua)||0>ua.indexOf("compatible")&&rmozilla.exec(ua)||[];return{browser:match[1]||"",version:match[2]||"0"}},sub:function sub(){function jQuerySub(selector,context){return new jQuerySub.fn.init(selector,context)}jQuery.extend(!0,jQuerySub,this),jQuerySub.superclass=this,jQuerySub.fn=jQuerySub.prototype=this(),jQuerySub.fn.constructor=jQuerySub,jQuerySub.sub=this.sub,jQuerySub.fn.init=function init(selector,context){return context&&context instanceof jQuery&&!(context instanceof jQuerySub)&&(context=jQuerySub(context)),jQuery.fn.init.call(this,selector,context,rootjQuerySub)},jQuerySub.fn.init.prototype=jQuerySub.fn;var rootjQuerySub=jQuerySub(document);return jQuerySub},browser:{}}),jQuery.each(["Boolean","Number","String","Function","Array","Date","RegExp","Object"],function(i,name){class2type["[object "+name+"]"]=name.toLowerCase()}),browserMatch=jQuery.uaMatch(userAgent),browserMatch.browser&&(jQuery.browser[browserMatch.browser]=!0,jQuery.browser.version=browserMatch.version),jQuery.browser.webkit&&(jQuery.browser.safari=!0),rnotwhite.test("\xA0")&&(trimLeft=/^[\s\xA0]+/,trimRight=/[\s\xA0]+$/),rootjQuery=jQuery(document),document.addEventListener?_DOMContentLoaded2=function DOMContentLoaded(){document.removeEventListener("DOMContentLoaded",_DOMContentLoaded2,!1),jQuery.ready()}:document.attachEvent&&(_DOMContentLoaded2=function _DOMContentLoaded(){"complete"===document.readyState&&(document.detachEvent("onreadystatechange",_DOMContentLoaded2),jQuery.ready())}),jQuery}(),flagsCache={};jQuery.Callbacks=function(flags){flags=flags?flagsCache[flags]||createFlags(flags):{};var// Actual callback list list=[],// Stack of fire calls for repeatable lists stack=[],// Add one or several callbacks to the list _add=function add(args){var i,length,elem,type,actual;for(i=0,length=args.length;i<length;i++)elem=args[i],type=jQuery.type(elem),"array"===type?_add(elem):"function"===type&&(!flags.unique||!self.has(elem))&&list.push(elem)},// Fire callbacks fire=function fire(context,args){for(args=args||[],memory=!flags.memory||[context,args],_fired=!0,firing=!0,firingIndex=firingStart||0,firingStart=0,firingLength=list.length;list&&firingIndex<firingLength;firingIndex++)if(!1===list[firingIndex].apply(context,args)&&flags.stopOnFalse){memory=!0;// Mark as halted break}firing=!1,list&&(flags.once?!0===memory?self.disable():list=[]:stack&&stack.length&&(memory=stack.shift(),self.fireWith(memory[0],memory[1])))},// Actual Callbacks object self={// Add a callback or a collection of callbacks to the list add:function add(){if(list){var length=list.length;_add(arguments),firing?firingLength=list.length:memory&&!0!==memory&&(firingStart=length,fire(memory[0],memory[1]))}return this},// Remove a callback from the list remove:function remove(){if(list)for(var args=arguments,argIndex=0,argLength=args.length;argIndex<argLength;argIndex++)for(var i=0;i<list.length&&!(args[argIndex]===list[i]&&(firing&&i<=firingLength&&(firingLength--,i<=firingIndex&&firingIndex--),list.splice(i--,1),flags.unique));i++);return this},// Control if a given callback is in the list has:function has(fn){if(list)for(var i=0,length=list.length;i<length;i++)if(fn===list[i])return!0;return!1},// Remove all callbacks from the list empty:function empty(){return list=[],this},// Have the list do nothing anymore disable:function disable(){return list=stack=memory=void 0,this},// Is it disabled? disabled:function disabled(){return!list},// Lock the list in its current state lock:function lock(){return stack=void 0,memory&&!0!==memory||self.disable(),this},// Is it locked? locked:function locked(){return!stack},// Call all callbacks with the given context and arguments fireWith:function fireWith(context,args){return stack&&(firing?!flags.once&&stack.push([context,args]):!(flags.once&&memory)&&fire(context,args)),this},// Call all the callbacks with the given arguments fire:function fire(){return self.fireWith(this,arguments),this},// To know if the callbacks have already been called at least once fired:function fired(){return!!_fired}},// Last fire value (for non-forgettable lists) memory,// Flag to know if list was already fired _fired,// Flag to know if list is currently firing firing,// First callback to fire (used internally by add and fireWith) firingStart,// End of the loop when firing firingLength,// Index of currently firing callback (modified by remove if needed) firingIndex;return self};var// Static reference to slice sliceDeferred=[].slice;jQuery.extend({Deferred:function Deferred(func){var doneList=jQuery.Callbacks("once memory"),failList=jQuery.Callbacks("once memory"),progressList=jQuery.Callbacks("memory"),_state="pending",lists={resolve:doneList,reject:failList,notify:progressList},_promise={done:doneList.add,fail:failList.add,progress:progressList.add,state:function state(){return _state},// Deprecated isResolved:doneList.fired,isRejected:failList.fired,then:function then(doneCallbacks,failCallbacks,progressCallbacks){return deferred.done(doneCallbacks).fail(failCallbacks).progress(progressCallbacks),this},always:function always(){return deferred.done.apply(deferred,arguments).fail.apply(deferred,arguments),this},pipe:function pipe(fnDone,fnFail,fnProgress){return jQuery.Deferred(function(newDefer){jQuery.each({done:[fnDone,"resolve"],fail:[fnFail,"reject"],progress:[fnProgress,"notify"]},function(handler,data){var fn=data[0],action=data[1],returned;jQuery.isFunction(fn)?deferred[handler](function(){returned=fn.apply(this,arguments),returned&&jQuery.isFunction(returned.promise)?returned.promise().then(newDefer.resolve,newDefer.reject,newDefer.notify):newDefer[action+"With"](this===deferred?newDefer:this,[returned])}):deferred[handler](newDefer[action])})}).promise()},// Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise:function promise(obj){if(null==obj)obj=_promise;else for(var key in _promise)obj[key]=_promise[key];return obj}},deferred=_promise.promise({}),key;for(key in lists)deferred[key]=lists[key].fire,deferred[key+"With"]=lists[key].fireWith;// Handle state // All done! return deferred.done(function(){_state="resolved"},failList.disable,progressList.lock).fail(function(){_state="rejected"},doneList.disable,progressList.lock),func&&func.call(deferred,deferred),deferred},// Deferred helper when:function when(firstParam){function resolveFunc(i){return function(value){args[i]=1<arguments.length?sliceDeferred.call(arguments,0):value,--count||deferred.resolveWith(deferred,args)}}function progressFunc(i){return function(value){pValues[i]=1<arguments.length?sliceDeferred.call(arguments,0):value,deferred.notifyWith(promise,pValues)}}var args=sliceDeferred.call(arguments,0),i=0,length=args.length,pValues=Array(length),count=length,pCount=length,deferred=1>=length&&firstParam&&jQuery.isFunction(firstParam.promise)?firstParam:jQuery.Deferred(),promise=deferred.promise();if(1<length){for(;i<length;i++)args[i]&&args[i].promise&&jQuery.isFunction(args[i].promise)?args[i].promise().then(resolveFunc(i),deferred.reject,progressFunc(i)):--count;count||deferred.resolveWith(deferred,args)}else deferred!==firstParam&&deferred.resolveWith(deferred,length?[firstParam]:[]);return promise}}),jQuery.support=function(){var div=document.createElement("div"),documentElement=document.documentElement,support,all,a,select,opt,input,fragment,tds,events,eventName,i,isSupported;// Preliminary tests // Can't get basic test support if(div.setAttribute("className","t"),div.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",all=div.getElementsByTagName("*"),a=div.getElementsByTagName("a")[0],!all||!all.length||!a)return{};// First batch of supports tests select=document.createElement("select"),opt=select.appendChild(document.createElement("option")),input=div.getElementsByTagName("input")[0],support={// IE strips leading whitespace when .innerHTML is used leadingWhitespace:3===div.firstChild.nodeType,// Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables tbody:!div.getElementsByTagName("tbody").length,// Make sure that link elements get serialized correctly by innerHTML // This requires a wrapper element in IE htmlSerialize:!!div.getElementsByTagName("link").length,// Get the style information from getAttribute // (IE uses .cssText instead) style:/top/.test(a.getAttribute("style")),// Make sure that URLs aren't manipulated // (IE normalizes it by default) hrefNormalized:"/a"===a.getAttribute("href"),// Make sure that element opacity exists // (IE uses filter instead) // Use a regex to work around a WebKit issue. See #5145 opacity:/^0.55/.test(a.style.opacity),// Verify style float existence // (IE uses styleFloat instead of cssFloat) cssFloat:!!a.style.cssFloat,// Make sure that if no value is specified for a checkbox // that it defaults to "on". // (WebKit defaults to "" instead) checkOn:"on"===input.value,// Make sure that a selected-by-default option has a working selected property. // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) optSelected:opt.selected,// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) getSetAttribute:"t"!==div.className,// Tests for enctype support on a form(#6743) enctype:!!document.createElement("form").enctype,// Makes sure cloning an html5 element does not cause problems // Where outerHTML is undefined, this still works html5Clone:"<:nav></:nav>"!==document.createElement("nav").cloneNode(!0).outerHTML,// Will be defined later submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},jQuery.boxModel=support.boxModel="CSS1Compat"===document.compatMode,input.checked=!0,support.noCloneChecked=input.cloneNode(!0).checked,select.disabled=!0,support.optDisabled=!opt.disabled;// Test to see if it's possible to delete an expando from an element // Fails in Internet Explorer try{delete div.test}catch(e){support.deleteExpando=!1}// Technique from Juriy Zaytsev // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ // We only care about the case where non-standard event systems // are used, namely in IE. Short-circuiting here helps us to // avoid an eval call (in setAttribute) which can cause CSP // to go haywire. See: https://developer.mozilla.org/en/Security/CSP if(!div.addEventListener&&div.attachEvent&&div.fireEvent&&(div.attachEvent("onclick",function(){support.noCloneEvent=!1}),div.cloneNode(!0).fireEvent("onclick")),input=document.createElement("input"),input.value="t",input.setAttribute("type","radio"),support.radioValue="t"===input.value,input.setAttribute("checked","checked"),input.setAttribute("name","t"),div.appendChild(input),fragment=document.createDocumentFragment(),fragment.appendChild(div.lastChild),support.checkClone=fragment.cloneNode(!0).cloneNode(!0).lastChild.checked,support.appendChecked=input.checked,fragment.removeChild(input),fragment.appendChild(div),div.attachEvent)for(i in{submit:1,change:1,focusin:1})eventName="on"+i,isSupported=eventName in div,isSupported||(div.setAttribute(eventName,"return;"),isSupported="function"==typeof div[eventName]),support[i+"Bubbles"]=isSupported;return fragment.removeChild(div),fragment=select=opt=div=input=null,jQuery(function(){var body=document.getElementsByTagName("body")[0],container,outer,inner,table,td,offsetSupport,marginDiv,conMarginTop,style,html,positionTopLeftWidthHeight,paddingMarginBorderVisibility,paddingMarginBorder;body&&(// Construct the test element // Check if table cells still have offsetWidth/Height when they are set // to display:none and there are still other visible table cells in a // table row; if so, offsetWidth/Height are not reliable for use when // determining if an element has been hidden directly using // display:none (it is still safe to use offsets if a parent element is // hidden; don safety goggles and see bug #4512 for more information). // (only IE 8 fails this test) // Check if empty table cells still have offsetWidth/Height // (IE <= 8 fail this test) // safari subtracts parent border width here which is 5px conMarginTop=1,paddingMarginBorder="padding:0;margin:0;border:",positionTopLeftWidthHeight="position:absolute;top:0;left:0;width:1px;height:1px;",paddingMarginBorderVisibility=paddingMarginBorder+"0;visibility:hidden;",style="style='"+positionTopLeftWidthHeight+paddingMarginBorder+"5px solid #000;",html="<div "+style+"display:block;'><div style='"+paddingMarginBorder+"0;display:block;overflow:hidden;'></div></div><table "+style+"' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>",container=document.createElement("div"),container.style.cssText=paddingMarginBorderVisibility+"width:0;height:0;position:static;top:0;margin-top:"+conMarginTop+"px",body.insertBefore(container,body.firstChild),div=document.createElement("div"),container.appendChild(div),div.innerHTML="<table><tr><td style='"+paddingMarginBorder+"0;display:none'></td><td>t</td></tr></table>",tds=div.getElementsByTagName("td"),isSupported=0===tds[0].offsetHeight,tds[0].style.display="",tds[1].style.display="none",support.reliableHiddenOffsets=isSupported&&0===tds[0].offsetHeight,window.getComputedStyle&&(div.innerHTML="",marginDiv=document.createElement("div"),marginDiv.style.width="0",marginDiv.style.marginRight="0",div.style.width="2px",div.appendChild(marginDiv),support.reliableMarginRight=0===(parseInt((window.getComputedStyle(marginDiv,null)||{marginRight:0}).marginRight,10)||0)),"undefined"!=typeof div.style.zoom&&(div.innerHTML="",div.style.width=div.style.padding="1px",div.style.border=0,div.style.overflow="hidden",div.style.display="inline",div.style.zoom=1,support.inlineBlockNeedsLayout=3===div.offsetWidth,div.style.display="block",div.style.overflow="visible",div.innerHTML="<div style='width:5px;'></div>",support.shrinkWrapBlocks=3!==div.offsetWidth),div.style.cssText=positionTopLeftWidthHeight+paddingMarginBorderVisibility,div.innerHTML=html,outer=div.firstChild,inner=outer.firstChild,td=outer.nextSibling.firstChild.firstChild,offsetSupport={doesNotAddBorder:5!==inner.offsetTop,doesAddBorderForTableAndCells:5===td.offsetTop},inner.style.position="fixed",inner.style.top="20px",offsetSupport.fixedPosition=20===inner.offsetTop||15===inner.offsetTop,inner.style.position=inner.style.top="",outer.style.overflow="hidden",outer.style.position="relative",offsetSupport.subtractsBorderForOverflowNotVisible=-5===inner.offsetTop,offsetSupport.doesNotIncludeMarginInBodyOffset=body.offsetTop!==conMarginTop,window.getComputedStyle&&(div.style.marginTop="1%",support.pixelMargin="1%"!==(window.getComputedStyle(div,null)||{marginTop:0}).marginTop),"undefined"!=typeof container.style.zoom&&(container.style.zoom=1),body.removeChild(container),marginDiv=div=container=null,jQuery.extend(support,offsetSupport))}),support}();var rbrace=/^(?:\{.*\}|\[.*\])$/,rmultiDash=/([A-Z])/g;jQuery.extend({cache:{},// Please use with caution uuid:0,// Unique for each copy of jQuery on the page // Non-digits removed to match rinlinejQuery expando:"jQuery"+(jQuery.fn.jquery+Math.random()).replace(/\D/g,""),// The following elements throw uncatchable exceptions if you // attempt to add expando properties to them. noData:{embed:!0,// Ban all objects except for Flash (which handle expandos) object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function hasData(elem){return elem=elem.nodeType?jQuery.cache[elem[jQuery.expando]]:elem[jQuery.expando],!!elem&&!isEmptyDataObject(elem)},data:function data(elem,name,_data,pvt/* Internal Use Only */){if(jQuery.acceptData(elem)){var internalKey=jQuery.expando,getByName="string"==typeof name,// We have to handle DOM nodes and JS objects differently because IE6-7 // can't GC object references properly across the DOM-JS boundary isNode=elem.nodeType,// Only DOM nodes need the global jQuery cache; JS object data is // attached directly to the object so GC can occur automatically cache=isNode?jQuery.cache:elem,// Only defining an ID for JS objects if its cache already exists allows // the code to shortcut on the same path as a DOM node with no cache id=isNode?elem[internalKey]:elem[internalKey]&&internalKey,isEvents="events"===name,privateCache,thisCache,ret;// Avoid doing any more work than we need to when trying to get data on an // object that has no data at all if(id&&cache[id]&&(isEvents||pvt||cache[id].data)||!getByName||void 0!==_data)// Users should not attempt to inspect the internal events object using jQuery.data, // it is undocumented and subject to change. But does anyone listen? No. return(id||(isNode?elem[internalKey]=id=++jQuery.uuid:id=internalKey),cache[id]||(cache[id]={},!isNode&&(cache[id].toJSON=jQuery.noop)),("object"==typeof name||"function"==typeof name)&&(pvt?cache[id]=jQuery.extend(cache[id],name):cache[id].data=jQuery.extend(cache[id].data,name)),privateCache=thisCache=cache[id],pvt||(!thisCache.data&&(thisCache.data={}),thisCache=thisCache.data),void 0!==_data&&(thisCache[jQuery.camelCase(name)]=_data),isEvents&&!thisCache[name])?privateCache.events:(getByName?(ret=thisCache[name],null==ret&&(ret=thisCache[jQuery.camelCase(name)])):ret=thisCache,ret);// Check for both converted-to-camel and non-converted data property names // If a data property was specified }},removeData:function removeData(elem,name,pvt/* Internal Use Only */){if(jQuery.acceptData(elem)){var// Reference to internal data cache key internalKey=jQuery.expando,isNode=elem.nodeType,// See jQuery.data for more information cache=isNode?jQuery.cache:elem,// See jQuery.data for more information id=isNode?elem[internalKey]:internalKey,thisCache,i,l;// If there is already no cache entry for this object, there is no // purpose in continuing if(cache[id]){if(name&&(thisCache=pvt?cache[id]:cache[id].data,thisCache)){for(jQuery.isArray(name)||((name in thisCache)?name=[name]:(name=jQuery.camelCase(name),name=(name in thisCache)?[name]:name.split(" "))),i=0,l=name.length;i<l;i++)delete thisCache[name[i]];// If there is no data left in the cache, we want to continue // and let the cache object itself get destroyed if(!(pvt?isEmptyDataObject:jQuery.isEmptyObject)(thisCache))return}// See jQuery.data for more information !pvt&&(delete cache[id].data,!isEmptyDataObject(cache[id]))||(jQuery.support.deleteExpando||!cache.setInterval?delete cache[id]:cache[id]=null,isNode&&(jQuery.support.deleteExpando?delete elem[internalKey]:elem.removeAttribute?elem.removeAttribute(internalKey):elem[internalKey]=null))}// Browsers that fail expando deletion also refuse to delete expandos on // the window, but it will allow it on all other JS objects; other browsers // don't care // Ensure that `cache` is not a window object #10080 }},// For internal use only. _data:function _data(elem,name,data){return jQuery.data(elem,name,data,!0)},// A method for determining if a DOM node can handle the data expando acceptData:function acceptData(elem){if(elem.nodeName){var match=jQuery.noData[elem.nodeName.toLowerCase()];if(match)return!0!==match&&elem.getAttribute("classid")===match}return!0}}),jQuery.fn.extend({data:function data(key,value){var elem=this[0],i=0,data=null,parts,part,attr,name,l;// Gets all values if(void 0===key){if(this.length&&(data=jQuery.data(elem),1===elem.nodeType&&!jQuery._data(elem,"parsedAttrs"))){for(attr=elem.attributes,l=attr.length;i<l;i++)name=attr[i].name,0===name.indexOf("data-")&&(name=jQuery.camelCase(name.substring(5)),dataAttr(elem,name,data[name]));jQuery._data(elem,"parsedAttrs",!0)}return data}// Sets multiple values return"object"==typeof key?this.each(function(){jQuery.data(this,key)}):(parts=key.split(".",2),parts[1]=parts[1]?"."+parts[1]:"",part=parts[1]+"!",jQuery.access(this,function(value){return void 0===value?(data=this.triggerHandler("getData"+part,[parts[0]]),void 0===data&&elem&&(data=jQuery.data(elem,key),data=dataAttr(elem,key,data)),void 0===data&&parts[1]?this.data(parts[0]):data):void(parts[1]=value,this.each(function(){var self=jQuery(this);self.triggerHandler("setData"+part,parts),jQuery.data(this,key,value),self.triggerHandler("changeData"+part,parts)}))},null,value,1<arguments.length,null,!1))},removeData:function removeData(key){return this.each(function(){jQuery.removeData(this,key)})}}),jQuery.extend({_mark:function _mark(elem,type){elem&&(type=(type||"fx")+"mark",jQuery._data(elem,type,(jQuery._data(elem,type)||0)+1))},_unmark:function _unmark(force,elem,type){if(!0!==force&&(type=elem,elem=force,force=!1),elem){type=type||"fx";var key=type+"mark",count=force?0:(jQuery._data(elem,key)||1)-1;count?jQuery._data(elem,key,count):(jQuery.removeData(elem,key,!0),handleQueueMarkDefer(elem,type,"mark"))}},queue:function queue(elem,type,data){var q;if(elem)return type=(type||"fx")+"queue",q=jQuery._data(elem,type),data&&(!q||jQuery.isArray(data)?q=jQuery._data(elem,type,jQuery.makeArray(data)):q.push(data)),q||[]},dequeue:function dequeue(elem,type){type=type||"fx";var queue=jQuery.queue(elem,type),fn=queue.shift(),hooks={};// If the fx queue is dequeued, always remove the progress sentinel "inprogress"===fn&&(fn=queue.shift()),fn&&("fx"===type&&queue.unshift("inprogress"),jQuery._data(elem,type+".run",hooks),fn.call(elem,function(){jQuery.dequeue(elem,type)},hooks)),queue.length||(jQuery.removeData(elem,type+"queue "+type+".run",!0),handleQueueMarkDefer(elem,type,"queue"))}}),jQuery.fn.extend({queue:function queue(type,data){var setter=2;return"string"!=typeof type&&(data=type,type="fx",setter--),arguments.length<setter?jQuery.queue(this[0],type):void 0===data?this:this.each(function(){var queue=jQuery.queue(this,type,data);"fx"===type&&"inprogress"!==queue[0]&&jQuery.dequeue(this,type)})},dequeue:function dequeue(type){return this.each(function(){jQuery.dequeue(this,type)})},// Based off of the plugin by Clint Helfers, with permission. // http://blindsignals.com/index.php/2009/07/jquery-delay/ delay:function delay(time,type){return time=jQuery.fx?jQuery.fx.speeds[time]||time:time,type=type||"fx",this.queue(type,function(next,hooks){var timeout=setTimeout(next,time);hooks.stop=function(){clearTimeout(timeout)}})},clearQueue:function clearQueue(type){return this.queue(type||"fx",[])},// Get a promise resolved when queues of a certain type // are emptied (fx is the type by default) promise:function promise(type,object){function resolve(){--count||defer.resolveWith(elements,[elements])}"string"!=typeof type&&(object=type,type=void 0),type=type||"fx";for(var defer=jQuery.Deferred(),elements=this,i=elements.length,count=1,deferDataKey=type+"defer",queueDataKey=type+"queue",markDataKey=type+"mark",tmp;i--;)(tmp=jQuery.data(elements[i],deferDataKey,void 0,!0)||(jQuery.data(elements[i],queueDataKey,void 0,!0)||jQuery.data(elements[i],markDataKey,void 0,!0))&&jQuery.data(elements[i],deferDataKey,jQuery.Callbacks("once memory"),!0))&&(count++,tmp.add(resolve));return resolve(),defer.promise(object)}});var rclass=/[\n\t\r]/g,rspace=/\s+/,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,nodeHook,boolHook,fixSpecified;jQuery.fn.extend({attr:function attr(name,value){return jQuery.access(this,jQuery.attr,name,value,1<arguments.length)},removeAttr:function removeAttr(name){return this.each(function(){jQuery.removeAttr(this,name)})},prop:function prop(name,value){return jQuery.access(this,jQuery.prop,name,value,1<arguments.length)},removeProp:function removeProp(name){return name=jQuery.propFix[name]||name,this.each(function(){// try/catch handles cases where IE balks (such as removing a property on window) try{this[name]=void 0,delete this[name]}catch(e){}})},addClass:function addClass(value){var classNames,i,l,elem,setClass,c,cl;if(jQuery.isFunction(value))return this.each(function(j){jQuery(this).addClass(value.call(this,j,this.className))});if(value&&"string"==typeof value)for(classNames=value.split(rspace),i=0,l=this.length;i<l;i++)if(elem=this[i],1===elem.nodeType)if(!elem.className&&1===classNames.length)elem.className=value;else{for(setClass=" "+elem.className+" ",c=0,cl=classNames.length;c<cl;c++)~setClass.indexOf(" "+classNames[c]+" ")||(setClass+=classNames[c]+" ");elem.className=jQuery.trim(setClass)}return this},removeClass:function removeClass(value){var classNames,i,l,elem,className,c,cl;if(jQuery.isFunction(value))return this.each(function(j){jQuery(this).removeClass(value.call(this,j,this.className))});if(value&&"string"==typeof value||void 0===value)for(classNames=(value||"").split(rspace),i=0,l=this.length;i<l;i++)if(elem=this[i],1===elem.nodeType&&elem.className)if(value){for(className=(" "+elem.className+" ").replace(rclass," "),c=0,cl=classNames.length;c<cl;c++)className=className.replace(" "+classNames[c]+" "," ");elem.className=jQuery.trim(className)}else elem.className="";return this},toggleClass:function toggleClass(value,stateVal){var type=typeof value,isBool="boolean"==typeof stateVal;return jQuery.isFunction(value)?this.each(function(i){jQuery(this).toggleClass(value.call(this,i,this.className,stateVal),stateVal)}):this.each(function(){if("string"===type)// toggle individual class names for(var i=0,self=jQuery(this),state=stateVal,classNames=value.split(rspace),className;className=classNames[i++];)// check each className given, space seperated list state=isBool?state:!self.hasClass(className),self[state?"addClass":"removeClass"](className);else("undefined"===type||"boolean"===type)&&(// toggle whole className this.className&&jQuery._data(this,"__className__",this.className),this.className=this.className||!1===value?"":jQuery._data(this,"__className__")||"")})},hasClass:function hasClass(selector){for(var className=" "+selector+" ",i=0,l=this.length;i<l;i++)if(1===this[i].nodeType&&-1<(" "+this[i].className+" ").replace(rclass," ").indexOf(className))return!0;return!1},val:function val(value){var elem=this[0],hooks,ret,isFunction;return arguments.length?(isFunction=jQuery.isFunction(value),this.each(function(i){var self=jQuery(this),val;1!==this.nodeType||(val=isFunction?value.call(this,i,self.val()):value,null==val?val="":"number"==typeof val?val+="":jQuery.isArray(val)&&(val=jQuery.map(val,function(value){return null==value?"":value+""})),hooks=jQuery.valHooks[this.type]||jQuery.valHooks[this.nodeName.toLowerCase()],(!hooks||!("set"in hooks)||void 0===hooks.set(this,val,"value"))&&(this.value=val))})):elem?(hooks=jQuery.valHooks[elem.type]||jQuery.valHooks[elem.nodeName.toLowerCase()],hooks&&"get"in hooks&&void 0!==(ret=hooks.get(elem,"value")))?ret:(ret=elem.value,"string"==typeof ret?// handle most common string cases ret.replace(rreturn,""):// handle cases where value is null/undef or number null==ret?"":ret):void 0}}),jQuery.extend({valHooks:{option:{get:function get(elem){// attributes.value is undefined in Blackberry 4.7 but // uses .value. See #6932 var val=elem.attributes.value;return!val||val.specified?elem.value:elem.text}},select:{get:function get(elem){var index=elem.selectedIndex,values=[],options=elem.options,one="select-one"===elem.type,value,i,max,option;// Nothing was selected if(0>index)return null;// Loop through all the selected options for(i=one?index:0,max=one?index+1:options.length;i<max;i++)// Don't return options that are disabled or in a disabled optgroup if(option=options[i],option.selected&&(jQuery.support.optDisabled?!option.disabled:null===option.getAttribute("disabled"))&&(!option.parentNode.disabled||!jQuery.nodeName(option.parentNode,"optgroup"))){// We don't need an array for one selects if(value=jQuery(option).val(),one)return value;// Multi-Selects return an array values.push(value)}// Fixes Bug #2551 -- select.val() broken in IE after form.reset() return one&&!values.length&&options.length?jQuery(options[index]).val():values},set:function set(elem,value){var values=jQuery.makeArray(value);return jQuery(elem).find("option").each(function(){this.selected=0<=jQuery.inArray(jQuery(this).val(),values)}),values.length||(elem.selectedIndex=-1),values}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function attr(elem,name,value,pass){var nType=elem.nodeType,ret,hooks,notxml;// don't get/set attributes on text, comment and attribute nodes if(elem&&3!==nType&&8!==nType&&2!==nType)return pass&&name in jQuery.attrFn?jQuery(elem)[name](value):"undefined"==typeof elem.getAttribute?jQuery.prop(elem,name,value):(notxml=1!==nType||!jQuery.isXMLDoc(elem),notxml&&(name=name.toLowerCase(),hooks=jQuery.attrHooks[name]||(rboolean.test(name)?boolHook:nodeHook)),void 0===value?hooks&&"get"in hooks&¬xml&&null!==(ret=hooks.get(elem,name))?ret:(ret=elem.getAttribute(name),null===ret?void 0:ret):null===value?void jQuery.removeAttr(elem,name):hooks&&"set"in hooks&¬xml&&void 0!==(ret=hooks.set(elem,value,name))?ret:(elem.setAttribute(name,""+value),value));// Fallback to prop when attributes are not supported },removeAttr:function removeAttr(elem,value){var i=0,propName,attrNames,name,l,isBool;if(value&&1===elem.nodeType)for(attrNames=value.toLowerCase().split(rspace),l=attrNames.length;i<l;i++)name=attrNames[i],name&&(propName=jQuery.propFix[name]||name,isBool=rboolean.test(name),!isBool&&jQuery.attr(elem,name,""),elem.removeAttribute(getSetAttribute?name:propName),isBool&&propName in elem&&(elem[propName]=!1))},attrHooks:{type:{set:function set(elem,value){// We can't allow the type property to be changed (since it causes problems in IE) if(rtype.test(elem.nodeName)&&elem.parentNode)jQuery.error("type property can't be changed");else if(!jQuery.support.radioValue&&"radio"===value&&jQuery.nodeName(elem,"input")){// Setting the type on a radio button after the value resets the value in IE6-9 // Reset value to it's default in case type is set after value // This is for element creation var val=elem.value;return elem.setAttribute("type",value),val&&(elem.value=val),value}}},// Use the value property for back compat // Use the nodeHook for button elements in IE6/7 (#1954) value:{get:function get(elem,name){return nodeHook&&jQuery.nodeName(elem,"button")?nodeHook.get(elem,name):name in elem?elem.value:null},set:function set(elem,value,name){return nodeHook&&jQuery.nodeName(elem,"button")?nodeHook.set(elem,value,name):void(// Does not return so that setAttribute is also used elem.value=value)}}},propFix:{tabindex:"tabIndex",readonly:"readOnly",for:"htmlFor",class:"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function prop(elem,name,value){var nType=elem.nodeType,ret,hooks,notxml;// don't get/set properties on text, comment and attribute nodes if(elem&&3!==nType&&8!==nType&&2!==nType)return notxml=1!==nType||!jQuery.isXMLDoc(elem),notxml&&(name=jQuery.propFix[name]||name,hooks=jQuery.propHooks[name]),void 0===value?hooks&&"get"in hooks&&null!==(ret=hooks.get(elem,name))?ret:elem[name]:hooks&&"set"in hooks&&void 0!==(ret=hooks.set(elem,value,name))?ret:elem[name]=value},propHooks:{tabIndex:{get:function get(elem){// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ var attributeNode=elem.getAttributeNode("tabindex");return attributeNode&&attributeNode.specified?parseInt(attributeNode.value,10):rfocusable.test(elem.nodeName)||rclickable.test(elem.nodeName)&&elem.href?0:void 0}}}}),jQuery.attrHooks.tabindex=jQuery.propHooks.tabIndex,boolHook={get:function get(elem,name){// Align boolean attributes with corresponding properties // Fall back to attribute presence where some booleans are not supported var property=jQuery.prop(elem,name),attrNode;return!0===property||"boolean"!=typeof property&&(attrNode=elem.getAttributeNode(name))&&!1!==attrNode.nodeValue?name.toLowerCase():void 0},set:function set(elem,value,name){var propName;return!1===value?jQuery.removeAttr(elem,name):(propName=jQuery.propFix[name]||name,propName in elem&&(elem[propName]=!0),elem.setAttribute(name,name.toLowerCase())),name}},getSetAttribute||(fixSpecified={name:!0,id:!0,coords:!0},nodeHook=jQuery.valHooks.button={get:function get(elem,name){var ret;return ret=elem.getAttributeNode(name),ret&&(fixSpecified[name]?""!==ret.nodeValue:ret.specified)?ret.nodeValue:void 0},set:function set(elem,value,name){// Set the existing or create a new attribute node var ret=elem.getAttributeNode(name);return ret||(ret=document.createAttribute(name),elem.setAttributeNode(ret)),ret.nodeValue=value+""}},jQuery.attrHooks.tabindex.set=nodeHook.set,jQuery.each(["width","height"],function(i,name){jQuery.attrHooks[name]=jQuery.extend(jQuery.attrHooks[name],{set:function set(elem,value){if(""===value)return elem.setAttribute(name,"auto"),value}})}),jQuery.attrHooks.contenteditable={get:nodeHook.get,set:function set(elem,value,name){""===value&&(value="false"),nodeHook.set(elem,value,name)}}),jQuery.support.hrefNormalized||jQuery.each(["href","src","width","height"],function(i,name){jQuery.attrHooks[name]=jQuery.extend(jQuery.attrHooks[name],{get:function get(elem){var ret=elem.getAttribute(name,2);return null===ret?void 0:ret}})}),jQuery.support.style||(jQuery.attrHooks.style={get:function get(elem){// Return undefined in the case of empty string // Normalize to lowercase since IE uppercases css property names return elem.style.cssText.toLowerCase()||void 0},set:function set(elem,value){return elem.style.cssText=""+value}}),jQuery.support.optSelected||(jQuery.propHooks.selected=jQuery.extend(jQuery.propHooks.selected,{get:function get(elem){var parent=elem.parentNode;return parent&&(parent.selectedIndex,parent.parentNode&&parent.parentNode.selectedIndex),null}})),jQuery.support.enctype||(jQuery.propFix.enctype="encoding"),jQuery.support.checkOn||jQuery.each(["radio","checkbox"],function(){jQuery.valHooks[this]={get:function get(elem){// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified return null===elem.getAttribute("value")?"on":elem.value}}}),jQuery.each(["radio","checkbox"],function(){jQuery.valHooks[this]=jQuery.extend(jQuery.valHooks[this],{set:function set(elem,value){if(jQuery.isArray(value))return elem.checked=0<=jQuery.inArray(jQuery(elem).val(),value)}})});var rformElems=/^(?:textarea|input|select)$/i,rtypenamespace=/^([^\.]*)?(?:\.(.+))?$/,rhoverHack=/(?:^|\s)hover(\.\S+)?\b/,rkeyEvent=/^key/,rmouseEvent=/^(?:mouse|contextmenu)|click/,rfocusMorph=/^(?:focusinfocus|focusoutblur)$/,rquickIs=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,quickParse=function quickParse(selector){var quick=rquickIs.exec(selector);return quick&&(quick[1]=(quick[1]||"").toLowerCase(),quick[3]=quick[3]&&new RegExp("(?:^|\\s)"+quick[3]+"(?:\\s|$)")),quick},quickIs=function quickIs(elem,m){var attrs=elem.attributes||{};return(!m[1]||elem.nodeName.toLowerCase()===m[1])&&(!m[2]||(attrs.id||{}).value===m[2])&&(!m[3]||m[3].test((attrs["class"]||{}).value))},hoverHack=function hoverHack(events){return jQuery.event.special.hover?events:events.replace(rhoverHack,"mouseenter$1 mouseleave$1")};/* * Helper functions for managing events -- not part of the public interface. * Props to Dean Edwards' addEvent library for many of the ideas. */jQuery.event={add:function add(elem,types,handler,data,selector){var elemData,_eventHandle,events,t,tns,type,namespaces,handleObj,handleObjIn,quick,handlers,special;// Don't attach events to noData or text/comment nodes (allow plain objects tho) if(3!==elem.nodeType&&8!==elem.nodeType&&types&&handler&&(elemData=jQuery._data(elem))){for(handler.handler&&(handleObjIn=handler,handler=handleObjIn.handler,selector=handleObjIn.selector),handler.guid||(handler.guid=jQuery.guid++),events=elemData.events,events||(elemData.events=events={}),_eventHandle=elemData.handle,_eventHandle||(elemData.handle=_eventHandle=function eventHandle(e){// Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded return"undefined"==typeof jQuery||e&&jQuery.event.triggered===e.type?void 0:jQuery.event.dispatch.apply(_eventHandle.elem,arguments)},_eventHandle.elem=elem),types=jQuery.trim(hoverHack(types)).split(" "),t=0;t<types.length;t++)// If event changes its type, use the special event handlers for the changed type // If selector defined, determine special event api type, otherwise given type // Update special based on newly reset type // handleObj is passed to all event handlers // Init the event handler queue if we're the first // Keep track of which events have ever been used, for event optimization tns=rtypenamespace.exec(types[t])||[],type=tns[1],namespaces=(tns[2]||"").split(".").sort(),special=jQuery.event.special[type]||{},type=(selector?special.delegateType:special.bindType)||type,special=jQuery.event.special[type]||{},handleObj=jQuery.extend({type:type,origType:tns[1],data:data,handler:handler,guid:handler.guid,selector:selector,quick:selector&&quickParse(selector),namespace:namespaces.join(".")},handleObjIn),handlers=events[type],handlers||(handlers=events[type]=[],handlers.delegateCount=0,(!special.setup||!1===special.setup.call(elem,data,namespaces,_eventHandle))&&(elem.addEventListener?elem.addEventListener(type,_eventHandle,!1):elem.attachEvent&&elem.attachEvent("on"+type,_eventHandle))),special.add&&(special.add.call(elem,handleObj),!handleObj.handler.guid&&(handleObj.handler.guid=handler.guid)),selector?handlers.splice(handlers.delegateCount++,0,handleObj):handlers.push(handleObj),jQuery.event.global[type]=!0;// Nullify elem to prevent memory leaks in IE elem=null}// Caller can pass in an object of custom data in lieu of the handler },global:{},// Detach an event or set of events from an element remove:function remove(elem,types,handler,selector,mappedTypes){var elemData=jQuery.hasData(elem)&&jQuery._data(elem),t,tns,type,origType,namespaces,origCount,j,events,special,handle,eventType,handleObj;if(elemData&&(events=elemData.events)){for(types=jQuery.trim(hoverHack(types||"")).split(" "),t=0;t<types.length;t++){// Unbind all events (on this namespace, if provided) for the element if(tns=rtypenamespace.exec(types[t])||[],type=origType=tns[1],namespaces=tns[2],!type){for(type in events)jQuery.event.remove(elem,type+types[t],handler,selector,!0);continue}// Remove matching events for(special=jQuery.event.special[type]||{},type=(selector?special.delegateType:special.bindType)||type,eventType=events[type]||[],origCount=eventType.length,namespaces=namespaces?new RegExp("(^|\\.)"+namespaces.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null,j=0;j<eventType.length;j++)handleObj=eventType[j],(mappedTypes||origType===handleObj.origType)&&(!handler||handler.guid===handleObj.guid)&&(!namespaces||namespaces.test(handleObj.namespace))&&(!selector||selector===handleObj.selector||"**"===selector&&handleObj.selector)&&(eventType.splice(j--,1),handleObj.selector&&eventType.delegateCount--,special.remove&&special.remove.call(elem,handleObj));// Remove generic event handler if we removed something and no more handlers exist // (avoids potential for endless recursion during removal of special event handlers) 0===eventType.length&&origCount!==eventType.length&&((!special.teardown||!1===special.teardown.call(elem,namespaces))&&jQuery.removeEvent(elem,type,elemData.handle),delete events[type])}// Remove the expando if it's no longer used jQuery.isEmptyObject(events)&&(handle=elemData.handle,handle&&(handle.elem=null),jQuery.removeData(elem,["events","handle"],!0))}// Once for each type.namespace in types; type may be omitted },// Events that are safe to short-circuit if no handlers are attached. // Native DOM events should not be added, they may have inline handlers. customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function trigger(event,data,elem,onlyHandlers){// Don't do events on text and comment nodes if(!(elem&&(3===elem.nodeType||8===elem.nodeType))){// Event object or event type var type=event.type||event,namespaces=[],cache,exclusive,i,cur,old,ontype,special,handle,eventPath,bubbleType;// focus/blur morphs to focusin/out; ensure we're not firing them right now if(!rfocusMorph.test(type+jQuery.event.triggered)&&(0<=type.indexOf("!")&&(type=type.slice(0,-1),exclusive=!0),0<=type.indexOf(".")&&(namespaces=type.split("."),type=namespaces.shift(),namespaces.sort()),elem&&!jQuery.event.customEvent[type]||jQuery.event.global[type]))// No jQuery handlers for this event type, and it can't have inline handlers {// Handle a global trigger if(event="object"==typeof event?// jQuery.Event object event[jQuery.expando]?event:// Object literal new jQuery.Event(type,event):// Just the event type (string) new jQuery.Event(type),event.type=type,event.isTrigger=!0,event.exclusive=exclusive,event.namespace=namespaces.join("."),event.namespace_re=event.namespace?new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,ontype=0>type.indexOf(":")?"on"+type:"",!elem){for(i in cache=jQuery.cache,cache)cache[i].events&&cache[i].events[type]&&jQuery.event.trigger(event,data,cache[i].handle.elem,!0);return}// Clean up the event in case it is being reused if(event.result=void 0,event.target||(event.target=elem),data=null==data?[]:jQuery.makeArray(data),data.unshift(event),special=jQuery.event.special[type]||{},!(special.trigger&&!1===special.trigger.apply(elem,data))){if(eventPath=[[elem,special.bindType||type]],!onlyHandlers&&!special.noBubble&&!jQuery.isWindow(elem)){for(bubbleType=special.delegateType||type,cur=rfocusMorph.test(bubbleType+type)?elem:elem.parentNode,old=null;cur;cur=cur.parentNode)eventPath.push([cur,bubbleType]),old=cur;// Only add window if we got to document (e.g., not plain obj or detached DOM) old&&old===elem.ownerDocument&&eventPath.push([old.defaultView||old.parentWindow||window,bubbleType])}// Fire handlers on the event path for(i=0;i<eventPath.length&&!event.isPropagationStopped();i++)// Note that this is a bare JS function and not a jQuery handler cur=eventPath[i][0],event.type=eventPath[i][1],handle=(jQuery._data(cur,"events")||{})[event.type]&&jQuery._data(cur,"handle"),handle&&handle.apply(cur,data),handle=ontype&&cur[ontype],handle&&jQuery.acceptData(cur)&&!1===handle.apply(cur,data)&&event.preventDefault();return event.type=type,onlyHandlers||event.isDefaultPrevented()||special._default&&!1!==special._default.apply(elem.ownerDocument,data)||"click"===type&&jQuery.nodeName(elem,"a")||!jQuery.acceptData(elem)||!ontype||!elem[type]||("focus"===type||"blur"===type)&&0===event.target.offsetWidth||jQuery.isWindow(elem)||(old=elem[ontype],old&&(elem[ontype]=null),jQuery.event.triggered=type,elem[type](),jQuery.event.triggered=void 0,old&&(elem[ontype]=old)),event.result}// Determine event propagation path in advance, per W3C events spec (#9951) // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) }// Caller can pass in an Event, Object, or just an event type string }},dispatch:function dispatch(event){event=jQuery.event.fix(event||window.event);var handlers=(jQuery._data(this,"events")||{})[event.type]||[],delegateCount=handlers.delegateCount,args=[].slice.call(arguments,0),run_all=!event.exclusive&&!event.namespace,special=jQuery.event.special[event.type]||{},handlerQueue=[],i,j,cur,jqcur,ret,selMatch,matched,matches,handleObj,sel,related;// Use the fix-ed jQuery.Event rather than the (read-only) native event // Call the preDispatch hook for the mapped type, and let it bail if desired if(args[0]=event,event.delegateTarget=this,!(special.preDispatch&&!1===special.preDispatch.call(this,event))){// Determine handlers that should run if there are delegated events // Avoid non-left-click bubbling in Firefox (#3861) if(delegateCount&&!(event.button&&"click"===event.type))for(jqcur=jQuery(this),jqcur.context=this.ownerDocument||this,cur=event.target;cur!=this;cur=cur.parentNode||this)// Don't process events on disabled elements (#6911, #8165) if(!0!==cur.disabled){for(selMatch={},matches=[],jqcur[0]=cur,i=0;i<delegateCount;i++)handleObj=handlers[i],sel=handleObj.selector,void 0===selMatch[sel]&&(selMatch[sel]=handleObj.quick?quickIs(cur,handleObj.quick):jqcur.is(sel)),selMatch[sel]&&matches.push(handleObj);matches.length&&handlerQueue.push({elem:cur,matches:matches})}// Add the remaining (directly-bound) handlers // Run delegates first; they may want to stop propagation beneath us for(handlers.length>delegateCount&&handlerQueue.push({elem:this,matches:handlers.slice(delegateCount)}),i=0;i<handlerQueue.length&&!event.isPropagationStopped();i++)for(matched=handlerQueue[i],event.currentTarget=matched.elem,j=0;j<matched.matches.length&&!event.isImmediatePropagationStopped();j++)handleObj=matched.matches[j],(run_all||!event.namespace&&!handleObj.namespace||event.namespace_re&&event.namespace_re.test(handleObj.namespace))&&(event.data=handleObj.data,event.handleObj=handleObj,ret=((jQuery.event.special[handleObj.origType]||{}).handle||handleObj.handler).apply(matched.elem,args),void 0!==ret&&(event.result=ret,!1===ret&&(event.preventDefault(),event.stopPropagation())));// Call the postDispatch hook for the mapped type return special.postDispatch&&special.postDispatch.call(this,event),event.result}},// Includes some event props shared by KeyEvent and MouseEvent // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** props:["attrChange","attrName","relatedNode","srcElement","altKey","bubbles","cancelable","ctrlKey","currentTarget","eventPhase","metaKey","relatedTarget","shiftKey","target","timeStamp","view","which"],fixHooks:{},keyHooks:{props:["char","charCode","key","keyCode"],filter:function filter(event,original){return null==event.which&&(event.which=null==original.charCode?original.keyCode:original.charCode),event}},mouseHooks:{props:["button","buttons","clientX","clientY","fromElement","offsetX","offsetY","pageX","pageY","screenX","screenY","toElement"],filter:function filter(event,original){var button=original.button,fromElement=original.fromElement,eventDoc,doc,body;// Calculate pageX/Y if missing and clientX/Y available return null==event.pageX&&null!=original.clientX&&(eventDoc=event.target.ownerDocument||document,doc=eventDoc.documentElement,body=eventDoc.body,event.pageX=original.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc&&doc.clientLeft||body&&body.clientLeft||0),event.pageY=original.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc&&doc.clientTop||body&&body.clientTop||0)),!event.relatedTarget&&fromElement&&(event.relatedTarget=fromElement===event.target?original.toElement:fromElement),event.which||void 0===button||(event.which=1&button?1:2&button?3:4&button?2:0),event}},fix:function fix(event){if(event[jQuery.expando])return event;// Create a writable copy of the event object and normalize some properties var originalEvent=event,fixHook=jQuery.event.fixHooks[event.type]||{},copy=fixHook.props?this.props.concat(fixHook.props):this.props,i,prop;for(event=jQuery.Event(originalEvent),i=copy.length;i;)prop=copy[--i],event[prop]=originalEvent[prop];// Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) return event.target||(event.target=originalEvent.srcElement||document),3===event.target.nodeType&&(event.target=event.target.parentNode),void 0===event.metaKey&&(event.metaKey=event.ctrlKey),fixHook.filter?fixHook.filter(event,originalEvent):event},special:{ready:{// Make sure the ready event is setup setup:jQuery.bindReady},load:{// Prevent triggered image.load events from bubbling to window.load noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function setup(data,namespaces,eventHandle){jQuery.isWindow(this)&&(this.onbeforeunload=eventHandle)},teardown:function teardown(namespaces,eventHandle){this.onbeforeunload===eventHandle&&(this.onbeforeunload=null)}}},simulate:function simulate(type,elem,event,bubble){// Piggyback on a donor event to simulate a different one. // Fake originalEvent to avoid donor's stopPropagation, but if the // simulated event prevents default then we do the same on the donor. var e=jQuery.extend(new jQuery.Event,event,{type:type,isSimulated:!0,originalEvent:{}});bubble?jQuery.event.trigger(e,null,elem):jQuery.event.dispatch.call(elem,e),e.isDefaultPrevented()&&event.preventDefault()}},jQuery.event.handle=jQuery.event.dispatch,jQuery.removeEvent=document.removeEventListener?function(elem,type,handle){elem.removeEventListener&&elem.removeEventListener(type,handle,!1)}:function(elem,type,handle){elem.detachEvent&&elem.detachEvent("on"+type,handle)},jQuery.Event=function(src,props){// Allow instantiation without the 'new' keyword return this instanceof jQuery.Event?void(// Create a timestamp if incoming event doesn't have one // Mark it as fixed src&&src.type?(this.originalEvent=src,this.type=src.type,this.isDefaultPrevented=src.defaultPrevented||!1===src.returnValue||src.getPreventDefault&&src.getPreventDefault()?returnTrue:returnFalse):this.type=src,props&&jQuery.extend(this,props),this.timeStamp=src&&src.timeStamp||jQuery.now(),this[jQuery.expando]=!0):new jQuery.Event(src,props);// Event object },jQuery.Event.prototype={preventDefault:function preventDefault(){this.isDefaultPrevented=returnTrue;var e=this.originalEvent;e&&(e.preventDefault?e.preventDefault():e.returnValue=!1);// if preventDefault exists run it on the original event },stopPropagation:function stopPropagation(){this.isPropagationStopped=returnTrue;var e=this.originalEvent;e&&(// otherwise set the cancelBubble property of the original event to true (IE) e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0);// if stopPropagation exists run it on the original event },stopImmediatePropagation:function stopImmediatePropagation(){this.isImmediatePropagationStopped=returnTrue,this.stopPropagation()},isDefaultPrevented:returnFalse,isPropagationStopped:returnFalse,isImmediatePropagationStopped:returnFalse},jQuery.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(orig,fix){jQuery.event.special[orig]={delegateType:fix,bindType:fix,handle:function handle(event){var target=this,related=event.relatedTarget,handleObj=event.handleObj,selector=handleObj.selector,ret;// For mousenter/leave call the handler if related is outside the target. // NB: No relatedTarget if the mouse left/entered the browser window return related&&(related===target||jQuery.contains(target,related))||(event.type=handleObj.origType,ret=handleObj.handler.apply(this,arguments),event.type=fix),ret}}}),jQuery.support.submitBubbles||(jQuery.event.special.submit={setup:function setup(){// Only need this for delegated form submit events return!jQuery.nodeName(this,"form")&&void// Lazy-add a submit handler when a descendant form may potentially be submitted jQuery.event.add(this,"click._submit keypress._submit",function(e){// Node name check avoids a VML-related crash in IE (#9807) var elem=e.target,form=jQuery.nodeName(elem,"input")||jQuery.nodeName(elem,"button")?elem.form:void 0;form&&!form._submit_attached&&(jQuery.event.add(form,"submit._submit",function(event){event._submit_bubble=!0}),form._submit_attached=!0)})},postDispatch:function postDispatch(event){event._submit_bubble&&(delete event._submit_bubble,this.parentNode&&!event.isTrigger&&jQuery.event.simulate("submit",this.parentNode,event,!0))},teardown:function teardown(){// Only need this for delegated form submit events return!jQuery.nodeName(this,"form")&&void// Remove delegated handlers; cleanData eventually reaps submit handlers attached above jQuery.event.remove(this,"._submit")}}),jQuery.support.changeBubbles||(jQuery.event.special.change={setup:function setup(){return rformElems.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(jQuery.event.add(this,"propertychange._change",function(event){"checked"===event.originalEvent.propertyName&&(this._just_changed=!0)}),jQuery.event.add(this,"click._change",function(event){this._just_changed&&!event.isTrigger&&(this._just_changed=!1,jQuery.event.simulate("change",this,event,!0))})),!1):void// Delegated event; lazy-add a change handler on descendant inputs jQuery.event.add(this,"beforeactivate._change",function(e){var elem=e.target;rformElems.test(elem.nodeName)&&!elem._change_attached&&(jQuery.event.add(elem,"change._change",function(event){!this.parentNode||event.isSimulated||event.isTrigger||jQuery.event.simulate("change",this.parentNode,event,!0)}),elem._change_attached=!0)})},handle:function handle(event){var elem=event.target;// Swallow native change events from checkbox/radio, we already triggered them above if(this!==elem||event.isSimulated||event.isTrigger||"radio"!==elem.type&&"checkbox"!==elem.type)return event.handleObj.handler.apply(this,arguments)},teardown:function teardown(){return jQuery.event.remove(this,"._change"),rformElems.test(this.nodeName)}}),jQuery.support.focusinBubbles||jQuery.each({focus:"focusin",blur:"focusout"},function(orig,fix){// Attach a single capturing handler while someone wants focusin/focusout var attaches=0,handler=function handler(event){jQuery.event.simulate(fix,event.target,jQuery.event.fix(event),!0)};jQuery.event.special[fix]={setup:function setup(){0==attaches++&&document.addEventListener(orig,handler,!0)},teardown:function teardown(){0==--attaches&&document.removeEventListener(orig,handler,!0)}}}),jQuery.fn.extend({on:function on(types,selector,data,fn,/*INTERNAL*/one){var origFn,type;// Types can be a map of types/handlers if("object"==typeof types){for(type in"string"!=typeof selector&&(data=data||selector,selector=void 0),types)this.on(type,selector,data,types[type],one);return this}if(null==data&&null==fn?(fn=selector,data=selector=void 0):null==fn&&("string"==typeof selector?(fn=data,data=void 0):(fn=data,data=selector,selector=void 0)),!1===fn)fn=returnFalse;else if(!fn)return this;return 1===one&&(origFn=fn,fn=function fn(event){return jQuery().off(event),origFn.apply(this,arguments)},fn.guid=origFn.guid||(origFn.guid=jQuery.guid++)),this.each(function(){jQuery.event.add(this,types,fn,data,selector)})},one:function one(types,selector,data,fn){return this.on(types,selector,data,fn,1)},off:function off(types,selector,fn){if(types&&types.preventDefault&&types.handleObj){// ( event ) dispatched jQuery.Event var handleObj=types.handleObj;return jQuery(types.delegateTarget).off(handleObj.namespace?handleObj.origType+"."+handleObj.namespace:handleObj.origType,handleObj.selector,handleObj.handler),this}if("object"==typeof types){// ( types-object [, selector] ) for(var type in types)this.off(type,selector,types[type]);return this}return(!1===selector||"function"==typeof selector)&&(fn=selector,selector=void 0),!1===fn&&(fn=returnFalse),this.each(function(){jQuery.event.remove(this,types,fn,selector)})},bind:function bind(types,data,fn){return this.on(types,null,data,fn)},unbind:function unbind(types,fn){return this.off(types,null,fn)},live:function live(types,data,fn){return jQuery(this.context).on(types,this.selector,data,fn),this},die:function die(types,fn){return jQuery(this.context).off(types,this.selector||"**",fn),this},delegate:function delegate(selector,types,data,fn){return this.on(types,selector,data,fn)},undelegate:function undelegate(selector,types,fn){// ( namespace ) or ( selector, types [, fn] ) return 1==arguments.length?this.off(selector,"**"):this.off(types,selector,fn)},trigger:function trigger(type,data){return this.each(function(){jQuery.event.trigger(type,data,this)})},triggerHandler:function triggerHandler(type,data){if(this[0])return jQuery.event.trigger(type,data,this[0],!0)},toggle:function toggle(fn){// Save reference to arguments for access in closure var args=arguments,guid=fn.guid||jQuery.guid++,i=0,toggler=function toggler(event){// Figure out which function to execute var lastToggle=(jQuery._data(this,"lastToggle"+fn.guid)||0)%i;// and execute the function return jQuery._data(this,"lastToggle"+fn.guid,lastToggle+1),event.preventDefault(),args[lastToggle].apply(this,arguments)||!1};// link all the functions, so any of them can unbind this click handler for(toggler.guid=guid;i<args.length;)args[i++].guid=guid;return this.click(toggler)},hover:function hover(fnOver,fnOut){return this.mouseenter(fnOver).mouseleave(fnOut||fnOver)}}),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){// Handle event binding jQuery.fn[name]=function(data,fn){return null==fn&&(fn=data,data=null),0<arguments.length?this.on(name,null,data,fn):this.trigger(name)},jQuery.attrFn&&(jQuery.attrFn[name]=!0),rkeyEvent.test(name)&&(jQuery.event.fixHooks[name]=jQuery.event.keyHooks),rmouseEvent.test(name)&&(jQuery.event.fixHooks[name]=jQuery.event.mouseHooks)}),function(){function dirNodeCheck(dir,cur,doneName,checkSet,nodeCheck,isXML){for(var i=0,l=checkSet.length,elem;i<l;i++)if(elem=checkSet[i],elem){var match=!1;for(elem=elem[dir];elem;){if(elem[expando]===doneName){match=checkSet[elem.sizset];break}if(1!==elem.nodeType||isXML||(elem[expando]=doneName,elem.sizset=i),elem.nodeName.toLowerCase()===cur){match=elem;break}elem=elem[dir]}checkSet[i]=match}}function dirCheck(dir,cur,doneName,checkSet,nodeCheck,isXML){for(var i=0,l=checkSet.length,elem;i<l;i++)if(elem=checkSet[i],elem){var match=!1;for(elem=elem[dir];elem;){if(elem[expando]===doneName){match=checkSet[elem.sizset];break}if(1===elem.nodeType)if(isXML||(elem[expando]=doneName,elem.sizset=i),"string"!=typeof cur){if(elem===cur){match=!0;break}}else if(0<_Sizzle2.filter(cur,[elem]).length){match=elem;break}elem=elem[dir]}checkSet[i]=match}}var chunker=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,expando="sizcache"+(Math.random()+"").replace(".",""),done=0,toString=Object.prototype.toString,hasDuplicate=!1,baseHasDuplicate=!0,rBackslash=/\\/g,rReturn=/\r\n/g,rNonWord=/\W/;// Here we check if the JavaScript engine is using some sort of // optimization where it does not always call our comparision // function. If that is the case, discard the hasDuplicate value. // Thus far that includes Google Chrome. [0,0].sort(function(){return baseHasDuplicate=!1,0});var _Sizzle2=function Sizzle(selector,context,results,seed){results=results||[],context=context||document;var origContext=context;if(1!==context.nodeType&&9!==context.nodeType)return[];if(!selector||"string"!=typeof selector)return results;var prune=!0,contextXML=_Sizzle2.isXML(context),parts=[],soFar=selector,m,set,checkSet,extra,ret,cur,pop,i;// Reset the position of the chunker regexp (start from head) do if(chunker.exec(""),m=chunker.exec(soFar),m&&(soFar=m[3],parts.push(m[1]),m[2])){extra=m[3];break}while(m);if(1<parts.length&&origPOS.exec(selector)){if(2===parts.length&&Expr.relative[parts[0]])set=posProcess(parts[0]+parts[1],context,seed);else for(set=Expr.relative[parts[0]]?[context]:_Sizzle2(parts.shift(),context);parts.length;)selector=parts.shift(),Expr.relative[selector]&&(selector+=parts.shift()),set=posProcess(selector,set,seed);}else if(seed||!(1<parts.length)||9!==context.nodeType||contextXML||!Expr.match.ID.test(parts[0])||Expr.match.ID.test(parts[parts.length-1])||(ret=_Sizzle2.find(parts.shift(),context,contextXML),context=ret.expr?_Sizzle2.filter(ret.expr,ret.set)[0]:ret.set[0]),context)for(ret=seed?{expr:parts.pop(),set:makeArray(seed)}:_Sizzle2.find(parts.pop(),1===parts.length&&("~"===parts[0]||"+"===parts[0])&&context.parentNode?context.parentNode:context,contextXML),set=ret.expr?_Sizzle2.filter(ret.expr,ret.set):ret.set,0<parts.length?checkSet=makeArray(set):prune=!1;parts.length;)cur=parts.pop(),pop=cur,Expr.relative[cur]?pop=parts.pop():cur="",null==pop&&(pop=context),Expr.relative[cur](checkSet,pop,contextXML);else checkSet=parts=[];if(checkSet||(checkSet=set),checkSet||_Sizzle2.error(cur||selector),"[object Array]"!==toString.call(checkSet))makeArray(checkSet,results);else if(!prune)results.push.apply(results,checkSet);else if(context&&1===context.nodeType)for(i=0;null!=checkSet[i];i++)checkSet[i]&&(!0===checkSet[i]||1===checkSet[i].nodeType&&_Sizzle2.contains(context,checkSet[i]))&&results.push(set[i]);else for(i=0;null!=checkSet[i];i++)checkSet[i]&&1===checkSet[i].nodeType&&results.push(set[i]);return extra&&(_Sizzle2(extra,origContext,results,seed),_Sizzle2.uniqueSort(results)),results};_Sizzle2.uniqueSort=function(results){if(sortOrder&&(hasDuplicate=baseHasDuplicate,results.sort(sortOrder),hasDuplicate))for(var i=1;i<results.length;i++)results[i]===results[i-1]&&results.splice(i--,1);return results},_Sizzle2.matches=function(expr,set){return _Sizzle2(expr,null,null,set)},_Sizzle2.matchesSelector=function(node,expr){return 0<_Sizzle2(expr,null,null,[node]).length},_Sizzle2.find=function(expr,context,isXML){var set,i,len,match,type,left;if(!expr)return[];for(i=0,len=Expr.order.length;i<len;i++)if(type=Expr.order[i],(match=Expr.leftMatch[type].exec(expr))&&(left=match[1],match.splice(1,1),"\\"!==left.substr(left.length-1)&&(match[1]=(match[1]||"").replace(rBackslash,""),set=Expr.find[type](match,context,isXML),null!=set))){expr=expr.replace(Expr.match[type],"");break}return set||(set="undefined"==typeof context.getElementsByTagName?[]:context.getElementsByTagName("*")),{set:set,expr:expr}},_Sizzle2.filter=function(expr,set,inplace,not){for(var old=expr,result=[],curLoop=set,isXMLFilter=set&&set[0]&&_Sizzle2.isXML(set[0]),match,anyFound,type,found,item,filter,left,i,pass;expr&&set.length;){for(type in Expr.filter)if(null!=(match=Expr.leftMatch[type].exec(expr))&&match[2]){if(filter=Expr.filter[type],left=match[1],anyFound=!1,match.splice(1,1),"\\"===left.substr(left.length-1))continue;if(curLoop===result&&(result=[]),Expr.preFilter[type])if(match=Expr.preFilter[type](match,curLoop,inplace,result,not,isXMLFilter),!match)anyFound=found=!0;else if(!0===match)continue;if(match)for(i=0;null!=(item=curLoop[i]);i++)item&&(found=filter(item,match,i,curLoop),pass=not^found,inplace&&null!=found?pass?anyFound=!0:curLoop[i]=!1:pass&&(result.push(item),anyFound=!0));if(void 0!==found){if(inplace||(curLoop=result),expr=expr.replace(Expr.match[type],""),!anyFound)return[];break}}// Improper expression if(expr===old)if(null==anyFound)_Sizzle2.error(expr);else break;old=expr}return curLoop},_Sizzle2.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg)};/** * Utility function for retreiving the text value of an array of DOM nodes * @param {Array|Element} elem */var getText=_Sizzle2.getText=function(elem){var nodeType=elem.nodeType,ret="",i,node;if(!nodeType)// If no nodeType, this is expected to be an array for(i=0;node=elem[i];i++)// Do not traverse comment nodes 8!==node.nodeType&&(ret+=getText(node));else if(1===nodeType||9===nodeType||11===nodeType){// Use textContent || innerText for elements if("string"==typeof elem.textContent)return elem.textContent;if("string"==typeof elem.innerText)// Replace IE's carriage returns return elem.innerText.replace(rReturn,"");// Traverse it's children for(elem=elem.firstChild;elem;elem=elem.nextSibling)ret+=getText(elem)}else if(3===nodeType||4===nodeType)return elem.nodeValue;return ret},Expr=_Sizzle2.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{class:"className",for:"htmlFor"},attrHandle:{href:function href(elem){return elem.getAttribute("href")},type:function type(elem){return elem.getAttribute("type")}},relative:{"+":function _(checkSet,part){var isPartStr="string"==typeof part,isTag=isPartStr&&!rNonWord.test(part),isPartStrNotTag=isPartStr&&!isTag;isTag&&(part=part.toLowerCase());for(var i=0,l=checkSet.length,elem;i<l;i++)if(elem=checkSet[i]){for(;(elem=elem.previousSibling)&&1!==elem.nodeType;);checkSet[i]=isPartStrNotTag||elem&&elem.nodeName.toLowerCase()===part?elem||!1:elem===part}isPartStrNotTag&&_Sizzle2.filter(part,checkSet,!0)},">":function _(checkSet,part){var isPartStr="string"==typeof part,i=0,l=checkSet.length,elem;if(isPartStr&&!rNonWord.test(part)){for(part=part.toLowerCase();i<l;i++)if(elem=checkSet[i],elem){var parent=elem.parentNode;checkSet[i]=parent.nodeName.toLowerCase()===part&&parent}}else{for(;i<l;i++)elem=checkSet[i],elem&&(checkSet[i]=isPartStr?elem.parentNode:elem.parentNode===part);isPartStr&&_Sizzle2.filter(part,checkSet,!0)}},"":function _(checkSet,part,isXML){var doneName=done++,checkFn=dirCheck,nodeCheck;"string"!=typeof part||rNonWord.test(part)||(part=part.toLowerCase(),nodeCheck=part,checkFn=dirNodeCheck),checkFn("parentNode",part,doneName,checkSet,nodeCheck,isXML)},"~":function _(checkSet,part,isXML){var doneName=done++,checkFn=dirCheck,nodeCheck;"string"!=typeof part||rNonWord.test(part)||(part=part.toLowerCase(),nodeCheck=part,checkFn=dirNodeCheck),checkFn("previousSibling",part,doneName,checkSet,nodeCheck,isXML)}},find:{ID:function ID(match,context,isXML){if("undefined"!=typeof context.getElementById&&!isXML){var m=context.getElementById(match[1]);// Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 return m&&m.parentNode?[m]:[]}},NAME:function NAME(match,context){if("undefined"!=typeof context.getElementsByName){for(var ret=[],results=context.getElementsByName(match[1]),i=0,l=results.length;i<l;i++)results[i].getAttribute("name")===match[1]&&ret.push(results[i]);return 0===ret.length?null:ret}},TAG:function TAG(match,context){if("undefined"!=typeof context.getElementsByTagName)return context.getElementsByTagName(match[1])}},preFilter:{CLASS:function CLASS(match,curLoop,inplace,result,not,isXML){if(match=" "+match[1].replace(rBackslash,"")+" ",isXML)return match;for(var i=0,elem;null!=(elem=curLoop[i]);i++)elem&&(not^(elem.className&&0<=(" "+elem.className+" ").replace(/[\t\n\r]/g," ").indexOf(match))?!inplace&&result.push(elem):inplace&&(curLoop[i]=!1));return!1},ID:function ID(match){return match[1].replace(rBackslash,"")},TAG:function TAG(match,curLoop){return match[1].replace(rBackslash,"").toLowerCase()},CHILD:function CHILD(match){if("nth"===match[1]){match[2]||_Sizzle2.error(match[0]),match[2]=match[2].replace(/^\+|\s*/g,"");// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' var test=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec("even"===match[2]&&"2n"||"odd"===match[2]&&"2n+1"||!/\D/.test(match[2])&&"0n+"+match[2]||match[2]);// calculate the numbers (first)n+(last) including if they are negative match[2]=test[1]+(test[2]||1)-0,match[3]=test[3]-0}else match[2]&&_Sizzle2.error(match[0]);// TODO: Move to normal caching system return match[0]=done++,match},ATTR:function ATTR(match,curLoop,inplace,result,not,isXML){var name=match[1]=match[1].replace(rBackslash,"");return!isXML&&Expr.attrMap[name]&&(match[1]=Expr.attrMap[name]),match[4]=(match[4]||match[5]||"").replace(rBackslash,""),"~="===match[2]&&(match[4]=" "+match[4]+" "),match},PSEUDO:function PSEUDO(match,curLoop,inplace,result,not){if("not"===match[1]){// If we're dealing with a complex expression, or a simple one if(1<(chunker.exec(match[3])||"").length||/^\w/.test(match[3]))match[3]=_Sizzle2(match[3],null,null,curLoop);else{var ret=_Sizzle2.filter(match[3],curLoop,inplace,!0^not);return inplace||result.push.apply(result,ret),!1}}else if(Expr.match.POS.test(match[0])||Expr.match.CHILD.test(match[0]))return!0;return match},POS:function POS(match){return match.unshift(!0),match}},filters:{enabled:function enabled(elem){return!1===elem.disabled&&"hidden"!==elem.type},disabled:function disabled(elem){return!0===elem.disabled},checked:function checked(elem){return!0===elem.checked},selected:function selected(elem){return elem.parentNode&&elem.parentNode.selectedIndex,!0===elem.selected},parent:function parent(elem){return!!elem.firstChild},empty:function empty(elem){return!elem.firstChild},has:function has(elem,i,match){return!!_Sizzle2(match[3],elem).length},header:function header(elem){return /h\d/i.test(elem.nodeName)},text:function text(elem){var attr=elem.getAttribute("type"),type=elem.type;// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) // use getAttribute instead to test this case return"input"===elem.nodeName.toLowerCase()&&"text"===type&&(attr===type||null===attr)},radio:function radio(elem){return"input"===elem.nodeName.toLowerCase()&&"radio"===elem.type},checkbox:function checkbox(elem){return"input"===elem.nodeName.toLowerCase()&&"checkbox"===elem.type},file:function file(elem){return"input"===elem.nodeName.toLowerCase()&&"file"===elem.type},password:function password(elem){return"input"===elem.nodeName.toLowerCase()&&"password"===elem.type},submit:function submit(elem){var name=elem.nodeName.toLowerCase();return("input"===name||"button"===name)&&"submit"===elem.type},image:function image(elem){return"input"===elem.nodeName.toLowerCase()&&"image"===elem.type},reset:function reset(elem){var name=elem.nodeName.toLowerCase();return("input"===name||"button"===name)&&"reset"===elem.type},button:function button(elem){var name=elem.nodeName.toLowerCase();return"input"===name&&"button"===elem.type||"button"===name},input:function input(elem){return /input|select|textarea|button/i.test(elem.nodeName)},focus:function focus(elem){return elem===elem.ownerDocument.activeElement}},setFilters:{first:function first(elem,i){return 0===i},last:function last(elem,i,match,array){return i===array.length-1},even:function even(elem,i){return 0==i%2},odd:function odd(elem,i){return 1==i%2},lt:function lt(elem,i,match){return i<match[3]-0},gt:function gt(elem,i,match){return i>match[3]-0},nth:function nth(elem,i,match){return match[3]-0===i},eq:function eq(elem,i,match){return match[3]-0===i}},filter:{PSEUDO:function PSEUDO(elem,match,i,array){var name=match[1],filter=Expr.filters[name];if(filter)return filter(elem,i,match,array);if("contains"===name)return 0<=(elem.textContent||elem.innerText||getText([elem])||"").indexOf(match[3]);if("not"===name){for(var not=match[3],j=0,l=not.length;j<l;j++)if(not[j]===elem)return!1;return!0}_Sizzle2.error(name)},CHILD:function CHILD(elem,match){var type=match[1],node=elem,first,last,doneName,parent,cache,count,diff;switch(type){case"only":case"first":for(;node=node.previousSibling;)if(1===node.nodeType)return!1;if("first"===type)return!0;node=elem;/* falls through */case"last":for(;node=node.nextSibling;)if(1===node.nodeType)return!1;return!0;case"nth":if(first=match[2],last=match[3],1===first&&0===last)return!0;if(doneName=match[0],parent=elem.parentNode,parent&&(parent[expando]!==doneName||!elem.nodeIndex)){for(count=0,node=parent.firstChild;node;node=node.nextSibling)1===node.nodeType&&(node.nodeIndex=++count);parent[expando]=doneName}return diff=elem.nodeIndex-last,0===first?0===diff:0==diff%first&&0<=diff/first;}},ID:function ID(elem,match){return 1===elem.nodeType&&elem.getAttribute("id")===match},TAG:function TAG(elem,match){return"*"===match&&1===elem.nodeType||!!elem.nodeName&&elem.nodeName.toLowerCase()===match},CLASS:function CLASS(elem,match){return-1<(" "+(elem.className||elem.getAttribute("class"))+" ").indexOf(match)},ATTR:function ATTR(elem,match){var name=match[1],result=_Sizzle2.attr?_Sizzle2.attr(elem,name):Expr.attrHandle[name]?Expr.attrHandle[name](elem):null==elem[name]?elem.getAttribute(name):elem[name],value=result+"",type=match[2],check=match[4];return null==result?"!="===type:!type&&_Sizzle2.attr?null!=result:"="===type?value===check:"*="===type?0<=value.indexOf(check):"~="===type?0<=(" "+value+" ").indexOf(check):check?"!="===type?value!==check:"^="===type?0===value.indexOf(check):"$="===type?value.substr(value.length-check.length)===check:!("|="!==type)&&(value===check||value.substr(0,check.length+1)===check+"-"):value&&!1!==result},POS:function POS(elem,match,i,array){var name=match[2],filter=Expr.setFilters[name];if(filter)return filter(elem,i,match,array)}}},origPOS=Expr.match.POS,fescape=function fescape(all,num){return"\\"+(num-0+1)};for(var type in Expr.match)Expr.match[type]=new RegExp(Expr.match[type].source+/(?![^\[]*\])(?![^\(]*\))/.source),Expr.leftMatch[type]=new RegExp(/(^(?:.|\r|\n)*?)/.source+Expr.match[type].source.replace(/\\(\d+)/g,fescape));// Expose origPOS // "global" as in regardless of relation to brackets/parens Expr.match.globalPOS=origPOS;var makeArray=function makeArray(array,results){return array=Array.prototype.slice.call(array,0),results?(results.push.apply(results,array),results):array};// Perform a simple check to determine if the browser is capable of // converting a NodeList to an array using builtin methods. // Also verifies that the returned array holds DOM nodes // (which is not the case in the Blackberry browser) try{Array.prototype.slice.call(document.documentElement.childNodes,0)[0].nodeType}catch(e){makeArray=function makeArray(array,results){var i=0,ret=results||[];if("[object Array]"===toString.call(array))Array.prototype.push.apply(ret,array);else if("number"==typeof array.length)for(var l=array.length;i<l;i++)ret.push(array[i]);else for(;array[i];i++)ret.push(array[i]);return ret}}var sortOrder,siblingCheck;document.documentElement.compareDocumentPosition?sortOrder=function sortOrder(a,b){return a===b?(hasDuplicate=!0,0):a.compareDocumentPosition&&b.compareDocumentPosition?4&a.compareDocumentPosition(b)?-1:1:a.compareDocumentPosition?-1:1}:(sortOrder=function sortOrder(a,b){// The nodes are identical, we can exit early if(a===b)return hasDuplicate=!0,0;// Fallback to using sourceIndex (in IE) if it's available on both nodes if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var ap=[],bp=[],aup=a.parentNode,bup=b.parentNode,cur=aup,al,bl;// If the nodes are siblings (or identical) we can do a quick check if(aup===bup)return siblingCheck(a,b);// If no parents were found then the nodes are disconnected // Otherwise they're somewhere else in the tree so we need // to build up a full list of the parentNodes for comparison if(!aup)return-1;if(!bup)return 1;for(;cur;)ap.unshift(cur),cur=cur.parentNode;for(cur=bup;cur;)bp.unshift(cur),cur=cur.parentNode;al=ap.length,bl=bp.length;// Start walking down the tree looking for a discrepancy for(var i=0;i<al&&i<bl;i++)if(ap[i]!==bp[i])return siblingCheck(ap[i],bp[i]);// We ended someplace up the tree so do a sibling check return i===al?siblingCheck(a,bp[i],-1):siblingCheck(ap[i],b,1)},siblingCheck=function siblingCheck(a,b,ret){if(a===b)return ret;for(var cur=a.nextSibling;cur;){if(cur===b)return-1;cur=cur.nextSibling}return 1}),function(){// We're going to inject a fake input element with a specified name var form=document.createElement("div"),id="script"+new Date().getTime(),root=document.documentElement;// Inject it into the root element, check its status, and remove it quickly // release memory in IE form.innerHTML="<a name='"+id+"'/>",root.insertBefore(form,root.firstChild),document.getElementById(id)&&(Expr.find.ID=function(match,context,isXML){if("undefined"!=typeof context.getElementById&&!isXML){var m=context.getElementById(match[1]);return m?m.id===match[1]||"undefined"!=typeof m.getAttributeNode&&m.getAttributeNode("id").nodeValue===match[1]?[m]:void 0:[]}},Expr.filter.ID=function(elem,match){var node="undefined"!=typeof elem.getAttributeNode&&elem.getAttributeNode("id");return 1===elem.nodeType&&node&&node.nodeValue===match}),root.removeChild(form),root=form=null}(),function(){// Check to see if the browser returns only elements // when doing getElementsByTagName("*") // Create a fake element var div=document.createElement("div");// Check to see if an attribute returns normalized href attributes // release memory in IE div.appendChild(document.createComment("")),0<div.getElementsByTagName("*").length&&(Expr.find.TAG=function(match,context){var results=context.getElementsByTagName(match[1]);// Filter out possible comments if("*"===match[1]){for(var tmp=[],i=0;results[i];i++)1===results[i].nodeType&&tmp.push(results[i]);results=tmp}return results}),div.innerHTML="<a href='#'></a>",div.firstChild&&"undefined"!=typeof div.firstChild.getAttribute&&"#"!==div.firstChild.getAttribute("href")&&(Expr.attrHandle.href=function(elem){return elem.getAttribute("href",2)}),div=null}(),document.querySelectorAll&&function(){var oldSizzle=_Sizzle2,div=document.createElement("div"),id="__sizzle__";// Safari can't handle uppercase or unicode characters when // in quirks mode. if(div.innerHTML="<p class='TEST'></p>",!(div.querySelectorAll&&0===div.querySelectorAll(".TEST").length)){for(var prop in _Sizzle2=function _Sizzle(query,context,extra,seed){// Only use querySelectorAll on non-XML documents // (ID selectors don't work in non-HTML documents) if(context=context||document,!seed&&!_Sizzle2.isXML(context)){// See if we find a selector to speed up var match=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(query);if(match&&(1===context.nodeType||9===context.nodeType)){// Speed-up: Sizzle("TAG") if(match[1])return makeArray(context.getElementsByTagName(query),extra);// Speed-up: Sizzle(".CLASS") if(match[2]&&Expr.find.CLASS&&context.getElementsByClassName)return makeArray(context.getElementsByClassName(match[2]),extra)}if(9===context.nodeType){// Speed-up: Sizzle("body") // The body element only exists once, optimize finding it if("body"===query&&context.body)return makeArray([context.body],extra);// Speed-up: Sizzle("#ID") if(match&&match[3]){var elem=context.getElementById(match[3]);// Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if(!(elem&&elem.parentNode))return makeArray([],extra);// Handle the case where IE and Opera return items // by name instead of ID if(elem.id===match[3])return makeArray([elem],extra)}try{return makeArray(context.querySelectorAll(query),extra)}catch(qsaError){}// qSA works strangely on Element-rooted queries // We can work around this by specifying an extra ID on the root // and working up from there (Thanks to Andrew Dupont for the technique) // IE 8 doesn't work on object elements }else if(1===context.nodeType&&"object"!==context.nodeName.toLowerCase()){var oldContext=context,old=context.getAttribute("id"),nid=old||"__sizzle__",hasParent=context.parentNode,relativeHierarchySelector=/^\s*[+~]/.test(query);old?nid=nid.replace(/'/g,"\\$&"):context.setAttribute("id",nid),relativeHierarchySelector&&hasParent&&(context=context.parentNode);try{if(!relativeHierarchySelector||hasParent)return makeArray(context.querySelectorAll("[id='"+nid+"'] "+query),extra)}catch(pseudoError){}finally{old||oldContext.removeAttribute("id")}}}return oldSizzle(query,context,extra,seed)},oldSizzle)_Sizzle2[prop]=oldSizzle[prop];// release memory in IE div=null}}(),function(){var html=document.documentElement,matches=html.matchesSelector||html.mozMatchesSelector||html.webkitMatchesSelector||html.msMatchesSelector;if(matches){// Check to see if it's possible to do matchesSelector // on a disconnected node (IE 9 fails this) var disconnectedMatch=!matches.call(document.createElement("div"),"div"),pseudoWorks=!1;try{// This should fail with an exception // Gecko does not error, returns false instead matches.call(document.documentElement,"[test!='']:sizzle")}catch(pseudoError){pseudoWorks=!0}_Sizzle2.matchesSelector=function(node,expr){if(expr=expr.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']"),!_Sizzle2.isXML(node))try{if(pseudoWorks||!Expr.match.PSEUDO.test(expr)&&!/!=/.test(expr)){var ret=matches.call(node,expr);// IE 9's matchesSelector returns false on disconnected nodes if(ret||!disconnectedMatch||// As well, disconnected nodes are said to be in a document // fragment in IE 9, so check for that node.document&&11!==node.document.nodeType)return ret}}catch(e){}return 0<_Sizzle2(expr,null,null,[node]).length}}}(),function(){var div=document.createElement("div");// Opera can't find a second classname (in 9.6) // Also, make sure that getElementsByClassName actually exists (div.innerHTML="<div class='test e'></div><div class='test'></div>",div.getElementsByClassName&&0!==div.getElementsByClassName("e").length)&&(div.lastChild.className="e",1===div.getElementsByClassName("e").length||(// release memory in IE Expr.order.splice(1,0,"CLASS"),Expr.find.CLASS=function(match,context,isXML){if("undefined"!=typeof context.getElementsByClassName&&!isXML)return context.getElementsByClassName(match[1])},div=null))}(),_Sizzle2.contains=document.documentElement.contains?function(a,b){return a!==b&&(!a.contains||a.contains(b))}:document.documentElement.compareDocumentPosition?function(a,b){return!!(16&a.compareDocumentPosition(b))}:function(){return!1},_Sizzle2.isXML=function(elem){// documentElement is verified for cases where it doesn't yet exist // (such as loading iframes in IE - #4833) var documentElement=(elem?elem.ownerDocument||elem:0).documentElement;return!!documentElement&&"HTML"!==documentElement.nodeName};var posProcess=function posProcess(selector,context,seed){// Position selectors must be done after the filter // And so must :not(positional) so we move all PSEUDOs to the end for(var tmpSet=[],later="",root=context.nodeType?[context]:context,match;match=Expr.match.PSEUDO.exec(selector);)later+=match[0],selector=selector.replace(Expr.match.PSEUDO,"");selector=Expr.relative[selector]?selector+"*":selector;for(var i=0,l=root.length;i<l;i++)_Sizzle2(selector,root[i],tmpSet,seed);return _Sizzle2.filter(later,tmpSet)};// EXPOSE // Override sizzle attribute retrieval _Sizzle2.attr=jQuery.attr,_Sizzle2.selectors.attrMap={},jQuery.find=_Sizzle2,jQuery.expr=_Sizzle2.selectors,jQuery.expr[":"]=jQuery.expr.filters,jQuery.unique=_Sizzle2.uniqueSort,jQuery.text=_Sizzle2.getText,jQuery.isXMLDoc=_Sizzle2.isXML,jQuery.contains=_Sizzle2.contains}();var runtil=/Until$/,rparentsprev=/^(?:parents|prevUntil|prevAll)/,// Note: This RegExp should be improved, or likely pulled from Sizzle rmultiselector=/,/,isSimple=/^.[^:#\[\.,]*$/,slice=Array.prototype.slice,POS=jQuery.expr.match.globalPOS,// methods guaranteed to produce a unique set when starting from a unique set guaranteedUnique={children:!0,contents:!0,next:!0,prev:!0};jQuery.fn.extend({find:function find(selector){var self=this,i,l;if("string"!=typeof selector)return jQuery(selector).filter(function(){for(i=0,l=self.length;i<l;i++)if(jQuery.contains(self[i],this))return!0});var ret=this.pushStack("","find",selector),length,n,r;for(i=0,l=this.length;i<l;i++)if(length=ret.length,jQuery.find(selector,this[i],ret),0<i)// Make sure that the results are unique for(n=length;n<ret.length;n++)for(r=0;r<length;r++)if(ret[r]===ret[n]){ret.splice(n--,1);break}return ret},has:function has(target){var targets=jQuery(target);return this.filter(function(){for(var i=0,l=targets.length;i<l;i++)if(jQuery.contains(this,targets[i]))return!0})},not:function not(selector){return this.pushStack(winnow(this,selector,!1),"not",selector)},filter:function filter(selector){return this.pushStack(winnow(this,selector,!0),"filter",selector)},is:function is(selector){return!!selector&&("string"==typeof selector?// If this is a positional selector, check membership in the returned set // so $("p:first").is("p:last") won't return true for a doc with two "p". POS.test(selector)?0<=jQuery(selector,this.context).index(this[0]):0<jQuery.filter(selector,this).length:0<this.filter(selector).length)},closest:function closest(selectors,context){var ret=[],cur=this[0],i,l;// Array (deprecated as of jQuery 1.7) if(jQuery.isArray(selectors)){for(var level=1;cur&&cur.ownerDocument&&cur!==context;){for(i=0;i<selectors.length;i++)jQuery(cur).is(selectors[i])&&ret.push({selector:selectors[i],elem:cur,level:level});cur=cur.parentNode,level++}return ret}// String var pos=POS.test(selectors)||"string"!=typeof selectors?jQuery(selectors,context||this.context):0;for(i=0,l=this.length;i<l;i++)for(cur=this[i];cur;)if(pos?-1<pos.index(cur):jQuery.find.matchesSelector(cur,selectors)){ret.push(cur);break}else if(cur=cur.parentNode,!cur||!cur.ownerDocument||cur===context||11===cur.nodeType)break;return ret=1<ret.length?jQuery.unique(ret):ret,this.pushStack(ret,"closest",selectors)},// Determine the position of an element within // the matched set of elements index:function index(elem){// No argument, return index in parent return elem?"string"==typeof elem?jQuery.inArray(this[0],jQuery(elem)):jQuery.inArray(// If it receives a jQuery object, the first element is used elem.jquery?elem[0]:elem,this):this[0]&&this[0].parentNode?this.prevAll().length:-1;// index in selector // Locate the position of the desired element },add:function add(selector,context){var set="string"==typeof selector?jQuery(selector,context):jQuery.makeArray(selector&&selector.nodeType?[selector]:selector),all=jQuery.merge(this.get(),set);return this.pushStack(isDisconnected(set[0])||isDisconnected(all[0])?all:jQuery.unique(all))},andSelf:function andSelf(){return this.add(this.prevObject)}}),jQuery.each({parent:function parent(elem){var parent=elem.parentNode;return parent&&11!==parent.nodeType?parent:null},parents:function parents(elem){return jQuery.dir(elem,"parentNode")},parentsUntil:function parentsUntil(elem,i,until){return jQuery.dir(elem,"parentNode",until)},next:function next(elem){return jQuery.nth(elem,2,"nextSibling")},prev:function prev(elem){return jQuery.nth(elem,2,"previousSibling")},nextAll:function nextAll(elem){return jQuery.dir(elem,"nextSibling")},prevAll:function prevAll(elem){return jQuery.dir(elem,"previousSibling")},nextUntil:function nextUntil(elem,i,until){return jQuery.dir(elem,"nextSibling",until)},prevUntil:function prevUntil(elem,i,until){return jQuery.dir(elem,"previousSibling",until)},siblings:function siblings(elem){return jQuery.sibling((elem.parentNode||{}).firstChild,elem)},children:function children(elem){return jQuery.sibling(elem.firstChild)},contents:function contents(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes)}},function(name,fn){jQuery.fn[name]=function(until,selector){var ret=jQuery.map(this,fn,until);return runtil.test(name)||(selector=until),selector&&"string"==typeof selector&&(ret=jQuery.filter(selector,ret)),ret=1<this.length&&!guaranteedUnique[name]?jQuery.unique(ret):ret,(1<this.length||rmultiselector.test(selector))&&rparentsprev.test(name)&&(ret=ret.reverse()),this.pushStack(ret,name,slice.call(arguments).join(","))}}),jQuery.extend({filter:function filter(expr,elems,not){return not&&(expr=":not("+expr+")"),1===elems.length?jQuery.find.matchesSelector(elems[0],expr)?[elems[0]]:[]:jQuery.find.matches(expr,elems)},dir:function dir(elem,_dir,until){for(var matched=[],cur=elem[_dir];cur&&9!==cur.nodeType&&(until===void 0||1!==cur.nodeType||!jQuery(cur).is(until));)1===cur.nodeType&&matched.push(cur),cur=cur[_dir];return matched},nth:function nth(cur,result,dir,elem){result=result||1;for(var num=0;cur&&!(1===cur.nodeType&&++num===result);cur=cur[dir]);return cur},sibling:function sibling(n,elem){for(var r=[];n;n=n.nextSibling)1===n.nodeType&&n!==elem&&r.push(n);return r}});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+="(?:\d+|null)"/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)/i,rnocache=/<(?:script|object|embed|option|style)/i,rnoshimcache=/<(?:abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video)[\s/>]/i,// checked="checked" or checked rchecked=/checked\s*(?:[^=]|=\s*.checked.)/i,rscriptType=/\/(java|ecma)script/i,rcleanScript=/^\s*<!(?:\[CDATA\[|\-\-)/,wrapMap={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},safeFragment=createSafeFragment(document);wrapMap.optgroup=wrapMap.option,wrapMap.tbody=wrapMap.tfoot=wrapMap.colgroup=wrapMap.caption=wrapMap.thead,wrapMap.th=wrapMap.td,jQuery.support.htmlSerialize||(wrapMap._default=[1,"div<div>","</div>"]),jQuery.fn.extend({text:function text(value){return jQuery.access(this,function(value){return value===void 0?jQuery.text(this):this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(value))},null,value,arguments.length)},wrapAll:function wrapAll(html){if(jQuery.isFunction(html))return this.each(function(i){jQuery(this).wrapAll(html.call(this,i))});if(this[0]){// The elements to wrap the target around var wrap=jQuery(html,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&wrap.insertBefore(this[0]),wrap.map(function(){for(var elem=this;elem.firstChild&&1===elem.firstChild.nodeType;)elem=elem.firstChild;return elem}).append(this)}return this},wrapInner:function wrapInner(html){return jQuery.isFunction(html)?this.each(function(i){jQuery(this).wrapInner(html.call(this,i))}):this.each(function(){var self=jQuery(this),contents=self.contents();contents.length?contents.wrapAll(html):self.append(html)})},wrap:function wrap(html){var isFunction=jQuery.isFunction(html);return this.each(function(i){jQuery(this).wrapAll(isFunction?html.call(this,i):html)})},unwrap:function unwrap(){return this.parent().each(function(){jQuery.nodeName(this,"body")||jQuery(this).replaceWith(this.childNodes)}).end()},append:function append(){return this.domManip(arguments,!0,function(elem){1===this.nodeType&&this.appendChild(elem)})},prepend:function prepend(){return this.domManip(arguments,!0,function(elem){1===this.nodeType&&this.insertBefore(elem,this.firstChild)})},before:function before(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(elem){this.parentNode.insertBefore(elem,this)});if(arguments.length){var set=jQuery.clean(arguments);return set.push.apply(set,this.toArray()),this.pushStack(set,"before",arguments)}},after:function after(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(elem){this.parentNode.insertBefore(elem,this.nextSibling)});if(arguments.length){var set=this.pushStack(this,"after",arguments);return set.push.apply(set,jQuery.clean(arguments)),set}},// keepData is for internal use only--do not document remove:function remove(selector,keepData){for(var i=0,elem;null!=(elem=this[i]);i++)(!selector||jQuery.filter(selector,[elem]).length)&&(keepData||1!==elem.nodeType||(jQuery.cleanData(elem.getElementsByTagName("*")),jQuery.cleanData([elem])),elem.parentNode&&elem.parentNode.removeChild(elem));return this},empty:function empty(){for(var i=0,elem;null!=(elem=this[i]);i++)// Remove any remaining nodes for(1===elem.nodeType&&jQuery.cleanData(elem.getElementsByTagName("*"));elem.firstChild;)elem.removeChild(elem.firstChild);return this},clone:function clone(dataAndEvents,deepDataAndEvents){return dataAndEvents=null!=dataAndEvents&&dataAndEvents,deepDataAndEvents=null==deepDataAndEvents?dataAndEvents:deepDataAndEvents,this.map(function(){return jQuery.clone(this,dataAndEvents,deepDataAndEvents)})},html:function html(value){return jQuery.access(this,function(value){var elem=this[0]||{},i=0,l=this.length;if(value===void 0)return 1===elem.nodeType?elem.innerHTML.replace(rinlinejQuery,""):null;if("string"==typeof value&&!rnoInnerhtml.test(value)&&(jQuery.support.leadingWhitespace||!rleadingWhitespace.test(value))&&!wrapMap[(rtagName.exec(value)||["",""])[1].toLowerCase()]){value=value.replace(rxhtmlTag,"<$1></$2>");try{for(;i<l;i++)// Remove element nodes and prevent memory leaks elem=this[i]||{},1===elem.nodeType&&(jQuery.cleanData(elem.getElementsByTagName("*")),elem.innerHTML=value);elem=0}catch(e){}}elem&&this.empty().append(value)},null,value,arguments.length)},replaceWith:function replaceWith(value){return this[0]&&this[0].parentNode?jQuery.isFunction(value)?this.each(function(i){var self=jQuery(this),old=self.html();self.replaceWith(value.call(this,i,old))}):("string"!=typeof value&&(value=jQuery(value).detach()),this.each(function(){var next=this.nextSibling,parent=this.parentNode;jQuery(this).remove(),next?jQuery(next).before(value):jQuery(parent).append(value)})):this.length?this.pushStack(jQuery(jQuery.isFunction(value)?value():value),"replaceWith",value):this},detach:function detach(selector){return this.remove(selector,!0)},domManip:function domManip(args,table,callback){var value=args[0],scripts=[],results,first,fragment,parent;// We can't cloneNode fragments that contain checked, in WebKit if(!jQuery.support.checkClone&&3===arguments.length&&"string"==typeof value&&rchecked.test(value))return this.each(function(){jQuery(this).domManip(args,table,callback,!0)});if(jQuery.isFunction(value))return this.each(function(i){var self=jQuery(this);args[0]=value.call(this,i,table?self.html():void 0),self.domManip(args,table,callback)});if(this[0]){if(parent=value&&value.parentNode,results=jQuery.support.parentNode&&parent&&11===parent.nodeType&&parent.childNodes.length===this.length?{fragment:parent}:jQuery.buildFragment(args,this,scripts),fragment=results.fragment,first=1===fragment.childNodes.length?fragment=fragment.firstChild:fragment.firstChild,first){table=table&&jQuery.nodeName(first,"tr");for(var i=0,l=this.length,lastIndex=l-1;i<l;i++)callback.call(table?root(this[i],first):this[i],// Make sure that we do not leak memory by inadvertently discarding // the original fragment (which might have attached data) instead of // using it; in addition, use the original fragment object for the last // item instead of first because it can end up being emptied incorrectly // in certain situations (Bug #8070). // Fragments from the fragment cache must always be cloned and never used // in place. results.cacheable||1<l&&i<lastIndex?jQuery.clone(fragment,!0,!0):fragment)}scripts.length&&jQuery.each(scripts,function(i,elem){elem.src?jQuery.ajax({type:"GET",global:!1,url:elem.src,async:!1,dataType:"script"}):jQuery.globalEval((elem.text||elem.textContent||elem.innerHTML||"").replace(rcleanScript,"/*$0*/")),elem.parentNode&&elem.parentNode.removeChild(elem)})}return this}}),jQuery.buildFragment=function(args,nodes,scripts){var first=args[0],fragment,cacheable,cacheresults,doc;// nodes may contain either an explicit document object, // a jQuery collection or context object. // If nodes[0] contains a valid object to assign to doc return nodes&&nodes[0]&&(doc=nodes[0].ownerDocument||nodes[0]),doc.createDocumentFragment||(doc=document),1===args.length&&"string"==typeof first&&512>first.length&&doc===document&&"<"===first.charAt(0)&&!rnocache.test(first)&&(jQuery.support.checkClone||!rchecked.test(first))&&(jQuery.support.html5Clone||!rnoshimcache.test(first))&&(cacheable=!0,cacheresults=jQuery.fragments[first],cacheresults&&1!==cacheresults&&(fragment=cacheresults)),fragment||(fragment=doc.createDocumentFragment(),jQuery.clean(args,doc,fragment,scripts)),cacheable&&(jQuery.fragments[first]=cacheresults?fragment:1),{fragment:fragment,cacheable:cacheable}},jQuery.fragments={},jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(selector){var ret=[],insert=jQuery(selector),parent=1===this.length&&this[0].parentNode;if(parent&&11===parent.nodeType&&1===parent.childNodes.length&&1===insert.length)return insert[original](this[0]),this;for(var i=0,l=insert.length,elems;i<l;i++)elems=(0<i?this.clone(!0):this).get(),jQuery(insert[i])[original](elems),ret=ret.concat(elems);return this.pushStack(ret,name,insert.selector)}}),jQuery.extend({clone:function clone(elem,dataAndEvents,deepDataAndEvents){var// IE<=8 does not properly clone detached, unknown element nodes clone=jQuery.support.html5Clone||jQuery.isXMLDoc(elem)||!rnoshimcache.test("<"+elem.nodeName+">")?elem.cloneNode(!0):shimCloneNode(elem),srcElements,destElements,i;if((!jQuery.support.noCloneEvent||!jQuery.support.noCloneChecked)&&(1===elem.nodeType||11===elem.nodeType)&&!jQuery.isXMLDoc(elem))// Weird iteration because IE will replace the length property // with an element if you are cloning the body and one of the // elements on the page has a name or id of "length" for(cloneFixAttributes(elem,clone),srcElements=getAll(elem),destElements=getAll(clone),i=0;srcElements[i];++i)// Ensure that the destination node is not null; Fixes #9587 destElements[i]&&cloneFixAttributes(srcElements[i],destElements[i]);// Copy the events from the original to the clone if(dataAndEvents&&(cloneCopyEvent(elem,clone),deepDataAndEvents))for(srcElements=getAll(elem),destElements=getAll(clone),i=0;srcElements[i];++i)cloneCopyEvent(srcElements[i],destElements[i]);// Return the cloned set return srcElements=destElements=null,clone},clean:function clean(elems,context,fragment,scripts){var ret=[],checkScriptType,script,j;context=context||document,"undefined"==typeof context.createElement&&(context=context.ownerDocument||context[0]&&context[0].ownerDocument||document);for(var i=0,elem;null!=(elem=elems[i]);i++)if("number"==typeof elem&&(elem+=""),!!elem){// Convert html string into DOM nodes if("string"==typeof elem)if(!rhtml.test(elem))elem=context.createTextNode(elem);else{elem=elem.replace(rxhtmlTag,"<$1></$2>");// Trim whitespace, otherwise indexOf won't work as expected var tag=(rtagName.exec(elem)||["",""])[1].toLowerCase(),wrap=wrapMap[tag]||wrapMap._default,depth=wrap[0],div=context.createElement("div"),safeChildNodes=safeFragment.childNodes,remove;// Append wrapper element to unknown element safe doc fragment // Move to the right depth for(context===document?safeFragment.appendChild(div):createSafeFragment(context).appendChild(div),div.innerHTML=wrap[1]+elem+wrap[2];depth--;)div=div.lastChild;// Remove IE's autoinserted <tbody> from table fragments if(!jQuery.support.tbody){// String was a <table>, *may* have spurious <tbody> var hasBody=rtbody.test(elem),tbody="table"!==tag||hasBody?// String was a bare <thead> or <tfoot> "<table>"!==wrap[1]||hasBody?[]:div.childNodes:div.firstChild&&div.firstChild.childNodes;for(j=tbody.length-1;0<=j;--j)jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length&&tbody[j].parentNode.removeChild(tbody[j])}// IE completely kills leading whitespace when innerHTML is used !jQuery.support.leadingWhitespace&&rleadingWhitespace.test(elem)&&div.insertBefore(context.createTextNode(rleadingWhitespace.exec(elem)[0]),div.firstChild),elem=div.childNodes,div&&(div.parentNode.removeChild(div),0<safeChildNodes.length&&(remove=safeChildNodes[safeChildNodes.length-1],remove&&remove.parentNode&&remove.parentNode.removeChild(remove)))}// Resets defaultChecked for any radios and checkboxes // about to be appended to the DOM in IE 6/7 (#8060) var len;if(!jQuery.support.appendChecked)if(elem[0]&&"number"==typeof(len=elem.length))for(j=0;j<len;j++)findInputs(elem[j]);else findInputs(elem);elem.nodeType?ret.push(elem):ret=jQuery.merge(ret,elem)}if(fragment)for(checkScriptType=function checkScriptType(elem){return!elem.type||rscriptType.test(elem.type)},i=0;ret[i];i++)if(script=ret[i],scripts&&jQuery.nodeName(script,"script")&&(!script.type||rscriptType.test(script.type)))scripts.push(script.parentNode?script.parentNode.removeChild(script):script);else{if(1===script.nodeType){var jsTags=jQuery.grep(script.getElementsByTagName("script"),checkScriptType);ret.splice.apply(ret,[i+1,0].concat(jsTags))}fragment.appendChild(script)}return ret},cleanData:function cleanData(elems){for(var cache=jQuery.cache,special=jQuery.event.special,deleteExpando=jQuery.support.deleteExpando,i=0,data,id,elem;null!=(elem=elems[i]);i++)if(!(elem.nodeName&&jQuery.noData[elem.nodeName.toLowerCase()])&&(id=elem[jQuery.expando],id)){if(data=cache[id],data&&data.events){for(var type in data.events)special[type]?jQuery.event.remove(elem,type):jQuery.removeEvent(elem,type,data.handle);// Null the DOM reference to avoid IE6/7/8 leak (#7054) data.handle&&(data.handle.elem=null)}deleteExpando?delete elem[jQuery.expando]:elem.removeAttribute&&elem.removeAttribute(jQuery.expando),delete cache[id]}}});var ralpha=/alpha\([^)]*\)/i,ropacity=/opacity=([^)]*)/,// fixed for IE9, see #8346 rupper=/([A-Z]|^ms)/g,rnum=/^[\-+]?(?:\d*\.)?\d+$/i,rnumnonpx=/^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,rrelNum=/^([\-+])=([\-+.\de]+)/,rmargin=/^margin/,cssShow={position:"absolute",visibility:"hidden",display:"block"},// order is important! cssExpand=["Top","Right","Bottom","Left"],curCSS,getComputedStyle,currentStyle;jQuery.fn.css=function(name,value){return jQuery.access(this,function(elem,name,value){return value===void 0?jQuery.css(elem,name):jQuery.style(elem,name,value)},name,value,1<arguments.length)},jQuery.extend({// Add in style property hooks for overriding the default // behavior of getting and setting a style property cssHooks:{opacity:{get:function get(elem,computed){if(computed){// We should always get a number back from opacity var ret=curCSS(elem,"opacity");return""===ret?"1":ret}return elem.style.opacity}}},// Exclude the following css properties to add px cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},// Add in properties whose names you wish to fix before // setting or getting the value cssProps:{// normalize float css property float:jQuery.support.cssFloat?"cssFloat":"styleFloat"},// Get and set the style property on a DOM Node style:function style(elem,name,value,extra){// Don't set styles on text and comment nodes if(elem&&3!==elem.nodeType&&8!==elem.nodeType&&elem.style){// Make sure that we're working with the right name var origName=jQuery.camelCase(name),style=elem.style,hooks=jQuery.cssHooks[origName],ret,type;// Check if we're setting a value if(name=jQuery.cssProps[origName]||origName,void 0!==value){// Make sure that NaN and null values aren't set. See: #7116 if(type=typeof value,"string"===type&&(ret=rrelNum.exec(value))&&(value=+(ret[1]+1)*+ret[2]+parseFloat(jQuery.css(elem,name)),type="number"),null==value||"number"===type&&isNaN(value))return;// If a number was passed in, add 'px' to the (except for certain CSS properties) // If a hook was provided, use that value, otherwise just set the specified value if("number"!==type||jQuery.cssNumber[origName]||(value+="px"),!hooks||!("set"in hooks)||void 0!==(value=hooks.set(elem,value)))// Wrapped to prevent IE from throwing errors when 'invalid' values are provided // Fixes bug #5509 try{style[name]=value}catch(e){}}else// If a hook was provided get the non-computed value from there return hooks&&"get"in hooks&&void 0!==(ret=hooks.get(elem,!1,extra))?ret:style[name];// Otherwise just get the value from the style object }},css:function css(elem,name,extra){var ret,hooks;// Make sure that we're working with the right name // If a hook was provided get the computed value from there return(name=jQuery.camelCase(name),hooks=jQuery.cssHooks[name],name=jQuery.cssProps[name]||name,"cssFloat"===name&&(name="float"),hooks&&"get"in hooks&&void 0!==(ret=hooks.get(elem,!0,extra)))?ret:curCSS?curCSS(elem,name):void 0},// A method for quickly swapping in/out CSS properties to get correct calculations swap:function swap(elem,options,callback){var old={},ret,name;// Remember the old values, and insert the new ones for(name in options)old[name]=elem.style[name],elem.style[name]=options[name];// Revert the old values for(name in ret=callback.call(elem),options)elem.style[name]=old[name];return ret}}),jQuery.curCSS=jQuery.css,document.defaultView&&document.defaultView.getComputedStyle&&(getComputedStyle=function getComputedStyle(elem,name){var style=elem.style,ret,defaultView,computedStyle,width;return name=name.replace(rupper,"-$1").toLowerCase(),(defaultView=elem.ownerDocument.defaultView)&&(computedStyle=defaultView.getComputedStyle(elem,null))&&(ret=computedStyle.getPropertyValue(name),""===ret&&!jQuery.contains(elem.ownerDocument.documentElement,elem)&&(ret=jQuery.style(elem,name))),!jQuery.support.pixelMargin&&computedStyle&&rmargin.test(name)&&rnumnonpx.test(ret)&&(width=style.width,style.width=ret,ret=computedStyle.width,style.width=width),ret}),document.documentElement.currentStyle&&(currentStyle=function currentStyle(elem,name){var ret=elem.currentStyle&&elem.currentStyle[name],style=elem.style,left,rsLeft,uncomputed;// Avoid setting ret to empty string here // so we don't default to auto return null==ret&&style&&(uncomputed=style[name])&&(ret=uncomputed),rnumnonpx.test(ret)&&(left=style.left,rsLeft=elem.runtimeStyle&&elem.runtimeStyle.left,rsLeft&&(elem.runtimeStyle.left=elem.currentStyle.left),style.left="fontSize"===name?"1em":ret,ret=style.pixelLeft+"px",style.left=left,rsLeft&&(elem.runtimeStyle.left=rsLeft)),""===ret?"auto":ret}),curCSS=getComputedStyle||currentStyle,jQuery.each(["height","width"],function(i,name){jQuery.cssHooks[name]={get:function get(elem,computed,extra){if(computed)return 0===elem.offsetWidth?jQuery.swap(elem,cssShow,function(){return getWidthOrHeight(elem,name,extra)}):getWidthOrHeight(elem,name,extra)},set:function set(elem,value){return rnum.test(value)?value+"px":value}}}),jQuery.support.opacity||(jQuery.cssHooks.opacity={get:function get(elem,computed){// IE uses filters for opacity return ropacity.test((computed&&elem.currentStyle?elem.currentStyle.filter:elem.style.filter)||"")?parseFloat(RegExp.$1)/100+"":computed?"1":""},set:function set(elem,value){var style=elem.style,currentStyle=elem.currentStyle,opacity=jQuery.isNumeric(value)?"alpha(opacity="+100*value+")":"",filter=currentStyle&¤tStyle.filter||style.filter||"";// IE has trouble with opacity if it does not have layout // Force it by setting the zoom level style.zoom=1;// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 1<=value&&""===jQuery.trim(filter.replace(ralpha,""))&&(style.removeAttribute("filter"),currentStyle&&!currentStyle.filter)||(// otherwise, set new filter values style.filter=ralpha.test(filter)?filter.replace(ralpha,opacity):filter+" "+opacity)}}),jQuery(function(){jQuery.support.reliableMarginRight||(jQuery.cssHooks.marginRight={get:function get(elem,computed){// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right // Work around by temporarily setting element display to inline-block return jQuery.swap(elem,{display:"inline-block"},function(){return computed?curCSS(elem,"margin-right"):elem.style.marginRight})}})}),jQuery.expr&&jQuery.expr.filters&&(jQuery.expr.filters.hidden=function(elem){var width=elem.offsetWidth,height=elem.offsetHeight;return 0===width&&0===height||!jQuery.support.reliableHiddenOffsets&&"none"===(elem.style&&elem.style.display||jQuery.css(elem,"display"))},jQuery.expr.filters.visible=function(elem){return!jQuery.expr.filters.hidden(elem)}),jQuery.each({margin:"",padding:"",border:"Width"},function(prefix,suffix){jQuery.cssHooks[prefix+suffix]={expand:function expand(value){var// assumes a single number if not a string parts="string"==typeof value?value.split(" "):[value],expanded={},i;for(i=0;4>i;i++)expanded[prefix+cssExpand[i]+suffix]=parts[i]||parts[i-2]||parts[0];return expanded}}});var r20=/%20/g,rbracket=/\[\]$/,rCRLF=/\r?\n/g,rhash=/#.*$/,rheaders=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,// IE leaves an \r character at EOL rinput=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,// #7653, #8125, #8152: local protocol detection rlocalProtocol=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,rnoContent=/^(?:GET|HEAD)$/,rprotocol=/^\/\//,rquery=/\?/,rscript=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,rselectTextarea=/^(?:select|textarea)/i,rspacesAjax=/\s+/,rts=/([?&])_=[^&]*/,rurl=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,// Keep a copy of the old load method _load=jQuery.fn.load,/* Prefilters * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) * 2) These are called: * - BEFORE asking for a transport * - AFTER param serialization (s.data is a string if s.processData is true) * 3) key is the dataType * 4) the catchall symbol "*" can be used * 5) execution will start with transport dataType and THEN continue down to "*" if needed */prefilters={},/* Transports bindings * 1) key is the dataType * 2) the catchall symbol "*" can be used * 3) selection will start with transport dataType and THEN go to "*" if needed */transports={},// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression allTypes="*/*",// Document location ajaxLocation,// Document location segments ajaxLocParts;// #8138, IE may throw an exception when accessing // a field from window.location if document.domain has been set try{ajaxLocation=location.href}catch(e){// Use the href attribute of an A element // since IE will modify it given document.location ajaxLocation=document.createElement("a"),ajaxLocation.href="",ajaxLocation=ajaxLocation.href}// Segment location into parts ajaxLocParts=rurl.exec(ajaxLocation.toLowerCase())||[],jQuery.fn.extend({load:function load(url,params,callback){if("string"!=typeof url&&_load)return _load.apply(this,arguments);// Don't do a request if no elements are being requested if(!this.length)return this;var off=url.indexOf(" ");if(0<=off){var selector=url.slice(off,url.length);url=url.slice(0,off)}// Default to a GET request var type="GET";// If the second parameter was provided params&&(jQuery.isFunction(params)?(callback=params,params=void 0):"object"==typeof params&&(params=jQuery.param(params,jQuery.ajaxSettings.traditional),type="POST"));var self=this;// Request the remote document return jQuery.ajax({url:url,type:type,dataType:"html",data:params,// Complete callback (responseText is used internally) complete:function complete(jqXHR,status,responseText){responseText=jqXHR.responseText,jqXHR.isResolved()&&(jqXHR.done(function(r){responseText=r}),self.html(selector?// Create a dummy div to hold the results jQuery("<div>")// inject the contents of the document in, removing the scripts // to avoid any 'Permission Denied' errors in IE .append(responseText.replace(rscript,""))// Locate the specified elements .find(selector):// If not, just inject the full result responseText)),callback&&self.each(callback,[responseText,status,jqXHR])}}),this},serialize:function serialize(){return jQuery.param(this.serializeArray())},serializeArray:function serializeArray(){return this.map(function(){return this.elements?jQuery.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||rselectTextarea.test(this.nodeName)||rinput.test(this.type))}).map(function(i,elem){var val=jQuery(this).val();return null==val?null:jQuery.isArray(val)?jQuery.map(val,function(val,i){return{name:elem.name,value:val.replace(rCRLF,"\r\n")}}):{name:elem.name,value:val.replace(rCRLF,"\r\n")}}).get()}}),jQuery.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(i,o){jQuery.fn[o]=function(f){return this.on(o,f)}}),jQuery.each(["get","post"],function(i,method){jQuery[method]=function(url,data,callback,type){return jQuery.isFunction(data)&&(type=type||callback,callback=data,data=void 0),jQuery.ajax({type:method,url:url,data:data,success:callback,dataType:type})}}),jQuery.extend({getScript:function getScript(url,callback){return jQuery.get(url,void 0,callback,"script")},getJSON:function getJSON(url,data,callback){return jQuery.get(url,data,callback,"json")},// Creates a full fledged settings object into target // with both ajaxSettings and settings fields. // If target is omitted, writes into ajaxSettings. ajaxSetup:function ajaxSetup(target,settings){return settings?ajaxExtend(target,jQuery.ajaxSettings):(settings=target,target=jQuery.ajaxSettings),ajaxExtend(target,settings),target},ajaxSettings:{url:ajaxLocation,isLocal:rlocalProtocol.test(ajaxLocParts[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,/* timeout: 0, data: null, dataType: null, username: null, password: null, cache: null, traditional: false, headers: {}, */accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},// List of data converters // 1) key format is "source_type destination_type" (a single space in-between) // 2) the catchall symbol "*" can be used for source_type converters:{// Convert anything to text "* text":window.String,// Text to html (true = no transformation) "text html":!0,// Evaluate text as a json expression "text json":jQuery.parseJSON,// Parse text as xml "text xml":jQuery.parseXML},// For options that shouldn't be deep extended: // you can add your own custom options here if // and when you create one that shouldn't be // deep extended (see ajaxExtend) flatOptions:{context:!0,url:!0}},ajaxPrefilter:addToPrefiltersOrTransports(prefilters),ajaxTransport:addToPrefiltersOrTransports(transports),// Main method ajax:function ajax(url,options){// Callback for when everything is done // It is defined here because jslint complains if it is declared // at the end of the function (which would be more logical and readable) function done(status,nativeStatusText,responses,headers){// Called once if(2!==state){state=2,timeoutTimer&&clearTimeout(timeoutTimer),transport=void 0,responseHeadersString=headers||"",jqXHR.readyState=0<status?4:0;var statusText=nativeStatusText,response=responses?ajaxHandleResponses(s,jqXHR,responses):void 0,isSuccess,success,error,lastModified,etag;// If successful, handle type chaining if(!(200<=status&&300>status||304===status))error=statusText,(!statusText||status)&&(statusText="error",0>status&&(status=0));else// If not modified if(s.ifModified&&((lastModified=jqXHR.getResponseHeader("Last-Modified"))&&(jQuery.lastModified[ifModifiedKey]=lastModified),(etag=jqXHR.getResponseHeader("Etag"))&&(jQuery.etag[ifModifiedKey]=etag)),304===status)statusText="notmodified",isSuccess=!0;else try{success=ajaxConvert(s,response),statusText="success",isSuccess=!0}catch(e){statusText="parsererror",error=e}// Set data for the fake xhr object jqXHR.status=status,jqXHR.statusText=""+(nativeStatusText||statusText),isSuccess?deferred.resolveWith(callbackContext,[success,statusText,jqXHR]):deferred.rejectWith(callbackContext,[jqXHR,statusText,error]),jqXHR.statusCode(statusCode),statusCode=void 0,fireGlobals&&globalEventContext.trigger("ajax"+(isSuccess?"Success":"Error"),[jqXHR,s,isSuccess?success:error]),completeDeferred.fireWith(callbackContext,[jqXHR,statusText]),fireGlobals&&(globalEventContext.trigger("ajaxComplete",[jqXHR,s]),! --jQuery.active&&jQuery.event.trigger("ajaxStop"))}// State is "done" now }// Attach deferreds "object"==typeof url&&(options=url,url=void 0),options=options||{};var// Create the final options object s=jQuery.ajaxSetup({},options),// Callbacks context callbackContext=s.context||s,// Context for global events // It's the callbackContext if one was provided in the options // and if it's a DOM node or a jQuery collection globalEventContext=callbackContext!==s&&(callbackContext.nodeType||callbackContext instanceof jQuery)?jQuery(callbackContext):jQuery.event,// Deferreds deferred=jQuery.Deferred(),completeDeferred=jQuery.Callbacks("once memory"),// Status-dependent callbacks statusCode=s.statusCode||{},// Headers (they are sent all at once) requestHeaders={},requestHeadersNames={},// The jqXHR state state=0,// Fake xhr jqXHR={readyState:0,// Caches the header setRequestHeader:function setRequestHeader(name,value){if(!state){var lname=name.toLowerCase();name=requestHeadersNames[lname]=requestHeadersNames[lname]||name,requestHeaders[name]=value}return this},// Raw string getAllResponseHeaders:function getAllResponseHeaders(){return 2===state?responseHeadersString:null},// Builds headers hashtable if needed getResponseHeader:function getResponseHeader(key){var match;if(2===state){if(!responseHeaders)for(responseHeaders={};match=rheaders.exec(responseHeadersString);)responseHeaders[match[1].toLowerCase()]=match[2];match=responseHeaders[key.toLowerCase()]}return void 0===match?null:match},// Overrides response content-type header overrideMimeType:function overrideMimeType(type){return state||(s.mimeType=type),this},// Cancel the request abort:function abort(statusText){return statusText=statusText||"abort",transport&&transport.abort(statusText),done(0,statusText),this}},// ifModified key ifModifiedKey,// Response headers responseHeadersString,responseHeaders,// transport transport,// timeout handle timeoutTimer,// Cross-domain detection vars parts,// To know if global events are to be dispatched fireGlobals,// Loop variable i;// If request was aborted inside a prefilter, stop there if(deferred.promise(jqXHR),jqXHR.success=jqXHR.done,jqXHR.error=jqXHR.fail,jqXHR.complete=completeDeferred.add,jqXHR.statusCode=function(map){if(map){var tmp;if(2>state)for(tmp in map)statusCode[tmp]=[statusCode[tmp],map[tmp]];else tmp=map[jqXHR.status],jqXHR.then(tmp,tmp)}return this},s.url=((url||s.url)+"").replace(rhash,"").replace(rprotocol,ajaxLocParts[1]+"//"),s.dataTypes=jQuery.trim(s.dataType||"*").toLowerCase().split(rspacesAjax),null==s.crossDomain&&(parts=rurl.exec(s.url.toLowerCase()),s.crossDomain=!!(parts&&(parts[1]!=ajaxLocParts[1]||parts[2]!=ajaxLocParts[2]||(parts[3]||("http:"===parts[1]?80:443))!=(ajaxLocParts[3]||("http:"===ajaxLocParts[1]?80:443))))),s.data&&s.processData&&"string"!=typeof s.data&&(s.data=jQuery.param(s.data,s.traditional)),inspectPrefiltersOrTransports(prefilters,s,options,jqXHR),2==state)return!1;// We can fire global events as of now if asked to // More options handling for requests with no content if(fireGlobals=s.global,s.type=s.type.toUpperCase(),s.hasContent=!rnoContent.test(s.type),fireGlobals&&0==jQuery.active++&&jQuery.event.trigger("ajaxStart"),!s.hasContent&&(s.data&&(s.url+=(rquery.test(s.url)?"&":"?")+s.data,delete s.data),ifModifiedKey=s.url,!1===s.cache))// Add anti-cache in url if needed {var ts=jQuery.now(),// try replacing _= if it is there ret=s.url.replace(rts,"$1_="+ts);// if nothing was replaced, add timestamp to the end s.url=ret+(ret===s.url?(rquery.test(s.url)?"&":"?")+"_="+ts:"")}// Set the correct header, if data is being sent // Check for headers option for(i in(s.data&&s.hasContent&&!1!==s.contentType||options.contentType)&&jqXHR.setRequestHeader("Content-Type",s.contentType),s.ifModified&&(ifModifiedKey=ifModifiedKey||s.url,jQuery.lastModified[ifModifiedKey]&&jqXHR.setRequestHeader("If-Modified-Since",jQuery.lastModified[ifModifiedKey]),jQuery.etag[ifModifiedKey]&&jqXHR.setRequestHeader("If-None-Match",jQuery.etag[ifModifiedKey])),jqXHR.setRequestHeader("Accept",s.dataTypes[0]&&s.accepts[s.dataTypes[0]]?s.accepts[s.dataTypes[0]]+("*"===s.dataTypes[0]?"":", */*; q=0.01"):s.accepts["*"]),s.headers)jqXHR.setRequestHeader(i,s.headers[i]);// Allow custom headers/mimetypes and early abort if(s.beforeSend&&(!1===s.beforeSend.call(callbackContext,jqXHR,s)||2===state))return jqXHR.abort(),!1;// Install callbacks on deferreds for(i in{success:1,error:1,complete:1})jqXHR[i](s[i]);// Get transport // If no transport, we auto-abort if(transport=inspectPrefiltersOrTransports(transports,s,options,jqXHR),!transport)done(-1,"No Transport");else{jqXHR.readyState=1,fireGlobals&&globalEventContext.trigger("ajaxSend",[jqXHR,s]),s.async&&0<s.timeout&&(timeoutTimer=setTimeout(function(){jqXHR.abort("timeout")},s.timeout));try{state=1,transport.send(requestHeaders,done)}catch(e){// Propagate exception as error if not done if(2>state)done(-1,e);else throw e}}return jqXHR},// Serialize an array of form elements or a set of // key/values into a query string param:function param(a,traditional){var s=[],add=function add(key,value){value=jQuery.isFunction(value)?value():value,s[s.length]=encodeURIComponent(key)+"="+encodeURIComponent(value)};// Set traditional to true for jQuery <= 1.3.2 behavior. // If an array was passed in, assume that it is an array of form elements. if(void 0===traditional&&(traditional=jQuery.ajaxSettings.traditional),jQuery.isArray(a)||a.jquery&&!jQuery.isPlainObject(a))jQuery.each(a,function(){add(this.name,this.value)});else// If traditional, encode the "old" way (the way 1.3.2 or older // did it), otherwise encode params recursively. for(var prefix in a)buildParams(prefix,a[prefix],traditional,add);// Return the resulting serialization return s.join("&").replace(r20,"+")}}),jQuery.extend({// Counter for holding the number of active queries active:0,// Last-Modified header cache for next request lastModified:{},etag:{}});var jsc=jQuery.now(),jsre=/(\=)\?(&|$)|\?\?/i;// Default jsonp settings jQuery.ajaxSetup({jsonp:"callback",jsonpCallback:function jsonpCallback(){return jQuery.expando+"_"+jsc++}}),jQuery.ajaxPrefilter("json jsonp",function(s,originalSettings,jqXHR){var inspectData="string"==typeof s.data&&/^application\/x\-www\-form\-urlencoded/.test(s.contentType);if("jsonp"===s.dataTypes[0]||!1!==s.jsonp&&(jsre.test(s.url)||inspectData&&jsre.test(s.data))){var jsonpCallback=s.jsonpCallback=jQuery.isFunction(s.jsonpCallback)?s.jsonpCallback():s.jsonpCallback,previous=window[jsonpCallback],url=s.url,data=s.data,replace="$1"+jsonpCallback+"$2",responseContainer;// Delegate to script return!1!==s.jsonp&&(url=url.replace(jsre,replace),s.url===url&&(inspectData&&(data=data.replace(jsre,replace)),s.data===data&&(url+=(/\?/.test(url)?"&":"?")+s.jsonp+"="+jsonpCallback))),s.url=url,s.data=data,window[jsonpCallback]=function(response){responseContainer=[response]},jqXHR.always(function(){window[jsonpCallback]=previous,responseContainer&&jQuery.isFunction(previous)&&window[jsonpCallback](responseContainer[0])}),s.converters["script json"]=function(){return responseContainer||jQuery.error(jsonpCallback+" was not called"),responseContainer[0]},s.dataTypes[0]="json","script"}}),jQuery.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function textScript(text){return jQuery.globalEval(text),text}}}),jQuery.ajaxPrefilter("script",function(s){s.cache===void 0&&(s.cache=!1),s.crossDomain&&(s.type="GET",s.global=!1)}),jQuery.ajaxTransport("script",function(s){// This transport only deals with cross domain requests if(s.crossDomain){var head=document.head||document.getElementsByTagName("head")[0]||document.documentElement,script;return{send:function send(_,callback){// Attach handlers for all browsers // Use insertBefore instead of appendChild to circumvent an IE6 bug. // This arises when a base node is used (#2709 and #4378). script=document.createElement("script"),script.async="async",s.scriptCharset&&(script.charset=s.scriptCharset),script.src=s.url,script.onload=script.onreadystatechange=function(_,isAbort){(isAbort||!script.readyState||/loaded|complete/.test(script.readyState))&&(script.onload=script.onreadystatechange=null,head&&script.parentNode&&head.removeChild(script),script=void 0,!isAbort&&callback(200,"success"))},head.insertBefore(script,head.firstChild)},abort:function abort(){script&&script.onload(0,1)}}}});var// #5280: Internet Explorer will keep connections alive if we don't abort on unload xhrOnUnloadAbort=!!window.ActiveXObject&&function(){// Abort all pending requests for(var key in xhrCallbacks)xhrCallbacks[key](0,1)},xhrId=0,xhrCallbacks;jQuery.ajaxSettings.xhr=window.ActiveXObject?/* Microsoft failed to properly * implement the XMLHttpRequest in IE7 (can't request local files), * so we use the ActiveXObject when it is available * Additionally XMLHttpRequest can be disabled in IE7/IE8 so * we need a fallback. */function(){return!this.isLocal&&createStandardXHR()||createActiveXHR()}:// For all other browsers, use the standard XMLHttpRequest object createStandardXHR,function(xhr){jQuery.extend(jQuery.support,{ajax:!!xhr,cors:!!xhr&&"withCredentials"in xhr})}(jQuery.ajaxSettings.xhr()),jQuery.support.ajax&&jQuery.ajaxTransport(function(s){// Cross domain only allowed if supported through XMLHttpRequest if(!s.crossDomain||jQuery.support.cors){var _callback;return{send:function send(headers,complete){// Get a new xhr var xhr=s.xhr(),handle,i;// Open the socket // Passing null username, generates a login popup on Opera (#2865) // Apply custom fields if provided if(s.username?xhr.open(s.type,s.url,s.async,s.username,s.password):xhr.open(s.type,s.url,s.async),s.xhrFields)for(i in s.xhrFields)xhr[i]=s.xhrFields[i];// Override mime type if needed s.mimeType&&xhr.overrideMimeType&&xhr.overrideMimeType(s.mimeType),s.crossDomain||headers["X-Requested-With"]||(headers["X-Requested-With"]="XMLHttpRequest");// Need an extra try/catch for cross domain requests in Firefox 3 try{for(i in headers)xhr.setRequestHeader(i,headers[i])}catch(_){}// Do send the request // This may raise an exception which is actually // handled in jQuery.ajax (so no try/catch here) xhr.send(s.hasContent&&s.data||null),_callback=function callback(_,isAbort){var status,statusText,responseHeaders,responses,xml;// Firefox throws exceptions when accessing properties // of an xhr when a network error occured // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE) try{// Was never called and is aborted or complete if(_callback&&(isAbort||4===xhr.readyState))// If it's an abort if(_callback=void 0,handle&&(xhr.onreadystatechange=jQuery.noop,xhrOnUnloadAbort&&delete xhrCallbacks[handle]),isAbort)4!==xhr.readyState&&xhr.abort();else{status=xhr.status,responseHeaders=xhr.getAllResponseHeaders(),responses={},xml=xhr.responseXML,xml&&xml.documentElement/* #4958 */&&(responses.xml=xml);// When requesting binary data, IE6-9 will throw an exception // on any attempt to access responseText (#11426) try{responses.text=xhr.responseText}catch(_){}// Firefox throws an exception when accessing // statusText for faulty cross-domain requests try{statusText=xhr.statusText}catch(e){statusText=""}// Filter status for non standard behaviors // If the request is local and we have data: assume a success // (success with no data won't get notified, that's the best we // can do given current implementations) status||!s.isLocal||s.crossDomain?1223===status&&(status=204):status=responses.text?200:404}}catch(firefoxAccessException){isAbort||complete(-1,firefoxAccessException)}// Call complete if needed responses&&complete(status,statusText,responses,responseHeaders)},s.async&&4!==xhr.readyState?(handle=++xhrId,xhrOnUnloadAbort&&(!xhrCallbacks&&(xhrCallbacks={},jQuery(window).unload(xhrOnUnloadAbort)),xhrCallbacks[handle]=_callback),xhr.onreadystatechange=_callback):_callback()},abort:function abort(){_callback&&_callback(0,1)}}}});var elemdisplay={},rfxtypes=/^(?:toggle|show|hide)$/,rfxnum=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,fxAttrs=[// height animations ["height","marginTop","marginBottom","paddingTop","paddingBottom"],// width animations ["width","marginLeft","marginRight","paddingLeft","paddingRight"],// opacity animations ["opacity"]],iframe,iframeDoc,timerId,fxNow;jQuery.fn.extend({show:function show(speed,easing,callback){var elem,display;if(speed||0===speed)return this.animate(genFx("show",3),speed,easing,callback);for(var i=0,j=this.length;i<j;i++)elem=this[i],elem.style&&(display=elem.style.display,!jQuery._data(elem,"olddisplay")&&"none"===display&&(display=elem.style.display=""),(""===display&&"none"===jQuery.css(elem,"display")||!jQuery.contains(elem.ownerDocument.documentElement,elem))&&jQuery._data(elem,"olddisplay",defaultDisplay(elem.nodeName)));// Set the display of most of the elements in a second loop // to avoid the constant reflow for(i=0;i<j;i++)elem=this[i],elem.style&&(display=elem.style.display,(""===display||"none"===display)&&(elem.style.display=jQuery._data(elem,"olddisplay")||""));return this},hide:function hide(speed,easing,callback){if(speed||0===speed)return this.animate(genFx("hide",3),speed,easing,callback);for(var i=0,j=this.length,elem,display;i<j;i++)elem=this[i],elem.style&&(display=jQuery.css(elem,"display"),"none"!==display&&!jQuery._data(elem,"olddisplay")&&jQuery._data(elem,"olddisplay",display));// Set the display of the elements in a second loop // to avoid the constant reflow for(i=0;i<j;i++)this[i].style&&(this[i].style.display="none");return this},// Save the old toggle function _toggle:jQuery.fn.toggle,toggle:function toggle(fn,fn2,callback){var bool="boolean"==typeof fn;return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):null==fn||bool?this.each(function(){var state=bool?fn:jQuery(this).is(":hidden");jQuery(this)[state?"show":"hide"]()}):this.animate(genFx("toggle",3),fn,fn2,callback),this},fadeTo:function fadeTo(speed,to,easing,callback){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:to},speed,easing,callback)},animate:function animate(prop,speed,easing,callback){function doAnimation(){!1===optall.queue&&jQuery._mark(this);var opt=jQuery.extend({},optall),isElement=1===this.nodeType,hidden=isElement&&jQuery(this).is(":hidden"),name,val,p,e,hooks,replace,parts,start,end,unit,method;// will store per property easing and be used to determine when an animation is complete // first pass over propertys to expand / normalize for(p in opt.animatedProperties={},prop)if(name=jQuery.camelCase(p),p!==name&&(prop[name]=prop[p],delete prop[p]),(hooks=jQuery.cssHooks[name])&&"expand"in hooks)// not quite $.extend, this wont overwrite keys already present. // also - reusing 'p' from above because we have the correct "name" for(p in replace=hooks.expand(prop[name]),delete prop[name],replace)p in prop||(prop[p]=replace[p]);for(name in prop){if(val=prop[name],jQuery.isArray(val)?(opt.animatedProperties[name]=val[1],val=prop[name]=val[0]):opt.animatedProperties[name]=opt.specialEasing&&opt.specialEasing[name]||opt.easing||"swing","hide"===val&&hidden||"show"===val&&!hidden)return opt.complete.call(this);isElement&&("height"===name||"width"===name)&&(opt.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],"inline"===jQuery.css(this,"display")&&"none"===jQuery.css(this,"float")&&(jQuery.support.inlineBlockNeedsLayout&&"inline"!==defaultDisplay(this.nodeName)?this.style.zoom=1:this.style.display="inline-block"))}for(p in null!=opt.overflow&&(this.style.overflow="hidden"),prop)e=new jQuery.fx(this,opt,p),val=prop[p],rfxtypes.test(val)?(method=jQuery._data(this,"toggle"+p)||("toggle"===val?hidden?"show":"hide":0),method?(jQuery._data(this,"toggle"+p,"show"===method?"hide":"show"),e[method]()):e[val]()):(parts=rfxnum.exec(val),start=e.cur(),parts?(end=parseFloat(parts[2]),unit=parts[3]||(jQuery.cssNumber[p]?"":"px"),"px"!==unit&&(jQuery.style(this,p,(end||1)+unit),start=(end||1)/e.cur()*start,jQuery.style(this,p,start+unit)),parts[1]&&(end=("-="===parts[1]?-1:1)*end+start),e.custom(start,end,unit)):e.custom(start,val,""));// For JS strict compliance return!0}var optall=jQuery.speed(speed,easing,callback);return jQuery.isEmptyObject(prop)?this.each(optall.complete,[!1]):(prop=jQuery.extend({},prop),!1===optall.queue?this.each(doAnimation):this.queue(optall.queue,doAnimation));// Do not change referenced properties as per-property easing will be lost },stop:function stop(type,clearQueue,gotoEnd){return"string"!=typeof type&&(gotoEnd=clearQueue,clearQueue=type,type=void 0),clearQueue&&!1!==type&&this.queue(type||"fx",[]),this.each(function(){function stopQueue(elem,data,index){var hooks=data[index];jQuery.removeData(elem,index,!0),hooks.stop(gotoEnd)}var hadTimers=!1,timers=jQuery.timers,data=jQuery._data(this),index;// clear marker counters if we know they won't be if(gotoEnd||jQuery._unmark(!0,this),null==type)for(index in data)data[index]&&data[index].stop&&index.indexOf(".run")===index.length-4&&stopQueue(this,data,index);else data[index=type+".run"]&&data[index].stop&&stopQueue(this,data,index);for(index=timers.length;index--;)timers[index].elem===this&&(null==type||timers[index].queue===type)&&(gotoEnd?timers[index](!0):timers[index].saveState(),hadTimers=!0,timers.splice(index,1));// start the next in the queue if the last step wasn't forced // timers currently will call their complete callbacks, which will dequeue // but only if they were gotoEnd gotoEnd&&hadTimers||jQuery.dequeue(this,type)})}}),jQuery.each({slideDown:genFx("show",1),slideUp:genFx("hide",1),slideToggle:genFx("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(name,props){jQuery.fn[name]=function(speed,easing,callback){return this.animate(props,speed,easing,callback)}}),jQuery.extend({speed:function speed(_speed,easing,fn){var opt=_speed&&"object"==typeof _speed?jQuery.extend({},_speed):{complete:fn||!fn&&easing||jQuery.isFunction(_speed)&&_speed,duration:_speed,easing:fn&&easing||easing&&!jQuery.isFunction(easing)&&easing};return opt.duration=jQuery.fx.off?0:"number"==typeof opt.duration?opt.duration:opt.duration in jQuery.fx.speeds?jQuery.fx.speeds[opt.duration]:jQuery.fx.speeds._default,(null==opt.queue||!0===opt.queue)&&(opt.queue="fx"),opt.old=opt.complete,opt.complete=function(noUnmark){jQuery.isFunction(opt.old)&&opt.old.call(this),opt.queue?jQuery.dequeue(this,opt.queue):!1!==noUnmark&&jQuery._unmark(this)},opt},easing:{linear:function linear(p){return p},swing:function swing(p){return-Math.cos(p*Math.PI)/2+.5}},timers:[],fx:function fx(elem,options,prop){this.options=options,this.elem=elem,this.prop=prop,options.orig=options.orig||{}}}),jQuery.fx.prototype={// Simple function for setting a style value update:function update(){this.options.step&&this.options.step.call(this.elem,this.now,this),(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this)},// Get the current size cur:function cur(){if(null!=this.elem[this.prop]&&(!this.elem.style||null==this.elem.style[this.prop]))return this.elem[this.prop];var r=jQuery.css(this.elem,this.prop),parsed;// Empty strings, null, undefined and "auto" are converted to 0, // complex values such as "rotate(1rad)" are returned as is, // simple values such as "10px" are parsed to Float. return isNaN(parsed=parseFloat(r))?r&&"auto"!==r?r:0:parsed},// Start an animation from one number to another custom:function custom(from,to,unit){function t(gotoEnd){return self.step(gotoEnd)}var self=this,fx=jQuery.fx;this.startTime=fxNow||createFxNow(),this.end=to,this.now=this.start=from,this.pos=this.state=0,this.unit=unit||this.unit||(jQuery.cssNumber[this.prop]?"":"px"),t.queue=this.options.queue,t.elem=this.elem,t.saveState=function(){jQuery._data(self.elem,"fxshow"+self.prop)===void 0&&(self.options.hide?jQuery._data(self.elem,"fxshow"+self.prop,self.start):self.options.show&&jQuery._data(self.elem,"fxshow"+self.prop,self.end))},t()&&jQuery.timers.push(t)&&!timerId&&(timerId=setInterval(fx.tick,fx.interval))},// Simple 'show' function show:function show(){var dataShow=jQuery._data(this.elem,"fxshow"+this.prop);// Remember where we started, so that we can go back to it later // Start by showing the element this.options.orig[this.prop]=dataShow||jQuery.style(this.elem,this.prop),this.options.show=!0,dataShow===void 0?this.custom("width"===this.prop||"height"===this.prop?1:0,this.cur()):this.custom(this.cur(),dataShow),jQuery(this.elem).show()},// Simple 'hide' function hide:function hide(){// Remember where we started, so that we can go back to it later // Begin the animation this.options.orig[this.prop]=jQuery._data(this.elem,"fxshow"+this.prop)||jQuery.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},// Each step of an animation step:function step(gotoEnd){var t=fxNow||createFxNow(),done=!0,elem=this.elem,options=this.options,p,n,complete;if(gotoEnd||t>=options.duration+this.startTime){for(p in this.now=this.end,this.pos=this.state=1,this.update(),options.animatedProperties[this.prop]=!0,options.animatedProperties)!0!==options.animatedProperties[p]&&(done=!1);if(done){// Reset the properties, if the item has been hidden or shown if(null==options.overflow||jQuery.support.shrinkWrapBlocks||jQuery.each(["","X","Y"],function(index,value){elem.style["overflow"+value]=options.overflow[index]}),options.hide&&jQuery(elem).hide(),options.hide||options.show)for(p in options.animatedProperties)// Toggle data is no longer needed jQuery.style(elem,p,options.orig[p]),jQuery.removeData(elem,"fxshow"+p,!0),jQuery.removeData(elem,"toggle"+p,!0);// Execute the complete function // in the event that the complete function throws an exception // we must ensure it won't be called twice. #5684 complete=options.complete,complete&&(options.complete=!1,complete.call(elem))}return!1}return(// Perform the next step of the animation options.duration==1/0?this.now=t:(n=t-this.startTime,this.state=n/options.duration,this.pos=jQuery.easing[options.animatedProperties[this.prop]](this.state,n,0,1,options.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update(),!0)}},jQuery.extend(jQuery.fx,{tick:function tick(){for(var timers=jQuery.timers,i=0,timer;i<timers.length;i++)timer=timers[i],timer()||timers[i]!==timer||timers.splice(i--,1);timers.length||jQuery.fx.stop()},interval:13,stop:function stop(){clearInterval(timerId),timerId=null},speeds:{slow:600,fast:200,// Default speed _default:400},step:{opacity:function opacity(fx){jQuery.style(fx.elem,"opacity",fx.now)},_default:function _default(fx){fx.elem.style&&null!=fx.elem.style[fx.prop]?fx.elem.style[fx.prop]=fx.now+fx.unit:fx.elem[fx.prop]=fx.now}}}),jQuery.each(fxAttrs.concat.apply([],fxAttrs),function(i,prop){prop.indexOf("margin")&&(jQuery.fx.step[prop]=function(fx){jQuery.style(fx.elem,prop,Math.max(0,fx.now)+fx.unit)})}),jQuery.expr&&jQuery.expr.filters&&(jQuery.expr.filters.animated=function(elem){return jQuery.grep(jQuery.timers,function(fn){return elem===fn.elem}).length});var rtable=/^t(?:able|d|h)$/i,rroot=/^(?:body|html)$/i,getOffset;// Create scrollLeft and scrollTop methods // Expose jQuery to the global object getOffset="getBoundingClientRect"in document.documentElement?function getOffset(elem,doc,docElem,box){try{box=elem.getBoundingClientRect()}catch(e){}// Make sure we're not dealing with a disconnected DOM node if(!box||!jQuery.contains(docElem,elem))return box?{top:box.top,left:box.left}:{top:0,left:0};var body=doc.body,win=getWindow(doc),clientTop=docElem.clientTop||body.clientTop||0,clientLeft=docElem.clientLeft||body.clientLeft||0,scrollTop=win.pageYOffset||jQuery.support.boxModel&&docElem.scrollTop||body.scrollTop,scrollLeft=win.pageXOffset||jQuery.support.boxModel&&docElem.scrollLeft||body.scrollLeft,top=box.top+scrollTop-clientTop,left=box.left+scrollLeft-clientLeft;return{top:top,left:left}}:function getOffset(elem,doc,docElem){for(var offsetParent=elem.offsetParent,prevOffsetParent=elem,body=doc.body,defaultView=doc.defaultView,prevComputedStyle=defaultView?defaultView.getComputedStyle(elem,null):elem.currentStyle,top=elem.offsetTop,left=elem.offsetLeft,computedStyle;(elem=elem.parentNode)&&elem!==body&&elem!==docElem&&!(jQuery.support.fixedPosition&&"fixed"===prevComputedStyle.position);)computedStyle=defaultView?defaultView.getComputedStyle(elem,null):elem.currentStyle,top-=elem.scrollTop,left-=elem.scrollLeft,elem===offsetParent&&(top+=elem.offsetTop,left+=elem.offsetLeft,jQuery.support.doesNotAddBorder&&!(jQuery.support.doesAddBorderForTableAndCells&&rtable.test(elem.nodeName))&&(top+=parseFloat(computedStyle.borderTopWidth)||0,left+=parseFloat(computedStyle.borderLeftWidth)||0),prevOffsetParent=offsetParent,offsetParent=elem.offsetParent),jQuery.support.subtractsBorderForOverflowNotVisible&&"visible"!==computedStyle.overflow&&(top+=parseFloat(computedStyle.borderTopWidth)||0,left+=parseFloat(computedStyle.borderLeftWidth)||0),prevComputedStyle=computedStyle;return("relative"===prevComputedStyle.position||"static"===prevComputedStyle.position)&&(top+=body.offsetTop,left+=body.offsetLeft),jQuery.support.fixedPosition&&"fixed"===prevComputedStyle.position&&(top+=Math.max(docElem.scrollTop,body.scrollTop),left+=Math.max(docElem.scrollLeft,body.scrollLeft)),{top:top,left:left}},jQuery.fn.offset=function(options){if(arguments.length)return void 0===options?this:this.each(function(i){jQuery.offset.setOffset(this,options,i)});var elem=this[0],doc=elem&&elem.ownerDocument;return doc?elem===doc.body?jQuery.offset.bodyOffset(elem):getOffset(elem,doc,doc.documentElement):null},jQuery.offset={bodyOffset:function bodyOffset(body){var top=body.offsetTop,left=body.offsetLeft;return jQuery.support.doesNotIncludeMarginInBodyOffset&&(top+=parseFloat(jQuery.css(body,"marginTop"))||0,left+=parseFloat(jQuery.css(body,"marginLeft"))||0),{top:top,left:left}},setOffset:function setOffset(elem,options,i){var position=jQuery.css(elem,"position");// set position first, in-case top/left are set even on static elem "static"===position&&(elem.style.position="relative");var curElem=jQuery(elem),curOffset=curElem.offset(),curCSSTop=jQuery.css(elem,"top"),curCSSLeft=jQuery.css(elem,"left"),calculatePosition=("absolute"===position||"fixed"===position)&&-1<jQuery.inArray("auto",[curCSSTop,curCSSLeft]),props={},curPosition={},curTop,curLeft;// need to be able to calculate position if either top or left is auto and position is either absolute or fixed calculatePosition?(curPosition=curElem.position(),curTop=curPosition.top,curLeft=curPosition.left):(curTop=parseFloat(curCSSTop)||0,curLeft=parseFloat(curCSSLeft)||0),jQuery.isFunction(options)&&(options=options.call(elem,i,curOffset)),null!=options.top&&(props.top=options.top-curOffset.top+curTop),null!=options.left&&(props.left=options.left-curOffset.left+curLeft),"using"in options?options.using.call(elem,props):curElem.css(props)}},jQuery.fn.extend({position:function position(){if(!this[0])return null;var elem=this[0],// Get *real* offsetParent offsetParent=this.offsetParent(),// Get correct offsets offset=this.offset(),parentOffset=rroot.test(offsetParent[0].nodeName)?{top:0,left:0}:offsetParent.offset();// Subtract element margins // note: when an element has margin: auto the offsetLeft and marginLeft // are the same in Safari causing offset.left to incorrectly be 0 // Subtract the two offsets return offset.top-=parseFloat(jQuery.css(elem,"marginTop"))||0,offset.left-=parseFloat(jQuery.css(elem,"marginLeft"))||0,parentOffset.top+=parseFloat(jQuery.css(offsetParent[0],"borderTopWidth"))||0,parentOffset.left+=parseFloat(jQuery.css(offsetParent[0],"borderLeftWidth"))||0,{top:offset.top-parentOffset.top,left:offset.left-parentOffset.left}},offsetParent:function offsetParent(){return this.map(function(){for(var offsetParent=this.offsetParent||document.body;offsetParent&&!rroot.test(offsetParent.nodeName)&&"static"===jQuery.css(offsetParent,"position");)offsetParent=offsetParent.offsetParent;return offsetParent})}}),jQuery.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(method,prop){var top=/Y/.test(prop);jQuery.fn[method]=function(val){return jQuery.access(this,function(elem,method,val){var win=getWindow(elem);return void 0===val?win?prop in win?win[prop]:jQuery.support.boxModel&&win.document.documentElement[method]||win.document.body[method]:elem[method]:void(win?win.scrollTo(top?jQuery(win).scrollLeft():val,top?val:jQuery(win).scrollTop()):elem[method]=val)},method,val,arguments.length,null)}}),jQuery.each({Height:"height",Width:"width"},function(name,type){var clientProp="client"+name,scrollProp="scroll"+name,offsetProp="offset"+name;// innerHeight and innerWidth // outerHeight and outerWidth jQuery.fn["inner"+name]=function(){var elem=this[0];return elem?elem.style?parseFloat(jQuery.css(elem,type,"padding")):this[type]():null},jQuery.fn["outer"+name]=function(margin){var elem=this[0];return elem?elem.style?parseFloat(jQuery.css(elem,type,margin?"margin":"border")):this[type]():null},jQuery.fn[type]=function(value){return jQuery.access(this,function(elem,type,value){var doc,docElemProp,orig,ret;return jQuery.isWindow(elem)?(doc=elem.document,docElemProp=doc.documentElement[clientProp],jQuery.support.boxModel&&docElemProp||doc.body&&doc.body[clientProp]||docElemProp):9===elem.nodeType?(doc=elem.documentElement,doc[clientProp]>=doc[scrollProp]?doc[clientProp]:Math.max(elem.body[scrollProp],doc[scrollProp],elem.body[offsetProp],doc[offsetProp])):void 0===value?(orig=jQuery.css(elem,type),ret=parseFloat(orig),jQuery.isNumeric(ret)?ret:orig):void// Set the width or height on the element jQuery(elem).css(type,value);// Get document width or height // Get width or height on the element },type,value,arguments.length,null)}}),window.jQuery=window.$=jQuery}(window),window.wistiaJQuery=jQuery.noConflict(!0)),function(window,document,$){var W=$(window),D=$(document),F=$.fancybox=function(){F.open.apply(this,arguments)},didResize=!1,resizeTimer=null;/* * Default transitions */ /* * Overlay helper */ /* * Title helper */ // jQuery plugin initialization $.extend(F,{// The current version of fancyBox version:"2.0.4",defaults:{padding:15,margin:20,width:800,height:600,minWidth:200,minHeight:200,maxWidth:9999,maxHeight:9999,autoSize:!0,fitToView:!0,aspectRatio:!1,topRatio:.5,fixed:$.supportBoxModel&&(!$.browser.msie||6<$.browser.version||!document.documentElement.hasOwnProperty("ontouchstart")),scrolling:"auto",// 'auto', 'yes' or 'no' wrapCSS:"fancybox-default",arrows:!0,closeBtn:!0,closeClick:!1,nextClick:!1,mouseWheel:!0,autoPlay:!1,playSpeed:3e3,modal:!1,loop:!0,ajax:{},keys:{next:[13,32,34,39,40],// enter, space, page down, right arrow, down arrow prev:[8,33,37,38],// backspace, page up, left arrow, up arrow close:[27]// escape key },// Override some properties index:0,type:null,href:null,content:null,title:null,// HTML templates tpl:{wrap:"<div class=\"fancybox-wrap\"><div class=\"fancybox-outer\"><div class=\"fancybox-inner\"></div></div></div>",image:"<img class=\"fancybox-image\" src=\"{href}\" alt=\"\" />",iframe:"<iframe class=\"fancybox-iframe\" name=\"fancybox-frame{rnd}\" frameborder=\"0\" hspace=\"0\" "+($.browser.msie?"allowtransparency=\"true\"\"":"")+" scrolling=\"{scrolling}\" src=\"{href}\" allowfullscreen mozallowfullscreen webkitallowfullscreen oallowfullscreen msallowfullscreen></iframe>",swf:"<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\"100%\" height=\"100%\"><param name=\"wmode\" value=\"transparent\" /><param name=\"allowfullscreen\" value=\"true\" /><param name=\"allowscriptaccess\" value=\"always\" /><param name=\"movie\" value=\"{href}\" /><embed src=\"{href}\" type=\"application/x-shockwave-flash\" allowfullscreen=\"true\" allowscriptaccess=\"always\" width=\"100%\" height=\"100%\" wmode=\"transparent\"></embed></object>",error:"<p class=\"fancybox-error\">The requested content cannot be loaded.<br/>Please try again later.</p>",closeBtn:"<div title=\"Close\" class=\"fancybox-item fancybox-close\"></div>",next:"<a title=\"Next\" class=\"fancybox-item fancybox-next\"><span></span></a>",prev:"<a title=\"Previous\" class=\"fancybox-item fancybox-prev\"><span></span></a>"},// Properties for each animation type // Opening fancyBox openEffect:"fade",// 'elastic', 'fade' or 'none' openSpeed:250,openEasing:"swing",openOpacity:!0,openMethod:"zoomIn",// Closing fancyBox closeEffect:"fade",// 'elastic', 'fade' or 'none' closeSpeed:250,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",// Changing next gallery item nextEffect:"elastic",// 'elastic', 'fade' or 'none' nextSpeed:300,nextEasing:"swing",nextMethod:"changeIn",// Changing previous gallery item prevEffect:"elastic",// 'elastic', 'fade' or 'none' prevSpeed:300,prevEasing:"swing",prevMethod:"changeOut",// Enabled helpers helpers:{overlay:{speedIn:0,speedOut:300,opacity:.8,css:{cursor:"pointer"},closeClick:!0},title:{type:"float"// 'float', 'inside', 'outside' or 'over' }},// Callbacks onCancel:$.noop,// If canceling beforeLoad:$.noop,// Before loading afterLoad:$.noop,// After loading beforeShow:$.noop,// Before changing in current item afterShow:$.noop,// After opening beforeClose:$.noop,// Before closing afterClose:$.noop// After closing },//Current state group:{},// Selected group opts:{},// Group options coming:null,// Element being loaded current:null,// Currently loaded element isOpen:!1,// Is currently open isOpened:!1,// Have been fully opened at least once wrap:null,outer:null,inner:null,player:{timer:null,isActive:!1},// Loaders ajaxLoad:null,imgPreload:null,// Some collections transitions:{},helpers:{},/* * Static methods */open:function open(group,opts){$.isArray(group)||(group=[group]);group.length&&(//Kill existing instances //Extend the defaults F.close(!0),F.opts=$.extend(!0,{},F.defaults,opts),F.group=group,F._start(F.opts.index||0))},cancel:function cancel(){F.coming&&!1===F.trigger("onCancel")||(F.coming=null,F.hideLoading(),F.ajaxLoad&&F.ajaxLoad.abort(),F.ajaxLoad=null,F.imgPreload&&(F.imgPreload.onload=F.imgPreload.onabort=F.imgPreload.onerror=null))},close:function close(a){F.cancel();F.current&&!1!==F.trigger("beforeClose")&&(F.unbindEvents(),!F.isOpen||a&&!0===a[0]?($(".fancybox-wrap").stop().trigger("onReset").remove(),F._afterZoomOut()):(F.isOpen=F.isOpened=!1,$(".fancybox-item").remove(),F.wrap.stop(!0).removeClass("fancybox-opened"),F.inner.css("overflow","hidden"),F.transitions[F.current.closeMethod]()))},// Start/stop slideshow play:function play(a){var clear=function clear(){clearTimeout(F.player.timer)},set=function set(){clear(),F.current&&F.player.isActive&&(F.player.timer=setTimeout(F.next,F.current.playSpeed))},stop=function stop(){clear(),$("body").unbind(".player"),F.player.isActive=!1,F.trigger("onPlayEnd")},start=function start(){F.current&&(F.current.loop||F.current.index<F.group.length-1)&&(F.player.isActive=!0,$("body").bind({"afterShow.player onUpdate.player":set,"onCancel.player beforeClose.player":stop,"beforeLoad.player":clear}),set(),F.trigger("onPlayStart"))};F.player.isActive||a&&!1===a[0]?stop():start()},next:function next(){F.current&&F.jumpto(F.current.index+1)},prev:function prev(){F.current&&F.jumpto(F.current.index-1)},jumpto:function jumpto(index){F.current&&(index=parseInt(index,10),1<F.group.length&&F.current.loop&&(index>=F.group.length?index=0:0>index&&(index=F.group.length-1)),"undefined"!=typeof F.group[index]&&(F.cancel(),F._start(index)))},reposition:function reposition(a){F.isOpen&&F.wrap.css(F._getPosition(a))},update:function update(){F.isOpen&&(!didResize&&(resizeTimer=setInterval(function(){didResize&&(didResize=!1,clearTimeout(resizeTimer),F.current&&(F.current.autoSize&&(F.inner.height("auto"),F.current.height=F.inner.height()),F._setDimension(),F.current.canGrow&&F.inner.height("auto"),F.reposition(),F.trigger("onUpdate")))},100)),didResize=!0)},toggle:function toggle(){F.isOpen&&(F.current.fitToView=!F.current.fitToView,F.update())},hideLoading:function hideLoading(){$("#fancybox-loading").remove()},showLoading:function showLoading(){F.hideLoading(),$("<div id=\"fancybox-loading\"></div>").click(F.cancel).appendTo("body")},getViewport:function getViewport(){return{x:W.scrollLeft(),y:W.scrollTop(),w:W.width(),h:W.height()}},// Unbind the keyboard / clicking actions unbindEvents:function unbindEvents(){F.wrap&&F.wrap.unbind(".fb"),D.unbind(".fb"),W.unbind(".fb")},bindEvents:function bindEvents(){var current=F.current,keys=current.keys;current&&(W.bind("resize.fb, orientationchange.fb",F.update),keys&&D.bind("keydown.fb",function(e){var code;// Ignore key combinations and key events within form elements e.ctrlKey||e.altKey||e.shiftKey||e.metaKey||!(0>$.inArray(e.target.tagName.toLowerCase(),["input","textarea","select","button"]))||(code=e.keyCode,-1<$.inArray(code,keys.close)?(F.close(),e.preventDefault()):-1<$.inArray(code,keys.next)?(F.next(),e.preventDefault()):-1<$.inArray(code,keys.prev)&&(F.prev(),e.preventDefault()))}),$.fn.mousewheel&¤t.mouseWheel&&1<F.group.length&&F.wrap.bind("mousewheel.fb",function(e,delta){var target=$(e.target).get(0);(0===target.clientHeight||target.scrollHeight===target.clientHeight)&&(e.preventDefault(),F[0<delta?"prev":"next"]())}))},trigger:function trigger(event){var obj=F[-1<$.inArray(event,["onCancel","beforeLoad","afterLoad"])?"coming":"current"],ret;if(obj)return $.isFunction(obj[event])&&(ret=obj[event].apply(obj,Array.prototype.slice.call(arguments,1))),!1!==ret&&void(obj.helpers&&$.each(obj.helpers,function(helper,opts){opts&&"undefined"!=typeof F.helpers[helper]&&$.isFunction(F.helpers[helper][event])&&F.helpers[helper][event](opts,obj)}),$.event.trigger(event+".fb"))},isImage:function isImage(str){return str&&str.match(/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i)},isSWF:function isSWF(str){return str&&str.match(/\.(swf)(.*)?$/i)},_start:function _start(index){var coming={},element=F.group[index]||null,isDom,href,type,rez;return"object"==typeof element&&(element.nodeType||element instanceof $)&&(isDom=!0,$.metadata&&(coming=$(element).metadata())),coming=$.extend(!0,{},F.opts,{index:index,element:element},$.isPlainObject(element)?element:coming),$.each(["href","title","content","type"],function(i,v){coming[v]=F.opts[v]||isDom&&$(element).attr(v)||coming[v]||null}),"number"==typeof coming.margin&&(coming.margin=[coming.margin,coming.margin,coming.margin,coming.margin]),coming.modal&&$.extend(!0,coming,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,mouseWheel:!1,keys:null,helpers:{overlay:{css:{cursor:"auto"},closeClick:!1}}}),F.coming=coming,!1===F.trigger("beforeLoad")?void(F.coming=null):void(/* Add reference to the group, so it`s possible to access from callbacks, example: afterLoad : function() { this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : ''); } */type=coming.type,href=coming.href,!type&&(isDom&&(rez=$(element).data("fancybox-type"),!rez&&element.className&&(rez=element.className.match(/fancybox\.(\w+)/),type=rez?rez[1]:null)),!type&&href&&(F.isImage(href)?type="image":F.isSWF(href)?type="swf":href.match(/^#/)&&(type="inline")),!type&&(type=isDom?"inline":"html"),coming.type=type),"inline"===type||"html"===type?(coming.content=coming.content||("inline"===type&&href?$(href):element),!coming.content.length&&(type=null)):(coming.href=href||element,!coming.href&&(type=null)),coming.group=F.group,"image"===type?F._loadImage():"ajax"===type?F._loadAjax():type?F._afterLoad():F._error("type"))},_error:function _error(type){$.extend(F.coming,{type:"html",autoSize:!0,minHeight:"0",hasError:type,content:F.coming.tpl.error}),F._afterLoad()},_loadImage:function _loadImage(){// Reset preload image so it is later possible to check "complete" property F.imgPreload=new Image,F.imgPreload.onload=function(){this.onload=this.onerror=null,F.coming.width=this.width,F.coming.height=this.height,F._afterLoad()},F.imgPreload.onerror=function(){this.onload=this.onerror=null,F._error("image")},F.imgPreload.src=F.coming.href,F.imgPreload.complete||F.showLoading()},_loadAjax:function _loadAjax(){F.showLoading(),F.ajaxLoad=$.ajax($.extend({},F.coming.ajax,{url:F.coming.href,error:function error(jqXHR,textStatus){"abort"===textStatus?F.hideLoading():F._error("ajax",jqXHR)},success:function success(data,textStatus){"success"===textStatus&&(F.coming.content=data,F._afterLoad())}}))},_preload:function _preload(){var group=F.group,index=F.current.index,load=function load(href){href&&F.isImage(href)&&(new Image().src=href)};1<group.length&&(load($(group[index+1]||group[0]).attr("href")),load($(group[index-1]||group[group.length-1]).attr("href")))},_afterLoad:function _afterLoad(){return F.hideLoading(),F.coming&&!1!==F.trigger("afterLoad",F.current)?void(//Build the neccessary markup //Give a chance for helpers or callbacks to update elements //Set initial dimensions and hide F.isOpened?($(".fancybox-item").remove(),F.wrap.stop(!0).removeClass("fancybox-opened"),F.inner.css("overflow","hidden"),F.transitions[F.current.prevMethod]()):($(".fancybox-wrap").stop().trigger("onReset").remove(),F.trigger("afterClose")),F.unbindEvents(),F.isOpen=!1,F.current=F.coming,F.coming=!1,F.wrap=$(F.current.tpl.wrap).addClass("fancybox-tmp "+F.current.wrapCSS).appendTo("body"),F.outer=$(".fancybox-outer",F.wrap).css("padding",F.current.padding+"px"),F.inner=$(".fancybox-inner",F.wrap),F._setContent(),F.trigger("beforeShow"),F._setDimension(),F.wrap.hide().removeClass("fancybox-tmp"),F.bindEvents(),F._preload(),F.transitions[F.isOpened?F.current.nextMethod:F.current.openMethod]()):void(F.coming=!1)},_setContent:function _setContent(){var current=F.current,type=current.type,content,loadingBay;"inline"===type||"ajax"===type||"html"===type?(content=current.content,"inline"===type&&content instanceof $&&(content=content.show().detach(),content.parent().hasClass("fancybox-inner")&&content.parents(".fancybox-wrap").trigger("onReset").remove(),$(F.wrap).bind("onReset",function(){content.appendTo("body").hide()})),current.autoSize&&(loadingBay=$("<div class=\"fancybox-tmp\"></div>").appendTo($("body")).append(content),current.width=loadingBay.outerWidth(),current.height=loadingBay.outerHeight(!0),content=loadingBay.contents().detach(),loadingBay.remove())):"image"===type?(content=current.tpl.image.replace("{href}",current.href),current.aspectRatio=!0):"swf"===type?content=current.tpl.swf.replace(/\{width\}/g,current.width).replace(/\{height\}/g,current.height).replace(/\{href\}/g,current.href):"iframe"===type?content=current.tpl.iframe.replace("{href}",current.href).replace("{scrolling}",current.scrolling).replace("{rnd}",new Date().getTime()):void 0;-1<$.inArray(type,["image","swf","iframe"])&&(current.autoSize=!1,current.scrolling=!1),F.inner.append(content)},_setDimension:function _setDimension(){var wrap=F.wrap,outer=F.outer,inner=F.inner,current=F.current,viewport=F.getViewport(),margin=current.margin,padding2=2*current.padding,width=current.width+padding2,height=current.height+padding2,ratio=current.width/current.height,maxWidth=current.maxWidth,maxHeight=current.maxHeight,minWidth=current.minWidth,minHeight=current.minHeight,height_,space;// Real wrap height //Fit wrapper inside if(viewport.w-=margin[1]+margin[3],viewport.h-=margin[0]+margin[2],-1<width.toString().indexOf("%")&&(width=viewport.w*parseFloat(width)/100),-1<height.toString().indexOf("%")&&(height=viewport.h*parseFloat(height)/100),current.fitToView&&(maxWidth=Math.min(viewport.w,maxWidth),maxHeight=Math.min(viewport.h,maxHeight)),minWidth=Math.min(width,minWidth),minHeight=Math.min(width,minHeight),maxWidth=Math.max(minWidth,maxWidth),maxHeight=Math.max(minHeight,maxHeight),current.aspectRatio?(width>maxWidth&&(width=maxWidth,height=(width-padding2)/ratio+padding2),height>maxHeight&&(height=maxHeight,width=(height-padding2)*ratio+padding2),width<minWidth&&(width=minWidth,height=(width-padding2)/ratio+padding2),height<minHeight&&(height=minHeight,width=(height-padding2)*ratio+padding2)):(width=Math.max(minWidth,Math.min(width,maxWidth)),height=Math.max(minHeight,Math.min(height,maxHeight))),width=Math.round(width),height=Math.round(height),$(wrap.add(outer).add(inner)).width("auto").height("auto"),inner.width(width-padding2).height(height-padding2),wrap.width(width),height_=wrap.height(),width>maxWidth||height_>maxHeight)for(;(width>maxWidth||height_>maxHeight)&&width>minWidth&&height_>minHeight;)height-=10,current.aspectRatio?(width=Math.round((height-padding2)*ratio+padding2),width<minWidth&&(width=minWidth,height=(width-padding2)/ratio+padding2)):width-=10,inner.width(width-padding2).height(height-padding2),wrap.width(width),height_=wrap.height();current.dim={width:width,height:height_},current.canGrow=current.autoSize&&height>minHeight&&height<maxHeight,current.canShrink=!1,current.canExpand=!1,width-padding2<current.width||height-padding2<current.height?current.canExpand=!0:(width>viewport.w||height_>viewport.h)&&width>minWidth&&height>minHeight&&(current.canShrink=!0),space=height_-padding2,F.innerSpace=space-inner.height(),F.outerSpace=space-outer.height()},_getPosition:function _getPosition(a){var current=F.current,viewport=F.getViewport(),margin=current.margin,width=F.wrap.width()+margin[1]+margin[3],height=F.wrap.height()+margin[0]+margin[2],rez={position:"absolute",top:margin[0]+viewport.y,left:margin[3]+viewport.x};return current.fixed&&(!a||!1===a[0])&&height<=viewport.h&&width<=viewport.w&&(rez={position:"fixed",top:margin[0],left:margin[3]}),rez.top=Math.ceil(Math.max(rez.top,rez.top+(viewport.h-height)*current.topRatio))+"px",rez.left=Math.ceil(Math.max(rez.left,rez.left+.5*(viewport.w-width)))+"px",rez},_afterZoomIn:function _afterZoomIn(){var current=F.current;F.isOpen=F.isOpened=!0,F.wrap.addClass("fancybox-opened").css("overflow","visible"),F.update(),F.inner.css("overflow","auto"===current.scrolling?"auto":"yes"===current.scrolling?"scroll":"hidden"),(current.closeClick||current.nextClick)&&F.inner.css("cursor","pointer").bind("click.fb",current.nextClick?F.next:F.close),current.closeBtn&&$(current.tpl.closeBtn).appendTo(F.wrap).bind("click.fb",F.close),current.arrows&&1<F.group.length&&((current.loop||0<current.index)&&$(current.tpl.prev).appendTo(F.wrap).bind("click.fb",F.prev),(current.loop||current.index<F.group.length-1)&&$(current.tpl.next).appendTo(F.wrap).bind("click.fb",F.next)),F.trigger("afterShow"),F.opts.autoPlay&&!F.player.isActive&&(F.opts.autoPlay=!1,F.play())},_afterZoomOut:function _afterZoomOut(){F.trigger("afterClose"),F.wrap.trigger("onReset").remove(),$.extend(F,{group:{},opts:{},current:null,isOpened:!1,isOpen:!1,wrap:null,outer:null,inner:null})}}),F.transitions={getOrigPosition:function getOrigPosition(){var element=F.current.element,pos={},width=50,height=50,image,viewport;return element&&element.nodeName&&$(element).is(":visible")?(image=$(element).find("img:first"),image.length?(pos=image.offset(),width=image.outerWidth(),height=image.outerHeight()):pos=$(element).offset()):(viewport=F.getViewport(),pos.top=viewport.y+.5*(viewport.h-height),pos.left=viewport.x+.5*(viewport.w-width)),pos={top:Math.ceil(pos.top)+"px",left:Math.ceil(pos.left)+"px",width:Math.ceil(width)+"px",height:Math.ceil(height)+"px"},pos},step:function step(now,fx){var ratio,innerValue,outerValue;("width"===fx.prop||"height"===fx.prop)&&(innerValue=outerValue=Math.ceil(now-2*F.current.padding),"height"===fx.prop&&(ratio=(now-fx.start)/(fx.end-fx.start),fx.start>fx.end&&(ratio=1-ratio),innerValue-=F.innerSpace*ratio,outerValue-=F.outerSpace*ratio),F.inner[fx.prop](innerValue),F.outer[fx.prop](outerValue))},zoomIn:function zoomIn(){var wrap=F.wrap,current=F.current,dim=current.dim,startPos,endPos;"elastic"===current.openEffect?(endPos=$.extend({},dim,F._getPosition(!0)),delete endPos.position,startPos=this.getOrigPosition(),current.openOpacity&&(startPos.opacity=0,endPos.opacity=1),wrap.css(startPos).show().animate(endPos,{duration:current.openSpeed,easing:current.openEasing,step:this.step,complete:F._afterZoomIn})):(wrap.css($.extend({},dim,F._getPosition())),"fade"===current.openEffect?wrap.fadeIn(current.openSpeed,F._afterZoomIn):(wrap.show(),F._afterZoomIn()))},zoomOut:function zoomOut(){var wrap=F.wrap,current=F.current,endPos;"elastic"===current.closeEffect?("fixed"===wrap.css("position")&&wrap.css(F._getPosition(!0)),endPos=this.getOrigPosition(),current.closeOpacity&&(endPos.opacity=0),wrap.animate(endPos,{duration:current.closeSpeed,easing:current.closeEasing,step:this.step,complete:F._afterZoomOut})):wrap.fadeOut("fade"===current.closeEffect?current.closeSpeed:0,F._afterZoomOut)},changeIn:function changeIn(){var wrap=F.wrap,current=F.current,startPos;"elastic"===current.nextEffect?(startPos=F._getPosition(!0),startPos.opacity=0,startPos.top=parseInt(startPos.top,10)-200+"px",wrap.css(startPos).show().animate({opacity:1,top:"+=200px"},{duration:current.nextSpeed,complete:F._afterZoomIn})):(wrap.css(F._getPosition()),"fade"===current.nextEffect?wrap.hide().fadeIn(current.nextSpeed,F._afterZoomIn):(wrap.show(),F._afterZoomIn()))},changeOut:function changeOut(){var wrap=F.wrap,current=F.current,cleanUp=function cleanUp(){$(this).trigger("onReset").remove()};wrap.removeClass("fancybox-opened"),"elastic"===current.prevEffect?wrap.animate({opacity:0,top:"+=200px"},{duration:current.prevSpeed,complete:cleanUp}):wrap.fadeOut("fade"===current.prevEffect?current.prevSpeed:0,cleanUp)}},F.helpers.overlay={overlay:null,update:function update(){var width,scrollWidth,offsetWidth;//Reset width/height so it will not mess this.overlay.width(0).height(0),$.browser.msie?(scrollWidth=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth),offsetWidth=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth),width=scrollWidth<offsetWidth?W.width():scrollWidth):width=D.width(),this.overlay.width(width).height(D.height())},beforeShow:function beforeShow(opts){this.overlay||(this.overlay=$("<div id=\"fancybox-overlay\"></div>").css(opts.css||{background:"black"}).appendTo("body"),this.update(),opts.closeClick&&this.overlay.bind("click.fb",F.close),W.bind("resize.fb",$.proxy(this.update,this)),this.overlay.fadeTo(opts.speedIn||"fast",opts.opacity||1))},onUpdate:function onUpdate(){//Update as content may change document dimensions this.update()},afterClose:function afterClose(opts){this.overlay&&this.overlay.fadeOut(opts.speedOut||"fast",function(){$(this).remove()}),this.overlay=null}},F.helpers.title={beforeShow:function beforeShow(opts){var text=F.current.title,title;text&&(title=$("<div class=\"fancybox-title fancybox-title-"+opts.type+"-wrap\">"+text+"</div>").appendTo("body"),"float"===opts.type&&(title.width(title.width()),title.wrapInner("<span class=\"child\"></span>"),F.current.margin[2]+=Math.abs(parseInt(title.css("margin-bottom"),10))),title.appendTo("over"===opts.type?F.inner:"outside"===opts.type?F.wrap:F.outer))}},$.fn.fancybox=function(options){function run(e){var group=[],rel=this.rel,relType,relVal;e.ctrlKey||e.altKey||e.shiftKey||e.metaKey||(e.preventDefault(),relVal=$(this).data("fancybox-group"),"undefined"==typeof relVal?rel&&""!==rel&&"nofollow"!==rel&&(relVal=rel,relType="rel"):relType=!!relVal&&"data-fancybox-group",relType&&(group=selector.length?$(selector).filter("["+relType+"=\""+relVal+"\"]"):$("["+relType+"=\""+relVal+"\"]")),group.length?(opts.index=group.index(this),F.open(group.get(),opts)):F.open(this,opts))}var opts=options||{},selector=this.selector||"";return selector?D.undelegate(selector,"click.fb-start").delegate(selector,"click.fb-start",run):$(this).unbind("click.fb-start").bind("click.fb-start",run),this}}(window,document,wistiaJQuery),function($){function cast(str){return void 0===str||null===str?str:(str=""+str,/^\d+?$/.test(str)?parseInt(str,10):/\d*\.\d+/.test(str)?parseFloat(str):!!/^true$/i.test(str)||!/^false$/i.test(str)&&str)}function getObj(obj,parts,create){var p;for(parts="string"==typeof parts?parts.split("."):parts.slice(0,parts.length);null!=obj&&parts.length;)p=parts.shift(),void 0===obj[p]&&create&&(obj[p]={}),obj=obj[p];return obj}function setObj(obj,parts,value){var prop;parts="string"==typeof parts?parts.split("."):parts.slice(0,parts.length),prop=parts.pop(),obj=getObj(obj,parts,!0);try{if(null!=obj&&(/^\s*function Object()/.test(obj.constructor)||/^\s*function Array()/.test(obj.constructor))&&null!=prop)return null==value?delete obj[prop]:obj[prop]=value;;}catch(e){console.log(e.stack)}}// don't do popovers on mobile devices. let the link fall through function bindWistiaFancyBoxes(){var $popovers=$("[class*=wistia-popover]").each(function(){var $this=$(this),matches=$this.attr("class").match(/wistia-popover(?:\[([^\]]+)\])?/),fancyBoxParams={type:"iframe",padding:0},paramPairs,pair;if(popoverHostname=$this.attr("href").match(/^(?:https?\:)?\/\/[^\/]+/)[0],/^\/\//.test(popoverHostname)&&(popoverHostname=window.location.protocol+popoverHostname),$("[class*=wistia-popover]").length&&!$("#wistia_popover_css").length&&$("body").append("<link rel='stylesheet' id='wistia_popover_css' href='"+popoverHostname+"/assets/stylesheets/jquery.fancybox.css?t=20160821' />"),!$this.data("wistia-popover-init")){if($this.data("wistia-popover-init",!0),matches){paramPairs=matches[1].split(",");for(var i=0;i<paramPairs.length;i++)pair=paramPairs[i].split("="),2===pair.length&&setObj(fancyBoxParams,pair[0],cast(pair[1]))}fancyBoxParams.wrapCSS="wistia-fancybox-wrap";var isPlaylist=/\/embed\/playlists\//.test($this.attr("href")),themeName=null;isPlaylist&&(themeName=$this.attr("href").match(/theme=(slide|tab|bento)/),themeName=themeName?themeName[1]:"bare"),isPlaylist&&(fancyBoxParams.wrapCSS+=" wistia-playlist wistia-playlist-"+themeName,"slide"===themeName&&!/slide(%5B|\[)ears(%5D|\])=false/.test($this.attr("href"))&&(fancyBoxParams.wrapCSS+=" wistia-playlist-slide-ears"),"slide"===themeName&&/plugin(%5B|\[)socialbar(%5D|\])/.test($this.attr("href"))&&(fancyBoxParams.wrapCSS+=" wistia-playlist-slide-socialbar")),fancyBoxParams.scrolling="no",fancyBoxParams.beforeShow=function(){var $iframe=$("iframe.fancybox-iframe");$("body").addClass("wistia-fancybox"),$iframe.trigger("wistia-popover-open")},(/trident/i.test(navigator.userAgent)||$.browser.msie&&7<$.browser.version&&!$.browser.quirks)&&(fancyBoxParams.beforeClose=function(){var $iframe=$("iframe.fancybox-iframe");$iframe[0].contentWindow.postMessage("remove","*")}),fancyBoxParams.afterClose=function(){var $iframe=$("iframe.fancybox-iframe");$("body").removeClass("wistia-fancybox"),$iframe.trigger("wistia-popover-close")},fancyBoxParams.afterShow=function(){var $iframe=$("iframe.fancybox-iframe");fancyBoxParams.playerColor&&$(".fancybox-close").css("background-color",(""+fancyBoxParams.playerColor).replace(/^\#?/,"#")),$.browser.msie&&!$.support.boxModel&&$iframe.width(fancyBoxParams.width).height(fancyBoxParams.height),isPlaylist?$iframe.addClass("wistia_playlist"):$iframe.addClass("wistia_embed"),window.wistiaBindIframes&&wistiaBindIframes(),window.wistiaEmbeds&&wistiaEmbeds.bindHandles(),$iframe.trigger("wistia-popover",$iframe[0])},$this.fancybox(fancyBoxParams)}})}function unbindWistiaFancyBoxes(){$("[class*=wistia-popover]").data("wistia-popover-init",!1).unbind("click.fb")}function loadEv1Script(){window.wistiaEv1AsyncLoad||(window.wistiaEv1AsyncLoad=!0,setTimeout(function(){var ref;(null==(ref=window.Wistia)?void 0:ref.wistia)||$.ajax({type:"GET",url:location.protocol+"//fast.wistia.net/assets/external/E-v1.js",dataType:"script",cache:!0})},5e3))}var popoverHostname;window.rebindWistiaFancyBoxes=function(){unbindWistiaFancyBoxes(),bindWistiaFancyBoxes()},$(document).ready(function(){bindWistiaFancyBoxes(),loadEv1Script()})}(wistiaJQuery); })(); /******/ })() ;