/* * jQuery - New Wave Javascript * * Copyright (c) 2006 John Resig (jquery.com) * Licensed under the MIT License: * http://www.opensource.org/licenses/mit-license.php * * $Date$ * $Rev$ */ // Global undefined variable window.undefined = window.undefined; /** * Create a new jQuery Object * @constructor */ function jQuery(a,c) { // Watch for when a jQuery object is passed in as an arg if ( a && a.jquery ) return a; // If the context is global, return a new object if ( window == this ) return new jQuery(a,c); // Find the matching elements and save them for later this.cur = jQuery.Select( a || jQuery.context || document, c && c.jquery && c.get(0) || c ); } /** * The jQuery query object. */ if ( !window.$ ) var $ = jQuery; /* * Handle support for overriding other $() functions. Way too many libraries * provide this function to simply ignore it and overwrite it. */ else var $ = function(a,c) { // Check to see if this is a possible collision case if ( !c && a.constructor == String && // Make sure that the expression is a colliding one !/[^a-zA-Z0-9_-]/.test(a) && // and that there are no elements that match it // (this is the one truly ambiguous case) !document.getElementsByTagName(a).length ) { // Only return the element if it's found var obj = document.getElementById(a); if ( obj ) return obj; } return jQuery(a,c); }; jQuery.fn = jQuery.prototype = { /** * The current SVN version of jQuery. * * @private * @type String */ jquery: "$Rev$", /** * The number of elements currently matched. * * @type Number */ size: function() { return this.get().length; }, /** * Access the elements matched. If a number is provided, * the Nth element is returned, otherwise, an array of all * matched items is returned. * * @type Array,DOMElement */ get: function(num) { return num == undefined ? this.cur : this.cur[num]; }, each: function(f) { for ( var i = 0; i < this.size(); i++ ) f.apply( this.get(i), [i] ); return this; }, set: function(a,b) { return this.each(function(){ if ( b === undefined ) for ( var j in a ) jQuery.attr(this,j,a[j]); else jQuery.attr(this,a,b); }); }, html: function(h) { return h == undefined && this.size() ? this.get(0).innerHTML : this.set( "innerHTML", h ); }, val: function(h) { return h == undefined && this.size() ? this.get(0).value : this.set( "value", h ); }, text: function(e) { e = e || this.get(); var t = ""; for ( var j = 0; j < e.length; j++ ) for ( var i = 0; i < e[j].childNodes.length; i++ ) t += e[j].childNodes[i].nodeType != 1 ? e[j].childNodes[i].nodeValue : jQuery.fn.text(e[j].childNodes[i].childNodes); return t; }, css: function(a,b) { return a.constructor != String || b ? this.each(function(){ if ( b === undefined ) for ( var j in a ) jQuery.attr(this.style,j,a[j]); else jQuery.attr(this.style,a,b); }) : jQuery.css( this.get(0), a ); }, toggle: function() { return this.each(function(){ var d = jQuery.css(this,"display"); if ( !d || d == "none" ) $(this).show(); else $(this).hide(); }); }, show: function() { return this.each(function(){ this.style.display = this.oldblock ? this.oldblock : ""; if ( jQuery.css(this,"display") == "none" ) this.style.display = "block"; }); }, hide: function() { return this.each(function(){ this.oldblock = jQuery.css(this,"display"); if ( this.oldblock == "none" ) this.oldblock = "block"; this.style.display = "none"; }); }, addClass: function(c) { return this.each(function(){ jQuery.className.add(this,c); }); }, removeClass: function(c) { return this.each(function(){ jQuery.className.remove(this,c); }); }, toggleClass: function(c) { return this.each(function(){ if (jQuery.hasWord(this,c)) jQuery.className.remove(this,c); else jQuery.className.add(this,c); }); }, remove: function() { this.each(function(){this.parentNode.removeChild( this );}); return this.pushStack( [] ); }, wrap: function() { var a = jQuery.clean(arguments); return this.each(function(){ var b = a[0].cloneNode(true); this.parentNode.insertBefore( b, this ); while ( b.firstChild ) b = b.firstChild; b.appendChild( this ); }); }, append: function() { var clone = this.size() > 1; var a = jQuery.clean(arguments); return this.domManip(function(){ for ( var i = 0; i < a.length; i++ ) this.appendChild( clone ? a[i].cloneNode(true) : a[i] ); }); }, appendTo: function() { var a = arguments; return this.each(function(){ for ( var i = 0; i < a.length; i++ ) $(a[i]).append( this ); }); }, prepend: function() { var clone = this.size() > 1; var a = jQuery.clean(arguments); return this.domManip(function(){ for ( var i = a.length - 1; i >= 0; i-- ) this.insertBefore( clone ? a[i].cloneNode(true) : a[i], this.firstChild ); }); }, before: function() { var clone = this.size() > 1; var a = jQuery.clean(arguments); return this.each(function(){ for ( var i = 0; i < a.length; i++ ) this.parentNode.insertBefore( clone ? a[i].cloneNode(true) : a[i], this ); }); }, after: function() { var clone = this.size() > 1; var a = jQuery.clean(arguments); return this.each(function(){ for ( var i = a.length - 1; i >= 0; i-- ) this.parentNode.insertBefore( clone ? a[i].cloneNode(true) : a[i], this.nextSibling ); }); }, empty: function() { return this.each(function(){ while ( this.firstChild ) this.removeChild( this.firstChild ); }); }, bind: function(t,f) { return this.each(function(){jQuery.event.add(this,t,f);}); }, unbind: function(t,f) { return this.each(function(){jQuery.event.remove(this,t,f);}); }, trigger: function(t) { return this.each(function(){jQuery.event.trigger(this,t);}); }, pushStack: function(a) { if ( !this.stack ) this.stack = []; this.stack.unshift( this.cur ); if ( a ) this.cur = a; return this; }, find: function(t) { var ret = []; this.each(function(){ ret = jQuery.merge( ret, jQuery.Select(t,this) ); }); this.pushStack( ret ); return this; }, end: function() { this.cur = this.stack.shift(); return this; }, parent: function(a) { var ret = jQuery.map(this.cur,"d.parentNode"); if ( a ) ret = jQuery.filter(a,ret).r; return this.pushStack(ret); }, parents: function(a) { var ret = jQuery.map(this.cur,jQuery.parents); if ( a ) ret = jQuery.filter(a,ret).r; return this.pushStack(ret); }, siblings: function(a) { // Incorrect, need to exclude current element var ret = jQuery.map(this.cur,jQuery.sibling); if ( a ) ret = jQuery.filter(a,ret).r; return this.pushStack(ret); }, filter: function(t) { return this.pushStack( jQuery.filter(t,this.cur).r ); }, not: function(t) { return this.pushStack( t.constructor == String ? jQuery.filter(t,this.cur,false).r : jQuery.grep(this.cur,function(a){ return a != t; }) ); }, add: function(t) { return this.pushStack( jQuery.merge( this.cur, t.constructor == String ? jQuery.Select(t) : t.constructor == Array ? t : [t] ) ); }, /** * A wrapper function for each() to be used by append and prepend. * Handles cases where you're trying to modify the inner contents of * a table, when you actually need to work with the tbody. * * @member jQuery * @param {String} expr The expression with which to filter * @type Boolean */ is: function(expr) { return jQuery.filter(expr,this.cur).r.length > 0; }, /** * A wrapper function for each() to be used by append and prepend. * Handles cases where you're trying to modify the inner contents of * a table, when you actually need to work with the tbody. * * @private * @member jQuery * @param {Function} fn The function doing the DOM manipulation. * @type jQuery */ domManip: function(fn){ return this.each(function(){ var obj = this; if ( this.nodeName == "TABLE" ) { var tbody = this.getElementsByTagName("tbody"); if ( !tbody.length ) { obj = document.createElement("tbody"); this.appendChild( obj ); } else obj = tbody[0]; } fn.apply( obj ); }); } }; jQuery.className = { add: function(o,c){ if (jQuery.hasWord(o,c)) return; o.className += ( o.className ? " " : "" ) + c; }, remove: function(o,c){ o.className = !c ? "" : o.className.replace( new RegExp("(^|\\s*\\b[^-])"+c+"($|\\b(?=[^-]))", "g"), ""); } }; (function(){ var b = navigator.userAgent.toLowerCase(); // Figure out what browser is being used jQuery.browser = ( /webkit/.test(b) && "safari" ) || ( /opera/.test(b) && "opera" ) || ( /msie/.test(b) && "msie" ) || ( !/compatible/.test(b) && "mozilla" ) || "other"; // Check to see if the W3C box model is being used jQuery.boxModel = ( jQuery.browser != "msie" || document.compatMode == "CSS1Compat" ); })(); jQuery.css = function(e,p) { // Adapted from Prototype 1.4.0 if ( p == "height" || p == "width" ) { // Handle extra width/height provided by the W3C box model var ph = (!jQuery.boxModel ? 0 : jQuery.css(e,"paddingTop") + jQuery.css(e,"paddingBottom") + jQuery.css(e,"borderTopWidth") + jQuery.css(e,"borderBottomWidth")) || 0; var pw = (!jQuery.boxModel ? 0 : jQuery.css(e,"paddingLeft") + jQuery.css(e,"paddingRight") + jQuery.css(e,"borderLeftWidth") + jQuery.css(e,"borderRightWidth")) || 0; var oHeight, oWidth; if (jQuery.css(e,"display") != 'none') { oHeight = e.offsetHeight || parseInt(e.style.height) || 0; oWidth = e.offsetWidth || parseInt(e.style.width) || 0; } else { var els = e.style; var ov = els.visibility; var op = els.position; var od = els.display; els.visibility = "hidden"; els.position = "absolute"; els.display = ""; oHeight = e.clientHeight || parseInt(e.style.height); oWidth = e.clientWidth || parseInt(e.style.width); els.display = od; els.position = op; els.visibility = ov; } return p == "height" ? (oHeight - ph < 0 ? 0 : oHeight - ph) : (oWidth - pw < 0 ? 0 : oWidth - pw); } var r; if (e.style[p]) r = e.style[p]; else if (e.currentStyle) r = e.currentStyle[p]; else if (document.defaultView && document.defaultView.getComputedStyle) { p = p.replace(/([A-Z])/g,"-$1").toLowerCase(); var s = document.defaultView.getComputedStyle(e,""); r = s ? s.getPropertyValue(p) : null; } return /top|right|left|bottom/i.test(p) ? parseFloat( r ) : r; }; jQuery.clean = function(a) { var r = []; for ( var i = 0; i < a.length; i++ ) { if ( a[i].constructor == String ) { if ( !a[i].indexOf("