2016-04-27 17:21:12 +05:00
//For source code and license information please check https://github.com/majestrate/nntpchan
2016-04-30 18:58:21 +05:00
2016-05-03 23:58:57 +05:00
/* local file: ./contrib/js/contrib/jquery.js */
/ * ! * j Q u e r y J a v a S c r i p t L i b r a r y v 2 . 2 . 3
* 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 - 04 - 05 T19 : 26 Z * / ( f u n c t i o n ( g l o b a l , f a c t o r y ) { i f ( t y p e o f m o d u l e = = = " o b j e c t " & & t y p e o f m o d u l e . e x p o r t s = = = " o b j e c t " ) { m o d u l e . e x p o r t s = g l o b a l . d o c u m e n t ? f a c t o r y ( g l o b a l , t r u e ) : f u n c t i o n ( w ) { i f ( ! w . d o c u m e n t ) { t h r o w n e w E r r o r ( " j Q u e r y r e q u i r e s a w i n d o w w i t h a d o c u m e n t " ) ; }
return factory ( w ) ; } ; } else { factory ( global ) ; } } ( typeof window !== "undefined" ? window : this , function ( window , noGlobal ) { var arr = [ ] ; var document = window . document ; var slice = arr . slice ; var concat = arr . concat ; var push = arr . push ; var indexOf = arr . indexOf ; var class2type = { } ; var toString = class2type . toString ; var hasOwn = class2type . hasOwnProperty ; var support = { } ; var
version = "2.2.3" , jQuery = function ( selector , context ) { return new jQuery . fn . init ( selector , context ) ; } , rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g , rmsPrefix = /^-ms-/ , rdashAlpha = /-([\da-z])/gi , fcamelCase = function ( all , letter ) { return letter . toUpperCase ( ) ; } ; jQuery . fn = jQuery . prototype = { jquery : version , constructor : jQuery , selector : "" , length : 0 , toArray : function ( ) { return slice . call ( this ) ; } , get : function ( num ) { return num != null ? ( num < 0 ? this [ num + this . length ] : this [ num ] ) : slice . call ( this ) ; } , pushStack : function ( elems ) { var ret = jQuery . merge ( this . constructor ( ) , elems ) ; ret . prevObject = this ; ret . context = this . context ; return ret ; } , each : function ( callback ) { return jQuery . each ( this , callback ) ; } , map : function ( callback ) { return this . pushStack ( jQuery . map ( this , function ( elem , i ) { return callback . call ( elem , i , elem ) ; } ) ) ; } , slice : function ( ) { return this . pushStack ( slice . apply ( this , arguments ) ) ; } , first : function ( ) { return this . eq ( 0 ) ; } , last : function ( ) { return this . eq ( - 1 ) ; } , eq : function ( i ) { var len = this . length , j = + i + ( i < 0 ? len : 0 ) ; return this . pushStack ( j >= 0 && j < len ? [ this [ j ] ] : [ ] ) ; } , end : function ( ) { return this . prevObject || this . constructor ( ) ; } , push : push , sort : arr . sort , splice : arr . splice } ; jQuery . extend = jQuery . fn . extend = function ( ) { var options , name , src , copy , copyIsArray , clone , target = arguments [ 0 ] || { } , i = 1 , length = arguments . length , deep = false ; if ( typeof target === "boolean" ) { deep = target ; target = arguments [ i ] || { } ; i ++ ; }
if ( typeof target !== "object" && ! jQuery . isFunction ( target ) ) { target = { } ; }
if ( i === length ) { target = this ; i -- ; }
for ( ; i < length ; i ++ ) { if ( ( options = arguments [ i ] ) != null ) { for ( name in options ) { src = target [ name ] ; copy = options [ name ] ; if ( target === copy ) { continue ; }
if ( deep && copy && ( jQuery . isPlainObject ( copy ) || ( copyIsArray = jQuery . isArray ( copy ) ) ) ) { if ( copyIsArray ) { copyIsArray = false ; clone = src && jQuery . isArray ( src ) ? src : [ ] ; } else { clone = src && jQuery . isPlainObject ( src ) ? src : { } ; }
target [ name ] = jQuery . extend ( deep , clone , copy ) ; } else if ( copy !== undefined ) { target [ name ] = copy ; } } } }
return target ; } ; jQuery . extend ( { expando : "jQuery" + ( version + Math . random ( ) ) . replace ( /\D/g , "" ) , isReady : true , error : function ( msg ) { throw new Error ( msg ) ; } , noop : function ( ) { } , isFunction : function ( obj ) { return jQuery . type ( obj ) === "function" ; } , isArray : Array . isArray , isWindow : function ( obj ) { return obj != null && obj === obj . window ; } , isNumeric : function ( obj ) { var realStringObj = obj && obj . toString ( ) ; return ! jQuery . isArray ( obj ) && ( realStringObj - parseFloat ( realStringObj ) + 1 ) >= 0 ; } , isPlainObject : function ( obj ) { var key ; if ( jQuery . type ( obj ) !== "object" || obj . nodeType || jQuery . isWindow ( obj ) ) { return false ; }
if ( obj . constructor && ! hasOwn . call ( obj , "constructor" ) && ! hasOwn . call ( obj . constructor . prototype || { } , "isPrototypeOf" ) ) { return false ; }
for ( key in obj ) { }
return key === undefined || hasOwn . call ( obj , key ) ; } , isEmptyObject : function ( obj ) { var name ; for ( name in obj ) { return false ; }
return true ; } , type : function ( obj ) { if ( obj == null ) { return obj + "" ; }
return typeof obj === "object" || typeof obj === "function" ? class2type [ toString . call ( obj ) ] || "object" : typeof obj ; } , globalEval : function ( code ) { var script , indirect = eval ; code = jQuery . trim ( code ) ; if ( code ) { if ( code . indexOf ( "use strict" ) === 1 ) { script = document . createElement ( "script" ) ; script . text = code ; document . head . appendChild ( script ) . parentNode . removeChild ( script ) ; } else { indirect ( code ) ; } } } , camelCase : function ( string ) { return string . replace ( rmsPrefix , "ms-" ) . replace ( rdashAlpha , fcamelCase ) ; } , nodeName : function ( elem , name ) { return elem . nodeName && elem . nodeName . toLowerCase ( ) === name . toLowerCase ( ) ; } , each : function ( obj , callback ) { var length , i = 0 ; if ( isArrayLike ( obj ) ) { length = obj . length ; for ( ; i < length ; i ++ ) { if ( callback . call ( obj [ i ] , i , obj [ i ] ) === false ) { break ; } } } else { for ( i in obj ) { if ( callback . call ( obj [ i ] , i , obj [ i ] ) === false ) { break ; } } }
return obj ; } , trim : function ( text ) { return text == null ? "" : ( text + "" ) . replace ( rtrim , "" ) ; } , makeArray : function ( arr , results ) { var ret = results || [ ] ; if ( arr != null ) { if ( isArrayLike ( Object ( arr ) ) ) { jQuery . merge ( ret , typeof arr === "string" ? [ arr ] : arr ) ; } else { push . call ( ret , arr ) ; } }
return ret ; } , inArray : function ( elem , arr , i ) { return arr == null ? - 1 : indexOf . call ( arr , elem , i ) ; } , merge : function ( first , second ) { var len = + second . length , j = 0 , i = first . length ; for ( ; j < len ; j ++ ) { first [ i ++ ] = second [ j ] ; }
first . length = i ; return first ; } , grep : function ( elems , callback , invert ) { var callbackInverse , matches = [ ] , i = 0 , length = elems . length , callbackExpect = ! invert ; for ( ; i < length ; i ++ ) { callbackInverse = ! callback ( elems [ i ] , i ) ; if ( callbackInverse !== callbackExpect ) { matches . push ( elems [ i ] ) ; } }
return matches ; } , map : function ( elems , callback , arg ) { var length , value , i = 0 , ret = [ ] ; if ( isArrayLike ( elems ) ) { length = elems . length ; for ( ; i < length ; i ++ ) { value = callback ( elems [ i ] , i , arg ) ; if ( value != null ) { ret . push ( value ) ; } } } else { for ( i in elems ) { value = callback ( elems [ i ] , i , arg ) ; if ( value != null ) { ret . push ( value ) ; } } }
return concat . apply ( [ ] , ret ) ; } , guid : 1 , proxy : function ( fn , context ) { var tmp , args , proxy ; if ( typeof context === "string" ) { tmp = fn [ context ] ; context = fn ; fn = tmp ; }
if ( ! jQuery . isFunction ( fn ) ) { return undefined ; }
args = slice . call ( arguments , 2 ) ; proxy = function ( ) { return fn . apply ( context || this , args . concat ( slice . call ( arguments ) ) ) ; } ; proxy . guid = fn . guid = fn . guid || jQuery . guid ++ ; return proxy ; } , now : Date . now , support : support } ) ; if ( typeof Symbol === "function" ) { jQuery . fn [ Symbol . iterator ] = arr [ Symbol . iterator ] ; }
jQuery . each ( "Boolean Number String Function Array Date RegExp Object Error Symbol" . split ( " " ) , function ( i , name ) { class2type [ "[object " + name + "]" ] = name . toLowerCase ( ) ; } ) ; function isArrayLike ( obj ) { var length = ! ! obj && "length" in obj && obj . length , type = jQuery . type ( obj ) ; if ( type === "function" || jQuery . isWindow ( obj ) ) { return false ; }
return type === "array" || length === 0 || typeof length === "number" && length > 0 && ( length - 1 ) in obj ; }
var Sizzle = / * ! * S i z z l e C S S S e l e c t o r E n g i n e v 2 . 2 . 1
* http : //sizzlejs.com/
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license
* http : //jquery.org/license
*
* Date : 2015 - 10 - 17 * / ( f u n c t i o n ( w i n d o w ) { v a r i , s u p p o r t , E x p r , g e t T e x t , i s X M L , t o k e n i z e , c o m p i l e , s e l e c t , o u t e r m o s t C o n t e x t , s o r t I n p u t , h a s D u p l i c a t e , s e t D o c u m e n t , d o c u m e n t , d o c E l e m , d o c u m e n t I s H T M L , r b u g g y Q S A , r b u g g y M a t c h e s , m a t c h e s , c o n t a i n s , e x p a n d o = " s i z z l e " + 1 * n e w D a t e ( ) , p r e f e r r e d D o c = w i n d o w . d o c u m e n t , d i r r u n s = 0 , d o n e = 0 , c l a s s C a c h e = c r e a t e C a c h e ( ) , t o k e n C a c h e = c r e a t e C a c h e ( ) , c o m p i l e r C a c h e = c r e a t e C a c h e ( ) , s o r t O r d e r = f u n c t i o n ( a , b ) { i f ( a = = = b ) { h a s D u p l i c a t e = t r u e ; }
return 0 ; } , MAX _NEGATIVE = 1 << 31 , hasOwn = ( { } ) . hasOwnProperty , arr = [ ] , pop = arr . pop , push _native = arr . push , push = arr . push , slice = arr . slice , indexOf = function ( list , elem ) { var i = 0 , len = list . length ; for ( ; i < len ; i ++ ) { if ( list [ i ] === elem ) { return i ; } }
return - 1 ; } , booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped" , whitespace = "[\\x20\\t\\r\\n\\f]" , identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+" , attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + "*([*^$|!~]?=)" + whitespace + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]" , pseudos = ":(" + identifier + ")(?:\\((" + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + ".*" + ")\\)|)" , rwhitespace = new RegExp ( whitespace + "+" , "g" ) , rtrim = new RegExp ( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$" , "g" ) , rcomma = new RegExp ( "^" + whitespace + "*," + whitespace + "*" ) , rcombinators = new RegExp ( "^" + whitespace + "*([>+~]|" + 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" ) , "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/ , rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/ , rsibling = /[+~]/ , rescape = /'|\\/g , runescape = new RegExp ( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)" , "ig" ) , funescape = function ( _ , escaped , escapedWhitespace ) { var high = "0x" + escaped - 0x10000 ; return high !== high || escapedWhitespace ? escaped : high < 0 ? String . fromCharCode ( high + 0x10000 ) : String . fromCharCode ( high >> 10 | 0xD800 , high & 0x3FF | 0xDC00 ) ; } , unloadHandler = function ( ) { setDocument ( ) ; } ; try { push . apply ( ( arr = slice . call ( preferredDoc . childNodes ) ) , preferredDoc . childNodes ) ; arr [ preferredDoc . childNodes . length ] . nodeType ; } catch ( e ) { push = { apply : arr . length ? function ( target , els ) { push _native . apply ( target , slice . call ( els ) ) ; } : function ( target , els ) { var j = target . length , i = 0 ; 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 = context ? context . nodeType : 9 ; results = results || [ ] ; if ( typeof selector !== "string" || ! selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { return results ; }
if ( ! seed ) { if ( ( context ? context . ownerDocument || context : preferredDoc ) !== document ) { setDocument ( context ) ; }
context = context || document ; if ( documentIsHTML ) { if ( nodeType !== 11 && ( match = rquickExpr . exec ( selector ) ) ) { if ( ( m = match [ 1 ] ) ) { if ( nodeType === 9 ) { if ( ( elem = context . getElementById ( m ) ) ) { if ( elem . id === m ) { results . push ( elem ) ; return results ; } } else { return results ; } } else { if ( newContext && ( elem = newContext . getElementById ( m ) ) && contains ( context , elem ) && elem . id === m ) { results . push ( elem ) ; return results ; } } } else if ( match [ 2 ] ) { push . apply ( results , context . getElementsByTagName ( selector ) ) ; return results ; } else if ( ( m = match [ 3 ] ) && support . getElementsByClassName && context . getElementsByClassName ) { push . apply ( results , context . getElementsByClassName ( m ) ) ; return results ; } }
if ( support . qsa && ! compilerCache [ selector + " " ] && ( ! rbuggyQSA || ! rbuggyQSA . test ( selector ) ) ) { if ( nodeType !== 1 ) { newContext = context ; newSelector = selector ; } else if ( context . nodeName . toLowerCase ( ) !== "object" ) { if ( ( nid = context . getAttribute ( "id" ) ) ) { nid = nid . replace ( rescape , "\\$&" ) ; } else { context . setAttribute ( "id" , ( nid = expando ) ) ; }
groups = tokenize ( selector ) ; i = groups . length ; nidselect = ridentifier . test ( nid ) ? "#" + nid : "[id='" + nid + "']" ; while ( i -- ) { groups [ i ] = nidselect + " " + toSelector ( groups [ i ] ) ; }
newSelector = groups . join ( "," ) ; 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" ) ; } } } } } }
return select ( selector . replace ( rtrim , "$1" ) , context , results , seed ) ; }
function createCache ( ) { var keys = [ ] ; function cache ( key , value ) { if ( keys . push ( key + " " ) > Expr . cacheLength ) { delete cache [ keys . shift ( ) ] ; }
return ( cache [ key + " " ] = value ) ; }
return cache ; }
function markFunction ( fn ) { fn [ expando ] = true ; return fn ; }
function assert ( fn ) { var div = document . createElement ( "div" ) ; try { return ! ! fn ( div ) ; } catch ( e ) { return false ; } finally { if ( div . parentNode ) { div . parentNode . removeChild ( div ) ; }
div = null ; } }
function addHandle ( attrs , handler ) { var arr = attrs . split ( "|" ) , i = arr . length ; while ( i -- ) { Expr . attrHandle [ arr [ i ] ] = handler ; } }
function siblingCheck ( a , b ) { var cur = b && a , diff = cur && a . nodeType === 1 && b . nodeType === 1 && ( ~ b . sourceIndex || MAX _NEGATIVE ) -
( ~ a . sourceIndex || MAX _NEGATIVE ) ; if ( diff ) { return diff ; }
if ( cur ) { while ( ( cur = cur . nextSibling ) ) { if ( cur === b ) { return - 1 ; } } }
return a ? 1 : - 1 ; }
function createInputPseudo ( type ) { return function ( elem ) { var name = elem . nodeName . toLowerCase ( ) ; return name === "input" && elem . type === type ; } ; }
function createButtonPseudo ( type ) { return function ( elem ) { var name = elem . nodeName . toLowerCase ( ) ; return ( name === "input" || name === "button" ) && elem . type === type ; } ; }
function createPositionalPseudo ( fn ) { return markFunction ( function ( argument ) { argument = + argument ; return markFunction ( function ( seed , matches ) { var j , matchIndexes = fn ( [ ] , seed . length , argument ) , i = matchIndexes . length ; while ( i -- ) { if ( seed [ ( j = matchIndexes [ i ] ) ] ) { seed [ j ] = ! ( matches [ j ] = seed [ j ] ) ; } } } ) ; } ) ; }
function testContext ( context ) { return context && typeof context . getElementsByTagName !== "undefined" && context ; }
support = Sizzle . support = { } ; isXML = Sizzle . isXML = function ( elem ) { var documentElement = elem && ( elem . ownerDocument || elem ) . documentElement ; return documentElement ? documentElement . nodeName !== "HTML" : false ; } ; setDocument = Sizzle . setDocument = function ( node ) { var hasCompare , parent , doc = node ? node . ownerDocument || node : preferredDoc ; if ( doc === document || doc . nodeType !== 9 || ! doc . documentElement ) { return document ; }
document = doc ; docElem = document . documentElement ; documentIsHTML = ! isXML ( document ) ; if ( ( parent = document . defaultView ) && parent . top !== parent ) { if ( parent . addEventListener ) { parent . addEventListener ( "unload" , unloadHandler , false ) ; } else if ( parent . attachEvent ) { parent . attachEvent ( "onunload" , unloadHandler ) ; } }
support . attributes = assert ( function ( div ) { div . className = "i" ; return ! div . getAttribute ( "className" ) ; } ) ; support . getElementsByTagName = assert ( function ( div ) { div . appendChild ( document . createComment ( "" ) ) ; return ! div . getElementsByTagName ( "*" ) . length ; } ) ; support . getElementsByClassName = rnative . test ( document . getElementsByClassName ) ; support . getById = assert ( function ( div ) { docElem . appendChild ( div ) . id = expando ; return ! document . getElementsByName || ! document . getElementsByName ( expando ) . length ; } ) ; 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 { 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 ; } ; } ; }
Expr . find [ "TAG" ] = support . getElementsByTagName ? function ( tag , context ) { if ( typeof context . getElementsByTagName !== "undefined" ) { return context . getElementsByTagName ( tag ) ; } else if ( support . qsa ) { return context . querySelectorAll ( tag ) ; } } : function ( tag , context ) { var elem , tmp = [ ] , i = 0 , results = context . getElementsByTagName ( tag ) ; if ( tag === "*" ) { while ( ( elem = results [ i ++ ] ) ) { if ( elem . nodeType === 1 ) { tmp . push ( elem ) ; } }
return tmp ; }
return results ; } ; Expr . find [ "CLASS" ] = support . getElementsByClassName && function ( className , context ) { if ( typeof context . getElementsByClassName !== "undefined" && documentIsHTML ) { return context . getElementsByClassName ( className ) ; } } ; rbuggyMatches = [ ] ; rbuggyQSA = [ ] ; if ( ( support . qsa = rnative . test ( document . querySelectorAll ) ) ) { assert ( function ( div ) { docElem . appendChild ( div ) . innerHTML = "<a id='" + expando + "'></a>" + "<select id='" + expando + "-\r\\' msallowcapture=''>" + "<option selected=''></option></select>" ; if ( div . querySelectorAll ( "[msallowcapture^='']" ) . length ) { rbuggyQSA . push ( "[*^$]=" + whitespace + "*(?:''|\"\")" ) ; }
if ( ! div . querySelectorAll ( "[selected]" ) . length ) { rbuggyQSA . push ( "\\[" + whitespace + "*(?:value|" + booleans + ")" ) ; }
if ( ! div . querySelectorAll ( "[id~=" + expando + "-]" ) . length ) { rbuggyQSA . push ( "~=" ) ; }
if ( ! div . querySelectorAll ( ":checked" ) . length ) { rbuggyQSA . push ( ":checked" ) ; }
if ( ! div . querySelectorAll ( "a#" + expando + "+*" ) . length ) { rbuggyQSA . push ( ".#.+[+~]" ) ; } } ) ; assert ( function ( div ) { var input = document . createElement ( "input" ) ; input . setAttribute ( "type" , "hidden" ) ; div . appendChild ( input ) . setAttribute ( "name" , "D" ) ; if ( div . querySelectorAll ( "[name=d]" ) . length ) { rbuggyQSA . push ( "name" + whitespace + "*[*^$|!~]?=" ) ; }
if ( ! div . querySelectorAll ( ":enabled" ) . length ) { rbuggyQSA . push ( ":enabled" , ":disabled" ) ; }
div . querySelectorAll ( "*,:x" ) ; rbuggyQSA . push ( ",.*:" ) ; } ) ; }
if ( ( support . matchesSelector = rnative . test ( ( matches = docElem . matches || docElem . webkitMatchesSelector || docElem . mozMatchesSelector || docElem . oMatchesSelector || docElem . msMatchesSelector ) ) ) ) { assert ( function ( div ) { support . disconnectedMatch = matches . call ( div , "div" ) ; matches . call ( div , "[s!='']:x" ) ; rbuggyMatches . push ( "!=" , pseudos ) ; } ) ; }
rbuggyQSA = rbuggyQSA . length && new RegExp ( rbuggyQSA . join ( "|" ) ) ; rbuggyMatches = rbuggyMatches . length && new RegExp ( rbuggyMatches . join ( "|" ) ) ; hasCompare = rnative . test ( docElem . compareDocumentPosition ) ; 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 ; } ; sortOrder = hasCompare ? function ( a , b ) { if ( a === b ) { hasDuplicate = true ; return 0 ; }
var compare = ! a . compareDocumentPosition - ! b . compareDocumentPosition ; if ( compare ) { return compare ; }
compare = ( a . ownerDocument || a ) === ( b . ownerDocument || b ) ? a . compareDocumentPosition ( b ) : 1 ; if ( compare & 1 || ( ! support . sortDetached && b . compareDocumentPosition ( a ) === compare ) ) { if ( a === document || a . ownerDocument === preferredDoc && contains ( preferredDoc , a ) ) { return - 1 ; }
if ( b === document || b . ownerDocument === preferredDoc && contains ( preferredDoc , b ) ) { return 1 ; }
return sortInput ? ( indexOf ( sortInput , a ) - indexOf ( sortInput , b ) ) : 0 ; }
return compare & 4 ? - 1 : 1 ; } : function ( a , b ) { if ( a === b ) { hasDuplicate = true ; return 0 ; }
var cur , i = 0 , aup = a . parentNode , bup = b . parentNode , ap = [ a ] , bp = [ b ] ; if ( ! aup || ! bup ) { return a === document ? - 1 : b === document ? 1 : aup ? - 1 : bup ? 1 : sortInput ? ( indexOf ( sortInput , a ) - indexOf ( sortInput , b ) ) : 0 ; } else if ( aup === bup ) { return siblingCheck ( a , b ) ; }
cur = a ; while ( ( cur = cur . parentNode ) ) { ap . unshift ( cur ) ; }
cur = b ; while ( ( cur = cur . parentNode ) ) { bp . unshift ( cur ) ; }
while ( ap [ i ] === bp [ i ] ) { i ++ ; }
return i ? siblingCheck ( ap [ i ] , bp [ i ] ) : 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 ) { if ( ( elem . ownerDocument || elem ) !== document ) { setDocument ( elem ) ; }
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 ) ; if ( ret || support . disconnectedMatch || elem . document && elem . document . nodeType !== 11 ) { return ret ; } } catch ( e ) { } }
return Sizzle ( expr , document , null , [ elem ] ) . length > 0 ; } ; Sizzle . contains = function ( context , elem ) { if ( ( context . ownerDocument || context ) !== document ) { setDocument ( context ) ; }
return contains ( context , elem ) ; } ; Sizzle . attr = function ( elem , name ) { if ( ( elem . ownerDocument || elem ) !== document ) { setDocument ( elem ) ; }
var fn = Expr . attrHandle [ name . toLowerCase ( ) ] , 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 ) ; } ; Sizzle . uniqueSort = function ( results ) { var elem , duplicates = [ ] , j = 0 , i = 0 ; 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 ) ; } }
sortInput = null ; return results ; } ; getText = Sizzle . getText = function ( elem ) { var node , ret = "" , i = 0 , nodeType = elem . nodeType ; if ( ! nodeType ) { while ( ( node = elem [ i ++ ] ) ) { ret += getText ( node ) ; } } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { if ( typeof elem . textContent === "string" ) { return elem . textContent ; } else { for ( elem = elem . firstChild ; elem ; elem = elem . nextSibling ) { ret += getText ( elem ) ; } } } else if ( nodeType === 3 || nodeType === 4 ) { return elem . nodeValue ; }
return ret ; } ; Expr = Sizzle . selectors = { cacheLength : 50 , createPseudo : markFunction , match : matchExpr , attrHandle : { } , find : { } , relative : { ">" : { dir : "parentNode" , first : true } , " " : { dir : "parentNode" } , "+" : { dir : "previousSibling" , first : true } , "~" : { dir : "previousSibling" } } , preFilter : { "ATTR" : function ( match ) { match [ 1 ] = match [ 1 ] . replace ( runescape , funescape ) ; 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 ( match ) { match [ 1 ] = match [ 1 ] . toLowerCase ( ) ; if ( match [ 1 ] . slice ( 0 , 3 ) === "nth" ) { if ( ! match [ 3 ] ) { Sizzle . error ( match [ 0 ] ) ; }
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" ) ; } else if ( match [ 3 ] ) { Sizzle . error ( match [ 0 ] ) ; }
return match ; } , "PSEUDO" : function ( match ) { var excess , unquoted = ! match [ 6 ] && match [ 2 ] ; if ( matchExpr [ "CHILD" ] . test ( match [ 0 ] ) ) { return null ; }
if ( match [ 3 ] ) { match [ 2 ] = match [ 4 ] || match [ 5 ] || "" ; } else if ( unquoted && rpseudo . test ( unquoted ) && ( excess = tokenize ( unquoted , true ) ) && ( excess = unquoted . indexOf ( ")" , unquoted . length - excess ) - unquoted . length ) ) { match [ 0 ] = match [ 0 ] . slice ( 0 , excess ) ; match [ 2 ] = unquoted . slice ( 0 , excess ) ; }
return match . slice ( 0 , 3 ) ; } } , filter : { "TAG" : function ( nodeNameSelector ) { var nodeName = nodeNameSelector . replace ( runescape , funescape ) . toLowerCase ( ) ; return nodeNameSelector === "*" ? function ( ) { return true ; } : function ( elem ) { return elem . nodeName && elem . nodeName . toLowerCase ( ) === nodeName ; } ; } , "CLASS" : function ( 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 ( 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 ( 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 ? 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 ) { if ( simple ) { while ( dir ) { node = elem ; while ( ( node = node [ dir ] ) ) { if ( ofType ? node . nodeName . toLowerCase ( ) === name : node . nodeType === 1 ) { return false ; } }
start = dir = type === "only" && ! start && "nextSibling" ; }
return true ; }
start = [ forward ? parent . firstChild : parent . lastChild ] ; if ( forward && useCache ) { node = parent ; outerCache = node [ expando ] || ( node [ expando ] = { } ) ; 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 ] || ( diff = nodeIndex = 0 ) || start . pop ( ) ) ) { if ( node . nodeType === 1 && ++ diff && node === elem ) { uniqueCache [ type ] = [ dirruns , nodeIndex , diff ] ; break ; } } } else { if ( useCache ) { node = elem ; outerCache = node [ expando ] || ( node [ expando ] = { } ) ; uniqueCache = outerCache [ node . uniqueID ] || ( outerCache [ node . uniqueID ] = { } ) ; cache = uniqueCache [ type ] || [ ] ; nodeIndex = cache [ 0 ] === dirruns && cache [ 1 ] ; diff = nodeIndex ; }
if ( diff === false ) { while ( ( node = ++ nodeIndex && node && node [ dir ] || ( diff = nodeIndex = 0 ) || start . pop ( ) ) ) { if ( ( ofType ? node . nodeName . toLowerCase ( ) === name : node . nodeType === 1 ) && ++ diff ) { if ( useCache ) { outerCache = node [ expando ] || ( node [ expando ] = { } ) ; uniqueCache = outerCache [ node . uniqueID ] || ( outerCache [ node . uniqueID ] = { } ) ; uniqueCache [ type ] = [ dirruns , diff ] ; }
if ( node === elem ) { break ; } } } } }
diff -= last ; return diff === first || ( diff % first === 0 && diff / first >= 0 ) ; } } ; } , "PSEUDO" : function ( pseudo , argument ) { var args , fn = Expr . pseudos [ pseudo ] || Expr . setFilters [ pseudo . toLowerCase ( ) ] || Sizzle . error ( "unsupported pseudo: " + pseudo ) ; if ( fn [ expando ] ) { return fn ( argument ) ; }
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 : { "not" : markFunction ( function ( selector ) { 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 ; while ( i -- ) { if ( ( elem = unmatched [ i ] ) ) { seed [ i ] = ! ( matches [ i ] = elem ) ; } } } ) : function ( elem , context , xml ) { input [ 0 ] = elem ; matcher ( input , null , xml , results ) ; 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 ; } ; } ) , "lang" : markFunction ( function ( lang ) { 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 ; } ; } ) , "target" : function ( elem ) { var hash = window . location && window . location . hash ; return hash && hash . slice ( 1 ) === elem . id ; } , "root" : function ( elem ) { return elem === docElem ; } , "focus" : function ( elem ) { return elem === document . activeElement && ( ! document . hasFocus || document . hasFocus ( ) ) && ! ! ( elem . type || elem . href || ~ elem . tabIndex ) ; } , "enabled" : function ( elem ) { return elem . disabled === false ; } , "disabled" : function ( elem ) { return elem . disabled === true ; } , "checked" : function ( elem ) { var nodeName = elem . nodeName . toLowerCase ( ) ; return ( nodeName === "input" && ! ! elem . checked ) || ( nodeName === "option" && ! ! elem . selected ) ; } , "selected" : function ( elem ) { if ( elem . parentNode ) { elem . parentNode . selectedIndex ; }
return elem . selected === true ; } , "empty" : function ( elem ) { for ( elem = elem . firstChild ; elem ; elem = elem . nextSibling ) { if ( elem . nodeType < 6 ) { return false ; } }
return true ; } , "parent" : function ( elem ) { return ! Expr . pseudos [ "empty" ] ( elem ) ; } , "header" : function ( elem ) { return rheader . test ( elem . nodeName ) ; } , "input" : function ( elem ) { return rinputs . test ( elem . nodeName ) ; } , "button" : function ( elem ) { var name = elem . nodeName . toLowerCase ( ) ; return name === "input" && elem . type === "button" || name === "button" ; } , "text" : function ( elem ) { var attr ; return elem . nodeName . toLowerCase ( ) === "input" && elem . type === "text" && ( ( attr = elem . getAttribute ( "type" ) ) == null || attr . toLowerCase ( ) === "text" ) ; } , "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 < length ; i += 2 ) { matchIndexes . push ( i ) ; }
return matchIndexes ; } ) , "odd" : createPositionalPseudo ( function ( matchIndexes , length ) { var i = 1 ; for ( ; i < length ; i += 2 ) { matchIndexes . push ( i ) ; }
return matchIndexes ; } ) , "lt" : createPositionalPseudo ( function ( matchIndexes , length , argument ) { var i = argument < 0 ? argument + length : argument ; for ( ; -- i >= 0 ; ) { matchIndexes . push ( i ) ; }
return matchIndexes ; } ) , "gt" : createPositionalPseudo ( function ( matchIndexes , length , argument ) { var i = argument < 0 ? argument + length : argument ; for ( ; ++ i < length ; ) { matchIndexes . push ( i ) ; }
return matchIndexes ; } ) } } ; Expr . pseudos [ "nth" ] = Expr . pseudos [ "eq" ] ; for ( i in { radio : true , checkbox : true , file : true , password : true , image : true } ) { Expr . pseudos [ i ] = createInputPseudo ( i ) ; }
for ( i in { submit : true , reset : true } ) { Expr . pseudos [ i ] = createButtonPseudo ( i ) ; }
function setFilters ( ) { }
setFilters . prototype = Expr . filters = Expr . pseudos ; Expr . setFilters = new setFilters ( ) ; tokenize = Sizzle . tokenize = function ( selector , parseOnly ) { var matched , match , tokens , type , soFar , groups , preFilters , cached = tokenCache [ selector + " " ] ; if ( cached ) { return parseOnly ? 0 : cached . slice ( 0 ) ; }
soFar = selector ; groups = [ ] ; preFilters = Expr . preFilter ; while ( soFar ) { if ( ! matched || ( match = rcomma . exec ( soFar ) ) ) { if ( match ) { soFar = soFar . slice ( match [ 0 ] . length ) || soFar ; }
groups . push ( ( tokens = [ ] ) ) ; }
matched = false ; if ( ( match = rcombinators . exec ( soFar ) ) ) { matched = match . shift ( ) ; tokens . push ( { value : matched , type : match [ 0 ] . replace ( rtrim , " " ) } ) ; soFar = soFar . slice ( matched . length ) ; }
for ( type in Expr . filter ) { if ( ( match = matchExpr [ type ] . exec ( soFar ) ) && ( ! preFilters [ type ] || ( match = preFilters [ type ] ( match ) ) ) ) { matched = match . shift ( ) ; tokens . push ( { value : matched , type : type , matches : match } ) ; soFar = soFar . slice ( matched . length ) ; } }
if ( ! matched ) { break ; } }
return parseOnly ? soFar . length : soFar ? Sizzle . error ( selector ) : tokenCache ( selector , groups ) . slice ( 0 ) ; } ; function toSelector ( tokens ) { var i = 0 , len = tokens . length , selector = "" ; for ( ; i < len ; i ++ ) { selector += tokens [ i ] . value ; }
return selector ; }
function addCombinator ( matcher , combinator , base ) { var dir = combinator . dir , checkNonElements = base && dir === "parentNode" , doneName = done ++ ; return combinator . first ? function ( elem , context , xml ) { while ( ( elem = elem [ dir ] ) ) { if ( elem . nodeType === 1 || checkNonElements ) { return matcher ( elem , context , xml ) ; } } } : function ( elem , context , xml ) { var oldCache , uniqueCache , outerCache , newCache = [ dirruns , doneName ] ; if ( xml ) { while ( ( elem = elem [ dir ] ) ) { if ( elem . nodeType === 1 || checkNonElements ) { if ( matcher ( elem , context , xml ) ) { return true ; } } } } else { while ( ( elem = elem [ dir ] ) ) { if ( elem . nodeType === 1 || checkNonElements ) { outerCache = elem [ expando ] || ( elem [ expando ] = { } ) ; uniqueCache = outerCache [ elem . uniqueID ] || ( outerCache [ elem . uniqueID ] = { } ) ; if ( ( oldCache = uniqueCache [ dir ] ) && oldCache [ 0 ] === dirruns && oldCache [ 1 ] === doneName ) { return ( newCache [ 2 ] = oldCache [ 2 ] ) ; } else { uniqueCache [ dir ] = newCache ; if ( ( newCache [ 2 ] = matcher ( elem , context , xml ) ) ) { return true ; } } } } } } ; }
function elementMatcher ( matchers ) { return matchers . length > 1 ? 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 < len ; i ++ ) { Sizzle ( selector , contexts [ i ] , results ) ; }
return results ; }
function condense ( unmatched , map , filter , context , xml ) { var elem , newUnmatched = [ ] , i = 0 , len = unmatched . length , mapped = map != null ; for ( ; i < len ; i ++ ) { if ( ( elem = unmatched [ i ] ) ) { if ( ! filter || filter ( elem , context , xml ) ) { newUnmatched . push ( elem ) ; if ( mapped ) { map . push ( i ) ; } } } }
return newUnmatched ; }
function setMatcher ( preFilter , selector , matcher , postFilter , postFinder , postSelector ) { if ( postFilter && ! postFilter [ expando ] ) { postFilter = setMatcher ( postFilter ) ; }
if ( postFinder && ! postFinder [ expando ] ) { postFinder = setMatcher ( postFinder , postSelector ) ; }
return markFunction ( function ( seed , results , context , xml ) { var temp , i , elem , preMap = [ ] , postMap = [ ] , preexisting = results . length , elems = seed || multipleContexts ( selector || "*" , context . nodeType ? [ context ] : context , [ ] ) , matcherIn = preFilter && ( seed || ! selector ) ? condense ( elems , preMap , preFilter , context , xml ) : elems , matcherOut = matcher ? postFinder || ( seed ? preFilter : preexisting || postFilter ) ? [ ] : results : matcherIn ; if ( matcher ) { matcher ( matcherIn , matcherOut , context , xml ) ; }
if ( postFilter ) { temp = condense ( matcherOut , postMap ) ; postFilter ( temp , [ ] , context , xml ) ; i = temp . length ; while ( i -- ) { if ( ( elem = temp [ i ] ) ) { matcherOut [ postMap [ i ] ] = ! ( matcherIn [ postMap [ i ] ] = elem ) ; } } }
if ( seed ) { if ( postFinder || preFilter ) { if ( postFinder ) { temp = [ ] ; i = matcherOut . length ; while ( i -- ) { if ( ( elem = matcherOut [ i ] ) ) { temp . push ( ( matcherIn [ i ] = elem ) ) ; } }
postFinder ( null , ( matcherOut = [ ] ) , temp , xml ) ; }
i = matcherOut . length ; while ( i -- ) { if ( ( elem = matcherOut [ i ] ) && ( temp = postFinder ? indexOf ( seed , elem ) : preMap [ i ] ) > - 1 ) { seed [ temp ] = ! ( results [ temp ] = elem ) ; } } } } 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 , 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 ) ) ; checkContext = null ; return ret ; } ] ; for ( ; i < len ; i ++ ) { if ( ( matcher = Expr . relative [ tokens [ i ] . type ] ) ) { matchers = [ addCombinator ( elementMatcher ( matchers ) , matcher ) ] ; } else { matcher = Expr . filter [ tokens [ i ] . type ] . apply ( null , tokens [ i ] . matches ) ; if ( matcher [ expando ] ) { j = ++ i ; for ( ; j < len ; j ++ ) { if ( Expr . relative [ tokens [ j ] . type ] ) { break ; } }
return setMatcher ( i > 1 && elementMatcher ( matchers ) , i > 1 && toSelector ( tokens . slice ( 0 , i - 1 ) . concat ( { value : tokens [ i - 2 ] . type === " " ? "*" : "" } ) ) . replace ( rtrim , "$1" ) , matcher , i < j && matcherFromTokens ( tokens . slice ( i , j ) ) , j < len && matcherFromTokens ( ( tokens = tokens . slice ( j ) ) ) , j < len && toSelector ( tokens ) ) ; }
matchers . push ( matcher ) ; } }
return elementMatcher ( matchers ) ; }
function matcherFromGroupMatchers ( elementMatchers , setMatchers ) { var bySet = setMatchers . length > 0 , byElement = elementMatchers . length > 0 , superMatcher = function ( seed , context , xml , results , outermost ) { var elem , j , matcher , matchedCount = 0 , i = "0" , unmatched = seed && [ ] , setMatched = [ ] , contextBackup = outermostContext , elems = seed || byElement && Expr . find [ "TAG" ] ( "*" , outermost ) , dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math . random ( ) || 0.1 ) , len = elems . length ; if ( outermost ) { outermostContext = context === document || context || outermost ; }
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 ; } }
if ( bySet ) { if ( ( elem = ! matcher && elem ) ) { matchedCount -- ; }
if ( seed ) { unmatched . push ( elem ) ; } } }
matchedCount += i ; if ( bySet && i !== matchedCount ) { j = 0 ; while ( ( matcher = setMatchers [ j ++ ] ) ) { matcher ( unmatched , setMatched , context , xml ) ; }
if ( seed ) { if ( matchedCount > 0 ) { while ( i -- ) { if ( ! ( unmatched [ i ] || setMatched [ i ] ) ) { setMatched [ i ] = pop . call ( results ) ; } } }
setMatched = condense ( setMatched ) ; }
push . apply ( results , setMatched ) ; if ( outermost && ! seed && setMatched . length > 0 && ( matchedCount + setMatchers . length ) > 1 ) { Sizzle . uniqueSort ( results ) ; } }
if ( outermost ) { dirruns = dirrunsUnique ; outermostContext = contextBackup ; }
return unmatched ; } ; return bySet ? markFunction ( superMatcher ) : superMatcher ; }
compile = Sizzle . compile = function ( selector , match ) { var i , setMatchers = [ ] , elementMatchers = [ ] , cached = compilerCache [ selector + " " ] ; if ( ! cached ) { if ( ! match ) { match = tokenize ( selector ) ; }
i = match . length ; while ( i -- ) { cached = matcherFromTokens ( match [ i ] ) ; if ( cached [ expando ] ) { setMatchers . push ( cached ) ; } else { elementMatchers . push ( cached ) ; } }
cached = compilerCache ( selector , matcherFromGroupMatchers ( elementMatchers , setMatchers ) ) ; cached . selector = selector ; }
return cached ; } ; 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 || [ ] ; if ( match . length === 1 ) { 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 ; } else if ( compiled ) { context = context . parentNode ; }
selector = selector . slice ( tokens . shift ( ) . value . length ) ; }
i = matchExpr [ "needsContext" ] . test ( selector ) ? 0 : tokens . length ; while ( i -- ) { token = tokens [ i ] ; if ( Expr . relative [ ( type = token . type ) ] ) { break ; }
if ( ( find = Expr . find [ type ] ) ) { if ( ( seed = find ( token . matches [ 0 ] . replace ( runescape , funescape ) , rsibling . test ( tokens [ 0 ] . type ) && testContext ( context . parentNode ) || context ) ) ) { tokens . splice ( i , 1 ) ; selector = seed . length && toSelector ( tokens ) ; if ( ! selector ) { push . apply ( results , seed ) ; return results ; }
break ; } } } }
( compiled || compile ( selector , match ) ) ( seed , context , ! documentIsHTML , results , ! context || rsibling . test ( selector ) && testContext ( context . parentNode ) || context ) ; return results ; } ; support . sortStable = expando . split ( "" ) . sort ( sortOrder ) . join ( "" ) === expando ; support . detectDuplicates = ! ! hasDuplicate ; setDocument ( ) ; support . sortDetached = assert ( function ( div1 ) { return div1 . compareDocumentPosition ( document . createElement ( "div" ) ) & 1 ; } ) ; if ( ! assert ( function ( div ) { div . innerHTML = "<a href='#'></a>" ; 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 ) ; } } ) ; }
if ( ! support . attributes || ! assert ( function ( div ) { div . innerHTML = "<input/>" ; div . firstChild . setAttribute ( "value" , "" ) ; return div . firstChild . getAttribute ( "value" ) === "" ; } ) ) { addHandle ( "value" , function ( elem , name , isXML ) { if ( ! isXML && elem . nodeName . toLowerCase ( ) === "input" ) { return elem . defaultValue ; } } ) ; }
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 ) ; jQuery . find = Sizzle ; jQuery . expr = Sizzle . selectors ; jQuery . expr [ ":" ] = jQuery . expr . pseudos ; jQuery . uniqueSort = jQuery . unique = Sizzle . uniqueSort ; jQuery . text = Sizzle . getText ; jQuery . isXMLDoc = Sizzle . isXML ; jQuery . contains = Sizzle . contains ; var dir = function ( elem , dir , until ) { var matched = [ ] , truncate = until !== undefined ; while ( ( elem = elem [ dir ] ) && elem . nodeType !== 9 ) { if ( elem . nodeType === 1 ) { if ( truncate && jQuery ( elem ) . is ( until ) ) { break ; }
matched . push ( elem ) ; } }
return matched ; } ; var siblings = function ( n , elem ) { var matched = [ ] ; for ( ; n ; n = n . nextSibling ) { if ( n . nodeType === 1 && n !== elem ) { matched . push ( n ) ; } }
return matched ; } ; var rneedsContext = jQuery . expr . match . needsContext ; var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ) ; var risSimple = /^.[^:#\[\.,]*$/ ; function winnow ( elements , qualifier , not ) { if ( jQuery . isFunction ( qualifier ) ) { return jQuery . grep ( elements , function ( elem , i ) { return ! ! qualifier . call ( elem , i , elem ) !== not ; } ) ; }
if ( qualifier . nodeType ) { return jQuery . grep ( elements , function ( elem ) { return ( elem === qualifier ) !== not ; } ) ; }
if ( typeof qualifier === "string" ) { if ( risSimple . test ( qualifier ) ) { return jQuery . filter ( qualifier , elements , not ) ; }
qualifier = jQuery . filter ( qualifier , elements ) ; }
return jQuery . grep ( elements , function ( elem ) { return ( indexOf . call ( qualifier , elem ) > - 1 ) !== not ; } ) ; }
jQuery . filter = function ( expr , elems , not ) { var elem = elems [ 0 ] ; if ( not ) { expr = ":not(" + expr + ")" ; }
return elems . length === 1 && elem . nodeType === 1 ? jQuery . find . matchesSelector ( elem , expr ) ? [ elem ] : [ ] : jQuery . find . matches ( expr , jQuery . grep ( elems , function ( elem ) { return elem . nodeType === 1 ; } ) ) ; } ; jQuery . fn . extend ( { find : function ( selector ) { var i , len = this . length , ret = [ ] , self = this ; if ( typeof selector !== "string" ) { return this . pushStack ( jQuery ( selector ) . filter ( function ( ) { for ( i = 0 ; i < len ; i ++ ) { if ( jQuery . contains ( self [ i ] , this ) ) { return true ; } } } ) ) ; }
for ( i = 0 ; i < len ; i ++ ) { jQuery . find ( selector , self [ i ] , ret ) ; }
ret = this . pushStack ( len > 1 ? jQuery . unique ( ret ) : ret ) ; ret . selector = this . selector ? this . selector + " " + selector : selector ; return ret ; } , filter : function ( selector ) { return this . pushStack ( winnow ( this , selector || [ ] , false ) ) ; } , not : function ( selector ) { return this . pushStack ( winnow ( this , selector || [ ] , true ) ) ; } , is : function ( selector ) { return ! ! winnow ( this , typeof selector === "string" && rneedsContext . test ( selector ) ? jQuery ( selector ) : selector || [ ] , false ) . length ; } } ) ; var rootjQuery , rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/ , init = jQuery . fn . init = function ( selector , context , root ) { var match , elem ; if ( ! selector ) { return this ; }
root = root || rootjQuery ; if ( typeof selector === "string" ) { if ( selector [ 0 ] === "<" && selector [ selector . length - 1 ] === ">" && selector . length >= 3 ) { match = [ null , selector , null ] ; } else { match = rquickExpr . exec ( selector ) ; }
if ( match && ( match [ 1 ] || ! context ) ) { if ( match [ 1 ] ) { context = context instanceof jQuery ? context [ 0 ] : context ; jQuery . merge ( this , jQuery . parseHTML ( match [ 1 ] , context && context . nodeType ? context . ownerDocument || context : document , true ) ) ; if ( rsingleTag . test ( match [ 1 ] ) && jQuery . isPlainObject ( context ) ) { for ( match in context ) { if ( jQuery . isFunction ( this [ match ] ) ) { this [ match ] ( context [ match ] ) ; } else { this . attr ( match , context [ match ] ) ; } } }
return this ; } else { elem = document . getElementById ( match [ 2 ] ) ; if ( elem && elem . parentNode ) { this . length = 1 ; this [ 0 ] = elem ; }
this . context = document ; this . selector = selector ; return this ; } } else if ( ! context || context . jquery ) { return ( context || root ) . find ( selector ) ; } else { return this . constructor ( context ) . find ( selector ) ; } } else if ( selector . nodeType ) { this . context = this [ 0 ] = selector ; this . length = 1 ; return this ; } else if ( jQuery . isFunction ( selector ) ) { return root . ready !== undefined ? root . ready ( selector ) : selector ( jQuery ) ; }
if ( selector . selector !== undefined ) { this . selector = selector . selector ; this . context = selector . context ; }
return jQuery . makeArray ( selector , this ) ; } ; init . prototype = jQuery . fn ; rootjQuery = jQuery ( document ) ; var rparentsprev = /^(?:parents|prev(?:Until|All))/ , guaranteedUnique = { children : true , contents : true , next : true , prev : true } ; jQuery . fn . extend ( { has : function ( target ) { var targets = jQuery ( target , this ) , l = targets . length ; return this . filter ( function ( ) { var i = 0 ; for ( ; i < l ; i ++ ) { if ( jQuery . contains ( this , targets [ i ] ) ) { return true ; } } } ) ; } , closest : function ( selectors , context ) { var cur , i = 0 , l = this . length , matched = [ ] , pos = rneedsContext . test ( selectors ) || typeof selectors !== "string" ? jQuery ( selectors , context || this . context ) : 0 ; for ( ; i < l ; i ++ ) { for ( cur = this [ i ] ; cur && cur !== context ; cur = cur . parentNode ) { if ( cur . nodeType < 11 && ( pos ? pos . index ( cur ) > - 1 : cur . nodeType === 1 && jQuery . find . matchesSelector ( cur , selectors ) ) ) { matched . push ( cur ) ; break ; } } }
return this . pushStack ( matched . length > 1 ? jQuery . uniqueSort ( matched ) : matched ) ; } , index : function ( elem ) { if ( ! elem ) { return ( this [ 0 ] && this [ 0 ] . parentNode ) ? this . first ( ) . prevAll ( ) . length : - 1 ; }
if ( typeof elem === "string" ) { return indexOf . call ( jQuery ( elem ) , this [ 0 ] ) ; }
return indexOf . call ( this , elem . jquery ? elem [ 0 ] : elem ) ; } , add : function ( selector , context ) { return this . pushStack ( jQuery . uniqueSort ( jQuery . merge ( this . get ( ) , jQuery ( selector , context ) ) ) ) ; } , addBack : function ( selector ) { return this . add ( selector == null ? this . prevObject : this . prevObject . filter ( selector ) ) ; } } ) ; function sibling ( cur , dir ) { while ( ( cur = cur [ dir ] ) && cur . nodeType !== 1 ) { }
return cur ; }
jQuery . each ( { parent : function ( elem ) { var parent = elem . parentNode ; return parent && parent . nodeType !== 11 ? parent : null ; } , parents : function ( elem ) { return dir ( elem , "parentNode" ) ; } , parentsUntil : function ( elem , i , until ) { return dir ( elem , "parentNode" , until ) ; } , next : function ( elem ) { return sibling ( elem , "nextSibling" ) ; } , prev : function ( elem ) { return sibling ( elem , "previousSibling" ) ; } , nextAll : function ( elem ) { return dir ( elem , "nextSibling" ) ; } , prevAll : function ( elem ) { return dir ( elem , "previousSibling" ) ; } , nextUntil : function ( elem , i , until ) { return dir ( elem , "nextSibling" , until ) ; } , prevUntil : function ( elem , i , until ) { return dir ( elem , "previousSibling" , until ) ; } , siblings : function ( elem ) { return siblings ( ( elem . parentNode || { } ) . firstChild , elem ) ; } , children : function ( elem ) { return siblings ( elem . firstChild ) ; } , contents : function ( elem ) { return elem . contentDocument || jQuery . merge ( [ ] , elem . childNodes ) ; } } , function ( name , fn ) { jQuery . fn [ name ] = function ( until , selector ) { var matched = jQuery . map ( this , fn , until ) ; if ( name . slice ( - 5 ) !== "Until" ) { selector = until ; }
if ( selector && typeof selector === "string" ) { matched = jQuery . filter ( selector , matched ) ; }
if ( this . length > 1 ) { if ( ! guaranteedUnique [ name ] ) { jQuery . uniqueSort ( matched ) ; }
if ( rparentsprev . test ( name ) ) { matched . reverse ( ) ; } }
return this . pushStack ( matched ) ; } ; } ) ; var rnotwhite = ( /\S+/g ) ; function createOptions ( options ) { var object = { } ; jQuery . each ( options . match ( rnotwhite ) || [ ] , function ( _ , flag ) { object [ flag ] = true ; } ) ; return object ; }
jQuery . Callbacks = function ( options ) { options = typeof options === "string" ? createOptions ( options ) : jQuery . extend ( { } , options ) ; var
firing , memory , fired , locked , list = [ ] , queue = [ ] , firingIndex = - 1 , fire = function ( ) { locked = options . once ; fired = firing = true ; for ( ; queue . length ; firingIndex = - 1 ) { memory = queue . shift ( ) ; while ( ++ firingIndex < list . length ) { if ( list [ firingIndex ] . apply ( memory [ 0 ] , memory [ 1 ] ) === false && options . stopOnFalse ) { firingIndex = list . length ; memory = false ; } } }
if ( ! options . memory ) { memory = false ; }
firing = false ; if ( locked ) { if ( memory ) { list = [ ] ; } else { list = "" ; } } } , self = { add : function ( ) { if ( list ) { if ( memory && ! firing ) { firingIndex = list . length - 1 ; queue . push ( memory ) ; }
( function add ( args ) { jQuery . each ( args , function ( _ , arg ) { if ( jQuery . isFunction ( arg ) ) { if ( ! options . unique || ! self . has ( arg ) ) { list . push ( arg ) ; } } else if ( arg && arg . length && jQuery . type ( arg ) !== "string" ) { add ( arg ) ; } } ) ; } ) ( arguments ) ; if ( memory && ! firing ) { fire ( ) ; } }
return this ; } , remove : function ( ) { jQuery . each ( arguments , function ( _ , arg ) { var index ; while ( ( index = jQuery . inArray ( arg , list , index ) ) > - 1 ) { list . splice ( index , 1 ) ; if ( index <= firingIndex ) { firingIndex -- ; } } } ) ; return this ; } , has : function ( fn ) { return fn ? jQuery . inArray ( fn , list ) > - 1 : list . length > 0 ; } , empty : function ( ) { if ( list ) { list = [ ] ; }
return this ; } , disable : function ( ) { locked = queue = [ ] ; list = memory = "" ; return this ; } , disabled : function ( ) { return ! list ; } , lock : function ( ) { locked = queue = [ ] ; if ( ! memory ) { list = memory = "" ; }
return this ; } , locked : function ( ) { return ! ! locked ; } , fireWith : function ( context , args ) { if ( ! locked ) { args = args || [ ] ; args = [ context , args . slice ? args . slice ( ) : args ] ; queue . push ( args ) ; if ( ! firing ) { fire ( ) ; } }
return this ; } , fire : function ( ) { self . fireWith ( this , arguments ) ; return this ; } , fired : function ( ) { return ! ! fired ; } } ; return self ; } ; jQuery . extend ( { Deferred : function ( func ) { var tuples = [ [ "resolve" , "done" , jQuery . Callbacks ( "once memory" ) , "resolved" ] , [ "reject" , "fail" , jQuery . Callbacks ( "once memory" ) , "rejected" ] , [ "notify" , "progress" , jQuery . Callbacks ( "memory" ) ] ] , state = "pending" , promise = { state : function ( ) { return state ; } , always : function ( ) { deferred . done ( arguments ) . fail ( arguments ) ; return this ; } , then : function ( ) { var fns = arguments ; return jQuery . Deferred ( function ( newDefer ) { jQuery . each ( tuples , function ( i , tuple ) { var fn = jQuery . isFunction ( fns [ i ] ) && fns [ i ] ; deferred [ tuple [ 1 ] ] ( function ( ) { var returned = fn && fn . apply ( this , arguments ) ; if ( returned && jQuery . 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 ( ) ; } , promise : function ( obj ) { return obj != null ? jQuery . extend ( obj , promise ) : promise ; } } , deferred = { } ; promise . pipe = promise . then ; jQuery . each ( tuples , function ( i , tuple ) { var list = tuple [ 2 ] , stateString = tuple [ 3 ] ; promise [ tuple [ 1 ] ] = list . add ; if ( stateString ) { list . add ( function ( ) { state = stateString ; } , tuples [ i ^ 1 ] [ 2 ] . disable , tuples [ 2 ] [ 2 ] . lock ) ; }
deferred [ tuple [ 0 ] ] = function ( ) { deferred [ tuple [ 0 ] + "With" ] ( this === deferred ? promise : this , arguments ) ; return this ; } ; deferred [ tuple [ 0 ] + "With" ] = list . fireWith ; } ) ; promise . promise ( deferred ) ; if ( func ) { func . call ( deferred , deferred ) ; }
return deferred ; } , when : function ( subordinate ) { var i = 0 , resolveValues = slice . call ( arguments ) , length = resolveValues . length , remaining = length !== 1 || ( subordinate && jQuery . isFunction ( subordinate . promise ) ) ? length : 0 , deferred = remaining === 1 ? subordinate : jQuery . Deferred ( ) , updateFunc = function ( i , contexts , values ) { 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 ; if ( length > 1 ) { progressValues = new Array ( length ) ; progressContexts = new Array ( length ) ; resolveContexts = new Array ( length ) ; for ( ; i < length ; i ++ ) { if ( resolveValues [ i ] && jQuery . isFunction ( resolveValues [ i ] . promise ) ) { resolveValues [ i ] . promise ( ) . progress ( updateFunc ( i , progressContexts , progressValues ) ) . done ( updateFunc ( i , resolveContexts , resolveValues ) ) . fail ( deferred . reject ) ; } else { -- remaining ; } } }
if ( ! remaining ) { deferred . resolveWith ( resolveContexts , resolveValues ) ; }
return deferred . promise ( ) ; } } ) ; var readyList ; jQuery . fn . ready = function ( fn ) { jQuery . ready . promise ( ) . done ( fn ) ; return this ; } ; jQuery . extend ( { isReady : false , readyWait : 1 , holdReady : function ( hold ) { if ( hold ) { jQuery . readyWait ++ ; } else { jQuery . ready ( true ) ; } } , ready : function ( wait ) { if ( wait === true ? -- jQuery . readyWait : jQuery . isReady ) { return ; }
jQuery . isReady = true ; if ( wait !== true && -- jQuery . readyWait > 0 ) { return ; }
readyList . resolveWith ( document , [ jQuery ] ) ; if ( jQuery . fn . triggerHandler ) { jQuery ( document ) . triggerHandler ( "ready" ) ; jQuery ( document ) . off ( "ready" ) ; } } } ) ; function completed ( ) { document . removeEventListener ( "DOMContentLoaded" , completed ) ; window . removeEventListener ( "load" , completed ) ; jQuery . ready ( ) ; }
jQuery . ready . promise = function ( obj ) { if ( ! readyList ) { readyList = jQuery . Deferred ( ) ; if ( document . readyState === "complete" || ( document . readyState !== "loading" && ! document . documentElement . doScroll ) ) { window . setTimeout ( jQuery . ready ) ; } else { document . addEventListener ( "DOMContentLoaded" , completed ) ; window . addEventListener ( "load" , completed ) ; } }
return readyList . promise ( obj ) ; } ; jQuery . ready . promise ( ) ; var access = function ( elems , fn , key , value , chainable , emptyGet , raw ) { var i = 0 , len = elems . length , bulk = key == null ; if ( jQuery . type ( key ) === "object" ) { chainable = true ; for ( i in key ) { access ( elems , fn , i , key [ i ] , true , emptyGet , raw ) ; } } else if ( value !== undefined ) { chainable = true ; if ( ! jQuery . isFunction ( value ) ) { raw = true ; }
if ( bulk ) { if ( raw ) { fn . call ( elems , value ) ; fn = null ; } else { bulk = fn ; fn = function ( elem , key , value ) { return bulk . call ( jQuery ( elem ) , value ) ; } ; } }
if ( fn ) { for ( ; i < len ; i ++ ) { fn ( elems [ i ] , key , raw ? value : value . call ( elems [ i ] , i , fn ( elems [ i ] , key ) ) ) ; } } }
return chainable ? elems : bulk ? fn . call ( elems ) : len ? fn ( elems [ 0 ] , key ) : emptyGet ; } ; var acceptData = function ( owner ) { return owner . nodeType === 1 || owner . nodeType === 9 || ! ( + owner . nodeType ) ; } ; function Data ( ) { this . expando = jQuery . expando + Data . uid ++ ; }
Data . uid = 1 ; Data . prototype = { register : function ( owner , initial ) { var value = initial || { } ; if ( owner . nodeType ) { owner [ this . expando ] = value ; } else { Object . defineProperty ( owner , this . expando , { value : value , writable : true , configurable : true } ) ; }
return owner [ this . expando ] ; } , cache : function ( owner ) { if ( ! acceptData ( owner ) ) { return { } ; }
var value = owner [ this . expando ] ; if ( ! value ) { value = { } ; if ( acceptData ( owner ) ) { if ( owner . nodeType ) { owner [ this . expando ] = value ; } else { Object . defineProperty ( owner , this . expando , { value : value , configurable : true } ) ; } } }
return value ; } , set : function ( owner , data , value ) { var prop , cache = this . cache ( owner ) ; if ( typeof data === "string" ) { cache [ data ] = value ; } else { for ( prop in data ) { cache [ prop ] = data [ prop ] ; } }
return cache ; } , get : function ( owner , key ) { return key === undefined ? this . cache ( owner ) : owner [ this . expando ] && owner [ this . expando ] [ key ] ; } , access : function ( owner , key , value ) { var stored ; if ( key === undefined || ( ( key && typeof key === "string" ) && value === undefined ) ) { stored = this . get ( owner , key ) ; return stored !== undefined ? stored : this . get ( owner , jQuery . camelCase ( key ) ) ; }
this . set ( owner , key , value ) ; return value !== undefined ? value : key ; } , remove : function ( owner , key ) { var i , name , camel , cache = owner [ this . expando ] ; if ( cache === undefined ) { return ; }
if ( key === undefined ) { this . register ( owner ) ; } else { if ( jQuery . isArray ( key ) ) { name = key . concat ( key . map ( jQuery . camelCase ) ) ; } else { camel = jQuery . camelCase ( key ) ; if ( key in cache ) { name = [ key , camel ] ; } else { name = camel ; name = name in cache ? [ name ] : ( name . match ( rnotwhite ) || [ ] ) ; } }
i = name . length ; while ( i -- ) { delete cache [ name [ i ] ] ; } }
if ( key === undefined || jQuery . isEmptyObject ( cache ) ) { if ( owner . nodeType ) { owner [ this . expando ] = undefined ; } else { delete owner [ this . expando ] ; } } } , hasData : function ( owner ) { var cache = owner [ this . expando ] ; return cache !== undefined && ! jQuery . isEmptyObject ( cache ) ; } } ; var dataPriv = new Data ( ) ; var dataUser = new Data ( ) ; var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/ , rmultiDash = /[A-Z]/g ; function dataAttr ( elem , key , data ) { var name ; if ( data === undefined && elem . nodeType === 1 ) { name = "data-" + key . replace ( rmultiDash , "-$&" ) . toLowerCase ( ) ; data = elem . getAttribute ( name ) ; if ( typeof data === "string" ) { try { data = data === "true" ? true : data === "false" ? false : data === "null" ? null : + data + "" === data ? + data : rbrace . test ( data ) ? jQuery . parseJSON ( data ) : data ; } catch ( e ) { }
dataUser . set ( elem , key , data ) ; } else { data = undefined ; } }
return data ; }
jQuery . extend ( { hasData : function ( elem ) { return dataUser . hasData ( elem ) || dataPriv . hasData ( elem ) ; } , data : function ( elem , name , data ) { return dataUser . access ( elem , name , data ) ; } , removeData : function ( elem , name ) { dataUser . remove ( elem , name ) ; } , _data : function ( elem , name , data ) { return dataPriv . access ( elem , name , data ) ; } , _removeData : function ( elem , name ) { dataPriv . remove ( elem , name ) ; } } ) ; jQuery . fn . extend ( { data : function ( key , value ) { var i , name , data , elem = this [ 0 ] , attrs = elem && elem . attributes ; if ( key === undefined ) { if ( this . length ) { data = dataUser . get ( elem ) ; if ( elem . nodeType === 1 && ! dataPriv . get ( elem , "hasDataAttrs" ) ) { i = attrs . length ; while ( i -- ) { if ( attrs [ i ] ) { name = attrs [ i ] . name ; if ( name . indexOf ( "data-" ) === 0 ) { name = jQuery . camelCase ( name . slice ( 5 ) ) ; dataAttr ( elem , name , data [ name ] ) ; } } }
dataPriv . set ( elem , "hasDataAttrs" , true ) ; } }
return data ; }
if ( typeof key === "object" ) { return this . each ( function ( ) { dataUser . set ( this , key ) ; } ) ; }
return access ( this , function ( value ) { var data , camelKey ; if ( elem && value === undefined ) { data = dataUser . get ( elem , key ) || dataUser . get ( elem , key . replace ( rmultiDash , "-$&" ) . toLowerCase ( ) ) ; if ( data !== undefined ) { return data ; }
camelKey = jQuery . camelCase ( key ) ; data = dataUser . get ( elem , camelKey ) ; if ( data !== undefined ) { return data ; }
data = dataAttr ( elem , camelKey , undefined ) ; if ( data !== undefined ) { return data ; }
return ; }
camelKey = jQuery . camelCase ( key ) ; this . each ( function ( ) { var data = dataUser . get ( this , camelKey ) ; dataUser . set ( this , camelKey , value ) ; if ( key . indexOf ( "-" ) > - 1 && data !== undefined ) { dataUser . set ( this , key , value ) ; } } ) ; } , null , value , arguments . length > 1 , null , true ) ; } , removeData : function ( key ) { return this . each ( function ( ) { dataUser . remove ( this , key ) ; } ) ; } } ) ; jQuery . extend ( { queue : function ( elem , type , data ) { var queue ; if ( elem ) { type = ( type || "fx" ) + "queue" ; queue = dataPriv . get ( elem , type ) ; if ( data ) { if ( ! queue || jQuery . isArray ( data ) ) { queue = dataPriv . access ( elem , type , jQuery . makeArray ( data ) ) ; } else { queue . push ( data ) ; } }
return queue || [ ] ; } } , dequeue : function ( elem , type ) { type = type || "fx" ; var queue = jQuery . queue ( elem , type ) , startLength = queue . length , fn = queue . shift ( ) , hooks = jQuery . _queueHooks ( elem , type ) , next = function ( ) { jQuery . dequeue ( elem , type ) ; } ; if ( fn === "inprogress" ) { fn = queue . shift ( ) ; startLength -- ; }
if ( fn ) { if ( type === "fx" ) { queue . unshift ( "inprogress" ) ; }
delete hooks . stop ; fn . call ( elem , next , hooks ) ; }
if ( ! startLength && hooks ) { hooks . empty . fire ( ) ; } } , _queueHooks : function ( elem , type ) { var key = type + "queueHooks" ; return dataPriv . get ( elem , key ) || dataPriv . access ( elem , key , { empty : jQuery . Callbacks ( "once memory" ) . add ( function ( ) { dataPriv . remove ( elem , [ type + "queue" , key ] ) ; } ) } ) ; } } ) ; jQuery . fn . extend ( { queue : function ( type , data ) { var setter = 2 ; if ( typeof type !== "string" ) { data = type ; type = "fx" ; setter -- ; }
if ( arguments . length < setter ) { return jQuery . queue ( this [ 0 ] , type ) ; }
return data === undefined ? this : this . each ( function ( ) { var queue = jQuery . queue ( this , type , data ) ; jQuery . _queueHooks ( this , type ) ; if ( type === "fx" && queue [ 0 ] !== "inprogress" ) { jQuery . dequeue ( this , type ) ; } } ) ; } , dequeue : function ( type ) { return this . each ( function ( ) { jQuery . dequeue ( this , type ) ; } ) ; } , clearQueue : function ( type ) { return this . queue ( type || "fx" , [ ] ) ; } , promise : function ( type , obj ) { var tmp , count = 1 , defer = jQuery . Deferred ( ) , elements = this , i = this . length , resolve = function ( ) { if ( ! ( -- count ) ) { defer . resolveWith ( elements , [ elements ] ) ; } } ; if ( typeof type !== "string" ) { obj = type ; type = undefined ; }
type = type || "fx" ; while ( i -- ) { tmp = dataPriv . get ( elements [ i ] , type + "queueHooks" ) ; if ( tmp && tmp . empty ) { count ++ ; tmp . empty . add ( resolve ) ; } }
resolve ( ) ; return defer . promise ( obj ) ; } } ) ; var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ) . source ; var rcssNum = new RegExp ( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$" , "i" ) ; var cssExpand = [ "Top" , "Right" , "Bottom" , "Left" ] ; var isHidden = function ( elem , el ) { elem = el || elem ; return jQuery . css ( elem , "display" ) === "none" || ! jQuery . contains ( elem . ownerDocument , elem ) ; } ; function adjustCSS ( elem , prop , valueParts , tween ) { var adjusted , scale = 1 , maxIterations = 20 , currentValue = tween ? function ( ) { return tween . cur ( ) ; } : function ( ) { return jQuery . css ( elem , prop , "" ) ; } , initial = currentValue ( ) , unit = valueParts && valueParts [ 3 ] || ( jQuery . cssNumber [ prop ] ? "" : "px" ) , initialInUnit = ( jQuery . cssNumber [ prop ] || unit !== "px" && + initial ) && rcssNum . exec ( jQuery . css ( elem , prop ) ) ; if ( initialInUnit && initialInUnit [ 3 ] !== unit ) { unit = unit || initialInUnit [ 3 ] ; valueParts = valueParts || [ ] ; initialInUnit = + initial || 1 ; do { scale = scale || ".5" ; initialInUnit = initialInUnit / scale ; jQuery . style ( elem , prop , initialInUnit + unit ) ; } while ( scale !== ( scale = currentValue ( ) / initial ) && scale !== 1 && -- maxIterations ) ; }
if ( valueParts ) { initialInUnit = + initialInUnit || + initial || 0 ; adjusted = valueParts [ 1 ] ? initialInUnit + ( valueParts [ 1 ] + 1 ) * valueParts [ 2 ] : + valueParts [ 2 ] ; if ( tween ) { tween . unit = unit ; tween . start = initialInUnit ; tween . end = adjusted ; } }
return adjusted ; }
var rcheckableType = ( /^(?:checkbox|radio)$/i ) ; var rtagName = ( /<([\w:-]+)/ ) ; var rscriptType = ( /^$|\/(?:java|ecma)script/i ) ; var wrapMap = { option : [ 1 , "<select multiple='multiple'>" , "</select>" ] , thead : [ 1 , "<table>" , "</table>" ] , col : [ 2 , "<table><colgroup>" , "</colgroup></table>" ] , tr : [ 2 , "<table><tbody>" , "</tbody></table>" ] , td : [ 3 , "<table><tbody><tr>" , "</tr></tbody></table>" ] , _default : [ 0 , "" , "" ] } ; wrapMap . optgroup = wrapMap . option ; wrapMap . tbody = wrapMap . tfoot = wrapMap . colgroup = wrapMap . caption = wrapMap . thead ; wrapMap . th = wrapMap . td ; function getAll ( context , tag ) { var ret = typeof context . getElementsByTagName !== "undefined" ? context . getElementsByTagName ( tag || "*" ) : typeof context . querySelectorAll !== "undefined" ? context . querySelectorAll ( tag || "*" ) : [ ] ; return tag === undefined || tag && jQuery . nodeName ( context , tag ) ? jQuery . merge ( [ context ] , ret ) : ret ; }
function setGlobalEval ( elems , refElements ) { var i = 0 , l = elems . length ; for ( ; i < l ; i ++ ) { dataPriv . set ( elems [ i ] , "globalEval" , ! refElements || dataPriv . get ( refElements [ i ] , "globalEval" ) ) ; } }
var rhtml = /<|&#?\w+;/ ; function buildFragment ( elems , context , scripts , selection , ignored ) { var elem , tmp , tag , wrap , contains , j , fragment = context . createDocumentFragment ( ) , nodes = [ ] , i = 0 , l = elems . length ; for ( ; i < l ; i ++ ) { elem = elems [ i ] ; if ( elem || elem === 0 ) { if ( jQuery . type ( elem ) === "object" ) { jQuery . merge ( nodes , elem . nodeType ? [ elem ] : elem ) ; } else if ( ! rhtml . test ( elem ) ) { nodes . push ( context . createTextNode ( elem ) ) ; } else { tmp = tmp || fragment . appendChild ( context . createElement ( "div" ) ) ; tag = ( rtagName . exec ( elem ) || [ "" , "" ] ) [ 1 ] . toLowerCase ( ) ; wrap = wrapMap [ tag ] || wrapMap . _default ; tmp . innerHTML = wrap [ 1 ] + jQuery . htmlPrefilter ( elem ) + wrap [ 2 ] ; j = wrap [ 0 ] ; while ( j -- ) { tmp = tmp . lastChild ; }
jQuery . merge ( nodes , tmp . childNodes ) ; tmp = fragment . firstChild ; tmp . textContent = "" ; } } }
fragment . textContent = "" ; i = 0 ; while ( ( elem = nodes [ i ++ ] ) ) { if ( selection && jQuery . inArray ( elem , selection ) > - 1 ) { if ( ignored ) { ignored . push ( elem ) ; }
continue ; }
contains = jQuery . contains ( elem . ownerDocument , elem ) ; tmp = getAll ( fragment . appendChild ( elem ) , "script" ) ; if ( contains ) { setGlobalEval ( tmp ) ; }
if ( scripts ) { j = 0 ; while ( ( elem = tmp [ j ++ ] ) ) { if ( rscriptType . test ( elem . type || "" ) ) { scripts . push ( elem ) ; } } } }
return fragment ; }
( function ( ) { var fragment = document . createDocumentFragment ( ) , div = fragment . appendChild ( document . createElement ( "div" ) ) , input = document . createElement ( "input" ) ; input . setAttribute ( "type" , "radio" ) ; input . setAttribute ( "checked" , "checked" ) ; input . setAttribute ( "name" , "t" ) ; div . appendChild ( input ) ; support . checkClone = div . cloneNode ( true ) . cloneNode ( true ) . lastChild . checked ; div . innerHTML = "<textarea>x</textarea>" ; support . noCloneChecked = ! ! div . cloneNode ( true ) . lastChild . defaultValue ; } ) ( ) ; var
rkeyEvent = /^key/ , rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/ , rtypenamespace = /^([^.]*)(?:\.(.+)|)/ ; function returnTrue ( ) { return true ; }
function returnFalse ( ) { return false ; }
function safeActiveElement ( ) { try { return document . activeElement ; } catch ( err ) { } }
function on ( elem , types , selector , data , fn , one ) { var origFn , type ; if ( typeof types === "object" ) { if ( typeof selector !== "string" ) { data = data || selector ; selector = undefined ; }
for ( type in types ) { on ( elem , type , selector , data , types [ type ] , one ) ; }
return elem ; }
if ( data == null && fn == null ) { fn = selector ; data = selector = undefined ; } else if ( fn == null ) { if ( typeof selector === "string" ) { fn = data ; data = undefined ; } else { fn = data ; data = selector ; selector = undefined ; } }
if ( fn === false ) { fn = returnFalse ; } else if ( ! fn ) { return elem ; }
if ( one === 1 ) { origFn = fn ; fn = function ( event ) { jQuery ( ) . off ( event ) ; return origFn . apply ( this , arguments ) ; } ; fn . guid = origFn . guid || ( origFn . guid = jQuery . guid ++ ) ; }
return elem . each ( function ( ) { jQuery . event . add ( this , types , fn , data , selector ) ; } ) ; }
jQuery . event = { global : { } , add : function ( elem , types , handler , data , selector ) { var handleObjIn , eventHandle , tmp , events , t , handleObj , special , handlers , type , namespaces , origType , elemData = dataPriv . get ( elem ) ; if ( ! elemData ) { return ; }
if ( handler . handler ) { handleObjIn = handler ; handler = handleObjIn . handler ; selector = handleObjIn . selector ; }
if ( ! handler . guid ) { handler . guid = jQuery . guid ++ ; }
if ( ! ( events = elemData . events ) ) { events = elemData . events = { } ; }
if ( ! ( eventHandle = elemData . handle ) ) { eventHandle = elemData . handle = function ( e ) { return typeof jQuery !== "undefined" && jQuery . event . triggered !== e . type ? jQuery . event . dispatch . apply ( elem , arguments ) : undefined ; } ; }
types = ( types || "" ) . match ( rnotwhite ) || [ "" ] ; t = types . length ; while ( t -- ) { tmp = rtypenamespace . exec ( types [ t ] ) || [ ] ; type = origType = tmp [ 1 ] ; namespaces = ( tmp [ 2 ] || "" ) . split ( "." ) . sort ( ) ; if ( ! type ) { continue ; }
special = jQuery . event . special [ type ] || { } ; type = ( selector ? special . delegateType : special . bindType ) || type ; special = jQuery . event . special [ type ] || { } ; handleObj = jQuery . extend ( { type : type , origType : origType , data : data , handler : handler , guid : handler . guid , selector : selector , needsContext : selector && jQuery . expr . match . needsContext . test ( selector ) , namespace : namespaces . join ( "." ) } , handleObjIn ) ; if ( ! ( handlers = events [ type ] ) ) { handlers = events [ type ] = [ ] ; handlers . delegateCount = 0 ; if ( ! special . setup || special . setup . call ( elem , data , namespaces , eventHandle ) === false ) { if ( elem . addEventListener ) { elem . addEventListener ( type , eventHandle ) ; } } }
if ( special . add ) { special . add . call ( elem , handleObj ) ; if ( ! handleObj . handler . guid ) { handleObj . handler . guid = handler . guid ; } }
if ( selector ) { handlers . splice ( handlers . delegateCount ++ , 0 , handleObj ) ; } else { handlers . push ( handleObj ) ; }
jQuery . event . global [ type ] = true ; } } , remove : function ( elem , types , handler , selector , mappedTypes ) { var j , origCount , tmp , events , t , handleObj , special , handlers , type , namespaces , origType , elemData = dataPriv . hasData ( elem ) && dataPriv . get ( elem ) ; if ( ! elemData || ! ( events = elemData . events ) ) { return ; }
types = ( types || "" ) . match ( rnotwhite ) || [ "" ] ; t = types . length ; while ( t -- ) { tmp = rtypenamespace . exec ( types [ t ] ) || [ ] ; type = origType = tmp [ 1 ] ; namespaces = ( tmp [ 2 ] || "" ) . split ( "." ) . sort ( ) ; if ( ! type ) { for ( type in events ) { jQuery . event . remove ( elem , type + types [ t ] , handler , selector , true ) ; }
continue ; }
special = jQuery . event . special [ type ] || { } ; type = ( selector ? special . delegateType : special . bindType ) || type ; handlers = events [ type ] || [ ] ; tmp = tmp [ 2 ] && new RegExp ( "(^|\\.)" + namespaces . join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) ; 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 ) ; } } }
if ( origCount && ! handlers . length ) { if ( ! special . teardown || special . teardown . call ( elem , namespaces , elemData . handle ) === false ) { jQuery . removeEvent ( elem , type , elemData . handle ) ; }
delete events [ type ] ; } }
if ( jQuery . isEmptyObject ( events ) ) { dataPriv . remove ( elem , "handle events" ) ; } } , dispatch : function ( event ) { event = jQuery . event . fix ( event ) ; var i , j , ret , matched , handleObj , handlerQueue = [ ] , args = slice . call ( arguments ) , handlers = ( dataPriv . get ( this , "events" ) || { } ) [ event . type ] || [ ] , special = jQuery . event . special [ event . type ] || { } ; args [ 0 ] = event ; event . delegateTarget = this ; if ( special . preDispatch && special . preDispatch . call ( this , event ) === false ) { return ; }
handlerQueue = jQuery . event . handlers . call ( this , event , handlers ) ; i = 0 ; while ( ( matched = handlerQueue [ i ++ ] ) && ! event . isPropagationStopped ( ) ) { event . currentTarget = matched . elem ; j = 0 ; while ( ( handleObj = matched . handlers [ j ++ ] ) && ! event . isImmediatePropagationStopped ( ) ) { if ( ! event . rnamespace || event . rnamespace . test ( handleObj . namespace ) ) { event . handleObj = handleObj ; event . data = handleObj . data ; ret = ( ( jQuery . event . special [ handleObj . origType ] || { } ) . handle || handleObj . handler ) . apply ( matched . elem , args ) ; if ( ret !== undefined ) { if ( ( event . result = ret ) === false ) { event . preventDefault ( ) ; event . stopPropagation ( ) ; } } } } }
if ( special . postDispatch ) { special . postDispatch . call ( this , event ) ; }
return event . result ; } , handlers : function ( event , handlers ) { var i , matches , sel , handleObj , handlerQueue = [ ] , delegateCount = handlers . delegateCount , cur = event . target ; if ( delegateCount && cur . nodeType && ( event . type !== "click" || isNaN ( event . button ) || event . button < 1 ) ) { for ( ; cur !== this ; cur = cur . parentNode || this ) { if ( cur . nodeType === 1 && ( cur . disabled !== true || event . type !== "click" ) ) { matches = [ ] ; for ( i = 0 ; i < delegateCount ; i ++ ) { handleObj = handlers [ i ] ; sel = handleObj . selector + " " ; if ( matches [ sel ] === undefined ) { matches [ sel ] = handleObj . needsContext ? jQuery ( sel , this ) . index ( cur ) > - 1 : jQuery . find ( sel , this , null , [ cur ] ) . length ; }
if ( matches [ sel ] ) { matches . push ( handleObj ) ; } }
if ( matches . length ) { handlerQueue . push ( { elem : cur , handlers : matches } ) ; } } } }
if ( delegateCount < handlers . length ) { handlerQueue . push ( { elem : this , handlers : handlers . slice ( delegateCount ) } ) ; }
return handlerQueue ; } , 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 ( event , original ) { if ( event . which == null ) { event . which = original . charCode != null ? original . charCode : original . keyCode ; }
return event ; } } , mouseHooks : { props : ( "button buttons clientX clientY offsetX offsetY pageX pageY " + "screenX screenY toElement" ) . split ( " " ) , filter : function ( event , original ) { var eventDoc , doc , body , button = original . button ; 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 ) ; }
if ( ! event . which && button !== undefined ) { event . which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ) ; }
return event ; } } , fix : function ( event ) { if ( event [ jQuery . expando ] ) { return event ; }
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 jQuery . Event ( originalEvent ) ; i = copy . length ; while ( i -- ) { prop = copy [ i ] ; event [ prop ] = originalEvent [ prop ] ; }
if ( ! event . target ) { event . target = document ; }
if ( event . target . nodeType === 3 ) { event . target = event . target . parentNode ; }
return fixHook . filter ? fixHook . filter ( event , originalEvent ) : event ; } , special : { load : { noBubble : true } , focus : { trigger : function ( ) { if ( this !== safeActiveElement ( ) && this . focus ) { this . focus ( ) ; return false ; } } , delegateType : "focusin" } , blur : { trigger : function ( ) { if ( this === safeActiveElement ( ) && this . blur ) { this . blur ( ) ; return false ; } } , delegateType : "focusout" } , click : { trigger : function ( ) { if ( this . type === "checkbox" && this . click && jQuery . nodeName ( this , "input" ) ) { this . click ( ) ; return false ; } } , _default : function ( event ) { return jQuery . nodeName ( event . target , "a" ) ; } } , beforeunload : { postDispatch : function ( event ) { if ( event . result !== undefined && event . originalEvent ) { event . originalEvent . returnValue = event . result ; } } } } } ; jQuery . removeEvent = function ( elem , type , handle ) { if ( elem . removeEventListener ) { elem . removeEventListener ( type , handle ) ; } } ; jQuery . Event = function ( src , props ) { if ( ! ( this instanceof jQuery . Event ) ) { return new jQuery . Event ( src , props ) ; }
if ( src && src . type ) { this . originalEvent = src ; this . type = src . type ; this . isDefaultPrevented = src . defaultPrevented || src . defaultPrevented === undefined && src . returnValue === false ? returnTrue : returnFalse ; } else { this . type = src ; }
if ( props ) { jQuery . extend ( this , props ) ; }
this . timeStamp = src && src . timeStamp || jQuery . now ( ) ; this [ jQuery . expando ] = true ; } ; jQuery . Event . prototype = { constructor : jQuery . Event , isDefaultPrevented : returnFalse , isPropagationStopped : returnFalse , isImmediatePropagationStopped : returnFalse , preventDefault : function ( ) { var e = this . originalEvent ; this . isDefaultPrevented = returnTrue ; if ( e ) { e . preventDefault ( ) ; } } , stopPropagation : function ( ) { var e = this . originalEvent ; this . isPropagationStopped = returnTrue ; if ( e ) { e . stopPropagation ( ) ; } } , stopImmediatePropagation : function ( ) { var e = this . originalEvent ; this . isImmediatePropagationStopped = returnTrue ; if ( e ) { e . stopImmediatePropagation ( ) ; }
this . stopPropagation ( ) ; } } ; jQuery . each ( { mouseenter : "mouseover" , mouseleave : "mouseout" , pointerenter : "pointerover" , pointerleave : "pointerout" } , function ( orig , fix ) { jQuery . event . special [ orig ] = { delegateType : fix , bindType : fix , handle : function ( event ) { var ret , target = this , related = event . relatedTarget , handleObj = event . handleObj ; if ( ! related || ( related !== target && ! jQuery . contains ( target , related ) ) ) { event . type = handleObj . origType ; ret = handleObj . handler . apply ( this , arguments ) ; event . type = fix ; }
return ret ; } } ; } ) ; jQuery . fn . extend ( { on : function ( types , selector , data , fn ) { return on ( this , types , selector , data , fn ) ; } , one : function ( types , selector , data , fn ) { return on ( this , types , selector , data , fn , 1 ) ; } , off : function ( types , selector , fn ) { var handleObj , type ; if ( types && types . preventDefault && types . handleObj ) { handleObj = types . handleObj ; jQuery ( types . delegateTarget ) . off ( handleObj . namespace ? handleObj . origType + "." + handleObj . namespace : handleObj . origType , handleObj . selector , handleObj . handler ) ; return this ; }
if ( typeof types === "object" ) { for ( type in types ) { this . off ( type , selector , types [ type ] ) ; }
return this ; }
if ( selector === false || typeof selector === "function" ) { fn = selector ; selector = undefined ; }
if ( fn === false ) { fn = returnFalse ; }
return this . each ( function ( ) { jQuery . event . remove ( this , types , fn , selector ) ; } ) ; } } ) ; var
rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi , rnoInnerhtml = /<script|<style|<link/i , rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i , rscriptTypeMasked = /^true\/(.*)/ , rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g ; function manipulationTarget ( elem , content ) { return jQuery . nodeName ( elem , "table" ) && jQuery . nodeName ( content . nodeType !== 11 ? content : content . firstChild , "tr" ) ? elem . getElementsByTagName ( "tbody" ) [ 0 ] || elem . appendChild ( elem . ownerDocument . createElement ( "tbody" ) ) : elem ; }
function disableScript ( elem ) { elem . type = ( elem . getAttribute ( "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 ) { var i , l , type , pdataOld , pdataCur , udataOld , udataCur , events ; if ( dest . nodeType !== 1 ) { return ; }
if ( dataPriv . hasData ( src ) ) { pdataOld = dataPriv . access ( src ) ; pdataCur = dataPriv . set ( dest , pdataOld ) ; events = pdataOld . events ; if ( events ) { delete pdataCur . handle ; pdataCur . events = { } ; for ( type in events ) { for ( i = 0 , l = events [ type ] . length ; i < l ; i ++ ) { jQuery . event . add ( dest , type , events [ type ] [ i ] ) ; } } } }
if ( dataUser . hasData ( src ) ) { udataOld = dataUser . access ( src ) ; udataCur = jQuery . extend ( { } , udataOld ) ; dataUser . set ( dest , udataCur ) ; } }
function fixInput ( src , dest ) { var nodeName = dest . nodeName . toLowerCase ( ) ; if ( nodeName === "input" && rcheckableType . test ( src . type ) ) { dest . checked = src . checked ; } else if ( nodeName === "input" || nodeName === "textarea" ) { dest . defaultValue = src . defaultValue ; } }
function domManip ( collection , args , callback , ignored ) { args = concat . apply ( [ ] , args ) ; var fragment , first , scripts , hasScripts , node , doc , i = 0 , l = collection . length , iNoClone = l - 1 , value = args [ 0 ] , isFunction = jQuery . isFunction ( value ) ; if ( isFunction || ( l > 1 && 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 ; }
if ( first || ignored ) { scripts = jQuery . map ( getAll ( fragment , "script" ) , disableScript ) ; hasScripts = scripts . length ; for ( ; i < l ; i ++ ) { node = fragment ; if ( i !== iNoClone ) { node = jQuery . clone ( node , true , true ) ; if ( hasScripts ) { jQuery . merge ( scripts , getAll ( node , "script" ) ) ; } }
callback . call ( collection [ i ] , node , i ) ; }
if ( hasScripts ) { doc = scripts [ scripts . length - 1 ] . ownerDocument ; jQuery . map ( scripts , restoreScript ) ; for ( i = 0 ; i < hasScripts ; i ++ ) { node = scripts [ i ] ; if ( rscriptType . test ( node . type || "" ) && ! dataPriv . access ( node , "globalEval" ) && jQuery . contains ( doc , node ) ) { if ( node . src ) { if ( jQuery . _evalUrl ) { jQuery . _evalUrl ( node . src ) ; } } else { jQuery . globalEval ( node . textContent . replace ( rcleanScript , "" ) ) ; } } } } } }
return collection ; }
function remove ( elem , selector , keepData ) { var node , nodes = selector ? jQuery . filter ( selector , elem ) : elem , i = 0 ; for ( ; ( node = nodes [ i ] ) != null ; i ++ ) { if ( ! keepData && node . nodeType === 1 ) { jQuery . cleanData ( getAll ( node ) ) ; }
if ( node . parentNode ) { if ( keepData && jQuery . contains ( node . ownerDocument , node ) ) { setGlobalEval ( getAll ( node , "script" ) ) ; }
node . parentNode . removeChild ( node ) ; } }
return elem ; }
jQuery . extend ( { htmlPrefilter : function ( html ) { return html . replace ( rxhtmlTag , "<$1></$2>" ) ; } , clone : function ( elem , dataAndEvents , deepDataAndEvents ) { var i , l , srcElements , destElements , clone = elem . cloneNode ( true ) , inPage = jQuery . contains ( elem . ownerDocument , elem ) ; if ( ! support . noCloneChecked && ( elem . nodeType === 1 || elem . nodeType === 11 ) && ! jQuery . isXMLDoc ( elem ) ) { destElements = getAll ( clone ) ; srcElements = getAll ( elem ) ; for ( i = 0 , l = srcElements . length ; i < l ; i ++ ) { fixInput ( srcElements [ i ] , destElements [ i ] ) ; } }
if ( dataAndEvents ) { if ( deepDataAndEvents ) { srcElements = srcElements || getAll ( elem ) ; destElements = destElements || getAll ( clone ) ; for ( i = 0 , l = srcElements . length ; i < l ; i ++ ) { cloneCopyEvent ( srcElements [ i ] , destElements [ i ] ) ; } } else { cloneCopyEvent ( elem , clone ) ; } }
destElements = getAll ( clone , "script" ) ; if ( destElements . length > 0 ) { setGlobalEval ( destElements , ! inPage && getAll ( elem , "script" ) ) ; }
return clone ; } , cleanData : function ( elems ) { var data , elem , type , special = jQuery . event . special , i = 0 ; for ( ; ( elem = elems [ i ] ) !== undefined ; i ++ ) { if ( acceptData ( elem ) ) { if ( ( data = elem [ dataPriv . expando ] ) ) { if ( data . events ) { for ( type in data . events ) { if ( special [ type ] ) { jQuery . event . remove ( elem , type ) ; } else { jQuery . removeEvent ( elem , type , data . handle ) ; } } }
elem [ dataPriv . expando ] = undefined ; }
if ( elem [ dataUser . expando ] ) { elem [ dataUser . expando ] = undefined ; } } } } } ) ; jQuery . fn . extend ( { domManip : domManip , detach : function ( selector ) { return remove ( this , selector , true ) ; } , remove : function ( selector ) { return remove ( this , selector ) ; } , text : function ( value ) { return access ( this , function ( value ) { return value === undefined ? jQuery . text ( this ) : this . empty ( ) . each ( function ( ) { if ( this . nodeType === 1 || this . nodeType === 11 || this . nodeType === 9 ) { this . textContent = value ; } } ) ; } , null , value , arguments . length ) ; } , append : function ( ) { 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 ( ) { 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 ( ) { return domManip ( this , arguments , function ( elem ) { if ( this . parentNode ) { this . parentNode . insertBefore ( elem , this ) ; } } ) ; } , after : function ( ) { return domManip ( this , arguments , function ( elem ) { if ( this . parentNode ) { this . parentNode . insertBefore ( elem , this . nextSibling ) ; } } ) ; } , empty : function ( ) { var elem , i = 0 ; for ( ; ( elem = this [ i ] ) != null ; i ++ ) { if ( elem . nodeType === 1 ) { jQuery . cleanData ( getAll ( elem , false ) ) ; elem . textContent = "" ; } }
return this ; } , clone : function ( dataAndEvents , deepDataAndEvents ) { dataAndEvents = dataAndEvents == null ? false : dataAndEvents ; deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents ; return this . map ( function ( ) { return jQuery . clone ( this , dataAndEvents , deepDataAndEvents ) ; } ) ; } , html : function ( value ) { return access ( this , function ( value ) { var elem = this [ 0 ] || { } , i = 0 , l = this . length ; if ( value === undefined && elem . nodeType === 1 ) { return elem . innerHTML ; }
if ( typeof value === "string" && ! rnoInnerhtml . test ( value ) && ! wrapMap [ ( rtagName . exec ( value ) || [ "" , "" ] ) [ 1 ] . toLowerCase ( ) ] ) { value = jQuery . htmlPrefilter ( value ) ; try { for ( ; i < l ; i ++ ) { elem = this [ i ] || { } ; if ( elem . nodeType === 1 ) { jQuery . cleanData ( getAll ( elem , false ) ) ; elem . innerHTML = value ; } }
elem = 0 ; } catch ( e ) { } }
if ( elem ) { this . empty ( ) . append ( value ) ; } } , null , value , arguments . length ) ; } , replaceWith : function ( ) { var ignored = [ ] ; return domManip ( this , arguments , function ( elem ) { var parent = this . parentNode ; if ( jQuery . inArray ( this , ignored ) < 0 ) { jQuery . cleanData ( getAll ( this ) ) ; if ( parent ) { parent . replaceChild ( elem , this ) ; } } } , ignored ) ; } } ) ; jQuery . each ( { appendTo : "append" , prependTo : "prepend" , insertBefore : "before" , insertAfter : "after" , replaceAll : "replaceWith" } , function ( name , original ) { jQuery . fn [ name ] = function ( selector ) { var elems , ret = [ ] , insert = jQuery ( selector ) , last = insert . length - 1 , i = 0 ; for ( ; i <= last ; i ++ ) { elems = i === last ? this : this . clone ( true ) ; jQuery ( insert [ i ] ) [ original ] ( elems ) ; push . apply ( ret , elems . get ( ) ) ; }
return this . pushStack ( ret ) ; } ; } ) ; var iframe , elemdisplay = { HTML : "block" , BODY : "block" } ; function actualDisplay ( name , doc ) { var elem = jQuery ( doc . createElement ( name ) ) . appendTo ( doc . body ) , display = jQuery . css ( elem [ 0 ] , "display" ) ; elem . detach ( ) ; return display ; }
function defaultDisplay ( nodeName ) { var doc = document , display = elemdisplay [ nodeName ] ; if ( ! display ) { display = actualDisplay ( nodeName , doc ) ; if ( display === "none" || ! display ) { iframe = ( iframe || jQuery ( "<iframe frameborder='0' width='0' height='0'/>" ) ) . appendTo ( doc . documentElement ) ; doc = iframe [ 0 ] . contentDocument ; doc . write ( ) ; doc . close ( ) ; display = actualDisplay ( nodeName , doc ) ; iframe . detach ( ) ; }
elemdisplay [ nodeName ] = display ; }
return display ; }
var rmargin = ( /^margin/ ) ; var rnumnonpx = new RegExp ( "^(" + pnum + ")(?!px)[a-z%]+$" , "i" ) ; var getStyles = function ( elem ) { var view = elem . ownerDocument . defaultView ; if ( ! view || ! view . opener ) { view = window ; }
return view . getComputedStyle ( elem ) ; } ; var swap = function ( elem , options , callback , args ) { var ret , name , old = { } ; for ( name in options ) { old [ name ] = elem . style [ name ] ; elem . style [ name ] = options [ name ] ; }
ret = callback . apply ( elem , args || [ ] ) ; for ( name in options ) { elem . style [ name ] = old [ name ] ; }
return ret ; } ; var documentElement = document . documentElement ; ( function ( ) { var pixelPositionVal , boxSizingReliableVal , pixelMarginRightVal , reliableMarginLeftVal , container = document . createElement ( "div" ) , div = document . createElement ( "div" ) ; if ( ! div . style ) { return ; }
div . style . backgroundClip = "content-box" ; div . cloneNode ( true ) . style . backgroundClip = "" ; support . clearCloneStyle = div . style . backgroundClip === "content-box" ; container . style . cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + "padding:0;margin-top:1px;position:absolute" ; container . appendChild ( div ) ; function computeStyleTests ( ) { div . style . cssText = "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;" + "position:relative;display:block;" + "margin:auto;border:1px;padding:1px;" + "top:1%;width:50%" ; div . innerHTML = "" ; documentElement . appendChild ( container ) ; var divStyle = window . getComputedStyle ( div ) ; pixelPositionVal = divStyle . top !== "1%" ; reliableMarginLeftVal = divStyle . marginLeft === "2px" ; boxSizingReliableVal = divStyle . width === "4px" ; div . style . marginRight = "50%" ; pixelMarginRightVal = divStyle . marginRight === "4px" ; documentElement . removeChild ( container ) ; }
jQuery . extend ( support , { pixelPosition : function ( ) { computeStyleTests ( ) ; return pixelPositionVal ; } , boxSizingReliable : function ( ) { if ( boxSizingReliableVal == null ) { computeStyleTests ( ) ; }
return boxSizingReliableVal ; } , pixelMarginRight : function ( ) { if ( boxSizingReliableVal == null ) { computeStyleTests ( ) ; }
return pixelMarginRightVal ; } , reliableMarginLeft : function ( ) { if ( boxSizingReliableVal == null ) { computeStyleTests ( ) ; }
return reliableMarginLeftVal ; } , reliableMarginRight : function ( ) { var ret , marginDiv = div . appendChild ( document . createElement ( "div" ) ) ; marginDiv . style . cssText = div . style . cssText = "-webkit-box-sizing:content-box;box-sizing:content-box;" + "display:block;margin:0;border:0;padding:0" ; marginDiv . style . marginRight = marginDiv . style . width = "0" ; div . style . width = "1px" ; documentElement . appendChild ( container ) ; ret = ! parseFloat ( window . getComputedStyle ( marginDiv ) . marginRight ) ; documentElement . removeChild ( container ) ; div . removeChild ( marginDiv ) ; return ret ; } } ) ; } ) ( ) ; function curCSS ( elem , name , computed ) { var width , minWidth , maxWidth , ret , style = elem . style ; computed = computed || getStyles ( elem ) ; ret = computed ? computed . getPropertyValue ( name ) || computed [ name ] : undefined ; if ( ( ret === "" || ret === undefined ) && ! jQuery . contains ( elem . ownerDocument , elem ) ) { ret = jQuery . style ( elem , name ) ; }
if ( computed ) { if ( ! support . pixelMarginRight ( ) && rnumnonpx . test ( ret ) && rmargin . test ( name ) ) { width = style . width ; minWidth = style . minWidth ; maxWidth = style . maxWidth ; style . minWidth = style . maxWidth = style . width = ret ; ret = computed . width ; style . width = width ; style . minWidth = minWidth ; style . maxWidth = maxWidth ; } }
return ret !== undefined ? ret + "" : ret ; }
function addGetHookIf ( conditionFn , hookFn ) { return { get : function ( ) { if ( conditionFn ( ) ) { delete this . get ; return ; }
return ( this . get = hookFn ) . apply ( this , arguments ) ; } } ; }
var
rdisplayswap = /^(none|table(?!-c[ea]).+)/ , cssShow = { position : "absolute" , visibility : "hidden" , display : "block" } , cssNormalTransform = { letterSpacing : "0" , fontWeight : "400" } , cssPrefixes = [ "Webkit" , "O" , "Moz" , "ms" ] , emptyStyle = document . createElement ( "div" ) . style ; function vendorPropName ( name ) { if ( name in emptyStyle ) { return name ; }
var capName = name [ 0 ] . toUpperCase ( ) + name . slice ( 1 ) , i = cssPrefixes . length ; while ( i -- ) { name = cssPrefixes [ i ] + capName ; if ( name in emptyStyle ) { return name ; } } }
function setPositiveNumber ( elem , value , subtract ) { var matches = rcssNum . exec ( value ) ; return matches ? Math . max ( 0 , matches [ 2 ] - ( subtract || 0 ) ) + ( matches [ 3 ] || "px" ) : value ; }
function augmentWidthOrHeight ( elem , name , extra , isBorderBox , styles ) { var i = extra === ( isBorderBox ? "border" : "content" ) ? 4 : name === "width" ? 1 : 0 , val = 0 ; for ( ; i < 4 ; i += 2 ) { if ( extra === "margin" ) { val += jQuery . css ( elem , extra + cssExpand [ i ] , true , styles ) ; }
if ( isBorderBox ) { if ( extra === "content" ) { val -= jQuery . css ( elem , "padding" + cssExpand [ i ] , true , styles ) ; }
if ( extra !== "margin" ) { val -= jQuery . css ( elem , "border" + cssExpand [ i ] + "Width" , true , styles ) ; } } else { val += jQuery . css ( elem , "padding" + cssExpand [ i ] , true , styles ) ; if ( extra !== "padding" ) { val += jQuery . css ( elem , "border" + cssExpand [ i ] + "Width" , true , styles ) ; } } }
return val ; }
function getWidthOrHeight ( elem , name , extra ) { var valueIsBorderBox = true , val = name === "width" ? elem . offsetWidth : elem . offsetHeight , styles = getStyles ( elem ) , isBorderBox = jQuery . css ( elem , "boxSizing" , false , styles ) === "border-box" ; if ( document . msFullscreenElement && window . top !== window ) { if ( elem . getClientRects ( ) . length ) { val = Math . round ( elem . getBoundingClientRect ( ) [ name ] * 100 ) ; } }
if ( val <= 0 || val == null ) { val = curCSS ( elem , name , styles ) ; if ( val < 0 || val == null ) { val = elem . style [ name ] ; }
if ( rnumnonpx . test ( val ) ) { return val ; }
valueIsBorderBox = isBorderBox && ( support . boxSizingReliable ( ) || val === elem . style [ name ] ) ; val = parseFloat ( val ) || 0 ; }
return ( val +
augmentWidthOrHeight ( elem , name , extra || ( isBorderBox ? "border" : "content" ) , valueIsBorderBox , styles ) ) + "px" ; }
function showHide ( elements , show ) { var display , elem , hidden , values = [ ] , index = 0 , length = elements . length ; for ( ; index < length ; index ++ ) { elem = elements [ index ] ; if ( ! elem . style ) { continue ; }
values [ index ] = dataPriv . get ( elem , "olddisplay" ) ; display = elem . style . display ; if ( show ) { if ( ! values [ index ] && display === "none" ) { elem . style . display = "" ; }
if ( elem . style . display === "" && isHidden ( elem ) ) { values [ index ] = dataPriv . access ( elem , "olddisplay" , defaultDisplay ( elem . nodeName ) ) ; } } else { hidden = isHidden ( elem ) ; if ( display !== "none" || ! hidden ) { dataPriv . set ( elem , "olddisplay" , hidden ? display : jQuery . css ( elem , "display" ) ) ; } } }
for ( index = 0 ; index < length ; index ++ ) { elem = elements [ index ] ; if ( ! elem . style ) { continue ; }
if ( ! show || elem . style . display === "none" || elem . style . display === "" ) { elem . style . display = show ? values [ index ] || "" : "none" ; } }
return elements ; }
jQuery . extend ( { cssHooks : { opacity : { get : function ( elem , computed ) { if ( computed ) { var ret = curCSS ( elem , "opacity" ) ; return ret === "" ? "1" : ret ; } } } } , cssNumber : { "animationIterationCount" : true , "columnCount" : true , "fillOpacity" : true , "flexGrow" : true , "flexShrink" : true , "fontWeight" : true , "lineHeight" : true , "opacity" : true , "order" : true , "orphans" : true , "widows" : true , "zIndex" : true , "zoom" : true } , cssProps : { "float" : "cssFloat" } , style : function ( elem , name , value , extra ) { if ( ! elem || elem . nodeType === 3 || elem . nodeType === 8 || ! elem . style ) { return ; }
var ret , type , hooks , origName = jQuery . camelCase ( name ) , style = elem . style ; name = jQuery . cssProps [ origName ] || ( jQuery . cssProps [ origName ] = vendorPropName ( origName ) || origName ) ; hooks = jQuery . cssHooks [ name ] || jQuery . cssHooks [ origName ] ; if ( value !== undefined ) { type = typeof value ; if ( type === "string" && ( ret = rcssNum . exec ( value ) ) && ret [ 1 ] ) { value = adjustCSS ( elem , name , ret ) ; type = "number" ; }
if ( value == null || value !== value ) { return ; }
if ( type === "number" ) { value += ret && ret [ 3 ] || ( jQuery . cssNumber [ origName ] ? "" : "px" ) ; }
if ( ! support . clearCloneStyle && value === "" && name . indexOf ( "background" ) === 0 ) { style [ name ] = "inherit" ; }
if ( ! hooks || ! ( "set" in hooks ) || ( value = hooks . set ( elem , value , extra ) ) !== undefined ) { style [ name ] = value ; } } else { if ( hooks && "get" in hooks && ( ret = hooks . get ( elem , false , extra ) ) !== undefined ) { return ret ; }
return style [ name ] ; } } , css : function ( elem , name , extra , styles ) { var val , num , hooks , origName = jQuery . camelCase ( name ) ; name = jQuery . cssProps [ origName ] || ( jQuery . cssProps [ origName ] = vendorPropName ( origName ) || origName ) ; hooks = jQuery . cssHooks [ name ] || jQuery . cssHooks [ origName ] ; if ( hooks && "get" in hooks ) { val = hooks . get ( elem , true , extra ) ; }
if ( val === undefined ) { val = curCSS ( elem , name , styles ) ; }
if ( val === "normal" && name in cssNormalTransform ) { val = cssNormalTransform [ name ] ; }
if ( extra === "" || extra ) { num = parseFloat ( val ) ; return extra === true || isFinite ( num ) ? num || 0 : val ; }
return val ; } } ) ; jQuery . each ( [ "height" , "width" ] , function ( i , name ) { jQuery . cssHooks [ name ] = { get : function ( elem , computed , extra ) { if ( computed ) { return rdisplayswap . test ( jQuery . css ( elem , "display" ) ) && elem . offsetWidth === 0 ? swap ( elem , cssShow , function ( ) { return getWidthOrHeight ( elem , name , extra ) ; } ) : getWidthOrHeight ( elem , name , extra ) ; } } , set : function ( elem , value , extra ) { var matches , styles = extra && getStyles ( elem ) , subtract = extra && augmentWidthOrHeight ( elem , name , extra , jQuery . css ( elem , "boxSizing" , false , styles ) === "border-box" , styles ) ; if ( subtract && ( matches = rcssNum . exec ( value ) ) && ( matches [ 3 ] || "px" ) !== "px" ) { elem . style [ name ] = value ; value = jQuery . css ( elem , name ) ; }
return setPositiveNumber ( elem , value , subtract ) ; } } ; } ) ; jQuery . cssHooks . marginLeft = addGetHookIf ( support . reliableMarginLeft , function ( elem , computed ) { if ( computed ) { return ( parseFloat ( curCSS ( elem , "marginLeft" ) ) || elem . getBoundingClientRect ( ) . left -
swap ( elem , { marginLeft : 0 } , function ( ) { return elem . getBoundingClientRect ( ) . left ; } ) ) + "px" ; } } ) ; jQuery . cssHooks . marginRight = addGetHookIf ( support . reliableMarginRight , function ( elem , computed ) { if ( computed ) { return swap ( elem , { "display" : "inline-block" } , curCSS , [ elem , "marginRight" ] ) ; } } ) ; jQuery . each ( { margin : "" , padding : "" , border : "Width" } , function ( prefix , suffix ) { jQuery . cssHooks [ prefix + suffix ] = { expand : function ( value ) { var i = 0 , expanded = { } , parts = typeof value === "string" ? value . split ( " " ) : [ value ] ; for ( ; i < 4 ; i ++ ) { expanded [ prefix + cssExpand [ i ] + suffix ] = parts [ i ] || parts [ i - 2 ] || parts [ 0 ] ; }
return expanded ; } } ; if ( ! rmargin . test ( prefix ) ) { jQuery . cssHooks [ prefix + suffix ] . set = setPositiveNumber ; } } ) ; jQuery . fn . extend ( { css : function ( name , value ) { return access ( this , function ( elem , name , value ) { var styles , len , map = { } , i = 0 ; if ( jQuery . isArray ( name ) ) { styles = getStyles ( elem ) ; len = name . length ; for ( ; i < len ; i ++ ) { map [ name [ i ] ] = jQuery . css ( elem , name [ i ] , false , styles ) ; }
return map ; }
return value !== undefined ? jQuery . style ( elem , name , value ) : jQuery . css ( elem , name ) ; } , name , value , arguments . length > 1 ) ; } , show : function ( ) { return showHide ( this , true ) ; } , hide : function ( ) { return showHide ( this ) ; } , toggle : function ( state ) { if ( typeof state === "boolean" ) { return state ? this . show ( ) : this . hide ( ) ; }
return this . each ( function ( ) { if ( isHidden ( this ) ) { jQuery ( this ) . show ( ) ; } else { jQuery ( this ) . hide ( ) ; } } ) ; } } ) ; function Tween ( elem , options , prop , end , easing ) { return new Tween . prototype . init ( elem , options , prop , end , easing ) ; }
jQuery . Tween = Tween ; Tween . prototype = { constructor : Tween , init : function ( elem , options , prop , end , easing , unit ) { this . elem = elem ; this . prop = prop ; this . easing = easing || jQuery . easing . _default ; this . options = options ; this . start = this . now = this . cur ( ) ; this . end = end ; this . unit = unit || ( jQuery . cssNumber [ prop ] ? "" : "px" ) ; } , cur : function ( ) { var hooks = Tween . propHooks [ this . prop ] ; return hooks && hooks . get ? hooks . get ( this ) : Tween . propHooks . _default . get ( this ) ; } , run : function ( percent ) { var eased , hooks = Tween . propHooks [ this . prop ] ; if ( this . options . duration ) { this . pos = eased = jQuery . easing [ this . easing ] ( percent , this . options . duration * percent , 0 , 1 , this . options . duration ) ; } else { this . pos = eased = percent ; }
this . now = ( this . end - this . start ) * eased + this . start ; if ( this . options . step ) { this . options . step . call ( this . elem , this . now , this ) ; }
if ( hooks && hooks . set ) { hooks . set ( this ) ; } else { Tween . propHooks . _default . set ( this ) ; }
return this ; } } ; Tween . prototype . init . prototype = Tween . prototype ; Tween . propHooks = { _default : { get : function ( tween ) { var result ; if ( tween . elem . nodeType !== 1 || tween . elem [ tween . prop ] != null && tween . elem . style [ tween . prop ] == null ) { return tween . elem [ tween . prop ] ; }
result = jQuery . css ( tween . elem , tween . prop , "" ) ; return ! result || result === "auto" ? 0 : result ; } , set : function ( tween ) { if ( jQuery . fx . step [ tween . prop ] ) { jQuery . fx . step [ tween . prop ] ( tween ) ; } else if ( tween . elem . nodeType === 1 && ( tween . elem . style [ jQuery . cssProps [ tween . prop ] ] != null || jQuery . cssHooks [ tween . prop ] ) ) { jQuery . style ( tween . elem , tween . prop , tween . now + tween . unit ) ; } else { tween . elem [ tween . prop ] = tween . now ; } } } } ; Tween . propHooks . scrollTop = Tween . propHooks . scrollLeft = { set : function ( tween ) { if ( tween . elem . nodeType && tween . elem . parentNode ) { tween . elem [ tween . prop ] = tween . now ; } } } ; jQuery . easing = { linear : function ( p ) { return p ; } , swing : function ( p ) { return 0.5 - Math . cos ( p * Math . PI ) / 2 ; } , _default : "swing" } ; jQuery . fx = Tween . prototype . init ; jQuery . fx . step = { } ; var
fxNow , timerId , rfxtypes = /^(?:toggle|show|hide)$/ , rrun = /queueHooks$/ ; function createFxNow ( ) { window . setTimeout ( function ( ) { fxNow = undefined ; } ) ; return ( fxNow = jQuery . now ( ) ) ; }
function genFx ( type , includeWidth ) { var which , i = 0 , attrs = { height : type } ; includeWidth = includeWidth ? 1 : 0 ; for ( ; i < 4 ; i += 2 - includeWidth ) { which = cssExpand [ i ] ; attrs [ "margin" + which ] = attrs [ "padding" + which ] = type ; }
if ( includeWidth ) { attrs . opacity = attrs . width = type ; }
return attrs ; }
function createTween ( value , prop , animation ) { var tween , collection = ( Animation . tweeners [ prop ] || [ ] ) . concat ( Animation . tweeners [ "*" ] ) , index = 0 , length = collection . length ; for ( ; index < length ; index ++ ) { if ( ( tween = collection [ index ] . call ( animation , prop , value ) ) ) { return tween ; } } }
function defaultPrefilter ( elem , props , opts ) { var prop , value , toggle , tween , hooks , oldfire , display , checkDisplay , anim = this , orig = { } , style = elem . style , hidden = elem . nodeType && isHidden ( elem ) , dataShow = dataPriv . get ( elem , "fxshow" ) ; if ( ! opts . queue ) { hooks = jQuery . _queueHooks ( elem , "fx" ) ; if ( hooks . unqueued == null ) { hooks . unqueued = 0 ; oldfire = hooks . empty . fire ; hooks . empty . fire = function ( ) { if ( ! hooks . unqueued ) { oldfire ( ) ; } } ; }
hooks . unqueued ++ ; anim . always ( function ( ) { anim . always ( function ( ) { hooks . unqueued -- ; if ( ! jQuery . queue ( elem , "fx" ) . length ) { hooks . empty . fire ( ) ; } } ) ; } ) ; }
if ( elem . nodeType === 1 && ( "height" in props || "width" in props ) ) { opts . overflow = [ style . overflow , style . overflowX , style . overflowY ] ; display = jQuery . css ( elem , "display" ) ; checkDisplay = display === "none" ? dataPriv . get ( elem , "olddisplay" ) || defaultDisplay ( elem . nodeName ) : display ; if ( checkDisplay === "inline" && jQuery . css ( elem , "float" ) === "none" ) { style . display = "inline-block" ; } }
if ( opts . overflow ) { style . overflow = "hidden" ; anim . always ( function ( ) { style . overflow = opts . overflow [ 0 ] ; style . overflowX = opts . overflow [ 1 ] ; style . overflowY = opts . overflow [ 2 ] ; } ) ; }
for ( prop in props ) { value = props [ prop ] ; if ( rfxtypes . exec ( value ) ) { delete props [ prop ] ; toggle = toggle || value === "toggle" ; if ( value === ( hidden ? "hide" : "show" ) ) { if ( value === "show" && dataShow && dataShow [ prop ] !== undefined ) { hidden = true ; } else { continue ; } }
orig [ prop ] = dataShow && dataShow [ prop ] || jQuery . style ( elem , prop ) ; } else { display = undefined ; } }
if ( ! jQuery . isEmptyObject ( orig ) ) { if ( dataShow ) { if ( "hidden" in dataShow ) { hidden = dataShow . hidden ; } } else { dataShow = dataPriv . access ( elem , "fxshow" , { } ) ; }
if ( toggle ) { dataShow . hidden = ! hidden ; }
if ( hidden ) { jQuery ( elem ) . show ( ) ; } else { anim . done ( function ( ) { jQuery ( elem ) . hide ( ) ; } ) ; }
anim . done ( function ( ) { var prop ; dataPriv . remove ( elem , "fxshow" ) ; for ( prop in orig ) { jQuery . style ( elem , prop , orig [ prop ] ) ; } } ) ; for ( prop in orig ) { tween = createTween ( hidden ? dataShow [ prop ] : 0 , prop , anim ) ; if ( ! ( prop in dataShow ) ) { dataShow [ prop ] = tween . start ; if ( hidden ) { tween . end = tween . start ; tween . start = prop === "width" || prop === "height" ? 1 : 0 ; } } } } else if ( ( display === "none" ? defaultDisplay ( elem . nodeName ) : display ) === "inline" ) { style . display = display ; } }
function propFilter ( props , specialEasing ) { var index , name , easing , value , hooks ; for ( index in props ) { name = jQuery . camelCase ( index ) ; easing = specialEasing [ name ] ; value = props [ index ] ; if ( jQuery . isArray ( value ) ) { easing = value [ 1 ] ; value = props [ index ] = value [ 0 ] ; }
if ( index !== name ) { props [ name ] = value ; delete props [ index ] ; }
hooks = jQuery . cssHooks [ name ] ; if ( hooks && "expand" in hooks ) { value = hooks . expand ( value ) ; delete props [ name ] ; for ( index in value ) { if ( ! ( index in props ) ) { props [ index ] = value [ index ] ; specialEasing [ index ] = easing ; } } } else { specialEasing [ name ] = easing ; } } }
function Animation ( elem , properties , options ) { var result , stopped , index = 0 , length = Animation . prefilters . length , deferred = jQuery . Deferred ( ) . always ( function ( ) { delete tick . elem ; } ) , tick = function ( ) { if ( stopped ) { return false ; }
var currentTime = fxNow || createFxNow ( ) , remaining = Math . max ( 0 , animation . startTime + animation . duration - currentTime ) , temp = remaining / animation . duration || 0 , percent = 1 - temp , index = 0 , length = animation . tweens . length ; for ( ; index < length ; index ++ ) { animation . tweens [ index ] . run ( percent ) ; }
deferred . notifyWith ( elem , [ animation , percent , remaining ] ) ; if ( percent < 1 && length ) { return remaining ; } else { deferred . resolveWith ( elem , [ animation ] ) ; return false ; } } , animation = deferred . promise ( { elem : elem , props : jQuery . extend ( { } , properties ) , opts : jQuery . extend ( true , { specialEasing : { } , easing : jQuery . easing . _default } , options ) , originalProperties : properties , originalOptions : options , startTime : fxNow || createFxNow ( ) , duration : options . duration , tweens : [ ] , createTween : function ( prop , end ) { var tween = jQuery . Tween ( elem , animation . opts , prop , end , animation . opts . specialEasing [ prop ] || animation . opts . easing ) ; animation . tweens . push ( tween ) ; return tween ; } , stop : function ( gotoEnd ) { var index = 0 , length = gotoEnd ? animation . tweens . length : 0 ; if ( stopped ) { return this ; }
stopped = true ; for ( ; index < length ; index ++ ) { animation . tweens [ index ] . run ( 1 ) ; }
if ( gotoEnd ) { deferred . notifyWith ( elem , [ animation , 1 , 0 ] ) ; deferred . resolveWith ( elem , [ animation , gotoEnd ] ) ; } else { deferred . rejectWith ( elem , [ animation , gotoEnd ] ) ; }
return this ; } } ) , props = animation . props ; propFilter ( props , animation . opts . specialEasing ) ; for ( ; index < length ; index ++ ) { result = Animation . prefilters [ index ] . call ( animation , elem , props , animation . opts ) ; if ( result ) { if ( jQuery . isFunction ( result . stop ) ) { jQuery . _queueHooks ( animation . elem , animation . opts . queue ) . stop = jQuery . proxy ( result . stop , result ) ; }
return result ; } }
jQuery . map ( props , createTween , animation ) ; if ( jQuery . isFunction ( animation . opts . start ) ) { animation . opts . start . call ( elem , animation ) ; }
jQuery . fx . timer ( jQuery . extend ( tick , { elem : elem , anim : animation , queue : animation . opts . queue } ) ) ; return animation . progress ( animation . opts . progress ) . done ( animation . opts . done , animation . opts . complete ) . fail ( animation . opts . fail ) . always ( animation . opts . always ) ; }
jQuery . Animation = jQuery . extend ( Animation , { tweeners : { "*" : [ function ( prop , value ) { var tween = this . createTween ( prop , value ) ; adjustCSS ( tween . elem , prop , rcssNum . exec ( value ) , tween ) ; return tween ; } ] } , tweener : function ( props , callback ) { if ( jQuery . isFunction ( props ) ) { callback = props ; props = [ "*" ] ; } else { props = props . match ( rnotwhite ) ; }
var prop , index = 0 , length = props . length ; for ( ; index < length ; index ++ ) { prop = props [ index ] ; Animation . tweeners [ prop ] = Animation . tweeners [ prop ] || [ ] ; Animation . tweeners [ prop ] . unshift ( callback ) ; } } , prefilters : [ defaultPrefilter ] , prefilter : function ( callback , prepend ) { if ( prepend ) { Animation . prefilters . unshift ( callback ) ; } else { Animation . prefilters . push ( callback ) ; } } } ) ; jQuery . speed = function ( speed , easing , fn ) { var opt = speed && typeof speed === "object" ? jQuery . extend ( { } , speed ) : { complete : fn || ! fn && easing || jQuery . isFunction ( speed ) && speed , duration : speed , easing : fn && easing || easing && ! jQuery . isFunction ( easing ) && easing } ; opt . duration = jQuery . fx . off ? 0 : typeof opt . duration === "number" ? opt . duration : opt . duration in jQuery . fx . speeds ? jQuery . fx . speeds [ opt . duration ] : jQuery . fx . speeds . _default ; if ( opt . queue == null || opt . queue === true ) { opt . queue = "fx" ; }
opt . old = opt . complete ; opt . complete = function ( ) { if ( jQuery . isFunction ( opt . old ) ) { opt . old . call ( this ) ; }
if ( opt . queue ) { jQuery . dequeue ( this , opt . queue ) ; } } ; return opt ; } ; jQuery . fn . extend ( { fadeTo : function ( speed , to , easing , callback ) { return this . filter ( isHidden ) . css ( "opacity" , 0 ) . show ( ) . end ( ) . animate ( { opacity : to } , speed , easing , callback ) ; } , animate : function ( prop , speed , easing , callback ) { var empty = jQuery . isEmptyObject ( prop ) , optall = jQuery . speed ( speed , easing , callback ) , doAnimation = function ( ) { var anim = Animation ( this , jQuery . extend ( { } , prop ) , optall ) ; if ( empty || dataPriv . get ( this , "finish" ) ) { anim . stop ( true ) ; } } ; doAnimation . finish = doAnimation ; return empty || optall . queue === false ? this . each ( doAnimation ) : this . queue ( optall . queue , doAnimation ) ; } , stop : function ( type , clearQueue , gotoEnd ) { var stopQueue = function ( hooks ) { var stop = hooks . stop ; delete hooks . stop ; stop ( gotoEnd ) ; } ; if ( typeof type !== "string" ) { gotoEnd = clearQueue ; clearQueue = type ; type = undefined ; }
if ( clearQueue && type !== false ) { this . queue ( type || "fx" , [ ] ) ; }
return this . each ( function ( ) { var dequeue = true , index = type != null && type + "queueHooks" , timers = jQuery . timers , data = dataPriv . get ( this ) ; if ( index ) { if ( data [ index ] && data [ index ] . stop ) { stopQueue ( data [ index ] ) ; } } else { for ( index in data ) { if ( data [ index ] && data [ index ] . stop && rrun . test ( index ) ) { stopQueue ( data [ index ] ) ; } } }
for ( index = timers . length ; index -- ; ) { if ( timers [ index ] . elem === this && ( type == null || timers [ index ] . queue === type ) ) { timers [ index ] . anim . stop ( gotoEnd ) ; dequeue = false ; timers . splice ( index , 1 ) ; } }
if ( dequeue || ! gotoEnd ) { jQuery . dequeue ( this , type ) ; } } ) ; } , finish : function ( type ) { if ( type !== false ) { type = type || "fx" ; }
return this . each ( function ( ) { var index , data = dataPriv . get ( this ) , queue = data [ type + "queue" ] , hooks = data [ type + "queueHooks" ] , timers = jQuery . timers , length = queue ? queue . length : 0 ; data . finish = true ; jQuery . queue ( this , type , [ ] ) ; if ( hooks && hooks . stop ) { hooks . stop . call ( this , true ) ; }
for ( index = timers . length ; index -- ; ) { if ( timers [ index ] . elem === this && timers [ index ] . queue === type ) { timers [ index ] . anim . stop ( true ) ; timers . splice ( index , 1 ) ; } }
for ( index = 0 ; index < length ; index ++ ) { if ( queue [ index ] && queue [ index ] . finish ) { queue [ index ] . finish . call ( this ) ; } }
delete data . finish ; } ) ; } } ) ; jQuery . each ( [ "toggle" , "show" , "hide" ] , function ( i , name ) { var cssFn = jQuery . fn [ name ] ; jQuery . fn [ name ] = function ( speed , easing , callback ) { return speed == null || typeof speed === "boolean" ? cssFn . apply ( this , arguments ) : this . animate ( genFx ( name , true ) , speed , easing , callback ) ; } ; } ) ; jQuery . each ( { slideDown : genFx ( "show" ) , slideUp : genFx ( "hide" ) , slideToggle : genFx ( "toggle" ) , fadeIn : { opacity : "show" } , fadeOut : { opacity : "hide" } , fadeToggle : { opacity : "toggle" } } , function ( name , props ) { jQuery . fn [ name ] = function ( speed , easing , callback ) { return this . animate ( props , speed , easing , callback ) ; } ; } ) ; jQuery . timers = [ ] ; jQuery . fx . tick = function ( ) { var timer , i = 0 , timers = jQuery . timers ; fxNow = jQuery . now ( ) ; for ( ; i < timers . length ; i ++ ) { timer = timers [ i ] ; if ( ! timer ( ) && timers [ i ] === timer ) { timers . splice ( i -- , 1 ) ; } }
if ( ! timers . length ) { jQuery . fx . stop ( ) ; }
fxNow = undefined ; } ; jQuery . fx . timer = function ( timer ) { jQuery . timers . push ( timer ) ; if ( timer ( ) ) { jQuery . fx . start ( ) ; } else { jQuery . timers . pop ( ) ; } } ; jQuery . fx . interval = 13 ; jQuery . fx . start = function ( ) { if ( ! timerId ) { timerId = window . setInterval ( jQuery . fx . tick , jQuery . fx . interval ) ; } } ; jQuery . fx . stop = function ( ) { window . clearInterval ( timerId ) ; timerId = null ; } ; jQuery . fx . speeds = { slow : 600 , fast : 200 , _default : 400 } ; jQuery . fn . delay = function ( time , type ) { time = jQuery . fx ? jQuery . fx . speeds [ time ] || time : time ; type = type || "fx" ; return this . queue ( type , function ( next , hooks ) { var timeout = window . setTimeout ( next , time ) ; hooks . stop = function ( ) { window . clearTimeout ( timeout ) ; } ; } ) ; } ; ( function ( ) { var input = document . createElement ( "input" ) , select = document . createElement ( "select" ) , opt = select . appendChild ( document . createElement ( "option" ) ) ; input . type = "checkbox" ; support . checkOn = input . value !== "" ; support . optSelected = opt . selected ; select . disabled = true ; support . optDisabled = ! opt . disabled ; input = document . createElement ( "input" ) ; input . value = "t" ; input . type = "radio" ; support . radioValue = input . value === "t" ; } ) ( ) ; var boolHook , attrHandle = jQuery . expr . attrHandle ; jQuery . fn . extend ( { attr : function ( name , value ) { return access ( this , jQuery . attr , name , value , arguments . length > 1 ) ; } , removeAttr : function ( name ) { return this . each ( function ( ) { jQuery . removeAttr ( this , name ) ; } ) ; } } ) ; jQuery . extend ( { attr : function ( elem , name , value ) { var ret , hooks , nType = elem . nodeType ; if ( nType === 3 || nType === 8 || nType === 2 ) { return ; }
if ( typeof elem . getAttribute === "undefined" ) { return jQuery . prop ( elem , name , value ) ; }
if ( nType !== 1 || ! jQuery . isXMLDoc ( elem ) ) { name = name . toLowerCase ( ) ; hooks = jQuery . attrHooks [ name ] || ( jQuery . expr . match . bool . test ( name ) ? boolHook : undefined ) ; }
if ( value !== undefined ) { if ( value === null ) { jQuery . removeAttr ( elem , name ) ; return ; }
if ( hooks && "set" in hooks && ( ret = hooks . set ( elem , value , name ) ) !== undefined ) { return ret ; }
elem . setAttribute ( name , value + "" ) ; return value ; }
if ( hooks && "get" in hooks && ( ret = hooks . get ( elem , name ) ) !== null ) { return ret ; }
ret = jQuery . find . attr ( elem , name ) ; return ret == null ? undefined : ret ; } , attrHooks : { type : { set : function ( elem , value ) { if ( ! support . radioValue && value === "radio" && jQuery . nodeName ( elem , "input" ) ) { var val = elem . value ; elem . setAttribute ( "type" , value ) ; if ( val ) { elem . value = val ; }
return value ; } } } } , removeAttr : function ( elem , value ) { var name , propName , i = 0 , attrNames = value && value . match ( rnotwhite ) ; if ( attrNames && elem . nodeType === 1 ) { while ( ( name = attrNames [ i ++ ] ) ) { propName = jQuery . propFix [ name ] || name ; if ( jQuery . expr . match . bool . test ( name ) ) { elem [ propName ] = false ; }
elem . removeAttribute ( name ) ; } } } } ) ; boolHook = { set : function ( elem , value , name ) { if ( value === false ) { jQuery . removeAttr ( elem , name ) ; } else { elem . setAttribute ( name , name ) ; }
return name ; } } ; jQuery . each ( jQuery . expr . match . bool . source . match ( /\w+/g ) , function ( i , name ) { var getter = attrHandle [ name ] || jQuery . find . attr ; attrHandle [ name ] = function ( elem , name , isXML ) { var ret , handle ; if ( ! isXML ) { handle = attrHandle [ name ] ; attrHandle [ name ] = ret ; ret = getter ( elem , name , isXML ) != null ? name . toLowerCase ( ) : null ; attrHandle [ name ] = handle ; }
return ret ; } ; } ) ; var rfocusable = /^(?:input|select|textarea|button)$/i , rclickable = /^(?:a|area)$/i ; jQuery . fn . extend ( { prop : function ( name , value ) { return access ( this , jQuery . prop , name , value , arguments . length > 1 ) ; } , removeProp : function ( name ) { return this . each ( function ( ) { delete this [ jQuery . propFix [ name ] || name ] ; } ) ; } } ) ; jQuery . extend ( { prop : function ( elem , name , value ) { var ret , hooks , nType = elem . nodeType ; if ( nType === 3 || nType === 8 || nType === 2 ) { return ; }
if ( nType !== 1 || ! jQuery . isXMLDoc ( elem ) ) { name = jQuery . propFix [ name ] || name ; hooks = jQuery . propHooks [ name ] ; }
if ( value !== undefined ) { if ( hooks && "set" in hooks && ( ret = hooks . set ( elem , value , name ) ) !== undefined ) { return ret ; }
return ( elem [ name ] = value ) ; }
if ( hooks && "get" in hooks && ( ret = hooks . get ( elem , name ) ) !== null ) { return ret ; }
return elem [ name ] ; } , propHooks : { tabIndex : { get : function ( elem ) { var tabindex = jQuery . find . attr ( elem , "tabindex" ) ; return tabindex ? parseInt ( tabindex , 10 ) : rfocusable . test ( elem . nodeName ) || rclickable . test ( elem . nodeName ) && elem . href ? 0 : - 1 ; } } } , propFix : { "for" : "htmlFor" , "class" : "className" } } ) ; if ( ! support . optSelected ) { jQuery . propHooks . selected = { get : function ( elem ) { var parent = elem . parentNode ; if ( parent && parent . parentNode ) { parent . parentNode . selectedIndex ; }
return null ; } , set : function ( elem ) { var parent = elem . parentNode ; if ( parent ) { parent . selectedIndex ; if ( parent . parentNode ) { parent . parentNode . selectedIndex ; } } } } ; }
jQuery . each ( [ "tabIndex" , "readOnly" , "maxLength" , "cellSpacing" , "cellPadding" , "rowSpan" , "colSpan" , "useMap" , "frameBorder" , "contentEditable" ] , function ( ) { jQuery . propFix [ this . toLowerCase ( ) ] = this ; } ) ; var rclass = /[\t\r\n\f]/g ; function getClass ( elem ) { return elem . getAttribute && elem . getAttribute ( "class" ) || "" ; }
jQuery . fn . extend ( { addClass : function ( value ) { var classes , elem , cur , curValue , clazz , j , finalValue , i = 0 ; if ( jQuery . isFunction ( value ) ) { return this . each ( function ( j ) { jQuery ( this ) . addClass ( value . call ( this , j , getClass ( this ) ) ) ; } ) ; }
if ( typeof value === "string" && value ) { classes = value . match ( rnotwhite ) || [ ] ; while ( ( elem = this [ i ++ ] ) ) { curValue = getClass ( elem ) ; cur = elem . nodeType === 1 && ( " " + curValue + " " ) . replace ( rclass , " " ) ; if ( cur ) { j = 0 ; while ( ( clazz = classes [ j ++ ] ) ) { if ( cur . indexOf ( " " + clazz + " " ) < 0 ) { cur += clazz + " " ; } }
finalValue = jQuery . trim ( cur ) ; if ( curValue !== finalValue ) { elem . setAttribute ( "class" , finalValue ) ; } } } }
return this ; } , removeClass : function ( value ) { var classes , elem , cur , curValue , clazz , j , finalValue , i = 0 ; if ( jQuery . isFunction ( value ) ) { return this . each ( function ( j ) { jQuery ( this ) . removeClass ( value . call ( this , j , getClass ( this ) ) ) ; } ) ; }
if ( ! arguments . length ) { return this . attr ( "class" , "" ) ; }
if ( typeof value === "string" && value ) { classes = value . match ( rnotwhite ) || [ ] ; while ( ( elem = this [ i ++ ] ) ) { curValue = getClass ( elem ) ; cur = elem . nodeType === 1 && ( " " + curValue + " " ) . replace ( rclass , " " ) ; if ( cur ) { j = 0 ; while ( ( clazz = classes [ j ++ ] ) ) { while ( cur . indexOf ( " " + clazz + " " ) > - 1 ) { cur = cur . replace ( " " + clazz + " " , " " ) ; } }
finalValue = jQuery . trim ( cur ) ; if ( curValue !== finalValue ) { elem . setAttribute ( "class" , finalValue ) ; } } } }
return this ; } , toggleClass : function ( value , stateVal ) { var type = typeof value ; if ( typeof stateVal === "boolean" && type === "string" ) { return stateVal ? this . addClass ( value ) : this . removeClass ( value ) ; }
if ( jQuery . isFunction ( value ) ) { return this . each ( function ( i ) { jQuery ( this ) . toggleClass ( value . call ( this , i , getClass ( this ) , stateVal ) , stateVal ) ; } ) ; }
return this . each ( function ( ) { var className , i , self , classNames ; if ( type === "string" ) { i = 0 ; self = jQuery ( this ) ; classNames = value . match ( rnotwhite ) || [ ] ; while ( ( className = classNames [ i ++ ] ) ) { if ( self . hasClass ( className ) ) { self . removeClass ( className ) ; } else { self . addClass ( className ) ; } } } else if ( value === undefined || type === "boolean" ) { className = getClass ( this ) ; if ( className ) { dataPriv . set ( this , "__className__" , className ) ; }
if ( this . setAttribute ) { this . setAttribute ( "class" , className || value === false ? "" : dataPriv . get ( this , "__className__" ) || "" ) ; } } } ) ; } , hasClass : function ( selector ) { var className , elem , i = 0 ; className = " " + selector + " " ; while ( ( elem = this [ i ++ ] ) ) { if ( elem . nodeType === 1 && ( " " + getClass ( elem ) + " " ) . replace ( rclass , " " ) . indexOf ( className ) > - 1 ) { return true ; } }
return false ; } } ) ; var rreturn = /\r/g , rspaces = /[\x20\t\r\n\f]+/g ; jQuery . fn . extend ( { val : function ( value ) { var hooks , ret , isFunction , elem = this [ 0 ] ; if ( ! arguments . length ) { if ( elem ) { hooks = jQuery . valHooks [ elem . type ] || jQuery . valHooks [ elem . nodeName . toLowerCase ( ) ] ; if ( hooks && "get" in hooks && ( ret = hooks . get ( elem , "value" ) ) !== undefined ) { return ret ; }
ret = elem . value ; return typeof ret === "string" ? ret . replace ( rreturn , "" ) : ret == null ? "" : ret ; }
return ; }
isFunction = jQuery . isFunction ( value ) ; return this . each ( function ( i ) { var val ; if ( this . nodeType !== 1 ) { return ; }
if ( isFunction ) { val = value . call ( this , i , jQuery ( this ) . val ( ) ) ; } else { val = value ; }
if ( val == null ) { val = "" ; } else if ( typeof val === "number" ) { val += "" ; } else if ( jQuery . isArray ( val ) ) { val = jQuery . map ( val , function ( value ) { return value == null ? "" : value + "" ; } ) ; }
hooks = jQuery . valHooks [ this . type ] || jQuery . valHooks [ this . nodeName . toLowerCase ( ) ] ; if ( ! hooks || ! ( "set" in hooks ) || hooks . set ( this , val , "value" ) === undefined ) { this . value = val ; } } ) ; } } ) ; jQuery . extend ( { valHooks : { option : { get : function ( elem ) { var val = jQuery . find . attr ( elem , "value" ) ; return val != null ? val : jQuery . trim ( jQuery . text ( elem ) ) . replace ( rspaces , " " ) ; } } , select : { get : function ( elem ) { var value , option , options = elem . options , index = elem . selectedIndex , one = elem . type === "select-one" || index < 0 , values = one ? null : [ ] , max = one ? index + 1 : options . length , i = index < 0 ? max : one ? index : 0 ; for ( ; i < max ; i ++ ) { option = options [ i ] ; if ( ( option . selected || i === index ) && ( support . optDisabled ? ! option . disabled : option . getAttribute ( "disabled" ) === null ) && ( ! option . parentNode . disabled || ! jQuery . nodeName ( option . parentNode , "optgroup" ) ) ) { value = jQuery ( option ) . val ( ) ; if ( one ) { return value ; }
values . push ( value ) ; } }
return values ; } , set : function ( elem , value ) { var optionSet , option , options = elem . options , values = jQuery . makeArray ( value ) , i = options . length ; while ( i -- ) { option = options [ i ] ; if ( option . selected = jQuery . inArray ( jQuery . valHooks . option . get ( option ) , values ) > - 1 ) { optionSet = true ; } }
if ( ! optionSet ) { elem . selectedIndex = - 1 ; }
return values ; } } } } ) ; jQuery . each ( [ "radio" , "checkbox" ] , function ( ) { jQuery . valHooks [ this ] = { set : function ( elem , value ) { if ( jQuery . isArray ( value ) ) { return ( elem . checked = jQuery . inArray ( jQuery ( elem ) . val ( ) , value ) > - 1 ) ; } } } ; if ( ! support . checkOn ) { jQuery . valHooks [ this ] . get = function ( elem ) { return elem . getAttribute ( "value" ) === null ? "on" : elem . value ; } ; } } ) ; var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/ ; jQuery . extend ( jQuery . event , { trigger : function ( event , data , elem , onlyHandlers ) { var i , cur , tmp , bubbleType , ontype , handle , special , eventPath = [ elem || document ] , type = hasOwn . call ( event , "type" ) ? event . type : event , namespaces = hasOwn . call ( event , "namespace" ) ? event . namespace . split ( "." ) : [ ] ; cur = tmp = elem = elem || document ; if ( elem . nodeType === 3 || elem . nodeType === 8 ) { return ; }
if ( rfocusMorph . test ( type + jQuery . event . triggered ) ) { return ; }
if ( type . indexOf ( "." ) > - 1 ) { namespaces = type . split ( "." ) ; type = namespaces . shift ( ) ; namespaces . sort ( ) ; }
ontype = type . indexOf ( ":" ) < 0 && "on" + type ; event = event [ jQuery . expando ] ? event : new jQuery . Event ( type , typeof event === "object" && event ) ; event . isTrigger = onlyHandlers ? 2 : 3 ; event . namespace = namespaces . join ( "." ) ; event . rnamespace = event . namespace ? new RegExp ( "(^|\\.)" + namespaces . join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null ; event . result = undefined ; if ( ! event . target ) { event . target = elem ; }
data = data == null ? [ event ] : jQuery . makeArray ( data , [ event ] ) ; special = jQuery . event . special [ type ] || { } ; if ( ! onlyHandlers && special . trigger && special . trigger . apply ( elem , data ) === false ) { return ; }
if ( ! onlyHandlers && ! special . noBubble && ! jQuery . isWindow ( elem ) ) { bubbleType = special . delegateType || type ; if ( ! rfocusMorph . test ( bubbleType + type ) ) { cur = cur . parentNode ; }
for ( ; cur ; cur = cur . parentNode ) { eventPath . push ( cur ) ; tmp = cur ; }
if ( tmp === ( elem . ownerDocument || document ) ) { eventPath . push ( tmp . defaultView || tmp . parentWindow || window ) ; } }
i = 0 ; while ( ( cur = eventPath [ i ++ ] ) && ! event . isPropagationStopped ( ) ) { event . type = i > 1 ? bubbleType : special . bindType || type ; handle = ( dataPriv . get ( cur , "events" ) || { } ) [ event . type ] && dataPriv . get ( cur , "handle" ) ; if ( handle ) { handle . apply ( cur , data ) ; }
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 ( ! onlyHandlers && ! event . isDefaultPrevented ( ) ) { if ( ( ! special . _default || special . _default . apply ( eventPath . pop ( ) , data ) === false ) && acceptData ( elem ) ) { if ( ontype && jQuery . isFunction ( elem [ type ] ) && ! jQuery . isWindow ( elem ) ) { tmp = elem [ ontype ] ; if ( tmp ) { elem [ ontype ] = null ; }
jQuery . event . triggered = type ; elem [ type ] ( ) ; jQuery . event . triggered = undefined ; if ( tmp ) { elem [ ontype ] = tmp ; } } } }
return event . result ; } , simulate : function ( type , elem , event ) { var e = jQuery . extend ( new jQuery . Event ( ) , event , { type : type , isSimulated : true } ) ; jQuery . event . trigger ( e , null , elem ) ; if ( e . isDefaultPrevented ( ) ) { event . preventDefault ( ) ; } } } ) ; jQuery . fn . extend ( { trigger : function ( type , data ) { return this . each ( function ( ) { jQuery . event . trigger ( type , data , this ) ; } ) ; } , triggerHandler : function ( type , data ) { var elem = this [ 0 ] ; if ( elem ) { return jQuery . event . trigger ( type , data , elem , true ) ; } } } ) ; jQuery . each ( ( "blur focus focusin focusout load resize scroll unload click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup error contextmenu" ) . split ( " " ) , function ( i , name ) { jQuery . fn [ name ] = function ( data , fn ) { return arguments . length > 0 ? this . on ( name , null , data , fn ) : this . trigger ( name ) ; } ; } ) ; jQuery . fn . extend ( { hover : function ( fnOver , fnOut ) { return this . mouseenter ( fnOver ) . mouseleave ( fnOut || fnOver ) ; } } ) ; support . focusin = "onfocusin" in window ; if ( ! support . focusin ) { jQuery . each ( { focus : "focusin" , blur : "focusout" } , function ( orig , fix ) { var handler = function ( event ) { jQuery . event . simulate ( fix , event . target , jQuery . event . fix ( event ) ) ; } ; jQuery . event . special [ fix ] = { setup : function ( ) { var doc = this . ownerDocument || this , attaches = dataPriv . access ( doc , fix ) ; if ( ! attaches ) { doc . addEventListener ( orig , handler , true ) ; }
dataPriv . access ( doc , fix , ( attaches || 0 ) + 1 ) ; } , teardown : function ( ) { var doc = this . ownerDocument || this , attaches = dataPriv . access ( doc , fix ) - 1 ; if ( ! attaches ) { doc . removeEventListener ( orig , handler , true ) ; dataPriv . remove ( doc , fix ) ; } else { dataPriv . access ( doc , fix , attaches ) ; } } } ; } ) ; }
var location = window . location ; var nonce = jQuery . now ( ) ; var rquery = ( /\?/ ) ; jQuery . parseJSON = function ( data ) { return JSON . parse ( data + "" ) ; } ; jQuery . parseXML = function ( data ) { var xml ; if ( ! data || typeof data !== "string" ) { return null ; }
try { xml = ( new window . DOMParser ( ) ) . parseFromString ( data , "text/xml" ) ; } catch ( e ) { xml = undefined ; }
if ( ! xml || xml . getElementsByTagName ( "parsererror" ) . length ) { jQuery . error ( "Invalid XML: " + data ) ; }
return xml ; } ; var
rhash = /#.*$/ , rts = /([?&])_=[^&]*/ , rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg , rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/ , rnoContent = /^(?:GET|HEAD)$/ , rprotocol = /^\/\// , prefilters = { } , transports = { } , allTypes = "*/" . concat ( "*" ) , originAnchor = document . createElement ( "a" ) ; originAnchor . href = location . href ; function addToPrefiltersOrTransports ( structure ) { return function ( dataTypeExpression , func ) { if ( typeof dataTypeExpression !== "string" ) { func = dataTypeExpression ; dataTypeExpression = "*" ; }
var dataType , i = 0 , dataTypes = dataTypeExpression . toLowerCase ( ) . match ( rnotwhite ) || [ ] ; if ( jQuery . isFunction ( func ) ) { while ( ( dataType = dataTypes [ i ++ ] ) ) { if ( dataType [ 0 ] === "+" ) { dataType = dataType . slice ( 1 ) || "*" ; ( structure [ dataType ] = structure [ dataType ] || [ ] ) . unshift ( func ) ; } else { ( structure [ dataType ] = structure [ dataType ] || [ ] ) . push ( func ) ; } } } } ; }
function inspectPrefiltersOrTransports ( structure , options , originalOptions , jqXHR ) { var inspected = { } , seekingTransport = ( structure === transports ) ; function inspect ( dataType ) { var selected ; inspected [ dataType ] = true ; jQuery . each ( structure [ dataType ] || [ ] , function ( _ , prefilterOrFactory ) { var dataTypeOrTransport = prefilterOrFactory ( options , originalOptions , jqXHR ) ; if ( typeof dataTypeOrTransport === "string" && ! seekingTransport && ! inspected [ dataTypeOrTransport ] ) { options . dataTypes . unshift ( dataTypeOrTransport ) ; inspect ( dataTypeOrTransport ) ; return false ; } else if ( seekingTransport ) { return ! ( selected = dataTypeOrTransport ) ; } } ) ; return selected ; }
return inspect ( options . dataTypes [ 0 ] ) || ! inspected [ "*" ] && inspect ( "*" ) ; }
function ajaxExtend ( target , src ) { var key , deep , flatOptions = jQuery . ajaxSettings . flatOptions || { } ; for ( key in src ) { if ( src [ key ] !== undefined ) { ( flatOptions [ key ] ? target : ( deep || ( deep = { } ) ) ) [ key ] = src [ key ] ; } }
if ( deep ) { jQuery . extend ( true , target , deep ) ; }
return target ; }
function ajaxHandleResponses ( s , jqXHR , responses ) { var ct , type , finalDataType , firstDataType , contents = s . contents , dataTypes = s . dataTypes ; while ( dataTypes [ 0 ] === "*" ) { dataTypes . shift ( ) ; if ( ct === undefined ) { ct = s . mimeType || jqXHR . getResponseHeader ( "Content-Type" ) ; } }
if ( ct ) { for ( type in contents ) { if ( contents [ type ] && contents [ type ] . test ( ct ) ) { dataTypes . unshift ( type ) ; break ; } } }
if ( dataTypes [ 0 ] in responses ) { finalDataType = dataTypes [ 0 ] ; } else { for ( type in responses ) { if ( ! dataTypes [ 0 ] || s . converters [ type + " " + dataTypes [ 0 ] ] ) { finalDataType = type ; break ; }
if ( ! firstDataType ) { firstDataType = type ; } }
finalDataType = finalDataType || firstDataType ; }
if ( finalDataType ) { if ( finalDataType !== dataTypes [ 0 ] ) { dataTypes . unshift ( finalDataType ) ; }
return responses [ finalDataType ] ; } }
function ajaxConvert ( s , response , jqXHR , isSuccess ) { var conv2 , current , conv , tmp , prev , converters = { } , dataTypes = s . dataTypes . slice ( ) ; if ( dataTypes [ 1 ] ) { for ( conv in s . converters ) { converters [ conv . toLowerCase ( ) ] = s . converters [ conv ] ; } }
current = dataTypes . shift ( ) ; while ( current ) { if ( s . responseFields [ current ] ) { jqXHR [ s . responseFields [ current ] ] = response ; }
if ( ! prev && isSuccess && s . dataFilter ) { response = s . dataFilter ( response , s . dataType ) ; }
prev = current ; current = dataTypes . shift ( ) ; if ( current ) { if ( current === "*" ) { current = prev ; } else if ( prev !== "*" && prev !== current ) { conv = converters [ prev + " " + current ] || converters [ "* " + current ] ; if ( ! conv ) { for ( conv2 in converters ) { tmp = conv2 . split ( " " ) ; if ( tmp [ 1 ] === current ) { conv = converters [ prev + " " + tmp [ 0 ] ] || converters [ "* " + tmp [ 0 ] ] ; if ( conv ) { if ( conv === true ) { conv = converters [ conv2 ] ; } else if ( converters [ conv2 ] !== true ) { current = tmp [ 0 ] ; dataTypes . unshift ( tmp [ 1 ] ) ; }
break ; } } } }
if ( conv !== true ) { if ( conv && s . throws ) { response = conv ( response ) ; } else { try { response = conv ( response ) ; } catch ( e ) { return { state : "parsererror" , error : conv ? e : "No conversion from " + prev + " to " + current } ; } } } } } }
return { state : "success" , data : response } ; }
jQuery . extend ( { active : 0 , lastModified : { } , etag : { } , ajaxSettings : { url : location . href , type : "GET" , isLocal : rlocalProtocol . test ( location . protocol ) , global : true , processData : true , async : true , contentType : "application/x-www-form-urlencoded; charset=UTF-8" , accepts : { "*" : allTypes , text : "text/plain" , html : "text/html" , xml : "application/xml, text/xml" , json : "application/json, text/javascript" } , contents : { xml : /\bxml\b/ , html : /\bhtml/ , json : /\bjson\b/ } , responseFields : { xml : "responseXML" , text : "responseText" , json : "responseJSON" } , converters : { "* text" : String , "text html" : true , "text json" : jQuery . parseJSON , "text xml" : jQuery . parseXML } , flatOptions : { url : true , context : true } } , ajaxSetup : function ( target , settings ) { return settings ? ajaxExtend ( ajaxExtend ( target , jQuery . ajaxSettings ) , settings ) : ajaxExtend ( jQuery . ajaxSettings , target ) ; } , ajaxPrefilter : addToPrefiltersOrTransports ( prefilters ) , ajaxTransport : addToPrefiltersOrTransports ( transports ) , ajax : function ( url , options ) { if ( typeof url === "object" ) { options = url ; url = undefined ; }
options = options || { } ; var transport , cacheURL , responseHeadersString , responseHeaders , timeoutTimer , urlAnchor , fireGlobals , i , s = jQuery . ajaxSetup ( { } , options ) , callbackContext = s . context || s , globalEventContext = s . context && ( callbackContext . nodeType || callbackContext . jquery ) ? jQuery ( callbackContext ) : jQuery . event , deferred = jQuery . Deferred ( ) , completeDeferred = jQuery . Callbacks ( "once memory" ) , statusCode = s . statusCode || { } , requestHeaders = { } , requestHeadersNames = { } , state = 0 , strAbort = "canceled" , jqXHR = { readyState : 0 , getResponseHeader : function ( key ) { var match ; if ( state === 2 ) { if ( ! responseHeaders ) { responseHeaders = { } ; while ( ( match = rheaders . exec ( responseHeadersString ) ) ) { responseHeaders [ match [ 1 ] . toLowerCase ( ) ] = match [ 2 ] ; } }
match = responseHeaders [ key . toLowerCase ( ) ] ; }
return match == null ? null : match ; } , getAllResponseHeaders : function ( ) { return state === 2 ? responseHeadersString : null ; } , setRequestHeader : function ( name , value ) { var lname = name . toLowerCase ( ) ; if ( ! state ) { name = requestHeadersNames [ lname ] = requestHeadersNames [ lname ] || name ; requestHeaders [ name ] = value ; }
return this ; } , overrideMimeType : function ( type ) { if ( ! state ) { s . mimeType = type ; }
return this ; } , statusCode : function ( map ) { var code ; if ( map ) { if ( state < 2 ) { for ( code in map ) { statusCode [ code ] = [ statusCode [ code ] , map [ code ] ] ; } } else { jqXHR . always ( map [ jqXHR . status ] ) ; } }
return this ; } , abort : function ( statusText ) { var finalText = statusText || strAbort ; if ( transport ) { transport . abort ( finalText ) ; }
done ( 0 , finalText ) ; return this ; } } ; deferred . promise ( jqXHR ) . complete = completeDeferred . add ; jqXHR . success = jqXHR . done ; jqXHR . error = jqXHR . fail ; s . url = ( ( url || s . url || location . href ) + "" ) . replace ( rhash , "" ) . replace ( rprotocol , location . protocol + "//" ) ; s . type = options . method || options . type || s . method || s . type ; s . dataTypes = jQuery . trim ( s . dataType || "*" ) . toLowerCase ( ) . match ( rnotwhite ) || [ "" ] ; if ( s . crossDomain == null ) { urlAnchor = document . createElement ( "a" ) ; try { urlAnchor . href = s . url ; urlAnchor . href = urlAnchor . href ; s . crossDomain = originAnchor . protocol + "//" + originAnchor . host !== urlAnchor . protocol + "//" + urlAnchor . host ; } catch ( e ) { s . crossDomain = true ; } }
if ( s . data && s . processData && typeof s . data !== "string" ) { s . data = jQuery . param ( s . data , s . traditional ) ; }
inspectPrefiltersOrTransports ( prefilters , s , options , jqXHR ) ; if ( state === 2 ) { return jqXHR ; }
fireGlobals = jQuery . event && s . global ; if ( fireGlobals && jQuery . active ++ === 0 ) { jQuery . event . trigger ( "ajaxStart" ) ; }
s . type = s . type . toUpperCase ( ) ; s . hasContent = ! rnoContent . test ( s . type ) ; cacheURL = s . url ; if ( ! s . hasContent ) { if ( s . data ) { cacheURL = ( s . url += ( rquery . test ( cacheURL ) ? "&" : "?" ) + s . data ) ; delete s . data ; }
if ( s . cache === false ) { s . url = rts . test ( cacheURL ) ? cacheURL . replace ( rts , "$1_=" + nonce ++ ) : cacheURL + ( rquery . test ( cacheURL ) ? "&" : "?" ) + "_=" + nonce ++ ; } }
if ( s . ifModified ) { if ( jQuery . lastModified [ cacheURL ] ) { jqXHR . setRequestHeader ( "If-Modified-Since" , jQuery . lastModified [ cacheURL ] ) ; }
if ( jQuery . etag [ cacheURL ] ) { jqXHR . setRequestHeader ( "If-None-Match" , jQuery . etag [ cacheURL ] ) ; } }
if ( s . data && s . hasContent && s . contentType !== false || options . contentType ) { jqXHR . setRequestHeader ( "Content-Type" , s . contentType ) ; }
jqXHR . setRequestHeader ( "Accept" , s . dataTypes [ 0 ] && s . accepts [ s . dataTypes [ 0 ] ] ? s . accepts [ s . dataTypes [ 0 ] ] +
( s . dataTypes [ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : s . accepts [ "*" ] ) ; for ( i in s . headers ) { jqXHR . setRequestHeader ( i , s . headers [ i ] ) ; }
if ( s . beforeSend && ( s . beforeSend . call ( callbackContext , jqXHR , s ) === false || state === 2 ) ) { return jqXHR . abort ( ) ; }
strAbort = "abort" ; for ( i in { success : 1 , error : 1 , complete : 1 } ) { jqXHR [ i ] ( s [ i ] ) ; }
transport = inspectPrefiltersOrTransports ( transports , s , options , jqXHR ) ; if ( ! transport ) { done ( - 1 , "No Transport" ) ; } else { jqXHR . readyState = 1 ; if ( fireGlobals ) { globalEventContext . trigger ( "ajaxSend" , [ jqXHR , s ] ) ; }
if ( state === 2 ) { return jqXHR ; }
if ( s . async && s . timeout > 0 ) { timeoutTimer = window . setTimeout ( function ( ) { jqXHR . abort ( "timeout" ) ; } , s . timeout ) ; }
try { state = 1 ; transport . send ( requestHeaders , done ) ; } catch ( e ) { if ( state < 2 ) { done ( - 1 , e ) ; } else { throw e ; } } }
function done ( status , nativeStatusText , responses , headers ) { var isSuccess , success , error , response , modified , statusText = nativeStatusText ; if ( state === 2 ) { return ; }
state = 2 ; if ( timeoutTimer ) { window . clearTimeout ( timeoutTimer ) ; }
transport = undefined ; responseHeadersString = headers || "" ; jqXHR . readyState = status > 0 ? 4 : 0 ; isSuccess = status >= 200 && status < 300 || status === 304 ; if ( responses ) { response = ajaxHandleResponses ( s , jqXHR , responses ) ; }
response = ajaxConvert ( s , response , jqXHR , isSuccess ) ; if ( isSuccess ) { if ( s . ifModified ) { modified = jqXHR . getResponseHeader ( "Last-Modified" ) ; if ( modified ) { jQuery . lastModified [ cacheURL ] = modified ; }
modified = jqXHR . getResponseHeader ( "etag" ) ; if ( modified ) { jQuery . etag [ cacheURL ] = modified ; } }
if ( status === 204 || s . type === "HEAD" ) { statusText = "nocontent" ; } else if ( status === 304 ) { statusText = "notmodified" ; } else { statusText = response . state ; success = response . data ; error = response . error ; isSuccess = ! error ; } } else { error = statusText ; if ( status || ! statusText ) { statusText = "error" ; if ( status < 0 ) { status = 0 ; } } }
jqXHR . status = status ; jqXHR . statusText = ( nativeStatusText || statusText ) + "" ; if ( isSuccess ) { deferred . resolveWith ( callbackContext , [ success , statusText , jqXHR ] ) ; } else { deferred . rejectWith ( callbackContext , [ jqXHR , statusText , error ] ) ; }
jqXHR . statusCode ( statusCode ) ; statusCode = undefined ; if ( fireGlobals ) { globalEventContext . trigger ( isSuccess ? "ajaxSuccess" : "ajaxError" , [ jqXHR , s , isSuccess ? success : error ] ) ; }
completeDeferred . fireWith ( callbackContext , [ jqXHR , statusText ] ) ; if ( fireGlobals ) { globalEventContext . trigger ( "ajaxComplete" , [ jqXHR , s ] ) ; if ( ! ( -- jQuery . active ) ) { jQuery . event . trigger ( "ajaxStop" ) ; } } }
return jqXHR ; } , getJSON : function ( url , data , callback ) { return jQuery . get ( url , data , callback , "json" ) ; } , getScript : function ( url , callback ) { return jQuery . get ( url , undefined , callback , "script" ) ; } } ) ; jQuery . each ( [ "get" , "post" ] , function ( i , method ) { jQuery [ method ] = function ( url , data , callback , type ) { if ( jQuery . isFunction ( data ) ) { type = type || callback ; callback = data ; data = undefined ; }
return jQuery . ajax ( jQuery . extend ( { url : url , type : method , dataType : type , data : data , success : callback } , jQuery . isPlainObject ( url ) && url ) ) ; } ; } ) ; jQuery . _evalUrl = function ( url ) { return jQuery . ajax ( { url : url , type : "GET" , dataType : "script" , async : false , global : false , "throws" : true } ) ; } ; jQuery . fn . extend ( { wrapAll : function ( html ) { var wrap ; if ( jQuery . isFunction ( html ) ) { return this . each ( function ( i ) { jQuery ( this ) . wrapAll ( html . call ( this , i ) ) ; } ) ; }
if ( this [ 0 ] ) { wrap = jQuery ( html , this [ 0 ] . ownerDocument ) . eq ( 0 ) . clone ( true ) ; if ( this [ 0 ] . parentNode ) { wrap . insertBefore ( this [ 0 ] ) ; }
wrap . map ( function ( ) { var elem = this ; while ( elem . firstElementChild ) { elem = elem . firstElementChild ; }
return elem ; } ) . append ( this ) ; }
return this ; } , wrapInner : function ( html ) { if ( jQuery . isFunction ( html ) ) { return this . each ( function ( i ) { jQuery ( this ) . wrapInner ( html . call ( this , i ) ) ; } ) ; }
return this . each ( function ( ) { var self = jQuery ( this ) , contents = self . contents ( ) ; if ( contents . length ) { contents . wrapAll ( html ) ; } else { self . append ( html ) ; } } ) ; } , wrap : function ( html ) { var isFunction = jQuery . isFunction ( html ) ; return this . each ( function ( i ) { jQuery ( this ) . wrapAll ( isFunction ? html . call ( this , i ) : html ) ; } ) ; } , unwrap : function ( ) { return this . parent ( ) . each ( function ( ) { if ( ! jQuery . nodeName ( this , "body" ) ) { jQuery ( this ) . replaceWith ( this . childNodes ) ; } } ) . end ( ) ; } } ) ; jQuery . expr . filters . hidden = function ( elem ) { return ! jQuery . expr . filters . visible ( elem ) ; } ; jQuery . expr . filters . visible = function ( elem ) { return elem . offsetWidth > 0 || elem . offsetHeight > 0 || elem . getClientRects ( ) . length > 0 ; } ; var r20 = /%20/g , rbracket = /\[\]$/ , rCRLF = /\r?\n/g , rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i , rsubmittable = /^(?:input|select|textarea|keygen)/i ; function buildParams ( prefix , obj , traditional , add ) { var name ; if ( jQuery . isArray ( obj ) ) { jQuery . each ( obj , function ( i , v ) { if ( traditional || rbracket . test ( prefix ) ) { add ( prefix , v ) ; } else { buildParams ( prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]" , v , traditional , add ) ; } } ) ; } else if ( ! traditional && jQuery . type ( obj ) === "object" ) { for ( name in obj ) { buildParams ( prefix + "[" + name + "]" , obj [ name ] , traditional , add ) ; } } else { add ( prefix , obj ) ; } }
jQuery . param = function ( a , traditional ) { var prefix , s = [ ] , add = function ( key , value ) { value = jQuery . isFunction ( value ) ? value ( ) : ( value == null ? "" : value ) ; s [ s . length ] = encodeURIComponent ( key ) + "=" + encodeURIComponent ( value ) ; } ; if ( traditional === undefined ) { traditional = jQuery . ajaxSettings && jQuery . ajaxSettings . traditional ; }
if ( jQuery . isArray ( a ) || ( a . jquery && ! jQuery . isPlainObject ( a ) ) ) { jQuery . each ( a , function ( ) { add ( this . name , this . value ) ; } ) ; } else { for ( prefix in a ) { buildParams ( prefix , a [ prefix ] , traditional , add ) ; } }
return s . join ( "&" ) . replace ( r20 , "+" ) ; } ; jQuery . fn . extend ( { serialize : function ( ) { return jQuery . param ( this . serializeArray ( ) ) ; } , serializeArray : function ( ) { return this . map ( function ( ) { var elements = jQuery . prop ( this , "elements" ) ; return elements ? jQuery . makeArray ( elements ) : this ; } ) . filter ( function ( ) { var type = this . type ; return this . name && ! jQuery ( this ) . is ( ":disabled" ) && rsubmittable . test ( this . nodeName ) && ! rsubmitterTypes . test ( type ) && ( this . checked || ! rcheckableType . test ( type ) ) ; } ) . map ( function ( i , elem ) { var val = jQuery ( this ) . val ( ) ; return val == null ? null : jQuery . isArray ( val ) ? jQuery . map ( val , function ( val ) { return { name : elem . name , value : val . replace ( rCRLF , "\r\n" ) } ; } ) : { name : elem . name , value : val . replace ( rCRLF , "\r\n" ) } ; } ) . get ( ) ; } } ) ; jQuery . ajaxSettings . xhr = function ( ) { try { return new window . XMLHttpRequest ( ) ; } catch ( e ) { } } ; var xhrSuccessStatus = { 0 : 200 , 1223 : 204 } , xhrSupported = jQuery . ajaxSettings . xhr ( ) ; support . cors = ! ! xhrSupported && ( "withCredentials" in xhrSupported ) ; support . ajax = xhrSupported = ! ! xhrSupported ; jQuery . ajaxTransport ( function ( options ) { var callback , errorCallback ; if ( support . cors || xhrSupported && ! options . crossDomain ) { return { send : function ( headers , complete ) { var i , xhr = options . xhr ( ) ; xhr . open ( options . type , options . url , options . async , options . username , options . password ) ; if ( options . xhrFields ) { for ( i in options . xhrFields ) { xhr [ i ] = options . xhrFields [ i ] ; } }
if ( options . mimeType && xhr . overrideMimeType ) { xhr . overrideMimeType ( options . mimeType ) ; }
if ( ! options . crossDomain && ! headers [ "X-Requested-With" ] ) { headers [ "X-Requested-With" ] = "XMLHttpRequest" ; }
for ( i in headers ) { xhr . setRequestHeader ( i , headers [ i ] ) ; }
callback = function ( type ) { return function ( ) { if ( callback ) { callback = errorCallback = xhr . onload = xhr . onerror = xhr . onabort = xhr . onreadystatechange = null ; if ( type === "abort" ) { xhr . abort ( ) ; } else if ( type === "error" ) { if ( typeof xhr . status !== "number" ) { complete ( 0 , "error" ) ; } else { complete ( xhr . status , xhr . statusText ) ; } } else { complete ( xhrSuccessStatus [ xhr . status ] || xhr . status , xhr . statusText , ( xhr . responseType || "text" ) !== "text" || typeof xhr . responseText !== "string" ? { binary : xhr . response } : { text : xhr . responseText } , xhr . getAllResponseHeaders ( ) ) ; } } } ; } ; xhr . onload = callback ( ) ; errorCallback = xhr . onerror = callback ( "error" ) ; if ( xhr . onabort !== undefined ) { xhr . onabort = errorCallback ; } else { xhr . onreadystatechange = function ( ) { if ( xhr . readyState === 4 ) { window . setTimeout ( function ( ) { if ( callback ) { errorCallback ( ) ; } } ) ; } } ; }
callback = callback ( "abort" ) ; try { xhr . send ( options . hasContent && options . data || null ) ; } catch ( e ) { if ( callback ) { throw e ; } } } , abort : function ( ) { if ( callback ) { callback ( ) ; } } } ; } } ) ; jQuery . ajaxSetup ( { accepts : { script : "text/javascript, application/javascript, " + "application/ecmascript, application/x-ecmascript" } , contents : { script : /\b(?:java|ecma)script\b/ } , converters : { "text script" : function ( text ) { jQuery . globalEval ( text ) ; return text ; } } } ) ; jQuery . ajaxPrefilter ( "script" , function ( s ) { if ( s . cache === undefined ) { s . cache = false ; }
if ( s . crossDomain ) { s . type = "GET" ; } } ) ; jQuery . ajaxTransport ( "script" , function ( s ) { if ( s . crossDomain ) { var script , callback ; return { send : function ( _ , complete ) { script = jQuery ( "<script>" ) . prop ( { charset : s . scriptCharset , src : s . url } ) . on ( "load error" , callback = function ( evt ) { script . remove ( ) ; callback = null ; if ( evt ) { complete ( evt . type === "error" ? 404 : 200 , evt . type ) ; } } ) ; document . head . appendChild ( script [ 0 ] ) ; } , abort : function ( ) { if ( callback ) { callback ( ) ; } } } ; } } ) ; var oldCallbacks = [ ] , rjsonp = /(=)\?(?=&|$)|\?\?/ ; jQuery . ajaxSetup ( { jsonp : "callback" , jsonpCallback : function ( ) { var callback = oldCallbacks . pop ( ) || ( jQuery . expando + "_" + ( nonce ++ ) ) ; this [ callback ] = true ; return callback ; } } ) ; jQuery . ajaxPrefilter ( "json jsonp" , function ( s , originalSettings , jqXHR ) { var callbackName , overwritten , responseContainer , jsonProp = s . jsonp !== false && ( rjsonp . test ( s . url ) ? "url" : typeof s . data === "string" && ( s . contentType || "" ) . indexOf ( "application/x-www-form-urlencoded" ) === 0 && rjsonp . test ( s . data ) && "data" ) ; if ( jsonProp || s . dataTypes [ 0 ] === "jsonp" ) { callbackName = s . jsonpCallback = jQuery . isFunction ( s . jsonpCallback ) ? s . jsonpCallback ( ) : s . jsonpCallback ; if ( jsonProp ) { s [ jsonProp ] = s [ jsonProp ] . replace ( rjsonp , "$1" + callbackName ) ; } else if ( s . jsonp !== false ) { s . url += ( rquery . test ( s . url ) ? "&" : "?" ) + s . jsonp + "=" + callbackName ; }
s . converters [ "script json" ] = function ( ) { if ( ! responseContainer ) { jQuery . error ( callbackName + " was not called" ) ; }
return responseContainer [ 0 ] ; } ; s . dataTypes [ 0 ] = "json" ; overwritten = window [ callbackName ] ; window [ callbackName ] = function ( ) { responseContainer = arguments ; } ; jqXHR . always ( function ( ) { if ( overwritten === undefined ) { jQuery ( window ) . removeProp ( callbackName ) ; } else { window [ callbackName ] = overwritten ; }
if ( s [ callbackName ] ) { s . jsonpCallback = originalSettings . jsonpCallback ; oldCallbacks . push ( callbackName ) ; }
if ( responseContainer && jQuery . isFunction ( overwritten ) ) { overwritten ( responseContainer [ 0 ] ) ; }
responseContainer = overwritten = undefined ; } ) ; return "script" ; } } ) ; jQuery . parseHTML = function ( data , context , keepScripts ) { if ( ! data || typeof data !== "string" ) { return null ; }
if ( typeof context === "boolean" ) { keepScripts = context ; context = false ; }
context = context || document ; var parsed = rsingleTag . exec ( data ) , scripts = ! keepScripts && [ ] ; if ( parsed ) { return [ context . createElement ( parsed [ 1 ] ) ] ; }
parsed = buildFragment ( [ data ] , context , scripts ) ; if ( scripts && scripts . length ) { jQuery ( scripts ) . remove ( ) ; }
return jQuery . merge ( [ ] , parsed . childNodes ) ; } ; var _load = jQuery . fn . load ; jQuery . fn . load = function ( url , params , callback ) { if ( typeof url !== "string" && _load ) { return _load . apply ( this , arguments ) ; }
var selector , type , response , self = this , off = url . indexOf ( " " ) ; if ( off > - 1 ) { selector = jQuery . trim ( url . slice ( off ) ) ; url = url . slice ( 0 , off ) ; }
if ( jQuery . isFunction ( params ) ) { callback = params ; params = undefined ; } else if ( params && typeof params === "object" ) { type = "POST" ; }
if ( self . length > 0 ) { jQuery . ajax ( { url : url , type : type || "GET" , dataType : "html" , data : params } ) . done ( function ( responseText ) { response = arguments ; self . html ( selector ? jQuery ( "<div>" ) . append ( jQuery . parseHTML ( responseText ) ) . find ( selector ) : responseText ) ; } ) . always ( callback && function ( jqXHR , status ) { self . each ( function ( ) { callback . apply ( this , response || [ jqXHR . responseText , status , jqXHR ] ) ; } ) ; } ) ; }
return this ; } ; jQuery . each ( [ "ajaxStart" , "ajaxStop" , "ajaxComplete" , "ajaxError" , "ajaxSuccess" , "ajaxSend" ] , function ( i , type ) { jQuery . fn [ type ] = function ( fn ) { return this . on ( type , fn ) ; } ; } ) ; jQuery . expr . filters . animated = function ( elem ) { return jQuery . grep ( jQuery . timers , function ( fn ) { return elem === fn . elem ; } ) . length ; } ; function getWindow ( elem ) { return jQuery . isWindow ( elem ) ? elem : elem . nodeType === 9 && elem . defaultView ; }
jQuery . offset = { setOffset : function ( elem , options , i ) { var curPosition , curLeft , curCSSTop , curTop , curOffset , curCSSLeft , calculatePosition , position = jQuery . css ( elem , "position" ) , curElem = jQuery ( elem ) , props = { } ; if ( position === "static" ) { elem . style . position = "relative" ; }
curOffset = curElem . offset ( ) ; curCSSTop = jQuery . css ( elem , "top" ) ; curCSSLeft = jQuery . css ( elem , "left" ) ; calculatePosition = ( position === "absolute" || position === "fixed" ) && ( curCSSTop + curCSSLeft ) . indexOf ( "auto" ) > - 1 ; if ( calculatePosition ) { curPosition = curElem . position ( ) ; curTop = curPosition . top ; curLeft = curPosition . left ; } else { curTop = parseFloat ( curCSSTop ) || 0 ; curLeft = parseFloat ( curCSSLeft ) || 0 ; }
if ( jQuery . isFunction ( options ) ) { options = options . call ( elem , i , jQuery . extend ( { } , curOffset ) ) ; }
if ( options . top != null ) { props . top = ( options . top - curOffset . top ) + curTop ; }
if ( options . left != null ) { props . left = ( options . left - curOffset . left ) + curLeft ; }
if ( "using" in options ) { options . using . call ( elem , props ) ; } else { curElem . css ( props ) ; } } } ; jQuery . fn . extend ( { offset : function ( options ) { if ( arguments . length ) { return options === undefined ? this : this . each ( function ( i ) { jQuery . offset . setOffset ( this , options , i ) ; } ) ; }
var docElem , win , elem = this [ 0 ] , box = { top : 0 , left : 0 } , doc = elem && elem . ownerDocument ; if ( ! doc ) { return ; }
docElem = doc . documentElement ; if ( ! jQuery . contains ( docElem , elem ) ) { return box ; }
box = elem . getBoundingClientRect ( ) ; win = getWindow ( doc ) ; return { top : box . top + win . pageYOffset - docElem . clientTop , left : box . left + win . pageXOffset - docElem . clientLeft } ; } , position : function ( ) { if ( ! this [ 0 ] ) { return ; }
var offsetParent , offset , elem = this [ 0 ] , parentOffset = { top : 0 , left : 0 } ; if ( jQuery . css ( elem , "position" ) === "fixed" ) { offset = elem . getBoundingClientRect ( ) ; } else { offsetParent = this . offsetParent ( ) ; offset = this . offset ( ) ; if ( ! jQuery . nodeName ( offsetParent [ 0 ] , "html" ) ) { parentOffset = offsetParent . offset ( ) ; }
parentOffset . top += jQuery . css ( offsetParent [ 0 ] , "borderTopWidth" , true ) ; parentOffset . left += jQuery . css ( offsetParent [ 0 ] , "borderLeftWidth" , true ) ; }
return { top : offset . top - parentOffset . top - jQuery . css ( elem , "marginTop" , true ) , left : offset . left - parentOffset . left - jQuery . css ( elem , "marginLeft" , true ) } ; } , offsetParent : function ( ) { return this . map ( function ( ) { var offsetParent = this . offsetParent ; while ( offsetParent && jQuery . css ( offsetParent , "position" ) === "static" ) { offsetParent = offsetParent . offsetParent ; }
return offsetParent || documentElement ; } ) ; } } ) ; jQuery . each ( { scrollLeft : "pageXOffset" , scrollTop : "pageYOffset" } , function ( method , prop ) { var top = "pageYOffset" === prop ; jQuery . fn [ method ] = function ( val ) { return access ( this , function ( elem , method , val ) { var win = getWindow ( elem ) ; if ( val === undefined ) { return win ? win [ prop ] : elem [ method ] ; }
if ( win ) { win . scrollTo ( ! top ? val : win . pageXOffset , top ? val : win . pageYOffset ) ; } else { elem [ method ] = val ; } } , method , val , arguments . length ) ; } ; } ) ; jQuery . each ( [ "top" , "left" ] , function ( i , prop ) { jQuery . cssHooks [ prop ] = addGetHookIf ( support . pixelPosition , function ( elem , computed ) { if ( computed ) { computed = curCSS ( elem , prop ) ; return rnumnonpx . test ( computed ) ? jQuery ( elem ) . position ( ) [ prop ] + "px" : computed ; } } ) ; } ) ; jQuery . each ( { Height : "height" , Width : "width" } , function ( name , type ) { jQuery . each ( { padding : "inner" + name , content : type , "" : "outer" + name } , function ( defaultExtra , funcName ) { jQuery . fn [ funcName ] = function ( margin , value ) { var chainable = arguments . length && ( defaultExtra || typeof margin !== "boolean" ) , extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ) ; return access ( this , function ( elem , type , value ) { var doc ; if ( jQuery . isWindow ( elem ) ) { return elem . document . documentElement [ "client" + name ] ; }
if ( elem . nodeType === 9 ) { doc = elem . documentElement ; return Math . max ( elem . body [ "scroll" + name ] , doc [ "scroll" + name ] , elem . body [ "offset" + name ] , doc [ "offset" + name ] , doc [ "client" + name ] ) ; }
return value === undefined ? jQuery . css ( elem , type , extra ) : jQuery . style ( elem , type , value , extra ) ; } , type , chainable ? margin : undefined , chainable , null ) ; } ; } ) ; } ) ; jQuery . fn . extend ( { bind : function ( types , data , fn ) { return this . on ( types , null , data , fn ) ; } , unbind : function ( types , fn ) { return this . off ( types , null , fn ) ; } , delegate : function ( selector , types , data , fn ) { return this . on ( types , selector , data , fn ) ; } , undelegate : function ( selector , types , fn ) { return arguments . length === 1 ? this . off ( selector , "**" ) : this . off ( types , selector || "**" , fn ) ; } , size : function ( ) { return this . length ; } } ) ; jQuery . fn . andSelf = jQuery . fn . addBack ; if ( typeof define === "function" && define . amd ) { define ( "jquery" , [ ] , function ( ) { return jQuery ; } ) ; }
var
_jQuery = window . jQuery , _$ = window . $ ; jQuery . noConflict = function ( deep ) { if ( window . $ === jQuery ) { window . $ = _$ ; }
if ( deep && window . jQuery === jQuery ) { window . jQuery = _jQuery ; }
return jQuery ; } ; if ( ! noGlobal ) { window . jQuery = window . $ = jQuery ; }
return jQuery ; } ) ) ;
/* local file: ./contrib/js/main.js_ */
2016-04-27 18:36:57 +05:00
onready _callbacks = [ ] ; function onready ( fnc ) { onready _callbacks . push ( fnc ) ; }
2016-04-30 18:58:21 +05:00
function ready ( ) { for ( var i = 0 ; i < onready _callbacks . length ; i ++ ) { onready _callbacks [ i ] ( ) ; } }
2016-05-03 23:58:57 +05:00
/* local file: ./contrib/js/api.js */
2016-04-30 18:58:21 +05:00
function nntpchan _apicall ( url , handler , err _handler ) { var ajax = new XMLHttpRequest ( ) ; ajax . onreadystatechange = function ( ) { if ( ajax . readyState == XMLHttpRequest . DONE ) { var status = ajax . status ; var j = null ; if ( status == 200 ) { try { j = JSON . parse ( ajax . responseText ) ; } catch ( e ) { } } else if ( status == 410 ) { if ( err _handler ) { err _handler ( "cannot fetch post: api disabled" ) ; }
2016-04-27 17:21:12 +05:00
return ; }
handler ( j ) ; } } ; ajax . open ( "GET" , url ) ; ajax . send ( ) ; }
function nntpchan _buildpost ( parent , j ) { var post = document . createElement ( "div" ) ; if ( j ) { post . innerHTML = j . PostMarkup ; inject _hover _for _element ( post ) ; } else { post . setAttribute ( "class" , "notfound post" ) ; post . appendChild ( document . createTextNode ( "post not found" ) ) ; }
2016-04-30 18:58:21 +05:00
parent . appendChild ( post ) ; }
2016-05-03 23:58:57 +05:00
/* local file: ./contrib/js/banner.js */
2016-05-03 21:17:08 +05:00
var banner _count = 3 ; function nntpchan _inject _banners ( elem , prefix ) { var n = Math . floor ( Math . random ( ) * banner _count ) ; var banner = prefix + "static/banner_" + n + ".jpg" ; var e = document . createElement ( "img" ) ; e . src = banner ; e . id = "nntpchan_banner" ; elem . appendChild ( e ) ; }
2016-05-17 11:24:46 +05:00
/* local file: ./contrib/js/cuckoo_miner.js */
2016-05-17 11:55:21 +05:00
onready ( function ( ) { document . getElementById ( "start_miner" ) . onclick = function ( ) { var btn = document . getElementById ( "start_miner" ) ; var label = btn . value ; btn . value = "..."
btn . disabled = true ; var worker = new Worker ( "./static/mineworker.js" ) ; worker . onmessage = function ( e ) { miner _cb ( e . data ) ; btn . value = label ; btn . disabled = false ; worker . terminate ( ) ; }
2016-05-17 11:24:46 +05:00
worker . postMessage ( 55.0 ) ; } ; } ) ; function miner _cb ( s ) { document . getElementById ( "miner_result" ) . value = s ; }
2016-05-03 23:58:57 +05:00
/* local file: ./contrib/js/expand-image.js */
2016-05-03 21:17:08 +05:00
function filenameIsImage ( fname ) { return /\.(gif|jpeg|jpg|png|webp)/ . test ( fname . toLowerCase ( ) ) ; }
function setupInlineImage ( thumb , url ) { if ( thumb . inlineIsSetUp ) return ; thumb . inlineIsSetUp = true ; var img = thumb . querySelector ( "img.thumbnail" ) ; var expanded = false ; var oldurl = img . src ; thumb . onclick = function ( ) { if ( expanded ) { img . setAttribute ( "class" , "thumbnail" ) ; img . src = oldurl ; expanded = false ; } else { img . setAttribute ( "class" , "expanded-thumbnail" ) ; img . src = url ; expanded = true ; }
return false ; } }
function setupInlineImageIn ( element ) { var thumbs = element . querySelectorAll ( "a.file" ) ; for ( var i = 0 ; i < thumbs . length ; i ++ ) { var url = thumbs [ i ] . href ; if ( filenameIsImage ( url ) ) { console . log ( "matched url" , url ) ; setupInlineImage ( thumbs [ i ] , url ) ; } } }
onready ( function ( ) { setupInlineImageIn ( document ) ; if ( window . MutationObserver ) { var observer = new MutationObserver ( function ( mutations ) { for ( var i = 0 ; i < mutations . length ; i ++ ) { var additions = mutations [ i ] . addedNodes ; if ( additions == null ) continue ; for ( var j = 0 ; j < additions . length ; j ++ ) { var node = additions [ j ] ; if ( node . nodeType == 1 ) { setupInlineImageIn ( node ) ; } } } } ) ; observer . observe ( document . body , { childList : true , subtree : true } ) ; } } ) ;
2016-05-03 23:58:57 +05:00
/* local file: ./contrib/js/expand-video.js */
2016-05-03 21:17:08 +05:00
var configRoot = "" ; if ( typeof _ == 'undefined' ) { var _ = function ( a ) { return a ; } ; }
function setupVideo ( thumb , url ) { if ( thumb . videoAlreadySetUp ) return ; thumb . videoAlreadySetUp = true ; var video = null ; var videoContainer , videoHide ; var expanded = false ; var hovering = false ; var loop = true ; var loopControls = [ document . createElement ( "span" ) , document . createElement ( "span" ) ] ; var fileInfo = thumb . parentNode . querySelector ( ".fileinfo" ) ; var mouseDown = false ; function unexpand ( ) { if ( expanded ) { expanded = false ; if ( video . pause ) video . pause ( ) ; videoContainer . style . display = "none" ; thumb . style . display = "inline" ; video . style . maxWidth = "inherit" ; video . style . maxHeight = "inherit" ; } }
function unhover ( ) { if ( hovering ) { hovering = false ; if ( video . pause ) video . pause ( ) ; videoContainer . style . display = "none" ; video . style . maxWidth = "inherit" ; video . style . maxHeight = "inherit" ; } }
function getVideo ( ) { if ( video == null ) { video = document . createElement ( "video" ) ; video . src = url ; video . loop = loop ; video . innerText = _ ( "Your browser does not support HTML5 video." ) ; videoHide = document . createElement ( "img" ) ; videoHide . src = configRoot + "static/collapse.gif" ; videoHide . alt = "[ - ]" ; videoHide . title = "Collapse video" ; videoHide . style . marginLeft = "-15px" ; videoHide . style . cssFloat = "left" ; videoHide . addEventListener ( "click" , unexpand , false ) ; videoContainer = document . createElement ( "div" ) ; videoContainer . style . paddingLeft = "15px" ; videoContainer . style . display = "none" ; videoContainer . appendChild ( videoHide ) ; videoContainer . appendChild ( video ) ; thumb . parentNode . insertBefore ( videoContainer , thumb . nextSibling ) ; video . addEventListener ( "mousedown" , function ( e ) { if ( e . button == 0 ) mouseDown = true ; } , false ) ; video . addEventListener ( "mouseup" , function ( e ) { if ( e . button == 0 ) mouseDown = false ; } , false ) ; video . addEventListener ( "mouseenter" , function ( e ) { mouseDown = false ; } , false ) ; video . addEventListener ( "mouseout" , function ( e ) { if ( mouseDown && e . clientX - video . getBoundingClientRect ( ) . left <= 0 ) { unexpand ( ) ; }
mouseDown = false ; } , false ) ; } }
thumb . addEventListener ( "click" , function ( e ) { if ( ! e . shiftKey && ! e . ctrlKey && ! e . altKey && ! e . metaKey ) { getVideo ( ) ; expanded = true ; hovering = false ; video . style . position = "static" ; video . style . pointerEvents = "inherit" ; video . style . display = "inline" ; videoHide . style . display = "inline" ; videoContainer . style . display = "block" ; videoContainer . style . position = "static" ; video . parentNode . parentNode . removeAttribute ( 'style' ) ; thumb . style . display = "none" ; video . controls = true ; if ( video . readyState == 0 ) { video . addEventListener ( "loadedmetadata" , expand2 , false ) ; } else { setTimeout ( expand2 , 0 ) ; }
video . play ( ) ; e . preventDefault ( ) ; } } , false ) ; function expand2 ( ) { video . style . maxWidth = "100%" ; video . style . maxHeight = window . innerHeight + "px" ; var bottom = video . getBoundingClientRect ( ) . bottom ; if ( bottom > window . innerHeight ) { window . scrollBy ( 0 , bottom - window . innerHeight ) ; } }
thumb . addEventListener ( "mouseover" , function ( e ) { if ( false ) { getVideo ( ) ; expanded = false ; hovering = true ; var docRight = document . documentElement . getBoundingClientRect ( ) . right ; var thumbRight = thumb . querySelector ( "img, video" ) . getBoundingClientRect ( ) . right ; var maxWidth = docRight - thumbRight - 20 ; if ( maxWidth < 250 ) maxWidth = 250 ; video . style . position = "fixed" ; video . style . right = "0px" ; video . style . top = "0px" ; var docRight = document . documentElement . getBoundingClientRect ( ) . right ; var thumbRight = thumb . querySelector ( "img, video" ) . getBoundingClientRect ( ) . right ; video . style . maxWidth = maxWidth + "px" ; video . style . maxHeight = "100%" ; video . style . pointerEvents = "none" ; video . style . display = "inline" ; videoHide . style . display = "none" ; videoContainer . style . display = "inline" ; videoContainer . style . position = "fixed" ; video . controls = false ; video . play ( ) ; } } , false ) ; thumb . addEventListener ( "mouseout" , unhover , false ) ; thumb . addEventListener ( "wheel" , function ( e ) { if ( true ) { if ( e . deltaY > 0 ) volume -= 0.1 ; if ( e . deltaY < 0 ) volume += 0.1 ; if ( volume < 0 ) volume = 0 ; if ( volume > 1 ) volume = 1 ; if ( video != null ) { video . muted = ( volume == 0 ) ; video . volume = volume ; }
e . preventDefault ( ) ; } } , false ) ; }
function setupVideosIn ( element ) { var thumbs = element . querySelectorAll ( "a.file" ) ; for ( var i = 0 ; i < thumbs . length ; i ++ ) { if ( /(\.webm)|(\.mp4)$/ . test ( thumbs [ i ] . pathname ) ) { setupVideo ( thumbs [ i ] , thumbs [ i ] . href ) ; } else { var url = thumbs [ i ] . href ; if ( /(\.webm)|(\.mp4)$/ . test ( url ) ) setupVideo ( thumbs [ i ] , url ) ; } } }
onready ( function ( ) { if ( typeof settingsMenu != "undefined" && typeof Options == "undefined" )
document . body . insertBefore ( settingsMenu , document . getElementsByTagName ( "hr" ) [ 0 ] ) ; setupVideosIn ( document ) ; if ( window . MutationObserver ) { var observer = new MutationObserver ( function ( mutations ) { for ( var i = 0 ; i < mutations . length ; i ++ ) { var additions = mutations [ i ] . addedNodes ; if ( additions == null ) continue ; for ( var j = 0 ; j < additions . length ; j ++ ) { var node = additions [ j ] ; if ( node . nodeType == 1 ) { setupVideosIn ( node ) ; } } } } ) ; observer . observe ( document . body , { childList : true , subtree : true } ) ; } } ) ;
2016-05-03 23:58:57 +05:00
/* local file: ./contrib/js/livechan.js */
2016-05-03 21:17:08 +05:00
function livechan _got _post ( widget , j ) { while ( widget . children . length > 5 ) { widget . removeChild ( widget . children [ 0 ] ) ; }
nntpchan _buildpost ( widget , j ) ; widget . scrollTop = widget . scrollHeight ; }
function inject _postform ( prefix , parent ) { }
function inject _livechan _widget ( prefix , parent ) { if ( "WebSocket" in window ) { var url = "ws://" + document . location . host + prefix + "live" ; if ( document . location . protocol == "https:" ) { url = "wss://" + document . location . host + prefix + "live" ; }
var socket = new WebSocket ( url ) ; var progress = function ( str ) { parent . innerHTML = "<pre>livechan: " + str + "</pre>" ; } ; progress ( "initialize" ) ; socket . onopen = function ( ) { progress ( "streaming (read only)" ) ; }
socket . onmessage = function ( ev ) { var j = null ; try { j = JSON . parse ( ev . data ) ; } catch ( e ) { }
if ( j ) { livechan _got _post ( parent , j ) ; } }
socket . onclose = function ( ev ) { progress ( "connection closed" ) ; setTimeout ( function ( ) { inject _livechan _widget ( prefix , parent ) ; } , 1000 ) ; } } else { parent . innerHTML = "<pre>livechan mode requires websocket support</pre>" ; setTimeout ( function ( ) { parent . innerHTML = "" ; } , 5000 ) ; } }
function ukko _livechan ( prefix ) { var ukko = document . getElementById ( "ukko_threads" ) ; if ( ukko ) { ukko . innerHTML = "" ; inject _livechan _widget ( prefix , ukko ) ; } }
2016-05-03 23:58:57 +05:00
/* local file: ./contrib/js/local_storage.js */
2016-05-03 21:17:08 +05:00
function get _storage ( ) { var st = null ; if ( window . localStorage ) { st = window . localStorage ; } else if ( localStorage ) { st = localStorage ; }
return st ; }
2016-05-03 23:58:57 +05:00
/* local file: ./contrib/js/reply.js */
2016-05-04 22:10:55 +05:00
function getReplyTo ( ) { if ( ! document . dynreply ) { var e = document . getElementById ( "postform_container" ) ; if ( e ) { document . dynreply = new DynReply ( e ) ; } else { document . dynreply = new DynReply ( ) ; }
2016-05-04 22:12:46 +05:00
e = document . dynreply . elem ; e . style . position = "fixed" ; e . setAttribute ( "class" , "shadow" ) ; }
2016-05-03 23:27:07 +05:00
return document . dynreply ; }
2016-04-30 21:41:23 +05:00
function table _insert _row ( table , header , items ) { var tr = document . createElement ( "tr" ) ; var th = document . createElement ( "th" ) ; th . appendChild ( header ) ; tr . appendChild ( th ) ; for ( var idx = 0 ; idx < items . length ; idx ++ ) { var elem = document . createElement ( "td" ) ; elem . appendChild ( items [ idx ] ) ; tr . appendChild ( elem ) ; }
table . appendChild ( tr ) ; }
2016-05-03 23:22:10 +05:00
function DynReply ( existingElem ) { if ( existingElem ) { this . elem = existingElem ; this . form = this . elem . querySelector ( "form" ) ; this . _error = document . getElementById ( "postform_msg" ) ; this . url = this . form . action + "?t=json" ; this . x = 1 ; this . y = 1 ; return ; }
2016-05-03 21:17:08 +05:00
var elem = document . createElement ( "div" ) ; elem . setAttribute ( "id" , "postform_container" ) ; this . elem = elem ; this . form = document . createElement ( "form" ) ; this . form . enctype = "multipart/form-data" ; this . form . name = "post" ; this . form . method = "post" ; elem = document . createElement ( "input" ) ; elem . setAttribute ( "id" , "postform_reference" ) ; elem . name = "reference" ; elem . type = "hidden" ; this . form . appendChild ( elem ) ; var table = document . createElement ( "table" ) ; table . setAttribute ( "class" , "postform" ) ; var tbody = document . createElement ( "tbody" ) ; var span = document . createElement ( "span" ) ; elem = document . createElement ( "input" ) ; elem . setAttribute ( "name" , "name" ) ; elem . setAttribute ( "value" , "Anonymous" ) ; elem . setAttribute ( "id" , "postform_name" ) ; span . appendChild ( elem ) ; var err _elem = document . createElement ( "span" ) ; err _elem . setAttribute ( "id" , "postform_msg" ) ; span . appendChild ( err _elem ) ; this . _error = err _elem ; table _insert _row ( tbody , document . createTextNode ( "Name" ) , [ span ] )
2016-05-01 19:42:06 +05:00
elem = document . createElement ( "input" ) ; elem . setAttribute ( "name" , "subject" ) ; elem . setAttribute ( "value" , "" ) ; elem . setAttribute ( "id" , "postform_subject" ) ; var submit = document . createElement ( "input" ) ; submit . setAttribute ( "value" , "reply" ) ; submit . setAttribute ( "class" , "button" ) ; submit . setAttribute ( "type" , "submit" ) ; submit . setAttribute ( "id" , "postform_submit" ) ; table _insert _row ( tbody , document . createTextNode ( "Subject" ) , [ elem , submit ] ) ; elem = document . createElement ( "textarea" ) ; elem . setAttribute ( "id" , "postform_message" ) ; elem . setAttribute ( "name" , "message" ) ; elem . setAttribute ( "cols" , "40" ) ; elem . setAttribute ( "rows" , "5" ) ; table _insert _row ( tbody , document . createTextNode ( "Comment" ) , [ elem ] ) ; elem = document . createElement ( "input" ) ; elem . setAttribute ( "class" , "postform_attachment" ) ; elem . setAttribute ( "id" , "postform_attachments" ) ; elem . setAttribute ( "type" , "file" ) ; elem . setAttribute ( "name" , "attachment_uploaded" ) ; elem . setAttribute ( "multiple" , "multiple" ) ; table _insert _row ( tbody , document . createTextNode ( "Files" ) , [ elem ] ) ; elem = document . createElement ( "input" ) ; elem . setAttribute ( "type" , "checkbox" ) ; elem . setAttribute ( "name" , "dubs" ) ; table _insert _row ( tbody , document . createTextNode ( "Get Dubs" ) , [ elem ] ) ; elem = document . createElement ( "img" ) ; elem . setAttribute ( "id" , "captcha_img" ) ; elem . alt = "captcha" ; table _insert _row ( tbody , document . createTextNode ( "Captcha" ) , [ elem ] ) ; elem = document . createElement ( "input" ) ; elem . name = "captcha" ; elem . autocomplete = "off" ; elem . setAttribute ( "id" , "captcha_solution" ) ; table _insert _row ( tbody , document . createTextNode ( "Solution" ) , [ elem ] )
2016-05-03 23:22:10 +05:00
table . appendChild ( tbody ) ; this . form . appendChild ( table ) ; this . elem . appendChild ( this . form ) ; document . body . appendChild ( this . elem ) ; this . board = null ; this . roothash = null ; this . prefix = null ; this . url = null ; this . x = 1 ; this . y = 1 ; }
2016-05-04 22:03:32 +05:00
DynReply . prototype . update = function ( ) { if ( this . prefix ) { this . updateCaptcha ( ) ; if ( this . board ) { var ref = document . getElementById ( "postform_reference" ) ; if ( this . roothash ) { ref . setAttribute ( "value" , this . roothash ) ; } else { ref . setAttribute ( "value" , "" ) ; }
this . url = this . prefix + "post/" + this . board + "?t=json" ; } } }
2016-04-30 22:09:40 +05:00
DynReply . prototype . show = function ( ) { console . log ( "show dynreply" ) ; this . update ( ) ; this . elem . style . display = 'inline' ; }
2016-05-01 01:03:39 +05:00
DynReply . prototype . hide = function ( ) { console . log ( "hide dynreply" ) ; this . elem . style . display = "none" ; }
2016-05-01 19:42:06 +05:00
DynReply . prototype . clear = function ( ) { this . clearSolution ( ) ; this . clearPostbox ( ) ; }
DynReply . prototype . clearSolution = function ( ) { var e = document . getElementById ( "captcha_solution" ) ; e . value = "" ; }
2016-05-02 02:48:17 +05:00
DynReply . prototype . clearPostbox = function ( ) { var e = document . getElementById ( "postform_subject" ) ; e . value = "" ; e = document . getElementById ( "postform_message" ) ; e . value = "" ; e = document . getElementById ( "postform_attachments" ) ; e . value = null ; }
2016-05-01 01:03:39 +05:00
DynReply . prototype . post = function ( cb , err _cb ) { if ( this . url && this . form ) { var data = new FormData ( this . form ) ; var ajax = new XMLHttpRequest ( ) ; ajax . onreadystatechange = function ( ev ) { if ( ajax . readyState == XMLHttpRequest . DONE ) { var j = null ; try { j = JSON . parse ( ajax . responseText ) ; cb ( j ) ; } catch ( e ) { if ( err _cb ) { err _cb ( e ) ; } } } }
ajax . open ( "POST" , this . url ) ; ajax . send ( data ) ; } }
2016-05-01 19:42:06 +05:00
DynReply . prototype . updateCaptcha = function ( ) { if ( this . prefix ) { var captcha _img = document . getElementById ( "captcha_img" ) ; captcha _img . src = this . prefix + "captcha/img" ; }
this . clearSolution ( ) ; }
2016-04-30 21:25:15 +05:00
DynReply . prototype . setPrefix = function ( prefix ) { this . prefix = prefix ; }
DynReply . prototype . hide = function ( ) { this . elem . style . display = 'none' ; }
DynReply . prototype . setBoard = function ( boardname ) { if ( boardname ) { this . board = boardname ; } }
DynReply . prototype . setRoot = function ( roothash ) { if ( roothash ) { this . roothash = roothash ; } }
2016-05-03 21:28:19 +05:00
DynReply . prototype . showError = function ( msg ) { console . log ( "error in dynreply: " + msg ) ; this . _error . setAttribute ( "class" , "error message" ) ; this . _error . appendChild ( document . createTextNode ( msg ) ) ; this . updateCaptcha ( ) ; }
2016-05-02 02:25:08 +05:00
DynReply . prototype . showMessage = function ( msg ) { this . _error . setAttribute ( "class" , "message" ) ; this . _error . innerHTML = "" ; this . _error . appendChild ( document . createTextNode ( msg ) ) ; var e = this . _error ; setTimeout ( function ( ) { e . innerHTML = "" ; } , 2000 ) ; }
2016-05-04 22:14:57 +05:00
function nntpchan _reply ( parent , shorthash ) { if ( parent && document . dynreply ) { var boardname = parent . getAttribute ( "boardname" ) ; var roothash = parent . getAttribute ( "root" ) ; var replyto = getReplyTo ( ) ; replyto . setBoard ( boardname ) ; replyto . setRoot ( roothash ) ; replyto . show ( ) ; }
2016-04-30 21:25:15 +05:00
var elem = document . getElementById ( "postform_message" ) ; if ( elem )
2016-04-27 17:21:12 +05:00
{ elem . value += ">>" + shorthash . substr ( 0 , 10 ) + "\n" ; } }
function inject _hover ( prefix , el , parent ) { if ( ! prefix ) { throw "prefix is not defined" ; }
var linkhash = el . getAttribute ( "backlinkhash" ) ; if ( ! linkhash ) { throw "linkhash undefined" ; }
console . log ( "rewrite linkhash " + linkhash ) ; var elem = document . createElement ( "span" ) ; elem . setAttribute ( "class" , "backlink_rewritten" ) ; elem . appendChild ( document . createTextNode ( ">>" + linkhash . substr ( 0 , 10 ) ) ) ; if ( ! parent ) { parent = el . parentNode ; }
parent . removeChild ( el ) ; parent . appendChild ( elem ) ; elem . onclick = function ( ev ) { if ( parent . backlink ) { nntpchan _apicall ( prefix + "api/find?hash=" + linkhash , function ( j ) { var wrapper = document . createElement ( "div" ) ; wrapper . setAttribute ( "class" , "hover " + linkhash ) ; if ( j == null ) { wrapper . setAttribute ( "class" , "hover notfound-hover " + linkhash ) ; wrapper . appendChild ( document . createTextNode ( "not found" ) ) ; } else { nntpchan _buildpost ( wrapper , j ) ; }
parent . appendChild ( wrapper ) ; parent . backlink = false ; } , function ( msg ) { var wrapper = document . createElement ( "div" ) ; wrapper . setAttribute ( "class" , "hover " + linkhash ) ; wrapper . appendChild ( document . createTextNode ( msg ) ) ; parent . appendChild ( wrapper ) ; parent . backlink = false ; } ) ; } else { var elems = document . getElementsByClassName ( linkhash ) ; if ( ! elems ) throw "bad state, no backlinks open?" ; for ( var idx = 0 ; idx < elems . length ; idx ++ ) { elems [ idx ] . parentNode . removeChild ( elems [ idx ] ) ; }
parent . backlink = true ; } } ; parent . backlink = true ; }
function inject _hover _for _element ( elem ) { var elems = elem . getElementsByClassName ( "backlink" ) ; var ls = [ ] ; var l = elems . length ; for ( var idx = 0 ; idx < l ; idx ++ ) { var e = elems [ idx ] ; ls . push ( e ) ; }
for ( var elem in ls ) { inject _hover ( prefix , ls [ elem ] ) ; } }
2016-05-04 23:03:48 +05:00
function init ( prefix ) { inject _hover _for _element ( document ) ; if ( /\.html$/ . test ( document . location . pathname ) && ! ( /ukko/ . test ( document . location . pathname ) ) ) { console . log ( "not loading reply widget" ) ; } else { var rpl = getReplyTo ( ) ; rpl . setPrefix ( prefix ) ; rpl . setBoard ( "overchan.random" ) ; rpl . update ( ) ; rpl . updateCaptcha ( ) ; var e = rpl . elem ; var mouseDownX , mouseDownY ; var $dragging = null ; $ ( rpl . elem ) . on ( "mousemove" , function ( ev ) { if ( $dragging ) { var x = ev . pageX - $ ( this ) . width ( ) / 2 , y = ev . pageY - $ ( this ) . height ( ) / 2 ; $dragging . offset ( { top : y , left : x } ) ; } } ) ; $ ( rpl . elem ) . on ( "mousedown" , e , function ( ev ) { $dragging = $ ( rpl . elem ) ; } ) ; $ ( rpl . elem ) . on ( "mouseup" , function ( e ) { $dragging = null ; } ) ; e = document . getElementById ( "postform_submit" ) ; var postit = function ( ) { var f = document . querySelector ( "form" ) ; var r = getReplyTo ( ) ; r . showMessage ( "posting... " ) ; r . post ( function ( j ) { if ( j . error ) { r . showError ( j . error ) ; } else { r . showMessage ( "posted :^)" ) ; r . updateCaptcha ( ) ; r . clear ( ) ; } } , function ( err ) { r . showError ( err ) ; r . clearSolution ( ) ; } ) ; }
2016-05-04 22:03:32 +05:00
var f = document . querySelector ( "form" ) ; f . onsubmit = function ( ) { postit ( ) ; return false ; } } }
2016-05-03 23:58:57 +05:00
/* local file: ./contrib/js/theme.js */
2016-04-30 18:58:21 +05:00
function enable _theme ( prefix , name ) { if ( prefix && name ) { var theme = document . getElementById ( "current_theme" ) ; if ( theme ) { theme . href = prefix + "static/" + name + ".css" ; var st = get _storage ( ) ; st . nntpchan _prefix = prefix ; st . nntpchan _theme = name ; } } }
2016-04-27 17:21:12 +05:00
var st = get _storage ( ) ; enable _theme ( st . nntpchan _prefix , st . nntpchan _theme ) ;