WordPress.org

Make WordPress Core

Changeset 10360


Ignore:
Timestamp:
01/14/09 21:55:26 (9 years ago)
Author:
azaozz
Message:

jQuery 1.3 final

Location:
trunk/wp-includes
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/js/jquery/jquery.js

    r10352 r10360  
    1 /*! 
    2  * jQuery JavaScript Library v1.3rc2 
     1/* 
     2 * jQuery JavaScript Library v1.3 
    33 * http://jquery.com/ 
    44 * 
     
    77 * http://docs.jquery.com/License 
    88 * 
    9  * Date: 2009-01-12 19:11:21 -0500 (Mon, 12 Jan 2009) 
    10  * Revision: 6100 
     9 * Date: 2009-01-13 12:50:31 -0500 (Tue, 13 Jan 2009) 
     10 * Revision: 6104 
    1111 */ 
    12 (function(){ 
    13  
    14 var  
    15     // Will speed up references to window, and allows munging its name. 
    16     window = this, 
    17     // Will speed up references to undefined, and allows munging its name. 
    18     undefined, 
    19     // Map over jQuery in case of overwrite 
    20     _jQuery = window.jQuery, 
    21     // Map over the $ in case of overwrite 
    22     _$ = window.$, 
    23  
    24     jQuery = window.jQuery = window.$ = function( selector, context ) { 
    25         // The jQuery object is actually just the init constructor 'enhanced' 
    26         return new jQuery.fn.init( selector, context ); 
    27     }, 
    28  
    29     // A simple way to check for HTML strings or ID strings 
    30     // (both of which we optimize for) 
    31     quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/, 
    32     // Is it a simple selector 
    33     isSimple = /^.[^:#\[\.,]*$/; 
    34  
    35 jQuery.fn = jQuery.prototype = { 
    36     init: function( selector, context ) { 
    37         // Make sure that a selection was provided 
    38         selector = selector || document; 
    39  
    40         // Handle $(DOMElement) 
    41         if ( selector.nodeType ) { 
    42             this[0] = selector; 
    43             this.length = 1; 
    44             this.context = selector; 
    45             return this; 
    46         } 
    47         // Handle HTML strings 
    48         if ( typeof selector === "string" ) { 
    49             // Are we dealing with HTML string or an ID? 
    50             var match = quickExpr.exec( selector ); 
    51  
    52             // Verify a match, and that no context was specified for #id 
    53             if ( match && (match[1] || !context) ) { 
    54  
    55                 // HANDLE: $(html) -> $(array) 
    56                 if ( match[1] ) 
    57                     selector = jQuery.clean( [ match[1] ], context ); 
    58  
    59                 // HANDLE: $("#id") 
    60                 else { 
    61                     var elem = document.getElementById( match[3] ); 
    62  
    63                     // Make sure an element was located 
    64                     if ( elem ){ 
    65                         // Handle the case where IE and Opera return items 
    66                         // by name instead of ID 
    67                         if ( elem.id != match[3] ) 
    68                             return jQuery().find( selector ); 
    69  
    70                         // Otherwise, we inject the element directly into the jQuery object 
    71                         var ret = jQuery( elem ); 
    72                         ret.context = document; 
    73                         ret.selector = selector; 
    74                         return ret; 
    75                     } 
    76                     selector = []; 
    77                 } 
    78  
    79             // HANDLE: $(expr, [context]) 
    80             // (which is just equivalent to: $(content).find(expr) 
    81             } else 
    82                 return jQuery( context ).find( selector ); 
    83  
    84         // HANDLE: $(function) 
    85         // Shortcut for document ready 
    86         } else if ( jQuery.isFunction( selector ) ) 
    87             return jQuery( document ).ready( selector ); 
    88  
    89         // Make sure that old selector state is passed along 
    90         if ( selector.selector && selector.context ) { 
    91             this.selector = selector.selector; 
    92             this.context = selector.context; 
    93         } 
    94  
    95         return this.setArray(jQuery.makeArray(selector)); 
    96     }, 
    97  
    98     // Start with an empty selector 
    99     selector: "", 
    100  
    101     // The current version of jQuery being used 
    102     jquery: "1.3rc2", 
    103  
    104     // The number of elements contained in the matched element set 
    105     size: function() { 
    106         return this.length; 
    107     }, 
    108  
    109     // Get the Nth element in the matched element set OR 
    110     // Get the whole matched element set as a clean array 
    111     get: function( num ) { 
    112         return num === undefined ? 
    113  
    114             // Return a 'clean' array 
    115             jQuery.makeArray( this ) : 
    116  
    117             // Return just the object 
    118             this[ num ]; 
    119     }, 
    120  
    121     // Take an array of elements and push it onto the stack 
    122     // (returning the new matched element set) 
    123     pushStack: function( elems, name, selector ) { 
    124         // Build a new jQuery matched element set 
    125         var ret = jQuery( elems ); 
    126  
    127         // Add the old object onto the stack (as a reference) 
    128         ret.prevObject = this; 
    129  
    130         ret.context = this.context; 
    131  
    132         if ( name === "find" ) 
    133             ret.selector = this.selector + (this.selector ? " " : "") + selector; 
    134         else if ( name ) 
    135             ret.selector = this.selector + "." + name + "(" + selector + ")"; 
    136  
    137         // Return the newly-formed element set 
    138         return ret; 
    139     }, 
    140  
    141     // Force the current matched set of elements to become 
    142     // the specified array of elements (destroying the stack in the process) 
    143     // You should use pushStack() in order to do this, but maintain the stack 
    144     setArray: function( elems ) { 
    145         // Resetting the length to 0, then using the native Array push 
    146         // is a super-fast way to populate an object with array-like properties 
    147         this.length = 0; 
    148         Array.prototype.push.apply( this, elems ); 
    149  
    150         return this; 
    151     }, 
    152  
    153     // Execute a callback for every element in the matched set. 
    154     // (You can seed the arguments with an array of args, but this is 
    155     // only used internally.) 
    156     each: function( callback, args ) { 
    157         return jQuery.each( this, callback, args ); 
    158     }, 
    159  
    160     // Determine the position of an element within 
    161     // the matched set of elements 
    162     index: function( elem ) { 
    163         // Locate the position of the desired element 
    164         return jQuery.inArray( 
    165             // If it receives a jQuery object, the first element is used 
    166             elem && elem.jquery ? elem[0] : elem 
    167         , this ); 
    168     }, 
    169  
    170     attr: function( name, value, type ) { 
    171         var options = name; 
    172  
    173         // Look for the case where we're accessing a style value 
    174         if ( typeof name === "string" ) 
    175             if ( value === undefined ) 
    176                 return this[0] && jQuery[ type || "attr" ]( this[0], name ); 
    177  
    178             else { 
    179                 options = {}; 
    180                 options[ name ] = value; 
    181             } 
    182  
    183         // Check to see if we're setting style values 
    184         return this.each(function(i){ 
    185             // Set all the styles 
    186             for ( name in options ) 
    187                 jQuery.attr( 
    188                     type ? 
    189                         this.style : 
    190                         this, 
    191                     name, jQuery.prop( this, options[ name ], type, i, name ) 
    192                 ); 
    193         }); 
    194     }, 
    195  
    196     css: function( key, value ) { 
    197         // ignore negative width and height values 
    198         if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 ) 
    199             value = undefined; 
    200         return this.attr( key, value, "curCSS" ); 
    201     }, 
    202  
    203     text: function( text ) { 
    204         if ( typeof text !== "object" && text != null ) 
    205             return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); 
    206  
    207         var ret = ""; 
    208  
    209         jQuery.each( text || this, function(){ 
    210             jQuery.each( this.childNodes, function(){ 
    211                 if ( this.nodeType != 8 ) 
    212                     ret += this.nodeType != 1 ? 
    213                         this.nodeValue : 
    214                         jQuery.fn.text( [ this ] ); 
    215             }); 
    216         }); 
    217  
    218         return ret; 
    219     }, 
    220  
    221     wrapAll: function( html ) { 
    222         if ( this[0] ) { 
    223             // The elements to wrap the target around 
    224             var wrap = jQuery( html, this[0].ownerDocument ).clone(); 
    225  
    226             if ( this[0].parentNode ) 
    227                 wrap.insertBefore( this[0] ); 
    228  
    229             wrap.map(function(){ 
    230                 var elem = this; 
    231  
    232                 while ( elem.firstChild ) 
    233                     elem = elem.firstChild; 
    234  
    235                 return elem; 
    236             }).append(this); 
    237         } 
    238  
    239         return this; 
    240     }, 
    241  
    242     wrapInner: function( html ) { 
    243         return this.each(function(){ 
    244             jQuery( this ).contents().wrapAll( html ); 
    245         }); 
    246     }, 
    247  
    248     wrap: function( html ) { 
    249         return this.each(function(){ 
    250             jQuery( this ).wrapAll( html ); 
    251         }); 
    252     }, 
    253  
    254     append: function() { 
    255         return this.domManip(arguments, true, function(elem){ 
    256             if (this.nodeType == 1) 
    257                 this.appendChild( elem ); 
    258         }); 
    259     }, 
    260  
    261     prepend: function() { 
    262         return this.domManip(arguments, true, function(elem){ 
    263             if (this.nodeType == 1) 
    264                 this.insertBefore( elem, this.firstChild ); 
    265         }); 
    266     }, 
    267  
    268     before: function() { 
    269         return this.domManip(arguments, false, function(elem){ 
    270             this.parentNode.insertBefore( elem, this ); 
    271         }); 
    272     }, 
    273  
    274     after: function() { 
    275         return this.domManip(arguments, false, function(elem){ 
    276             this.parentNode.insertBefore( elem, this.nextSibling ); 
    277         }); 
    278     }, 
    279  
    280     end: function() { 
    281         return this.prevObject || jQuery( [] ); 
    282     }, 
    283  
    284     // For internal use only. 
    285     // Behaves like an Array's .push method, not like a jQuery method. 
    286     push: [].push, 
    287  
    288     find: function( selector ) { 
    289         if ( this.length === 1 && !/,/.test(selector) ) { 
    290             var ret = this.pushStack( [], "find", selector ); 
    291             ret.length = 0; 
    292             jQuery.find( selector, this[0], ret ); 
    293             return ret; 
    294         } else { 
    295             var elems = jQuery.map(this, function(elem){ 
    296                 return jQuery.find( selector, elem ); 
    297             }); 
    298  
    299             return this.pushStack( /[^+>] [^+>]/.test( selector ) ? 
    300                 jQuery.unique( elems ) : 
    301                 elems, "find", selector ); 
    302         } 
    303     }, 
    304  
    305     clone: function( events ) { 
    306         // Do the clone 
    307         var ret = this.map(function(){ 
    308             if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) { 
    309                 // IE copies events bound via attachEvent when 
    310                 // using cloneNode. Calling detachEvent on the 
    311                 // clone will also remove the events from the orignal 
    312                 // In order to get around this, we use innerHTML. 
    313                 // Unfortunately, this means some modifications to 
    314                 // attributes in IE that are actually only stored 
    315                 // as properties will not be copied (such as the 
    316                 // the name attribute on an input). 
    317                 var clone = this.cloneNode(true), 
    318                     container = document.createElement("div"); 
    319                 container.appendChild(clone); 
    320                 return jQuery.clean([container.innerHTML])[0]; 
    321             } else 
    322                 return this.cloneNode(true); 
    323         }); 
    324  
    325         // Need to set the expando to null on the cloned set if it exists 
    326         // removeData doesn't work here, IE removes it from the original as well 
    327         // this is primarily for IE but the data expando shouldn't be copied over in any browser 
    328         var clone = ret.find("*").andSelf().each(function(){ 
    329             if ( this[ expando ] !== undefined ) 
    330                 this[ expando ] = null; 
    331         }); 
    332  
    333         // Copy the events from the original to the clone 
    334         if ( events === true ) 
    335             this.find("*").andSelf().each(function(i){ 
    336                 if (this.nodeType == 3) 
    337                     return; 
    338                 var events = jQuery.data( this, "events" ); 
    339  
    340                 for ( var type in events ) 
    341                     for ( var handler in events[ type ] ) 
    342                         jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data ); 
    343             }); 
    344  
    345         // Return the cloned set 
    346         return ret; 
    347     }, 
    348  
    349     filter: function( selector ) { 
    350         return this.pushStack( 
    351             jQuery.isFunction( selector ) && 
    352             jQuery.grep(this, function(elem, i){ 
    353                 return selector.call( elem, i ); 
    354             }) || 
    355  
    356             jQuery.multiFilter( selector, jQuery.grep(this, function(elem){ 
    357                 return elem.nodeType === 1; 
    358             }) ), "filter", selector ); 
    359     }, 
    360  
    361     closest: function( selector ) { 
    362         var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null; 
    363  
    364         return this.map(function(){ 
    365             var cur = this; 
    366             while ( cur && cur.ownerDocument ) { 
    367                 if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) 
    368                     return cur; 
    369                 cur = cur.parentNode; 
    370             } 
    371         }); 
    372     }, 
    373  
    374     not: function( selector ) { 
    375         if ( typeof selector === "string" ) 
    376             // test special case where just one selector is passed in 
    377             if ( isSimple.test( selector ) ) 
    378                 return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector ); 
    379             else 
    380                 selector = jQuery.multiFilter( selector, this ); 
    381  
    382         var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; 
    383         return this.filter(function() { 
    384             return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; 
    385         }); 
    386     }, 
    387  
    388     add: function( selector ) { 
    389         return this.pushStack( jQuery.unique( jQuery.merge( 
    390             this.get(), 
    391             typeof selector === "string" ? 
    392                 jQuery( selector ) : 
    393                 jQuery.makeArray( selector ) 
    394         ))); 
    395     }, 
    396  
    397     is: function( selector ) { 
    398         return !!selector && jQuery.multiFilter( selector, this ).length > 0; 
    399     }, 
    400  
    401     hasClass: function( selector ) { 
    402         return !!selector && this.is( "." + selector ); 
    403     }, 
    404  
    405     val: function( value ) { 
    406         if ( value === undefined ) {             
    407             var elem = this[0]; 
    408  
    409             if ( elem ) { 
    410                 if( jQuery.nodeName( elem, 'option' ) ) 
    411                     return (elem.attributes.value || {}).specified ? elem.value : elem.text; 
    412                  
    413                 // We need to handle select boxes special 
    414                 if ( jQuery.nodeName( elem, "select" ) ) { 
    415                     var index = elem.selectedIndex, 
    416                         values = [], 
    417                         options = elem.options, 
    418                         one = elem.type == "select-one"; 
    419  
    420                     // Nothing was selected 
    421                     if ( index < 0 ) 
    422                         return null; 
    423  
    424                     // Loop through all the selected options 
    425                     for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { 
    426                         var option = options[ i ]; 
    427  
    428                         if ( option.selected ) { 
    429                             // Get the specifc value for the option 
    430                             value = jQuery(option).val(); 
    431  
    432                             // We don't need an array for one selects 
    433                             if ( one ) 
    434                                 return value; 
    435  
    436                             // Multi-Selects return an array 
    437                             values.push( value ); 
    438                         } 
    439                     } 
    440  
    441                     return values;               
    442                 } 
    443  
    444                 // Everything else, we just grab the value 
    445                 return (elem.value || "").replace(/\r/g, ""); 
    446  
    447             } 
    448  
    449             return undefined; 
    450         } 
    451  
    452         if ( typeof value === "number" ) 
    453             value += ''; 
    454  
    455         return this.each(function(){ 
    456             if ( this.nodeType != 1 ) 
    457                 return; 
    458  
    459             if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) ) 
    460                 this.checked = (jQuery.inArray(this.value, value) >= 0 || 
    461                     jQuery.inArray(this.name, value) >= 0); 
    462  
    463             else if ( jQuery.nodeName( this, "select" ) ) { 
    464                 var values = jQuery.makeArray(value); 
    465  
    466                 jQuery( "option", this ).each(function(){ 
    467                     this.selected = (jQuery.inArray( this.value, values ) >= 0 || 
    468                         jQuery.inArray( this.text, values ) >= 0); 
    469                 }); 
    470  
    471                 if ( !values.length ) 
    472                     this.selectedIndex = -1; 
    473  
    474             } else 
    475                 this.value = value; 
    476         }); 
    477     }, 
    478  
    479     html: function( value ) { 
    480         return value === undefined ? 
    481             (this[0] ? 
    482                 this[0].innerHTML : 
    483                 null) : 
    484             this.empty().append( value ); 
    485     }, 
    486  
    487     replaceWith: function( value ) { 
    488         return this.after( value ).remove(); 
    489     }, 
    490  
    491     eq: function( i ) { 
    492         return this.slice( i, +i + 1 ); 
    493     }, 
    494  
    495     slice: function() { 
    496         return this.pushStack( Array.prototype.slice.apply( this, arguments ), 
    497             "slice", Array.prototype.slice.call(arguments).join(",") ); 
    498     }, 
    499  
    500     map: function( callback ) { 
    501         return this.pushStack( jQuery.map(this, function(elem, i){ 
    502             return callback.call( elem, i, elem ); 
    503         })); 
    504     }, 
    505  
    506     andSelf: function() { 
    507         return this.add( this.prevObject ); 
    508     }, 
    509  
    510     domManip: function( args, table, callback ) { 
    511         if ( this[0] ) { 
    512             var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(), 
    513                 scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ), 
    514                 first = fragment.firstChild, 
    515                 extra = this.length > 1 ? fragment.cloneNode(true) : fragment; 
    516  
    517             if ( first ) 
    518                 for ( var i = 0, l = this.length; i < l; i++ ) 
    519                     callback.call( root(this[i], first), i > 0 ? extra.cloneNode(true) : fragment ); 
    520              
    521             if ( scripts ) 
    522                 jQuery.each( scripts, evalScript ); 
    523         } 
    524  
    525         return this; 
    526          
    527         function root( elem, cur ) { 
    528             return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ? 
    529                 (elem.getElementsByTagName("tbody")[0] || 
    530                 elem.appendChild(elem.ownerDocument.createElement("tbody"))) : 
    531                 elem; 
    532         } 
    533     } 
    534 }; 
    535  
    536 // Give the init function the jQuery prototype for later instantiation 
    537 jQuery.fn.init.prototype = jQuery.fn; 
    538  
    539 function evalScript( i, elem ) { 
    540     if ( elem.src ) 
    541         jQuery.ajax({ 
    542             url: elem.src, 
    543             async: false, 
    544             dataType: "script" 
    545         }); 
    546  
    547     else 
    548         jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); 
    549  
    550     if ( elem.parentNode ) 
    551         elem.parentNode.removeChild( elem ); 
    552 } 
    553  
    554 function now(){ 
    555     return +new Date; 
    556 } 
    557  
    558 jQuery.extend = jQuery.fn.extend = function() { 
    559     // copy reference to target object 
    560     var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; 
    561  
    562     // Handle a deep copy situation 
    563     if ( typeof target === "boolean" ) { 
    564         deep = target; 
    565         target = arguments[1] || {}; 
    566         // skip the boolean and the target 
    567         i = 2; 
    568     } 
    569  
    570     // Handle case when target is a string or something (possible in deep copy) 
    571     if ( typeof target !== "object" && !jQuery.isFunction(target) ) 
    572         target = {}; 
    573  
    574     // extend jQuery itself if only one argument is passed 
    575     if ( length == i ) { 
    576         target = this; 
    577         --i; 
    578     } 
    579  
    580     for ( ; i < length; i++ ) 
    581         // Only deal with non-null/undefined values 
    582         if ( (options = arguments[ i ]) != null ) 
    583             // Extend the base object 
    584             for ( var name in options ) { 
    585                 var src = target[ name ], copy = options[ name ]; 
    586  
    587                 // Prevent never-ending loop 
    588                 if ( target === copy ) 
    589                     continue; 
    590  
    591                 // Recurse if we're merging object values 
    592                 if ( deep && copy && typeof copy === "object" && !copy.nodeType ) 
    593                     target[ name ] = jQuery.extend( deep,  
    594                         // Never move original objects, clone them 
    595                         src || ( copy.length != null ? [ ] : { } ) 
    596                     , copy ); 
    597  
    598                 // Don't bring in undefined values 
    599                 else if ( copy !== undefined ) 
    600                     target[ name ] = copy; 
    601  
    602             } 
    603  
    604     // Return the modified object 
    605     return target; 
    606 }; 
    607  
    608 // exclude the following css properties to add px 
    609 var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i, 
    610     // cache defaultView 
    611     defaultView = document.defaultView || {}, 
    612     toString = Object.prototype.toString; 
    613  
    614 jQuery.extend({ 
    615     noConflict: function( deep ) { 
    616         window.$ = _$; 
    617  
    618         if ( deep ) 
    619             window.jQuery = _jQuery; 
    620  
    621         return jQuery; 
    622     }, 
    623  
    624     // See test/unit/core.js for details concerning isFunction. 
    625     // Since version 1.3, DOM methods and functions like alert 
    626     // aren't supported. They return false on IE (#2968). 
    627     isFunction: function( obj ) { 
    628         return toString.call(obj) === "[object Function]"; 
    629     }, 
    630  
    631     isArray: function( obj ) { 
    632         return toString.call(obj) === "[object Array]"; 
    633     }, 
    634  
    635     // check if an element is in a (or is an) XML document 
    636     isXMLDoc: function( elem ) { 
    637         return elem.documentElement && !elem.body || 
    638             elem.tagName && elem.ownerDocument && !elem.ownerDocument.body; 
    639     }, 
    640  
    641     // Evalulates a script in a global context 
    642     globalEval: function( data ) { 
    643         data = jQuery.trim( data ); 
    644  
    645         if ( data ) { 
    646             // Inspired by code by Andrea Giammarchi 
    647             // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html 
    648             var head = document.getElementsByTagName("head")[0] || document.documentElement, 
    649                 script = document.createElement("script"); 
    650  
    651             script.type = "text/javascript"; 
    652             if ( jQuery.support.scriptEval ) 
    653                 script.appendChild( document.createTextNode( data ) ); 
    654             else 
    655                 script.text = data; 
    656  
    657             // Use insertBefore instead of appendChild  to circumvent an IE6 bug. 
    658             // This arises when a base node is used (#2709). 
    659             head.insertBefore( script, head.firstChild ); 
    660             head.removeChild( script ); 
    661         } 
    662     }, 
    663  
    664     nodeName: function( elem, name ) { 
    665         return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); 
    666     }, 
    667  
    668     // args is for internal usage only 
    669     each: function( object, callback, args ) { 
    670         var name, i = 0, length = object.length; 
    671  
    672         if ( args ) { 
    673             if ( length === undefined ) { 
    674                 for ( name in object ) 
    675                     if ( callback.apply( object[ name ], args ) === false ) 
    676                         break; 
    677             } else 
    678                 for ( ; i < length; ) 
    679                     if ( callback.apply( object[ i++ ], args ) === false ) 
    680                         break; 
    681  
    682         // A special, fast, case for the most common use of each 
    683         } else { 
    684             if ( length === undefined ) { 
    685                 for ( name in object ) 
    686                     if ( callback.call( object[ name ], name, object[ name ] ) === false ) 
    687                         break; 
    688             } else 
    689                 for ( var value = object[0]; 
    690                     i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} 
    691         } 
    692  
    693         return object; 
    694     }, 
    695  
    696     prop: function( elem, value, type, i, name ) { 
    697         // Handle executable functions 
    698         if ( jQuery.isFunction( value ) ) 
    699             value = value.call( elem, i ); 
    700  
    701         // Handle passing in a number to a CSS property 
    702         return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ? 
    703             value + "px" : 
    704             value; 
    705     }, 
    706  
    707     className: { 
    708         // internal only, use addClass("class") 
    709         add: function( elem, classNames ) { 
    710             jQuery.each((classNames || "").split(/\s+/), function(i, className){ 
    711                 if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) 
    712                     elem.className += (elem.className ? " " : "") + className; 
    713             }); 
    714         }, 
    715  
    716         // internal only, use removeClass("class") 
    717         remove: function( elem, classNames ) { 
    718             if (elem.nodeType == 1) 
    719                 elem.className = classNames !== undefined ? 
    720                     jQuery.grep(elem.className.split(/\s+/), function(className){ 
    721                         return !jQuery.className.has( classNames, className ); 
    722                     }).join(" ") : 
    723                     ""; 
    724         }, 
    725  
    726         // internal only, use hasClass("class") 
    727         has: function( elem, className ) { 
    728             return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; 
    729         } 
    730     }, 
    731  
    732     // A method for quickly swapping in/out CSS properties to get correct calculations 
    733     swap: function( elem, options, callback ) { 
    734         var old = {}; 
    735         // Remember the old values, and insert the new ones 
    736         for ( var name in options ) { 
    737             old[ name ] = elem.style[ name ]; 
    738             elem.style[ name ] = options[ name ]; 
    739         } 
    740  
    741         callback.call( elem ); 
    742  
    743         // Revert the old values 
    744         for ( var name in options ) 
    745             elem.style[ name ] = old[ name ]; 
    746     }, 
    747  
    748     css: function( elem, name, force ) { 
    749         if ( name == "width" || name == "height" ) { 
    750             var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; 
    751  
    752             function getWH() { 
    753                 val = name == "width" ? elem.offsetWidth : elem.offsetHeight; 
    754                 var padding = 0, border = 0; 
    755                 jQuery.each( which, function() { 
    756                     padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; 
    757                     border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; 
    758                 }); 
    759                 val -= Math.round(padding + border); 
    760             } 
    761  
    762             if ( jQuery(elem).is(":visible") ) 
    763                 getWH(); 
    764             else 
    765                 jQuery.swap( elem, props, getWH ); 
    766  
    767             return Math.max(0, val); 
    768         } 
    769  
    770         return jQuery.curCSS( elem, name, force ); 
    771     }, 
    772  
    773     curCSS: function( elem, name, force ) { 
    774         var ret, style = elem.style; 
    775  
    776         // We need to handle opacity special in IE 
    777         if ( name == "opacity" && !jQuery.support.opacity ) { 
    778             ret = jQuery.attr( style, "opacity" ); 
    779  
    780             return ret == "" ? 
    781                 "1" : 
    782                 ret; 
    783         } 
    784  
    785         // Make sure we're using the right name for getting the float value 
    786         if ( name.match( /float/i ) ) 
    787             name = styleFloat; 
    788  
    789         if ( !force && style && style[ name ] ) 
    790             ret = style[ name ]; 
    791  
    792         else if ( defaultView.getComputedStyle ) { 
    793  
    794             // Only "float" is needed here 
    795             if ( name.match( /float/i ) ) 
    796                 name = "float"; 
    797  
    798             name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); 
    799  
    800             var computedStyle = defaultView.getComputedStyle( elem, null ); 
    801  
    802             if ( computedStyle ) 
    803                 ret = computedStyle.getPropertyValue( name ); 
    804  
    805             // We should always get a number back from opacity 
    806             if ( name == "opacity" && ret == "" ) 
    807                 ret = "1"; 
    808  
    809         } else if ( elem.currentStyle ) { 
    810             var camelCase = name.replace(/\-(\w)/g, function(all, letter){ 
    811                 return letter.toUpperCase(); 
    812             }); 
    813  
    814             ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; 
    815  
    816             // From the awesome hack by Dean Edwards 
    817             // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 
    818  
    819             // If we're not dealing with a regular pixel number 
    820             // but a number that has a weird ending, we need to convert it to pixels 
    821             if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) { 
    822                 // Remember the original values 
    823                 var left = style.left, rsLeft = elem.runtimeStyle.left; 
    824  
    825                 // Put in the new values to get a computed value out 
    826                 elem.runtimeStyle.left = elem.currentStyle.left; 
    827                 style.left = ret || 0; 
    828                 ret = style.pixelLeft + "px"; 
    829  
    830                 // Revert the changed values 
    831                 style.left = left; 
    832                 elem.runtimeStyle.left = rsLeft; 
    833             } 
    834         } 
    835  
    836         return ret; 
    837     }, 
    838  
    839     clean: function( elems, context, fragment ) { 
    840         context = context || document; 
    841  
    842         // !context.createElement fails in IE with an error but returns typeof 'object' 
    843         if ( typeof context.createElement === "undefined" ) 
    844             context = context.ownerDocument || context[0] && context[0].ownerDocument || document; 
    845  
    846         // If a single string is passed in and it's a single tag 
    847         // just do a createElement and skip the rest 
    848         if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) { 
    849             var match = /^<(\w+)\s*\/?>$/.exec(elems[0]); 
    850             if ( match ) 
    851                 return [ context.createElement( match[1] ) ]; 
    852         } 
    853  
    854         var ret = [], scripts = [], div = context.createElement("div"); 
    855  
    856         jQuery.each(elems, function(i, elem){ 
    857             if ( typeof elem === "number" ) 
    858                 elem += ''; 
    859  
    860             if ( !elem ) 
    861                 return; 
    862  
    863             // Convert html string into DOM nodes 
    864             if ( typeof elem === "string" ) { 
    865                 // Fix "XHTML"-style tags in all browsers 
    866                 elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ 
    867                     return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? 
    868                         all : 
    869                         front + "></" + tag + ">"; 
    870                 }); 
    871  
    872                 // Trim whitespace, otherwise indexOf won't work as expected 
    873                 var tags = jQuery.trim( elem ).toLowerCase(); 
    874  
    875                 var wrap = 
    876                     // option or optgroup 
    877                     !tags.indexOf("<opt") && 
    878                     [ 1, "<select multiple='multiple'>", "</select>" ] || 
    879  
    880                     !tags.indexOf("<leg") && 
    881                     [ 1, "<fieldset>", "</fieldset>" ] || 
    882  
    883                     tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && 
    884                     [ 1, "<table>", "</table>" ] || 
    885  
    886                     !tags.indexOf("<tr") && 
    887                     [ 2, "<table><tbody>", "</tbody></table>" ] || 
    888  
    889                     // <thead> matched above 
    890                     (!tags.indexOf("<td") || !tags.indexOf("<th")) && 
    891                     [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] || 
    892  
    893                     !tags.indexOf("<col") && 
    894                     [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] || 
    895  
    896                     // IE can't serialize <link> and <script> tags normally 
    897                     !jQuery.support.htmlSerialize && 
    898                     [ 1, "div<div>", "</div>" ] || 
    899  
    900                     [ 0, "", "" ]; 
    901  
    902                 // Go to html and back, then peel off extra wrappers 
    903                 div.innerHTML = wrap[1] + elem + wrap[2]; 
    904  
    905                 // Move to the right depth 
    906                 while ( wrap[0]-- ) 
    907                     div = div.lastChild; 
    908  
    909                 // Remove IE's autoinserted <tbody> from table fragments 
    910                 if ( !jQuery.support.tbody ) { 
    911  
    912                     // String was a <table>, *may* have spurious <tbody> 
    913                     var tbody = !tags.indexOf("<table") && tags.indexOf("<tbody") < 0 ? 
    914                         div.firstChild && div.firstChild.childNodes : 
    915  
    916                         // String was a bare <thead> or <tfoot> 
    917                         wrap[1] == "<table>" && tags.indexOf("<tbody") < 0 ? 
    918                             div.childNodes : 
    919                             []; 
    920  
    921                     for ( var j = tbody.length - 1; j >= 0 ; --j ) 
    922                         if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) 
    923                             tbody[ j ].parentNode.removeChild( tbody[ j ] ); 
    924  
    925                     } 
    926  
    927                 // IE completely kills leading whitespace when innerHTML is used 
    928                 if ( !jQuery.support.leadingWhitespace && /^\s/.test( elem ) ) 
    929                     div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild ); 
    930                  
    931                 elem = jQuery.makeArray( div.childNodes ); 
    932             } 
    933  
    934             if ( elem.nodeType ) 
    935                 ret.push( elem ); 
    936             else 
    937                 ret = jQuery.merge( ret, elem ); 
    938  
    939         }); 
    940  
    941         if ( fragment ) { 
    942             for ( var i = 0; ret[i]; i++ ) { 
    943                 if ( jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) { 
    944                     scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] ); 
    945                 } else { 
    946                     if ( ret[i].nodeType === 1 ) 
    947                         ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) ); 
    948                     fragment.appendChild( ret[i] ); 
    949                 } 
    950             } 
    951              
    952             return scripts; 
    953         } 
    954  
    955         return ret; 
    956     }, 
    957  
    958     attr: function( elem, name, value ) { 
    959         // don't set attributes on text and comment nodes 
    960         if (!elem || elem.nodeType == 3 || elem.nodeType == 8) 
    961             return undefined; 
    962  
    963         var notxml = !jQuery.isXMLDoc( elem ), 
    964             // Whether we are setting (or getting) 
    965             set = value !== undefined; 
    966  
    967         // Try to normalize/fix the name 
    968         name = notxml && jQuery.props[ name ] || name; 
    969  
    970         // Only do all the following if this is a node (faster for style) 
    971         // IE elem.getAttribute passes even for style 
    972         if ( elem.tagName ) { 
    973  
    974             // These attributes require special treatment 
    975             var special = /href|src|style/.test( name ); 
    976  
    977             // Safari mis-reports the default selected property of a hidden option 
    978             // Accessing the parent's selectedIndex property fixes it 
    979             if ( name == "selected" && elem.parentNode ) 
    980                 elem.parentNode.selectedIndex; 
    981  
    982             // If applicable, access the attribute via the DOM 0 way 
    983             if ( name in elem && notxml && !special ) { 
    984                 if ( set ){ 
    985                     // We can't allow the type property to be changed (since it causes problems in IE) 
    986                     if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode ) 
    987                         throw "type property can't be changed"; 
    988  
    989                     elem[ name ] = value; 
    990                 } 
    991  
    992                 // browsers index elements by id/name on forms, give priority to attributes. 
    993                 if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) 
    994                     return elem.getAttributeNode( name ).nodeValue; 
    995  
    996                 // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set 
    997                 // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ 
    998                 if ( name == "tabIndex" ) { 
    999                     var attributeNode = elem.getAttributeNode( "tabIndex" ); 
    1000                     return attributeNode && attributeNode.specified 
    1001                         ? attributeNode.value 
    1002                         : elem.nodeName.match(/^(a|area|button|input|object|select|textarea)$/i) 
    1003                             ? 0 
    1004                             : undefined; 
    1005                 } 
    1006  
    1007                 return elem[ name ]; 
    1008             } 
    1009  
    1010             if ( !jQuery.support.style && notxml &&  name == "style" ) 
    1011                 return jQuery.attr( elem.style, "cssText", value ); 
    1012  
    1013             if ( set ) 
    1014                 // convert the value to a string (all browsers do this but IE) see #1070 
    1015                 elem.setAttribute( name, "" + value ); 
    1016  
    1017             var attr = !jQuery.support.hrefNormalized && notxml && special 
    1018                     // Some attributes require a special call on IE 
    1019                     ? elem.getAttribute( name, 2 ) 
    1020                     : elem.getAttribute( name ); 
    1021  
    1022             // Non-existent attributes return null, we normalize to undefined 
    1023             return attr === null ? undefined : attr; 
    1024         } 
    1025  
    1026         // elem is actually elem.style ... set the style 
    1027  
    1028         // IE uses filters for opacity 
    1029         if ( !jQuery.support.opacity && name == "opacity" ) { 
    1030             if ( set ) { 
    1031                 // IE has trouble with opacity if it does not have layout 
    1032                 // Force it by setting the zoom level 
    1033                 elem.zoom = 1; 
    1034  
    1035                 // Set the alpha filter to set the opacity 
    1036                 elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) + 
    1037                     (parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")"); 
    1038             } 
    1039  
    1040             return elem.filter && elem.filter.indexOf("opacity=") >= 0 ? 
    1041                 (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '': 
    1042                 ""; 
    1043         } 
    1044  
    1045         name = name.replace(/-([a-z])/ig, function(all, letter){ 
    1046             return letter.toUpperCase(); 
    1047         }); 
    1048  
    1049         if ( set ) 
    1050             elem[ name ] = value; 
    1051  
    1052         return elem[ name ]; 
    1053     }, 
    1054  
    1055     trim: function( text ) { 
    1056         return (text || "").replace( /^\s+|\s+$/g, "" ); 
    1057     }, 
    1058  
    1059     makeArray: function( array ) { 
    1060         var ret = []; 
    1061  
    1062         if( array != null ){ 
    1063             var i = array.length; 
    1064             // The window, strings (and functions) also have 'length' 
    1065             if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval ) 
    1066                 ret[0] = array; 
    1067             else 
    1068                 while( i ) 
    1069                     ret[--i] = array[i]; 
    1070         } 
    1071  
    1072         return ret; 
    1073     }, 
    1074  
    1075     inArray: function( elem, array ) { 
    1076         for ( var i = 0, length = array.length; i < length; i++ ) 
    1077         // Use === because on IE, window == document 
    1078             if ( array[ i ] === elem ) 
    1079                 return i; 
    1080  
    1081         return -1; 
    1082     }, 
    1083  
    1084     merge: function( first, second ) { 
    1085         // We have to loop this way because IE & Opera overwrite the length 
    1086         // expando of getElementsByTagName 
    1087         var i = 0, elem, pos = first.length; 
    1088         // Also, we need to make sure that the correct elements are being returned 
    1089         // (IE returns comment nodes in a '*' query) 
    1090         if ( !jQuery.support.getAll ) { 
    1091             while ( (elem = second[ i++ ]) != null ) 
    1092                 if ( elem.nodeType != 8 ) 
    1093                     first[ pos++ ] = elem; 
    1094  
    1095         } else 
    1096             while ( (elem = second[ i++ ]) != null ) 
    1097                 first[ pos++ ] = elem; 
    1098  
    1099         return first; 
    1100     }, 
    1101  
    1102     unique: function( array ) { 
    1103         var ret = [], done = {}; 
    1104  
    1105         try { 
    1106  
    1107             for ( var i = 0, length = array.length; i < length; i++ ) { 
    1108                 var id = jQuery.data( array[ i ] ); 
    1109  
    1110                 if ( !done[ id ] ) { 
    1111                     done[ id ] = true; 
    1112                     ret.push( array[ i ] ); 
    1113                 } 
    1114             } 
    1115  
    1116         } catch( e ) { 
    1117             ret = array; 
    1118         } 
    1119  
    1120         return ret; 
    1121     }, 
    1122  
    1123     grep: function( elems, callback, inv ) { 
    1124         var ret = []; 
    1125  
    1126         // Go through the array, only saving the items 
    1127         // that pass the validator function 
    1128         for ( var i = 0, length = elems.length; i < length; i++ ) 
    1129             if ( !inv != !callback( elems[ i ], i ) ) 
    1130                 ret.push( elems[ i ] ); 
    1131  
    1132         return ret; 
    1133     }, 
    1134  
    1135     map: function( elems, callback ) { 
    1136         var ret = []; 
    1137  
    1138         // Go through the array, translating each of the items to their 
    1139         // new value (or values). 
    1140         for ( var i = 0, length = elems.length; i < length; i++ ) { 
    1141             var value = callback( elems[ i ], i ); 
    1142  
    1143             if ( value != null ) 
    1144                 ret[ ret.length ] = value; 
    1145         } 
    1146  
    1147         return ret.concat.apply( [], ret ); 
    1148     } 
    1149 }); 
    1150  
    1151 // Use of jQuery.browser is deprecated. 
    1152 // It's included for backwards compatibility and plugins, 
    1153 // although they should work to migrate away. 
    1154  
    1155 var userAgent = navigator.userAgent.toLowerCase(); 
    1156  
    1157 // Figure out what browser is being used 
    1158 jQuery.browser = { 
    1159     version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1], 
    1160     safari: /webkit/.test( userAgent ), 
    1161     opera: /opera/.test( userAgent ), 
    1162     msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ), 
    1163     mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent ) 
    1164 }; 
    1165  
    1166 jQuery.each({ 
    1167     parent: function(elem){return elem.parentNode;}, 
    1168     parents: function(elem){return jQuery.dir(elem,"parentNode");}, 
    1169     next: function(elem){return jQuery.nth(elem,2,"nextSibling");}, 
    1170     prev: function(elem){return jQuery.nth(elem,2,"previousSibling");}, 
    1171     nextAll: function(elem){return jQuery.dir(elem,"nextSibling");}, 
    1172     prevAll: function(elem){return jQuery.dir(elem,"previousSibling");}, 
    1173     siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);}, 
    1174     children: function(elem){return jQuery.sibling(elem.firstChild);}, 
    1175     contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);} 
    1176 }, function(name, fn){ 
    1177     jQuery.fn[ name ] = function( selector ) { 
    1178         var ret = jQuery.map( this, fn ); 
    1179  
    1180         if ( selector && typeof selector == "string" ) 
    1181             ret = jQuery.multiFilter( selector, ret ); 
    1182  
    1183         return this.pushStack( jQuery.unique( ret ), name, selector ); 
    1184     }; 
    1185 }); 
    1186  
    1187 jQuery.each({ 
    1188     appendTo: "append", 
    1189     prependTo: "prepend", 
    1190     insertBefore: "before", 
    1191     insertAfter: "after", 
    1192     replaceAll: "replaceWith" 
    1193 }, function(name, original){ 
    1194     jQuery.fn[ name ] = function() { 
    1195         var args = arguments; 
    1196  
    1197         return this.each(function(){ 
    1198             for ( var i = 0, length = args.length; i < length; i++ ) 
    1199                 jQuery( args[ i ] )[ original ]( this ); 
    1200         }); 
    1201     }; 
    1202 }); 
    1203  
    1204 jQuery.each({ 
    1205     removeAttr: function( name ) { 
    1206         jQuery.attr( this, name, "" ); 
    1207         if (this.nodeType == 1) 
    1208             this.removeAttribute( name ); 
    1209     }, 
    1210  
    1211     addClass: function( classNames ) { 
    1212         jQuery.className.add( this, classNames ); 
    1213     }, 
    1214  
    1215     removeClass: function( classNames ) { 
    1216         jQuery.className.remove( this, classNames ); 
    1217     }, 
    1218  
    1219     toggleClass: function( classNames, state ) { 
    1220         if( typeof state !== "boolean" ) 
    1221             state = !jQuery.className.has( this, classNames ); 
    1222         jQuery.className[ state ? "add" : "remove" ]( this, classNames ); 
    1223     }, 
    1224  
    1225     remove: function( selector ) { 
    1226         if ( !selector || jQuery.filter( selector, [ this ] ).length ) { 
    1227             // Prevent memory leaks 
    1228             jQuery( "*", this ).add([this]).each(function(){ 
    1229                 jQuery.event.remove(this); 
    1230                 jQuery.removeData(this); 
    1231             }); 
    1232             if (this.parentNode) 
    1233                 this.parentNode.removeChild( this ); 
    1234         } 
    1235     }, 
    1236  
    1237     empty: function() { 
    1238         // Remove element nodes and prevent memory leaks 
    1239         jQuery( ">*", this ).remove(); 
    1240  
    1241         // Remove any remaining nodes 
    1242         while ( this.firstChild ) 
    1243             this.removeChild( this.firstChild ); 
    1244     } 
    1245 }, function(name, fn){ 
    1246     jQuery.fn[ name ] = function(){ 
    1247         return this.each( fn, arguments ); 
    1248     }; 
    1249 }); 
    1250  
    1251 // Helper function used by the dimensions and offset modules 
    1252 function num(elem, prop) { 
    1253     return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0; 
    1254 } 
    1255 var expando = "jQuery" + now(), uuid = 0, windowData = {}; 
    1256  
    1257 jQuery.extend({ 
    1258     cache: {}, 
    1259  
    1260     data: function( elem, name, data ) { 
    1261         elem = elem == window ? 
    1262             windowData : 
    1263             elem; 
    1264  
    1265         var id = elem[ expando ]; 
    1266  
    1267         // Compute a unique ID for the element 
    1268         if ( !id ) 
    1269             id = elem[ expando ] = ++uuid; 
    1270  
    1271         // Only generate the data cache if we're 
    1272         // trying to access or manipulate it 
    1273         if ( name && !jQuery.cache[ id ] ) 
    1274             jQuery.cache[ id ] = {}; 
    1275  
    1276         // Prevent overriding the named cache with undefined values 
    1277         if ( data !== undefined ) 
    1278             jQuery.cache[ id ][ name ] = data; 
    1279  
    1280         // Return the named cache data, or the ID for the element 
    1281         return name ? 
    1282             jQuery.cache[ id ][ name ] : 
    1283             id; 
    1284     }, 
    1285  
    1286     removeData: function( elem, name ) { 
    1287         elem = elem == window ? 
    1288             windowData : 
    1289             elem; 
    1290  
    1291         var id = elem[ expando ]; 
    1292  
    1293         // If we want to remove a specific section of the element's data 
    1294         if ( name ) { 
    1295             if ( jQuery.cache[ id ] ) { 
    1296                 // Remove the section of cache data 
    1297                 delete jQuery.cache[ id ][ name ]; 
    1298  
    1299                 // If we've removed all the data, remove the element's cache 
    1300                 name = ""; 
    1301  
    1302                 for ( name in jQuery.cache[ id ] ) 
    1303                     break; 
    1304  
    1305                 if ( !name ) 
    1306                     jQuery.removeData( elem ); 
    1307             } 
    1308  
    1309         // Otherwise, we want to remove all of the element's data 
    1310         } else { 
    1311             // Clean up the element expando 
    1312             try { 
    1313                 delete elem[ expando ]; 
    1314             } catch(e){ 
    1315                 // IE has trouble directly removing the expando 
    1316                 // but it's ok with using removeAttribute 
    1317                 if ( elem.removeAttribute ) 
    1318                     elem.removeAttribute( expando ); 
    1319             } 
    1320  
    1321             // Completely remove the data cache 
    1322             delete jQuery.cache[ id ]; 
    1323         } 
    1324     }, 
    1325     queue: function( elem, type, data ) { 
    1326         if ( elem ){ 
    1327      
    1328             type = (type || "fx") + "queue"; 
    1329      
    1330             var q = jQuery.data( elem, type ); 
    1331      
    1332             if ( !q || jQuery.isArray(data) ) 
    1333                 q = jQuery.data( elem, type, jQuery.makeArray(data) ); 
    1334             else if( data ) 
    1335                 q.push( data ); 
    1336      
    1337         } 
    1338         return q; 
    1339     }, 
    1340  
    1341     dequeue: function( elem, type ){ 
    1342         var queue = jQuery.queue( elem, type ), 
    1343             fn = queue.shift(); 
    1344          
    1345         if( !type || type === "fx" ) 
    1346             fn = queue[0]; 
    1347              
    1348         if( fn !== undefined ) 
    1349             fn.call(elem); 
    1350     } 
    1351 }); 
    1352  
    1353 jQuery.fn.extend({ 
    1354     data: function( key, value ){ 
    1355         var parts = key.split("."); 
    1356         parts[1] = parts[1] ? "." + parts[1] : ""; 
    1357  
    1358         if ( value === undefined ) { 
    1359             var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); 
    1360  
    1361             if ( data === undefined && this.length ) 
    1362                 data = jQuery.data( this[0], key ); 
    1363  
    1364             return data === undefined && parts[1] ? 
    1365                 this.data( parts[0] ) : 
    1366                 data; 
    1367         } else 
    1368             return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){ 
    1369                 jQuery.data( this, key, value ); 
    1370             }); 
    1371     }, 
    1372  
    1373     removeData: function( key ){ 
    1374         return this.each(function(){ 
    1375             jQuery.removeData( this, key ); 
    1376         }); 
    1377     }, 
    1378     queue: function(type, data){ 
    1379         if ( typeof type !== "string" ) { 
    1380             data = type; 
    1381             type = "fx"; 
    1382         } 
    1383  
    1384         if ( data === undefined ) 
    1385             return jQuery.queue( this[0], type ); 
    1386  
    1387         return this.each(function(){ 
    1388             var queue = jQuery.queue( this, type, data ); 
    1389              
    1390              if( type == "fx" && queue.length == 1 ) 
    1391                 queue[0].call(this); 
    1392         }); 
    1393     }, 
    1394     dequeue: function(type){ 
    1395         return this.each(function(){ 
    1396             jQuery.dequeue( this, type ); 
    1397         }); 
    1398     } 
    1399 });/*! 
     12(function(){var l=this,g,x=l.jQuery,o=l.$,n=l.jQuery=l.$=function(D,E){return new n.fn.init(D,E)},C=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;n.fn=n.prototype={init:function(D,G){D=D||document;if(D.nodeType){this[0]=D;this.length=1;this.context=D;return this}if(typeof D==="string"){var F=C.exec(D);if(F&&(F[1]||!G)){if(F[1]){D=n.clean([F[1]],G)}else{var H=document.getElementById(F[3]);if(H){if(H.id!=F[3]){return n().find(D)}var E=n(H);E.context=document;E.selector=D;return E}D=[]}}else{return n(G).find(D)}}else{if(n.isFunction(D)){return n(document).ready(D)}}if(D.selector&&D.context){this.selector=D.selector;this.context=D.context}return this.setArray(n.makeArray(D))},selector:"",jquery:"1.3",size:function(){return this.length},get:function(D){return D===g?n.makeArray(this):this[D]},pushStack:function(E,G,D){var F=n(E);F.prevObject=this;F.context=this.context;if(G==="find"){F.selector=this.selector+(this.selector?" ":"")+D}else{if(G){F.selector=this.selector+"."+G+"("+D+")"}}return F},setArray:function(D){this.length=0;Array.prototype.push.apply(this,D);return this},each:function(E,D){return n.each(this,E,D)},index:function(D){return n.inArray(D&&D.jquery?D[0]:D,this)},attr:function(E,G,F){var D=E;if(typeof E==="string"){if(G===g){return this[0]&&n[F||"attr"](this[0],E)}else{D={};D[E]=G}}return this.each(function(H){for(E in D){n.attr(F?this.style:this,E,n.prop(this,D[E],F,H,E))}})},css:function(D,E){if((D=="width"||D=="height")&&parseFloat(E)<0){E=g}return this.attr(D,E,"curCSS")},text:function(E){if(typeof E!=="object"&&E!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(E))}var D="";n.each(E||this,function(){n.each(this.childNodes,function(){if(this.nodeType!=8){D+=this.nodeType!=1?this.nodeValue:n.fn.text([this])}})});return D},wrapAll:function(D){if(this[0]){var E=n(D,this[0].ownerDocument).clone();if(this[0].parentNode){E.insertBefore(this[0])}E.map(function(){var F=this;while(F.firstChild){F=F.firstChild}return F}).append(this)}return this},wrapInner:function(D){return this.each(function(){n(this).contents().wrapAll(D)})},wrap:function(D){return this.each(function(){n(this).wrapAll(D)})},append:function(){return this.domManip(arguments,true,function(D){if(this.nodeType==1){this.appendChild(D)}})},prepend:function(){return this.domManip(arguments,true,function(D){if(this.nodeType==1){this.insertBefore(D,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(D){this.parentNode.insertBefore(D,this)})},after:function(){return this.domManip(arguments,false,function(D){this.parentNode.insertBefore(D,this.nextSibling)})},end:function(){return this.prevObject||n([])},push:[].push,find:function(D){if(this.length===1&&!/,/.test(D)){var F=this.pushStack([],"find",D);F.length=0;n.find(D,this[0],F);return F}else{var E=n.map(this,function(G){return n.find(D,G)});return this.pushStack(/[^+>] [^+>]/.test(D)?n.unique(E):E,"find",D)}},clone:function(E){var D=this.map(function(){if(!n.support.noCloneEvent&&!n.isXMLDoc(this)){var H=this.cloneNode(true),G=document.createElement("div");G.appendChild(H);return n.clean([G.innerHTML])[0]}else{return this.cloneNode(true)}});var F=D.find("*").andSelf().each(function(){if(this[h]!==g){this[h]=null}});if(E===true){this.find("*").andSelf().each(function(H){if(this.nodeType==3){return}var G=n.data(this,"events");for(var J in G){for(var I in G[J]){n.event.add(F[H],J,G[J][I],G[J][I].data)}}})}return D},filter:function(D){return this.pushStack(n.isFunction(D)&&n.grep(this,function(F,E){return D.call(F,E)})||n.multiFilter(D,n.grep(this,function(E){return E.nodeType===1})),"filter",D)},closest:function(D){var E=n.expr.match.POS.test(D)?n(D):null;return this.map(function(){var F=this;while(F&&F.ownerDocument){if(E?E.index(F)>-1:n(F).is(D)){return F}F=F.parentNode}})},not:function(D){if(typeof D==="string"){if(f.test(D)){return this.pushStack(n.multiFilter(D,this,true),"not",D)}else{D=n.multiFilter(D,this)}}var E=D.length&&D[D.length-1]!==g&&!D.nodeType;return this.filter(function(){return E?n.inArray(this,D)<0:this!=D})},add:function(D){return this.pushStack(n.unique(n.merge(this.get(),typeof D==="string"?n(D):n.makeArray(D))))},is:function(D){return !!D&&n.multiFilter(D,this).length>0},hasClass:function(D){return !!D&&this.is("."+D)},val:function(J){if(J===g){var D=this[0];if(D){if(n.nodeName(D,"option")){return(D.attributes.value||{}).specified?D.value:D.text}if(n.nodeName(D,"select")){var H=D.selectedIndex,K=[],L=D.options,G=D.type=="select-one";if(H<0){return null}for(var E=G?H:0,I=G?H+1:L.length;E<I;E++){var F=L[E];if(F.selected){J=n(F).val();if(G){return J}K.push(J)}}return K}return(D.value||"").replace(/\r/g,"")}return g}if(typeof J==="number"){J+=""}return this.each(function(){if(this.nodeType!=1){return}if(n.isArray(J)&&/radio|checkbox/.test(this.type)){this.checked=(n.inArray(this.value,J)>=0||n.inArray(this.name,J)>=0)}else{if(n.nodeName(this,"select")){var M=n.makeArray(J);n("option",this).each(function(){this.selected=(n.inArray(this.value,M)>=0||n.inArray(this.text,M)>=0)});if(!M.length){this.selectedIndex=-1}}else{this.value=J}}})},html:function(D){return D===g?(this[0]?this[0].innerHTML:null):this.empty().append(D)},replaceWith:function(D){return this.after(D).remove()},eq:function(D){return this.slice(D,+D+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(D){return this.pushStack(n.map(this,function(F,E){return D.call(F,E,F)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=n.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild,D=this.length>1?I.cloneNode(true):I;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),G>0?D.cloneNode(true):I)}}if(F){n.each(F,y)}}return this;function K(N,O){return M&&n.nodeName(N,"table")&&n.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};n.fn.init.prototype=n.fn;function y(D,E){if(E.src){n.ajax({url:E.src,async:false,dataType:"script"})}else{n.globalEval(E.text||E.textContent||E.innerHTML||"")}if(E.parentNode){E.parentNode.removeChild(E)}}function e(){return +new Date}n.extend=n.fn.extend=function(){var I=arguments[0]||{},G=1,H=arguments.length,D=false,F;if(typeof I==="boolean"){D=I;I=arguments[1]||{};G=2}if(typeof I!=="object"&&!n.isFunction(I)){I={}}if(H==G){I=this;--G}for(;G<H;G++){if((F=arguments[G])!=null){for(var E in F){var J=I[E],K=F[E];if(I===K){continue}if(D&&K&&typeof K==="object"&&!K.nodeType){I[E]=n.extend(D,J||(K.length!=null?[]:{}),K)}else{if(K!==g){I[E]=K}}}}}return I};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,p=document.defaultView||{},r=Object.prototype.toString;n.extend({noConflict:function(D){l.$=o;if(D){l.jQuery=x}return n},isFunction:function(D){return r.call(D)==="[object Function]"},isArray:function(D){return r.call(D)==="[object Array]"},isXMLDoc:function(D){return D.documentElement&&!D.body||D.tagName&&D.ownerDocument&&!D.ownerDocument.body},globalEval:function(F){F=n.trim(F);if(F){var E=document.getElementsByTagName("head")[0]||document.documentElement,D=document.createElement("script");D.type="text/javascript";if(n.support.scriptEval){D.appendChild(document.createTextNode(F))}else{D.text=F}E.insertBefore(D,E.firstChild);E.removeChild(D)}},nodeName:function(E,D){return E.nodeName&&E.nodeName.toUpperCase()==D.toUpperCase()},each:function(F,J,E){var D,G=0,H=F.length;if(E){if(H===g){for(D in F){if(J.apply(F[D],E)===false){break}}}else{for(;G<H;){if(J.apply(F[G++],E)===false){break}}}}else{if(H===g){for(D in F){if(J.call(F[D],D,F[D])===false){break}}}else{for(var I=F[0];G<H&&J.call(I,G,I)!==false;I=F[++G]){}}}return F},prop:function(G,H,F,E,D){if(n.isFunction(H)){H=H.call(G,E)}return typeof H==="number"&&F=="curCSS"&&!b.test(D)?H+"px":H},className:{add:function(D,E){n.each((E||"").split(/\s+/),function(F,G){if(D.nodeType==1&&!n.className.has(D.className,G)){D.className+=(D.className?" ":"")+G}})},remove:function(D,E){if(D.nodeType==1){D.className=E!==g?n.grep(D.className.split(/\s+/),function(F){return !n.className.has(E,F)}).join(" "):""}},has:function(E,D){return n.inArray(D,(E.className||E).toString().split(/\s+/))>-1}},swap:function(G,F,H){var D={};for(var E in F){D[E]=G.style[E];G.style[E]=F[E]}H.call(G);for(var E in F){G.style[E]=D[E]}},css:function(F,D,H){if(D=="width"||D=="height"){var J,E={position:"absolute",visibility:"hidden",display:"block"},I=D=="width"?["Left","Right"]:["Top","Bottom"];function G(){J=D=="width"?F.offsetWidth:F.offsetHeight;var L=0,K=0;n.each(I,function(){L+=parseFloat(n.curCSS(F,"padding"+this,true))||0;K+=parseFloat(n.curCSS(F,"border"+this+"Width",true))||0});J-=Math.round(L+K)}if(n(F).is(":visible")){G()}else{n.swap(F,E,G)}return Math.max(0,J)}return n.curCSS(F,D,H)},curCSS:function(H,E,F){var K,D=H.style;if(E=="opacity"&&!n.support.opacity){K=n.attr(D,"opacity");return K==""?"1":K}if(E.match(/float/i)){E=v}if(!F&&D&&D[E]){K=D[E]}else{if(p.getComputedStyle){if(E.match(/float/i)){E="float"}E=E.replace(/([A-Z])/g,"-$1").toLowerCase();var L=p.getComputedStyle(H,null);if(L){K=L.getPropertyValue(E)}if(E=="opacity"&&K==""){K="1"}}else{if(H.currentStyle){var I=E.replace(/\-(\w)/g,function(M,N){return N.toUpperCase()});K=H.currentStyle[E]||H.currentStyle[I];if(!/^\d+(px)?$/i.test(K)&&/^\d/.test(K)){var G=D.left,J=H.runtimeStyle.left;H.runtimeStyle.left=H.currentStyle.left;D.left=K||0;K=D.pixelLeft+"px";D.left=G;H.runtimeStyle.left=J}}}}return K},clean:function(E,J,H){J=J||document;if(typeof J.createElement==="undefined"){J=J.ownerDocument||J[0]&&J[0].ownerDocument||document}if(!H&&E.length===1&&typeof E[0]==="string"){var G=/^<(\w+)\s*\/?>$/.exec(E[0]);if(G){return[J.createElement(G[1])]}}var F=[],D=[],K=J.createElement("div");n.each(E,function(O,Q){if(typeof Q==="number"){Q+=""}if(!Q){return}if(typeof Q==="string"){Q=Q.replace(/(<(\w+)[^>]*?)\/>/g,function(S,T,R){return R.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?S:T+"></"+R+">"});var N=n.trim(Q).toLowerCase();var P=!N.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!N.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||N.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!N.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!N.indexOf("<td")||!N.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!N.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!n.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];K.innerHTML=P[1]+Q+P[2];while(P[0]--){K=K.lastChild}if(!n.support.tbody){var M=!N.indexOf("<table")&&N.indexOf("<tbody")<0?K.firstChild&&K.firstChild.childNodes:P[1]=="<table>"&&N.indexOf("<tbody")<0?K.childNodes:[];for(var L=M.length-1;L>=0;--L){if(n.nodeName(M[L],"tbody")&&!M[L].childNodes.length){M[L].parentNode.removeChild(M[L])}}}if(!n.support.leadingWhitespace&&/^\s/.test(Q)){K.insertBefore(J.createTextNode(Q.match(/^\s*/)[0]),K.firstChild)}Q=n.makeArray(K.childNodes)}if(Q.nodeType){F.push(Q)}else{F=n.merge(F,Q)}});if(H){for(var I=0;F[I];I++){if(n.nodeName(F[I],"script")&&(!F[I].type||F[I].type.toLowerCase()==="text/javascript")){D.push(F[I].parentNode?F[I].parentNode.removeChild(F[I]):F[I])}else{if(F[I].nodeType===1){F.splice.apply(F,[I+1,0].concat(n.makeArray(F[I].getElementsByTagName("script"))))}H.appendChild(F[I])}}return D}return F},attr:function(I,F,J){if(!I||I.nodeType==3||I.nodeType==8){return g}var G=!n.isXMLDoc(I),K=J!==g;F=G&&n.props[F]||F;if(I.tagName){var E=/href|src|style/.test(F);if(F=="selected"&&I.parentNode){I.parentNode.selectedIndex}if(F in I&&G&&!E){if(K){if(F=="type"&&n.nodeName(I,"input")&&I.parentNode){throw"type property can't be changed"}I[F]=J}if(n.nodeName(I,"form")&&I.getAttributeNode(F)){return I.getAttributeNode(F).nodeValue}if(F=="tabIndex"){var H=I.getAttributeNode("tabIndex");return H&&H.specified?H.value:I.nodeName.match(/^(a|area|button|input|object|select|textarea)$/i)?0:g}return I[F]}if(!n.support.style&&G&&F=="style"){return n.attr(I.style,"cssText",J)}if(K){I.setAttribute(F,""+J)}var D=!n.support.hrefNormalized&&G&&E?I.getAttribute(F,2):I.getAttribute(F);return D===null?g:D}if(!n.support.opacity&&F=="opacity"){if(K){I.zoom=1;I.filter=(I.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(J)+""=="NaN"?"":"alpha(opacity="+J*100+")")}return I.filter&&I.filter.indexOf("opacity=")>=0?(parseFloat(I.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}F=F.replace(/-([a-z])/ig,function(L,M){return M.toUpperCase()});if(K){I[F]=J}return I[F]},trim:function(D){return(D||"").replace(/^\s+|\s+$/g,"")},makeArray:function(F){var D=[];if(F!=null){var E=F.length;if(E==null||typeof F==="string"||n.isFunction(F)||F.setInterval){D[0]=F}else{while(E){D[--E]=F[E]}}}return D},inArray:function(F,G){for(var D=0,E=G.length;D<E;D++){if(G[D]===F){return D}}return -1},merge:function(G,D){var E=0,F,H=G.length;if(!n.support.getAll){while((F=D[E++])!=null){if(F.nodeType!=8){G[H++]=F}}}else{while((F=D[E++])!=null){G[H++]=F}}return G},unique:function(J){var E=[],D={};try{for(var F=0,G=J.length;F<G;F++){var I=n.data(J[F]);if(!D[I]){D[I]=true;E.push(J[F])}}}catch(H){E=J}return E},grep:function(E,I,D){var F=[];for(var G=0,H=E.length;G<H;G++){if(!D!=!I(E[G],G)){F.push(E[G])}}return F},map:function(D,I){var E=[];for(var F=0,G=D.length;F<G;F++){var H=I(D[F],F);if(H!=null){E[E.length]=H}}return E.concat.apply([],E)}});var B=navigator.userAgent.toLowerCase();n.browser={version:(B.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(B),opera:/opera/.test(B),msie:/msie/.test(B)&&!/opera/.test(B),mozilla:/mozilla/.test(B)&&!/(compatible|webkit)/.test(B)};n.each({parent:function(D){return D.parentNode},parents:function(D){return n.dir(D,"parentNode")},next:function(D){return n.nth(D,2,"nextSibling")},prev:function(D){return n.nth(D,2,"previousSibling")},nextAll:function(D){return n.dir(D,"nextSibling")},prevAll:function(D){return n.dir(D,"previousSibling")},siblings:function(D){return n.sibling(D.parentNode.firstChild,D)},children:function(D){return n.sibling(D.firstChild)},contents:function(D){return n.nodeName(D,"iframe")?D.contentDocument||D.contentWindow.document:n.makeArray(D.childNodes)}},function(D,E){n.fn[D]=function(F){var G=n.map(this,E);if(F&&typeof F=="string"){G=n.multiFilter(F,G)}return this.pushStack(n.unique(G),D,F)}});n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(D,E){n.fn[D]=function(){var F=arguments;return this.each(function(){for(var G=0,H=F.length;G<H;G++){n(F[G])[E](this)}})}});n.each({removeAttr:function(D){n.attr(this,D,"");if(this.nodeType==1){this.removeAttribute(D)}},addClass:function(D){n.className.add(this,D)},removeClass:function(D){n.className.remove(this,D)},toggleClass:function(E,D){if(typeof D!=="boolean"){D=!n.className.has(this,E)}n.className[D?"add":"remove"](this,E)},remove:function(D){if(!D||n.filter(D,[this]).length){n("*",this).add([this]).each(function(){n.event.remove(this);n.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){n(">*",this).remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(D,E){n.fn[D]=function(){return this.each(E,arguments)}});function j(D,E){return D[0]&&parseInt(n.curCSS(D[0],E,true),10)||0}var h="jQuery"+e(),u=0,z={};n.extend({cache:{},data:function(E,D,F){E=E==l?z:E;var G=E[h];if(!G){G=E[h]=++u}if(D&&!n.cache[G]){n.cache[G]={}}if(F!==g){n.cache[G][D]=F}return D?n.cache[G][D]:G},removeData:function(E,D){E=E==l?z:E;var G=E[h];if(D){if(n.cache[G]){delete n.cache[G][D];D="";for(D in n.cache[G]){break}if(!D){n.removeData(E)}}}else{try{delete E[h]}catch(F){if(E.removeAttribute){E.removeAttribute(h)}}delete n.cache[G]}},queue:function(E,D,G){if(E){D=(D||"fx")+"queue";var F=n.data(E,D);if(!F||n.isArray(G)){F=n.data(E,D,n.makeArray(G))}else{if(G){F.push(G)}}}return F},dequeue:function(G,F){var D=n.queue(G,F),E=D.shift();if(!F||F==="fx"){E=D[0]}if(E!==g){E.call(G)}}});n.fn.extend({data:function(D,F){var G=D.split(".");G[1]=G[1]?"."+G[1]:"";if(F===g){var E=this.triggerHandler("getData"+G[1]+"!",[G[0]]);if(E===g&&this.length){E=n.data(this[0],D)}return E===g&&G[1]?this.data(G[0]):E}else{return this.trigger("setData"+G[1]+"!",[G[0],F]).each(function(){n.data(this,D,F)})}},removeData:function(D){return this.each(function(){n.removeData(this,D)})},queue:function(D,E){if(typeof D!=="string"){E=D;D="fx"}if(E===g){return n.queue(this[0],D)}return this.each(function(){var F=n.queue(this,D,E);if(D=="fx"&&F.length==1){F[0].call(this)}})},dequeue:function(D){return this.each(function(){n.dequeue(this,D)})}}); 
     13/* 
    140014 * Sizzle CSS Selector Engine - v0.9.1 
    140115 *  Copyright 2009, The Dojo Foundation 
     
    140317 *  More information: http://sizzlejs.com/ 
    140418 */ 
    1405 (function(){ 
    1406  
    1407 var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g, 
    1408     done = 0, 
    1409     toString = Object.prototype.toString; 
    1410  
    1411 var Sizzle = function(selector, context, results, seed) { 
    1412     results = results || []; 
    1413     context = context || document; 
    1414  
    1415     if ( context.nodeType !== 1 && context.nodeType !== 9 ) 
    1416         return []; 
    1417      
    1418     if ( !selector || typeof selector !== "string" ) { 
    1419         return results; 
    1420     } 
    1421  
    1422     var parts = [], m, set, checkSet, check, mode, extra, prune = true; 
    1423      
    1424     // Reset the position of the chunker regexp (start from head) 
    1425     chunker.lastIndex = 0; 
    1426      
    1427     while ( (m = chunker.exec(selector)) !== null ) { 
    1428         parts.push( m[1] ); 
    1429          
    1430         if ( m[2] ) { 
    1431             extra = RegExp.rightContext; 
    1432             break; 
    1433         } 
    1434     } 
    1435  
    1436     if ( parts.length > 1 && Expr.match.POS.exec( selector ) ) { 
    1437         if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { 
    1438             var later = "", match; 
    1439  
    1440             // Position selectors must be done after the filter 
    1441             while ( (match = Expr.match.POS.exec( selector )) ) { 
    1442                 later += match[0]; 
    1443                 selector = selector.replace( Expr.match.POS, "" ); 
    1444             } 
    1445  
    1446             set = Sizzle.filter( later, Sizzle( selector, context ) ); 
    1447         } else { 
    1448             set = Expr.relative[ parts[0] ] ? 
    1449                 [ context ] : 
    1450                 Sizzle( parts.shift(), context ); 
    1451  
    1452             while ( parts.length ) { 
    1453                 var tmpSet = []; 
    1454  
    1455                 selector = parts.shift(); 
    1456                 if ( Expr.relative[ selector ] ) 
    1457                     selector += parts.shift(); 
    1458  
    1459                 for ( var i = 0, l = set.length; i < l; i++ ) { 
    1460                     Sizzle( selector, set[i], tmpSet ); 
    1461                 } 
    1462  
    1463                 set = tmpSet; 
    1464             } 
    1465         } 
    1466     } else { 
    1467         var ret = seed ? 
    1468             { expr: parts.pop(), set: makeArray(seed) } : 
    1469             Sizzle.find( parts.pop(), parts.length === 1 && context.parentNode ? context.parentNode : context ); 
    1470         set = Sizzle.filter( ret.expr, ret.set ); 
    1471  
    1472         if ( parts.length > 0 ) { 
    1473             checkSet = makeArray(set); 
    1474         } else { 
    1475             prune = false; 
    1476         } 
    1477  
    1478         while ( parts.length ) { 
    1479             var cur = parts.pop(), pop = cur; 
    1480  
    1481             if ( !Expr.relative[ cur ] ) { 
    1482                 cur = ""; 
    1483             } else { 
    1484                 pop = parts.pop(); 
    1485             } 
    1486  
    1487             if ( pop == null ) { 
    1488                 pop = context; 
    1489             } 
    1490  
    1491             Expr.relative[ cur ]( checkSet, pop, isXML(context) ); 
    1492         } 
    1493     } 
    1494  
    1495     if ( !checkSet ) { 
    1496         checkSet = set; 
    1497     } 
    1498  
    1499     if ( !checkSet ) { 
    1500         throw "Syntax error, unrecognized expression: " + (cur || selector); 
    1501     } 
    1502  
    1503     if ( toString.call(checkSet) === "[object Array]" ) { 
    1504         if ( !prune ) { 
    1505             results.push.apply( results, checkSet ); 
    1506         } else if ( context.nodeType === 1 ) { 
    1507             for ( var i = 0; checkSet[i] != null; i++ ) { 
    1508                 if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { 
    1509                     results.push( set[i] ); 
    1510                 } 
    1511             } 
    1512         } else { 
    1513             for ( var i = 0; checkSet[i] != null; i++ ) { 
    1514                 if ( checkSet[i] && checkSet[i].nodeType === 1 ) { 
    1515                     results.push( set[i] ); 
    1516                 } 
    1517             } 
    1518         } 
    1519     } else { 
    1520         makeArray( checkSet, results ); 
    1521     } 
    1522  
    1523     if ( extra ) { 
    1524         Sizzle( extra, context, results, seed ); 
    1525     } 
    1526  
    1527     return results; 
    1528 }; 
    1529  
    1530 Sizzle.matches = function(expr, set){ 
    1531     return Sizzle(expr, null, null, set); 
    1532 }; 
    1533  
    1534 Sizzle.find = function(expr, context){ 
    1535     var set, match; 
    1536  
    1537     if ( !expr ) { 
    1538         return []; 
    1539     } 
    1540  
    1541     for ( var i = 0, l = Expr.order.length; i < l; i++ ) { 
    1542         var type = Expr.order[i], match; 
    1543          
    1544         if ( (match = Expr.match[ type ].exec( expr )) ) { 
    1545             var left = RegExp.leftContext; 
    1546  
    1547             if ( left.substr( left.length - 1 ) !== "\\" ) { 
    1548                 match[1] = (match[1] || "").replace(/\\/g, ""); 
    1549                 set = Expr.find[ type ]( match, context ); 
    1550                 if ( set != null ) { 
    1551                     expr = expr.replace( Expr.match[ type ], "" ); 
    1552                     break; 
    1553                 } 
    1554             } 
    1555         } 
    1556     } 
    1557  
    1558     if ( !set ) { 
    1559         set = context.getElementsByTagName("*"); 
    1560     } 
    1561  
    1562     return {set: set, expr: expr}; 
    1563 }; 
    1564  
    1565 Sizzle.filter = function(expr, set, inplace, not){ 
    1566     var old = expr, result = [], curLoop = set, match, anyFound; 
    1567  
    1568     while ( expr && set.length ) { 
    1569         for ( var type in Expr.filter ) { 
    1570             if ( (match = Expr.match[ type ].exec( expr )) != null ) { 
    1571                 var filter = Expr.filter[ type ], goodArray = null, goodPos = 0, found, item; 
    1572                 anyFound = false; 
    1573  
    1574                 if ( curLoop == result ) { 
    1575                     result = []; 
    1576                 } 
    1577  
    1578                 if ( Expr.preFilter[ type ] ) { 
    1579                     match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not ); 
    1580  
    1581                     if ( !match ) { 
    1582                         anyFound = found = true; 
    1583                     } else if ( match === true ) { 
    1584                         continue; 
    1585                     } else if ( match[0] === true ) { 
    1586                         goodArray = []; 
    1587                         var last = null, elem; 
    1588                         for ( var i = 0; (elem = curLoop[i]) !== undefined; i++ ) { 
    1589                             if ( elem && last !== elem ) { 
    1590                                 goodArray.push( elem ); 
    1591                                 last = elem; 
    1592                             } 
    1593                         } 
    1594                     } 
    1595                 } 
    1596  
    1597                 if ( match ) { 
    1598                     for ( var i = 0; (item = curLoop[i]) !== undefined; i++ ) { 
    1599                         if ( item ) { 
    1600                             if ( goodArray && item != goodArray[goodPos] ) { 
    1601                                 goodPos++; 
    1602                             } 
    1603      
    1604                             found = filter( item, match, goodPos, goodArray ); 
    1605                             var pass = not ^ !!found; 
    1606  
    1607                             if ( inplace && found != null ) { 
    1608                                 if ( pass ) { 
    1609                                     anyFound = true; 
    1610                                 } else { 
    1611                                     curLoop[i] = false; 
    1612                                 } 
    1613                             } else if ( pass ) { 
    1614                                 result.push( item ); 
    1615                                 anyFound = true; 
    1616                             } 
    1617                         } 
    1618                     } 
    1619                 } 
    1620  
    1621                 if ( found !== undefined ) { 
    1622                     if ( !inplace ) { 
    1623                         curLoop = result; 
    1624                     } 
    1625  
    1626                     expr = expr.replace( Expr.match[ type ], "" ); 
    1627  
    1628                     if ( !anyFound ) { 
    1629                         return []; 
    1630                     } 
    1631  
    1632                     break; 
    1633                 } 
    1634             } 
    1635         } 
    1636  
    1637         expr = expr.replace(/\s*,\s*/, ""); 
    1638  
    1639         // Improper expression 
    1640         if ( expr == old ) { 
    1641             if ( anyFound == null ) { 
    1642                 throw "Syntax error, unrecognized expression: " + expr; 
    1643             } else { 
    1644                 break; 
    1645             } 
    1646         } 
    1647  
    1648         old = expr; 
    1649     } 
    1650  
    1651     return curLoop; 
    1652 }; 
    1653  
    1654 var Expr = Sizzle.selectors = { 
    1655     order: [ "ID", "NAME", "TAG" ], 
    1656     match: { 
    1657         ID: /#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/, 
    1658         CLASS: /\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/, 
    1659         NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/, 
    1660         ATTR: /\[((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\]/, 
    1661         TAG: /^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/, 
    1662         CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, 
    1663         POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, 
    1664         PSEUDO: /:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/ 
    1665     }, 
    1666     attrMap: { 
    1667         "class": "className", 
    1668         "for": "htmlFor" 
    1669     }, 
    1670     relative: { 
    1671         "+": function(checkSet, part){ 
    1672             for ( var i = 0, l = checkSet.length; i < l; i++ ) { 
    1673                 var elem = checkSet[i]; 
    1674                 if ( elem ) { 
    1675                     var cur = elem.previousSibling; 
    1676                     while ( cur && cur.nodeType !== 1 ) { 
    1677                         cur = cur.previousSibling; 
    1678                     } 
    1679                     checkSet[i] = typeof part === "string" ? 
    1680                         cur || false : 
    1681                         cur === part; 
    1682                 } 
    1683             } 
    1684  
    1685             if ( typeof part === "string" ) { 
    1686                 Sizzle.filter( part, checkSet, true ); 
    1687             } 
    1688         }, 
    1689         ">": function(checkSet, part, isXML){ 
    1690             if ( typeof part === "string" && !/\W/.test(part) ) { 
    1691                 part = isXML ? part : part.toUpperCase(); 
    1692  
    1693                 for ( var i = 0, l = checkSet.length; i < l; i++ ) { 
    1694                     var elem = checkSet[i]; 
    1695                     if ( elem ) { 
    1696                         var parent = elem.parentNode; 
    1697                         checkSet[i] = parent.nodeName === part ? parent : false; 
    1698                     } 
    1699                 } 
    1700             } else { 
    1701                 for ( var i = 0, l = checkSet.length; i < l; i++ ) { 
    1702                     var elem = checkSet[i]; 
    1703                     if ( elem ) { 
    1704                         checkSet[i] = typeof part === "string" ? 
    1705                             elem.parentNode : 
    1706                             elem.parentNode === part; 
    1707                     } 
    1708                 } 
    1709  
    1710                 if ( typeof part === "string" ) { 
    1711                     Sizzle.filter( part, checkSet, true ); 
    1712                 } 
    1713             } 
    1714         }, 
    1715         "": function(checkSet, part, isXML){ 
    1716             var doneName = "done" + (done++), checkFn = dirCheck; 
    1717  
    1718             if ( !part.match(/\W/) ) { 
    1719                 var nodeCheck = part = isXML ? part : part.toUpperCase(); 
    1720                 checkFn = dirNodeCheck; 
    1721             } 
    1722  
    1723             checkFn("parentNode", part, doneName, checkSet, nodeCheck); 
    1724         }, 
    1725         "~": function(checkSet, part, isXML){ 
    1726             var doneName = "done" + (done++), checkFn = dirCheck; 
    1727  
    1728             if ( typeof part === "string" && !part.match(/\W/) ) { 
    1729                 var nodeCheck = part = isXML ? part : part.toUpperCase(); 
    1730                 checkFn = dirNodeCheck; 
    1731             } 
    1732  
    1733             checkFn("previousSibling", part, doneName, checkSet, nodeCheck); 
    1734         } 
    1735     }, 
    1736     find: { 
    1737         ID: function(match, context){ 
    1738             if ( context.getElementById ) { 
    1739                 var m = context.getElementById(match[1]); 
    1740                 return m ? [m] : []; 
    1741             } 
    1742         }, 
    1743         NAME: function(match, context){ 
    1744             return context.getElementsByName ? context.getElementsByName(match[1]) : null; 
    1745         }, 
    1746         TAG: function(match, context){ 
    1747             return context.getElementsByTagName(match[1]); 
    1748         } 
    1749     }, 
    1750     preFilter: { 
    1751         CLASS: function(match, curLoop, inplace, result, not){ 
    1752             match = " " + match[1].replace(/\\/g, "") + " "; 
    1753  
    1754             for ( var i = 0; curLoop[i]; i++ ) { 
    1755                 if ( not ^ (" " + curLoop[i].className + " ").indexOf(match) >= 0 ) { 
    1756                     if ( !inplace ) 
    1757                         result.push( curLoop[i] ); 
    1758                 } else if ( inplace ) { 
    1759                     curLoop[i] = false; 
    1760                 } 
    1761             } 
    1762  
    1763             return false; 
    1764         }, 
    1765         ID: function(match){ 
    1766             return match[1].replace(/\\/g, ""); 
    1767         }, 
    1768         TAG: function(match, curLoop){ 
    1769             for ( var i = 0; !curLoop[i]; i++ ){} 
    1770             return isXML(curLoop[i]) ? match[1] : match[1].toUpperCase(); 
    1771         }, 
    1772         CHILD: function(match){ 
    1773             if ( match[1] == "nth" ) { 
    1774                 // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' 
    1775                 var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( 
    1776                     match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" || 
    1777                     !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); 
    1778  
    1779                 // calculate the numbers (first)n+(last) including if they are negative 
    1780                 match[2] = (test[1] + (test[2] || 1)) - 0; 
    1781                 match[3] = test[3] - 0; 
    1782             } 
    1783  
    1784             // TODO: Move to normal caching system 
    1785             match[0] = "done" + (done++); 
    1786  
    1787             return match; 
    1788         }, 
    1789         ATTR: function(match){ 
    1790             var name = match[1]; 
    1791              
    1792             if ( Expr.attrMap[name] ) { 
    1793                 match[1] = Expr.attrMap[name]; 
    1794             } 
    1795  
    1796             if ( match[2] === "~=" ) { 
    1797                 match[4] = " " + match[4] + " "; 
    1798             } 
    1799  
    1800             return match; 
    1801         }, 
    1802         PSEUDO: function(match, curLoop, inplace, result, not){ 
    1803             if ( match[1] === "not" ) { 
    1804                 // If we're dealing with a complex expression, or a simple one 
    1805                 if ( match[3].match(chunker).length > 1 ) { 
    1806                     match[3] = Sizzle(match[3], null, null, curLoop); 
    1807                 } else { 
    1808                     var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); 
    1809                     if ( !inplace ) { 
    1810                         result.push.apply( result, ret ); 
    1811                     } 
    1812                     return false; 
    1813                 } 
    1814             } else if ( Expr.match.POS.test( match[0] ) ) { 
    1815                 return true; 
    1816             } 
    1817              
    1818             return match; 
    1819         }, 
    1820         POS: function(match){ 
    1821             match.unshift( true ); 
    1822             return match; 
    1823         } 
    1824     }, 
    1825     filters: { 
    1826         enabled: function(elem){ 
    1827             return elem.disabled === false && elem.type !== "hidden"; 
    1828         }, 
    1829         disabled: function(elem){ 
    1830             return elem.disabled === true; 
    1831         }, 
    1832         checked: function(elem){ 
    1833             return elem.checked === true; 
    1834         }, 
    1835         selected: function(elem){ 
    1836             // Accessing this property makes selected-by-default 
    1837             // options in Safari work properly 
    1838             elem.parentNode.selectedIndex; 
    1839             return elem.selected === true; 
    1840         }, 
    1841         parent: function(elem){ 
    1842             return !!elem.firstChild; 
    1843         }, 
    1844         empty: function(elem){ 
    1845             return !elem.firstChild; 
    1846         }, 
    1847         has: function(elem, i, match){ 
    1848             return !!Sizzle( match[3], elem ).length; 
    1849         }, 
    1850         header: function(elem){ 
    1851             return /h\d/i.test( elem.nodeName ); 
    1852         }, 
    1853         text: function(elem){ 
    1854             return "text" === elem.type; 
    1855         }, 
    1856         radio: function(elem){ 
    1857             return "radio" === elem.type; 
    1858         }, 
    1859         checkbox: function(elem){ 
    1860             return "checkbox" === elem.type; 
    1861         }, 
    1862         file: function(elem){ 
    1863             return "file" === elem.type; 
    1864         }, 
    1865         password: function(elem){ 
    1866             return "password" === elem.type; 
    1867         }, 
    1868         submit: function(elem){ 
    1869             return "submit" === elem.type; 
    1870         }, 
    1871         image: function(elem){ 
    1872             return "image" === elem.type; 
    1873         }, 
    1874         reset: function(elem){ 
    1875             return "reset" === elem.type; 
    1876         }, 
    1877         button: function(elem){ 
    1878             return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON"; 
    1879         }, 
    1880         input: function(elem){ 
    1881             return /input|select|textarea|button/i.test(elem.nodeName); 
    1882         } 
    1883     }, 
    1884     setFilters: { 
    1885         first: function(elem, i){ 
    1886             return i === 0; 
    1887         }, 
    1888         last: function(elem, i, match, array){ 
    1889             return i === array.length - 1; 
    1890         }, 
    1891         even: function(elem, i){ 
    1892             return i % 2 === 0; 
    1893         }, 
    1894         odd: function(elem, i){ 
    1895             return i % 2 === 1; 
    1896         }, 
    1897         lt: function(elem, i, match){ 
    1898             return i < match[3] - 0; 
    1899         }, 
    1900         gt: function(elem, i, match){ 
    1901             return i > match[3] - 0; 
    1902         }, 
    1903         nth: function(elem, i, match){ 
    1904             return match[3] - 0 == i; 
    1905         }, 
    1906         eq: function(elem, i, match){ 
    1907             return match[3] - 0 == i; 
    1908         } 
    1909     }, 
    1910     filter: { 
    1911         CHILD: function(elem, match){ 
    1912             var type = match[1], parent = elem.parentNode; 
    1913  
    1914             var doneName = "child" + parent.childNodes.length; 
    1915              
    1916             if ( parent && (!parent[ doneName ] || !elem.nodeIndex) ) { 
    1917                 var count = 1; 
    1918  
    1919                 for ( var node = parent.firstChild; node; node = node.nextSibling ) { 
    1920                     if ( node.nodeType == 1 ) { 
    1921                         node.nodeIndex = count++; 
    1922                     } 
    1923                 } 
    1924  
    1925                 parent[ doneName ] = count - 1; 
    1926             } 
    1927  
    1928             if ( type == "first" ) { 
    1929                 return elem.nodeIndex == 1; 
    1930             } else if ( type == "last" ) { 
    1931                 return elem.nodeIndex == parent[ doneName ]; 
    1932             } else if ( type == "only" ) { 
    1933                 return parent[ doneName ] == 1; 
    1934             } else if ( type == "nth" ) { 
    1935                 var add = false, first = match[2], last = match[3]; 
    1936  
    1937                 if ( first == 1 && last == 0 ) { 
    1938                     return true; 
    1939                 } 
    1940  
    1941                 if ( first == 0 ) { 
    1942                     if ( elem.nodeIndex == last ) { 
    1943                         add = true; 
    1944                     } 
    1945                 } else if ( (elem.nodeIndex - last) % first == 0 && (elem.nodeIndex - last) / first >= 0 ) { 
    1946                     add = true; 
    1947                 } 
    1948  
    1949                 return add; 
    1950             } 
    1951         }, 
    1952         PSEUDO: function(elem, match, i, array){ 
    1953             var name = match[1], filter = Expr.filters[ name ]; 
    1954  
    1955             if ( filter ) { 
    1956                 return filter( elem, i, match, array ); 
    1957             } else if ( name === "contains" ) { 
    1958                 return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0; 
    1959             } else if ( name === "not" ) { 
    1960                 var not = match[3]; 
    1961  
    1962                 for ( var i = 0, l = not.length; i < l; i++ ) { 
    1963                     if ( not[i] === elem ) { 
    1964                         return false; 
    1965                     } 
    1966                 } 
    1967  
    1968                 return true; 
    1969             } 
    1970         }, 
    1971         ID: function(elem, match){ 
    1972             return elem.nodeType === 1 && elem.getAttribute("id") === match; 
    1973         }, 
    1974         TAG: function(elem, match){ 
    1975             return (match === "*" && elem.nodeType === 1) || elem.nodeName === match; 
    1976         }, 
    1977         CLASS: function(elem, match){ 
    1978             return match.test( elem.className ); 
    1979         }, 
    1980         ATTR: function(elem, match){ 
    1981             var result = elem[ match[1] ] || elem.getAttribute( match[1] ), value = result + "", type = match[2], check = match[4]; 
    1982             return result == null ? 
    1983                 false : 
    1984                 type === "=" ? 
    1985                 value === check : 
    1986                 type === "*=" ? 
    1987                 value.indexOf(check) >= 0 : 
    1988                 type === "~=" ? 
    1989                 (" " + value + " ").indexOf(check) >= 0 : 
    1990                 !match[4] ? 
    1991                 result : 
    1992                 type === "!=" ? 
    1993                 value != check : 
    1994                 type === "^=" ? 
    1995                 value.indexOf(check) === 0 : 
    1996                 type === "$=" ? 
    1997                 value.substr(value.length - check.length) === check : 
    1998                 type === "|=" ? 
    1999                 value === check || value.substr(0, check.length + 1) === check + "-" : 
    2000                 false; 
    2001         }, 
    2002         POS: function(elem, match, i, array){ 
    2003             var name = match[2], filter = Expr.setFilters[ name ]; 
    2004  
    2005             if ( filter ) { 
    2006                 return filter( elem, i, match, array ); 
    2007             } 
    2008         } 
    2009     } 
    2010 }; 
    2011  
    2012 for ( var type in Expr.match ) { 
    2013     Expr.match[ type ] = RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source ); 
    2014 } 
    2015  
    2016 var makeArray = function(array, results) { 
    2017     array = Array.prototype.slice.call( array ); 
    2018  
    2019     if ( results ) { 
    2020         results.push.apply( results, array ); 
    2021         return results; 
    2022     } 
    2023      
    2024     return array; 
    2025 }; 
    2026  
    2027 // Perform a simple check to determine if the browser is capable of 
    2028 // converting a NodeList to an array using builtin methods. 
    2029 try { 
    2030     Array.prototype.slice.call( document.documentElement.childNodes ); 
    2031  
    2032 // Provide a fallback method if it does not work 
    2033 } catch(e){ 
    2034     makeArray = function(array, results) { 
    2035         var ret = results || []; 
    2036  
    2037         if ( toString.call(array) === "[object Array]" ) { 
    2038             Array.prototype.push.apply( ret, array ); 
    2039         } else { 
    2040             if ( typeof array.length === "number" ) { 
    2041                 for ( var i = 0, l = array.length; i < l; i++ ) { 
    2042                     ret.push( array[i] ); 
    2043                 } 
    2044             } else { 
    2045                 for ( var i = 0; array[i]; i++ ) { 
    2046                     ret.push( array[i] ); 
    2047                 } 
    2048             } 
    2049         } 
    2050  
    2051         return ret; 
    2052     }; 
    2053 } 
    2054  
    2055 // Check to see if the browser returns elements by name when 
    2056 // querying by getElementById (and provide a workaround) 
    2057 (function(){ 
    2058     // We're going to inject a fake input element with a specified name 
    2059     var form = document.createElement("form"), 
    2060         id = "script" + (new Date).getTime(); 
    2061     form.innerHTML = "<input name='" + id + "'/>"; 
    2062  
    2063     // Inject it into the root element, check its status, and remove it quickly 
    2064     var root = document.documentElement; 
    2065     root.insertBefore( form, root.firstChild ); 
    2066  
    2067     // The workaround has to do additional checks after a getElementById 
    2068     // Which slows things down for other browsers (hence the branching) 
    2069     if ( !!document.getElementById( id ) ) { 
    2070         Expr.find.ID = function(match, context){ 
    2071             if ( context.getElementById ) { 
    2072                 var m = context.getElementById(match[1]); 
    2073                 return m ? m.id === match[1] || m.getAttributeNode && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; 
    2074             } 
    2075         }; 
    2076  
    2077         Expr.filter.ID = function(elem, match){ 
    2078             var node = elem.getAttributeNode && elem.getAttributeNode("id"); 
    2079             return elem.nodeType === 1 && node && node.nodeValue === match; 
    2080         }; 
    2081     } 
    2082  
    2083     root.removeChild( form ); 
    2084 })(); 
    2085  
    2086 // Check to see if the browser returns only elements 
    2087 // when doing getElementsByTagName("*") 
    2088 (function(){ 
    2089     // Create a fake element 
    2090     var div = document.createElement("div"); 
    2091     div.appendChild( document.createComment("") ); 
    2092  
    2093     // Make sure no comments are found 
    2094     if ( div.getElementsByTagName("*").length > 0 ) { 
    2095         Expr.find.TAG = function(match, context){ 
    2096             var results = context.getElementsByTagName(match[1]); 
    2097  
    2098             // Filter out possible comments 
    2099             if ( match[1] === "*" ) { 
    2100                 var tmp = []; 
    2101  
    2102                 for ( var i = 0; results[i]; i++ ) { 
    2103                     if ( results[i].nodeType === 1 ) { 
    2104                         tmp.push( results[i] ); 
    2105                     } 
    2106                 } 
    2107  
    2108                 results = tmp; 
    2109             } 
    2110  
    2111             return results; 
    2112         }; 
    2113     } 
    2114 })(); 
    2115  
    2116 if ( document.querySelectorAll ) (function(){ 
    2117     var oldSizzle = Sizzle; 
    2118      
    2119     Sizzle = function(query, context, extra, seed){ 
    2120         context = context || document; 
    2121  
    2122         if ( !seed && context.nodeType === 9 ) { 
    2123             try { 
    2124                 return makeArray( context.querySelectorAll(query), extra ); 
    2125             } catch(e){} 
    2126         } 
    2127          
    2128         return oldSizzle(query, context, extra, seed); 
    2129     }; 
    2130  
    2131     Sizzle.find = oldSizzle.find; 
    2132     Sizzle.filter = oldSizzle.filter; 
    2133     Sizzle.selectors = oldSizzle.selectors; 
    2134     Sizzle.matches = oldSizzle.matches; 
    2135 })(); 
    2136  
    2137 if ( document.documentElement.getElementsByClassName ) { 
    2138     Expr.order.splice(1, 0, "CLASS"); 
    2139     Expr.find.CLASS = function(match, context) { 
    2140         return context.getElementsByClassName(match[1]); 
    2141     }; 
    2142 } 
    2143  
    2144 function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck ) { 
    2145     for ( var i = 0, l = checkSet.length; i < l; i++ ) { 
    2146         var elem = checkSet[i]; 
    2147         if ( elem ) { 
    2148             elem = elem[dir]; 
    2149             var match = false; 
    2150  
    2151             while ( elem && elem.nodeType ) { 
    2152                 var done = elem[doneName]; 
    2153                 if ( done ) { 
    2154                     match = checkSet[ done ]; 
    2155                     break; 
    2156                 } 
    2157  
    2158                 if ( elem.nodeType === 1 ) 
    2159                     elem[doneName] = i; 
    2160  
    2161                 if ( elem.nodeName === cur ) { 
    2162                     match = elem; 
    2163                     break; 
    2164                 } 
    2165  
    2166                 elem = elem[dir]; 
    2167             } 
    2168  
    2169             checkSet[i] = match; 
    2170         } 
    2171     } 
    2172 } 
    2173  
    2174 function dirCheck( dir, cur, doneName, checkSet, nodeCheck ) { 
    2175     for ( var i = 0, l = checkSet.length; i < l; i++ ) { 
    2176         var elem = checkSet[i]; 
    2177         if ( elem ) { 
    2178             elem = elem[dir]; 
    2179             var match = false; 
    2180  
    2181             while ( elem && elem.nodeType ) { 
    2182                 if ( elem[doneName] ) { 
    2183                     match = checkSet[ elem[doneName] ]; 
    2184                     break; 
    2185                 } 
    2186  
    2187                 if ( elem.nodeType === 1 ) { 
    2188                     elem[doneName] = i; 
    2189  
    2190                     if ( typeof cur !== "string" ) { 
    2191                         if ( elem === cur ) { 
    2192                             match = true; 
    2193                             break; 
    2194                         } 
    2195  
    2196                     } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { 
    2197                         match = elem; 
    2198                         break; 
    2199                     } 
    2200                 } 
    2201  
    2202                 elem = elem[dir]; 
    2203             } 
    2204  
    2205             checkSet[i] = match; 
    2206         } 
    2207     } 
    2208 } 
    2209  
    2210 var contains = document.compareDocumentPosition ?  function(a, b){ 
    2211     return a.compareDocumentPosition(b) & 16; 
    2212 } : function(a, b){ 
    2213     return a !== b && (a.contains ? a.contains(b) : true); 
    2214 }; 
    2215  
    2216 var isXML = function(elem){ 
    2217     return elem.documentElement && !elem.body || 
    2218         elem.tagName && elem.ownerDocument && !elem.ownerDocument.body; 
    2219 }; 
    2220  
    2221 // EXPOSE 
    2222 jQuery.find = Sizzle; 
    2223 jQuery.filter = Sizzle.filter; 
    2224 jQuery.expr = Sizzle.selectors; 
    2225 jQuery.expr[":"] = jQuery.expr.filters; 
    2226  
    2227 Sizzle.selectors.filters.hidden = function(elem){ 
    2228     return "hidden" === elem.type || 
    2229         jQuery.css(elem, "display") === "none" || 
    2230         jQuery.css(elem, "visibility") === "hidden"; 
    2231 }; 
    2232  
    2233 Sizzle.selectors.filters.visible = function(elem){ 
    2234     return "hidden" !== elem.type && 
    2235         jQuery.css(elem, "display") !== "none" && 
    2236         jQuery.css(elem, "visibility") !== "hidden"; 
    2237 }; 
    2238  
    2239 Sizzle.selectors.filters.animated = function(elem){ 
    2240     return jQuery.grep(jQuery.timers, function(fn){ 
    2241         return elem === fn.elem; 
    2242     }).length; 
    2243 }; 
    2244  
    2245 jQuery.multiFilter = function( expr, elems, not ) { 
    2246     if ( not ) { 
    2247         expr = ":not(" + expr + ")"; 
    2248     } 
    2249  
    2250     return Sizzle.matches(expr, elems); 
    2251 }; 
    2252  
    2253 jQuery.dir = function( elem, dir ){ 
    2254     var matched = [], cur = elem[dir]; 
    2255     while ( cur && cur != document ) { 
    2256         if ( cur.nodeType == 1 ) 
    2257             matched.push( cur ); 
    2258         cur = cur[dir]; 
    2259     } 
    2260     return matched; 
    2261 }; 
    2262  
    2263 jQuery.nth = function(cur, result, dir, elem){ 
    2264     result = result || 1; 
    2265     var num = 0; 
    2266  
    2267     for ( ; cur; cur = cur[dir] ) 
    2268         if ( cur.nodeType == 1 && ++num == result ) 
    2269             break; 
    2270  
    2271     return cur; 
    2272 }; 
    2273  
    2274 jQuery.sibling = function(n, elem){ 
    2275     var r = []; 
    2276  
    2277     for ( ; n; n = n.nextSibling ) { 
    2278         if ( n.nodeType == 1 && n != elem ) 
    2279             r.push( n ); 
    2280     } 
    2281  
    2282     return r; 
    2283 }; 
    2284  
    2285 return; 
    2286  
    2287 window.Sizzle = Sizzle; 
    2288  
    2289 })(); 
    2290 /* 
    2291  * A number of helper functions used for managing events. 
    2292  * Many of the ideas behind this code originated from 
    2293  * Dean Edwards' addEvent library. 
    2294  */ 
    2295 jQuery.event = { 
    2296  
    2297     // Bind an event to an element 
    2298     // Original by Dean Edwards 
    2299     add: function(elem, types, handler, data) { 
    2300         if ( elem.nodeType == 3 || elem.nodeType == 8 ) 
    2301             return; 
    2302  
    2303         // For whatever reason, IE has trouble passing the window object 
    2304         // around, causing it to be cloned in the process 
    2305         if ( elem.setInterval && elem != window ) 
    2306             elem = window; 
    2307  
    2308         // Make sure that the function being executed has a unique ID 
    2309         if ( !handler.guid ) 
    2310             handler.guid = this.guid++; 
    2311  
    2312         // if data is passed, bind to handler 
    2313         if ( data !== undefined ) { 
    2314             // Create temporary function pointer to original handler 
    2315             var fn = handler; 
    2316  
    2317             // Create unique handler function, wrapped around original handler 
    2318             handler = this.proxy( fn ); 
    2319  
    2320             // Store data in unique handler 
    2321             handler.data = data; 
    2322         } 
    2323  
    2324         // Init the element's event structure 
    2325         var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}), 
    2326             handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){ 
    2327                 // Handle the second event of a trigger and when 
    2328                 // an event is called after a page has unloaded 
    2329                 return typeof jQuery !== "undefined" && !jQuery.event.triggered ? 
    2330                     jQuery.event.handle.apply(arguments.callee.elem, arguments) : 
    2331                     undefined; 
    2332             }); 
    2333         // Add elem as a property of the handle function 
    2334         // This is to prevent a memory leak with non-native 
    2335         // event in IE. 
    2336         handle.elem = elem; 
    2337  
    2338         // Handle multiple events separated by a space 
    2339         // jQuery(...).bind("mouseover mouseout", fn); 
    2340         jQuery.each(types.split(/\s+/), function(index, type) { 
    2341             // Namespaced event handlers 
    2342             var namespaces = type.split("."); 
    2343             type = namespaces.shift(); 
    2344             handler.type = namespaces.slice().sort().join("."); 
    2345  
    2346             // Get the current list of functions bound to this event 
    2347             var handlers = events[type]; 
    2348              
    2349             if ( jQuery.event.specialAll[type] ) 
    2350                 jQuery.event.specialAll[type].setup.call(elem, data, namespaces); 
    2351  
    2352             // Init the event handler queue 
    2353             if (!handlers) { 
    2354                 handlers = events[type] = {}; 
    2355  
    2356                 // Check for a special event handler 
    2357                 // Only use addEventListener/attachEvent if the special 
    2358                 // events handler returns false 
    2359                 if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem, data, namespaces) === false ) { 
    2360                     // Bind the global event handler to the element 
    2361                     if (elem.addEventListener) 
    2362                         elem.addEventListener(type, handle, false); 
    2363                     else if (elem.attachEvent) 
    2364                         elem.attachEvent("on" + type, handle); 
    2365                 } 
    2366             } 
    2367  
    2368             // Add the function to the element's handler list 
    2369             handlers[handler.guid] = handler; 
    2370  
    2371             // Keep track of which events have been used, for global triggering 
    2372             jQuery.event.global[type] = true; 
    2373         }); 
    2374  
    2375         // Nullify elem to prevent memory leaks in IE 
    2376         elem = null; 
    2377     }, 
    2378  
    2379     guid: 1, 
    2380     global: {}, 
    2381  
    2382     // Detach an event or set of events from an element 
    2383     remove: function(elem, types, handler) { 
    2384         // don't do events on text and comment nodes 
    2385         if ( elem.nodeType == 3 || elem.nodeType == 8 ) 
    2386             return; 
    2387  
    2388         var events = jQuery.data(elem, "events"), ret, index; 
    2389  
    2390         if ( events ) { 
    2391             // Unbind all events for the element 
    2392             if ( types === undefined || (typeof types === "string" && types.charAt(0) == ".") ) 
    2393                 for ( var type in events ) 
    2394                     this.remove( elem, type + (types || "") ); 
    2395             else { 
    2396                 // types is actually an event object here 
    2397                 if ( types.type ) { 
    2398                     handler = types.handler; 
    2399                     types = types.type; 
    2400                 } 
    2401  
    2402                 // Handle multiple events seperated by a space 
    2403                 // jQuery(...).unbind("mouseover mouseout", fn); 
    2404                 jQuery.each(types.split(/\s+/), function(index, type){ 
    2405                     // Namespaced event handlers 
    2406                     var namespaces = type.split("."); 
    2407                     type = namespaces.shift(); 
    2408                     var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)"); 
    2409  
    2410                     if ( events[type] ) { 
    2411                         // remove the given handler for the given type 
    2412                         if ( handler ) 
    2413                             delete events[type][handler.guid]; 
    2414  
    2415                         // remove all handlers for the given type 
    2416                         else 
    2417                             for ( var handle in events[type] ) 
    2418                                 // Handle the removal of namespaced events 
    2419                                 if ( namespace.test(events[type][handle].type) ) 
    2420                                     delete events[type][handle]; 
    2421                                      
    2422                         if ( jQuery.event.specialAll[type] ) 
    2423                             jQuery.event.specialAll[type].teardown.call(elem, namespaces); 
    2424  
    2425                         // remove generic event handler if no more handlers exist 
    2426                         for ( ret in events[type] ) break; 
    2427                         if ( !ret ) { 
    2428                             if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem, namespaces) === false ) { 
    2429                                 if (elem.removeEventListener) 
    2430                                     elem.removeEventListener(type, jQuery.data(elem, "handle"), false); 
    2431                                 else if (elem.detachEvent) 
    2432                                     elem.detachEvent("on" + type, jQuery.data(elem, "handle")); 
    2433                             } 
    2434                             ret = null; 
    2435                             delete events[type]; 
    2436                         } 
    2437                     } 
    2438                 }); 
    2439             } 
    2440  
    2441             // Remove the expando if it's no longer used 
    2442             for ( ret in events ) break; 
    2443             if ( !ret ) { 
    2444                 var handle = jQuery.data( elem, "handle" ); 
    2445                 if ( handle ) handle.elem = null; 
    2446                 jQuery.removeData( elem, "events" ); 
    2447                 jQuery.removeData( elem, "handle" ); 
    2448             } 
    2449         } 
    2450     }, 
    2451  
    2452     // bubbling is internal 
    2453     trigger: function( event, data, elem, bubbling ) { 
    2454         // Event object or event type 
    2455         var type = event.type || event; 
    2456  
    2457         if( !bubbling ){ 
    2458             event = typeof event === "object" ? 
    2459                 // jQuery.Event object 
    2460                 event[expando] ? event : 
    2461                 // Object literal 
    2462                 jQuery.extend( jQuery.Event(type), event ) : 
    2463                 // Just the event type (string) 
    2464                 jQuery.Event(type); 
    2465  
    2466             if ( type.indexOf("!") >= 0 ) { 
    2467                 event.type = type = type.slice(0, -1); 
    2468                 event.exclusive = true; 
    2469             } 
    2470  
    2471             // Handle a global trigger 
    2472             if ( !elem ) { 
    2473                 // Don't bubble custom events when global (to avoid too much overhead) 
    2474                 event.stopPropagation(); 
    2475                 // Only trigger if we've ever bound an event for it 
    2476                 if ( this.global[type] ) 
    2477                     jQuery.each( jQuery.cache, function(){ 
    2478                         if ( this.events && this.events[type] ) 
    2479                             jQuery.event.trigger( event, data, this.handle.elem ); 
    2480                     }); 
    2481             } 
    2482  
    2483             // Handle triggering a single element 
    2484  
    2485             // don't do events on text and comment nodes 
    2486             if ( !elem || elem.nodeType == 3 || elem.nodeType == 8 ) 
    2487                 return undefined; 
    2488              
    2489             // Clean up in case it is reused 
    2490             event.result = undefined; 
    2491             event.target = elem; 
    2492              
    2493             // Clone the incoming data, if any 
    2494             data = jQuery.makeArray(data); 
    2495             data.unshift( event ); 
    2496         } 
    2497  
    2498         event.currentTarget = elem; 
    2499  
    2500         // Trigger the event, it is assumed that "handle" is a function 
    2501         var handle = jQuery.data(elem, "handle"); 
    2502         if ( handle ) 
    2503             handle.apply( elem, data ); 
    2504  
    2505         // Handle triggering native .onfoo handlers (and on links since we don't call .click() for links) 
    2506         if ( (!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false ) 
    2507             event.result = false; 
    2508  
    2509         // Trigger the native events (except for clicks on links) 
    2510         if ( !bubbling && elem[type] && !event.isDefaultPrevented() && !(jQuery.nodeName(elem, 'a') && type == "click") ) { 
    2511             this.triggered = true; 
    2512             try { 
    2513                 elem[ type ](); 
    2514             // prevent IE from throwing an error for some hidden elements 
    2515             } catch (e) {} 
    2516         } 
    2517  
    2518         this.triggered = false; 
    2519  
    2520         if ( !event.isPropagationStopped() ) { 
    2521             var parent = elem.parentNode || elem.ownerDocument; 
    2522             if ( parent ) 
    2523                 jQuery.event.trigger(event, data, parent, true); 
    2524         } 
    2525     }, 
    2526  
    2527     handle: function(event) { 
    2528         // returned undefined or false 
    2529         var all, handlers; 
    2530  
    2531         event = arguments[0] = jQuery.event.fix( event || window.event ); 
    2532  
    2533         // Namespaced event handlers 
    2534         var namespaces = event.type.split("."); 
    2535         event.type = namespaces.shift(); 
    2536  
    2537         // Cache this now, all = true means, any handler 
    2538         all = !namespaces.length && !event.exclusive; 
    2539          
    2540         var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)"); 
    2541  
    2542         handlers = ( jQuery.data(this, "events") || {} )[event.type]; 
    2543  
    2544         for ( var j in handlers ) { 
    2545             var handler = handlers[j]; 
    2546  
    2547             // Filter the functions by class 
    2548             if ( all || namespace.test(handler.type) ) { 
    2549                 // Pass in a reference to the handler function itself 
    2550                 // So that we can later remove it 
    2551                 event.handler = handler; 
    2552                 event.data = handler.data; 
    2553  
    2554                 var ret = handler.apply(this, arguments); 
    2555  
    2556                 if( ret !== undefined ){ 
    2557                     event.result = ret; 
    2558                     if ( ret === false ) { 
    2559                         event.preventDefault(); 
    2560                         event.stopPropagation(); 
    2561                     } 
    2562                 } 
    2563  
    2564                 if( event.isImmediatePropagationStopped() ) 
    2565                     break; 
    2566  
    2567             } 
    2568         } 
    2569     }, 
    2570  
    2571     props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), 
    2572  
    2573     fix: function(event) { 
    2574         if ( event[expando] ) 
    2575             return event; 
    2576  
    2577         // store a copy of the original event object 
    2578         // and "clone" to set read-only properties 
    2579         var originalEvent = event; 
    2580         event = jQuery.Event( originalEvent ); 
    2581  
    2582         for ( var i = this.props.length, prop; i; ){ 
    2583             prop = this.props[ --i ]; 
    2584             event[ prop ] = originalEvent[ prop ]; 
    2585         } 
    2586  
    2587         // Fix target property, if necessary 
    2588         if ( !event.target ) 
    2589             event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either 
    2590  
    2591         // check if target is a textnode (safari) 
    2592         if ( event.target.nodeType == 3 ) 
    2593             event.target = event.target.parentNode; 
    2594  
    2595         // Add relatedTarget, if necessary 
    2596         if ( !event.relatedTarget && event.fromElement ) 
    2597             event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement; 
    2598  
    2599         // Calculate pageX/Y if missing and clientX/Y available 
    2600         if ( event.pageX == null && event.clientX != null ) { 
    2601             var doc = document.documentElement, body = document.body; 
    2602             event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0); 
    2603             event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0); 
    2604         } 
    2605  
    2606         // Add which for key events 
    2607         if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) 
    2608             event.which = event.charCode || event.keyCode; 
    2609  
    2610         // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) 
    2611         if ( !event.metaKey && event.ctrlKey ) 
    2612             event.metaKey = event.ctrlKey; 
    2613  
    2614         // Add which for click: 1 == left; 2 == middle; 3 == right 
    2615         // Note: button is not normalized, so don't use it 
    2616         if ( !event.which && event.button ) 
    2617             event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); 
    2618  
    2619         return event; 
    2620     }, 
    2621  
    2622     proxy: function( fn, proxy ){ 
    2623         proxy = proxy || function(){ return fn.apply(this, arguments); }; 
    2624         // Set the guid of unique handler to the same of original handler, so it can be removed 
    2625         proxy.guid = fn.guid = fn.guid || proxy.guid || this.guid++; 
    2626         // So proxy can be declared as an argument 
    2627         return proxy; 
    2628     }, 
    2629  
    2630     special: { 
    2631         ready: { 
    2632             // Make sure the ready event is setup 
    2633             setup: bindReady, 
    2634             teardown: function() {} 
    2635         } 
    2636     }, 
    2637      
    2638     specialAll: { 
    2639         live: { 
    2640             setup: function( selector, namespaces ){ 
    2641                 jQuery.event.add( this, namespaces[0], liveHandler ); 
    2642             }, 
    2643             teardown:  function( namespaces ){ 
    2644                 if ( namespaces.length ) { 
    2645                     var remove = 0, name = RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)"); 
    2646                      
    2647                     jQuery.each( (jQuery.data(this, "events").live || {}), function(){ 
    2648                         if ( name.test(this.type) ) 
    2649                             remove++; 
    2650                     }); 
    2651                      
    2652                     if ( remove < 1 ) 
    2653                         jQuery.event.remove( this, namespaces[0], liveHandler ); 
    2654                 } 
    2655             } 
    2656         } 
    2657     } 
    2658 }; 
    2659  
    2660 jQuery.Event = function( src ){ 
    2661     // Allow instantiation without the 'new' keyword 
    2662     if( !this.preventDefault ) 
    2663         return new jQuery.Event(src); 
    2664      
    2665     // Event object 
    2666     if( src && src.type ){ 
    2667         this.originalEvent = src; 
    2668         this.type = src.type; 
    2669         this.timeStamp = src.timeStamp; 
    2670     // Event type 
    2671     }else 
    2672         this.type = src; 
    2673  
    2674     if( !this.timeStamp ) 
    2675         this.timeStamp = now(); 
    2676      
    2677     // Mark it as fixed 
    2678     this[expando] = true; 
    2679 }; 
    2680  
    2681 function returnFalse(){ 
    2682     return false; 
    2683 } 
    2684 function returnTrue(){ 
    2685     return true; 
    2686 } 
    2687  
    2688 // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 
    2689 // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 
    2690 jQuery.Event.prototype = { 
    2691     preventDefault: function() { 
    2692         this.isDefaultPrevented = returnTrue; 
    2693  
    2694         var e = this.originalEvent; 
    2695         if( !e ) 
    2696             return; 
    2697         // if preventDefault exists run it on the original event 
    2698         if (e.preventDefault) 
    2699             e.preventDefault(); 
    2700         // otherwise set the returnValue property of the original event to false (IE) 
    2701         e.returnValue = false; 
    2702     }, 
    2703     stopPropagation: function() { 
    2704         this.isPropagationStopped = returnTrue; 
    2705  
    2706         var e = this.originalEvent; 
    2707         if( !e ) 
    2708             return; 
    2709         // if stopPropagation exists run it on the original event 
    2710         if (e.stopPropagation) 
    2711             e.stopPropagation(); 
    2712         // otherwise set the cancelBubble property of the original event to true (IE) 
    2713         e.cancelBubble = true; 
    2714     }, 
    2715     stopImmediatePropagation:function(){ 
    2716         this.isImmediatePropagationStopped = returnTrue; 
    2717         this.stopPropagation(); 
    2718     }, 
    2719     isDefaultPrevented: returnFalse, 
    2720     isPropagationStopped: returnFalse, 
    2721     isImmediatePropagationStopped: returnFalse 
    2722 }; 
    2723 // Checks if an event happened on an element within another element 
    2724 // Used in jQuery.event.special.mouseenter and mouseleave handlers 
    2725 var withinElement = function(event) { 
    2726     // Check if mouse(over|out) are still within the same parent element 
    2727     var parent = event.relatedTarget; 
    2728     // Traverse up the tree 
    2729     while ( parent && parent != this ) 
    2730         try { parent = parent.parentNode; } 
    2731         catch(e) { parent = this; } 
    2732      
    2733     if( parent != this ){ 
    2734         // set the correct event type 
    2735         event.type = event.data; 
    2736         // handle event if we actually just moused on to a non sub-element 
    2737         jQuery.event.handle.apply( this, arguments ); 
    2738     } 
    2739 }; 
    2740      
    2741 jQuery.each({  
    2742     mouseover: 'mouseenter',  
    2743     mouseout: 'mouseleave' 
    2744 }, function( orig, fix ){ 
    2745     jQuery.event.special[ fix ] = { 
    2746         setup: function(){ 
    2747             jQuery.event.add( this, orig, withinElement, fix ); 
    2748         }, 
    2749         teardown: function(){ 
    2750             jQuery.event.remove( this, orig, withinElement ); 
    2751         } 
    2752     };              
    2753 }); 
    2754  
    2755 jQuery.fn.extend({ 
    2756     bind: function( type, data, fn ) { 
    2757         return type == "unload" ? this.one(type, data, fn) : this.each(function(){ 
    2758             jQuery.event.add( this, type, fn || data, fn && data ); 
    2759         }); 
    2760     }, 
    2761  
    2762     one: function( type, data, fn ) { 
    2763         var one = jQuery.event.proxy( fn || data, function(event) { 
    2764             jQuery(this).unbind(event, one); 
    2765             return (fn || data).apply( this, arguments ); 
    2766         }); 
    2767         return this.each(function(){ 
    2768             jQuery.event.add( this, type, one, fn && data); 
    2769         }); 
    2770     }, 
    2771  
    2772     unbind: function( type, fn ) { 
    2773         return this.each(function(){ 
    2774             jQuery.event.remove( this, type, fn ); 
    2775         }); 
    2776     }, 
    2777  
    2778     trigger: function( type, data ) { 
    2779         return this.each(function(){ 
    2780             jQuery.event.trigger( type, data, this ); 
    2781         }); 
    2782     }, 
    2783  
    2784     triggerHandler: function( type, data ) { 
    2785         if( this[0] ){ 
    2786             var event = jQuery.Event(type); 
    2787             event.preventDefault(); 
    2788             event.stopPropagation(); 
    2789             jQuery.event.trigger( event, data, this[0] ); 
    2790             return event.result; 
    2791         }        
    2792     }, 
    2793  
    2794     toggle: function( fn ) { 
    2795         // Save reference to arguments for access in closure 
    2796         var args = arguments, i = 1; 
    2797  
    2798         // link all the functions, so any of them can unbind this click handler 
    2799         while( i < args.length ) 
    2800             jQuery.event.proxy( fn, args[i++] ); 
    2801  
    2802         return this.click( jQuery.event.proxy( fn, function(event) { 
    2803             // Figure out which function to execute 
    2804             this.lastToggle = ( this.lastToggle || 0 ) % i; 
    2805  
    2806             // Make sure that clicks stop 
    2807             event.preventDefault(); 
    2808  
    2809             // and execute the function 
    2810             return args[ this.lastToggle++ ].apply( this, arguments ) || false; 
    2811         })); 
    2812     }, 
    2813  
    2814     hover: function(fnOver, fnOut) { 
    2815         return this.mouseenter(fnOver).mouseleave(fnOut); 
    2816     }, 
    2817  
    2818     ready: function(fn) { 
    2819         // Attach the listeners 
    2820         bindReady(); 
    2821  
    2822         // If the DOM is already ready 
    2823         if ( jQuery.isReady ) 
    2824             // Execute the function immediately 
    2825             fn.call( document, jQuery ); 
    2826  
    2827         // Otherwise, remember the function for later 
    2828         else 
    2829             // Add the function to the wait list 
    2830             jQuery.readyList.push( fn ); 
    2831  
    2832         return this; 
    2833     }, 
    2834      
    2835     live: function( type, fn ){ 
    2836         var proxy = jQuery.event.proxy( fn ); 
    2837         proxy.guid += this.selector + type; 
    2838  
    2839         jQuery(document).bind( liveConvert(type, this.selector), this.selector, proxy ); 
    2840  
    2841         return this; 
    2842     }, 
    2843      
    2844     die: function( type, fn ){ 
    2845         jQuery(document).unbind( liveConvert(type, this.selector), fn ? { guid: fn.guid + this.selector + type } : null ); 
    2846         return this; 
    2847     } 
    2848 }); 
    2849  
    2850 function liveHandler( event ){ 
    2851     var check = RegExp("(^|\\.)" + event.type + "(\\.|$)"), 
    2852         stop = true, 
    2853         elems = []; 
    2854  
    2855     jQuery.each(jQuery.data(this, "events").live || [], function(i, fn){ 
    2856         if ( check.test(fn.type) ) { 
    2857             var elem = jQuery(event.target).closest(fn.data)[0]; 
    2858             if ( elem ) 
    2859                 elems.push({ elem: elem, fn: fn }); 
    2860         } 
    2861     }); 
    2862  
    2863     jQuery.each(elems, function(){ 
    2864         if ( !event.isImmediatePropagationStopped() && 
    2865             this.fn.call(this.elem, event, this.fn.data) === false ) 
    2866                 stop = false; 
    2867     }); 
    2868  
    2869     return stop; 
    2870 } 
    2871  
    2872 function liveConvert(type, selector){ 
    2873     return ["live", type, selector.replace(/\./g, "`").replace(/ /g, "|")].join("."); 
    2874 } 
    2875  
    2876 jQuery.extend({ 
    2877     isReady: false, 
    2878     readyList: [], 
    2879     // Handle when the DOM is ready 
    2880     ready: function() { 
    2881         // Make sure that the DOM is not already loaded 
    2882         if ( !jQuery.isReady ) { 
    2883             // Remember that the DOM is ready 
    2884             jQuery.isReady = true; 
    2885  
    2886             // If there are functions bound, to execute 
    2887             if ( jQuery.readyList ) { 
    2888                 // Execute all of them 
    2889                 jQuery.each( jQuery.readyList, function(){ 
    2890                     this.call( document, jQuery ); 
    2891                 }); 
    2892  
    2893                 // Reset the list of functions 
    2894                 jQuery.readyList = null; 
    2895             } 
    2896  
    2897             // Trigger any bound ready events 
    2898             jQuery(document).triggerHandler("ready"); 
    2899         } 
    2900     } 
    2901 }); 
    2902  
    2903 var readyBound = false; 
    2904  
    2905 function bindReady(){ 
    2906     if ( readyBound ) return; 
    2907     readyBound = true; 
    2908  
    2909     // Mozilla, Opera and webkit nightlies currently support this event 
    2910     if ( document.addEventListener ) { 
    2911         // Use the handy event callback 
    2912         document.addEventListener( "DOMContentLoaded", function(){ 
    2913             document.removeEventListener( "DOMContentLoaded", arguments.callee, false ); 
    2914             jQuery.ready(); 
    2915         }, false ); 
    2916  
    2917     // If IE event model is used 
    2918     } else if ( document.attachEvent ) { 
    2919         // ensure firing before onload, 
    2920         // maybe late but safe also for iframes 
    2921         document.attachEvent("onreadystatechange", function(){ 
    2922             if ( document.readyState === "complete" ) { 
    2923                 document.detachEvent( "onreadystatechange", arguments.callee ); 
    2924                 jQuery.ready(); 
    2925             } 
    2926         }); 
    2927  
    2928         // If IE and not an iframe 
    2929         // continually check to see if the document is ready 
    2930         if ( document.documentElement.doScroll && !window.frameElement ) (function(){ 
    2931             if ( jQuery.isReady ) return; 
    2932  
    2933             try { 
    2934                 // If IE is used, use the trick by Diego Perini 
    2935                 // http://javascript.nwbox.com/IEContentLoaded/ 
    2936                 document.documentElement.doScroll("left"); 
    2937             } catch( error ) { 
    2938                 setTimeout( arguments.callee, 0 ); 
    2939                 return; 
    2940             } 
    2941  
    2942             // and execute any waiting functions 
    2943             jQuery.ready(); 
    2944         })(); 
    2945     } 
    2946  
    2947     // A fallback to window.onload, that will always work 
    2948     jQuery.event.add( window, "load", jQuery.ready ); 
    2949 } 
    2950  
    2951 jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," + 
    2952     "mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave," + 
    2953     "change,select,submit,keydown,keypress,keyup,error").split(","), function(i, name){ 
    2954  
    2955     // Handle event binding 
    2956     jQuery.fn[name] = function(fn){ 
    2957         return fn ? this.bind(name, fn) : this.trigger(name); 
    2958     }; 
    2959 }); 
    2960  
    2961 // Prevent memory leaks in IE 
    2962 // And prevent errors on refresh with events like mouseover in other browsers 
    2963 // Window isn't included so as not to unbind existing unload events 
    2964 jQuery( window ).bind( 'unload', function(){  
    2965     for ( var id in jQuery.cache ) 
    2966         // Skip the window 
    2967         if ( id != 1 && jQuery.cache[ id ].handle ) 
    2968             jQuery.event.remove( jQuery.cache[ id ].handle.elem ); 
    2969 });  
    2970 (function(){ 
    2971  
    2972     jQuery.support = {}; 
    2973  
    2974     var root = document.documentElement, 
    2975         script = document.createElement("script"), 
    2976         div = document.createElement("div"), 
    2977         id = "script" + (new Date).getTime(); 
    2978  
    2979     div.style.display = "none"; 
    2980     div.innerHTML = '   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param></object>'; 
    2981  
    2982     var all = div.getElementsByTagName("*"), 
    2983         a = div.getElementsByTagName("a")[0]; 
    2984  
    2985     // Can't get basic test support 
    2986     if ( !all || !all.length || !a ) { 
    2987         return; 
    2988     } 
    2989  
    2990     jQuery.support = { 
    2991         // IE strips leading whitespace when .innerHTML is used 
    2992         leadingWhitespace: div.firstChild.nodeType == 3, 
    2993          
    2994         // Make sure that tbody elements aren't automatically inserted 
    2995         // IE will insert them into empty tables 
    2996         tbody: !div.getElementsByTagName("tbody").length, 
    2997          
    2998         // Make sure that you can get all elements in an <object> element 
    2999         // IE 7 always returns no results 
    3000         objectAll: !!div.getElementsByTagName("object")[0] 
    3001             .getElementsByTagName("*").length, 
    3002          
    3003         // Make sure that link elements get serialized correctly by innerHTML 
    3004         // This requires a wrapper element in IE 
    3005         htmlSerialize: !!div.getElementsByTagName("link").length, 
    3006          
    3007         // Get the style information from getAttribute 
    3008         // (IE uses .cssText insted) 
    3009         style: /red/.test( a.getAttribute("style") ), 
    3010          
    3011         // Make sure that URLs aren't manipulated 
    3012         // (IE normalizes it by default) 
    3013         hrefNormalized: a.getAttribute("href") === "/a", 
    3014          
    3015         // Make sure that element opacity exists 
    3016         // (IE uses filter instead) 
    3017         opacity: a.style.opacity === "0.5", 
    3018          
    3019         // Verify style float existence 
    3020         // (IE uses styleFloat instead of cssFloat) 
    3021         cssFloat: !!a.style.cssFloat, 
    3022  
    3023         // Will be defined later 
    3024         scriptEval: false, 
    3025         noCloneEvent: true, 
    3026         boxModel: null 
    3027     }; 
    3028      
    3029     script.type = "text/javascript"; 
    3030     try { 
    3031         script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); 
    3032     } catch(e){} 
    3033  
    3034     root.insertBefore( script, root.firstChild ); 
    3035      
    3036     // Make sure that the execution of code works by injecting a script 
    3037     // tag with appendChild/createTextNode 
    3038     // (IE doesn't support this, fails, and uses .text instead) 
    3039     if ( window[ id ] ) { 
    3040         jQuery.support.scriptEval = true; 
    3041         delete window[ id ]; 
    3042     } 
    3043  
    3044     root.removeChild( script ); 
    3045  
    3046     if ( div.attachEvent && div.fireEvent ) { 
    3047         div.attachEvent("onclick", function(){ 
    3048             // Cloning a node shouldn't copy over any 
    3049             // bound event handlers (IE does this) 
    3050             jQuery.support.noCloneEvent = false; 
    3051             div.detachEvent("onclick", arguments.callee); 
    3052         }); 
    3053         div.cloneNode(true).fireEvent("onclick"); 
    3054     } 
    3055  
    3056     // Figure out if the W3C box model works as expected 
    3057     // document.body must exist before we can do this 
    3058     jQuery(function(){ 
    3059         var div = document.createElement("div"); 
    3060         div.style.width = "1px"; 
    3061         div.style.paddingLeft = "1px"; 
    3062  
    3063         document.body.appendChild( div ); 
    3064         jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; 
    3065         document.body.removeChild( div ); 
    3066     }); 
    3067 })(); 
    3068  
    3069 var styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat"; 
    3070  
    3071 jQuery.props = { 
    3072     "for": "htmlFor", 
    3073     "class": "className", 
    3074     "float": styleFloat, 
    3075     cssFloat: styleFloat, 
    3076     styleFloat: styleFloat, 
    3077     readonly: "readOnly", 
    3078     maxlength: "maxLength", 
    3079     cellspacing: "cellSpacing", 
    3080     rowspan: "rowSpan", 
    3081     tabindex: "tabIndex" 
    3082 }; 
    3083 jQuery.fn.extend({ 
    3084     // Keep a copy of the old load 
    3085     _load: jQuery.fn.load, 
    3086  
    3087     load: function( url, params, callback ) { 
    3088         if ( typeof url !== "string" ) 
    3089             return this._load( url ); 
    3090  
    3091         var off = url.indexOf(" "); 
    3092         if ( off >= 0 ) { 
    3093             var selector = url.slice(off, url.length); 
    3094             url = url.slice(0, off); 
    3095         } 
    3096  
    3097         // Default to a GET request 
    3098         var type = "GET"; 
    3099  
    3100         // If the second parameter was provided 
    3101         if ( params ) 
    3102             // If it's a function 
    3103             if ( jQuery.isFunction( params ) ) { 
    3104                 // We assume that it's the callback 
    3105                 callback = params; 
    3106                 params = null; 
    3107  
    3108             // Otherwise, build a param string 
    3109             } else if( typeof params === "object" ) { 
    3110                 params = jQuery.param( params ); 
    3111                 type = "POST"; 
    3112             } 
    3113  
    3114         var self = this; 
    3115  
    3116         // Request the remote document 
    3117         jQuery.ajax({ 
    3118             url: url, 
    3119             type: type, 
    3120             dataType: "html", 
    3121             data: params, 
    3122             complete: function(res, status){ 
    3123                 // If successful, inject the HTML into all the matched elements 
    3124                 if ( status == "success" || status == "notmodified" ) 
    3125                     // See if a selector was specified 
    3126                     self.html( selector ? 
    3127                         // Create a dummy div to hold the results 
    3128                         jQuery("<div/>") 
    3129                             // inject the contents of the document in, removing the scripts 
    3130                             // to avoid any 'Permission Denied' errors in IE 
    3131                             .append(res.responseText.replace(/<script(.|\s)*?\/script>/g, "")) 
    3132  
    3133                             // Locate the specified elements 
    3134                             .find(selector) : 
    3135  
    3136                         // If not, just inject the full result 
    3137                         res.responseText ); 
    3138  
    3139                 if( callback ) 
    3140                     self.each( callback, [res.responseText, status, res] ); 
    3141             } 
    3142         }); 
    3143         return this; 
    3144     }, 
    3145  
    3146     serialize: function() { 
    3147         return jQuery.param(this.serializeArray()); 
    3148     }, 
    3149     serializeArray: function() { 
    3150         return this.map(function(){ 
    3151             return this.elements ? jQuery.makeArray(this.elements) : this; 
    3152         }) 
    3153         .filter(function(){ 
    3154             return this.name && !this.disabled && 
    3155                 (this.checked || /select|textarea/i.test(this.nodeName) || 
    3156                     /text|hidden|password/i.test(this.type)); 
    3157         }) 
    3158         .map(function(i, elem){ 
    3159             var val = jQuery(this).val(); 
    3160             return val == null ? null : 
    3161                 jQuery.isArray(val) ? 
    3162                     jQuery.map( val, function(val, i){ 
    3163                         return {name: elem.name, value: val}; 
    3164                     }) : 
    3165                     {name: elem.name, value: val}; 
    3166         }).get(); 
    3167     } 
    3168 }); 
    3169  
    3170 // Attach a bunch of functions for handling common AJAX events 
    3171 jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){ 
    3172     jQuery.fn[o] = function(f){ 
    3173         return this.bind(o, f); 
    3174     }; 
    3175 }); 
    3176  
    3177 var jsc = now(); 
    3178  
    3179 jQuery.extend({ 
    3180    
    3181     get: function( url, data, callback, type ) { 
    3182         // shift arguments if data argument was ommited 
    3183         if ( jQuery.isFunction( data ) ) { 
    3184             callback = data; 
    3185             data = null; 
    3186         } 
    3187  
    3188         return jQuery.ajax({ 
    3189             type: "GET", 
    3190             url: url, 
    3191             data: data, 
    3192             success: callback, 
    3193             dataType: type 
    3194         }); 
    3195     }, 
    3196  
    3197     getScript: function( url, callback ) { 
    3198         return jQuery.get(url, null, callback, "script"); 
    3199     }, 
    3200  
    3201     getJSON: function( url, data, callback ) { 
    3202         return jQuery.get(url, data, callback, "json"); 
    3203     }, 
    3204  
    3205     post: function( url, data, callback, type ) { 
    3206         if ( jQuery.isFunction( data ) ) { 
    3207             callback = data; 
    3208             data = {}; 
    3209         } 
    3210  
    3211         return jQuery.ajax({ 
    3212             type: "POST", 
    3213             url: url, 
    3214             data: data, 
    3215             success: callback, 
    3216             dataType: type 
    3217         }); 
    3218     }, 
    3219  
    3220     ajaxSetup: function( settings ) { 
    3221         jQuery.extend( jQuery.ajaxSettings, settings ); 
    3222     }, 
    3223  
    3224     ajaxSettings: { 
    3225         url: location.href, 
    3226         global: true, 
    3227         type: "GET", 
    3228         contentType: "application/x-www-form-urlencoded", 
    3229         processData: true, 
    3230         async: true, 
    3231         /* 
    3232         timeout: 0, 
    3233         data: null, 
    3234         username: null, 
    3235         password: null, 
    3236         */ 
    3237         // Create the request object; Microsoft failed to properly 
    3238         // implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available 
    3239         // This function can be overriden by calling jQuery.ajaxSetup 
    3240         xhr:function(){ 
    3241             return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); 
    3242         }, 
    3243         accepts: { 
    3244             xml: "application/xml, text/xml", 
    3245             html: "text/html", 
    3246             script: "text/javascript, application/javascript", 
    3247             json: "application/json, text/javascript", 
    3248             text: "text/plain", 
    3249             _default: "*/*" 
    3250         } 
    3251     }, 
    3252  
    3253     // Last-Modified header cache for next request 
    3254     lastModified: {}, 
    3255  
    3256     ajax: function( s ) { 
    3257         // Extend the settings, but re-extend 's' so that it can be 
    3258         // checked again later (in the test suite, specifically) 
    3259         s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s)); 
    3260  
    3261         var jsonp, jsre = /=\?(&|$)/g, status, data, 
    3262             type = s.type.toUpperCase(); 
    3263  
    3264         // convert data if not already a string 
    3265         if ( s.data && s.processData && typeof s.data !== "string" ) 
    3266             s.data = jQuery.param(s.data); 
    3267  
    3268         // Handle JSONP Parameter Callbacks 
    3269         if ( s.dataType == "jsonp" ) { 
    3270             if ( type == "GET" ) { 
    3271                 if ( !s.url.match(jsre) ) 
    3272                     s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?"; 
    3273             } else if ( !s.data || !s.data.match(jsre) ) 
    3274                 s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?"; 
    3275             s.dataType = "json"; 
    3276         } 
    3277  
    3278         // Build temporary JSONP function 
    3279         if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) { 
    3280             jsonp = "jsonp" + jsc++; 
    3281  
    3282             // Replace the =? sequence both in the query string and the data 
    3283             if ( s.data ) 
    3284                 s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1"); 
    3285             s.url = s.url.replace(jsre, "=" + jsonp + "$1"); 
    3286  
    3287             // We need to make sure 
    3288             // that a JSONP style response is executed properly 
    3289             s.dataType = "script"; 
    3290  
    3291             // Handle JSONP-style loading 
    3292             window[ jsonp ] = function(tmp){ 
    3293                 data = tmp; 
    3294                 success(); 
    3295                 complete(); 
    3296                 // Garbage collect 
    3297                 window[ jsonp ] = undefined; 
    3298                 try{ delete window[ jsonp ]; } catch(e){} 
    3299                 if ( head ) 
    3300                     head.removeChild( script ); 
    3301             }; 
    3302         } 
    3303  
    3304         if ( s.dataType == "script" && s.cache == null ) 
    3305             s.cache = false; 
    3306  
    3307         if ( s.cache === false && type == "GET" ) { 
    3308             var ts = now(); 
    3309             // try replacing _= if it is there 
    3310             var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2"); 
    3311             // if nothing was replaced, add timestamp to the end 
    3312             s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : ""); 
    3313         } 
    3314  
    3315         // If data is available, append data to url for get requests 
    3316         if ( s.data && type == "GET" ) { 
    3317             s.url += (s.url.match(/\?/) ? "&" : "?") + s.data; 
    3318  
    3319             // IE likes to send both get and post data, prevent this 
    3320             s.data = null; 
    3321         } 
    3322  
    3323         // Watch for a new set of requests 
    3324         if ( s.global && ! jQuery.active++ ) 
    3325             jQuery.event.trigger( "ajaxStart" ); 
    3326  
    3327         // Matches an absolute URL, and saves the domain 
    3328         var parts = /^(\w+:)?\/\/([^\/?#]+)/.exec( s.url ); 
    3329  
    3330         // If we're requesting a remote document 
    3331         // and trying to load JSON or Script with a GET 
    3332         if ( s.dataType == "script" && type == "GET" && parts 
    3333             && ( parts[1] && parts[1] != location.protocol || parts[2] != location.host )){ 
    3334  
    3335             var head = document.getElementsByTagName("head")[0]; 
    3336             var script = document.createElement("script"); 
    3337             script.src = s.url; 
    3338             if (s.scriptCharset) 
    3339                 script.charset = s.scriptCharset; 
    3340  
    3341             // Handle Script loading 
    3342             if ( !jsonp ) { 
    3343                 var done = false; 
    3344  
    3345                 // Attach handlers for all browsers 
    3346                 script.onload = script.onreadystatechange = function(){ 
    3347                     if ( !done && (!this.readyState || 
    3348                             this.readyState == "loaded" || this.readyState == "complete") ) { 
    3349                         done = true; 
    3350                         success(); 
    3351                         complete(); 
    3352                         head.removeChild( script ); 
    3353                     } 
    3354                 }; 
    3355             } 
    3356  
    3357             head.appendChild(script); 
    3358  
    3359             // We handle everything using the script element injection 
    3360             return undefined; 
    3361         } 
    3362  
    3363         var requestDone = false; 
    3364  
    3365         // Create the request object 
    3366         var xhr = s.xhr(); 
    3367  
    3368         // Open the socket 
    3369         // Passing null username, generates a login popup on Opera (#2865) 
    3370         if( s.username ) 
    3371             xhr.open(type, s.url, s.async, s.username, s.password); 
    3372         else 
    3373             xhr.open(type, s.url, s.async); 
    3374  
    3375         // Need an extra try/catch for cross domain requests in Firefox 3 
    3376         try { 
    3377             // Set the correct header, if data is being sent 
    3378             if ( s.data ) 
    3379                 xhr.setRequestHeader("Content-Type", s.contentType); 
    3380  
    3381             // Set the If-Modified-Since header, if ifModified mode. 
    3382             if ( s.ifModified ) 
    3383                 xhr.setRequestHeader("If-Modified-Since", 
    3384                     jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" ); 
    3385  
    3386             // Set header so the called script knows that it's an XMLHttpRequest 
    3387             xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest"); 
    3388  
    3389             // Set the Accepts header for the server, depending on the dataType 
    3390             xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ? 
    3391                 s.accepts[ s.dataType ] + ", */*" : 
    3392                 s.accepts._default ); 
    3393         } catch(e){} 
    3394  
    3395         // Allow custom headers/mimetypes and early abort 
    3396         if ( s.beforeSend && s.beforeSend(xhr, s) === false ) { 
    3397             // Handle the global AJAX counter 
    3398             if ( s.global && ! --jQuery.active ) 
    3399                 jQuery.event.trigger( "ajaxStop" ); 
    3400             // close opended socket 
    3401             xhr.abort(); 
    3402             return false; 
    3403         } 
    3404  
    3405         if ( s.global ) 
    3406             jQuery.event.trigger("ajaxSend", [xhr, s]); 
    3407  
    3408         // Wait for a response to come back 
    3409         var onreadystatechange = function(isTimeout){ 
    3410             // The request was aborted, clear the interval and decrement jQuery.active 
    3411             if (xhr.readyState == 0) { 
    3412                 if (ival) { 
    3413                     // clear poll interval 
    3414                     clearInterval(ival); 
    3415                     ival = null; 
    3416                     // Handle the global AJAX counter 
    3417                     if ( s.global && ! --jQuery.active ) 
    3418                         jQuery.event.trigger( "ajaxStop" ); 
    3419                 } 
    3420             // The transfer is complete and the data is available, or the request timed out 
    3421             } else if ( !requestDone && xhr && (xhr.readyState == 4 || isTimeout == "timeout") ) { 
    3422                 requestDone = true; 
    3423  
    3424                 // clear poll interval 
    3425                 if (ival) { 
    3426                     clearInterval(ival); 
    3427                     ival = null; 
    3428                 } 
    3429  
    3430                 status = isTimeout == "timeout" ? "timeout" : 
    3431                     !jQuery.httpSuccess( xhr ) ? "error" : 
    3432                     s.ifModified && jQuery.httpNotModified( xhr, s.url ) ? "notmodified" : 
    3433                     "success"; 
    3434  
    3435                 if ( status == "success" ) { 
    3436                     // Watch for, and catch, XML document parse errors 
    3437                     try { 
    3438                         // process the data (runs the xml through httpData regardless of callback) 
    3439                         data = jQuery.httpData( xhr, s.dataType, s ); 
    3440                     } catch(e) { 
    3441                         status = "parsererror"; 
    3442                     } 
    3443                 } 
    3444  
    3445                 // Make sure that the request was successful or notmodified 
    3446                 if ( status == "success" ) { 
    3447                     // Cache Last-Modified header, if ifModified mode. 
    3448                     var modRes; 
    3449                     try { 
    3450                         modRes = xhr.getResponseHeader("Last-Modified"); 
    3451                     } catch(e) {} // swallow exception thrown by FF if header is not available 
    3452  
    3453                     if ( s.ifModified && modRes ) 
    3454                         jQuery.lastModified[s.url] = modRes; 
    3455  
    3456                     // JSONP handles its own success callback 
    3457                     if ( !jsonp ) 
    3458                         success(); 
    3459                 } else 
    3460                     jQuery.handleError(s, xhr, status); 
    3461  
    3462                 // Fire the complete handlers 
    3463                 complete(); 
    3464  
    3465                 // Stop memory leaks 
    3466                 if ( s.async ) 
    3467                     xhr = null; 
    3468             } 
    3469         }; 
    3470  
    3471         if ( s.async ) { 
    3472             // don't attach the handler to the request, just poll it instead 
    3473             var ival = setInterval(onreadystatechange, 13); 
    3474  
    3475             // Timeout checker 
    3476             if ( s.timeout > 0 ) 
    3477                 setTimeout(function(){ 
    3478                     // Check to see if the request is still happening 
    3479                     if ( xhr ) { 
    3480                         if( !requestDone ) 
    3481                             onreadystatechange( "timeout" ); 
    3482  
    3483                         // Cancel the request 
    3484                         if ( xhr ) 
    3485                             xhr.abort(); 
    3486                     } 
    3487                 }, s.timeout); 
    3488         } 
    3489  
    3490         // Send the data 
    3491         try { 
    3492             xhr.send(s.data); 
    3493         } catch(e) { 
    3494             jQuery.handleError(s, xhr, null, e); 
    3495         } 
    3496  
    3497         // firefox 1.5 doesn't fire statechange for sync requests 
    3498         if ( !s.async ) 
    3499             onreadystatechange(); 
    3500  
    3501         function success(){ 
    3502             // If a local callback was specified, fire it and pass it the data 
    3503             if ( s.success ) 
    3504                 s.success( data, status ); 
    3505  
    3506             // Fire the global callback 
    3507             if ( s.global ) 
    3508                 jQuery.event.trigger( "ajaxSuccess", [xhr, s] ); 
    3509         } 
    3510  
    3511         function complete(){ 
    3512             // Process result 
    3513             if ( s.complete ) 
    3514                 s.complete(xhr, status); 
    3515  
    3516             // The request was completed 
    3517             if ( s.global ) 
    3518                 jQuery.event.trigger( "ajaxComplete", [xhr, s] ); 
    3519  
    3520             // Handle the global AJAX counter 
    3521             if ( s.global && ! --jQuery.active ) 
    3522                 jQuery.event.trigger( "ajaxStop" ); 
    3523         } 
    3524  
    3525         // return XMLHttpRequest to allow aborting the request etc. 
    3526         return xhr; 
    3527     }, 
    3528  
    3529     handleError: function( s, xhr, status, e ) { 
    3530         // If a local callback was specified, fire it 
    3531         if ( s.error ) s.error( xhr, status, e ); 
    3532  
    3533         // Fire the global callback 
    3534         if ( s.global ) 
    3535             jQuery.event.trigger( "ajaxError", [xhr, s, e] ); 
    3536     }, 
    3537  
    3538     // Counter for holding the number of active queries 
    3539     active: 0, 
    3540  
    3541     // Determines if an XMLHttpRequest was successful or not 
    3542     httpSuccess: function( xhr ) { 
    3543         try { 
    3544             // IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450 
    3545             return !xhr.status && location.protocol == "file:" || 
    3546                 ( xhr.status >= 200 && xhr.status < 300 ) || xhr.status == 304 || xhr.status == 1223; 
    3547         } catch(e){} 
    3548         return false; 
    3549     }, 
    3550  
    3551     // Determines if an XMLHttpRequest returns NotModified 
    3552     httpNotModified: function( xhr, url ) { 
    3553         try { 
    3554             var xhrRes = xhr.getResponseHeader("Last-Modified"); 
    3555  
    3556             // Firefox always returns 200. check Last-Modified date 
    3557             return xhr.status == 304 || xhrRes == jQuery.lastModified[url]; 
    3558         } catch(e){} 
    3559         return false; 
    3560     }, 
    3561  
    3562     httpData: function( xhr, type, s ) { 
    3563         var ct = xhr.getResponseHeader("content-type"), 
    3564             xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0, 
    3565             data = xml ? xhr.responseXML : xhr.responseText; 
    3566  
    3567         if ( xml && data.documentElement.tagName == "parsererror" ) 
    3568             throw "parsererror"; 
    3569              
    3570         // Allow a pre-filtering function to sanitize the response 
    3571         // s != null is checked to keep backwards compatibility 
    3572         if( s && s.dataFilter ) 
    3573             data = s.dataFilter( data, type ); 
    3574  
    3575         // The filter can actually parse the response 
    3576         if( typeof data === "string" ){ 
    3577  
    3578             // If the type is "script", eval it in global context 
    3579             if ( type == "script" ) 
    3580                 jQuery.globalEval( data ); 
    3581  
    3582             // Get the JavaScript object, if JSON is used. 
    3583             if ( type == "json" ) 
    3584                 data = window["eval"]("(" + data + ")"); 
    3585         } 
    3586          
    3587         return data; 
    3588     }, 
    3589  
    3590     // Serialize an array of form elements or a set of 
    3591     // key/values into a query string 
    3592     param: function( a ) { 
    3593         var s = [ ]; 
    3594  
    3595         function add( key, value ){ 
    3596             s[ s.length ] = encodeURIComponent(key) + '=' + encodeURIComponent(value); 
    3597         }; 
    3598  
    3599         // If an array was passed in, assume that it is an array 
    3600         // of form elements 
    3601         if ( jQuery.isArray(a) || a.jquery ) 
    3602             // Serialize the form elements 
    3603             jQuery.each( a, function(){ 
    3604                 add( this.name, this.value ); 
    3605             }); 
    3606  
    3607         // Otherwise, assume that it's an object of key/value pairs 
    3608         else 
    3609             // Serialize the key/values 
    3610             for ( var j in a ) 
    3611                 // If the value is an array then the key names need to be repeated 
    3612                 if ( jQuery.isArray(a[j]) ) 
    3613                     jQuery.each( a[j], function(){ 
    3614                         add( j, this ); 
    3615                     }); 
    3616                 else 
    3617                     add( j, jQuery.isFunction(a[j]) ? a[j]() : a[j] ); 
    3618  
    3619         // Return the resulting serialization 
    3620         return s.join("&").replace(/%20/g, "+"); 
    3621     } 
    3622  
    3623 }); 
    3624 var elemdisplay = {}, 
    3625     fxAttrs = [ 
    3626         // height animations 
    3627         [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ], 
    3628         // width animations 
    3629         [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ], 
    3630         // opacity animations 
    3631         [ "opacity" ] 
    3632     ]; 
    3633  
    3634 function genFx( type, num ){ 
    3635     var obj = {}; 
    3636     jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function(){ 
    3637         obj[ this ] = type; 
    3638     }); 
    3639     return obj; 
    3640 } 
    3641  
    3642 jQuery.fn.extend({ 
    3643     show: function(speed,callback){ 
    3644         if ( speed ) { 
    3645             return this.animate( genFx("show", 3), speed, callback); 
    3646         } else { 
    3647             for ( var i = 0, l = this.length; i < l; i++ ){ 
    3648                 var old = jQuery.data(this[i], "olddisplay"); 
    3649                  
    3650                 this[i].style.display = old || ""; 
    3651                  
    3652                 if ( jQuery.css(this[i], "display") === "none" ) { 
    3653                     var tagName = this[i].tagName, display; 
    3654                      
    3655                     if ( elemdisplay[ tagName ] ) { 
    3656                         display = elemdisplay[ tagName ]; 
    3657                     } else { 
    3658                         var elem = jQuery("<" + tagName + " />").appendTo("body"); 
    3659                          
    3660                         display = elem.css("display"); 
    3661                         if ( display === "none" ) 
    3662                             display = "block"; 
    3663                          
    3664                         elem.remove(); 
    3665                          
    3666                         elemdisplay[ tagName ] = display; 
    3667                     } 
    3668                      
    3669                     this[i].style.display = jQuery.data(this[i], "olddisplay", display); 
    3670                 } 
    3671             } 
    3672              
    3673             return this; 
    3674         } 
    3675     }, 
    3676  
    3677     hide: function(speed,callback){ 
    3678         if ( speed ) { 
    3679             return this.animate( genFx("hide", 3), speed, callback); 
    3680         } else { 
    3681             for ( var i = 0, l = this.length; i < l; i++ ){ 
    3682                 var old = jQuery.data(this[i], "olddisplay"); 
    3683                 if ( !old && old !== "none" ) 
    3684                     jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display")); 
    3685                 this[i].style.display = "none"; 
    3686             } 
    3687             return this; 
    3688         } 
    3689     }, 
    3690  
    3691     // Save the old toggle function 
    3692     _toggle: jQuery.fn.toggle, 
    3693  
    3694     toggle: function( fn, fn2 ){ 
    3695         var bool = typeof fn === "boolean"; 
    3696  
    3697         return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ? 
    3698             this._toggle.apply( this, arguments ) : 
    3699             fn == null || bool ? 
    3700                 this.each(function(){ 
    3701                     var state = bool ? fn : jQuery(this).is(":hidden"); 
    3702                     jQuery(this)[ state ? "show" : "hide" ](); 
    3703                 }) : 
    3704                 this.animate(genFx("toggle", 3), fn, fn2); 
    3705     }, 
    3706  
    3707     fadeTo: function(speed,to,callback){ 
    3708         return this.animate({opacity: to}, speed, callback); 
    3709     }, 
    3710  
    3711     animate: function( prop, speed, easing, callback ) { 
    3712         var optall = jQuery.speed(speed, easing, callback); 
    3713  
    3714         return this[ optall.queue === false ? "each" : "queue" ](function(){ 
    3715          
    3716             var opt = jQuery.extend({}, optall), p, 
    3717                 hidden = this.nodeType == 1 && jQuery(this).is(":hidden"), 
    3718                 self = this; 
    3719      
    3720             for ( p in prop ) { 
    3721                 if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden ) 
    3722                     return opt.complete.call(this); 
    3723  
    3724                 if ( ( p == "height" || p == "width" ) && this.style ) { 
    3725                     // Store display property 
    3726                     opt.display = jQuery.css(this, "display"); 
    3727  
    3728                     // Make sure that nothing sneaks out 
    3729                     opt.overflow = this.style.overflow; 
    3730                 } 
    3731             } 
    3732  
    3733             if ( opt.overflow != null ) 
    3734                 this.style.overflow = "hidden"; 
    3735  
    3736             opt.curAnim = jQuery.extend({}, prop); 
    3737  
    3738             jQuery.each( prop, function(name, val){ 
    3739                 var e = new jQuery.fx( self, opt, name ); 
    3740  
    3741                 if ( /toggle|show|hide/.test(val) ) 
    3742                     e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop ); 
    3743                 else { 
    3744                     var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/), 
    3745                         start = e.cur(true) || 0; 
    3746  
    3747                     if ( parts ) { 
    3748                         var end = parseFloat(parts[2]), 
    3749                             unit = parts[3] || "px"; 
    3750  
    3751                         // We need to compute starting value 
    3752                         if ( unit != "px" ) { 
    3753                             self.style[ name ] = (end || 1) + unit; 
    3754                             start = ((end || 1) / e.cur(true)) * start; 
    3755                             self.style[ name ] = start + unit; 
    3756                         } 
    3757  
    3758                         // If a +=/-= token was provided, we're doing a relative animation 
    3759                         if ( parts[1] ) 
    3760                             end = ((parts[1] == "-=" ? -1 : 1) * end) + start; 
    3761  
    3762                         e.custom( start, end, unit ); 
    3763                     } else 
    3764                         e.custom( start, val, "" ); 
    3765                 } 
    3766             }); 
    3767  
    3768             // For JS strict compliance 
    3769             return true; 
    3770         }); 
    3771     }, 
    3772  
    3773     stop: function(clearQueue, gotoEnd){ 
    3774         var timers = jQuery.timers; 
    3775  
    3776         if (clearQueue) 
    3777             this.queue([]); 
    3778  
    3779         this.each(function(){ 
    3780             // go in reverse order so anything added to the queue during the loop is ignored 
    3781             for ( var i = timers.length - 1; i >= 0; i-- ) 
    3782                 if ( timers[i].elem == this ) { 
    3783                     if (gotoEnd) 
    3784                         // force the next step to be the last 
    3785                         timers[i](true); 
    3786                     timers.splice(i, 1); 
    3787                 } 
    3788         }); 
    3789  
    3790         // start the next in the queue if the last step wasn't forced 
    3791         if (!gotoEnd) 
    3792             this.dequeue(); 
    3793  
    3794         return this; 
    3795     } 
    3796  
    3797 }); 
    3798  
    3799 // Generate shortcuts for custom animations 
    3800 jQuery.each({ 
    3801     slideDown: genFx("show", 1), 
    3802     slideUp: genFx("hide", 1), 
    3803     slideToggle: genFx("toggle", 1), 
    3804     fadeIn: { opacity: "show" }, 
    3805     fadeOut: { opacity: "hide" } 
    3806 }, function( name, props ){ 
    3807     jQuery.fn[ name ] = function( speed, callback ){ 
    3808         return this.animate( props, speed, callback ); 
    3809     }; 
    3810 }); 
    3811  
    3812 jQuery.extend({ 
    3813  
    3814     speed: function(speed, easing, fn) { 
    3815         var opt = typeof speed === "object" ? speed : { 
    3816             complete: fn || !fn && easing || 
    3817                 jQuery.isFunction( speed ) && speed, 
    3818             duration: speed, 
    3819             easing: fn && easing || easing && !jQuery.isFunction(easing) && easing 
    3820         }; 
    3821  
    3822         opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : 
    3823             jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default; 
    3824  
    3825         // Queueing 
    3826         opt.old = opt.complete; 
    3827         opt.complete = function(){ 
    3828             if ( opt.queue !== false ) 
    3829                 jQuery(this).dequeue(); 
    3830             if ( jQuery.isFunction( opt.old ) ) 
    3831                 opt.old.call( this ); 
    3832         }; 
    3833  
    3834         return opt; 
    3835     }, 
    3836  
    3837     easing: { 
    3838         linear: function( p, n, firstNum, diff ) { 
    3839             return firstNum + diff * p; 
    3840         }, 
    3841         swing: function( p, n, firstNum, diff ) { 
    3842             return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum; 
    3843         } 
    3844     }, 
    3845  
    3846     timers: [], 
    3847     timerId: null, 
    3848  
    3849     fx: function( elem, options, prop ){ 
    3850         this.options = options; 
    3851         this.elem = elem; 
    3852         this.prop = prop; 
    3853  
    3854         if ( !options.orig ) 
    3855             options.orig = {}; 
    3856     } 
    3857  
    3858 }); 
    3859  
    3860 jQuery.fx.prototype = { 
    3861  
    3862     // Simple function for setting a style value 
    3863     update: function(){ 
    3864         if ( this.options.step ) 
    3865             this.options.step.call( this.elem, this.now, this ); 
    3866  
    3867         (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this ); 
    3868  
    3869         // Set display property to block for height/width animations 
    3870         if ( ( this.prop == "height" || this.prop == "width" ) && this.elem.style ) 
    3871             this.elem.style.display = "block"; 
    3872     }, 
    3873  
    3874     // Get the current size 
    3875     cur: function(force){ 
    3876         if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) 
    3877             return this.elem[ this.prop ]; 
    3878  
    3879         var r = parseFloat(jQuery.css(this.elem, this.prop, force)); 
    3880         return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0; 
    3881     }, 
    3882  
    3883     // Start an animation from one number to another 
    3884     custom: function(from, to, unit){ 
    3885         this.startTime = now(); 
    3886         this.start = from; 
    3887         this.end = to; 
    3888         this.unit = unit || this.unit || "px"; 
    3889         this.now = this.start; 
    3890         this.pos = this.state = 0; 
    3891  
    3892         var self = this; 
    3893         function t(gotoEnd){ 
    3894             return self.step(gotoEnd); 
    3895         } 
    3896  
    3897         t.elem = this.elem; 
    3898  
    3899         jQuery.timers.push(t); 
    3900  
    3901         if ( t() && jQuery.timerId == null ) { 
    3902             jQuery.timerId = setInterval(function(){ 
    3903                 var timers = jQuery.timers; 
    3904  
    3905                 for ( var i = 0; i < timers.length; i++ ) 
    3906                     if ( !timers[i]() ) 
    3907                         timers.splice(i--, 1); 
    3908  
    3909                 if ( !timers.length ) { 
    3910                     clearInterval( jQuery.timerId ); 
    3911                     jQuery.timerId = null; 
    3912                 } 
    3913             }, 13); 
    3914         } 
    3915     }, 
    3916  
    3917     // Simple 'show' function 
    3918     show: function(){ 
    3919         // Remember where we started, so that we can go back to it later 
    3920         this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop ); 
    3921         this.options.show = true; 
    3922  
    3923         // Begin the animation 
    3924         // Make sure that we start at a small width/height to avoid any 
    3925         // flash of content 
    3926         this.custom(this.prop == "width" || this.prop == "height" ? 1 : 0, this.cur()); 
    3927  
    3928         // Start by showing the element 
    3929         jQuery(this.elem).show(); 
    3930     }, 
    3931  
    3932     // Simple 'hide' function 
    3933     hide: function(){ 
    3934         // Remember where we started, so that we can go back to it later 
    3935         this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop ); 
    3936         this.options.hide = true; 
    3937  
    3938         // Begin the animation 
    3939         this.custom(this.cur(), 0); 
    3940     }, 
    3941  
    3942     // Each step of an animation 
    3943     step: function(gotoEnd){ 
    3944         var t = now(); 
    3945  
    3946         if ( gotoEnd || t >= this.options.duration + this.startTime ) { 
    3947             this.now = this.end; 
    3948             this.pos = this.state = 1; 
    3949             this.update(); 
    3950  
    3951             this.options.curAnim[ this.prop ] = true; 
    3952  
    3953             var done = true; 
    3954             for ( var i in this.options.curAnim ) 
    3955                 if ( this.options.curAnim[i] !== true ) 
    3956                     done = false; 
    3957  
    3958             if ( done ) { 
    3959                 if ( this.options.display != null ) { 
    3960                     // Reset the overflow 
    3961                     this.elem.style.overflow = this.options.overflow; 
    3962  
    3963                     // Reset the display 
    3964                     this.elem.style.display = this.options.display; 
    3965                     if ( jQuery.css(this.elem, "display") == "none" ) 
    3966                         this.elem.style.display = "block"; 
    3967                 } 
    3968  
    3969                 // Hide the element if the "hide" operation was done 
    3970                 if ( this.options.hide ) 
    3971                     jQuery(this.elem).hide(); 
    3972  
    3973                 // Reset the properties, if the item has been hidden or shown 
    3974                 if ( this.options.hide || this.options.show ) 
    3975                     for ( var p in this.options.curAnim ) 
    3976                         jQuery.attr(this.elem.style, p, this.options.orig[p]); 
    3977             } 
    3978  
    3979             if ( done ) 
    3980                 // Execute the complete function 
    3981                 this.options.complete.call( this.elem ); 
    3982  
    3983             return false; 
    3984         } else { 
    3985             var n = t - this.startTime; 
    3986             this.state = n / this.options.duration; 
    3987  
    3988             // Perform the easing function, defaults to swing 
    3989             this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration); 
    3990             this.now = this.start + ((this.end - this.start) * this.pos); 
    3991  
    3992             // Perform the next step of the animation 
    3993             this.update(); 
    3994         } 
    3995  
    3996         return true; 
    3997     } 
    3998  
    3999 }; 
    4000  
    4001 jQuery.extend( jQuery.fx, { 
    4002     speeds:{ 
    4003         slow: 600, 
    4004         fast: 200, 
    4005         // Default speed 
    4006         _default: 400 
    4007     }, 
    4008     step: { 
    4009  
    4010         opacity: function(fx){ 
    4011             jQuery.attr(fx.elem.style, "opacity", fx.now); 
    4012         }, 
    4013  
    4014         _default: function(fx){ 
    4015             if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) 
    4016                 fx.elem.style[ fx.prop ] = fx.now + fx.unit; 
    4017             else 
    4018                 fx.elem[ fx.prop ] = fx.now; 
    4019         } 
    4020     } 
    4021 }); 
    4022 if ( document.documentElement["getBoundingClientRect"] ) 
    4023     jQuery.fn.offset = function() { 
    4024         if ( !this[0] ) return { top: 0, left: 0 }; 
    4025         if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] ); 
    4026         var box  = this[0].getBoundingClientRect(), doc = this[0].ownerDocument, body = doc.body, docElem = doc.documentElement, 
    4027             clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0, 
    4028             top  = box.top  + (self.pageYOffset || jQuery.boxModel && docElem.scrollTop  || body.scrollTop ) - clientTop, 
    4029             left = box.left + (self.pageXOffset || jQuery.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft; 
    4030         return { top: top, left: left }; 
    4031     }; 
    4032 else  
    4033     jQuery.fn.offset = function() { 
    4034         if ( !this[0] ) return { top: 0, left: 0 }; 
    4035         if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] ); 
    4036         jQuery.offset.initialized || jQuery.offset.initialize(); 
    4037  
    4038         var elem = this[0], offsetParent = elem.offsetParent, prevOffsetParent = elem, 
    4039             doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement, 
    4040             body = doc.body, defaultView = doc.defaultView, 
    4041             prevComputedStyle = defaultView.getComputedStyle(elem, null), 
    4042             top = elem.offsetTop, left = elem.offsetLeft; 
    4043  
    4044         while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) { 
    4045             computedStyle = defaultView.getComputedStyle(elem, null); 
    4046             top -= elem.scrollTop, left -= elem.scrollLeft; 
    4047             if ( elem === offsetParent ) { 
    4048                 top += elem.offsetTop, left += elem.offsetLeft; 
    4049                 if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.tagName)) ) 
    4050                     top  += parseInt( computedStyle.borderTopWidth,  10) || 0, 
    4051                     left += parseInt( computedStyle.borderLeftWidth, 10) || 0; 
    4052                 prevOffsetParent = offsetParent, offsetParent = elem.offsetParent; 
    4053             } 
    4054             if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) 
    4055                 top  += parseInt( computedStyle.borderTopWidth,  10) || 0, 
    4056                 left += parseInt( computedStyle.borderLeftWidth, 10) || 0; 
    4057             prevComputedStyle = computedStyle; 
    4058         } 
    4059  
    4060         if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) 
    4061             top  += body.offsetTop, 
    4062             left += body.offsetLeft; 
    4063  
    4064         if ( prevComputedStyle.position === "fixed" ) 
    4065             top  += Math.max(docElem.scrollTop, body.scrollTop), 
    4066             left += Math.max(docElem.scrollLeft, body.scrollLeft); 
    4067  
    4068         return { top: top, left: left }; 
    4069     }; 
    4070  
    4071 jQuery.offset = { 
    4072     initialize: function() { 
    4073         if ( this.initialized ) return; 
    4074         var body = document.body, container = document.createElement('div'), innerDiv, checkDiv, table, td, rules, prop, bodyMarginTop = body.style.marginTop, 
    4075             html = '<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"cellpadding="0"cellspacing="0"><tr><td></td></tr></table>'; 
    4076  
    4077         rules = { position: 'absolute', top: 0, left: 0, margin: 0, border: 0, width: '1px', height: '1px', visibility: 'hidden' }; 
    4078         for ( prop in rules ) container.style[prop] = rules[prop]; 
    4079  
    4080         container.innerHTML = html; 
    4081         body.insertBefore(container, body.firstChild); 
    4082         innerDiv = container.firstChild, checkDiv = innerDiv.firstChild, td = innerDiv.nextSibling.firstChild.firstChild; 
    4083  
    4084         this.doesNotAddBorder = (checkDiv.offsetTop !== 5); 
    4085         this.doesAddBorderForTableAndCells = (td.offsetTop === 5); 
    4086  
    4087         innerDiv.style.overflow = 'hidden', innerDiv.style.position = 'relative'; 
    4088         this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5); 
    4089  
    4090         body.style.marginTop = '1px'; 
    4091         this.doesNotIncludeMarginInBodyOffset = (body.offsetTop === 0); 
    4092         body.style.marginTop = bodyMarginTop; 
    4093  
    4094         body.removeChild(container); 
    4095         this.initialized = true; 
    4096     }, 
    4097  
    4098     bodyOffset: function(body) { 
    4099         jQuery.offset.initialized || jQuery.offset.initialize(); 
    4100         var top = body.offsetTop, left = body.offsetLeft; 
    4101         if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) 
    4102             top  += parseInt( jQuery.curCSS(body, 'marginTop',  true), 10 ) || 0, 
    4103             left += parseInt( jQuery.curCSS(body, 'marginLeft', true), 10 ) || 0; 
    4104         return { top: top, left: left }; 
    4105     } 
    4106 }; 
    4107  
    4108  
    4109 jQuery.fn.extend({ 
    4110     position: function() { 
    4111         var left = 0, top = 0, results; 
    4112  
    4113         if ( this[0] ) { 
    4114             // Get *real* offsetParent 
    4115             var offsetParent = this.offsetParent(), 
    4116  
    4117             // Get correct offsets 
    4118             offset       = this.offset(), 
    4119             parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset(); 
    4120  
    4121             // Subtract element margins 
    4122             // note: when an element has margin: auto the offsetLeft and marginLeft  
    4123             // are the same in Safari causing offset.left to incorrectly be 0 
    4124             offset.top  -= num( this, 'marginTop'  ); 
    4125             offset.left -= num( this, 'marginLeft' ); 
    4126  
    4127             // Add offsetParent borders 
    4128             parentOffset.top  += num( offsetParent, 'borderTopWidth'  ); 
    4129             parentOffset.left += num( offsetParent, 'borderLeftWidth' ); 
    4130  
    4131             // Subtract the two offsets 
    4132             results = { 
    4133                 top:  offset.top  - parentOffset.top, 
    4134                 left: offset.left - parentOffset.left 
    4135             }; 
    4136         } 
    4137  
    4138         return results; 
    4139     }, 
    4140  
    4141     offsetParent: function() { 
    4142         var offsetParent = this[0].offsetParent || document.body; 
    4143         while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && jQuery.css(offsetParent, 'position') == 'static') ) 
    4144             offsetParent = offsetParent.offsetParent; 
    4145         return jQuery(offsetParent); 
    4146     } 
    4147 }); 
    4148  
    4149  
    4150 // Create scrollLeft and scrollTop methods 
    4151 jQuery.each( ['Left', 'Top'], function(i, name) { 
    4152     var method = 'scroll' + name; 
    4153      
    4154     jQuery.fn[ method ] = function(val) { 
    4155         if (!this[0]) return null; 
    4156  
    4157         return val !== undefined ? 
    4158  
    4159             // Set the scroll offset 
    4160             this.each(function() { 
    4161                 this == window || this == document ? 
    4162                     window.scrollTo( 
    4163                         !i ? val : jQuery(window).scrollLeft(), 
    4164                          i ? val : jQuery(window).scrollTop() 
    4165                     ) : 
    4166                     this[ method ] = val; 
    4167             }) : 
    4168  
    4169             // Return the scroll offset 
    4170             this[0] == window || this[0] == document ? 
    4171                 self[ i ? 'pageYOffset' : 'pageXOffset' ] || 
    4172                     jQuery.boxModel && document.documentElement[ method ] || 
    4173                     document.body[ method ] : 
    4174                 this[0][ method ]; 
    4175     }; 
    4176 }); 
    4177 // Create innerHeight, innerWidth, outerHeight and outerWidth methods 
    4178 jQuery.each([ "Height", "Width" ], function(i, name){ 
    4179  
    4180     var tl = i ? "Left"  : "Top",  // top or left 
    4181         br = i ? "Right" : "Bottom"; // bottom or right 
    4182  
    4183     // innerHeight and innerWidth 
    4184     jQuery.fn["inner" + name] = function(){ 
    4185         return this[ name.toLowerCase() ]() + 
    4186             num(this, "padding" + tl) + 
    4187             num(this, "padding" + br); 
    4188     }; 
    4189  
    4190     // outerHeight and outerWidth 
    4191     jQuery.fn["outer" + name] = function(margin) { 
    4192         return this["inner" + name]() + 
    4193             num(this, "border" + tl + "Width") + 
    4194             num(this, "border" + br + "Width") + 
    4195             (margin ? 
    4196                 num(this, "margin" + tl) + num(this, "margin" + br) : 0); 
    4197     }; 
    4198      
    4199     var type = name.toLowerCase(); 
    4200  
    4201     jQuery.fn[ type ] = function( size ) { 
    4202         // Get window width or height 
    4203         return this[0] == window ? 
    4204             // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode 
    4205             document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] || 
    4206             document.body[ "client" + name ] : 
    4207  
    4208             // Get document width or height 
    4209             this[0] == document ? 
    4210                 // Either scroll[Width/Height] or offset[Width/Height], whichever is greater 
    4211                 Math.max( 
    4212                     document.documentElement["client" + name], 
    4213                     document.body["scroll" + name], document.documentElement["scroll" + name], 
    4214                     document.body["offset" + name], document.documentElement["offset" + name] 
    4215                 ) : 
    4216  
    4217                 // Get or set width or height on the element 
    4218                 size === undefined ? 
    4219                     // Get width or height on the element 
    4220                     (this.length ? jQuery.css( this[0], type ) : null) : 
    4221  
    4222                     // Set the width or height on the element (default to pixels if value is unitless) 
    4223                     this.css( type, typeof size === "string" ? size : size + "px" ); 
    4224     }; 
    4225  
    4226 });})(); 
    4227  
     19(function(){var N=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g,I=0,F=Object.prototype.toString;var E=function(ae,S,aa,V){aa=aa||[];S=S||document;if(S.nodeType!==1&&S.nodeType!==9){return[]}if(!ae||typeof ae!=="string"){return aa}var ab=[],ac,Y,ah,ag,Z,R,Q=true;N.lastIndex=0;while((ac=N.exec(ae))!==null){ab.push(ac[1]);if(ac[2]){R=RegExp.rightContext;break}}if(ab.length>1&&G.match.POS.exec(ae)){if(ab.length===2&&G.relative[ab[0]]){var U="",X;while((X=G.match.POS.exec(ae))){U+=X[0];ae=ae.replace(G.match.POS,"")}Y=E.filter(U,E(/\s$/.test(ae)?ae+"*":ae,S))}else{Y=G.relative[ab[0]]?[S]:E(ab.shift(),S);while(ab.length){var P=[];ae=ab.shift();if(G.relative[ae]){ae+=ab.shift()}for(var af=0,ad=Y.length;af<ad;af++){E(ae,Y[af],P)}Y=P}}}else{var ai=V?{expr:ab.pop(),set:D(V)}:E.find(ab.pop(),ab.length===1&&S.parentNode?S.parentNode:S);Y=E.filter(ai.expr,ai.set);if(ab.length>0){ah=D(Y)}else{Q=false}while(ab.length){var T=ab.pop(),W=T;if(!G.relative[T]){T=""}else{W=ab.pop()}if(W==null){W=S}G.relative[T](ah,W,M(S))}}if(!ah){ah=Y}if(!ah){throw"Syntax error, unrecognized expression: "+(T||ae)}if(F.call(ah)==="[object Array]"){if(!Q){aa.push.apply(aa,ah)}else{if(S.nodeType===1){for(var af=0;ah[af]!=null;af++){if(ah[af]&&(ah[af]===true||ah[af].nodeType===1&&H(S,ah[af]))){aa.push(Y[af])}}}else{for(var af=0;ah[af]!=null;af++){if(ah[af]&&ah[af].nodeType===1){aa.push(Y[af])}}}}}else{D(ah,aa)}if(R){E(R,S,aa,V)}return aa};E.matches=function(P,Q){return E(P,null,null,Q)};E.find=function(V,S){var W,Q;if(!V){return[]}for(var R=0,P=G.order.length;R<P;R++){var T=G.order[R],Q;if((Q=G.match[T].exec(V))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){Q[1]=(Q[1]||"").replace(/\\/g,"");W=G.find[T](Q,S);if(W!=null){V=V.replace(G.match[T],"");break}}}}if(!W){W=S.getElementsByTagName("*")}return{set:W,expr:V}};E.filter=function(S,ac,ad,T){var Q=S,Y=[],ah=ac,V,ab;while(S&&ac.length){for(var U in G.filter){if((V=G.match[U].exec(S))!=null){var Z=G.filter[U],R=null,X=0,aa,ag;ab=false;if(ah==Y){Y=[]}if(G.preFilter[U]){V=G.preFilter[U](V,ah,ad,Y,T);if(!V){ab=aa=true}else{if(V===true){continue}else{if(V[0]===true){R=[];var W=null,af;for(var ae=0;(af=ah[ae])!==g;ae++){if(af&&W!==af){R.push(af);W=af}}}}}}if(V){for(var ae=0;(ag=ah[ae])!==g;ae++){if(ag){if(R&&ag!=R[X]){X++}aa=Z(ag,V,X,R);var P=T^!!aa;if(ad&&aa!=null){if(P){ab=true}else{ah[ae]=false}}else{if(P){Y.push(ag);ab=true}}}}}if(aa!==g){if(!ad){ah=Y}S=S.replace(G.match[U],"");if(!ab){return[]}break}}}S=S.replace(/\s*,\s*/,"");if(S==Q){if(ab==null){throw"Syntax error, unrecognized expression: "+S}else{break}}Q=S}return ah};var G=E.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(P){return P.getAttribute("href")}},relative:{"+":function(T,Q){for(var R=0,P=T.length;R<P;R++){var S=T[R];if(S){var U=S.previousSibling;while(U&&U.nodeType!==1){U=U.previousSibling}T[R]=typeof Q==="string"?U||false:U===Q}}if(typeof Q==="string"){E.filter(Q,T,true)}},">":function(U,Q,V){if(typeof Q==="string"&&!/\W/.test(Q)){Q=V?Q:Q.toUpperCase();for(var R=0,P=U.length;R<P;R++){var T=U[R];if(T){var S=T.parentNode;U[R]=S.nodeName===Q?S:false}}}else{for(var R=0,P=U.length;R<P;R++){var T=U[R];if(T){U[R]=typeof Q==="string"?T.parentNode:T.parentNode===Q}}if(typeof Q==="string"){E.filter(Q,U,true)}}},"":function(S,Q,U){var R="done"+(I++),P=O;if(!Q.match(/\W/)){var T=Q=U?Q:Q.toUpperCase();P=L}P("parentNode",Q,R,S,T,U)},"~":function(S,Q,U){var R="done"+(I++),P=O;if(typeof Q==="string"&&!Q.match(/\W/)){var T=Q=U?Q:Q.toUpperCase();P=L}P("previousSibling",Q,R,S,T,U)}},find:{ID:function(Q,R){if(R.getElementById){var P=R.getElementById(Q[1]);return P?[P]:[]}},NAME:function(P,Q){return Q.getElementsByName?Q.getElementsByName(P[1]):null},TAG:function(P,Q){return Q.getElementsByTagName(P[1])}},preFilter:{CLASS:function(S,Q,R,P,U){S=" "+S[1].replace(/\\/g,"")+" ";for(var T=0;Q[T];T++){if(U^(" "+Q[T].className+" ").indexOf(S)>=0){if(!R){P.push(Q[T])}}else{if(R){Q[T]=false}}}return false},ID:function(P){return P[1].replace(/\\/g,"")},TAG:function(Q,P){for(var R=0;!P[R];R++){}return M(P[R])?Q[1]:Q[1].toUpperCase()},CHILD:function(P){if(P[1]=="nth"){var Q=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(P[2]=="even"&&"2n"||P[2]=="odd"&&"2n+1"||!/\D/.test(P[2])&&"0n+"+P[2]||P[2]);P[2]=(Q[1]+(Q[2]||1))-0;P[3]=Q[3]-0}P[0]="done"+(I++);return P},ATTR:function(Q){var P=Q[1];if(G.attrMap[P]){Q[1]=G.attrMap[P]}if(Q[2]==="~="){Q[4]=" "+Q[4]+" "}return Q},PSEUDO:function(T,Q,R,P,U){if(T[1]==="not"){if(T[3].match(N).length>1){T[3]=E(T[3],null,null,Q)}else{var S=E.filter(T[3],Q,R,true^U);if(!R){P.push.apply(P,S)}return false}}else{if(G.match.POS.test(T[0])){return true}}return T},POS:function(P){P.unshift(true);return P}},filters:{enabled:function(P){return P.disabled===false&&P.type!=="hidden"},disabled:function(P){return P.disabled===true},checked:function(P){return P.checked===true},selected:function(P){P.parentNode.selectedIndex;return P.selected===true},parent:function(P){return !!P.firstChild},empty:function(P){return !P.firstChild},has:function(R,Q,P){return !!E(P[3],R).length},header:function(P){return/h\d/i.test(P.nodeName)},text:function(P){return"text"===P.type},radio:function(P){return"radio"===P.type},checkbox:function(P){return"checkbox"===P.type},file:function(P){return"file"===P.type},password:function(P){return"password"===P.type},submit:function(P){return"submit"===P.type},image:function(P){return"image"===P.type},reset:function(P){return"reset"===P.type},button:function(P){return"button"===P.type||P.nodeName.toUpperCase()==="BUTTON"},input:function(P){return/input|select|textarea|button/i.test(P.nodeName)}},setFilters:{first:function(Q,P){return P===0},last:function(R,Q,P,S){return Q===S.length-1},even:function(Q,P){return P%2===0},odd:function(Q,P){return P%2===1},lt:function(R,Q,P){return Q<P[3]-0},gt:function(R,Q,P){return Q>P[3]-0},nth:function(R,Q,P){return P[3]-0==Q},eq:function(R,Q,P){return P[3]-0==Q}},filter:{CHILD:function(P,S){var V=S[1],W=P.parentNode;var U="child"+W.childNodes.length;if(W&&(!W[U]||!P.nodeIndex)){var T=1;for(var Q=W.firstChild;Q;Q=Q.nextSibling){if(Q.nodeType==1){Q.nodeIndex=T++}}W[U]=T-1}if(V=="first"){return P.nodeIndex==1}else{if(V=="last"){return P.nodeIndex==W[U]}else{if(V=="only"){return W[U]==1}else{if(V=="nth"){var Y=false,R=S[2],X=S[3];if(R==1&&X==0){return true}if(R==0){if(P.nodeIndex==X){Y=true}}else{if((P.nodeIndex-X)%R==0&&(P.nodeIndex-X)/R>=0){Y=true}}return Y}}}}},PSEUDO:function(V,R,S,W){var Q=R[1],T=G.filters[Q];if(T){return T(V,S,R,W)}else{if(Q==="contains"){return(V.textContent||V.innerText||"").indexOf(R[3])>=0}else{if(Q==="not"){var U=R[3];for(var S=0,P=U.length;S<P;S++){if(U[S]===V){return false}}return true}}}},ID:function(Q,P){return Q.nodeType===1&&Q.getAttribute("id")===P},TAG:function(Q,P){return(P==="*"&&Q.nodeType===1)||Q.nodeName===P},CLASS:function(Q,P){return P.test(Q.className)},ATTR:function(T,R){var P=G.attrHandle[R[1]]?G.attrHandle[R[1]](T):T[R[1]]||T.getAttribute(R[1]),U=P+"",S=R[2],Q=R[4];return P==null?false:S==="="?U===Q:S==="*="?U.indexOf(Q)>=0:S==="~="?(" "+U+" ").indexOf(Q)>=0:!R[4]?P:S==="!="?U!=Q:S==="^="?U.indexOf(Q)===0:S==="$="?U.substr(U.length-Q.length)===Q:S==="|="?U===Q||U.substr(0,Q.length+1)===Q+"-":false},POS:function(T,Q,R,U){var P=Q[2],S=G.setFilters[P];if(S){return S(T,R,Q,U)}}}};for(var K in G.match){G.match[K]=RegExp(G.match[K].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var D=function(Q,P){Q=Array.prototype.slice.call(Q);if(P){P.push.apply(P,Q);return P}return Q};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(J){D=function(T,S){var Q=S||[];if(F.call(T)==="[object Array]"){Array.prototype.push.apply(Q,T)}else{if(typeof T.length==="number"){for(var R=0,P=T.length;R<P;R++){Q.push(T[R])}}else{for(var R=0;T[R];R++){Q.push(T[R])}}}return Q}}(function(){var Q=document.createElement("form"),R="script"+(new Date).getTime();Q.innerHTML="<input name='"+R+"'/>";var P=document.documentElement;P.insertBefore(Q,P.firstChild);if(!!document.getElementById(R)){G.find.ID=function(T,U){if(U.getElementById){var S=U.getElementById(T[1]);return S?S.id===T[1]||S.getAttributeNode&&S.getAttributeNode("id").nodeValue===T[1]?[S]:g:[]}};G.filter.ID=function(U,S){var T=U.getAttributeNode&&U.getAttributeNode("id");return U.nodeType===1&&T&&T.nodeValue===S}}P.removeChild(Q)})();(function(){var P=document.createElement("div");P.appendChild(document.createComment(""));if(P.getElementsByTagName("*").length>0){G.find.TAG=function(Q,U){var T=U.getElementsByTagName(Q[1]);if(Q[1]==="*"){var S=[];for(var R=0;T[R];R++){if(T[R].nodeType===1){S.push(T[R])}}T=S}return T}}P.innerHTML="<a href='#'></a>";if(P.firstChild.getAttribute("href")!=="#"){G.attrHandle.href=function(Q){return Q.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var P=E;E=function(T,S,Q,R){S=S||document;if(!R&&S.nodeType===9){try{return D(S.querySelectorAll(T),Q)}catch(U){}}return P(T,S,Q,R)};E.find=P.find;E.filter=P.filter;E.selectors=P.selectors;E.matches=P.matches})()}if(document.documentElement.getElementsByClassName){G.order.splice(1,0,"CLASS");G.find.CLASS=function(P,Q){return Q.getElementsByClassName(P[1])}}function L(Q,W,V,Z,X,Y){for(var T=0,R=Z.length;T<R;T++){var P=Z[T];if(P){P=P[Q];var U=false;while(P&&P.nodeType){var S=P[V];if(S){U=Z[S];break}if(P.nodeType===1&&!Y){P[V]=T}if(P.nodeName===W){U=P;break}P=P[Q]}Z[T]=U}}}function O(Q,V,U,Y,W,X){for(var S=0,R=Y.length;S<R;S++){var P=Y[S];if(P){P=P[Q];var T=false;while(P&&P.nodeType){if(P[U]){T=Y[P[U]];break}if(P.nodeType===1){if(!X){P[U]=S}if(typeof V!=="string"){if(P===V){T=true;break}}else{if(E.filter(V,[P]).length>0){T=P;break}}}P=P[Q]}Y[S]=T}}}var H=document.compareDocumentPosition?function(Q,P){return Q.compareDocumentPosition(P)&16}:function(Q,P){return Q!==P&&(Q.contains?Q.contains(P):true)};var M=function(P){return P.documentElement&&!P.body||P.tagName&&P.ownerDocument&&!P.ownerDocument.body};n.find=E;n.filter=E.filter;n.expr=E.selectors;n.expr[":"]=n.expr.filters;E.selectors.filters.hidden=function(P){return"hidden"===P.type||n.css(P,"display")==="none"||n.css(P,"visibility")==="hidden"};E.selectors.filters.visible=function(P){return"hidden"!==P.type&&n.css(P,"display")!=="none"&&n.css(P,"visibility")!=="hidden"};E.selectors.filters.animated=function(P){return n.grep(n.timers,function(Q){return P===Q.elem}).length};n.multiFilter=function(R,P,Q){if(Q){R=":not("+R+")"}return E.matches(R,P)};n.dir=function(R,Q){var P=[],S=R[Q];while(S&&S!=document){if(S.nodeType==1){P.push(S)}S=S[Q]}return P};n.nth=function(T,P,R,S){P=P||1;var Q=0;for(;T;T=T[R]){if(T.nodeType==1&&++Q==P){break}}return T};n.sibling=function(R,Q){var P=[];for(;R;R=R.nextSibling){if(R.nodeType==1&&R!=Q){P.push(R)}}return P};return;l.Sizzle=E})();n.event={add:function(H,E,G,J){if(H.nodeType==3||H.nodeType==8){return}if(H.setInterval&&H!=l){H=l}if(!G.guid){G.guid=this.guid++}if(J!==g){var F=G;G=this.proxy(F);G.data=J}var D=n.data(H,"events")||n.data(H,"events",{}),I=n.data(H,"handle")||n.data(H,"handle",function(){return typeof n!=="undefined"&&!n.event.triggered?n.event.handle.apply(arguments.callee.elem,arguments):g});I.elem=H;n.each(E.split(/\s+/),function(L,M){var N=M.split(".");M=N.shift();G.type=N.slice().sort().join(".");var K=D[M];if(n.event.specialAll[M]){n.event.specialAll[M].setup.call(H,J,N)}if(!K){K=D[M]={};if(!n.event.special[M]||n.event.special[M].setup.call(H,J,N)===false){if(H.addEventListener){H.addEventListener(M,I,false)}else{if(H.attachEvent){H.attachEvent("on"+M,I)}}}}K[G.guid]=G;n.event.global[M]=true});H=null},guid:1,global:{},remove:function(J,G,I){if(J.nodeType==3||J.nodeType==8){return}var F=n.data(J,"events"),E,D;if(F){if(G===g||(typeof G==="string"&&G.charAt(0)==".")){for(var H in F){this.remove(J,H+(G||""))}}else{if(G.type){I=G.handler;G=G.type}n.each(G.split(/\s+/),function(L,N){var P=N.split(".");N=P.shift();var M=RegExp("(^|\\.)"+P.slice().sort().join(".*\\.")+"(\\.|$)");if(F[N]){if(I){delete F[N][I.guid]}else{for(var O in F[N]){if(M.test(F[N][O].type)){delete F[N][O]}}}if(n.event.specialAll[N]){n.event.specialAll[N].teardown.call(J,P)}for(E in F[N]){break}if(!E){if(!n.event.special[N]||n.event.special[N].teardown.call(J,P)===false){if(J.removeEventListener){J.removeEventListener(N,n.data(J,"handle"),false)}else{if(J.detachEvent){J.detachEvent("on"+N,n.data(J,"handle"))}}}E=null;delete F[N]}}})}for(E in F){break}if(!E){var K=n.data(J,"handle");if(K){K.elem=null}n.removeData(J,"events");n.removeData(J,"handle")}}},trigger:function(H,J,G,D){var F=H.type||H;if(!D){H=typeof H==="object"?H[h]?H:n.extend(n.Event(F),H):n.Event(F);if(F.indexOf("!")>=0){H.type=F=F.slice(0,-1);H.exclusive=true}if(!G){H.stopPropagation();if(this.global[F]){n.each(n.cache,function(){if(this.events&&this.events[F]){n.event.trigger(H,J,this.handle.elem)}})}}if(!G||G.nodeType==3||G.nodeType==8){return g}H.result=g;H.target=G;J=n.makeArray(J);J.unshift(H)}H.currentTarget=G;var I=n.data(G,"handle");if(I){I.apply(G,J)}if((!G[F]||(n.nodeName(G,"a")&&F=="click"))&&G["on"+F]&&G["on"+F].apply(G,J)===false){H.result=false}if(!D&&G[F]&&!H.isDefaultPrevented()&&!(n.nodeName(G,"a")&&F=="click")){this.triggered=true;try{G[F]()}catch(K){}}this.triggered=false;if(!H.isPropagationStopped()){var E=G.parentNode||G.ownerDocument;if(E){n.event.trigger(H,J,E,true)}}},handle:function(J){var I,D;J=arguments[0]=n.event.fix(J||l.event);var K=J.type.split(".");J.type=K.shift();I=!K.length&&!J.exclusive;var H=RegExp("(^|\\.)"+K.slice().sort().join(".*\\.")+"(\\.|$)");D=(n.data(this,"events")||{})[J.type];for(var F in D){var G=D[F];if(I||H.test(G.type)){J.handler=G;J.data=G.data;var E=G.apply(this,arguments);if(E!==g){J.result=E;if(E===false){J.preventDefault();J.stopPropagation()}}if(J.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(G){if(G[h]){return G}var E=G;G=n.Event(E);for(var F=this.props.length,I;F;){I=this.props[--F];G[I]=E[I]}if(!G.target){G.target=G.srcElement||document}if(G.target.nodeType==3){G.target=G.target.parentNode}if(!G.relatedTarget&&G.fromElement){G.relatedTarget=G.fromElement==G.target?G.toElement:G.fromElement}if(G.pageX==null&&G.clientX!=null){var H=document.documentElement,D=document.body;G.pageX=G.clientX+(H&&H.scrollLeft||D&&D.scrollLeft||0)-(H.clientLeft||0);G.pageY=G.clientY+(H&&H.scrollTop||D&&D.scrollTop||0)-(H.clientTop||0)}if(!G.which&&((G.charCode||G.charCode===0)?G.charCode:G.keyCode)){G.which=G.charCode||G.keyCode}if(!G.metaKey&&G.ctrlKey){G.metaKey=G.ctrlKey}if(!G.which&&G.button){G.which=(G.button&1?1:(G.button&2?3:(G.button&4?2:0)))}return G},proxy:function(E,D){D=D||function(){return E.apply(this,arguments)};D.guid=E.guid=E.guid||D.guid||this.guid++;return D},special:{ready:{setup:A,teardown:function(){}}},specialAll:{live:{setup:function(D,E){n.event.add(this,E[0],c)},teardown:function(F){if(F.length){var D=0,E=RegExp("(^|\\.)"+F[0]+"(\\.|$)");n.each((n.data(this,"events").live||{}),function(){if(E.test(this.type)){D++}});if(D<1){n.event.remove(this,F[0],c)}}}}}};n.Event=function(D){if(!this.preventDefault){return new n.Event(D)}if(D&&D.type){this.originalEvent=D;this.type=D.type;this.timeStamp=D.timeStamp}else{this.type=D}if(!this.timeStamp){this.timeStamp=e()}this[h]=true};function k(){return false}function t(){return true}n.Event.prototype={preventDefault:function(){this.isDefaultPrevented=t;var D=this.originalEvent;if(!D){return}if(D.preventDefault){D.preventDefault()}D.returnValue=false},stopPropagation:function(){this.isPropagationStopped=t;var D=this.originalEvent;if(!D){return}if(D.stopPropagation){D.stopPropagation()}D.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=t;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(E){var D=E.relatedTarget;while(D&&D!=this){try{D=D.parentNode}catch(F){D=this}}if(D!=this){E.type=E.data;n.event.handle.apply(this,arguments)}};n.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(E,D){n.event.special[D]={setup:function(){n.event.add(this,E,a,D)},teardown:function(){n.event.remove(this,E,a)}}});n.fn.extend({bind:function(E,F,D){return E=="unload"?this.one(E,F,D):this.each(function(){n.event.add(this,E,D||F,D&&F)})},one:function(F,G,E){var D=n.event.proxy(E||G,function(H){n(this).unbind(H,D);return(E||G).apply(this,arguments)});return this.each(function(){n.event.add(this,F,D,E&&G)})},unbind:function(E,D){return this.each(function(){n.event.remove(this,E,D)})},trigger:function(D,E){return this.each(function(){n.event.trigger(D,E,this)})},triggerHandler:function(D,F){if(this[0]){var E=n.Event(D);E.preventDefault();E.stopPropagation();n.event.trigger(E,F,this[0]);return E.result}},toggle:function(F){var D=arguments,E=1;while(E<D.length){n.event.proxy(F,D[E++])}return this.click(n.event.proxy(F,function(G){this.lastToggle=(this.lastToggle||0)%E;G.preventDefault();return D[this.lastToggle++].apply(this,arguments)||false}))},hover:function(D,E){return this.mouseenter(D).mouseleave(E)},ready:function(D){A();if(n.isReady){D.call(document,n)}else{n.readyList.push(D)}return this},live:function(F,E){var D=n.event.proxy(E);D.guid+=this.selector+F;n(document).bind(i(F,this.selector),this.selector,D);return this},die:function(E,D){n(document).unbind(i(E,this.selector),D?{guid:D.guid+this.selector+E}:null);return this}});function c(G){var D=RegExp("(^|\\.)"+G.type+"(\\.|$)"),F=true,E=[];n.each(n.data(this,"events").live||[],function(H,I){if(D.test(I.type)){var J=n(G.target).closest(I.data)[0];if(J){E.push({elem:J,fn:I})}}});n.each(E,function(){if(!G.isImmediatePropagationStopped()&&this.fn.call(this.elem,G,this.fn.data)===false){F=false}});return F}function i(E,D){return["live",E,D.replace(/\./g,"`").replace(/ /g,"|")].join(".")}n.extend({isReady:false,readyList:[],ready:function(){if(!n.isReady){n.isReady=true;if(n.readyList){n.each(n.readyList,function(){this.call(document,n)});n.readyList=null}n(document).triggerHandler("ready")}}});var w=false;function A(){if(w){return}w=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);n.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);n.ready()}});if(document.documentElement.doScroll&&!l.frameElement){(function(){if(n.isReady){return}try{document.documentElement.doScroll("left")}catch(D){setTimeout(arguments.callee,0);return}n.ready()})()}}}n.event.add(l,"load",n.ready)}n.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(E,D){n.fn[D]=function(F){return F?this.bind(D,F):this.trigger(D)}});n(l).bind("unload",function(){for(var D in n.cache){if(D!=1&&n.cache[D].handle){n.event.remove(n.cache[D].handle.elem)}}});(function(){n.support={};var E=document.documentElement,F=document.createElement("script"),J=document.createElement("div"),I="script"+(new Date).getTime();J.style.display="none";J.innerHTML='   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var G=J.getElementsByTagName("*"),D=J.getElementsByTagName("a")[0];if(!G||!G.length||!D){return}n.support={leadingWhitespace:J.firstChild.nodeType==3,tbody:!J.getElementsByTagName("tbody").length,objectAll:!!J.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!J.getElementsByTagName("link").length,style:/red/.test(D.getAttribute("style")),hrefNormalized:D.getAttribute("href")==="/a",opacity:D.style.opacity==="0.5",cssFloat:!!D.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};F.type="text/javascript";try{F.appendChild(document.createTextNode("window."+I+"=1;"))}catch(H){}E.insertBefore(F,E.firstChild);if(l[I]){n.support.scriptEval=true;delete l[I]}E.removeChild(F);if(J.attachEvent&&J.fireEvent){J.attachEvent("onclick",function(){n.support.noCloneEvent=false;J.detachEvent("onclick",arguments.callee)});J.cloneNode(true).fireEvent("onclick")}n(function(){var K=document.createElement("div");K.style.width="1px";K.style.paddingLeft="1px";document.body.appendChild(K);n.boxModel=n.support.boxModel=K.offsetWidth===2;document.body.removeChild(K)})})();var v=n.support.cssFloat?"cssFloat":"styleFloat";n.props={"for":"htmlFor","class":"className","float":v,cssFloat:v,styleFloat:v,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};n.fn.extend({_load:n.fn.load,load:function(F,I,J){if(typeof F!=="string"){return this._load(F)}var H=F.indexOf(" ");if(H>=0){var D=F.slice(H,F.length);F=F.slice(0,H)}var G="GET";if(I){if(n.isFunction(I)){J=I;I=null}else{if(typeof I==="object"){I=n.param(I);G="POST"}}}var E=this;n.ajax({url:F,type:G,dataType:"html",data:I,complete:function(L,K){if(K=="success"||K=="notmodified"){E.html(D?n("<div/>").append(L.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(D):L.responseText)}if(J){E.each(J,[L.responseText,K,L])}}});return this},serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?n.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type))}).map(function(D,E){var F=n(this).val();return F==null?null:n.isArray(F)?n.map(F,function(H,G){return{name:E.name,value:H}}):{name:E.name,value:F}}).get()}});n.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(D,E){n.fn[E]=function(F){return this.bind(E,F)}});var q=e();n.extend({get:function(D,F,G,E){if(n.isFunction(F)){G=F;F=null}return n.ajax({type:"GET",url:D,data:F,success:G,dataType:E})},getScript:function(D,E){return n.get(D,null,E,"script")},getJSON:function(D,E,F){return n.get(D,E,F,"json")},post:function(D,F,G,E){if(n.isFunction(F)){G=F;F={}}return n.ajax({type:"POST",url:D,data:F,success:G,dataType:E})},ajaxSetup:function(D){n.extend(n.ajaxSettings,D)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(L){L=n.extend(true,L,n.extend(true,{},n.ajaxSettings,L));var V,E=/=\?(&|$)/g,Q,U,F=L.type.toUpperCase();if(L.data&&L.processData&&typeof L.data!=="string"){L.data=n.param(L.data)}if(L.dataType=="jsonp"){if(F=="GET"){if(!L.url.match(E)){L.url+=(L.url.match(/\?/)?"&":"?")+(L.jsonp||"callback")+"=?"}}else{if(!L.data||!L.data.match(E)){L.data=(L.data?L.data+"&":"")+(L.jsonp||"callback")+"=?"}}L.dataType="json"}if(L.dataType=="json"&&(L.data&&L.data.match(E)||L.url.match(E))){V="jsonp"+q++;if(L.data){L.data=(L.data+"").replace(E,"="+V+"$1")}L.url=L.url.replace(E,"="+V+"$1");L.dataType="script";l[V]=function(W){U=W;H();K();l[V]=g;try{delete l[V]}catch(X){}if(G){G.removeChild(S)}}}if(L.dataType=="script"&&L.cache==null){L.cache=false}if(L.cache===false&&F=="GET"){var D=e();var T=L.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+D+"$2");L.url=T+((T==L.url)?(L.url.match(/\?/)?"&":"?")+"_="+D:"")}if(L.data&&F=="GET"){L.url+=(L.url.match(/\?/)?"&":"?")+L.data;L.data=null}if(L.global&&!n.active++){n.event.trigger("ajaxStart")}var P=/^(\w+:)?\/\/([^\/?#]+)/.exec(L.url);if(L.dataType=="script"&&F=="GET"&&P&&(P[1]&&P[1]!=location.protocol||P[2]!=location.host)){var G=document.getElementsByTagName("head")[0];var S=document.createElement("script");S.src=L.url;if(L.scriptCharset){S.charset=L.scriptCharset}if(!V){var N=false;S.onload=S.onreadystatechange=function(){if(!N&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){N=true;H();K();G.removeChild(S)}}}G.appendChild(S);return g}var J=false;var I=L.xhr();if(L.username){I.open(F,L.url,L.async,L.username,L.password)}else{I.open(F,L.url,L.async)}try{if(L.data){I.setRequestHeader("Content-Type",L.contentType)}if(L.ifModified){I.setRequestHeader("If-Modified-Since",n.lastModified[L.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}I.setRequestHeader("X-Requested-With","XMLHttpRequest");I.setRequestHeader("Accept",L.dataType&&L.accepts[L.dataType]?L.accepts[L.dataType]+", */*":L.accepts._default)}catch(R){}if(L.beforeSend&&L.beforeSend(I,L)===false){if(L.global&&!--n.active){n.event.trigger("ajaxStop")}I.abort();return false}if(L.global){n.event.trigger("ajaxSend",[I,L])}var M=function(W){if(I.readyState==0){if(O){clearInterval(O);O=null;if(L.global&&!--n.active){n.event.trigger("ajaxStop")}}}else{if(!J&&I&&(I.readyState==4||W=="timeout")){J=true;if(O){clearInterval(O);O=null}Q=W=="timeout"?"timeout":!n.httpSuccess(I)?"error":L.ifModified&&n.httpNotModified(I,L.url)?"notmodified":"success";if(Q=="success"){try{U=n.httpData(I,L.dataType,L)}catch(Y){Q="parsererror"}}if(Q=="success"){var X;try{X=I.getResponseHeader("Last-Modified")}catch(Y){}if(L.ifModified&&X){n.lastModified[L.url]=X}if(!V){H()}}else{n.handleError(L,I,Q)}K();if(L.async){I=null}}}};if(L.async){var O=setInterval(M,13);if(L.timeout>0){setTimeout(function(){if(I){if(!J){M("timeout")}if(I){I.abort()}}},L.timeout)}}try{I.send(L.data)}catch(R){n.handleError(L,I,null,R)}if(!L.async){M()}function H(){if(L.success){L.success(U,Q)}if(L.global){n.event.trigger("ajaxSuccess",[I,L])}}function K(){if(L.complete){L.complete(I,Q)}if(L.global){n.event.trigger("ajaxComplete",[I,L])}if(L.global&&!--n.active){n.event.trigger("ajaxStop")}}return I},handleError:function(E,G,D,F){if(E.error){E.error(G,D,F)}if(E.global){n.event.trigger("ajaxError",[G,E,F])}},active:0,httpSuccess:function(E){try{return !E.status&&location.protocol=="file:"||(E.status>=200&&E.status<300)||E.status==304||E.status==1223}catch(D){}return false},httpNotModified:function(F,D){try{var G=F.getResponseHeader("Last-Modified");return F.status==304||G==n.lastModified[D]}catch(E){}return false},httpData:function(I,G,F){var E=I.getResponseHeader("content-type"),D=G=="xml"||!G&&E&&E.indexOf("xml")>=0,H=D?I.responseXML:I.responseText;if(D&&H.documentElement.tagName=="parsererror"){throw"parsererror"}if(F&&F.dataFilter){H=F.dataFilter(H,G)}if(typeof H==="string"){if(G=="script"){n.globalEval(H)}if(G=="json"){H=l["eval"]("("+H+")")}}return H},param:function(D){var F=[];function G(H,I){F[F.length]=encodeURIComponent(H)+"="+encodeURIComponent(I)}if(n.isArray(D)||D.jquery){n.each(D,function(){G(this.name,this.value)})}else{for(var E in D){if(n.isArray(D[E])){n.each(D[E],function(){G(E,this)})}else{G(E,n.isFunction(D[E])?D[E]():D[E])}}}return F.join("&").replace(/%20/g,"+")}});var m={},d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function s(E,D){var F={};n.each(d.concat.apply([],d.slice(0,D)),function(){F[this]=E});return F}n.fn.extend({show:function(I,K){if(I){return this.animate(s("show",3),I,K)}else{for(var G=0,E=this.length;G<E;G++){var D=n.data(this[G],"olddisplay");this[G].style.display=D||"";if(n.css(this[G],"display")==="none"){var F=this[G].tagName,J;if(m[F]){J=m[F]}else{var H=n("<"+F+" />").appendTo("body");J=H.css("display");if(J==="none"){J="block"}H.remove();m[F]=J}this[G].style.display=n.data(this[G],"olddisplay",J)}}return this}},hide:function(G,H){if(G){return this.animate(s("hide",3),G,H)}else{for(var F=0,E=this.length;F<E;F++){var D=n.data(this[F],"olddisplay");if(!D&&D!=="none"){n.data(this[F],"olddisplay",n.css(this[F],"display"))}this[F].style.display="none"}return this}},_toggle:n.fn.toggle,toggle:function(F,E){var D=typeof F==="boolean";return n.isFunction(F)&&n.isFunction(E)?this._toggle.apply(this,arguments):F==null||D?this.each(function(){var G=D?F:n(this).is(":hidden");n(this)[G?"show":"hide"]()}):this.animate(s("toggle",3),F,E)},fadeTo:function(D,F,E){return this.animate({opacity:F},D,E)},animate:function(H,E,G,F){var D=n.speed(E,G,F);return this[D.queue===false?"each":"queue"](function(){var J=n.extend({},D),L,K=this.nodeType==1&&n(this).is(":hidden"),I=this;for(L in H){if(H[L]=="hide"&&K||H[L]=="show"&&!K){return J.complete.call(this)}if((L=="height"||L=="width")&&this.style){J.display=n.css(this,"display");J.overflow=this.style.overflow}}if(J.overflow!=null){this.style.overflow="hidden"}J.curAnim=n.extend({},H);n.each(H,function(N,R){var Q=new n.fx(I,J,N);if(/toggle|show|hide/.test(R)){Q[R=="toggle"?K?"show":"hide":R](H)}else{var P=R.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),S=Q.cur(true)||0;if(P){var M=parseFloat(P[2]),O=P[3]||"px";if(O!="px"){I.style[N]=(M||1)+O;S=((M||1)/Q.cur(true))*S;I.style[N]=S+O}if(P[1]){M=((P[1]=="-="?-1:1)*M)+S}Q.custom(S,M,O)}else{Q.custom(S,R,"")}}});return true})},stop:function(E,D){var F=n.timers;if(E){this.queue([])}this.each(function(){for(var G=F.length-1;G>=0;G--){if(F[G].elem==this){if(D){F[G](true)}F.splice(G,1)}}});if(!D){this.dequeue()}return this}});n.each({slideDown:s("show",1),slideUp:s("hide",1),slideToggle:s("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(D,E){n.fn[D]=function(F,G){return this.animate(E,F,G)}});n.extend({speed:function(F,G,E){var D=typeof F==="object"?F:{complete:E||!E&&G||n.isFunction(F)&&F,duration:F,easing:E&&G||G&&!n.isFunction(G)&&G};D.duration=n.fx.off?0:typeof D.duration==="number"?D.duration:n.fx.speeds[D.duration]||n.fx.speeds._default;D.old=D.complete;D.complete=function(){if(D.queue!==false){n(this).dequeue()}if(n.isFunction(D.old)){D.old.call(this)}};return D},easing:{linear:function(F,G,D,E){return D+E*F},swing:function(F,G,D,E){return((-Math.cos(F*Math.PI)/2)+0.5)*E+D}},timers:[],timerId:null,fx:function(E,D,F){this.options=D;this.elem=E;this.prop=F;if(!D.orig){D.orig={}}}});n.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(n.fx.step[this.prop]||n.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(E){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var D=parseFloat(n.css(this.elem,this.prop,E));return D&&D>-10000?D:parseFloat(n.curCSS(this.elem,this.prop))||0},custom:function(H,G,F){this.startTime=e();this.start=H;this.end=G;this.unit=F||this.unit||"px";this.now=this.start;this.pos=this.state=0;var D=this;function E(I){return D.step(I)}E.elem=this.elem;n.timers.push(E);if(E()&&n.timerId==null){n.timerId=setInterval(function(){var J=n.timers;for(var I=0;I<J.length;I++){if(!J[I]()){J.splice(I--,1)}}if(!J.length){clearInterval(n.timerId);n.timerId=null}},13)}},show:function(){this.options.orig[this.prop]=n.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());n(this.elem).show()},hide:function(){this.options.orig[this.prop]=n.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(G){var F=e();if(G||F>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var D=true;for(var E in this.options.curAnim){if(this.options.curAnim[E]!==true){D=false}}if(D){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(n.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){n(this.elem).hide()}if(this.options.hide||this.options.show){for(var H in this.options.curAnim){n.attr(this.elem.style,H,this.options.orig[H])}}}if(D){this.options.complete.call(this.elem)}return false}else{var I=F-this.startTime;this.state=I/this.options.duration;this.pos=n.easing[this.options.easing||(n.easing.swing?"swing":"linear")](this.state,I,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};n.extend(n.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(D){n.attr(D.elem.style,"opacity",D.now)},_default:function(D){if(D.elem.style&&D.elem.style[D.prop]!=null){D.elem.style[D.prop]=D.now+D.unit}else{D.elem[D.prop]=D.now}}}});if(document.documentElement.getBoundingClientRect){n.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return n.offset.bodyOffset(this[0])}var F=this[0].getBoundingClientRect(),I=this[0].ownerDocument,E=I.body,D=I.documentElement,K=D.clientTop||E.clientTop||0,J=D.clientLeft||E.clientLeft||0,H=F.top+(self.pageYOffset||n.boxModel&&D.scrollTop||E.scrollTop)-K,G=F.left+(self.pageXOffset||n.boxModel&&D.scrollLeft||E.scrollLeft)-J;return{top:H,left:G}}}else{n.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return n.offset.bodyOffset(this[0])}n.offset.initialized||n.offset.initialize();var I=this[0],F=I.offsetParent,E=I,N=I.ownerDocument,L,G=N.documentElement,J=N.body,K=N.defaultView,D=K.getComputedStyle(I,null),M=I.offsetTop,H=I.offsetLeft;while((I=I.parentNode)&&I!==J&&I!==G){L=K.getComputedStyle(I,null);M-=I.scrollTop,H-=I.scrollLeft;if(I===F){M+=I.offsetTop,H+=I.offsetLeft;if(n.offset.doesNotAddBorder&&!(n.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(I.tagName))){M+=parseInt(L.borderTopWidth,10)||0,H+=parseInt(L.borderLeftWidth,10)||0}E=F,F=I.offsetParent}if(n.offset.subtractsBorderForOverflowNotVisible&&L.overflow!=="visible"){M+=parseInt(L.borderTopWidth,10)||0,H+=parseInt(L.borderLeftWidth,10)||0}D=L}if(D.position==="relative"||D.position==="static"){M+=J.offsetTop,H+=J.offsetLeft}if(D.position==="fixed"){M+=Math.max(G.scrollTop,J.scrollTop),H+=Math.max(G.scrollLeft,J.scrollLeft)}return{top:M,left:H}}}n.offset={initialize:function(){if(this.initialized){return}var K=document.body,E=document.createElement("div"),G,F,M,H,L,D,I=K.style.marginTop,J='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"cellpadding="0"cellspacing="0"><tr><td></td></tr></table>';L={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(D in L){E.style[D]=L[D]}E.innerHTML=J;K.insertBefore(E,K.firstChild);G=E.firstChild,F=G.firstChild,H=G.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(F.offsetTop!==5);this.doesAddBorderForTableAndCells=(H.offsetTop===5);G.style.overflow="hidden",G.style.position="relative";this.subtractsBorderForOverflowNotVisible=(F.offsetTop===-5);K.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(K.offsetTop===0);K.style.marginTop=I;K.removeChild(E);this.initialized=true},bodyOffset:function(D){n.offset.initialized||n.offset.initialize();var F=D.offsetTop,E=D.offsetLeft;if(n.offset.doesNotIncludeMarginInBodyOffset){F+=parseInt(n.curCSS(D,"marginTop",true),10)||0,E+=parseInt(n.curCSS(D,"marginLeft",true),10)||0}return{top:F,left:E}}};n.fn.extend({position:function(){var H=0,G=0,E;if(this[0]){var F=this.offsetParent(),I=this.offset(),D=/^body|html$/i.test(F[0].tagName)?{top:0,left:0}:F.offset();I.top-=j(this,"marginTop");I.left-=j(this,"marginLeft");D.top+=j(F,"borderTopWidth");D.left+=j(F,"borderLeftWidth");E={top:I.top-D.top,left:I.left-D.left}}return E},offsetParent:function(){var D=this[0].offsetParent||document.body;while(D&&(!/^body|html$/i.test(D.tagName)&&n.css(D,"position")=="static")){D=D.offsetParent}return n(D)}});n.each(["Left","Top"],function(E,D){var F="scroll"+D;n.fn[F]=function(G){if(!this[0]){return null}return G!==g?this.each(function(){this==l||this==document?l.scrollTo(!E?G:n(l).scrollLeft(),E?G:n(l).scrollTop()):this[F]=G}):this[0]==l||this[0]==document?self[E?"pageYOffset":"pageXOffset"]||n.boxModel&&document.documentElement[F]||document.body[F]:this[0][F]}});n.each(["Height","Width"],function(G,E){var D=G?"Left":"Top",F=G?"Right":"Bottom";n.fn["inner"+E]=function(){return this[E.toLowerCase()]()+j(this,"padding"+D)+j(this,"padding"+F)};n.fn["outer"+E]=function(I){return this["inner"+E]()+j(this,"border"+D+"Width")+j(this,"border"+F+"Width")+(I?j(this,"margin"+D)+j(this,"margin"+F):0)};var H=E.toLowerCase();n.fn[H]=function(I){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+E]||document.body["client"+E]:this[0]==document?Math.max(document.documentElement["client"+E],document.body["scroll"+E],document.documentElement["scroll"+E],document.body["offset"+E],document.documentElement["offset"+E]):I===g?(this.length?n.css(this[0],H):null):this.css(H,typeof I==="string"?I:I+"px")}})})(); 
    422820jQuery.noConflict(); 
  • trunk/wp-includes/script-loader.php

    r10357 r10360  
    114114    $scripts->add( 'cropper', '/wp-includes/js/crop/cropper.js', array('scriptaculous-dragdrop'), '20070118'); 
    115115 
    116     $scripts->add( 'jquery', '/wp-includes/js/jquery/jquery.js', false, '1.3b2'); 
     116    $scripts->add( 'jquery', '/wp-includes/js/jquery/jquery.js', false, '1.3'); 
    117117 
    118118    $scripts->add( 'jquery-ui-core', '/wp-includes/js/jquery/ui.core.js', array('jquery'), '1.5.2' ); 
Note: See TracChangeset for help on using the changeset viewer.