Annotation of embedaddon/strongswan/src/manager/templates/static/jquery.js, revision 1.1
1.1 ! misho 1: (function(){
! 2: /*
! 3: * jQuery 1.2 - New Wave Javascript
! 4: *
! 5: * Copyright (c) 2007 John Resig (jquery.com)
! 6: * Dual licensed under the MIT (MIT-LICENSE.txt)
! 7: * and GPL (GPL-LICENSE.txt) licenses.
! 8: *
! 9: * $Date: 2007-09-10 15:45:49 -0400 (Mon, 10 Sep 2007) $
! 10: * $Rev: 3219 $
! 11: */
! 12:
! 13: // Map over jQuery in case of overwrite
! 14: if ( typeof jQuery != "undefined" )
! 15: var _jQuery = jQuery;
! 16:
! 17: var jQuery = window.jQuery = function(a,c) {
! 18: // If the context is global, return a new object
! 19: if ( window == this || !this.init )
! 20: return new jQuery(a,c);
! 21:
! 22: return this.init(a,c);
! 23: };
! 24:
! 25: // Map over the $ in case of overwrite
! 26: if ( typeof $ != "undefined" )
! 27: var _$ = $;
! 28:
! 29: // Map the jQuery namespace to the '$' one
! 30: window.$ = jQuery;
! 31:
! 32: var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/;
! 33:
! 34: jQuery.fn = jQuery.prototype = {
! 35: init: function(a,c) {
! 36: // Make sure that a selection was provided
! 37: a = a || document;
! 38:
! 39: // Handle HTML strings
! 40: if ( typeof a == "string" ) {
! 41: var m = quickExpr.exec(a);
! 42: if ( m && (m[1] || !c) ) {
! 43: // HANDLE: $(html) -> $(array)
! 44: if ( m[1] )
! 45: a = jQuery.clean( [ m[1] ], c );
! 46:
! 47: // HANDLE: $("#id")
! 48: else {
! 49: var tmp = document.getElementById( m[3] );
! 50: if ( tmp )
! 51: // Handle the case where IE and Opera return items
! 52: // by name instead of ID
! 53: if ( tmp.id != m[3] )
! 54: return jQuery().find( a );
! 55: else {
! 56: this[0] = tmp;
! 57: this.length = 1;
! 58: return this;
! 59: }
! 60: else
! 61: a = [];
! 62: }
! 63:
! 64: // HANDLE: $(expr)
! 65: } else
! 66: return new jQuery( c ).find( a );
! 67:
! 68: // HANDLE: $(function)
! 69: // Shortcut for document ready
! 70: } else if ( jQuery.isFunction(a) )
! 71: return new jQuery(document)[ jQuery.fn.ready ? "ready" : "load" ]( a );
! 72:
! 73: return this.setArray(
! 74: // HANDLE: $(array)
! 75: a.constructor == Array && a ||
! 76:
! 77: // HANDLE: $(arraylike)
! 78: // Watch for when an array-like object is passed as the selector
! 79: (a.jquery || a.length && a != window && !a.nodeType && a[0] != undefined && a[0].nodeType) && jQuery.makeArray( a ) ||
! 80:
! 81: // HANDLE: $(*)
! 82: [ a ] );
! 83: },
! 84:
! 85: jquery: "1.2",
! 86:
! 87: size: function() {
! 88: return this.length;
! 89: },
! 90:
! 91: length: 0,
! 92:
! 93: get: function( num ) {
! 94: return num == undefined ?
! 95:
! 96: // Return a 'clean' array
! 97: jQuery.makeArray( this ) :
! 98:
! 99: // Return just the object
! 100: this[num];
! 101: },
! 102:
! 103: pushStack: function( a ) {
! 104: var ret = jQuery(a);
! 105: ret.prevObject = this;
! 106: return ret;
! 107: },
! 108:
! 109: setArray: function( a ) {
! 110: this.length = 0;
! 111: Array.prototype.push.apply( this, a );
! 112: return this;
! 113: },
! 114:
! 115: each: function( fn, args ) {
! 116: return jQuery.each( this, fn, args );
! 117: },
! 118:
! 119: index: function( obj ) {
! 120: var pos = -1;
! 121: this.each(function(i){
! 122: if ( this == obj ) pos = i;
! 123: });
! 124: return pos;
! 125: },
! 126:
! 127: attr: function( key, value, type ) {
! 128: var obj = key;
! 129:
! 130: // Look for the case where we're accessing a style value
! 131: if ( key.constructor == String )
! 132: if ( value == undefined )
! 133: return this.length && jQuery[ type || "attr" ]( this[0], key ) || undefined;
! 134: else {
! 135: obj = {};
! 136: obj[ key ] = value;
! 137: }
! 138:
! 139: // Check to see if we're setting style values
! 140: return this.each(function(index){
! 141: // Set all the styles
! 142: for ( var prop in obj )
! 143: jQuery.attr(
! 144: type ? this.style : this,
! 145: prop, jQuery.prop(this, obj[prop], type, index, prop)
! 146: );
! 147: });
! 148: },
! 149:
! 150: css: function( key, value ) {
! 151: return this.attr( key, value, "curCSS" );
! 152: },
! 153:
! 154: text: function(e) {
! 155: if ( typeof e != "object" && e != null )
! 156: return this.empty().append( document.createTextNode( e ) );
! 157:
! 158: var t = "";
! 159: jQuery.each( e || this, function(){
! 160: jQuery.each( this.childNodes, function(){
! 161: if ( this.nodeType != 8 )
! 162: t += this.nodeType != 1 ?
! 163: this.nodeValue : jQuery.fn.text([ this ]);
! 164: });
! 165: });
! 166: return t;
! 167: },
! 168:
! 169: wrapAll: function(html) {
! 170: if ( this[0] )
! 171: // The elements to wrap the target around
! 172: jQuery(html, this[0].ownerDocument)
! 173: .clone()
! 174: .insertBefore(this[0])
! 175: .map(function(){
! 176: var elem = this;
! 177: while ( elem.firstChild )
! 178: elem = elem.firstChild;
! 179: return elem;
! 180: })
! 181: .append(this);
! 182:
! 183: return this;
! 184: },
! 185:
! 186: wrapInner: function(html) {
! 187: return this.each(function(){
! 188: jQuery(this).contents().wrapAll(html);
! 189: });
! 190: },
! 191:
! 192: wrap: function(html) {
! 193: return this.each(function(){
! 194: jQuery(this).wrapAll(html);
! 195: });
! 196: },
! 197:
! 198: append: function() {
! 199: return this.domManip(arguments, true, 1, function(a){
! 200: this.appendChild( a );
! 201: });
! 202: },
! 203:
! 204: prepend: function() {
! 205: return this.domManip(arguments, true, -1, function(a){
! 206: this.insertBefore( a, this.firstChild );
! 207: });
! 208: },
! 209:
! 210: before: function() {
! 211: return this.domManip(arguments, false, 1, function(a){
! 212: this.parentNode.insertBefore( a, this );
! 213: });
! 214: },
! 215:
! 216: after: function() {
! 217: return this.domManip(arguments, false, -1, function(a){
! 218: this.parentNode.insertBefore( a, this.nextSibling );
! 219: });
! 220: },
! 221:
! 222: end: function() {
! 223: return this.prevObject || jQuery([]);
! 224: },
! 225:
! 226: find: function(t) {
! 227: var data = jQuery.map(this, function(a){ return jQuery.find(t,a); });
! 228: return this.pushStack( /[^+>] [^+>]/.test( t ) || t.indexOf("..") > -1 ?
! 229: jQuery.unique( data ) : data );
! 230: },
! 231:
! 232: clone: function(events) {
! 233: // Do the clone
! 234: var ret = this.map(function(){
! 235: return this.outerHTML ? jQuery(this.outerHTML)[0] : this.cloneNode(true);
! 236: });
! 237:
! 238: if (events === true) {
! 239: var clone = ret.find("*").andSelf();
! 240:
! 241: this.find("*").andSelf().each(function(i) {
! 242: var events = jQuery.data(this, "events");
! 243: for ( var type in events )
! 244: for ( var handler in events[type] )
! 245: jQuery.event.add(clone[i], type, events[type][handler], events[type][handler].data);
! 246: });
! 247: }
! 248:
! 249: // Return the cloned set
! 250: return ret;
! 251: },
! 252:
! 253: filter: function(t) {
! 254: return this.pushStack(
! 255: jQuery.isFunction( t ) &&
! 256: jQuery.grep(this, function(el, index){
! 257: return t.apply(el, [index]);
! 258: }) ||
! 259:
! 260: jQuery.multiFilter(t,this) );
! 261: },
! 262:
! 263: not: function(t) {
! 264: return this.pushStack(
! 265: t.constructor == String &&
! 266: jQuery.multiFilter(t, this, true) ||
! 267:
! 268: jQuery.grep(this, function(a) {
! 269: return ( t.constructor == Array || t.jquery )
! 270: ? jQuery.inArray( a, t ) < 0
! 271: : a != t;
! 272: })
! 273: );
! 274: },
! 275:
! 276: add: function(t) {
! 277: return this.pushStack( jQuery.merge(
! 278: this.get(),
! 279: t.constructor == String ?
! 280: jQuery(t).get() :
! 281: t.length != undefined && (!t.nodeName || t.nodeName == "FORM") ?
! 282: t : [t] )
! 283: );
! 284: },
! 285:
! 286: is: function(expr) {
! 287: return expr ? jQuery.multiFilter(expr,this).length > 0 : false;
! 288: },
! 289:
! 290: hasClass: function(expr) {
! 291: return this.is("." + expr);
! 292: },
! 293:
! 294: val: function( val ) {
! 295: if ( val == undefined ) {
! 296: if ( this.length ) {
! 297: var elem = this[0];
! 298:
! 299: // We need to handle select boxes special
! 300: if ( jQuery.nodeName(elem, "select") ) {
! 301: var index = elem.selectedIndex,
! 302: a = [],
! 303: options = elem.options,
! 304: one = elem.type == "select-one";
! 305:
! 306: // Nothing was selected
! 307: if ( index < 0 )
! 308: return null;
! 309:
! 310: // Loop through all the selected options
! 311: for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
! 312: var option = options[i];
! 313: if ( option.selected ) {
! 314: // Get the specific value for the option
! 315: var val = jQuery.browser.msie && !option.attributes["value"].specified ? option.text : option.value;
! 316:
! 317: // We don't need an array for one selects
! 318: if ( one )
! 319: return val;
! 320:
! 321: // Multi-Selects return an array
! 322: a.push(val);
! 323: }
! 324: }
! 325:
! 326: return a;
! 327:
! 328: // Everything else, we just grab the value
! 329: } else
! 330: return this[0].value.replace(/\r/g, "");
! 331: }
! 332: } else
! 333: return this.each(function(){
! 334: if ( val.constructor == Array && /radio|checkbox/.test(this.type) )
! 335: this.checked = (jQuery.inArray(this.value, val) >= 0 ||
! 336: jQuery.inArray(this.name, val) >= 0);
! 337: else if ( jQuery.nodeName(this, "select") ) {
! 338: var tmp = val.constructor == Array ? val : [val];
! 339:
! 340: jQuery("option", this).each(function(){
! 341: this.selected = (jQuery.inArray(this.value, tmp) >= 0 ||
! 342: jQuery.inArray(this.text, tmp) >= 0);
! 343: });
! 344:
! 345: if ( !tmp.length )
! 346: this.selectedIndex = -1;
! 347: } else
! 348: this.value = val;
! 349: });
! 350: },
! 351:
! 352: html: function( val ) {
! 353: return val == undefined ?
! 354: ( this.length ? this[0].innerHTML : null ) :
! 355: this.empty().append( val );
! 356: },
! 357:
! 358: replaceWith: function( val ) {
! 359: return this.after( val ).remove();
! 360: },
! 361:
! 362: slice: function() {
! 363: return this.pushStack( Array.prototype.slice.apply( this, arguments ) );
! 364: },
! 365:
! 366: map: function(fn) {
! 367: return this.pushStack(jQuery.map( this, function(elem,i){
! 368: return fn.call( elem, i, elem );
! 369: }));
! 370: },
! 371:
! 372: andSelf: function() {
! 373: return this.add( this.prevObject );
! 374: },
! 375:
! 376: domManip: function(args, table, dir, fn) {
! 377: var clone = this.length > 1, a;
! 378:
! 379: return this.each(function(){
! 380: if ( !a ) {
! 381: a = jQuery.clean(args, this.ownerDocument);
! 382: if ( dir < 0 )
! 383: a.reverse();
! 384: }
! 385:
! 386: var obj = this;
! 387:
! 388: if ( table && jQuery.nodeName(this, "table") && jQuery.nodeName(a[0], "tr") )
! 389: obj = this.getElementsByTagName("tbody")[0] || this.appendChild(document.createElement("tbody"));
! 390:
! 391: jQuery.each( a, function(){
! 392: if ( jQuery.nodeName(this, "script") ) {
! 393: if ( this.src )
! 394: jQuery.ajax({ url: this.src, async: false, dataType: "script" });
! 395: else
! 396: jQuery.globalEval( this.text || this.textContent || this.innerHTML || "" );
! 397: } else
! 398: fn.apply( obj, [ clone ? this.cloneNode(true) : this ] );
! 399: });
! 400: });
! 401: }
! 402: };
! 403:
! 404: jQuery.extend = jQuery.fn.extend = function() {
! 405: // copy reference to target object
! 406: var target = arguments[0] || {}, a = 1, al = arguments.length, deep = false;
! 407:
! 408: // Handle a deep copy situation
! 409: if ( target.constructor == Boolean ) {
! 410: deep = target;
! 411: target = arguments[1] || {};
! 412: }
! 413:
! 414: // extend jQuery itself if only one argument is passed
! 415: if ( al == 1 ) {
! 416: target = this;
! 417: a = 0;
! 418: }
! 419:
! 420: var prop;
! 421:
! 422: for ( ; a < al; a++ )
! 423: // Only deal with non-null/undefined values
! 424: if ( (prop = arguments[a]) != null )
! 425: // Extend the base object
! 426: for ( var i in prop ) {
! 427: // Prevent never-ending loop
! 428: if ( target == prop[i] )
! 429: continue;
! 430:
! 431: // Recurse if we're merging object values
! 432: if ( deep && typeof prop[i] == 'object' && target[i] )
! 433: jQuery.extend( target[i], prop[i] );
! 434:
! 435: // Don't bring in undefined values
! 436: else if ( prop[i] != undefined )
! 437: target[i] = prop[i];
! 438: }
! 439:
! 440: // Return the modified object
! 441: return target;
! 442: };
! 443:
! 444: var expando = "jQuery" + (new Date()).getTime(), uuid = 0, win = {};
! 445:
! 446: jQuery.extend({
! 447: noConflict: function(deep) {
! 448: window.$ = _$;
! 449: if ( deep )
! 450: window.jQuery = _jQuery;
! 451: return jQuery;
! 452: },
! 453:
! 454: // This may seem like some crazy code, but trust me when I say that this
! 455: // is the only cross-browser way to do this. --John
! 456: isFunction: function( fn ) {
! 457: return !!fn && typeof fn != "string" && !fn.nodeName &&
! 458: fn.constructor != Array && /function/i.test( fn + "" );
! 459: },
! 460:
! 461: // check if an element is in a XML document
! 462: isXMLDoc: function(elem) {
! 463: return elem.documentElement && !elem.body ||
! 464: elem.tagName && elem.ownerDocument && !elem.ownerDocument.body;
! 465: },
! 466:
! 467: // Evaluates a script in a global context
! 468: // Evaluates Async. in Safari 2 :-(
! 469: globalEval: function( data ) {
! 470: data = jQuery.trim( data );
! 471: if ( data ) {
! 472: if ( window.execScript )
! 473: window.execScript( data );
! 474: else if ( jQuery.browser.safari )
! 475: // safari doesn't provide a synchronous global eval
! 476: window.setTimeout( data, 0 );
! 477: else
! 478: eval.call( window, data );
! 479: }
! 480: },
! 481:
! 482: nodeName: function( elem, name ) {
! 483: return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
! 484: },
! 485:
! 486: cache: {},
! 487:
! 488: data: function( elem, name, data ) {
! 489: elem = elem == window ? win : elem;
! 490:
! 491: var id = elem[ expando ];
! 492:
! 493: // Compute a unique ID for the element
! 494: if ( !id )
! 495: id = elem[ expando ] = ++uuid;
! 496:
! 497: // Only generate the data cache if we're
! 498: // trying to access or manipulate it
! 499: if ( name && !jQuery.cache[ id ] )
! 500: jQuery.cache[ id ] = {};
! 501:
! 502: // Prevent overriding the named cache with undefined values
! 503: if ( data != undefined )
! 504: jQuery.cache[ id ][ name ] = data;
! 505:
! 506: // Return the named cache data, or the ID for the element
! 507: return name ? jQuery.cache[ id ][ name ] : id;
! 508: },
! 509:
! 510: removeData: function( elem, name ) {
! 511: elem = elem == window ? win : elem;
! 512:
! 513: var id = elem[ expando ];
! 514:
! 515: // If we want to remove a specific section of the element's data
! 516: if ( name ) {
! 517: if ( jQuery.cache[ id ] ) {
! 518: // Remove the section of cache data
! 519: delete jQuery.cache[ id ][ name ];
! 520:
! 521: // If we've removed all the data, remove the element's cache
! 522: name = "";
! 523: for ( name in jQuery.cache[ id ] ) break;
! 524: if ( !name )
! 525: jQuery.removeData( elem );
! 526: }
! 527:
! 528: // Otherwise, we want to remove all of the element's data
! 529: } else {
! 530: // Clean up the element expando
! 531: try {
! 532: delete elem[ expando ];
! 533: } catch(e){
! 534: // IE has trouble directly removing the expando
! 535: // but it's ok with using removeAttribute
! 536: if ( elem.removeAttribute )
! 537: elem.removeAttribute( expando );
! 538: }
! 539:
! 540: // Completely remove the data cache
! 541: delete jQuery.cache[ id ];
! 542: }
! 543: },
! 544:
! 545: // args is for internal usage only
! 546: each: function( obj, fn, args ) {
! 547: if ( args ) {
! 548: if ( obj.length == undefined )
! 549: for ( var i in obj )
! 550: fn.apply( obj[i], args );
! 551: else
! 552: for ( var i = 0, ol = obj.length; i < ol; i++ )
! 553: if ( fn.apply( obj[i], args ) === false ) break;
! 554:
! 555: // A special, fast, case for the most common use of each
! 556: } else {
! 557: if ( obj.length == undefined )
! 558: for ( var i in obj )
! 559: fn.call( obj[i], i, obj[i] );
! 560: else
! 561: for ( var i = 0, ol = obj.length, val = obj[0];
! 562: i < ol && fn.call(val,i,val) !== false; val = obj[++i] ){}
! 563: }
! 564:
! 565: return obj;
! 566: },
! 567:
! 568: prop: function(elem, value, type, index, prop){
! 569: // Handle executable functions
! 570: if ( jQuery.isFunction( value ) )
! 571: value = value.call( elem, [index] );
! 572:
! 573: // exclude the following css properties to add px
! 574: var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i;
! 575:
! 576: // Handle passing in a number to a CSS property
! 577: return value && value.constructor == Number && type == "curCSS" && !exclude.test(prop) ?
! 578: value + "px" :
! 579: value;
! 580: },
! 581:
! 582: className: {
! 583: // internal only, use addClass("class")
! 584: add: function( elem, c ){
! 585: jQuery.each( (c || "").split(/\s+/), function(i, cur){
! 586: if ( !jQuery.className.has( elem.className, cur ) )
! 587: elem.className += ( elem.className ? " " : "" ) + cur;
! 588: });
! 589: },
! 590:
! 591: // internal only, use removeClass("class")
! 592: remove: function( elem, c ){
! 593: elem.className = c != undefined ?
! 594: jQuery.grep( elem.className.split(/\s+/), function(cur){
! 595: return !jQuery.className.has( c, cur );
! 596: }).join(" ") : "";
! 597: },
! 598:
! 599: // internal only, use is(".class")
! 600: has: function( t, c ) {
! 601: return jQuery.inArray( c, (t.className || t).toString().split(/\s+/) ) > -1;
! 602: }
! 603: },
! 604:
! 605: swap: function(e,o,f) {
! 606: for ( var i in o ) {
! 607: e.style["old"+i] = e.style[i];
! 608: e.style[i] = o[i];
! 609: }
! 610: f.apply( e, [] );
! 611: for ( var i in o )
! 612: e.style[i] = e.style["old"+i];
! 613: },
! 614:
! 615: css: function(e,p) {
! 616: if ( p == "height" || p == "width" ) {
! 617: var old = {}, oHeight, oWidth, d = ["Top","Bottom","Right","Left"];
! 618:
! 619: jQuery.each( d, function(){
! 620: old["padding" + this] = 0;
! 621: old["border" + this + "Width"] = 0;
! 622: });
! 623:
! 624: jQuery.swap( e, old, function() {
! 625: if ( jQuery(e).is(':visible') ) {
! 626: oHeight = e.offsetHeight;
! 627: oWidth = e.offsetWidth;
! 628: } else {
! 629: e = jQuery(e.cloneNode(true))
! 630: .find(":radio").removeAttr("checked").end()
! 631: .css({
! 632: visibility: "hidden", position: "absolute", display: "block", right: "0", left: "0"
! 633: }).appendTo(e.parentNode)[0];
! 634:
! 635: var parPos = jQuery.css(e.parentNode,"position") || "static";
! 636: if ( parPos == "static" )
! 637: e.parentNode.style.position = "relative";
! 638:
! 639: oHeight = e.clientHeight;
! 640: oWidth = e.clientWidth;
! 641:
! 642: if ( parPos == "static" )
! 643: e.parentNode.style.position = "static";
! 644:
! 645: e.parentNode.removeChild(e);
! 646: }
! 647: });
! 648:
! 649: return p == "height" ? oHeight : oWidth;
! 650: }
! 651:
! 652: return jQuery.curCSS( e, p );
! 653: },
! 654:
! 655: curCSS: function(elem, prop, force) {
! 656: var ret, stack = [], swap = [];
! 657:
! 658: // A helper method for determining if an element's values are broken
! 659: function color(a){
! 660: if ( !jQuery.browser.safari )
! 661: return false;
! 662:
! 663: var ret = document.defaultView.getComputedStyle(a,null);
! 664: return !ret || ret.getPropertyValue("color") == "";
! 665: }
! 666:
! 667: if (prop == "opacity" && jQuery.browser.msie) {
! 668: ret = jQuery.attr(elem.style, "opacity");
! 669: return ret == "" ? "1" : ret;
! 670: }
! 671:
! 672: if (prop.match(/float/i))
! 673: prop = styleFloat;
! 674:
! 675: if (!force && elem.style[prop])
! 676: ret = elem.style[prop];
! 677:
! 678: else if (document.defaultView && document.defaultView.getComputedStyle) {
! 679:
! 680: if (prop.match(/float/i))
! 681: prop = "float";
! 682:
! 683: prop = prop.replace(/([A-Z])/g,"-$1").toLowerCase();
! 684: var cur = document.defaultView.getComputedStyle(elem, null);
! 685:
! 686: if ( cur && !color(elem) )
! 687: ret = cur.getPropertyValue(prop);
! 688:
! 689: // If the element isn't reporting its values properly in Safari
! 690: // then some display: none elements are involved
! 691: else {
! 692: // Locate all of the parent display: none elements
! 693: for ( var a = elem; a && color(a); a = a.parentNode )
! 694: stack.unshift(a);
! 695:
! 696: // Go through and make them visible, but in reverse
! 697: // (It would be better if we knew the exact display type that they had)
! 698: for ( a = 0; a < stack.length; a++ )
! 699: if ( color(stack[a]) ) {
! 700: swap[a] = stack[a].style.display;
! 701: stack[a].style.display = "block";
! 702: }
! 703:
! 704: // Since we flip the display style, we have to handle that
! 705: // one special, otherwise get the value
! 706: ret = prop == "display" && swap[stack.length-1] != null ?
! 707: "none" :
! 708: document.defaultView.getComputedStyle(elem,null).getPropertyValue(prop) || "";
! 709:
! 710: // Finally, revert the display styles back
! 711: for ( a = 0; a < swap.length; a++ )
! 712: if ( swap[a] != null )
! 713: stack[a].style.display = swap[a];
! 714: }
! 715:
! 716: if ( prop == "opacity" && ret == "" )
! 717: ret = "1";
! 718:
! 719: } else if (elem.currentStyle) {
! 720: var newProp = prop.replace(/\-(\w)/g,function(m,c){return c.toUpperCase();});
! 721: ret = elem.currentStyle[prop] || elem.currentStyle[newProp];
! 722:
! 723: // From the awesome hack by Dean Edwards
! 724: // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
! 725:
! 726: // If we're not dealing with a regular pixel number
! 727: // but a number that has a weird ending, we need to convert it to pixels
! 728: if ( !/^\d+(px)?$/i.test(ret) && /^\d/.test(ret) ) {
! 729: var style = elem.style.left;
! 730: var runtimeStyle = elem.runtimeStyle.left;
! 731: elem.runtimeStyle.left = elem.currentStyle.left;
! 732: elem.style.left = ret || 0;
! 733: ret = elem.style.pixelLeft + "px";
! 734: elem.style.left = style;
! 735: elem.runtimeStyle.left = runtimeStyle;
! 736: }
! 737: }
! 738:
! 739: return ret;
! 740: },
! 741:
! 742: clean: function(a, doc) {
! 743: var r = [];
! 744: doc = doc || document;
! 745:
! 746: jQuery.each( a, function(i,arg){
! 747: if ( !arg ) return;
! 748:
! 749: if ( arg.constructor == Number )
! 750: arg = arg.toString();
! 751:
! 752: // Convert html string into DOM nodes
! 753: if ( typeof arg == "string" ) {
! 754: // Fix "XHTML"-style tags in all browsers
! 755: arg = arg.replace(/(<(\w+)[^>]*?)\/>/g, function(m, all, tag){
! 756: return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area)$/i)? m : all+"></"+tag+">";
! 757: });
! 758:
! 759: // Trim whitespace, otherwise indexOf won't work as expected
! 760: var s = jQuery.trim(arg).toLowerCase(), div = doc.createElement("div"), tb = [];
! 761:
! 762: var wrap =
! 763: // option or optgroup
! 764: !s.indexOf("<opt") &&
! 765: [1, "<select>", "</select>"] ||
! 766:
! 767: !s.indexOf("<leg") &&
! 768: [1, "<fieldset>", "</fieldset>"] ||
! 769:
! 770: s.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
! 771: [1, "<table>", "</table>"] ||
! 772:
! 773: !s.indexOf("<tr") &&
! 774: [2, "<table><tbody>", "</tbody></table>"] ||
! 775:
! 776: // <thead> matched above
! 777: (!s.indexOf("<td") || !s.indexOf("<th")) &&
! 778: [3, "<table><tbody><tr>", "</tr></tbody></table>"] ||
! 779:
! 780: !s.indexOf("<col") &&
! 781: [2, "<table><tbody></tbody><colgroup>", "</colgroup></table>"] ||
! 782:
! 783: // IE can't serialize <link> and <script> tags normally
! 784: jQuery.browser.msie &&
! 785: [1, "div<div>", "</div>"] ||
! 786:
! 787: [0,"",""];
! 788:
! 789: // Go to html and back, then peel off extra wrappers
! 790: div.innerHTML = wrap[1] + arg + wrap[2];
! 791:
! 792: // Move to the right depth
! 793: while ( wrap[0]-- )
! 794: div = div.lastChild;
! 795:
! 796: // Remove IE's autoinserted <tbody> from table fragments
! 797: if ( jQuery.browser.msie ) {
! 798:
! 799: // String was a <table>, *may* have spurious <tbody>
! 800: if ( !s.indexOf("<table") && s.indexOf("<tbody") < 0 )
! 801: tb = div.firstChild && div.firstChild.childNodes;
! 802:
! 803: // String was a bare <thead> or <tfoot>
! 804: else if ( wrap[1] == "<table>" && s.indexOf("<tbody") < 0 )
! 805: tb = div.childNodes;
! 806:
! 807: for ( var n = tb.length-1; n >= 0 ; --n )
! 808: if ( jQuery.nodeName(tb[n], "tbody") && !tb[n].childNodes.length )
! 809: tb[n].parentNode.removeChild(tb[n]);
! 810:
! 811: // IE completely kills leading whitespace when innerHTML is used
! 812: if ( /^\s/.test(arg) )
! 813: div.insertBefore( doc.createTextNode( arg.match(/^\s*/)[0] ), div.firstChild );
! 814:
! 815: }
! 816:
! 817: arg = jQuery.makeArray( div.childNodes );
! 818: }
! 819:
! 820: if ( 0 === arg.length && (!jQuery.nodeName(arg, "form") && !jQuery.nodeName(arg, "select")) )
! 821: return;
! 822:
! 823: if ( arg[0] == undefined || jQuery.nodeName(arg, "form") || arg.options )
! 824: r.push( arg );
! 825: else
! 826: r = jQuery.merge( r, arg );
! 827:
! 828: });
! 829:
! 830: return r;
! 831: },
! 832:
! 833: attr: function(elem, name, value){
! 834: var fix = jQuery.isXMLDoc(elem) ? {} : jQuery.props;
! 835:
! 836: // Safari mis-reports the default selected property of a hidden option
! 837: // Accessing the parent's selectedIndex property fixes it
! 838: if ( name == "selected" && jQuery.browser.safari )
! 839: elem.parentNode.selectedIndex;
! 840:
! 841: // Certain attributes only work when accessed via the old DOM 0 way
! 842: if ( fix[name] ) {
! 843: if ( value != undefined ) elem[fix[name]] = value;
! 844: return elem[fix[name]];
! 845: } else if ( jQuery.browser.msie && name == "style" )
! 846: return jQuery.attr( elem.style, "cssText", value );
! 847:
! 848: else if ( value == undefined && jQuery.browser.msie && jQuery.nodeName(elem, "form") && (name == "action" || name == "method") )
! 849: return elem.getAttributeNode(name).nodeValue;
! 850:
! 851: // IE elem.getAttribute passes even for style
! 852: else if ( elem.tagName ) {
! 853:
! 854: if ( value != undefined ) {
! 855: if ( name == "type" && jQuery.nodeName(elem,"input") && elem.parentNode )
! 856: throw "type property can't be changed";
! 857: elem.setAttribute( name, value );
! 858: }
! 859:
! 860: if ( jQuery.browser.msie && /href|src/.test(name) && !jQuery.isXMLDoc(elem) )
! 861: return elem.getAttribute( name, 2 );
! 862:
! 863: return elem.getAttribute( name );
! 864:
! 865: // elem is actually elem.style ... set the style
! 866: } else {
! 867: // IE actually uses filters for opacity
! 868: if ( name == "opacity" && jQuery.browser.msie ) {
! 869: if ( value != undefined ) {
! 870: // IE has trouble with opacity if it does not have layout
! 871: // Force it by setting the zoom level
! 872: elem.zoom = 1;
! 873:
! 874: // Set the alpha filter to set the opacity
! 875: elem.filter = (elem.filter || "").replace(/alpha\([^)]*\)/,"") +
! 876: (parseFloat(value).toString() == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
! 877: }
! 878:
! 879: return elem.filter ?
! 880: (parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100).toString() : "";
! 881: }
! 882: name = name.replace(/-([a-z])/ig,function(z,b){return b.toUpperCase();});
! 883: if ( value != undefined ) elem[name] = value;
! 884: return elem[name];
! 885: }
! 886: },
! 887:
! 888: trim: function(t){
! 889: return (t||"").replace(/^\s+|\s+$/g, "");
! 890: },
! 891:
! 892: makeArray: function( a ) {
! 893: var r = [];
! 894:
! 895: // Need to use typeof to fight Safari childNodes crashes
! 896: if ( typeof a != "array" )
! 897: for ( var i = 0, al = a.length; i < al; i++ )
! 898: r.push( a[i] );
! 899: else
! 900: r = a.slice( 0 );
! 901:
! 902: return r;
! 903: },
! 904:
! 905: inArray: function( b, a ) {
! 906: for ( var i = 0, al = a.length; i < al; i++ )
! 907: if ( a[i] == b )
! 908: return i;
! 909: return -1;
! 910: },
! 911:
! 912: merge: function(first, second) {
! 913: // We have to loop this way because IE & Opera overwrite the length
! 914: // expando of getElementsByTagName
! 915:
! 916: // Also, we need to make sure that the correct elements are being returned
! 917: // (IE returns comment nodes in a '*' query)
! 918: if ( jQuery.browser.msie ) {
! 919: for ( var i = 0; second[i]; i++ )
! 920: if ( second[i].nodeType != 8 )
! 921: first.push(second[i]);
! 922: } else
! 923: for ( var i = 0; second[i]; i++ )
! 924: first.push(second[i]);
! 925:
! 926: return first;
! 927: },
! 928:
! 929: unique: function(first) {
! 930: var r = [], done = {};
! 931:
! 932: try {
! 933: for ( var i = 0, fl = first.length; i < fl; i++ ) {
! 934: var id = jQuery.data(first[i]);
! 935: if ( !done[id] ) {
! 936: done[id] = true;
! 937: r.push(first[i]);
! 938: }
! 939: }
! 940: } catch(e) {
! 941: r = first;
! 942: }
! 943:
! 944: return r;
! 945: },
! 946:
! 947: grep: function(elems, fn, inv) {
! 948: // If a string is passed in for the function, make a function
! 949: // for it (a handy shortcut)
! 950: if ( typeof fn == "string" )
! 951: fn = eval("false||function(a,i){return " + fn + "}");
! 952:
! 953: var result = [];
! 954:
! 955: // Go through the array, only saving the items
! 956: // that pass the validator function
! 957: for ( var i = 0, el = elems.length; i < el; i++ )
! 958: if ( !inv && fn(elems[i],i) || inv && !fn(elems[i],i) )
! 959: result.push( elems[i] );
! 960:
! 961: return result;
! 962: },
! 963:
! 964: map: function(elems, fn) {
! 965: // If a string is passed in for the function, make a function
! 966: // for it (a handy shortcut)
! 967: if ( typeof fn == "string" )
! 968: fn = eval("false||function(a){return " + fn + "}");
! 969:
! 970: var result = [];
! 971:
! 972: // Go through the array, translating each of the items to their
! 973: // new value (or values).
! 974: for ( var i = 0, el = elems.length; i < el; i++ ) {
! 975: var val = fn(elems[i],i);
! 976:
! 977: if ( val !== null && val != undefined ) {
! 978: if ( val.constructor != Array ) val = [val];
! 979: result = result.concat( val );
! 980: }
! 981: }
! 982:
! 983: return result;
! 984: }
! 985: });
! 986:
! 987: var userAgent = navigator.userAgent.toLowerCase();
! 988:
! 989: // Figure out what browser is being used
! 990: jQuery.browser = {
! 991: version: (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1],
! 992: safari: /webkit/.test(userAgent),
! 993: opera: /opera/.test(userAgent),
! 994: msie: /msie/.test(userAgent) && !/opera/.test(userAgent),
! 995: mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent)
! 996: };
! 997:
! 998: var styleFloat = jQuery.browser.msie ? "styleFloat" : "cssFloat";
! 999:
! 1000: jQuery.extend({
! 1001: // Check to see if the W3C box model is being used
! 1002: boxModel: !jQuery.browser.msie || document.compatMode == "CSS1Compat",
! 1003:
! 1004: styleFloat: jQuery.browser.msie ? "styleFloat" : "cssFloat",
! 1005:
! 1006: props: {
! 1007: "for": "htmlFor",
! 1008: "class": "className",
! 1009: "float": styleFloat,
! 1010: cssFloat: styleFloat,
! 1011: styleFloat: styleFloat,
! 1012: innerHTML: "innerHTML",
! 1013: className: "className",
! 1014: value: "value",
! 1015: disabled: "disabled",
! 1016: checked: "checked",
! 1017: readonly: "readOnly",
! 1018: selected: "selected",
! 1019: maxlength: "maxLength"
! 1020: }
! 1021: });
! 1022:
! 1023: jQuery.each({
! 1024: parent: "a.parentNode",
! 1025: parents: "jQuery.dir(a,'parentNode')",
! 1026: next: "jQuery.nth(a,2,'nextSibling')",
! 1027: prev: "jQuery.nth(a,2,'previousSibling')",
! 1028: nextAll: "jQuery.dir(a,'nextSibling')",
! 1029: prevAll: "jQuery.dir(a,'previousSibling')",
! 1030: siblings: "jQuery.sibling(a.parentNode.firstChild,a)",
! 1031: children: "jQuery.sibling(a.firstChild)",
! 1032: contents: "jQuery.nodeName(a,'iframe')?a.contentDocument||a.contentWindow.document:jQuery.makeArray(a.childNodes)"
! 1033: }, function(i,n){
! 1034: jQuery.fn[ i ] = function(a) {
! 1035: var ret = jQuery.map(this,n);
! 1036: if ( a && typeof a == "string" )
! 1037: ret = jQuery.multiFilter(a,ret);
! 1038: return this.pushStack( jQuery.unique(ret) );
! 1039: };
! 1040: });
! 1041:
! 1042: jQuery.each({
! 1043: appendTo: "append",
! 1044: prependTo: "prepend",
! 1045: insertBefore: "before",
! 1046: insertAfter: "after",
! 1047: replaceAll: "replaceWith"
! 1048: }, function(i,n){
! 1049: jQuery.fn[ i ] = function(){
! 1050: var a = arguments;
! 1051: return this.each(function(){
! 1052: for ( var j = 0, al = a.length; j < al; j++ )
! 1053: jQuery(a[j])[n]( this );
! 1054: });
! 1055: };
! 1056: });
! 1057:
! 1058: jQuery.each( {
! 1059: removeAttr: function( key ) {
! 1060: jQuery.attr( this, key, "" );
! 1061: this.removeAttribute( key );
! 1062: },
! 1063: addClass: function(c){
! 1064: jQuery.className.add(this,c);
! 1065: },
! 1066: removeClass: function(c){
! 1067: jQuery.className.remove(this,c);
! 1068: },
! 1069: toggleClass: function( c ){
! 1070: jQuery.className[ jQuery.className.has(this,c) ? "remove" : "add" ](this, c);
! 1071: },
! 1072: remove: function(a){
! 1073: if ( !a || jQuery.filter( a, [this] ).r.length ) {
! 1074: jQuery.removeData( this );
! 1075: this.parentNode.removeChild( this );
! 1076: }
! 1077: },
! 1078: empty: function() {
! 1079: // Clean up the cache
! 1080: jQuery("*", this).each(function(){ jQuery.removeData(this); });
! 1081:
! 1082: while ( this.firstChild )
! 1083: this.removeChild( this.firstChild );
! 1084: }
! 1085: }, function(i,n){
! 1086: jQuery.fn[ i ] = function() {
! 1087: return this.each( n, arguments );
! 1088: };
! 1089: });
! 1090:
! 1091: jQuery.each( [ "Height", "Width" ], function(i,name){
! 1092: var n = name.toLowerCase();
! 1093:
! 1094: jQuery.fn[ n ] = function(h) {
! 1095: return this[0] == window ?
! 1096: jQuery.browser.safari && self["inner" + name] ||
! 1097: jQuery.boxModel && Math.max(document.documentElement["client" + name], document.body["client" + name]) ||
! 1098: document.body["client" + name] :
! 1099:
! 1100: this[0] == document ?
! 1101: Math.max( document.body["scroll" + name], document.body["offset" + name] ) :
! 1102:
! 1103: h == undefined ?
! 1104: ( this.length ? jQuery.css( this[0], n ) : null ) :
! 1105: this.css( n, h.constructor == String ? h : h + "px" );
! 1106: };
! 1107: });
! 1108:
! 1109: var chars = jQuery.browser.safari && parseInt(jQuery.browser.version) < 417 ?
! 1110: "(?:[\\w*_-]|\\\\.)" :
! 1111: "(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",
! 1112: quickChild = new RegExp("^>\\s*(" + chars + "+)"),
! 1113: quickID = new RegExp("^(" + chars + "+)(#)(" + chars + "+)"),
! 1114: quickClass = new RegExp("^([#.]?)(" + chars + "*)");
! 1115:
! 1116: jQuery.extend({
! 1117: expr: {
! 1118: "": "m[2]=='*'||jQuery.nodeName(a,m[2])",
! 1119: "#": "a.getAttribute('id')==m[2]",
! 1120: ":": {
! 1121: // Position Checks
! 1122: lt: "i<m[3]-0",
! 1123: gt: "i>m[3]-0",
! 1124: nth: "m[3]-0==i",
! 1125: eq: "m[3]-0==i",
! 1126: first: "i==0",
! 1127: last: "i==r.length-1",
! 1128: even: "i%2==0",
! 1129: odd: "i%2",
! 1130:
! 1131: // Child Checks
! 1132: "first-child": "a.parentNode.getElementsByTagName('*')[0]==a",
! 1133: "last-child": "jQuery.nth(a.parentNode.lastChild,1,'previousSibling')==a",
! 1134: "only-child": "!jQuery.nth(a.parentNode.lastChild,2,'previousSibling')",
! 1135:
! 1136: // Parent Checks
! 1137: parent: "a.firstChild",
! 1138: empty: "!a.firstChild",
! 1139:
! 1140: // Text Check
! 1141: contains: "(a.textContent||a.innerText||'').indexOf(m[3])>=0",
! 1142:
! 1143: // Visibility
! 1144: visible: '"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden"',
! 1145: hidden: '"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden"',
! 1146:
! 1147: // Form attributes
! 1148: enabled: "!a.disabled",
! 1149: disabled: "a.disabled",
! 1150: checked: "a.checked",
! 1151: selected: "a.selected||jQuery.attr(a,'selected')",
! 1152:
! 1153: // Form elements
! 1154: text: "'text'==a.type",
! 1155: radio: "'radio'==a.type",
! 1156: checkbox: "'checkbox'==a.type",
! 1157: file: "'file'==a.type",
! 1158: password: "'password'==a.type",
! 1159: submit: "'submit'==a.type",
! 1160: image: "'image'==a.type",
! 1161: reset: "'reset'==a.type",
! 1162: button: '"button"==a.type||jQuery.nodeName(a,"button")',
! 1163: input: "/input|select|textarea|button/i.test(a.nodeName)",
! 1164:
! 1165: // :has()
! 1166: has: "jQuery.find(m[3],a).length",
! 1167:
! 1168: // :header
! 1169: header: "/h\\d/i.test(a.nodeName)",
! 1170:
! 1171: // :animated
! 1172: animated: "jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length"
! 1173: }
! 1174: },
! 1175:
! 1176: // The regular expressions that power the parsing engine
! 1177: parse: [
! 1178: // Match: [@value='test'], [@foo]
! 1179: /^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,
! 1180:
! 1181: // Match: :contains('foo')
! 1182: /^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,
! 1183:
! 1184: // Match: :even, :last-chlid, #id, .class
! 1185: new RegExp("^([:.#]*)(" + chars + "+)")
! 1186: ],
! 1187:
! 1188: multiFilter: function( expr, elems, not ) {
! 1189: var old, cur = [];
! 1190:
! 1191: while ( expr && expr != old ) {
! 1192: old = expr;
! 1193: var f = jQuery.filter( expr, elems, not );
! 1194: expr = f.t.replace(/^\s*,\s*/, "" );
! 1195: cur = not ? elems = f.r : jQuery.merge( cur, f.r );
! 1196: }
! 1197:
! 1198: return cur;
! 1199: },
! 1200:
! 1201: find: function( t, context ) {
! 1202: // Quickly handle non-string expressions
! 1203: if ( typeof t != "string" )
! 1204: return [ t ];
! 1205:
! 1206: // Make sure that the context is a DOM Element
! 1207: if ( context && !context.nodeType )
! 1208: context = null;
! 1209:
! 1210: // Set the correct context (if none is provided)
! 1211: context = context || document;
! 1212:
! 1213: // Initialize the search
! 1214: var ret = [context], done = [], last;
! 1215:
! 1216: // Continue while a selector expression exists, and while
! 1217: // we're no longer looping upon ourselves
! 1218: while ( t && last != t ) {
! 1219: var r = [];
! 1220: last = t;
! 1221:
! 1222: t = jQuery.trim(t);
! 1223:
! 1224: var foundToken = false;
! 1225:
! 1226: // An attempt at speeding up child selectors that
! 1227: // point to a specific element tag
! 1228: var re = quickChild;
! 1229: var m = re.exec(t);
! 1230:
! 1231: if ( m ) {
! 1232: var nodeName = m[1].toUpperCase();
! 1233:
! 1234: // Perform our own iteration and filter
! 1235: for ( var i = 0; ret[i]; i++ )
! 1236: for ( var c = ret[i].firstChild; c; c = c.nextSibling )
! 1237: if ( c.nodeType == 1 && (nodeName == "*" || c.nodeName.toUpperCase() == nodeName.toUpperCase()) )
! 1238: r.push( c );
! 1239:
! 1240: ret = r;
! 1241: t = t.replace( re, "" );
! 1242: if ( t.indexOf(" ") == 0 ) continue;
! 1243: foundToken = true;
! 1244: } else {
! 1245: re = /^([>+~])\s*(\w*)/i;
! 1246:
! 1247: if ( (m = re.exec(t)) != null ) {
! 1248: r = [];
! 1249:
! 1250: var nodeName = m[2], merge = {};
! 1251: m = m[1];
! 1252:
! 1253: for ( var j = 0, rl = ret.length; j < rl; j++ ) {
! 1254: var n = m == "~" || m == "+" ? ret[j].nextSibling : ret[j].firstChild;
! 1255: for ( ; n; n = n.nextSibling )
! 1256: if ( n.nodeType == 1 ) {
! 1257: var id = jQuery.data(n);
! 1258:
! 1259: if ( m == "~" && merge[id] ) break;
! 1260:
! 1261: if (!nodeName || n.nodeName.toUpperCase() == nodeName.toUpperCase() ) {
! 1262: if ( m == "~" ) merge[id] = true;
! 1263: r.push( n );
! 1264: }
! 1265:
! 1266: if ( m == "+" ) break;
! 1267: }
! 1268: }
! 1269:
! 1270: ret = r;
! 1271:
! 1272: // And remove the token
! 1273: t = jQuery.trim( t.replace( re, "" ) );
! 1274: foundToken = true;
! 1275: }
! 1276: }
! 1277:
! 1278: // See if there's still an expression, and that we haven't already
! 1279: // matched a token
! 1280: if ( t && !foundToken ) {
! 1281: // Handle multiple expressions
! 1282: if ( !t.indexOf(",") ) {
! 1283: // Clean the result set
! 1284: if ( context == ret[0] ) ret.shift();
! 1285:
! 1286: // Merge the result sets
! 1287: done = jQuery.merge( done, ret );
! 1288:
! 1289: // Reset the context
! 1290: r = ret = [context];
! 1291:
! 1292: // Touch up the selector string
! 1293: t = " " + t.substr(1,t.length);
! 1294:
! 1295: } else {
! 1296: // Optimize for the case nodeName#idName
! 1297: var re2 = quickID;
! 1298: var m = re2.exec(t);
! 1299:
! 1300: // Re-organize the results, so that they're consistent
! 1301: if ( m ) {
! 1302: m = [ 0, m[2], m[3], m[1] ];
! 1303:
! 1304: } else {
! 1305: // Otherwise, do a traditional filter check for
! 1306: // ID, class, and element selectors
! 1307: re2 = quickClass;
! 1308: m = re2.exec(t);
! 1309: }
! 1310:
! 1311: m[2] = m[2].replace(/\\/g, "");
! 1312:
! 1313: var elem = ret[ret.length-1];
! 1314:
! 1315: // Try to do a global search by ID, where we can
! 1316: if ( m[1] == "#" && elem && elem.getElementById && !jQuery.isXMLDoc(elem) ) {
! 1317: // Optimization for HTML document case
! 1318: var oid = elem.getElementById(m[2]);
! 1319:
! 1320: // Do a quick check for the existence of the actual ID attribute
! 1321: // to avoid selecting by the name attribute in IE
! 1322: // also check to insure id is a string to avoid selecting an element with the name of 'id' inside a form
! 1323: if ( (jQuery.browser.msie||jQuery.browser.opera) && oid && typeof oid.id == "string" && oid.id != m[2] )
! 1324: oid = jQuery('[@id="'+m[2]+'"]', elem)[0];
! 1325:
! 1326: // Do a quick check for node name (where applicable) so
! 1327: // that div#foo searches will be really fast
! 1328: ret = r = oid && (!m[3] || jQuery.nodeName(oid, m[3])) ? [oid] : [];
! 1329: } else {
! 1330: // We need to find all descendant elements
! 1331: for ( var i = 0; ret[i]; i++ ) {
! 1332: // Grab the tag name being searched for
! 1333: var tag = m[1] == "#" && m[3] ? m[3] : m[1] != "" || m[0] == "" ? "*" : m[2];
! 1334:
! 1335: // Handle IE7 being really dumb about <object>s
! 1336: if ( tag == "*" && ret[i].nodeName.toLowerCase() == "object" )
! 1337: tag = "param";
! 1338:
! 1339: r = jQuery.merge( r, ret[i].getElementsByTagName( tag ));
! 1340: }
! 1341:
! 1342: // It's faster to filter by class and be done with it
! 1343: if ( m[1] == "." )
! 1344: r = jQuery.classFilter( r, m[2] );
! 1345:
! 1346: // Same with ID filtering
! 1347: if ( m[1] == "#" ) {
! 1348: var tmp = [];
! 1349:
! 1350: // Try to find the element with the ID
! 1351: for ( var i = 0; r[i]; i++ )
! 1352: if ( r[i].getAttribute("id") == m[2] ) {
! 1353: tmp = [ r[i] ];
! 1354: break;
! 1355: }
! 1356:
! 1357: r = tmp;
! 1358: }
! 1359:
! 1360: ret = r;
! 1361: }
! 1362:
! 1363: t = t.replace( re2, "" );
! 1364: }
! 1365:
! 1366: }
! 1367:
! 1368: // If a selector string still exists
! 1369: if ( t ) {
! 1370: // Attempt to filter it
! 1371: var val = jQuery.filter(t,r);
! 1372: ret = r = val.r;
! 1373: t = jQuery.trim(val.t);
! 1374: }
! 1375: }
! 1376:
! 1377: // An error occurred with the selector;
! 1378: // just return an empty set instead
! 1379: if ( t )
! 1380: ret = [];
! 1381:
! 1382: // Remove the root context
! 1383: if ( ret && context == ret[0] )
! 1384: ret.shift();
! 1385:
! 1386: // And combine the results
! 1387: done = jQuery.merge( done, ret );
! 1388:
! 1389: return done;
! 1390: },
! 1391:
! 1392: classFilter: function(r,m,not){
! 1393: m = " " + m + " ";
! 1394: var tmp = [];
! 1395: for ( var i = 0; r[i]; i++ ) {
! 1396: var pass = (" " + r[i].className + " ").indexOf( m ) >= 0;
! 1397: if ( !not && pass || not && !pass )
! 1398: tmp.push( r[i] );
! 1399: }
! 1400: return tmp;
! 1401: },
! 1402:
! 1403: filter: function(t,r,not) {
! 1404: var last;
! 1405:
! 1406: // Look for common filter expressions
! 1407: while ( t && t != last ) {
! 1408: last = t;
! 1409:
! 1410: var p = jQuery.parse, m;
! 1411:
! 1412: for ( var i = 0; p[i]; i++ ) {
! 1413: m = p[i].exec( t );
! 1414:
! 1415: if ( m ) {
! 1416: // Remove what we just matched
! 1417: t = t.substring( m[0].length );
! 1418:
! 1419: m[2] = m[2].replace(/\\/g, "");
! 1420: break;
! 1421: }
! 1422: }
! 1423:
! 1424: if ( !m )
! 1425: break;
! 1426:
! 1427: // :not() is a special case that can be optimized by
! 1428: // keeping it out of the expression list
! 1429: if ( m[1] == ":" && m[2] == "not" )
! 1430: r = jQuery.filter(m[3], r, true).r;
! 1431:
! 1432: // We can get a big speed boost by filtering by class here
! 1433: else if ( m[1] == "." )
! 1434: r = jQuery.classFilter(r, m[2], not);
! 1435:
! 1436: else if ( m[1] == "[" ) {
! 1437: var tmp = [], type = m[3];
! 1438:
! 1439: for ( var i = 0, rl = r.length; i < rl; i++ ) {
! 1440: var a = r[i], z = a[ jQuery.props[m[2]] || m[2] ];
! 1441:
! 1442: if ( z == null || /href|src|selected/.test(m[2]) )
! 1443: z = jQuery.attr(a,m[2]) || '';
! 1444:
! 1445: if ( (type == "" && !!z ||
! 1446: type == "=" && z == m[5] ||
! 1447: type == "!=" && z != m[5] ||
! 1448: type == "^=" && z && !z.indexOf(m[5]) ||
! 1449: type == "$=" && z.substr(z.length - m[5].length) == m[5] ||
! 1450: (type == "*=" || type == "~=") && z.indexOf(m[5]) >= 0) ^ not )
! 1451: tmp.push( a );
! 1452: }
! 1453:
! 1454: r = tmp;
! 1455:
! 1456: // We can get a speed boost by handling nth-child here
! 1457: } else if ( m[1] == ":" && m[2] == "nth-child" ) {
! 1458: var merge = {}, tmp = [],
! 1459: test = /(\d*)n\+?(\d*)/.exec(
! 1460: m[3] == "even" && "2n" || m[3] == "odd" && "2n+1" ||
! 1461: !/\D/.test(m[3]) && "n+" + m[3] || m[3]),
! 1462: first = (test[1] || 1) - 0, last = test[2] - 0;
! 1463:
! 1464: for ( var i = 0, rl = r.length; i < rl; i++ ) {
! 1465: var node = r[i], parentNode = node.parentNode, id = jQuery.data(parentNode);
! 1466:
! 1467: if ( !merge[id] ) {
! 1468: var c = 1;
! 1469:
! 1470: for ( var n = parentNode.firstChild; n; n = n.nextSibling )
! 1471: if ( n.nodeType == 1 )
! 1472: n.nodeIndex = c++;
! 1473:
! 1474: merge[id] = true;
! 1475: }
! 1476:
! 1477: var add = false;
! 1478:
! 1479: if ( first == 1 ) {
! 1480: if ( last == 0 || node.nodeIndex == last )
! 1481: add = true;
! 1482: } else if ( (node.nodeIndex + last) % first == 0 )
! 1483: add = true;
! 1484:
! 1485: if ( add ^ not )
! 1486: tmp.push( node );
! 1487: }
! 1488:
! 1489: r = tmp;
! 1490:
! 1491: // Otherwise, find the expression to execute
! 1492: } else {
! 1493: var f = jQuery.expr[m[1]];
! 1494: if ( typeof f != "string" )
! 1495: f = jQuery.expr[m[1]][m[2]];
! 1496:
! 1497: // Build a custom macro to enclose it
! 1498: f = eval("false||function(a,i){return " + f + "}");
! 1499:
! 1500: // Execute it against the current filter
! 1501: r = jQuery.grep( r, f, not );
! 1502: }
! 1503: }
! 1504:
! 1505: // Return an array of filtered elements (r)
! 1506: // and the modified expression string (t)
! 1507: return { r: r, t: t };
! 1508: },
! 1509:
! 1510: dir: function( elem, dir ){
! 1511: var matched = [];
! 1512: var cur = elem[dir];
! 1513: while ( cur && cur != document ) {
! 1514: if ( cur.nodeType == 1 )
! 1515: matched.push( cur );
! 1516: cur = cur[dir];
! 1517: }
! 1518: return matched;
! 1519: },
! 1520:
! 1521: nth: function(cur,result,dir,elem){
! 1522: result = result || 1;
! 1523: var num = 0;
! 1524:
! 1525: for ( ; cur; cur = cur[dir] )
! 1526: if ( cur.nodeType == 1 && ++num == result )
! 1527: break;
! 1528:
! 1529: return cur;
! 1530: },
! 1531:
! 1532: sibling: function( n, elem ) {
! 1533: var r = [];
! 1534:
! 1535: for ( ; n; n = n.nextSibling ) {
! 1536: if ( n.nodeType == 1 && (!elem || n != elem) )
! 1537: r.push( n );
! 1538: }
! 1539:
! 1540: return r;
! 1541: }
! 1542: });
! 1543: /*
! 1544: * A number of helper functions used for managing events.
! 1545: * Many of the ideas behind this code orignated from
! 1546: * Dean Edwards' addEvent library.
! 1547: */
! 1548: jQuery.event = {
! 1549:
! 1550: // Bind an event to an element
! 1551: // Original by Dean Edwards
! 1552: add: function(element, type, handler, data) {
! 1553: // For whatever reason, IE has trouble passing the window object
! 1554: // around, causing it to be cloned in the process
! 1555: if ( jQuery.browser.msie && element.setInterval != undefined )
! 1556: element = window;
! 1557:
! 1558: // Make sure that the function being executed has a unique ID
! 1559: if ( !handler.guid )
! 1560: handler.guid = this.guid++;
! 1561:
! 1562: // if data is passed, bind to handler
! 1563: if( data != undefined ) {
! 1564: // Create temporary function pointer to original handler
! 1565: var fn = handler;
! 1566:
! 1567: // Create unique handler function, wrapped around original handler
! 1568: handler = function() {
! 1569: // Pass arguments and context to original handler
! 1570: return fn.apply(this, arguments);
! 1571: };
! 1572:
! 1573: // Store data in unique handler
! 1574: handler.data = data;
! 1575:
! 1576: // Set the guid of unique handler to the same of original handler, so it can be removed
! 1577: handler.guid = fn.guid;
! 1578: }
! 1579:
! 1580: // Namespaced event handlers
! 1581: var parts = type.split(".");
! 1582: type = parts[0];
! 1583: handler.type = parts[1];
! 1584:
! 1585: // Init the element's event structure
! 1586: var events = jQuery.data(element, "events") || jQuery.data(element, "events", {});
! 1587:
! 1588: var handle = jQuery.data(element, "handle", function(){
! 1589: // returned undefined or false
! 1590: var val;
! 1591:
! 1592: // Handle the second event of a trigger and when
! 1593: // an event is called after a page has unloaded
! 1594: if ( typeof jQuery == "undefined" || jQuery.event.triggered )
! 1595: return val;
! 1596:
! 1597: val = jQuery.event.handle.apply(element, arguments);
! 1598:
! 1599: return val;
! 1600: });
! 1601:
! 1602: // Get the current list of functions bound to this event
! 1603: var handlers = events[type];
! 1604:
! 1605: // Init the event handler queue
! 1606: if (!handlers) {
! 1607: handlers = events[type] = {};
! 1608:
! 1609: // And bind the global event handler to the element
! 1610: if (element.addEventListener)
! 1611: element.addEventListener(type, handle, false);
! 1612: else
! 1613: element.attachEvent("on" + type, handle);
! 1614: }
! 1615:
! 1616: // Add the function to the element's handler list
! 1617: handlers[handler.guid] = handler;
! 1618:
! 1619: // Keep track of which events have been used, for global triggering
! 1620: this.global[type] = true;
! 1621: },
! 1622:
! 1623: guid: 1,
! 1624: global: {},
! 1625:
! 1626: // Detach an event or set of events from an element
! 1627: remove: function(element, type, handler) {
! 1628: var events = jQuery.data(element, "events"), ret, index;
! 1629:
! 1630: // Namespaced event handlers
! 1631: if ( typeof type == "string" ) {
! 1632: var parts = type.split(".");
! 1633: type = parts[0];
! 1634: }
! 1635:
! 1636: if ( events ) {
! 1637: // type is actually an event object here
! 1638: if ( type && type.type ) {
! 1639: handler = type.handler;
! 1640: type = type.type;
! 1641: }
! 1642:
! 1643: if ( !type ) {
! 1644: for ( type in events )
! 1645: this.remove( element, type );
! 1646:
! 1647: } else if ( events[type] ) {
! 1648: // remove the given handler for the given type
! 1649: if ( handler )
! 1650: delete events[type][handler.guid];
! 1651:
! 1652: // remove all handlers for the given type
! 1653: else
! 1654: for ( handler in events[type] )
! 1655: // Handle the removal of namespaced events
! 1656: if ( !parts[1] || events[type][handler].type == parts[1] )
! 1657: delete events[type][handler];
! 1658:
! 1659: // remove generic event handler if no more handlers exist
! 1660: for ( ret in events[type] ) break;
! 1661: if ( !ret ) {
! 1662: if (element.removeEventListener)
! 1663: element.removeEventListener(type, jQuery.data(element, "handle"), false);
! 1664: else
! 1665: element.detachEvent("on" + type, jQuery.data(element, "handle"));
! 1666: ret = null;
! 1667: delete events[type];
! 1668: }
! 1669: }
! 1670:
! 1671: // Remove the expando if it's no longer used
! 1672: for ( ret in events ) break;
! 1673: if ( !ret ) {
! 1674: jQuery.removeData( element, "events" );
! 1675: jQuery.removeData( element, "handle" );
! 1676: }
! 1677: }
! 1678: },
! 1679:
! 1680: trigger: function(type, data, element, donative, extra) {
! 1681: // Clone the incoming data, if any
! 1682: data = jQuery.makeArray(data || []);
! 1683:
! 1684: // Handle a global trigger
! 1685: if ( !element ) {
! 1686: // Only trigger if we've ever bound an event for it
! 1687: if ( this.global[type] )
! 1688: jQuery("*").add([window, document]).trigger(type, data);
! 1689:
! 1690: // Handle triggering a single element
! 1691: } else {
! 1692: var val, ret, fn = jQuery.isFunction( element[ type ] || null ),
! 1693: // Check to see if we need to provide a fake event, or not
! 1694: evt = !data[0] || !data[0].preventDefault;
! 1695:
! 1696: // Pass along a fake event
! 1697: if ( evt )
! 1698: data.unshift( this.fix({ type: type, target: element }) );
! 1699:
! 1700: // Trigger the event
! 1701: if ( jQuery.isFunction( jQuery.data(element, "handle") ) )
! 1702: val = jQuery.data(element, "handle").apply( element, data );
! 1703:
! 1704: // Handle triggering native .onfoo handlers
! 1705: if ( !fn && element["on"+type] && element["on"+type].apply( element, data ) === false )
! 1706: val = false;
! 1707:
! 1708: // Extra functions don't get the custom event object
! 1709: if ( evt )
! 1710: data.shift();
! 1711:
! 1712: // Handle triggering of extra function
! 1713: if ( extra && extra.apply( element, data ) === false )
! 1714: val = false;
! 1715:
! 1716: // Trigger the native events (except for clicks on links)
! 1717: if ( fn && donative !== false && val !== false && !(jQuery.nodeName(element, 'a') && type == "click") ) {
! 1718: this.triggered = true;
! 1719: element[ type ]();
! 1720: }
! 1721:
! 1722: this.triggered = false;
! 1723: }
! 1724:
! 1725: return val;
! 1726: },
! 1727:
! 1728: handle: function(event) {
! 1729: // returned undefined or false
! 1730: var val;
! 1731:
! 1732: // Empty object is for triggered events with no data
! 1733: event = jQuery.event.fix( event || window.event || {} );
! 1734:
! 1735: // Namespaced event handlers
! 1736: var parts = event.type.split(".");
! 1737: event.type = parts[0];
! 1738:
! 1739: var c = jQuery.data(this, "events") && jQuery.data(this, "events")[event.type], args = Array.prototype.slice.call( arguments, 1 );
! 1740: args.unshift( event );
! 1741:
! 1742: for ( var j in c ) {
! 1743: // Pass in a reference to the handler function itself
! 1744: // So that we can later remove it
! 1745: args[0].handler = c[j];
! 1746: args[0].data = c[j].data;
! 1747:
! 1748: // Filter the functions by class
! 1749: if ( !parts[1] || c[j].type == parts[1] ) {
! 1750: var tmp = c[j].apply( this, args );
! 1751:
! 1752: if ( val !== false )
! 1753: val = tmp;
! 1754:
! 1755: if ( tmp === false ) {
! 1756: event.preventDefault();
! 1757: event.stopPropagation();
! 1758: }
! 1759: }
! 1760: }
! 1761:
! 1762: // Clean up added properties in IE to prevent memory leak
! 1763: if (jQuery.browser.msie)
! 1764: event.target = event.preventDefault = event.stopPropagation =
! 1765: event.handler = event.data = null;
! 1766:
! 1767: return val;
! 1768: },
! 1769:
! 1770: fix: function(event) {
! 1771: // store a copy of the original event object
! 1772: // and clone to set read-only properties
! 1773: var originalEvent = event;
! 1774: event = jQuery.extend({}, originalEvent);
! 1775:
! 1776: // add preventDefault and stopPropagation since
! 1777: // they will not work on the clone
! 1778: event.preventDefault = function() {
! 1779: // if preventDefault exists run it on the original event
! 1780: if (originalEvent.preventDefault)
! 1781: originalEvent.preventDefault();
! 1782: // otherwise set the returnValue property of the original event to false (IE)
! 1783: originalEvent.returnValue = false;
! 1784: };
! 1785: event.stopPropagation = function() {
! 1786: // if stopPropagation exists run it on the original event
! 1787: if (originalEvent.stopPropagation)
! 1788: originalEvent.stopPropagation();
! 1789: // otherwise set the cancelBubble property of the original event to true (IE)
! 1790: originalEvent.cancelBubble = true;
! 1791: };
! 1792:
! 1793: // Fix target property, if necessary
! 1794: if ( !event.target && event.srcElement )
! 1795: event.target = event.srcElement;
! 1796:
! 1797: // check if target is a textnode (safari)
! 1798: if (jQuery.browser.safari && event.target.nodeType == 3)
! 1799: event.target = originalEvent.target.parentNode;
! 1800:
! 1801: // Add relatedTarget, if necessary
! 1802: if ( !event.relatedTarget && event.fromElement )
! 1803: event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;
! 1804:
! 1805: // Calculate pageX/Y if missing and clientX/Y available
! 1806: if ( event.pageX == null && event.clientX != null ) {
! 1807: var e = document.documentElement, b = document.body;
! 1808: event.pageX = event.clientX + (e && e.scrollLeft || b.scrollLeft || 0);
! 1809: event.pageY = event.clientY + (e && e.scrollTop || b.scrollTop || 0);
! 1810: }
! 1811:
! 1812: // Add which for key events
! 1813: if ( !event.which && (event.charCode || event.keyCode) )
! 1814: event.which = event.charCode || event.keyCode;
! 1815:
! 1816: // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
! 1817: if ( !event.metaKey && event.ctrlKey )
! 1818: event.metaKey = event.ctrlKey;
! 1819:
! 1820: // Add which for click: 1 == left; 2 == middle; 3 == right
! 1821: // Note: button is not normalized, so don't use it
! 1822: if ( !event.which && event.button )
! 1823: event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
! 1824:
! 1825: return event;
! 1826: }
! 1827: };
! 1828:
! 1829: jQuery.fn.extend({
! 1830: bind: function( type, data, fn ) {
! 1831: return type == "unload" ? this.one(type, data, fn) : this.each(function(){
! 1832: jQuery.event.add( this, type, fn || data, fn && data );
! 1833: });
! 1834: },
! 1835:
! 1836: one: function( type, data, fn ) {
! 1837: return this.each(function(){
! 1838: jQuery.event.add( this, type, function(event) {
! 1839: jQuery(this).unbind(event);
! 1840: return (fn || data).apply( this, arguments);
! 1841: }, fn && data);
! 1842: });
! 1843: },
! 1844:
! 1845: unbind: function( type, fn ) {
! 1846: return this.each(function(){
! 1847: jQuery.event.remove( this, type, fn );
! 1848: });
! 1849: },
! 1850:
! 1851: trigger: function( type, data, fn ) {
! 1852: return this.each(function(){
! 1853: jQuery.event.trigger( type, data, this, true, fn );
! 1854: });
! 1855: },
! 1856:
! 1857: triggerHandler: function( type, data, fn ) {
! 1858: if ( this[0] )
! 1859: return jQuery.event.trigger( type, data, this[0], false, fn );
! 1860: },
! 1861:
! 1862: toggle: function() {
! 1863: // Save reference to arguments for access in closure
! 1864: var a = arguments;
! 1865:
! 1866: return this.click(function(e) {
! 1867: // Figure out which function to execute
! 1868: this.lastToggle = 0 == this.lastToggle ? 1 : 0;
! 1869:
! 1870: // Make sure that clicks stop
! 1871: e.preventDefault();
! 1872:
! 1873: // and execute the function
! 1874: return a[this.lastToggle].apply( this, [e] ) || false;
! 1875: });
! 1876: },
! 1877:
! 1878: hover: function(f,g) {
! 1879:
! 1880: // A private function for handling mouse 'hovering'
! 1881: function handleHover(e) {
! 1882: // Check if mouse(over|out) are still within the same parent element
! 1883: var p = e.relatedTarget;
! 1884:
! 1885: // Traverse up the tree
! 1886: while ( p && p != this ) try { p = p.parentNode; } catch(e) { p = this; };
! 1887:
! 1888: // If we actually just moused on to a sub-element, ignore it
! 1889: if ( p == this ) return false;
! 1890:
! 1891: // Execute the right function
! 1892: return (e.type == "mouseover" ? f : g).apply(this, [e]);
! 1893: }
! 1894:
! 1895: // Bind the function to the two event listeners
! 1896: return this.mouseover(handleHover).mouseout(handleHover);
! 1897: },
! 1898:
! 1899: ready: function(f) {
! 1900: // Attach the listeners
! 1901: bindReady();
! 1902:
! 1903: // If the DOM is already ready
! 1904: if ( jQuery.isReady )
! 1905: // Execute the function immediately
! 1906: f.apply( document, [jQuery] );
! 1907:
! 1908: // Otherwise, remember the function for later
! 1909: else
! 1910: // Add the function to the wait list
! 1911: jQuery.readyList.push( function() { return f.apply(this, [jQuery]); } );
! 1912:
! 1913: return this;
! 1914: }
! 1915: });
! 1916:
! 1917: jQuery.extend({
! 1918: /*
! 1919: * All the code that makes DOM Ready work nicely.
! 1920: */
! 1921: isReady: false,
! 1922: readyList: [],
! 1923:
! 1924: // Handle when the DOM is ready
! 1925: ready: function() {
! 1926: // Make sure that the DOM is not already loaded
! 1927: if ( !jQuery.isReady ) {
! 1928: // Remember that the DOM is ready
! 1929: jQuery.isReady = true;
! 1930:
! 1931: // If there are functions bound, to execute
! 1932: if ( jQuery.readyList ) {
! 1933: // Execute all of them
! 1934: jQuery.each( jQuery.readyList, function(){
! 1935: this.apply( document );
! 1936: });
! 1937:
! 1938: // Reset the list of functions
! 1939: jQuery.readyList = null;
! 1940: }
! 1941: // Remove event listener to avoid memory leak
! 1942: if ( jQuery.browser.mozilla || jQuery.browser.opera )
! 1943: document.removeEventListener( "DOMContentLoaded", jQuery.ready, false );
! 1944:
! 1945: // Remove script element used by IE hack
! 1946: if( !window.frames.length ) // don't remove if frames are present (#1187)
! 1947: jQuery(window).load(function(){ jQuery("#__ie_init").remove(); });
! 1948: }
! 1949: }
! 1950: });
! 1951:
! 1952: jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
! 1953: "mousedown,mouseup,mousemove,mouseover,mouseout,change,select," +
! 1954: "submit,keydown,keypress,keyup,error").split(","), function(i,o){
! 1955:
! 1956: // Handle event binding
! 1957: jQuery.fn[o] = function(f){
! 1958: return f ? this.bind(o, f) : this.trigger(o);
! 1959: };
! 1960: });
! 1961:
! 1962: var readyBound = false;
! 1963:
! 1964: function bindReady(){
! 1965: if ( readyBound ) return;
! 1966: readyBound = true;
! 1967:
! 1968: // If Mozilla is used
! 1969: if ( jQuery.browser.mozilla || jQuery.browser.opera )
! 1970: // Use the handy event callback
! 1971: document.addEventListener( "DOMContentLoaded", jQuery.ready, false );
! 1972:
! 1973: // If IE is used, use the excellent hack by Matthias Miller
! 1974: // http://www.outofhanwell.com/blog/index.php?title=the_window_onload_problem_revisited
! 1975: else if ( jQuery.browser.msie ) {
! 1976:
! 1977: // Only works if you document.write() it
! 1978: document.write("<scr" + "ipt id=__ie_init defer=true " +
! 1979: "src=//:><\/script>");
! 1980:
! 1981: // Use the defer script hack
! 1982: var script = document.getElementById("__ie_init");
! 1983:
! 1984: // script does not exist if jQuery is loaded dynamically
! 1985: if ( script )
! 1986: script.onreadystatechange = function() {
! 1987: if ( this.readyState != "complete" ) return;
! 1988: jQuery.ready();
! 1989: };
! 1990:
! 1991: // Clear from memory
! 1992: script = null;
! 1993:
! 1994: // If Safari is used
! 1995: } else if ( jQuery.browser.safari )
! 1996: // Continually check to see if the document.readyState is valid
! 1997: jQuery.safariTimer = setInterval(function(){
! 1998: // loaded and complete are both valid states
! 1999: if ( document.readyState == "loaded" ||
! 2000: document.readyState == "complete" ) {
! 2001:
! 2002: // If either one are found, remove the timer
! 2003: clearInterval( jQuery.safariTimer );
! 2004: jQuery.safariTimer = null;
! 2005:
! 2006: // and execute any waiting functions
! 2007: jQuery.ready();
! 2008: }
! 2009: }, 10);
! 2010:
! 2011: // A fallback to window.onload, that will always work
! 2012: jQuery.event.add( window, "load", jQuery.ready );
! 2013: }
! 2014: jQuery.fn.extend({
! 2015: load: function( url, params, callback ) {
! 2016: if ( jQuery.isFunction( url ) )
! 2017: return this.bind("load", url);
! 2018:
! 2019: var off = url.indexOf(" ");
! 2020: if ( off >= 0 ) {
! 2021: var selector = url.slice(off, url.length);
! 2022: url = url.slice(0, off);
! 2023: }
! 2024:
! 2025: callback = callback || function(){};
! 2026:
! 2027: // Default to a GET request
! 2028: var type = "GET";
! 2029:
! 2030: // If the second parameter was provided
! 2031: if ( params )
! 2032: // If it's a function
! 2033: if ( jQuery.isFunction( params ) ) {
! 2034: // We assume that it's the callback
! 2035: callback = params;
! 2036: params = null;
! 2037:
! 2038: // Otherwise, build a param string
! 2039: } else {
! 2040: params = jQuery.param( params );
! 2041: type = "POST";
! 2042: }
! 2043:
! 2044: var self = this;
! 2045:
! 2046: // Request the remote document
! 2047: jQuery.ajax({
! 2048: url: url,
! 2049: type: type,
! 2050: data: params,
! 2051: complete: function(res, status){
! 2052: // If successful, inject the HTML into all the matched elements
! 2053: if ( status == "success" || status == "notmodified" )
! 2054: // See if a selector was specified
! 2055: self.html( selector ?
! 2056: // Create a dummy div to hold the results
! 2057: jQuery("<div/>")
! 2058: // inject the contents of the document in, removing the scripts
! 2059: // to avoid any 'Permission Denied' errors in IE
! 2060: .append(res.responseText.replace(/<script(.|\s)*?\/script>/g, ""))
! 2061:
! 2062: // Locate the specified elements
! 2063: .find(selector) :
! 2064:
! 2065: // If not, just inject the full result
! 2066: res.responseText );
! 2067:
! 2068: // Add delay to account for Safari's delay in globalEval
! 2069: setTimeout(function(){
! 2070: self.each( callback, [res.responseText, status, res] );
! 2071: }, 13);
! 2072: }
! 2073: });
! 2074: return this;
! 2075: },
! 2076:
! 2077: serialize: function() {
! 2078: return jQuery.param(this.serializeArray());
! 2079: },
! 2080: serializeArray: function() {
! 2081: return this.map(function(){
! 2082: return jQuery.nodeName(this, "form") ?
! 2083: jQuery.makeArray(this.elements) : this;
! 2084: })
! 2085: .filter(function(){
! 2086: return this.name && !this.disabled &&
! 2087: (this.checked || /select|textarea/i.test(this.nodeName) ||
! 2088: /text|hidden|password/i.test(this.type));
! 2089: })
! 2090: .map(function(i, elem){
! 2091: var val = jQuery(this).val();
! 2092: return val == null ? null :
! 2093: val.constructor == Array ?
! 2094: jQuery.map( val, function(i, val){
! 2095: return {name: elem.name, value: val};
! 2096: }) :
! 2097: {name: elem.name, value: val};
! 2098: }).get();
! 2099: }
! 2100: });
! 2101:
! 2102: // Attach a bunch of functions for handling common AJAX events
! 2103: jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
! 2104: jQuery.fn[o] = function(f){
! 2105: return this.bind(o, f);
! 2106: };
! 2107: });
! 2108:
! 2109: var jsc = (new Date).getTime();
! 2110:
! 2111: jQuery.extend({
! 2112: get: function( url, data, callback, type ) {
! 2113: // shift arguments if data argument was omitted
! 2114: if ( jQuery.isFunction( data ) ) {
! 2115: callback = data;
! 2116: data = null;
! 2117: }
! 2118:
! 2119: return jQuery.ajax({
! 2120: type: "GET",
! 2121: url: url,
! 2122: data: data,
! 2123: success: callback,
! 2124: dataType: type
! 2125: });
! 2126: },
! 2127:
! 2128: getScript: function( url, callback ) {
! 2129: return jQuery.get(url, null, callback, "script");
! 2130: },
! 2131:
! 2132: getJSON: function( url, data, callback ) {
! 2133: return jQuery.get(url, data, callback, "json");
! 2134: },
! 2135:
! 2136: post: function( url, data, callback, type ) {
! 2137: if ( jQuery.isFunction( data ) ) {
! 2138: callback = data;
! 2139: data = {};
! 2140: }
! 2141:
! 2142: return jQuery.ajax({
! 2143: type: "POST",
! 2144: url: url,
! 2145: data: data,
! 2146: success: callback,
! 2147: dataType: type
! 2148: });
! 2149: },
! 2150:
! 2151: ajaxSetup: function( settings ) {
! 2152: jQuery.extend( jQuery.ajaxSettings, settings );
! 2153: },
! 2154:
! 2155: ajaxSettings: {
! 2156: global: true,
! 2157: type: "GET",
! 2158: timeout: 0,
! 2159: contentType: "application/x-www-form-urlencoded",
! 2160: processData: true,
! 2161: async: true,
! 2162: data: null
! 2163: },
! 2164:
! 2165: // Last-Modified header cache for next request
! 2166: lastModified: {},
! 2167:
! 2168: ajax: function( s ) {
! 2169: var jsonp, jsre = /=(\?|%3F)/g, status, data;
! 2170:
! 2171: // Extend the settings, but re-extend 's' so that it can be
! 2172: // checked again later (in the test suite, specifically)
! 2173: s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));
! 2174:
! 2175: // convert data if not already a string
! 2176: if ( s.data && s.processData && typeof s.data != "string" )
! 2177: s.data = jQuery.param(s.data);
! 2178:
! 2179: // Break the data into one single string
! 2180: var q = s.url.indexOf("?");
! 2181: if ( q > -1 ) {
! 2182: s.data = (s.data ? s.data + "&" : "") + s.url.slice(q + 1);
! 2183: s.url = s.url.slice(0, q);
! 2184: }
! 2185:
! 2186: // Handle JSONP Parameter Callbacks
! 2187: if ( s.dataType == "jsonp" ) {
! 2188: if ( !s.data || !s.data.match(jsre) )
! 2189: s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
! 2190: s.dataType = "json";
! 2191: }
! 2192:
! 2193: // Build temporary JSONP function
! 2194: if ( s.dataType == "json" && s.data && s.data.match(jsre) ) {
! 2195: jsonp = "jsonp" + jsc++;
! 2196: s.data = s.data.replace(jsre, "=" + jsonp);
! 2197:
! 2198: // We need to make sure
! 2199: // that a JSONP style response is executed properly
! 2200: s.dataType = "script";
! 2201:
! 2202: // Handle JSONP-style loading
! 2203: window[ jsonp ] = function(tmp){
! 2204: data = tmp;
! 2205: success();
! 2206: // Garbage collect
! 2207: window[ jsonp ] = undefined;
! 2208: try{ delete window[ jsonp ]; } catch(e){}
! 2209: };
! 2210: }
! 2211:
! 2212: if ( s.dataType == "script" && s.cache == null )
! 2213: s.cache = false;
! 2214:
! 2215: if ( s.cache === false && s.type.toLowerCase() == "get" )
! 2216: s.data = (s.data ? s.data + "&" : "") + "_=" + (new Date()).getTime();
! 2217:
! 2218: // If data is available, append data to url for get requests
! 2219: if ( s.data && s.type.toLowerCase() == "get" ) {
! 2220: s.url += "?" + s.data;
! 2221:
! 2222: // IE likes to send both get and post data, prevent this
! 2223: s.data = null;
! 2224: }
! 2225:
! 2226: // Watch for a new set of requests
! 2227: if ( s.global && ! jQuery.active++ )
! 2228: jQuery.event.trigger( "ajaxStart" );
! 2229:
! 2230: // If we're requesting a remote document
! 2231: // and trying to load JSON or Script
! 2232: if ( !s.url.indexOf("http") && s.dataType == "script" ) {
! 2233: var head = document.getElementsByTagName("head")[0];
! 2234: var script = document.createElement("script");
! 2235: script.src = s.url;
! 2236:
! 2237: // Handle Script loading
! 2238: if ( !jsonp && (s.success || s.complete) ) {
! 2239: var done = false;
! 2240:
! 2241: // Attach handlers for all browsers
! 2242: script.onload = script.onreadystatechange = function(){
! 2243: if ( !done && (!this.readyState ||
! 2244: this.readyState == "loaded" || this.readyState == "complete") ) {
! 2245: done = true;
! 2246: success();
! 2247: complete();
! 2248: head.removeChild( script );
! 2249: }
! 2250: };
! 2251: }
! 2252:
! 2253: head.appendChild(script);
! 2254:
! 2255: // We handle everything using the script element injection
! 2256: return;
! 2257: }
! 2258:
! 2259: var requestDone = false;
! 2260:
! 2261: // Create the request object; Microsoft failed to properly
! 2262: // implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
! 2263: var xml = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
! 2264:
! 2265: // Open the socket
! 2266: xml.open(s.type, s.url, s.async);
! 2267:
! 2268: // Set the correct header, if data is being sent
! 2269: if ( s.data )
! 2270: xml.setRequestHeader("Content-Type", s.contentType);
! 2271:
! 2272: // Set the If-Modified-Since header, if ifModified mode.
! 2273: if ( s.ifModified )
! 2274: xml.setRequestHeader("If-Modified-Since",
! 2275: jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
! 2276:
! 2277: // Set header so the called script knows that it's an XMLHttpRequest
! 2278: xml.setRequestHeader("X-Requested-With", "XMLHttpRequest");
! 2279:
! 2280: // Allow custom headers/mimetypes
! 2281: if ( s.beforeSend )
! 2282: s.beforeSend(xml);
! 2283:
! 2284: if ( s.global )
! 2285: jQuery.event.trigger("ajaxSend", [xml, s]);
! 2286:
! 2287: // Wait for a response to come back
! 2288: var onreadystatechange = function(isTimeout){
! 2289: // The transfer is complete and the data is available, or the request timed out
! 2290: if ( !requestDone && xml && (xml.readyState == 4 || isTimeout == "timeout") ) {
! 2291: requestDone = true;
! 2292:
! 2293: // clear poll interval
! 2294: if (ival) {
! 2295: clearInterval(ival);
! 2296: ival = null;
! 2297: }
! 2298:
! 2299: status = isTimeout == "timeout" && "timeout" ||
! 2300: !jQuery.httpSuccess( xml ) && "error" ||
! 2301: s.ifModified && jQuery.httpNotModified( xml, s.url ) && "notmodified" ||
! 2302: "success";
! 2303:
! 2304: if ( status == "success" ) {
! 2305: // Watch for, and catch, XML document parse errors
! 2306: try {
! 2307: // process the data (runs the xml through httpData regardless of callback)
! 2308: data = jQuery.httpData( xml, s.dataType );
! 2309: } catch(e) {
! 2310: status = "parsererror";
! 2311: }
! 2312: }
! 2313:
! 2314: // Make sure that the request was successful or notmodified
! 2315: if ( status == "success" ) {
! 2316: // Cache Last-Modified header, if ifModified mode.
! 2317: var modRes;
! 2318: try {
! 2319: modRes = xml.getResponseHeader("Last-Modified");
! 2320: } catch(e) {} // swallow exception thrown by FF if header is not available
! 2321:
! 2322: if ( s.ifModified && modRes )
! 2323: jQuery.lastModified[s.url] = modRes;
! 2324:
! 2325: // JSONP handles its own success callback
! 2326: if ( !jsonp )
! 2327: success();
! 2328: } else
! 2329: jQuery.handleError(s, xml, status);
! 2330:
! 2331: // Fire the complete handlers
! 2332: complete();
! 2333:
! 2334: // Stop memory leaks
! 2335: if ( s.async )
! 2336: xml = null;
! 2337: }
! 2338: };
! 2339:
! 2340: if ( s.async ) {
! 2341: // don't attach the handler to the request, just poll it instead
! 2342: var ival = setInterval(onreadystatechange, 13);
! 2343:
! 2344: // Timeout checker
! 2345: if ( s.timeout > 0 )
! 2346: setTimeout(function(){
! 2347: // Check to see if the request is still happening
! 2348: if ( xml ) {
! 2349: // Cancel the request
! 2350: xml.abort();
! 2351:
! 2352: if( !requestDone )
! 2353: onreadystatechange( "timeout" );
! 2354: }
! 2355: }, s.timeout);
! 2356: }
! 2357:
! 2358: // Send the data
! 2359: try {
! 2360: xml.send(s.data);
! 2361: } catch(e) {
! 2362: jQuery.handleError(s, xml, null, e);
! 2363: }
! 2364:
! 2365: // firefox 1.5 doesn't fire statechange for sync requests
! 2366: if ( !s.async )
! 2367: onreadystatechange();
! 2368:
! 2369: // return XMLHttpRequest to allow aborting the request etc.
! 2370: return xml;
! 2371:
! 2372: function success(){
! 2373: // If a local callback was specified, fire it and pass it the data
! 2374: if ( s.success )
! 2375: s.success( data, status );
! 2376:
! 2377: // Fire the global callback
! 2378: if ( s.global )
! 2379: jQuery.event.trigger( "ajaxSuccess", [xml, s] );
! 2380: }
! 2381:
! 2382: function complete(){
! 2383: // Process result
! 2384: if ( s.complete )
! 2385: s.complete(xml, status);
! 2386:
! 2387: // The request was completed
! 2388: if ( s.global )
! 2389: jQuery.event.trigger( "ajaxComplete", [xml, s] );
! 2390:
! 2391: // Handle the global AJAX counter
! 2392: if ( s.global && ! --jQuery.active )
! 2393: jQuery.event.trigger( "ajaxStop" );
! 2394: }
! 2395: },
! 2396:
! 2397: handleError: function( s, xml, status, e ) {
! 2398: // If a local callback was specified, fire it
! 2399: if ( s.error ) s.error( xml, status, e );
! 2400:
! 2401: // Fire the global callback
! 2402: if ( s.global )
! 2403: jQuery.event.trigger( "ajaxError", [xml, s, e] );
! 2404: },
! 2405:
! 2406: // Counter for holding the number of active queries
! 2407: active: 0,
! 2408:
! 2409: // Determines if an XMLHttpRequest was successful or not
! 2410: httpSuccess: function( r ) {
! 2411: try {
! 2412: return !r.status && location.protocol == "file:" ||
! 2413: ( r.status >= 200 && r.status < 300 ) || r.status == 304 ||
! 2414: jQuery.browser.safari && r.status == undefined;
! 2415: } catch(e){}
! 2416: return false;
! 2417: },
! 2418:
! 2419: // Determines if an XMLHttpRequest returns NotModified
! 2420: httpNotModified: function( xml, url ) {
! 2421: try {
! 2422: var xmlRes = xml.getResponseHeader("Last-Modified");
! 2423:
! 2424: // Firefox always returns 200. check Last-Modified date
! 2425: return xml.status == 304 || xmlRes == jQuery.lastModified[url] ||
! 2426: jQuery.browser.safari && xml.status == undefined;
! 2427: } catch(e){}
! 2428: return false;
! 2429: },
! 2430:
! 2431: httpData: function( r, type ) {
! 2432: var ct = r.getResponseHeader("content-type");
! 2433: var xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0;
! 2434: var data = xml ? r.responseXML : r.responseText;
! 2435:
! 2436: if ( xml && data.documentElement.tagName == "parsererror" )
! 2437: throw "parsererror";
! 2438:
! 2439: // If the type is "script", eval it in global context
! 2440: if ( type == "script" )
! 2441: jQuery.globalEval( data );
! 2442:
! 2443: // Get the JavaScript object, if JSON is used.
! 2444: if ( type == "json" )
! 2445: data = eval("(" + data + ")");
! 2446:
! 2447: return data;
! 2448: },
! 2449:
! 2450: // Serialize an array of form elements or a set of
! 2451: // key/values into a query string
! 2452: param: function( a ) {
! 2453: var s = [];
! 2454:
! 2455: // If an array was passed in, assume that it is an array
! 2456: // of form elements
! 2457: if ( a.constructor == Array || a.jquery )
! 2458: // Serialize the form elements
! 2459: jQuery.each( a, function(){
! 2460: s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.value ) );
! 2461: });
! 2462:
! 2463: // Otherwise, assume that it's an object of key/value pairs
! 2464: else
! 2465: // Serialize the key/values
! 2466: for ( var j in a )
! 2467: // If the value is an array then the key names need to be repeated
! 2468: if ( a[j] && a[j].constructor == Array )
! 2469: jQuery.each( a[j], function(){
! 2470: s.push( encodeURIComponent(j) + "=" + encodeURIComponent( this ) );
! 2471: });
! 2472: else
! 2473: s.push( encodeURIComponent(j) + "=" + encodeURIComponent( a[j] ) );
! 2474:
! 2475: // Return the resulting serialization
! 2476: return s.join("&").replace(/%20/g, "+");
! 2477: }
! 2478:
! 2479: });
! 2480: jQuery.fn.extend({
! 2481: show: function(speed,callback){
! 2482: return speed ?
! 2483: this.animate({
! 2484: height: "show", width: "show", opacity: "show"
! 2485: }, speed, callback) :
! 2486:
! 2487: this.filter(":hidden").each(function(){
! 2488: this.style.display = this.oldblock ? this.oldblock : "";
! 2489: if ( jQuery.css(this,"display") == "none" )
! 2490: this.style.display = "block";
! 2491: }).end();
! 2492: },
! 2493:
! 2494: hide: function(speed,callback){
! 2495: return speed ?
! 2496: this.animate({
! 2497: height: "hide", width: "hide", opacity: "hide"
! 2498: }, speed, callback) :
! 2499:
! 2500: this.filter(":visible").each(function(){
! 2501: this.oldblock = this.oldblock || jQuery.css(this,"display");
! 2502: if ( this.oldblock == "none" )
! 2503: this.oldblock = "block";
! 2504: this.style.display = "none";
! 2505: }).end();
! 2506: },
! 2507:
! 2508: // Save the old toggle function
! 2509: _toggle: jQuery.fn.toggle,
! 2510:
! 2511: toggle: function( fn, fn2 ){
! 2512: return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?
! 2513: this._toggle( fn, fn2 ) :
! 2514: fn ?
! 2515: this.animate({
! 2516: height: "toggle", width: "toggle", opacity: "toggle"
! 2517: }, fn, fn2) :
! 2518: this.each(function(){
! 2519: jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]();
! 2520: });
! 2521: },
! 2522:
! 2523: slideDown: function(speed,callback){
! 2524: return this.animate({height: "show"}, speed, callback);
! 2525: },
! 2526:
! 2527: slideUp: function(speed,callback){
! 2528: return this.animate({height: "hide"}, speed, callback);
! 2529: },
! 2530:
! 2531: slideToggle: function(speed, callback){
! 2532: return this.animate({height: "toggle"}, speed, callback);
! 2533: },
! 2534:
! 2535: fadeIn: function(speed, callback){
! 2536: return this.animate({opacity: "show"}, speed, callback);
! 2537: },
! 2538:
! 2539: fadeOut: function(speed, callback){
! 2540: return this.animate({opacity: "hide"}, speed, callback);
! 2541: },
! 2542:
! 2543: fadeTo: function(speed,to,callback){
! 2544: return this.animate({opacity: to}, speed, callback);
! 2545: },
! 2546:
! 2547: animate: function( prop, speed, easing, callback ) {
! 2548: var opt = jQuery.speed(speed, easing, callback);
! 2549:
! 2550: return this[ opt.queue === false ? "each" : "queue" ](function(){
! 2551: opt = jQuery.extend({}, opt);
! 2552: var hidden = jQuery(this).is(":hidden"), self = this;
! 2553:
! 2554: for ( var p in prop ) {
! 2555: if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden )
! 2556: return jQuery.isFunction(opt.complete) && opt.complete.apply(this);
! 2557:
! 2558: if ( p == "height" || p == "width" ) {
! 2559: // Store display property
! 2560: opt.display = jQuery.css(this, "display");
! 2561:
! 2562: // Make sure that nothing sneaks out
! 2563: opt.overflow = this.style.overflow;
! 2564: }
! 2565: }
! 2566:
! 2567: if ( opt.overflow != null )
! 2568: this.style.overflow = "hidden";
! 2569:
! 2570: opt.curAnim = jQuery.extend({}, prop);
! 2571:
! 2572: jQuery.each( prop, function(name, val){
! 2573: var e = new jQuery.fx( self, opt, name );
! 2574:
! 2575: if ( /toggle|show|hide/.test(val) )
! 2576: e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop );
! 2577: else {
! 2578: var parts = val.toString().match(/^([+-]?)([\d.]+)(.*)$/),
! 2579: start = e.cur(true) || 0;
! 2580:
! 2581: if ( parts ) {
! 2582: end = parseFloat(parts[2]),
! 2583: unit = parts[3] || "px";
! 2584:
! 2585: // We need to compute starting value
! 2586: if ( unit != "px" ) {
! 2587: self.style[ name ] = end + unit;
! 2588: start = (end / e.cur(true)) * start;
! 2589: self.style[ name ] = start + unit;
! 2590: }
! 2591:
! 2592: // If a +/- token was provided, we're doing a relative animation
! 2593: if ( parts[1] )
! 2594: end = ((parts[1] == "-" ? -1 : 1) * end) + start;
! 2595:
! 2596: e.custom( start, end, unit );
! 2597: } else
! 2598: e.custom( start, val, "" );
! 2599: }
! 2600: });
! 2601:
! 2602: // For JS strict compliance
! 2603: return true;
! 2604: });
! 2605: },
! 2606:
! 2607: queue: function(type, fn){
! 2608: if ( !fn ) {
! 2609: fn = type;
! 2610: type = "fx";
! 2611: }
! 2612:
! 2613: if ( !arguments.length )
! 2614: return queue( this[0], type );
! 2615:
! 2616: return this.each(function(){
! 2617: if ( fn.constructor == Array )
! 2618: queue(this, type, fn);
! 2619: else {
! 2620: queue(this, type).push( fn );
! 2621:
! 2622: if ( queue(this, type).length == 1 )
! 2623: fn.apply(this);
! 2624: }
! 2625: });
! 2626: },
! 2627:
! 2628: stop: function(){
! 2629: var timers = jQuery.timers;
! 2630:
! 2631: return this.each(function(){
! 2632: for ( var i = 0; i < timers.length; i++ )
! 2633: if ( timers[i].elem == this )
! 2634: timers.splice(i--, 1);
! 2635: }).dequeue();
! 2636: }
! 2637:
! 2638: });
! 2639:
! 2640: var queue = function( elem, type, array ) {
! 2641: if ( !elem )
! 2642: return;
! 2643:
! 2644: var q = jQuery.data( elem, type + "queue" );
! 2645:
! 2646: if ( !q || array )
! 2647: q = jQuery.data( elem, type + "queue",
! 2648: array ? jQuery.makeArray(array) : [] );
! 2649:
! 2650: return q;
! 2651: };
! 2652:
! 2653: jQuery.fn.dequeue = function(type){
! 2654: type = type || "fx";
! 2655:
! 2656: return this.each(function(){
! 2657: var q = queue(this, type);
! 2658:
! 2659: q.shift();
! 2660:
! 2661: if ( q.length )
! 2662: q[0].apply( this );
! 2663: });
! 2664: };
! 2665:
! 2666: jQuery.extend({
! 2667:
! 2668: speed: function(speed, easing, fn) {
! 2669: var opt = speed && speed.constructor == Object ? speed : {
! 2670: complete: fn || !fn && easing ||
! 2671: jQuery.isFunction( speed ) && speed,
! 2672: duration: speed,
! 2673: easing: fn && easing || easing && easing.constructor != Function && easing
! 2674: };
! 2675:
! 2676: opt.duration = (opt.duration && opt.duration.constructor == Number ?
! 2677: opt.duration :
! 2678: { slow: 600, fast: 200 }[opt.duration]) || 400;
! 2679:
! 2680: // Queueing
! 2681: opt.old = opt.complete;
! 2682: opt.complete = function(){
! 2683: jQuery(this).dequeue();
! 2684: if ( jQuery.isFunction( opt.old ) )
! 2685: opt.old.apply( this );
! 2686: };
! 2687:
! 2688: return opt;
! 2689: },
! 2690:
! 2691: easing: {
! 2692: linear: function( p, n, firstNum, diff ) {
! 2693: return firstNum + diff * p;
! 2694: },
! 2695: swing: function( p, n, firstNum, diff ) {
! 2696: return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
! 2697: }
! 2698: },
! 2699:
! 2700: timers: [],
! 2701:
! 2702: fx: function( elem, options, prop ){
! 2703: this.options = options;
! 2704: this.elem = elem;
! 2705: this.prop = prop;
! 2706:
! 2707: if ( !options.orig )
! 2708: options.orig = {};
! 2709: }
! 2710:
! 2711: });
! 2712:
! 2713: jQuery.fx.prototype = {
! 2714:
! 2715: // Simple function for setting a style value
! 2716: update: function(){
! 2717: if ( this.options.step )
! 2718: this.options.step.apply( this.elem, [ this.now, this ] );
! 2719:
! 2720: (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
! 2721:
! 2722: // Set display property to block for height/width animations
! 2723: if ( this.prop == "height" || this.prop == "width" )
! 2724: this.elem.style.display = "block";
! 2725: },
! 2726:
! 2727: // Get the current size
! 2728: cur: function(force){
! 2729: if ( this.elem[this.prop] != null && this.elem.style[this.prop] == null )
! 2730: return this.elem[ this.prop ];
! 2731:
! 2732: var r = parseFloat(jQuery.curCSS(this.elem, this.prop, force));
! 2733: return r && r > -10000 ? r : parseFloat(jQuery.css(this.elem, this.prop)) || 0;
! 2734: },
! 2735:
! 2736: // Start an animation from one number to another
! 2737: custom: function(from, to, unit){
! 2738: this.startTime = (new Date()).getTime();
! 2739: this.start = from;
! 2740: this.end = to;
! 2741: this.unit = unit || this.unit || "px";
! 2742: this.now = this.start;
! 2743: this.pos = this.state = 0;
! 2744: this.update();
! 2745:
! 2746: var self = this;
! 2747: function t(){
! 2748: return self.step();
! 2749: }
! 2750:
! 2751: t.elem = this.elem;
! 2752:
! 2753: jQuery.timers.push(t);
! 2754:
! 2755: if ( jQuery.timers.length == 1 ) {
! 2756: var timer = setInterval(function(){
! 2757: var timers = jQuery.timers;
! 2758:
! 2759: for ( var i = 0; i < timers.length; i++ )
! 2760: if ( !timers[i]() )
! 2761: timers.splice(i--, 1);
! 2762:
! 2763: if ( !timers.length )
! 2764: clearInterval( timer );
! 2765: }, 13);
! 2766: }
! 2767: },
! 2768:
! 2769: // Simple 'show' function
! 2770: show: function(){
! 2771: // Remember where we started, so that we can go back to it later
! 2772: this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
! 2773: this.options.show = true;
! 2774:
! 2775: // Begin the animation
! 2776: this.custom(0, this.cur());
! 2777:
! 2778: // Make sure that we start at a small width/height to avoid any
! 2779: // flash of content
! 2780: if ( this.prop == "width" || this.prop == "height" )
! 2781: this.elem.style[this.prop] = "1px";
! 2782:
! 2783: // Start by showing the element
! 2784: jQuery(this.elem).show();
! 2785: },
! 2786:
! 2787: // Simple 'hide' function
! 2788: hide: function(){
! 2789: // Remember where we started, so that we can go back to it later
! 2790: this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
! 2791: this.options.hide = true;
! 2792:
! 2793: // Begin the animation
! 2794: this.custom(this.cur(), 0);
! 2795: },
! 2796:
! 2797: // Each step of an animation
! 2798: step: function(){
! 2799: var t = (new Date()).getTime();
! 2800:
! 2801: if ( t > this.options.duration + this.startTime ) {
! 2802: this.now = this.end;
! 2803: this.pos = this.state = 1;
! 2804: this.update();
! 2805:
! 2806: this.options.curAnim[ this.prop ] = true;
! 2807:
! 2808: var done = true;
! 2809: for ( var i in this.options.curAnim )
! 2810: if ( this.options.curAnim[i] !== true )
! 2811: done = false;
! 2812:
! 2813: if ( done ) {
! 2814: if ( this.options.display != null ) {
! 2815: // Reset the overflow
! 2816: this.elem.style.overflow = this.options.overflow;
! 2817:
! 2818: // Reset the display
! 2819: this.elem.style.display = this.options.display;
! 2820: if ( jQuery.css(this.elem, "display") == "none" )
! 2821: this.elem.style.display = "block";
! 2822: }
! 2823:
! 2824: // Hide the element if the "hide" operation was done
! 2825: if ( this.options.hide )
! 2826: this.elem.style.display = "none";
! 2827:
! 2828: // Reset the properties, if the item has been hidden or shown
! 2829: if ( this.options.hide || this.options.show )
! 2830: for ( var p in this.options.curAnim )
! 2831: jQuery.attr(this.elem.style, p, this.options.orig[p]);
! 2832: }
! 2833:
! 2834: // If a callback was provided, execute it
! 2835: if ( done && jQuery.isFunction( this.options.complete ) )
! 2836: // Execute the complete function
! 2837: this.options.complete.apply( this.elem );
! 2838:
! 2839: return false;
! 2840: } else {
! 2841: var n = t - this.startTime;
! 2842: this.state = n / this.options.duration;
! 2843:
! 2844: // Perform the easing function, defaults to swing
! 2845: this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration);
! 2846: this.now = this.start + ((this.end - this.start) * this.pos);
! 2847:
! 2848: // Perform the next step of the animation
! 2849: this.update();
! 2850: }
! 2851:
! 2852: return true;
! 2853: }
! 2854:
! 2855: };
! 2856:
! 2857: jQuery.fx.step = {
! 2858: scrollLeft: function(fx){
! 2859: fx.elem.scrollLeft = fx.now;
! 2860: },
! 2861:
! 2862: scrollTop: function(fx){
! 2863: fx.elem.scrollTop = fx.now;
! 2864: },
! 2865:
! 2866: opacity: function(fx){
! 2867: jQuery.attr(fx.elem.style, "opacity", fx.now);
! 2868: },
! 2869:
! 2870: _default: function(fx){
! 2871: fx.elem.style[ fx.prop ] = fx.now + fx.unit;
! 2872: }
! 2873: };
! 2874: // The Offset Method
! 2875: // Originally By Brandon Aaron, part of the Dimension Plugin
! 2876: // http://jquery.com/plugins/project/dimensions
! 2877: jQuery.fn.offset = function() {
! 2878: var left = 0, top = 0, elem = this[0], results;
! 2879:
! 2880: if ( elem ) with ( jQuery.browser ) {
! 2881: var absolute = jQuery.css(elem, "position") == "absolute",
! 2882: parent = elem.parentNode,
! 2883: offsetParent = elem.offsetParent,
! 2884: doc = elem.ownerDocument,
! 2885: safari2 = safari && !absolute && parseInt(version) < 522;
! 2886:
! 2887: // Use getBoundingClientRect if available
! 2888: if ( elem.getBoundingClientRect ) {
! 2889: box = elem.getBoundingClientRect();
! 2890:
! 2891: // Add the document scroll offsets
! 2892: add(
! 2893: box.left + Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
! 2894: box.top + Math.max(doc.documentElement.scrollTop, doc.body.scrollTop)
! 2895: );
! 2896:
! 2897: // IE adds the HTML element's border, by default it is medium which is 2px
! 2898: // IE 6 and IE 7 quirks mode the border width is overwritable by the following css html { border: 0; }
! 2899: // IE 7 standards mode, the border is always 2px
! 2900: if ( msie ) {
! 2901: var border = jQuery("html").css("borderWidth");
! 2902: border = (border == "medium" || jQuery.boxModel && parseInt(version) >= 7) && 2 || border;
! 2903: add( -border, -border );
! 2904: }
! 2905:
! 2906: // Otherwise loop through the offsetParents and parentNodes
! 2907: } else {
! 2908:
! 2909: // Initial element offsets
! 2910: add( elem.offsetLeft, elem.offsetTop );
! 2911:
! 2912: // Get parent offsets
! 2913: while ( offsetParent ) {
! 2914: // Add offsetParent offsets
! 2915: add( offsetParent.offsetLeft, offsetParent.offsetTop );
! 2916:
! 2917: // Mozilla and Safari > 2 does not include the border on offset parents
! 2918: // However Mozilla adds the border for table cells
! 2919: if ( mozilla && /^t[d|h]$/i.test(parent.tagName) || !safari2 )
! 2920: border( offsetParent );
! 2921:
! 2922: // Safari <= 2 doubles body offsets with an absolutely positioned element or parent
! 2923: if ( safari2 && !absolute && jQuery.css(offsetParent, "position") == "absolute" )
! 2924: absolute = true;
! 2925:
! 2926: // Get next offsetParent
! 2927: offsetParent = offsetParent.offsetParent;
! 2928: }
! 2929:
! 2930: // Get parent scroll offsets
! 2931: while ( parent.tagName && /^body|html$/i.test(parent.tagName) ) {
! 2932: // Work around opera inline/table scrollLeft/Top bug
! 2933: if ( /^inline|table-row.*$/i.test(jQuery.css(parent, "display")) )
! 2934: // Subtract parent scroll offsets
! 2935: add( -parent.scrollLeft, -parent.scrollTop );
! 2936:
! 2937: // Mozilla does not add the border for a parent that has overflow != visible
! 2938: if ( mozilla && jQuery.css(parent, "overflow") != "visible" )
! 2939: border( parent );
! 2940:
! 2941: // Get next parent
! 2942: parent = parent.parentNode;
! 2943: }
! 2944:
! 2945: // Safari doubles body offsets with an absolutely positioned element or parent
! 2946: if ( safari && absolute )
! 2947: add( -doc.body.offsetLeft, -doc.body.offsetTop );
! 2948: }
! 2949:
! 2950: // Return an object with top and left properties
! 2951: results = { top: top, left: left };
! 2952: }
! 2953:
! 2954: return results;
! 2955:
! 2956: function border(elem) {
! 2957: add( jQuery.css(elem, "borderLeftWidth"), jQuery.css(elem, "borderTopWidth") );
! 2958: }
! 2959:
! 2960: function add(l, t) {
! 2961: left += parseInt(l) || 0;
! 2962: top += parseInt(t) || 0;
! 2963: }
! 2964: };
! 2965: })();
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>