function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o;}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o;},_typeof(o);}/*! * jQuery JavaScript Library v1.12.4 * http://jquery.com/ * * Includes Sizzle.js * http://sizzlejs.com/ * * Copyright jQuery Foundation and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2016-05-20T17:17Z */(function(global,factory){if((typeof module==="undefined"?"undefined":_typeof(module))==="object"&&_typeof(module.exports)==="object"){// For CommonJS and CommonJS-like environments where a proper `window` // is present, execute the factory and get jQuery. // For environments that do not have a `window` with a `document` // (such as Node.js), expose a factory as module.exports. // This accentuates the need for the creation of a real `window`. // e.g. var jQuery = require("jquery")(window); // See ticket #14549 for more info. module.exports=global.document?factory(global,true):function(w){if(!w.document){throw new Error("jQuery requires a window with a document");}return factory(w);};}else{factory(global);}// Pass this if window is not defined yet })(typeof window!=="undefined"?window:this,function(window,noGlobal){// Support: Firefox 18+ // Can't be in strict mode, several libs including ASP.NET trace // the stack via arguments.caller.callee and Firefox dies if // you try to trace through "use strict" call chains. (#13335) //"use strict"; var deletedIds=[];var document=window.document;var _slice=deletedIds.slice;var concat=deletedIds.concat;var push=deletedIds.push;var indexOf=deletedIds.indexOf;var class2type={};var toString=class2type.toString;var hasOwn=class2type.hasOwnProperty;var support={};var version="1.12.4",// Define a local copy of jQuery _jQuery2=function jQuery(selector,context){// The jQuery object is actually just the init constructor 'enhanced' // Need init if jQuery is called (just allow error to be thrown if not included) return new _jQuery2.fn.init(selector,context);},// Support: Android<4.1, IE<9 // Make sure we trim BOM and NBSP rtrim=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,// Matches dashed string for camelizing rmsPrefix=/^-ms-/,rdashAlpha=/-([\da-z])/gi,// Used by jQuery.camelCase as callback to replace() fcamelCase=function fcamelCase(all,letter){return letter.toUpperCase();};_jQuery2.fn=_jQuery2.prototype={// The current version of jQuery being used jquery:version,constructor:_jQuery2,// Start with an empty selector selector:"",// The default length of a jQuery object is 0 length:0,toArray:function toArray(){return _slice.call(this);},// 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 num!=null?// Return just the one element from the set num<0?this[num+this.length]:this[num]:// Return all the elements in a clean array _slice.call(this);},// Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack:function pushStack(elems){// Build a new jQuery matched element set var ret=_jQuery2.merge(this.constructor(),elems);// Add the old object onto the stack (as a reference) ret.prevObject=this;ret.context=this.context;// Return the newly-formed element set return ret;},// Execute a callback for every element in the matched set. each:function each(callback){return _jQuery2.each(this,callback);},map:function map(callback){return this.pushStack(_jQuery2.map(this,function(elem,i){return callback.call(elem,i,elem);}));},slice:function slice(){return this.pushStack(_slice.apply(this,arguments));},first:function first(){return this.eq(0);},last:function last(){return this.eq(-1);},eq:function eq(i){var len=this.length,j=+i+(i<0?len:0);return this.pushStack(j>=0&&j=0;},isEmptyObject:function isEmptyObject(obj){var name;for(name in obj){return false;}return true;},isPlainObject:function isPlainObject(obj){var key;// 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||_jQuery2.type(obj)!=="object"||obj.nodeType||_jQuery2.isWindow(obj)){return false;}try{// Not own constructor property must be Object if(obj.constructor&&!hasOwn.call(obj,"constructor")&&!hasOwn.call(obj.constructor.prototype,"isPrototypeOf")){return false;}}catch(e){// IE8,9 Will throw exceptions on certain host objects #9897 return false;}// Support: IE<9 // Handle iteration over inherited properties before own properties. if(!support.ownFirst){for(key in obj){return hasOwn.call(obj,key);}}// Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own. for(key in obj){}return key===undefined||hasOwn.call(obj,key);},type:function type(obj){if(obj==null){return obj+"";}return _typeof(obj)==="object"||typeof obj==="function"?class2type[toString.call(obj)]||"object":_typeof(obj);},// 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){if(data&&_jQuery2.trim(data)){// We use execScript on Internet Explorer // We use an anonymous function so that context is window // rather than jQuery in Firefox (window.execScript||function(data){window["eval"].call(window,data);// jscs:ignore requireDotNotation })(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.toLowerCase()===name.toLowerCase();},each:function each(obj,callback){var length,i=0;if(isArrayLike(obj)){length=obj.length;for(;i0&&length-1 in obj;}var Sizzle=/*! * Sizzle CSS Selector Engine v2.2.1 * http://sizzlejs.com/ * * Copyright jQuery Foundation and other contributors * Released under the MIT license * http://jquery.org/license * * Date: 2015-10-17 */function(window){var i,support,Expr,getText,isXML,tokenize,compile,select,outermostContext,sortInput,hasDuplicate,// Local document vars setDocument,document,docElem,documentIsHTML,rbuggyQSA,rbuggyMatches,matches,contains,// Instance-specific data expando="sizzle"+1*new Date(),preferredDoc=window.document,dirruns=0,done=0,classCache=createCache(),tokenCache=createCache(),compilerCache=createCache(),sortOrder=function sortOrder(a,b){if(a===b){hasDuplicate=true;}return 0;},// General-purpose constants MAX_NEGATIVE=1<<31,// Instance methods hasOwn={}.hasOwnProperty,arr=[],pop=arr.pop,push_native=arr.push,push=arr.push,slice=arr.slice,// Use a stripped-down indexOf as it's faster than native // http://jsperf.com/thor-indexof-vs-for/5 indexOf=function indexOf(list,elem){var i=0,len=list.length;for(;i+~]|"+whitespace+")"+whitespace+"*"),rattributeQuotes=new RegExp("="+whitespace+"*([^\\]'\"]*?)"+whitespace+"*\\]","g"),rpseudo=new RegExp(pseudos),ridentifier=new RegExp("^"+identifier+"$"),matchExpr={"ID":new RegExp("^#("+identifier+")"),"CLASS":new RegExp("^\\.("+identifier+")"),"TAG":new RegExp("^("+identifier+"|[*])"),"ATTR":new RegExp("^"+attributes),"PSEUDO":new RegExp("^"+pseudos),"CHILD":new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+whitespace+"*(even|odd|(([+-]|)(\\d*)n|)"+whitespace+"*(?:([+-]|)"+whitespace+"*(\\d+)|))"+whitespace+"*\\)|)","i"),"bool":new RegExp("^(?:"+booleans+")$","i"),// For use in libraries implementing .is() // We use this for POS matching in `select` "needsContext":new RegExp("^"+whitespace+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+whitespace+"*((?:-\\d)?\\d*)"+whitespace+"*\\)|)(?=[^-]|$)","i")},rinputs=/^(?:input|select|textarea|button)$/i,rheader=/^h\d$/i,rnative=/^[^{]+\{\s*\[native \w/,// Easily-parseable/retrievable ID or TAG or CLASS selectors rquickExpr=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,rsibling=/[+~]/,rescape=/'|\\/g,// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters runescape=new RegExp("\\\\([\\da-f]{1,6}"+whitespace+"?|("+whitespace+")|.)","ig"),funescape=function funescape(_,escaped,escapedWhitespace){var high="0x"+escaped-0x10000;// NaN means non-codepoint // Support: Firefox<24 // Workaround erroneous numeric interpretation of +"0x" return high!==high||escapedWhitespace?escaped:high<0?// BMP codepoint String.fromCharCode(high+0x10000):// Supplemental Plane codepoint (surrogate pair) String.fromCharCode(high>>10|0xD800,high&0x3FF|0xDC00);},// Used for iframes // See setDocument() // Removing the function wrapper causes a "Permission Denied" // error in IE unloadHandler=function unloadHandler(){setDocument();};// Optimize for push.apply( _, NodeList ) try{push.apply(arr=slice.call(preferredDoc.childNodes),preferredDoc.childNodes);// Support: Android<4.0 // Detect silently failing push.apply arr[preferredDoc.childNodes.length].nodeType;}catch(e){push={apply:arr.length?// Leverage slice if possible function(target,els){push_native.apply(target,slice.call(els));}:// Support: IE<9 // Otherwise append directly function(target,els){var j=target.length,i=0;// Can't trust NodeList.length while(target[j++]=els[i++]){}target.length=j-1;}};}function Sizzle(selector,context,results,seed){var m,i,elem,nid,nidselect,match,groups,newSelector,newContext=context&&context.ownerDocument,// nodeType defaults to 9, since context defaults to document nodeType=context?context.nodeType:9;results=results||[];// Return early from calls with invalid selector or context if(typeof selector!=="string"||!selector||nodeType!==1&&nodeType!==9&&nodeType!==11){return results;}// Try to shortcut find operations (as opposed to filters) in HTML documents if(!seed){if((context?context.ownerDocument||context:preferredDoc)!==document){setDocument(context);}context=context||document;if(documentIsHTML){// If the selector is sufficiently simple, try using a "get*By*" DOM method // (excepting DocumentFragment context, where the methods don't exist) if(nodeType!==11&&(match=rquickExpr.exec(selector))){// ID selector if(m=match[1]){// Document context if(nodeType===9){if(elem=context.getElementById(m)){// Support: IE, Opera, Webkit // TODO: identify versions // getElementById can match elements by name instead of ID if(elem.id===m){results.push(elem);return results;}}else{return results;}// Element context }else{// Support: IE, Opera, Webkit // TODO: identify versions // getElementById can match elements by name instead of ID if(newContext&&(elem=newContext.getElementById(m))&&contains(context,elem)&&elem.id===m){results.push(elem);return results;}}// Type selector }else if(match[2]){push.apply(results,context.getElementsByTagName(selector));return results;// Class selector }else if((m=match[3])&&support.getElementsByClassName&&context.getElementsByClassName){push.apply(results,context.getElementsByClassName(m));return results;}}// Take advantage of querySelectorAll if(support.qsa&&!compilerCache[selector+" "]&&(!rbuggyQSA||!rbuggyQSA.test(selector))){if(nodeType!==1){newContext=context;newSelector=selector;// qSA looks outside Element context, which is not what we want // Thanks to Andrew Dupont for this workaround technique // Support: IE <=8 // Exclude object elements }else if(context.nodeName.toLowerCase()!=="object"){// Capture the context ID, setting it first if necessary if(nid=context.getAttribute("id")){nid=nid.replace(rescape,"\\$&");}else{context.setAttribute("id",nid=expando);}// Prefix every selector in the list groups=tokenize(selector);i=groups.length;nidselect=ridentifier.test(nid)?"#"+nid:"[id='"+nid+"']";while(i--){groups[i]=nidselect+" "+toSelector(groups[i]);}newSelector=groups.join(",");// Expand context for sibling selectors newContext=rsibling.test(selector)&&testContext(context.parentNode)||context;}if(newSelector){try{push.apply(results,newContext.querySelectorAll(newSelector));return results;}catch(qsaError){}finally{if(nid===expando){context.removeAttribute("id");}}}}}}// All others return select(selector.replace(rtrim,"$1"),context,results,seed);}/** * Create key-value caches of limited size * @returns {function(string, object)} Returns the Object data after storing it on itself with * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) * deleting the oldest entry */function createCache(){var keys=[];function cache(key,value){// Use (key + " ") to avoid collision with native prototype properties (see Issue #157) if(keys.push(key+" ")>Expr.cacheLength){// Only keep the most recent entries delete cache[keys.shift()];}return cache[key+" "]=value;}return cache;}/** * Mark a function for special use by Sizzle * @param {Function} fn The function to mark */function markFunction(fn){fn[expando]=true;return fn;}/** * Support testing using an element * @param {Function} fn Passed the created div and expects a boolean result */function assert(fn){var div=document.createElement("div");try{return!!fn(div);}catch(e){return false;}finally{// Remove from its parent by default if(div.parentNode){div.parentNode.removeChild(div);}// release memory in IE div=null;}}/** * Adds the same handler for all of the specified attrs * @param {String} attrs Pipe-separated list of attributes * @param {Function} handler The method that will be applied */function addHandle(attrs,handler){var arr=attrs.split("|"),i=arr.length;while(i--){Expr.attrHandle[arr[i]]=handler;}}/** * Checks document order of two siblings * @param {Element} a * @param {Element} b * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b */function siblingCheck(a,b){var cur=b&&a,diff=cur&&a.nodeType===1&&b.nodeType===1&&(~b.sourceIndex||MAX_NEGATIVE)-(~a.sourceIndex||MAX_NEGATIVE);// Use IE sourceIndex if available on both nodes if(diff){return diff;}// Check if b follows a if(cur){while(cur=cur.nextSibling){if(cur===b){return-1;}}}return a?1:-1;}/** * Returns a function to use in pseudos for input types * @param {String} type */function createInputPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type===type;};}/** * Returns a function to use in pseudos for buttons * @param {String} type */function createButtonPseudo(type){return function(elem){var name=elem.nodeName.toLowerCase();return(name==="input"||name==="button")&&elem.type===type;};}/** * Returns a function to use in pseudos for positionals * @param {Function} fn */function createPositionalPseudo(fn){return markFunction(function(argument){argument=+argument;return markFunction(function(seed,matches){var j,matchIndexes=fn([],seed.length,argument),i=matchIndexes.length;// Match elements found at the specified indexes while(i--){if(seed[j=matchIndexes[i]]){seed[j]=!(matches[j]=seed[j]);}}});});}/** * Checks a node for validity as a Sizzle context * @param {Element|Object=} context * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value */function testContext(context){return context&&typeof context.getElementsByTagName!=="undefined"&&context;}// Expose support vars for convenience support=Sizzle.support={};/** * Detects XML nodes * @param {Element|Object} elem An element or a document * @returns {Boolean} True iff elem is a non-HTML XML node */isXML=Sizzle.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).documentElement;return documentElement?documentElement.nodeName!=="HTML":false;};/** * Sets document-related variables once based on the current document * @param {Element|Object} [doc] An element or document object to use to set the document * @returns {Object} Returns the current document */setDocument=Sizzle.setDocument=function(node){var hasCompare,parent,doc=node?node.ownerDocument||node:preferredDoc;// Return early if doc is invalid or already selected if(doc===document||doc.nodeType!==9||!doc.documentElement){return document;}// Update global variables document=doc;docElem=document.documentElement;documentIsHTML=!isXML(document);// Support: IE 9-11, Edge // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) if((parent=document.defaultView)&&parent.top!==parent){// Support: IE 11 if(parent.addEventListener){parent.addEventListener("unload",unloadHandler,false);// Support: IE 9 - 10 only }else if(parent.attachEvent){parent.attachEvent("onunload",unloadHandler);}}/* Attributes ---------------------------------------------------------------------- */// Support: IE<8 // Verify that getAttribute really returns attributes and not properties // (excepting IE8 booleans) support.attributes=assert(function(div){div.className="i";return!div.getAttribute("className");});/* getElement(s)By* ---------------------------------------------------------------------- */// Check if getElementsByTagName("*") returns only elements support.getElementsByTagName=assert(function(div){div.appendChild(document.createComment(""));return!div.getElementsByTagName("*").length;});// Support: IE<9 support.getElementsByClassName=rnative.test(document.getElementsByClassName);// Support: IE<10 // Check if getElementById returns elements by name // The broken getElementById methods don't pick up programatically-set names, // so use a roundabout getElementsByName test support.getById=assert(function(div){docElem.appendChild(div).id=expando;return!document.getElementsByName||!document.getElementsByName(expando).length;});// ID find and filter if(support.getById){Expr.find["ID"]=function(id,context){if(typeof context.getElementById!=="undefined"&&documentIsHTML){var m=context.getElementById(id);return m?[m]:[];}};Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){return elem.getAttribute("id")===attrId;};};}else{// Support: IE6/7 // getElementById is not reliable as a find shortcut delete Expr.find["ID"];Expr.filter["ID"]=function(id){var attrId=id.replace(runescape,funescape);return function(elem){var node=typeof elem.getAttributeNode!=="undefined"&&elem.getAttributeNode("id");return node&&node.value===attrId;};};}// Tag Expr.find["TAG"]=support.getElementsByTagName?function(tag,context){if(typeof context.getElementsByTagName!=="undefined"){return context.getElementsByTagName(tag);// DocumentFragment nodes don't have gEBTN }else if(support.qsa){return context.querySelectorAll(tag);}}:function(tag,context){var elem,tmp=[],i=0,// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too results=context.getElementsByTagName(tag);// Filter out possible comments if(tag==="*"){while(elem=results[i++]){if(elem.nodeType===1){tmp.push(elem);}}return tmp;}return results;};// Class Expr.find["CLASS"]=support.getElementsByClassName&&function(className,context){if(typeof context.getElementsByClassName!=="undefined"&&documentIsHTML){return context.getElementsByClassName(className);}};/* QSA/matchesSelector ---------------------------------------------------------------------- */// QSA and matchesSelector support // matchesSelector(:active) reports false when true (IE9/Opera 11.5) rbuggyMatches=[];// qSa(:focus) reports false when true (Chrome 21) // We allow this because of a bug in IE8/9 that throws an error // whenever `document.activeElement` is accessed on an iframe // So, we allow :focus to pass through QSA all the time to avoid the IE error // See http://bugs.jquery.com/ticket/13378 rbuggyQSA=[];if(support.qsa=rnative.test(document.querySelectorAll)){// Build QSA regex // Regex strategy adopted from Diego Perini assert(function(div){// Select is set to empty string on purpose // This is to test IE's treatment of not explicitly // setting a boolean content attribute, // since its presence should be enough // http://bugs.jquery.com/ticket/12359 docElem.appendChild(div).innerHTML=""+"";// Support: IE8, Opera 11-12.16 // Nothing should be selected when empty strings follow ^= or $= or *= // The test attribute must be unknown in Opera but "safe" for WinRT // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section if(div.querySelectorAll("[msallowcapture^='']").length){rbuggyQSA.push("[*^$]="+whitespace+"*(?:''|\"\")");}// Support: IE8 // Boolean attributes and "value" are not treated correctly if(!div.querySelectorAll("[selected]").length){rbuggyQSA.push("\\["+whitespace+"*(?:value|"+booleans+")");}// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ if(!div.querySelectorAll("[id~="+expando+"-]").length){rbuggyQSA.push("~=");}// Webkit/Opera - :checked should return selected option elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked // IE8 throws error here and will not see later tests if(!div.querySelectorAll(":checked").length){rbuggyQSA.push(":checked");}// Support: Safari 8+, iOS 8+ // https://bugs.webkit.org/show_bug.cgi?id=136851 // In-page `selector#id sibing-combinator selector` fails if(!div.querySelectorAll("a#"+expando+"+*").length){rbuggyQSA.push(".#.+[+~]");}});assert(function(div){// Support: Windows 8 Native Apps // The type and name attributes are restricted during .innerHTML assignment var input=document.createElement("input");input.setAttribute("type","hidden");div.appendChild(input).setAttribute("name","D");// Support: IE8 // Enforce case-sensitivity of name attribute if(div.querySelectorAll("[name=d]").length){rbuggyQSA.push("name"+whitespace+"*[*^$|!~]?=");}// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) // IE8 throws error here and will not see later tests if(!div.querySelectorAll(":enabled").length){rbuggyQSA.push(":enabled",":disabled");}// Opera 10-11 does not throw on post-comma invalid pseudos div.querySelectorAll("*,:x");rbuggyQSA.push(",.*:");});}if(support.matchesSelector=rnative.test(matches=docElem.matches||docElem.webkitMatchesSelector||docElem.mozMatchesSelector||docElem.oMatchesSelector||docElem.msMatchesSelector)){assert(function(div){// Check to see if it's possible to do matchesSelector // on a disconnected node (IE 9) support.disconnectedMatch=matches.call(div,"div");// This should fail with an exception // Gecko does not error, returns false instead matches.call(div,"[s!='']:x");rbuggyMatches.push("!=",pseudos);});}rbuggyQSA=rbuggyQSA.length&&new RegExp(rbuggyQSA.join("|"));rbuggyMatches=rbuggyMatches.length&&new RegExp(rbuggyMatches.join("|"));/* Contains ---------------------------------------------------------------------- */hasCompare=rnative.test(docElem.compareDocumentPosition);// Element contains another // Purposefully self-exclusive // As in, an element does not contain itself contains=hasCompare||rnative.test(docElem.contains)?function(a,b){var adown=a.nodeType===9?a.documentElement:a,bup=b&&b.parentNode;return a===bup||!!(bup&&bup.nodeType===1&&(adown.contains?adown.contains(bup):a.compareDocumentPosition&&a.compareDocumentPosition(bup)&16));}:function(a,b){if(b){while(b=b.parentNode){if(b===a){return true;}}}return false;};/* Sorting ---------------------------------------------------------------------- */// Document order sorting sortOrder=hasCompare?function(a,b){// Flag for duplicate removal if(a===b){hasDuplicate=true;return 0;}// Sort on method existence if only one input has compareDocumentPosition var compare=!a.compareDocumentPosition-!b.compareDocumentPosition;if(compare){return compare;}// Calculate position if both inputs belong to the same document compare=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):// Otherwise we know they are disconnected 1;// Disconnected nodes if(compare&1||!support.sortDetached&&b.compareDocumentPosition(a)===compare){// Choose the first element that is related to our preferred document if(a===document||a.ownerDocument===preferredDoc&&contains(preferredDoc,a)){return-1;}if(b===document||b.ownerDocument===preferredDoc&&contains(preferredDoc,b)){return 1;}// Maintain original order return sortInput?indexOf(sortInput,a)-indexOf(sortInput,b):0;}return compare&4?-1:1;}:function(a,b){// Exit early if the nodes are identical if(a===b){hasDuplicate=true;return 0;}var cur,i=0,aup=a.parentNode,bup=b.parentNode,ap=[a],bp=[b];// Parentless nodes are either documents or disconnected if(!aup||!bup){return a===document?-1:b===document?1:aup?-1:bup?1:sortInput?indexOf(sortInput,a)-indexOf(sortInput,b):0;// If the nodes are siblings, we can do a quick check }else if(aup===bup){return siblingCheck(a,b);}// Otherwise we need full lists of their ancestors for comparison cur=a;while(cur=cur.parentNode){ap.unshift(cur);}cur=b;while(cur=cur.parentNode){bp.unshift(cur);}// Walk down the tree looking for a discrepancy while(ap[i]===bp[i]){i++;}return i?// Do a sibling check if the nodes have a common ancestor siblingCheck(ap[i],bp[i]):// Otherwise nodes in our document sort first ap[i]===preferredDoc?-1:bp[i]===preferredDoc?1:0;};return document;};Sizzle.matches=function(expr,elements){return Sizzle(expr,null,null,elements);};Sizzle.matchesSelector=function(elem,expr){// Set document vars if needed if((elem.ownerDocument||elem)!==document){setDocument(elem);}// Make sure that attribute selectors are quoted expr=expr.replace(rattributeQuotes,"='$1']");if(support.matchesSelector&&documentIsHTML&&!compilerCache[expr+" "]&&(!rbuggyMatches||!rbuggyMatches.test(expr))&&(!rbuggyQSA||!rbuggyQSA.test(expr))){try{var ret=matches.call(elem,expr);// IE 9's matchesSelector returns false on disconnected nodes if(ret||support.disconnectedMatch||// As well, disconnected nodes are said to be in a document // fragment in IE 9 elem.document&&elem.document.nodeType!==11){return ret;}}catch(e){}}return Sizzle(expr,document,null,[elem]).length>0;};Sizzle.contains=function(context,elem){// Set document vars if needed if((context.ownerDocument||context)!==document){setDocument(context);}return contains(context,elem);};Sizzle.attr=function(elem,name){// Set document vars if needed if((elem.ownerDocument||elem)!==document){setDocument(elem);}var fn=Expr.attrHandle[name.toLowerCase()],// Don't get fooled by Object.prototype properties (jQuery #13807) val=fn&&hasOwn.call(Expr.attrHandle,name.toLowerCase())?fn(elem,name,!documentIsHTML):undefined;return val!==undefined?val:support.attributes||!documentIsHTML?elem.getAttribute(name):(val=elem.getAttributeNode(name))&&val.specified?val.value:null;};Sizzle.error=function(msg){throw new Error("Syntax error, unrecognized expression: "+msg);};/** * Document sorting and removing duplicates * @param {ArrayLike} results */Sizzle.uniqueSort=function(results){var elem,duplicates=[],j=0,i=0;// Unless we *know* we can detect duplicates, assume their presence hasDuplicate=!support.detectDuplicates;sortInput=!support.sortStable&&results.slice(0);results.sort(sortOrder);if(hasDuplicate){while(elem=results[i++]){if(elem===results[i]){j=duplicates.push(i);}}while(j--){results.splice(duplicates[j],1);}}// Clear input after sorting to release objects // See https://github.com/jquery/sizzle/pull/225 sortInput=null;return results;};/** * Utility function for retrieving the text value of an array of DOM nodes * @param {Array|Element} elem */getText=Sizzle.getText=function(elem){var node,ret="",i=0,nodeType=elem.nodeType;if(!nodeType){// If no nodeType, this is expected to be an array while(node=elem[i++]){// Do not traverse comment nodes ret+=getText(node);}}else if(nodeType===1||nodeType===9||nodeType===11){// Use textContent for elements // innerText usage removed for consistency of new lines (jQuery #11153) if(typeof elem.textContent==="string"){return elem.textContent;}else{// Traverse its children for(elem=elem.firstChild;elem;elem=elem.nextSibling){ret+=getText(elem);}}}else if(nodeType===3||nodeType===4){return elem.nodeValue;}// Do not include comment or processing instruction nodes return ret;};Expr=Sizzle.selectors={// Can be adjusted by the user cacheLength:50,createPseudo:markFunction,match:matchExpr,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:true}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:true},"~":{dir:"previousSibling"}},preFilter:{"ATTR":function ATTR(match){match[1]=match[1].replace(runescape,funescape);// Move the given value to match[3] whether quoted or unquoted match[3]=(match[3]||match[4]||match[5]||"").replace(runescape,funescape);if(match[2]==="~="){match[3]=" "+match[3]+" ";}return match.slice(0,4);},"CHILD":function CHILD(match){/* matches from matchExpr["CHILD"] 1 type (only|nth|...) 2 what (child|of-type) 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 4 xn-component of xn+y argument ([+-]?\d*n|) 5 sign of xn-component 6 x of xn-component 7 sign of y-component 8 y of y-component */match[1]=match[1].toLowerCase();if(match[1].slice(0,3)==="nth"){// nth-* requires argument if(!match[3]){Sizzle.error(match[0]);}// numeric x and y parameters for Expr.filter.CHILD // remember that false/true cast respectively to 0/1 match[4]=+(match[4]?match[5]+(match[6]||1):2*(match[3]==="even"||match[3]==="odd"));match[5]=+(match[7]+match[8]||match[3]==="odd");// other types prohibit arguments }else if(match[3]){Sizzle.error(match[0]);}return match;},"PSEUDO":function PSEUDO(match){var excess,unquoted=!match[6]&&match[2];if(matchExpr["CHILD"].test(match[0])){return null;}// Accept quoted arguments as-is if(match[3]){match[2]=match[4]||match[5]||"";// Strip excess characters from unquoted arguments }else if(unquoted&&rpseudo.test(unquoted)&&(// Get excess from tokenize (recursively) excess=tokenize(unquoted,true))&&(// advance to the next closing parenthesis excess=unquoted.indexOf(")",unquoted.length-excess)-unquoted.length)){// excess is a negative index match[0]=match[0].slice(0,excess);match[2]=unquoted.slice(0,excess);}// Return only captures needed by the pseudo filter method (type and argument) return match.slice(0,3);}},filter:{"TAG":function TAG(nodeNameSelector){var nodeName=nodeNameSelector.replace(runescape,funescape).toLowerCase();return nodeNameSelector==="*"?function(){return true;}:function(elem){return elem.nodeName&&elem.nodeName.toLowerCase()===nodeName;};},"CLASS":function CLASS(className){var pattern=classCache[className+" "];return pattern||(pattern=new RegExp("(^|"+whitespace+")"+className+"("+whitespace+"|$)"))&&classCache(className,function(elem){return pattern.test(typeof elem.className==="string"&&elem.className||typeof elem.getAttribute!=="undefined"&&elem.getAttribute("class")||"");});},"ATTR":function ATTR(name,operator,check){return function(elem){var result=Sizzle.attr(elem,name);if(result==null){return operator==="!=";}if(!operator){return true;}result+="";return operator==="="?result===check:operator==="!="?result!==check:operator==="^="?check&&result.indexOf(check)===0:operator==="*="?check&&result.indexOf(check)>-1:operator==="$="?check&&result.slice(-check.length)===check:operator==="~="?(" "+result.replace(rwhitespace," ")+" ").indexOf(check)>-1:operator==="|="?result===check||result.slice(0,check.length+1)===check+"-":false;};},"CHILD":function CHILD(type,what,argument,first,last){var simple=type.slice(0,3)!=="nth",forward=type.slice(-4)!=="last",ofType=what==="of-type";return first===1&&last===0?// Shortcut for :nth-*(n) function(elem){return!!elem.parentNode;}:function(elem,context,xml){var cache,uniqueCache,outerCache,node,nodeIndex,start,dir=simple!==forward?"nextSibling":"previousSibling",parent=elem.parentNode,name=ofType&&elem.nodeName.toLowerCase(),useCache=!xml&&!ofType,diff=false;if(parent){// :(first|last|only)-(child|of-type) if(simple){while(dir){node=elem;while(node=node[dir]){if(ofType?node.nodeName.toLowerCase()===name:node.nodeType===1){return false;}}// Reverse direction for :only-* (if we haven't yet done so) start=dir=type==="only"&&!start&&"nextSibling";}return true;}start=[forward?parent.firstChild:parent.lastChild];// non-xml :nth-child(...) stores cache data on `parent` if(forward&&useCache){// Seek `elem` from a previously-cached index // ...in a gzip-friendly way node=parent;outerCache=node[expando]||(node[expando]={});// Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});cache=uniqueCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=nodeIndex&&cache[2];node=nodeIndex&&parent.childNodes[nodeIndex];while(node=++nodeIndex&&node&&node[dir]||(// Fallback to seeking `elem` from the start diff=nodeIndex=0)||start.pop()){// When found, cache indexes on `parent` and break if(node.nodeType===1&&++diff&&node===elem){uniqueCache[type]=[dirruns,nodeIndex,diff];break;}}}else{// Use previously-cached element index if available if(useCache){// ...in a gzip-friendly way node=elem;outerCache=node[expando]||(node[expando]={});// Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});cache=uniqueCache[type]||[];nodeIndex=cache[0]===dirruns&&cache[1];diff=nodeIndex;}// xml :nth-child(...) // or :nth-last-child(...) or :nth(-last)?-of-type(...) if(diff===false){// Use the same loop as above to seek `elem` from the start while(node=++nodeIndex&&node&&node[dir]||(diff=nodeIndex=0)||start.pop()){if((ofType?node.nodeName.toLowerCase()===name:node.nodeType===1)&&++diff){// Cache the index of each encountered element if(useCache){outerCache=node[expando]||(node[expando]={});// Support: IE <9 only // Defend against cloned attroperties (jQuery gh-1709) uniqueCache=outerCache[node.uniqueID]||(outerCache[node.uniqueID]={});uniqueCache[type]=[dirruns,diff];}if(node===elem){break;}}}}}// Incorporate the offset, then check against cycle size diff-=last;return diff===first||diff%first===0&&diff/first>=0;}};},"PSEUDO":function PSEUDO(pseudo,argument){// pseudo-class names are case-insensitive // http://www.w3.org/TR/selectors/#pseudo-classes // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters // Remember that setFilters inherits from pseudos var args,fn=Expr.pseudos[pseudo]||Expr.setFilters[pseudo.toLowerCase()]||Sizzle.error("unsupported pseudo: "+pseudo);// The user may use createPseudo to indicate that // arguments are needed to create the filter function // just as Sizzle does if(fn[expando]){return fn(argument);}// But maintain support for old signatures if(fn.length>1){args=[pseudo,pseudo,"",argument];return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase())?markFunction(function(seed,matches){var idx,matched=fn(seed,argument),i=matched.length;while(i--){idx=indexOf(seed,matched[i]);seed[idx]=!(matches[idx]=matched[i]);}}):function(elem){return fn(elem,0,args);};}return fn;}},pseudos:{// Potentially complex pseudos "not":markFunction(function(selector){// Trim the selector passed to compile // to avoid treating leading and trailing // spaces as combinators var input=[],results=[],matcher=compile(selector.replace(rtrim,"$1"));return matcher[expando]?markFunction(function(seed,matches,context,xml){var elem,unmatched=matcher(seed,null,xml,[]),i=seed.length;// Match elements unmatched by `matcher` while(i--){if(elem=unmatched[i]){seed[i]=!(matches[i]=elem);}}}):function(elem,context,xml){input[0]=elem;matcher(input,null,xml,results);// Don't keep the element (issue #299) input[0]=null;return!results.pop();};}),"has":markFunction(function(selector){return function(elem){return Sizzle(selector,elem).length>0;};}),"contains":markFunction(function(text){text=text.replace(runescape,funescape);return function(elem){return(elem.textContent||elem.innerText||getText(elem)).indexOf(text)>-1;};}),// "Whether an element is represented by a :lang() selector // is based solely on the element's language value // being equal to the identifier C, // or beginning with the identifier C immediately followed by "-". // The matching of C against the element's language value is performed case-insensitively. // The identifier C does not have to be a valid language name." // http://www.w3.org/TR/selectors/#lang-pseudo "lang":markFunction(function(lang){// lang value must be a valid identifier if(!ridentifier.test(lang||"")){Sizzle.error("unsupported lang: "+lang);}lang=lang.replace(runescape,funescape).toLowerCase();return function(elem){var elemLang;do{if(elemLang=documentIsHTML?elem.lang:elem.getAttribute("xml:lang")||elem.getAttribute("lang")){elemLang=elemLang.toLowerCase();return elemLang===lang||elemLang.indexOf(lang+"-")===0;}}while((elem=elem.parentNode)&&elem.nodeType===1);return false;};}),// Miscellaneous "target":function target(elem){var hash=window.location&&window.location.hash;return hash&&hash.slice(1)===elem.id;},"root":function root(elem){return elem===docElem;},"focus":function focus(elem){return elem===document.activeElement&&(!document.hasFocus||document.hasFocus())&&!!(elem.type||elem.href||~elem.tabIndex);},// Boolean properties "enabled":function enabled(elem){return elem.disabled===false;},"disabled":function disabled(elem){return elem.disabled===true;},"checked":function checked(elem){// In CSS3, :checked should return both checked and selected elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked var nodeName=elem.nodeName.toLowerCase();return nodeName==="input"&&!!elem.checked||nodeName==="option"&&!!elem.selected;},"selected":function selected(elem){// Accessing this property makes selected-by-default // options in Safari work properly if(elem.parentNode){elem.parentNode.selectedIndex;}return elem.selected===true;},// Contents "empty":function empty(elem){// http://www.w3.org/TR/selectors/#empty-pseudo // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), // but not by others (comment: 8; processing instruction: 7; etc.) // nodeType < 6 works because attributes (2) do not appear as children for(elem=elem.firstChild;elem;elem=elem.nextSibling){if(elem.nodeType<6){return false;}}return true;},"parent":function parent(elem){return!Expr.pseudos["empty"](elem);},// Element/input types "header":function header(elem){return rheader.test(elem.nodeName);},"input":function input(elem){return rinputs.test(elem.nodeName);},"button":function button(elem){var name=elem.nodeName.toLowerCase();return name==="input"&&elem.type==="button"||name==="button";},"text":function text(elem){var attr;return elem.nodeName.toLowerCase()==="input"&&elem.type==="text"&&(// Support: IE<8 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" (attr=elem.getAttribute("type"))==null||attr.toLowerCase()==="text");},// Position-in-collection "first":createPositionalPseudo(function(){return[0];}),"last":createPositionalPseudo(function(matchIndexes,length){return[length-1];}),"eq":createPositionalPseudo(function(matchIndexes,length,argument){return[argument<0?argument+length:argument];}),"even":createPositionalPseudo(function(matchIndexes,length){var i=0;for(;i=0;){matchIndexes.push(i);}return matchIndexes;}),"gt":createPositionalPseudo(function(matchIndexes,length,argument){var i=argument<0?argument+length:argument;for(;++i1?function(elem,context,xml){var i=matchers.length;while(i--){if(!matchers[i](elem,context,xml)){return false;}}return true;}:matchers[0];}function multipleContexts(selector,contexts,results){var i=0,len=contexts.length;for(;i-1){seed[temp]=!(results[temp]=elem);}}}// Add elements to results, through postFinder if defined }else{matcherOut=condense(matcherOut===results?matcherOut.splice(preexisting,matcherOut.length):matcherOut);if(postFinder){postFinder(null,results,matcherOut,xml);}else{push.apply(results,matcherOut);}}});}function matcherFromTokens(tokens){var checkContext,matcher,j,len=tokens.length,leadingRelative=Expr.relative[tokens[0].type],implicitRelative=leadingRelative||Expr.relative[" "],i=leadingRelative?1:0,// The foundational matcher ensures that elements are reachable from top-level context(s) matchContext=addCombinator(function(elem){return elem===checkContext;},implicitRelative,true),matchAnyContext=addCombinator(function(elem){return indexOf(checkContext,elem)>-1;},implicitRelative,true),matchers=[function(elem,context,xml){var ret=!leadingRelative&&(xml||context!==outermostContext)||((checkContext=context).nodeType?matchContext(elem,context,xml):matchAnyContext(elem,context,xml));// Avoid hanging onto element (issue #299) checkContext=null;return ret;}];for(;i1&&elementMatcher(matchers),i>1&&toSelector(// If the preceding token was a descendant combinator, insert an implicit any-element `*` tokens.slice(0,i-1).concat({value:tokens[i-2].type===" "?"*":""})).replace(rtrim,"$1"),matcher,i0,byElement=elementMatchers.length>0,superMatcher=function superMatcher(seed,context,xml,results,outermost){var elem,j,matcher,matchedCount=0,i="0",unmatched=seed&&[],setMatched=[],contextBackup=outermostContext,// We must always have either seed elements or outermost context elems=seed||byElement&&Expr.find["TAG"]("*",outermost),// Use integer dirruns iff this is the outermost matcher dirrunsUnique=dirruns+=contextBackup==null?1:Math.random()||0.1,len=elems.length;if(outermost){outermostContext=context===document||context||outermost;}// Add elements passing elementMatchers directly to results // Support: IE<9, Safari // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id for(;i!==len&&(elem=elems[i])!=null;i++){if(byElement&&elem){j=0;if(!context&&elem.ownerDocument!==document){setDocument(elem);xml=!documentIsHTML;}while(matcher=elementMatchers[j++]){if(matcher(elem,context||document,xml)){results.push(elem);break;}}if(outermost){dirruns=dirrunsUnique;}}// Track unmatched elements for set filters if(bySet){// They will have gone through all possible matchers if(elem=!matcher&&elem){matchedCount--;}// Lengthen the array for every element, matched or not if(seed){unmatched.push(elem);}}}// `i` is now the count of elements visited above, and adding it to `matchedCount` // makes the latter nonnegative. matchedCount+=i;// Apply set filters to unmatched elements // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` // equals `i`), unless we didn't visit _any_ elements in the above loop because we have // no element matchers and no seed. // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that // case, which will result in a "00" `matchedCount` that differs from `i` but is also // numerically zero. if(bySet&&i!==matchedCount){j=0;while(matcher=setMatchers[j++]){matcher(unmatched,setMatched,context,xml);}if(seed){// Reintegrate element matches to eliminate the need for sorting if(matchedCount>0){while(i--){if(!(unmatched[i]||setMatched[i])){setMatched[i]=pop.call(results);}}}// Discard index placeholder values to get only actual matches setMatched=condense(setMatched);}// Add matches to results push.apply(results,setMatched);// Seedless set matches succeeding multiple successful matchers stipulate sorting if(outermost&&!seed&&setMatched.length>0&&matchedCount+setMatchers.length>1){Sizzle.uniqueSort(results);}}// Override manipulation of globals by nested matchers if(outermost){dirruns=dirrunsUnique;outermostContext=contextBackup;}return unmatched;};return bySet?markFunction(superMatcher):superMatcher;}compile=Sizzle.compile=function(selector,match/* Internal Use Only */){var i,setMatchers=[],elementMatchers=[],cached=compilerCache[selector+" "];if(!cached){// Generate a function of recursive functions that can be used to check each element if(!match){match=tokenize(selector);}i=match.length;while(i--){cached=matcherFromTokens(match[i]);if(cached[expando]){setMatchers.push(cached);}else{elementMatchers.push(cached);}}// Cache the compiled function cached=compilerCache(selector,matcherFromGroupMatchers(elementMatchers,setMatchers));// Save selector and tokenization cached.selector=selector;}return cached;};/** * A low-level selection function that works with Sizzle's compiled * selector functions * @param {String|Function} selector A selector or a pre-compiled * selector function built with Sizzle.compile * @param {Element} context * @param {Array} [results] * @param {Array} [seed] A set of elements to match against */select=Sizzle.select=function(selector,context,results,seed){var i,tokens,token,type,find,compiled=typeof selector==="function"&&selector,match=!seed&&tokenize(selector=compiled.selector||selector);results=results||[];// Try to minimize operations if there is only one selector in the list and no seed // (the latter of which guarantees us context) if(match.length===1){// Reduce context if the leading compound selector is an ID tokens=match[0]=match[0].slice(0);if(tokens.length>2&&(token=tokens[0]).type==="ID"&&support.getById&&context.nodeType===9&&documentIsHTML&&Expr.relative[tokens[1].type]){context=(Expr.find["ID"](token.matches[0].replace(runescape,funescape),context)||[])[0];if(!context){return results;// Precompiled matchers will still verify ancestry, so step up a level }else if(compiled){context=context.parentNode;}selector=selector.slice(tokens.shift().value.length);}// Fetch a seed set for right-to-left matching i=matchExpr["needsContext"].test(selector)?0:tokens.length;while(i--){token=tokens[i];// Abort if we hit a combinator if(Expr.relative[type=token.type]){break;}if(find=Expr.find[type]){// Search, expanding context for leading sibling combinators if(seed=find(token.matches[0].replace(runescape,funescape),rsibling.test(tokens[0].type)&&testContext(context.parentNode)||context)){// If seed is empty or no tokens remain, we can return early tokens.splice(i,1);selector=seed.length&&toSelector(tokens);if(!selector){push.apply(results,seed);return results;}break;}}}}// Compile and execute a filtering function if one is not provided // Provide `match` to avoid retokenization if we modified the selector above (compiled||compile(selector,match))(seed,context,!documentIsHTML,results,!context||rsibling.test(selector)&&testContext(context.parentNode)||context);return results;};// One-time assignments // Sort stability support.sortStable=expando.split("").sort(sortOrder).join("")===expando;// Support: Chrome 14-35+ // Always assume duplicates if they aren't passed to the comparison function support.detectDuplicates=!!hasDuplicate;// Initialize against the default document setDocument();// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) // Detached nodes confoundingly follow *each other* support.sortDetached=assert(function(div1){// Should return 1, but returns 4 (following) return div1.compareDocumentPosition(document.createElement("div"))&1;});// Support: IE<8 // Prevent attribute/property "interpolation" // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx if(!assert(function(div){div.innerHTML="";return div.firstChild.getAttribute("href")==="#";})){addHandle("type|href|height|width",function(elem,name,isXML){if(!isXML){return elem.getAttribute(name,name.toLowerCase()==="type"?1:2);}});}// Support: IE<9 // Use defaultValue in place of getAttribute("value") if(!support.attributes||!assert(function(div){div.innerHTML="";div.firstChild.setAttribute("value","");return div.firstChild.getAttribute("value")==="";})){addHandle("value",function(elem,name,isXML){if(!isXML&&elem.nodeName.toLowerCase()==="input"){return elem.defaultValue;}});}// Support: IE<9 // Use getAttributeNode to fetch booleans when getAttribute lies if(!assert(function(div){return div.getAttribute("disabled")==null;})){addHandle(booleans,function(elem,name,isXML){var val;if(!isXML){return elem[name]===true?name.toLowerCase():(val=elem.getAttributeNode(name))&&val.specified?val.value:null;}});}return Sizzle;}(window);_jQuery2.find=Sizzle;_jQuery2.expr=Sizzle.selectors;_jQuery2.expr[":"]=_jQuery2.expr.pseudos;_jQuery2.uniqueSort=_jQuery2.unique=Sizzle.uniqueSort;_jQuery2.text=Sizzle.getText;_jQuery2.isXMLDoc=Sizzle.isXML;_jQuery2.contains=Sizzle.contains;var dir=function dir(elem,_dir,until){var matched=[],truncate=until!==undefined;while((elem=elem[_dir])&&elem.nodeType!==9){if(elem.nodeType===1){if(truncate&&_jQuery2(elem).is(until)){break;}matched.push(elem);}}return matched;};var _siblings=function siblings(n,elem){var matched=[];for(;n;n=n.nextSibling){if(n.nodeType===1&&n!==elem){matched.push(n);}}return matched;};var rneedsContext=_jQuery2.expr.match.needsContext;var rsingleTag=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/;var risSimple=/^.[^:#\[\.,]*$/;// Implement the identical functionality for filter and not function winnow(elements,qualifier,not){if(_jQuery2.isFunction(qualifier)){return _jQuery2.grep(elements,function(elem,i){/* jshint -W018 */return!!qualifier.call(elem,i,elem)!==not;});}if(qualifier.nodeType){return _jQuery2.grep(elements,function(elem){return elem===qualifier!==not;});}if(typeof qualifier==="string"){if(risSimple.test(qualifier)){return _jQuery2.filter(qualifier,elements,not);}qualifier=_jQuery2.filter(qualifier,elements);}return _jQuery2.grep(elements,function(elem){return _jQuery2.inArray(elem,qualifier)>-1!==not;});}_jQuery2.filter=function(expr,elems,not){var elem=elems[0];if(not){expr=":not("+expr+")";}return elems.length===1&&elem.nodeType===1?_jQuery2.find.matchesSelector(elem,expr)?[elem]:[]:_jQuery2.find.matches(expr,_jQuery2.grep(elems,function(elem){return elem.nodeType===1;}));};_jQuery2.fn.extend({find:function find(selector){var i,ret=[],self=this,len=self.length;if(typeof selector!=="string"){return this.pushStack(_jQuery2(selector).filter(function(){for(i=0;i1?_jQuery2.unique(ret):ret);ret.selector=this.selector?this.selector+" "+selector:selector;return ret;},filter:function filter(selector){return this.pushStack(winnow(this,selector||[],false));},not:function not(selector){return this.pushStack(winnow(this,selector||[],true));},is:function is(selector){return!!winnow(this,// If this is a positional/relative selector, check membership in the returned set // so $("p:first").is("p:last") won't return true for a doc with two "p". typeof selector==="string"&&rneedsContext.test(selector)?_jQuery2(selector):selector||[],false).length;}});// Initialize a jQuery object // A central reference to the root jQuery(document) var rootjQuery,// A simple way to check for HTML strings // Prioritize #id over to avoid XSS via location.hash (#9521) // Strict HTML recognition (#11290: must start with <) rquickExpr=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,init=_jQuery2.fn.init=function(selector,context,root){var match,elem;// HANDLE: $(""), $(null), $(undefined), $(false) if(!selector){return this;}// init accepts an alternate rootjQuery // so migrate can support jQuery.sub (gh-2101) root=root||rootjQuery;// Handle HTML strings if(typeof selector==="string"){if(selector.charAt(0)==="<"&&selector.charAt(selector.length-1)===">"&&selector.length>=3){// Assume that strings that start and end with <> are HTML and skip the regex check match=[null,selector,null];}else{match=rquickExpr.exec(selector);}// Match html or make sure no context is specified for #id if(match&&(match[1]||!context)){// HANDLE: $(html) -> $(array) if(match[1]){context=context instanceof _jQuery2?context[0]:context;// scripts is true for back-compat // Intentionally let the error be thrown if parseHTML is not present _jQuery2.merge(this,_jQuery2.parseHTML(match[1],context&&context.nodeType?context.ownerDocument||context:document,true));// HANDLE: $(html, props) if(rsingleTag.test(match[1])&&_jQuery2.isPlainObject(context)){for(match in context){// Properties of context are called as methods if possible if(_jQuery2.isFunction(this[match])){this[match](context[match]);// ...and otherwise set as attributes }else{this.attr(match,context[match]);}}}return this;// HANDLE: $(#id) }else{elem=document.getElementById(match[2]);// Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if(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;}this.context=document;this.selector=selector;return this;}// HANDLE: $(expr, $(...)) }else if(!context||context.jquery){return(context||root).find(selector);// HANDLE: $(expr, context) // (which is just equivalent to: $(context).find(expr) }else{return this.constructor(context).find(selector);}// HANDLE: $(DOMElement) }else if(selector.nodeType){this.context=this[0]=selector;this.length=1;return this;// HANDLE: $(function) // Shortcut for document ready }else if(_jQuery2.isFunction(selector)){return typeof root.ready!=="undefined"?root.ready(selector):// Execute immediately if ready is not present selector(_jQuery2);}if(selector.selector!==undefined){this.selector=selector.selector;this.context=selector.context;}return _jQuery2.makeArray(selector,this);};// Give the init function the jQuery prototype for later instantiation init.prototype=_jQuery2.fn;// Initialize central reference rootjQuery=_jQuery2(document);var rparentsprev=/^(?:parents|prev(?:Until|All))/,// methods guaranteed to produce a unique set when starting from a unique set guaranteedUnique={children:true,contents:true,next:true,prev:true};_jQuery2.fn.extend({has:function has(target){var i,targets=_jQuery2(target,this),len=targets.length;return this.filter(function(){for(i=0;i-1:// Don't pass non-elements to Sizzle cur.nodeType===1&&_jQuery2.find.matchesSelector(cur,selectors))){matched.push(cur);break;}}}return this.pushStack(matched.length>1?_jQuery2.uniqueSort(matched):matched);},// Determine the position of an element within // the matched set of elements index:function index(elem){// No argument, return index in parent if(!elem){return this[0]&&this[0].parentNode?this.first().prevAll().length:-1;}// index in selector if(typeof elem==="string"){return _jQuery2.inArray(this[0],_jQuery2(elem));}// Locate the position of the desired element return _jQuery2.inArray(// If it receives a jQuery object, the first element is used elem.jquery?elem[0]:elem,this);},add:function add(selector,context){return this.pushStack(_jQuery2.uniqueSort(_jQuery2.merge(this.get(),_jQuery2(selector,context))));},addBack:function addBack(selector){return this.add(selector==null?this.prevObject:this.prevObject.filter(selector));}});function sibling(cur,dir){do{cur=cur[dir];}while(cur&&cur.nodeType!==1);return cur;}_jQuery2.each({parent:function parent(elem){var parent=elem.parentNode;return parent&&parent.nodeType!==11?parent:null;},parents:function parents(elem){return dir(elem,"parentNode");},parentsUntil:function parentsUntil(elem,i,until){return dir(elem,"parentNode",until);},next:function next(elem){return sibling(elem,"nextSibling");},prev:function prev(elem){return sibling(elem,"previousSibling");},nextAll:function nextAll(elem){return dir(elem,"nextSibling");},prevAll:function prevAll(elem){return dir(elem,"previousSibling");},nextUntil:function nextUntil(elem,i,until){return dir(elem,"nextSibling",until);},prevUntil:function prevUntil(elem,i,until){return dir(elem,"previousSibling",until);},siblings:function siblings(elem){return _siblings((elem.parentNode||{}).firstChild,elem);},children:function children(elem){return _siblings(elem.firstChild);},contents:function contents(elem){return _jQuery2.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:_jQuery2.merge([],elem.childNodes);}},function(name,fn){_jQuery2.fn[name]=function(until,selector){var ret=_jQuery2.map(this,fn,until);if(name.slice(-5)!=="Until"){selector=until;}if(selector&&typeof selector==="string"){ret=_jQuery2.filter(selector,ret);}if(this.length>1){// Remove duplicates if(!guaranteedUnique[name]){ret=_jQuery2.uniqueSort(ret);}// Reverse order for parents* and prev-derivatives if(rparentsprev.test(name)){ret=ret.reverse();}}return this.pushStack(ret);};});var rnotwhite=/\S+/g;// Convert String-formatted options into Object-formatted ones function createOptions(options){var object={};_jQuery2.each(options.match(rnotwhite)||[],function(_,flag){object[flag]=true;});return object;}/* * Create a callback list using the following parameters: * * options: an optional list of space-separated options that will change how * the callback list behaves or a more traditional option object * * By default a callback list will act like an event callback list and can be * "fired" multiple times. * * Possible options: * * 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 * */_jQuery2.Callbacks=function(options){// Convert options from String-formatted to Object-formatted if needed // (we check in cache first) options=typeof options==="string"?createOptions(options):_jQuery2.extend({},options);var// Flag to know if list is currently firing firing,// Last fire value for non-forgettable lists memory,// Flag to know if list was already fired _fired,// Flag to prevent firing _locked,// Actual callback list list=[],// Queue of execution data for repeatable lists queue=[],// Index of currently firing callback (modified by add/remove as needed) firingIndex=-1,// Fire callbacks fire=function fire(){// Enforce single-firing _locked=options.once;// Execute callbacks for all pending executions, // respecting firingIndex overrides and runtime changes _fired=firing=true;for(;queue.length;firingIndex=-1){memory=queue.shift();while(++firingIndex-1){list.splice(index,1);// Handle firing indexes if(index<=firingIndex){firingIndex--;}}});return this;},// Check if a given callback is in the list. // If no argument is given, return whether or not list has callbacks attached. has:function has(fn){return fn?_jQuery2.inArray(fn,list)>-1:list.length>0;},// Remove all callbacks from the list empty:function empty(){if(list){list=[];}return this;},// Disable .fire and .add // Abort any current/pending executions // Clear all callbacks and values disable:function disable(){_locked=queue=[];list=memory="";return this;},disabled:function disabled(){return!list;},// Disable .fire // Also disable .add unless we have memory (since it would have no effect) // Abort any pending executions lock:function lock(){_locked=true;if(!memory){self.disable();}return this;},locked:function locked(){return!!_locked;},// Call all callbacks with the given context and arguments fireWith:function fireWith(context,args){if(!_locked){args=args||[];args=[context,args.slice?args.slice():args];queue.push(args);if(!firing){fire();}}return this;},// Call all the callbacks with the given arguments fire:function fire(){self.fireWith(this,arguments);return this;},// To know if the callbacks have already been called at least once fired:function fired(){return!!_fired;}};return self;};_jQuery2.extend({Deferred:function Deferred(func){var tuples=[// action, add listener, listener list, final state ["resolve","done",_jQuery2.Callbacks("once memory"),"resolved"],["reject","fail",_jQuery2.Callbacks("once memory"),"rejected"],["notify","progress",_jQuery2.Callbacks("memory")]],_state="pending",_promise={state:function state(){return _state;},always:function always(){deferred.done(arguments).fail(arguments);return this;},then:function then(/* fnDone, fnFail, fnProgress */){var fns=arguments;return _jQuery2.Deferred(function(newDefer){_jQuery2.each(tuples,function(i,tuple){var fn=_jQuery2.isFunction(fns[i])&&fns[i];// deferred[ done | fail | progress ] for forwarding actions to newDefer deferred[tuple[1]](function(){var returned=fn&&fn.apply(this,arguments);if(returned&&_jQuery2.isFunction(returned.promise)){returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);}else{newDefer[tuple[0]+"With"](this===_promise?newDefer.promise():this,fn?[returned]:arguments);}});});fns=null;}).promise();},// Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise:function promise(obj){return obj!=null?_jQuery2.extend(obj,_promise):_promise;}},deferred={};// Keep pipe for back-compat _promise.pipe=_promise.then;// Add list-specific methods _jQuery2.each(tuples,function(i,tuple){var list=tuple[2],stateString=tuple[3];// promise[ done | fail | progress ] = list.add _promise[tuple[1]]=list.add;// Handle state if(stateString){list.add(function(){// state = [ resolved | rejected ] _state=stateString;// [ reject_list | resolve_list ].disable; progress_list.lock },tuples[i^1][2].disable,tuples[2][2].lock);}// deferred[ resolve | reject | notify ] deferred[tuple[0]]=function(){deferred[tuple[0]+"With"](this===deferred?_promise:this,arguments);return this;};deferred[tuple[0]+"With"]=list.fireWith;});// Make the deferred a promise _promise.promise(deferred);// Call given func if any if(func){func.call(deferred,deferred);}// All done! return deferred;},// Deferred helper when:function when(subordinate/* , ..., subordinateN */){var i=0,resolveValues=_slice.call(arguments),length=resolveValues.length,// the count of uncompleted subordinates remaining=length!==1||subordinate&&_jQuery2.isFunction(subordinate.promise)?length:0,// the master Deferred. // If resolveValues consist of only a single Deferred, just use that. deferred=remaining===1?subordinate:_jQuery2.Deferred(),// Update function for both resolve and progress values updateFunc=function updateFunc(i,contexts,values){return function(value){contexts[i]=this;values[i]=arguments.length>1?_slice.call(arguments):value;if(values===progressValues){deferred.notifyWith(contexts,values);}else if(! --remaining){deferred.resolveWith(contexts,values);}};},progressValues,progressContexts,resolveContexts;// add listeners to Deferred subordinates; treat others as resolved if(length>1){progressValues=new Array(length);progressContexts=new Array(length);resolveContexts=new Array(length);for(;i0){return;}// If there are functions bound, to execute readyList.resolveWith(document,[_jQuery2]);// Trigger any bound ready events if(_jQuery2.fn.triggerHandler){_jQuery2(document).triggerHandler("ready");_jQuery2(document).off("ready");}}});/** * Clean-up method for dom ready events */function detach(){if(document.addEventListener){document.removeEventListener("DOMContentLoaded",completed);window.removeEventListener("load",completed);}else{document.detachEvent("onreadystatechange",completed);window.detachEvent("onload",completed);}}/** * The ready event handler and self cleanup method */function completed(){// readyState === "complete" is good enough for us to call the dom ready in oldIE if(document.addEventListener||window.event.type==="load"||document.readyState==="complete"){detach();_jQuery2.ready();}}_jQuery2.ready.promise=function(obj){if(!readyList){readyList=_jQuery2.Deferred();// Catch cases where $(document).ready() is called // after the browser event has already occurred. // Support: IE6-10 // Older IE sometimes signals "interactive" too soon if(document.readyState==="complete"||document.readyState!=="loading"&&!document.documentElement.doScroll){// Handle it asynchronously to allow scripts the opportunity to delay ready window.setTimeout(_jQuery2.ready);// Standards-based browsers support DOMContentLoaded }else if(document.addEventListener){// Use the handy event callback document.addEventListener("DOMContentLoaded",completed);// A fallback to window.onload, that will always work window.addEventListener("load",completed);// If IE event model is used }else{// Ensure firing before onload, maybe late but safe also for iframes document.attachEvent("onreadystatechange",completed);// A fallback to window.onload, that will always work window.attachEvent("onload",completed);// If IE and not a frame // continually check to see if the document is ready var top=false;try{top=window.frameElement==null&&document.documentElement;}catch(e){}if(top&&top.doScroll){(function doScrollCheck(){if(!_jQuery2.isReady){try{// Use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ top.doScroll("left");}catch(e){return window.setTimeout(doScrollCheck,50);}// detach all dom ready events detach();// and execute any waiting functions _jQuery2.ready();}})();}}}return readyList.promise(obj);};// Kick off the DOM ready check even if the user does not _jQuery2.ready.promise();// Support: IE<9 // Iteration over object's inherited properties before its own var i;for(i in _jQuery2(support)){break;}support.ownFirst=i==="0";// Note: most support tests are defined in their respective modules. // false until the test is run support.inlineBlockNeedsLayout=false;// Execute ASAP in case we need to set body.style.zoom _jQuery2(function(){// Minified: var a,b,c,d var val,div,body,container;body=document.getElementsByTagName("body")[0];if(!body||!body.style){// Return for frameset docs that don't have a body return;}// Setup div=document.createElement("div");container=document.createElement("div");container.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px";body.appendChild(container).appendChild(div);if(typeof div.style.zoom!=="undefined"){// Support: IE<8 // Check if natively block-level elements act like inline-block // elements when setting their display to 'inline' and giving // them layout div.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";support.inlineBlockNeedsLayout=val=div.offsetWidth===3;if(val){// Prevent IE 6 from affecting layout for positioned elements #11048 // Prevent IE from shrinking the body in IE 7 mode #12869 // Support: IE<8 body.style.zoom=1;}}body.removeChild(container);});(function(){var div=document.createElement("div");// Support: IE<9 support.deleteExpando=true;try{delete div.test;}catch(e){support.deleteExpando=false;}// Null elements to avoid leaks in IE. div=null;})();var acceptData=function acceptData(elem){var noData=_jQuery2.noData[(elem.nodeName+" ").toLowerCase()],nodeType=+elem.nodeType||1;// Do not set data on non-element DOM nodes because it will not be cleared (#8335). return nodeType!==1&&nodeType!==9?false:// Nodes accept data unless otherwise specified; rejection can be conditional !noData||noData!==true&&elem.getAttribute("classid")===noData;};var rbrace=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,rmultiDash=/([A-Z])/g;function dataAttr(elem,key,data){// If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if(data===undefined&&elem.nodeType===1){var name="data-"+key.replace(rmultiDash,"-$1").toLowerCase();data=elem.getAttribute(name);if(typeof data==="string"){try{data=data==="true"?true:data==="false"?false:data==="null"?null:// Only convert to a number if it doesn't change the string +data+""===data?+data:rbrace.test(data)?_jQuery2.parseJSON(data):data;}catch(e){}// Make sure we set the data so it isn't changed later _jQuery2.data(elem,key,data);}else{data=undefined;}}return data;}// checks a cache object for emptiness function isEmptyDataObject(obj){var name;for(name in obj){// if the public data object is empty, the private is still empty if(name==="data"&&_jQuery2.isEmptyObject(obj[name])){continue;}if(name!=="toJSON"){return false;}}return true;}function internalData(elem,name,data,pvt/* Internal Use Only */){if(!acceptData(elem)){return;}var ret,thisCache,internalKey=_jQuery2.expando,// 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?_jQuery2.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;// 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]||!pvt&&!cache[id].data)&&data===undefined&&typeof name==="string"){return;}if(!id){// Only DOM nodes need a new unique ID for each element since their data // ends up in the global cache if(isNode){id=elem[internalKey]=deletedIds.pop()||_jQuery2.guid++;}else{id=internalKey;}}if(!cache[id]){// Avoid exposing jQuery metadata on plain JS objects when the object // is serialized using JSON.stringify cache[id]=isNode?{}:{toJSON:_jQuery2.noop};}// An object can be passed to jQuery.data instead of a key/value pair; this gets // shallow copied over onto the existing cache if(_typeof(name)==="object"||typeof name==="function"){if(pvt){cache[id]=_jQuery2.extend(cache[id],name);}else{cache[id].data=_jQuery2.extend(cache[id].data,name);}}thisCache=cache[id];// jQuery data() is stored in a separate object inside the object's internal data // cache in order to avoid key collisions between internal data and user-defined // data. if(!pvt){if(!thisCache.data){thisCache.data={};}thisCache=thisCache.data;}if(data!==undefined){thisCache[_jQuery2.camelCase(name)]=data;}// Check for both converted-to-camel and non-converted data property names // If a data property was specified if(typeof name==="string"){// First Try to find as-is property data ret=thisCache[name];// Test for null|undefined property data if(ret==null){// Try to find the camelCased property ret=thisCache[_jQuery2.camelCase(name)];}}else{ret=thisCache;}return ret;}function internalRemoveData(elem,name,pvt){if(!acceptData(elem)){return;}var thisCache,i,isNode=elem.nodeType,// See jQuery.data for more information cache=isNode?_jQuery2.cache:elem,id=isNode?elem[_jQuery2.expando]:_jQuery2.expando;// If there is already no cache entry for this object, there is no // purpose in continuing if(!cache[id]){return;}if(name){thisCache=pvt?cache[id]:cache[id].data;if(thisCache){// Support array or space separated string names for data keys if(!_jQuery2.isArray(name)){// try the string as a key before any manipulation if(name in thisCache){name=[name];}else{// split the camel cased version by spaces unless a key with the spaces exists name=_jQuery2.camelCase(name);if(name in thisCache){name=[name];}else{name=name.split(" ");}}}else{// If "name" is an array of keys... // When data is initially created, via ("key", "val") signature, // keys will be converted to camelCase. // Since there is no way to tell _how_ a key was added, remove // both plain key and camelCase key. #12786 // This will only penalize the array argument path. name=name.concat(_jQuery2.map(name,_jQuery2.camelCase));}i=name.length;while(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(thisCache):!_jQuery2.isEmptyObject(thisCache)){return;}}}// See jQuery.data for more information if(!pvt){delete cache[id].data;// Don't destroy the parent cache unless the internal data object // had been the only thing left in it if(!isEmptyDataObject(cache[id])){return;}}// Destroy the cache if(isNode){_jQuery2.cleanData([elem],true);// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) /* jshint eqeqeq: false */}else if(support.deleteExpando||cache!=cache.window){/* jshint eqeqeq: true */delete cache[id];// When all else fails, undefined }else{cache[id]=undefined;}}_jQuery2.extend({cache:{},// The following elements (space-suffixed to avoid Object.prototype collisions) // throw uncatchable exceptions if you attempt to set expando properties noData:{"applet ":true,"embed ":true,// ...but Flash objects (which have this classid) *can* handle expandos "object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function hasData(elem){elem=elem.nodeType?_jQuery2.cache[elem[_jQuery2.expando]]:elem[_jQuery2.expando];return!!elem&&!isEmptyDataObject(elem);},data:function data(elem,name,_data){return internalData(elem,name,_data);},removeData:function removeData(elem,name){return internalRemoveData(elem,name);},// For internal use only. _data:function _data(elem,name,data){return internalData(elem,name,data,true);},_removeData:function _removeData(elem,name){return internalRemoveData(elem,name,true);}});_jQuery2.fn.extend({data:function data(key,value){var i,name,data,elem=this[0],attrs=elem&&elem.attributes;// Special expections of .data basically thwart jQuery.access, // so implement the relevant behavior ourselves // Gets all values if(key===undefined){if(this.length){data=_jQuery2.data(elem);if(elem.nodeType===1&&!_jQuery2._data(elem,"parsedAttrs")){i=attrs.length;while(i--){// Support: IE11+ // The attrs elements can be null (#14894) if(attrs[i]){name=attrs[i].name;if(name.indexOf("data-")===0){name=_jQuery2.camelCase(name.slice(5));dataAttr(elem,name,data[name]);}}}_jQuery2._data(elem,"parsedAttrs",true);}}return data;}// Sets multiple values if(_typeof(key)==="object"){return this.each(function(){_jQuery2.data(this,key);});}return arguments.length>1?// Sets one value this.each(function(){_jQuery2.data(this,key,value);}):// Gets one value // Try to fetch any internally stored data first elem?dataAttr(elem,key,_jQuery2.data(elem,key)):undefined;},removeData:function removeData(key){return this.each(function(){_jQuery2.removeData(this,key);});}});_jQuery2.extend({queue:function queue(elem,type,data){var queue;if(elem){type=(type||"fx")+"queue";queue=_jQuery2._data(elem,type);// Speed up dequeue by getting out quickly if this is just a lookup if(data){if(!queue||_jQuery2.isArray(data)){queue=_jQuery2._data(elem,type,_jQuery2.makeArray(data));}else{queue.push(data);}}return queue||[];}},dequeue:function dequeue(elem,type){type=type||"fx";var queue=_jQuery2.queue(elem,type),startLength=queue.length,fn=queue.shift(),hooks=_jQuery2._queueHooks(elem,type),next=function next(){_jQuery2.dequeue(elem,type);};// If the fx queue is dequeued, always remove the progress sentinel if(fn==="inprogress"){fn=queue.shift();startLength--;}if(fn){// Add a progress sentinel to prevent the fx queue from being // automatically dequeued if(type==="fx"){queue.unshift("inprogress");}// clear up the last queue stop function delete hooks.stop;fn.call(elem,next,hooks);}if(!startLength&&hooks){hooks.empty.fire();}},// not intended for public consumption - generates a queueHooks object, // or returns the current one _queueHooks:function _queueHooks(elem,type){var key=type+"queueHooks";return _jQuery2._data(elem,key)||_jQuery2._data(elem,key,{empty:_jQuery2.Callbacks("once memory").add(function(){_jQuery2._removeData(elem,type+"queue");_jQuery2._removeData(elem,key);})});}});_jQuery2.fn.extend({queue:function queue(type,data){var setter=2;if(typeof type!=="string"){data=type;type="fx";setter--;}if(arguments.length";// Check if a disconnected checkbox will retain its checked // value of true after appended to the DOM (IE6/7) input.type="checkbox";input.checked=true;fragment.appendChild(input);support.appendChecked=input.checked;// Make sure textarea (and checkbox) defaultValue is properly cloned // Support: IE6-IE11+ div.innerHTML="";support.noCloneChecked=!!div.cloneNode(true).lastChild.defaultValue;// #11217 - WebKit loses check when the name is after the checked attribute fragment.appendChild(div);// Support: Windows Web Apps (WWA) // `name` and `type` must use .setAttribute for WWA (#14901) input=document.createElement("input");input.setAttribute("type","radio");input.setAttribute("checked","checked");input.setAttribute("name","t");div.appendChild(input);// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 // old WebKit doesn't clone checked state correctly in fragments support.checkClone=div.cloneNode(true).cloneNode(true).lastChild.checked;// Support: IE<9 // Cloned elements keep attachEvent handlers, we use addEventListener on IE9+ support.noCloneEvent=!!div.addEventListener;// Support: IE<9 // Since attributes and properties are the same in IE, // cleanData must set properties to undefined rather than use removeAttribute div[_jQuery2.expando]=1;support.attributes=!div.getAttribute(_jQuery2.expando);})();// We have to close these tags to support XHTML (#13200) var wrapMap={option:[1,""],legend:[1,"
","
"],area:[1,"",""],// Support: IE8 param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, // unless wrapped in a div with non-breaking characters in front of it. _default:support.htmlSerialize?[0,"",""]:[1,"X
","
"]};// Support: IE8-IE9 wrapMap.optgroup=wrapMap.option;wrapMap.tbody=wrapMap.tfoot=wrapMap.colgroup=wrapMap.caption=wrapMap.thead;wrapMap.th=wrapMap.td;function getAll(context,tag){var elems,elem,i=0,found=typeof context.getElementsByTagName!=="undefined"?context.getElementsByTagName(tag||"*"):typeof context.querySelectorAll!=="undefined"?context.querySelectorAll(tag||"*"):undefined;if(!found){for(found=[],elems=context.childNodes||context;(elem=elems[i])!=null;i++){if(!tag||_jQuery2.nodeName(elem,tag)){found.push(elem);}else{_jQuery2.merge(found,getAll(elem,tag));}}}return tag===undefined||tag&&_jQuery2.nodeName(context,tag)?_jQuery2.merge([context],found):found;}// Mark scripts as having already been evaluated function setGlobalEval(elems,refElements){var elem,i=0;for(;(elem=elems[i])!=null;i++){_jQuery2._data(elem,"globalEval",!refElements||_jQuery2._data(refElements[i],"globalEval"));}}var rhtml=/<|&#?\w+;/,rtbody=/ from table fragments if(!support.tbody){// String was a , *may* have spurious elem=tag==="table"&&!rtbody.test(elem)?tmp.firstChild:// String was a bare or wrap[1]==="
"&&!rtbody.test(elem)?tmp:0;j=elem&&elem.childNodes.length;while(j--){if(_jQuery2.nodeName(tbody=elem.childNodes[j],"tbody")&&!tbody.childNodes.length){elem.removeChild(tbody);}}}_jQuery2.merge(nodes,tmp.childNodes);// Fix #12392 for WebKit and IE > 9 tmp.textContent="";// Fix #12392 for oldIE while(tmp.firstChild){tmp.removeChild(tmp.firstChild);}// Remember the top-level container for proper cleanup tmp=safe.lastChild;}}}// Fix #11356: Clear elements from fragment if(tmp){safe.removeChild(tmp);}// Reset defaultChecked for any radios and checkboxes // about to be appended to the DOM in IE 6/7 (#8060) if(!support.appendChecked){_jQuery2.grep(getAll(nodes,"input"),fixDefaultChecked);}i=0;while(elem=nodes[i++]){// Skip elements already in the context collection (trac-4087) if(selection&&_jQuery2.inArray(elem,selection)>-1){if(ignored){ignored.push(elem);}continue;}contains=_jQuery2.contains(elem.ownerDocument,elem);// Append to fragment tmp=getAll(safe.appendChild(elem),"script");// Preserve script evaluation history if(contains){setGlobalEval(tmp);}// Capture executables if(scripts){j=0;while(elem=tmp[j++]){if(rscriptType.test(elem.type||"")){scripts.push(elem);}}}}tmp=null;return safe;}(function(){var i,eventName,div=document.createElement("div");// Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events) for(i in{submit:true,change:true,focusin:true}){eventName="on"+i;if(!(support[i]=eventName in window)){// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) div.setAttribute(eventName,"t");support[i]=div.attributes[eventName].expando===false;}}// Null elements to avoid leaks in IE. div=null;})();var rformElems=/^(?:input|select|textarea)$/i,rkeyEvent=/^key/,rmouseEvent=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,rfocusMorph=/^(?:focusinfocus|focusoutblur)$/,rtypenamespace=/^([^.]*)(?:\.(.+)|)/;function returnTrue(){return true;}function returnFalse(){return false;}// Support: IE9 // See #13393 for more info function safeActiveElement(){try{return document.activeElement;}catch(err){}}function _on(elem,types,selector,data,fn,one){var origFn,type;// Types can be a map of types/handlers if(_typeof(types)==="object"){// ( types-Object, selector, data ) if(typeof selector!=="string"){// ( types-Object, data ) data=data||selector;selector=undefined;}for(type in types){_on(elem,type,selector,data,types[type],one);}return elem;}if(data==null&&fn==null){// ( types, fn ) fn=selector;data=selector=undefined;}else if(fn==null){if(typeof selector==="string"){// ( types, selector, fn ) fn=data;data=undefined;}else{// ( types, data, fn ) fn=data;data=selector;selector=undefined;}}if(fn===false){fn=returnFalse;}else if(!fn){return elem;}if(one===1){origFn=fn;fn=function fn(event){// Can use an empty set, since event contains the info _jQuery2().off(event);return origFn.apply(this,arguments);};// Use same guid so caller can remove using origFn fn.guid=origFn.guid||(origFn.guid=_jQuery2.guid++);}return elem.each(function(){_jQuery2.event.add(this,types,fn,data,selector);});}/* * Helper functions for managing events -- not part of the public interface. * Props to Dean Edwards' addEvent library for many of the ideas. */_jQuery2.event={global:{},add:function add(elem,types,handler,data,selector){var tmp,events,t,handleObjIn,special,eventHandle,handleObj,handlers,type,namespaces,origType,elemData=_jQuery2._data(elem);// Don't attach events to noData or text/comment nodes (but allow plain objects) if(!elemData){return;}// Caller can pass in an object of custom data in lieu of the handler if(handler.handler){handleObjIn=handler;handler=handleObjIn.handler;selector=handleObjIn.selector;}// Make sure that the handler has a unique ID, used to find/remove it later if(!handler.guid){handler.guid=_jQuery2.guid++;}// Init the element's event structure and main handler, if this is the first if(!(events=elemData.events)){events=elemData.events={};}if(!(eventHandle=elemData.handle)){eventHandle=elemData.handle=function(e){// Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded return typeof _jQuery2!=="undefined"&&(!e||_jQuery2.event.triggered!==e.type)?_jQuery2.event.dispatch.apply(eventHandle.elem,arguments):undefined;};// Add elem as a property of the handle fn to prevent a memory leak // with IE non-native events eventHandle.elem=elem;}// Handle multiple events separated by a space types=(types||"").match(rnotwhite)||[""];t=types.length;while(t--){tmp=rtypenamespace.exec(types[t])||[];type=origType=tmp[1];namespaces=(tmp[2]||"").split(".").sort();// There *must* be a type, no attaching namespace-only handlers if(!type){continue;}// If event changes its type, use the special event handlers for the changed type special=_jQuery2.event.special[type]||{};// If selector defined, determine special event api type, otherwise given type type=(selector?special.delegateType:special.bindType)||type;// Update special based on newly reset type special=_jQuery2.event.special[type]||{};// handleObj is passed to all event handlers handleObj=_jQuery2.extend({type:type,origType:origType,data:data,handler:handler,guid:handler.guid,selector:selector,needsContext:selector&&_jQuery2.expr.match.needsContext.test(selector),namespace:namespaces.join(".")},handleObjIn);// Init the event handler queue if we're the first if(!(handlers=events[type])){handlers=events[type]=[];handlers.delegateCount=0;// Only use addEventListener/attachEvent if the special events handler returns false if(!special.setup||special.setup.call(elem,data,namespaces,eventHandle)===false){// Bind the global event handler to the element if(elem.addEventListener){elem.addEventListener(type,eventHandle,false);}else if(elem.attachEvent){elem.attachEvent("on"+type,eventHandle);}}}if(special.add){special.add.call(elem,handleObj);if(!handleObj.handler.guid){handleObj.handler.guid=handler.guid;}}// Add to the element's handler list, delegates in front if(selector){handlers.splice(handlers.delegateCount++,0,handleObj);}else{handlers.push(handleObj);}// Keep track of which events have ever been used, for event optimization _jQuery2.event.global[type]=true;}// Nullify elem to prevent memory leaks in IE elem=null;},// Detach an event or set of events from an element remove:function remove(elem,types,handler,selector,mappedTypes){var j,handleObj,tmp,origCount,t,events,special,handlers,type,namespaces,origType,elemData=_jQuery2.hasData(elem)&&_jQuery2._data(elem);if(!elemData||!(events=elemData.events)){return;}// Once for each type.namespace in types; type may be omitted types=(types||"").match(rnotwhite)||[""];t=types.length;while(t--){tmp=rtypenamespace.exec(types[t])||[];type=origType=tmp[1];namespaces=(tmp[2]||"").split(".").sort();// Unbind all events (on this namespace, if provided) for the element if(!type){for(type in events){_jQuery2.event.remove(elem,type+types[t],handler,selector,true);}continue;}special=_jQuery2.event.special[type]||{};type=(selector?special.delegateType:special.bindType)||type;handlers=events[type]||[];tmp=tmp[2]&&new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)");// Remove matching events origCount=j=handlers.length;while(j--){handleObj=handlers[j];if((mappedTypes||origType===handleObj.origType)&&(!handler||handler.guid===handleObj.guid)&&(!tmp||tmp.test(handleObj.namespace))&&(!selector||selector===handleObj.selector||selector==="**"&&handleObj.selector)){handlers.splice(j,1);if(handleObj.selector){handlers.delegateCount--;}if(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) if(origCount&&!handlers.length){if(!special.teardown||special.teardown.call(elem,namespaces,elemData.handle)===false){_jQuery2.removeEvent(elem,type,elemData.handle);}delete events[type];}}// Remove the expando if it's no longer used if(_jQuery2.isEmptyObject(events)){delete elemData.handle;// removeData also checks for emptiness and clears the expando if empty // so use it instead of delete _jQuery2._removeData(elem,"events");}},trigger:function trigger(event,data,elem,onlyHandlers){var handle,ontype,cur,bubbleType,special,tmp,i,eventPath=[elem||document],type=hasOwn.call(event,"type")?event.type:event,namespaces=hasOwn.call(event,"namespace")?event.namespace.split("."):[];cur=tmp=elem=elem||document;// Don't do events on text and comment nodes if(elem.nodeType===3||elem.nodeType===8){return;}// focus/blur morphs to focusin/out; ensure we're not firing them right now if(rfocusMorph.test(type+_jQuery2.event.triggered)){return;}if(type.indexOf(".")>-1){// Namespaced trigger; create a regexp to match event type in handle() namespaces=type.split(".");type=namespaces.shift();namespaces.sort();}ontype=type.indexOf(":")<0&&"on"+type;// Caller can pass in a jQuery.Event object, Object, or just an event type string event=event[_jQuery2.expando]?event:new _jQuery2.Event(type,_typeof(event)==="object"&&event);// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) event.isTrigger=onlyHandlers?2:3;event.namespace=namespaces.join(".");event.rnamespace=event.namespace?new RegExp("(^|\\.)"+namespaces.join("\\.(?:.*\\.|)")+"(\\.|$)"):null;// Clean up the event in case it is being reused event.result=undefined;if(!event.target){event.target=elem;}// Clone any incoming data and prepend the event, creating the handler arg list data=data==null?[event]:_jQuery2.makeArray(data,[event]);// Allow special events to draw outside the lines special=_jQuery2.event.special[type]||{};if(!onlyHandlers&&special.trigger&&special.trigger.apply(elem,data)===false){return;}// 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) if(!onlyHandlers&&!special.noBubble&&!_jQuery2.isWindow(elem)){bubbleType=special.delegateType||type;if(!rfocusMorph.test(bubbleType+type)){cur=cur.parentNode;}for(;cur;cur=cur.parentNode){eventPath.push(cur);tmp=cur;}// Only add window if we got to document (e.g., not plain obj or detached DOM) if(tmp===(elem.ownerDocument||document)){eventPath.push(tmp.defaultView||tmp.parentWindow||window);}}// Fire handlers on the event path i=0;while((cur=eventPath[i++])&&!event.isPropagationStopped()){event.type=i>1?bubbleType:special.bindType||type;// jQuery handler handle=(_jQuery2._data(cur,"events")||{})[event.type]&&_jQuery2._data(cur,"handle");if(handle){handle.apply(cur,data);}// Native handler handle=ontype&&cur[ontype];if(handle&&handle.apply&&acceptData(cur)){event.result=handle.apply(cur,data);if(event.result===false){event.preventDefault();}}}event.type=type;// If nobody prevented the default action, do it now if(!onlyHandlers&&!event.isDefaultPrevented()){if((!special._default||special._default.apply(eventPath.pop(),data)===false)&&acceptData(elem)){// Call a native DOM method on the target with the same name name as the event. // Can't use an .isFunction() check here because IE6/7 fails that test. // Don't do default actions on window, that's where global variables be (#6170) if(ontype&&elem[type]&&!_jQuery2.isWindow(elem)){// Don't re-trigger an onFOO event when we call its FOO() method tmp=elem[ontype];if(tmp){elem[ontype]=null;}// Prevent re-triggering of the same event, since we already bubbled it above _jQuery2.event.triggered=type;try{elem[type]();}catch(e){// IE<9 dies on focus/blur to hidden element (#1486,#12518) // only reproducible on winXP IE8 native, not IE9 in IE8 mode }_jQuery2.event.triggered=undefined;if(tmp){elem[ontype]=tmp;}}}}return event.result;},dispatch:function dispatch(event){// Make a writable jQuery.Event from the native event object event=_jQuery2.event.fix(event);var i,j,ret,matched,handleObj,handlerQueue=[],args=_slice.call(arguments),handlers=(_jQuery2._data(this,"events")||{})[event.type]||[],special=_jQuery2.event.special[event.type]||{};// Use the fix-ed jQuery.Event rather than the (read-only) native event args[0]=event;event.delegateTarget=this;// Call the preDispatch hook for the mapped type, and let it bail if desired if(special.preDispatch&&special.preDispatch.call(this,event)===false){return;}// Determine handlers handlerQueue=_jQuery2.event.handlers.call(this,event,handlers);// Run delegates first; they may want to stop propagation beneath us i=0;while((matched=handlerQueue[i++])&&!event.isPropagationStopped()){event.currentTarget=matched.elem;j=0;while((handleObj=matched.handlers[j++])&&!event.isImmediatePropagationStopped()){// Triggered event must either 1) have no namespace, or 2) have namespace(s) // a subset or equal to those in the bound event (both can have no namespace). if(!event.rnamespace||event.rnamespace.test(handleObj.namespace)){event.handleObj=handleObj;event.data=handleObj.data;ret=((_jQuery2.event.special[handleObj.origType]||{}).handle||handleObj.handler).apply(matched.elem,args);if(ret!==undefined){if((event.result=ret)===false){event.preventDefault();event.stopPropagation();}}}}}// Call the postDispatch hook for the mapped type if(special.postDispatch){special.postDispatch.call(this,event);}return event.result;},handlers:function handlers(event,_handlers){var i,matches,sel,handleObj,handlerQueue=[],delegateCount=_handlers.delegateCount,cur=event.target;// Support (at least): Chrome, IE9 // Find delegate handlers // Black-hole SVG instance trees (#13180) // // Support: Firefox<=42+ // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) if(delegateCount&&cur.nodeType&&(event.type!=="click"||isNaN(event.button)||event.button<1)){/* jshint eqeqeq: false */for(;cur!=this;cur=cur.parentNode||this){/* jshint eqeqeq: true */// Don't check non-elements (#13208) // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) if(cur.nodeType===1&&(cur.disabled!==true||event.type!=="click")){matches=[];for(i=0;i-1:_jQuery2.find(sel,this,null,[cur]).length;}if(matches[sel]){matches.push(handleObj);}}if(matches.length){handlerQueue.push({elem:cur,handlers:matches});}}}}// Add the remaining (directly-bound) handlers if(delegateCount<_handlers.length){handlerQueue.push({elem:this,handlers:_handlers.slice(delegateCount)});}return handlerQueue;},fix:function fix(event){if(event[_jQuery2.expando]){return event;}// Create a writable copy of the event object and normalize some properties var i,prop,copy,type=event.type,originalEvent=event,fixHook=this.fixHooks[type];if(!fixHook){this.fixHooks[type]=fixHook=rmouseEvent.test(type)?this.mouseHooks:rkeyEvent.test(type)?this.keyHooks:{};}copy=fixHook.props?this.props.concat(fixHook.props):this.props;event=new _jQuery2.Event(originalEvent);i=copy.length;while(i--){prop=copy[i];event[prop]=originalEvent[prop];}// Support: IE<9 // Fix target property (#1925) if(!event.target){event.target=originalEvent.srcElement||document;}// Support: Safari 6-8+ // Target should not be a text node (#504, #13143) if(event.target.nodeType===3){event.target=event.target.parentNode;}// Support: IE<9 // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) event.metaKey=!!event.metaKey;return fixHook.filter?fixHook.filter(event,originalEvent):event;},// Includes some event props shared by KeyEvent and MouseEvent props:("altKey bubbles cancelable ctrlKey currentTarget detail eventPhase "+"metaKey relatedTarget shiftKey target timeStamp view which").split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function filter(event,original){// Add which for key events if(event.which==null){event.which=original.charCode!=null?original.charCode:original.keyCode;}return event;}},mouseHooks:{props:("button buttons clientX clientY fromElement offsetX offsetY "+"pageX pageY screenX screenY toElement").split(" "),filter:function filter(event,original){var body,eventDoc,doc,button=original.button,fromElement=original.fromElement;// Calculate pageX/Y if missing and clientX/Y available if(event.pageX==null&&original.clientX!=null){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);}// Add relatedTarget, if necessary if(!event.relatedTarget&&fromElement){event.relatedTarget=fromElement===event.target?original.toElement:fromElement;}// Add which for click: 1 === left; 2 === middle; 3 === right // Note: button is not normalized, so don't use it if(!event.which&&button!==undefined){event.which=button&1?1:button&2?3:button&4?2:0;}return event;}},special:{load:{// Prevent triggered image.load events from bubbling to window.load noBubble:true},focus:{// Fire native event if possible so blur/focus sequence is correct trigger:function trigger(){if(this!==safeActiveElement()&&this.focus){try{this.focus();return false;}catch(e){// Support: IE<9 // If we error on focus to hidden element (#1486, #12518), // let .trigger() run the handlers }}},delegateType:"focusin"},blur:{trigger:function trigger(){if(this===safeActiveElement()&&this.blur){this.blur();return false;}},delegateType:"focusout"},click:{// For checkbox, fire native event so checked state will be right trigger:function trigger(){if(_jQuery2.nodeName(this,"input")&&this.type==="checkbox"&&this.click){this.click();return false;}},// For cross-browser consistency, don't fire native .click() on links _default:function _default(event){return _jQuery2.nodeName(event.target,"a");}},beforeunload:{postDispatch:function postDispatch(event){// Support: Firefox 20+ // Firefox doesn't alert if the returnValue field is not set. if(event.result!==undefined&&event.originalEvent){event.originalEvent.returnValue=event.result;}}}},// Piggyback on a donor event to simulate a different one simulate:function simulate(type,elem,event){var e=_jQuery2.extend(new _jQuery2.Event(),event,{type:type,isSimulated:true// Previously, `originalEvent: {}` was set here, so stopPropagation call // would not be triggered on donor event, since in our own // jQuery.event.stopPropagation function we had a check for existence of // originalEvent.stopPropagation method, so, consequently it would be a noop. // // Guard for simulated events was moved to jQuery.event.stopPropagation function // since `originalEvent` should point to the original event for the // constancy with other events and for more focused logic });_jQuery2.event.trigger(e,null,elem);if(e.isDefaultPrevented()){event.preventDefault();}}};_jQuery2.removeEvent=document.removeEventListener?function(elem,type,handle){// This "if" is needed for plain objects if(elem.removeEventListener){elem.removeEventListener(type,handle);}}:function(elem,type,handle){var name="on"+type;if(elem.detachEvent){// #8545, #7054, preventing memory leaks for custom events in IE6-8 // detachEvent needed property on element, by name of that event, // to properly expose it to GC if(typeof elem[name]==="undefined"){elem[name]=null;}elem.detachEvent(name,handle);}};_jQuery2.Event=function(src,props){// Allow instantiation without the 'new' keyword if(!(this instanceof _jQuery2.Event)){return new _jQuery2.Event(src,props);}// Event object if(src&&src.type){this.originalEvent=src;this.type=src.type;// Events bubbling up the document may have been marked as prevented // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented=src.defaultPrevented||src.defaultPrevented===undefined&&// Support: IE < 9, Android < 4.0 src.returnValue===false?returnTrue:returnFalse;// Event type }else{this.type=src;}// Put explicitly provided properties onto the event object if(props){_jQuery2.extend(this,props);}// Create a timestamp if incoming event doesn't have one this.timeStamp=src&&src.timeStamp||_jQuery2.now();// Mark it as fixed this[_jQuery2.expando]=true;};// 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 _jQuery2.Event.prototype={constructor:_jQuery2.Event,isDefaultPrevented:returnFalse,isPropagationStopped:returnFalse,isImmediatePropagationStopped:returnFalse,preventDefault:function preventDefault(){var e=this.originalEvent;this.isDefaultPrevented=returnTrue;if(!e){return;}// If preventDefault exists, run it on the original event if(e.preventDefault){e.preventDefault();// Support: IE // Otherwise set the returnValue property of the original event to false }else{e.returnValue=false;}},stopPropagation:function stopPropagation(){var e=this.originalEvent;this.isPropagationStopped=returnTrue;if(!e||this.isSimulated){return;}// If stopPropagation exists, run it on the original event if(e.stopPropagation){e.stopPropagation();}// Support: IE // Set the cancelBubble property of the original event to true e.cancelBubble=true;},stopImmediatePropagation:function stopImmediatePropagation(){var e=this.originalEvent;this.isImmediatePropagationStopped=returnTrue;if(e&&e.stopImmediatePropagation){e.stopImmediatePropagation();}this.stopPropagation();}};// Create mouseenter/leave events using mouseover/out and event-time checks // so that event delegation works in jQuery. // Do the same for pointerenter/pointerleave and pointerover/pointerout // // Support: Safari 7 only // Safari sends mouseenter too often; see: // https://code.google.com/p/chromium/issues/detail?id=470258 // for the description of the bug (it existed in older Chrome versions as well). _jQuery2.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(orig,fix){_jQuery2.event.special[orig]={delegateType:fix,bindType:fix,handle:function handle(event){var ret,target=this,related=event.relatedTarget,handleObj=event.handleObj;// For mouseenter/leave call the handler if related is outside the target. // NB: No relatedTarget if the mouse left/entered the browser window if(!related||related!==target&&!_jQuery2.contains(target,related)){event.type=handleObj.origType;ret=handleObj.handler.apply(this,arguments);event.type=fix;}return ret;}};});// IE submit delegation if(!support.submit){_jQuery2.event.special.submit={setup:function setup(){// Only need this for delegated form submit events if(_jQuery2.nodeName(this,"form")){return false;}// Lazy-add a submit handler when a descendant form may potentially be submitted _jQuery2.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=_jQuery2.nodeName(elem,"input")||_jQuery2.nodeName(elem,"button")?// Support: IE <=8 // We use jQuery.prop instead of elem.form // to allow fixing the IE8 delegated submit issue (gh-2332) // by 3rd party polyfills/workarounds. _jQuery2.prop(elem,"form"):undefined;if(form&&!_jQuery2._data(form,"submit")){_jQuery2.event.add(form,"submit._submit",function(event){event._submitBubble=true;});_jQuery2._data(form,"submit",true);}});// return undefined since we don't need an event listener },postDispatch:function postDispatch(event){// If form was submitted by the user, bubble the event up the tree if(event._submitBubble){delete event._submitBubble;if(this.parentNode&&!event.isTrigger){_jQuery2.event.simulate("submit",this.parentNode,event);}}},teardown:function teardown(){// Only need this for delegated form submit events if(_jQuery2.nodeName(this,"form")){return false;}// Remove delegated handlers; cleanData eventually reaps submit handlers attached above _jQuery2.event.remove(this,"._submit");}};}// IE change delegation and checkbox/radio fix if(!support.change){_jQuery2.event.special.change={setup:function setup(){if(rformElems.test(this.nodeName)){// IE doesn't fire change on a check/radio until blur; trigger it on click // after a propertychange. Eat the blur-change in special.change.handle. // This still fires onchange a second time for check/radio after blur. if(this.type==="checkbox"||this.type==="radio"){_jQuery2.event.add(this,"propertychange._change",function(event){if(event.originalEvent.propertyName==="checked"){this._justChanged=true;}});_jQuery2.event.add(this,"click._change",function(event){if(this._justChanged&&!event.isTrigger){this._justChanged=false;}// Allow triggered, simulated change events (#11500) _jQuery2.event.simulate("change",this,event);});}return false;}// Delegated event; lazy-add a change handler on descendant inputs _jQuery2.event.add(this,"beforeactivate._change",function(e){var elem=e.target;if(rformElems.test(elem.nodeName)&&!_jQuery2._data(elem,"change")){_jQuery2.event.add(elem,"change._change",function(event){if(this.parentNode&&!event.isSimulated&&!event.isTrigger){_jQuery2.event.simulate("change",this.parentNode,event);}});_jQuery2._data(elem,"change",true);}});},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||elem.type!=="radio"&&elem.type!=="checkbox"){return event.handleObj.handler.apply(this,arguments);}},teardown:function teardown(){_jQuery2.event.remove(this,"._change");return!rformElems.test(this.nodeName);}};}// Support: Firefox // Firefox doesn't have focus(in | out) events // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 // // Support: Chrome, Safari // focus(in | out) events fire after focus & blur events, // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order // Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857 if(!support.focusin){_jQuery2.each({focus:"focusin",blur:"focusout"},function(orig,fix){// Attach a single capturing handler on the document while someone wants focusin/focusout var handler=function handler(event){_jQuery2.event.simulate(fix,event.target,_jQuery2.event.fix(event));};_jQuery2.event.special[fix]={setup:function setup(){var doc=this.ownerDocument||this,attaches=_jQuery2._data(doc,fix);if(!attaches){doc.addEventListener(orig,handler,true);}_jQuery2._data(doc,fix,(attaches||0)+1);},teardown:function teardown(){var doc=this.ownerDocument||this,attaches=_jQuery2._data(doc,fix)-1;if(!attaches){doc.removeEventListener(orig,handler,true);_jQuery2._removeData(doc,fix);}else{_jQuery2._data(doc,fix,attaches);}}};});}_jQuery2.fn.extend({on:function on(types,selector,data,fn){return _on(this,types,selector,data,fn);},one:function one(types,selector,data,fn){return _on(this,types,selector,data,fn,1);},off:function off(types,selector,fn){var handleObj,type;if(types&&types.preventDefault&&types.handleObj){// ( event ) dispatched jQuery.Event handleObj=types.handleObj;_jQuery2(types.delegateTarget).off(handleObj.namespace?handleObj.origType+"."+handleObj.namespace:handleObj.origType,handleObj.selector,handleObj.handler);return this;}if(_typeof(types)==="object"){// ( types-object [, selector] ) for(type in types){this.off(type,selector,types[type]);}return this;}if(selector===false||typeof selector==="function"){// ( types [, fn] ) fn=selector;selector=undefined;}if(fn===false){fn=returnFalse;}return this.each(function(){_jQuery2.event.remove(this,types,fn,selector);});},trigger:function trigger(type,data){return this.each(function(){_jQuery2.event.trigger(type,data,this);});},triggerHandler:function triggerHandler(type,data){var elem=this[0];if(elem){return _jQuery2.event.trigger(type,data,elem,true);}}});var rinlinejQuery=/ jQuery\d+="(?:null|\d+)"/g,rnoshimcache=new RegExp("<(?:"+nodeNames+")[\\s/>]","i"),rxhtmlTag=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,// Support: IE 10-11, Edge 10240+ // In IE/Edge using regex groups here causes severe slowdowns. // See https://connect.microsoft.com/IE/feedback/details/1736512/ rnoInnerhtml=/\s*$/g,safeFragment=createSafeFragment(document),fragmentDiv=safeFragment.appendChild(document.createElement("div"));// Support: IE<8 // Manipulating tables requires a tbody function manipulationTarget(elem,content){return _jQuery2.nodeName(elem,"table")&&_jQuery2.nodeName(content.nodeType!==11?content:content.firstChild,"tr")?elem.getElementsByTagName("tbody")[0]||elem.appendChild(elem.ownerDocument.createElement("tbody")):elem;}// Replace/restore the type attribute of script elements for safe DOM manipulation function disableScript(elem){elem.type=(_jQuery2.find.attr(elem,"type")!==null)+"/"+elem.type;return elem;}function restoreScript(elem){var match=rscriptTypeMasked.exec(elem.type);if(match){elem.type=match[1];}else{elem.removeAttribute("type");}return elem;}function cloneCopyEvent(src,dest){if(dest.nodeType!==1||!_jQuery2.hasData(src)){return;}var type,i,l,oldData=_jQuery2._data(src),curData=_jQuery2._data(dest,oldData),events=oldData.events;if(events){delete curData.handle;curData.events={};for(type in events){for(i=0,l=events[type].length;i1&&typeof value==="string"&&!support.checkClone&&rchecked.test(value)){return collection.each(function(index){var self=collection.eq(index);if(isFunction){args[0]=value.call(this,index,self.html());}domManip(self,args,callback,ignored);});}if(l){fragment=buildFragment(args,collection[0].ownerDocument,false,collection,ignored);first=fragment.firstChild;if(fragment.childNodes.length===1){fragment=first;}// Require either new content or an interest in ignored elements to invoke the callback if(first||ignored){scripts=_jQuery2.map(getAll(fragment,"script"),disableScript);hasScripts=scripts.length;// Use the original fragment for the last item // instead of the first because it can end up // being emptied incorrectly in certain situations (#8070). for(;i");},clone:function clone(elem,dataAndEvents,deepDataAndEvents){var destElements,node,clone,i,srcElements,inPage=_jQuery2.contains(elem.ownerDocument,elem);if(support.html5Clone||_jQuery2.isXMLDoc(elem)||!rnoshimcache.test("<"+elem.nodeName+">")){clone=elem.cloneNode(true);// IE<=8 does not properly clone detached, unknown element nodes }else{fragmentDiv.innerHTML=elem.outerHTML;fragmentDiv.removeChild(clone=fragmentDiv.firstChild);}if((!support.noCloneEvent||!support.noCloneChecked)&&(elem.nodeType===1||elem.nodeType===11)&&!_jQuery2.isXMLDoc(elem)){// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 destElements=getAll(clone);srcElements=getAll(elem);// Fix all IE cloning issues for(i=0;(node=srcElements[i])!=null;++i){// Ensure that the destination node is not null; Fixes #9587 if(destElements[i]){fixCloneNodeIssues(node,destElements[i]);}}}// Copy the events from the original to the clone if(dataAndEvents){if(deepDataAndEvents){srcElements=srcElements||getAll(elem);destElements=destElements||getAll(clone);for(i=0;(node=srcElements[i])!=null;i++){cloneCopyEvent(node,destElements[i]);}}else{cloneCopyEvent(elem,clone);}}// Preserve script evaluation history destElements=getAll(clone,"script");if(destElements.length>0){setGlobalEval(destElements,!inPage&&getAll(elem,"script"));}destElements=srcElements=node=null;// Return the cloned set return clone;},cleanData:function cleanData(elems,/* internal */forceAcceptData){var elem,type,id,data,i=0,internalKey=_jQuery2.expando,cache=_jQuery2.cache,attributes=support.attributes,special=_jQuery2.event.special;for(;(elem=elems[i])!=null;i++){if(forceAcceptData||acceptData(elem)){id=elem[internalKey];data=id&&cache[id];if(data){if(data.events){for(type in data.events){if(special[type]){_jQuery2.event.remove(elem,type);// This is a shortcut to avoid jQuery.event.remove's overhead }else{_jQuery2.removeEvent(elem,type,data.handle);}}}// Remove cache only if it was not already removed by jQuery.event.remove if(cache[id]){delete cache[id];// Support: IE<9 // IE does not allow us to delete expando properties from nodes // IE creates expando attributes along with the property // IE does not have a removeAttribute function on Document nodes if(!attributes&&typeof elem.removeAttribute!=="undefined"){elem.removeAttribute(internalKey);// Webkit & Blink performance suffers when deleting properties // from DOM nodes, so set to undefined instead // https://code.google.com/p/chromium/issues/detail?id=378607 }else{elem[internalKey]=undefined;}deletedIds.push(id);}}}}}});_jQuery2.fn.extend({// Keep domManip exposed until 3.0 (gh-2225) domManip:domManip,detach:function detach(selector){return _remove(this,selector,true);},remove:function remove(selector){return _remove(this,selector);},text:function text(value){return _access(this,function(value){return value===undefined?_jQuery2.text(this):this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(value));},null,value,arguments.length);},append:function append(){return domManip(this,arguments,function(elem){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var target=manipulationTarget(this,elem);target.appendChild(elem);}});},prepend:function prepend(){return domManip(this,arguments,function(elem){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var target=manipulationTarget(this,elem);target.insertBefore(elem,target.firstChild);}});},before:function before(){return domManip(this,arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this);}});},after:function after(){return domManip(this,arguments,function(elem){if(this.parentNode){this.parentNode.insertBefore(elem,this.nextSibling);}});},empty:function empty(){var elem,i=0;for(;(elem=this[i])!=null;i++){// Remove element nodes and prevent memory leaks if(elem.nodeType===1){_jQuery2.cleanData(getAll(elem,false));}// Remove any remaining nodes while(elem.firstChild){elem.removeChild(elem.firstChild);}// If this is a select, ensure that it displays empty (#12336) // Support: IE<9 if(elem.options&&_jQuery2.nodeName(elem,"select")){elem.options.length=0;}}return this;},clone:function clone(dataAndEvents,deepDataAndEvents){dataAndEvents=dataAndEvents==null?false:dataAndEvents;deepDataAndEvents=deepDataAndEvents==null?dataAndEvents:deepDataAndEvents;return this.map(function(){return _jQuery2.clone(this,dataAndEvents,deepDataAndEvents);});},html:function html(value){return _access(this,function(value){var elem=this[0]||{},i=0,l=this.length;if(value===undefined){return elem.nodeType===1?elem.innerHTML.replace(rinlinejQuery,""):undefined;}// See if we can take a shortcut and just use innerHTML if(typeof value==="string"&&!rnoInnerhtml.test(value)&&(support.htmlSerialize||!rnoshimcache.test(value))&&(support.leadingWhitespace||!rleadingWhitespace.test(value))&&!wrapMap[(rtagName.exec(value)||["",""])[1].toLowerCase()]){value=_jQuery2.htmlPrefilter(value);try{for(;i")).appendTo(doc.documentElement);// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse doc=(iframe[0].contentWindow||iframe[0].contentDocument).document;// Support: IE doc.write();doc.close();display=actualDisplay(nodeName,doc);iframe.detach();}// Store the correct default display elemdisplay[nodeName]=display;}return display;}var rmargin=/^margin/;var rnumnonpx=new RegExp("^("+pnum+")(?!px)[a-z%]+$","i");var swap=function swap(elem,options,callback,args){var ret,name,old={};// Remember the old values, and insert the new ones for(name in options){old[name]=elem.style[name];elem.style[name]=options[name];}ret=callback.apply(elem,args||[]);// Revert the old values for(name in options){elem.style[name]=old[name];}return ret;};var documentElement=document.documentElement;(function(){var pixelPositionVal,pixelMarginRightVal,boxSizingReliableVal,reliableHiddenOffsetsVal,reliableMarginRightVal,reliableMarginLeftVal,container=document.createElement("div"),div=document.createElement("div");// Finish early in limited (non-browser) environments if(!div.style){return;}div.style.cssText="float:left;opacity:.5";// Support: IE<9 // Make sure that element opacity exists (as opposed to filter) support.opacity=div.style.opacity==="0.5";// Verify style float existence // (IE uses styleFloat instead of cssFloat) support.cssFloat=!!div.style.cssFloat;div.style.backgroundClip="content-box";div.cloneNode(true).style.backgroundClip="";support.clearCloneStyle=div.style.backgroundClip==="content-box";container=document.createElement("div");container.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;"+"padding:0;margin-top:1px;position:absolute";div.innerHTML="";container.appendChild(div);// Support: Firefox<29, Android 2.3 // Vendor-prefix box-sizing support.boxSizing=div.style.boxSizing===""||div.style.MozBoxSizing===""||div.style.WebkitBoxSizing==="";_jQuery2.extend(support,{reliableHiddenOffsets:function reliableHiddenOffsets(){if(pixelPositionVal==null){computeStyleTests();}return reliableHiddenOffsetsVal;},boxSizingReliable:function boxSizingReliable(){// We're checking for pixelPositionVal here instead of boxSizingReliableVal // since that compresses better and they're computed together anyway. if(pixelPositionVal==null){computeStyleTests();}return boxSizingReliableVal;},pixelMarginRight:function pixelMarginRight(){// Support: Android 4.0-4.3 if(pixelPositionVal==null){computeStyleTests();}return pixelMarginRightVal;},pixelPosition:function pixelPosition(){if(pixelPositionVal==null){computeStyleTests();}return pixelPositionVal;},reliableMarginRight:function reliableMarginRight(){// Support: Android 2.3 if(pixelPositionVal==null){computeStyleTests();}return reliableMarginRightVal;},reliableMarginLeft:function reliableMarginLeft(){// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37 if(pixelPositionVal==null){computeStyleTests();}return reliableMarginLeftVal;}});function computeStyleTests(){var contents,divStyle,documentElement=document.documentElement;// Setup documentElement.appendChild(container);div.style.cssText=// Support: Android 2.3 // Vendor-prefix box-sizing "-webkit-box-sizing:border-box;box-sizing:border-box;"+"position:relative;display:block;"+"margin:auto;border:1px;padding:1px;"+"top:1%;width:50%";// Support: IE<9 // Assume reasonable values in the absence of getComputedStyle pixelPositionVal=boxSizingReliableVal=reliableMarginLeftVal=false;pixelMarginRightVal=reliableMarginRightVal=true;// Check for getComputedStyle so that this code is not run in IE<9. if(window.getComputedStyle){divStyle=window.getComputedStyle(div);pixelPositionVal=(divStyle||{}).top!=="1%";reliableMarginLeftVal=(divStyle||{}).marginLeft==="2px";boxSizingReliableVal=(divStyle||{width:"4px"}).width==="4px";// Support: Android 4.0 - 4.3 only // Some styles come back with percentage values, even though they shouldn't div.style.marginRight="50%";pixelMarginRightVal=(divStyle||{marginRight:"4px"}).marginRight==="4px";// Support: Android 2.3 only // Div with explicit width and no margin-right incorrectly // gets computed margin-right based on width of container (#3333) // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right contents=div.appendChild(document.createElement("div"));// Reset CSS: box-sizing; display; margin; border; padding contents.style.cssText=div.style.cssText=// Support: Android 2.3 // Vendor-prefix box-sizing "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;"+"box-sizing:content-box;display:block;margin:0;border:0;padding:0";contents.style.marginRight=contents.style.width="0";div.style.width="1px";reliableMarginRightVal=!parseFloat((window.getComputedStyle(contents)||{}).marginRight);div.removeChild(contents);}// Support: IE6-8 // First check that getClientRects works as expected // 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). div.style.display="none";reliableHiddenOffsetsVal=div.getClientRects().length===0;if(reliableHiddenOffsetsVal){div.style.display="";div.innerHTML="
t
";div.childNodes[0].style.borderCollapse="separate";contents=div.getElementsByTagName("td");contents[0].style.cssText="margin:0;border:0;padding:0;display:none";reliableHiddenOffsetsVal=contents[0].offsetHeight===0;if(reliableHiddenOffsetsVal){contents[0].style.display="";contents[1].style.display="none";reliableHiddenOffsetsVal=contents[0].offsetHeight===0;}}// Teardown documentElement.removeChild(container);}})();var getStyles,curCSS,rposition=/^(top|right|bottom|left)$/;if(window.getComputedStyle){getStyles=function getStyles(elem){// Support: IE<=11+, Firefox<=30+ (#15098, #14150) // IE throws on elements created in popups // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" var view=elem.ownerDocument.defaultView;if(!view||!view.opener){view=window;}return view.getComputedStyle(elem);};curCSS=function curCSS(elem,name,computed){var width,minWidth,maxWidth,ret,style=elem.style;computed=computed||getStyles(elem);// getPropertyValue is only needed for .css('filter') in IE9, see #12537 ret=computed?computed.getPropertyValue(name)||computed[name]:undefined;// Support: Opera 12.1x only // Fall back to style even without computed // computed is undefined for elems on document fragments if((ret===""||ret===undefined)&&!_jQuery2.contains(elem.ownerDocument,elem)){ret=_jQuery2.style(elem,name);}if(computed){// A tribute to the "awesome hack by Dean Edwards" // Chrome < 17 and Safari 5.0 uses "computed value" // instead of "used value" for margin-right // Safari 5.1.7 (at least) returns percentage for a larger set of values, // but width seems to be reliably pixels // this is against the CSSOM draft spec: // http://dev.w3.org/csswg/cssom/#resolved-values if(!support.pixelMarginRight()&&rnumnonpx.test(ret)&&rmargin.test(name)){// Remember the original values width=style.width;minWidth=style.minWidth;maxWidth=style.maxWidth;// Put in the new values to get a computed value out style.minWidth=style.maxWidth=style.width=ret;ret=computed.width;// Revert the changed values style.width=width;style.minWidth=minWidth;style.maxWidth=maxWidth;}}// Support: IE // IE returns zIndex value as an integer. return ret===undefined?ret:ret+"";};}else if(documentElement.currentStyle){getStyles=function getStyles(elem){return elem.currentStyle;};curCSS=function curCSS(elem,name,computed){var left,rs,rsLeft,ret,style=elem.style;computed=computed||getStyles(elem);ret=computed?computed[name]:undefined;// Avoid setting ret to empty string here // so we don't default to auto if(ret==null&&style&&style[name]){ret=style[name];}// From the awesome hack by Dean Edwards // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 // If we're not dealing with a regular pixel number // but a number that has a weird ending, we need to convert it to pixels // but not position css attributes, as those are // proportional to the parent element instead // and we can't measure the parent instead because it // might trigger a "stacking dolls" problem if(rnumnonpx.test(ret)&&!rposition.test(name)){// Remember the original values left=style.left;rs=elem.runtimeStyle;rsLeft=rs&&rs.left;// Put in the new values to get a computed value out if(rsLeft){rs.left=elem.currentStyle.left;}style.left=name==="fontSize"?"1em":ret;ret=style.pixelLeft+"px";// Revert the changed values style.left=left;if(rsLeft){rs.left=rsLeft;}}// Support: IE // IE returns zIndex value as an integer. return ret===undefined?ret:ret+""||"auto";};}function addGetHookIf(conditionFn,hookFn){// Define the hook, we'll check on the first run if it's really needed. return{get:function get(){if(conditionFn()){// Hook not needed (or it's not possible to use it due // to missing dependency), remove it. delete this.get;return;}// Hook needed; redefine it so that the support test is not executed again. return(this.get=hookFn).apply(this,arguments);}};}var ralpha=/alpha\([^)]*\)/i,ropacity=/opacity\s*=\s*([^)]*)/i,// swappable if display is none or starts with table except // "table", "table-cell", or "table-caption" // see here for display values: // https://developer.mozilla.org/en-US/docs/CSS/display rdisplayswap=/^(none|table(?!-c[ea]).+)/,rnumsplit=new RegExp("^("+pnum+")(.*)$","i"),cssShow={position:"absolute",visibility:"hidden",display:"block"},cssNormalTransform={letterSpacing:"0",fontWeight:"400"},cssPrefixes=["Webkit","O","Moz","ms"],emptyStyle=document.createElement("div").style;// return a css property mapped to a potentially vendor prefixed property function vendorPropName(name){// shortcut for names that are not vendor prefixed if(name in emptyStyle){return name;}// check for vendor prefixed names var capName=name.charAt(0).toUpperCase()+name.slice(1),i=cssPrefixes.length;while(i--){name=cssPrefixes[i]+capName;if(name in emptyStyle){return name;}}}function showHide(elements,show){var display,elem,hidden,values=[],index=0,length=elements.length;for(;index