Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / ui / static / snf / js / lib / jquery-1.7.2.js @ c7aead0b

History | View | Annotate | Download (247 kB)

1 a7dd0415 Kostas Papadimitriou
/*!
2 18059f42 Kostas Papadimitriou
 * jQuery JavaScript Library v1.7.2
3 a7dd0415 Kostas Papadimitriou
 * http://jquery.com/
4 a7dd0415 Kostas Papadimitriou
 *
5 a7dd0415 Kostas Papadimitriou
 * Copyright 2011, John Resig
6 a7dd0415 Kostas Papadimitriou
 * Dual licensed under the MIT or GPL Version 2 licenses.
7 a7dd0415 Kostas Papadimitriou
 * http://jquery.org/license
8 a7dd0415 Kostas Papadimitriou
 *
9 a7dd0415 Kostas Papadimitriou
 * Includes Sizzle.js
10 a7dd0415 Kostas Papadimitriou
 * http://sizzlejs.com/
11 a7dd0415 Kostas Papadimitriou
 * Copyright 2011, The Dojo Foundation
12 a7dd0415 Kostas Papadimitriou
 * Released under the MIT, BSD, and GPL Licenses.
13 a7dd0415 Kostas Papadimitriou
 *
14 18059f42 Kostas Papadimitriou
 * Date: Wed Mar 21 12:46:34 2012 -0700
15 a7dd0415 Kostas Papadimitriou
 */
16 a7dd0415 Kostas Papadimitriou
(function( window, undefined ) {
17 a7dd0415 Kostas Papadimitriou
18 a7dd0415 Kostas Papadimitriou
// Use the correct document accordingly with window argument (sandbox)
19 a7dd0415 Kostas Papadimitriou
var document = window.document,
20 a7dd0415 Kostas Papadimitriou
        navigator = window.navigator,
21 a7dd0415 Kostas Papadimitriou
        location = window.location;
22 a7dd0415 Kostas Papadimitriou
var jQuery = (function() {
23 a7dd0415 Kostas Papadimitriou
24 a7dd0415 Kostas Papadimitriou
// Define a local copy of jQuery
25 a7dd0415 Kostas Papadimitriou
var jQuery = function( selector, context ) {
26 a7dd0415 Kostas Papadimitriou
                // The jQuery object is actually just the init constructor 'enhanced'
27 a7dd0415 Kostas Papadimitriou
                return new jQuery.fn.init( selector, context, rootjQuery );
28 a7dd0415 Kostas Papadimitriou
        },
29 a7dd0415 Kostas Papadimitriou
30 a7dd0415 Kostas Papadimitriou
        // Map over jQuery in case of overwrite
31 a7dd0415 Kostas Papadimitriou
        _jQuery = window.jQuery,
32 a7dd0415 Kostas Papadimitriou
33 a7dd0415 Kostas Papadimitriou
        // Map over the $ in case of overwrite
34 a7dd0415 Kostas Papadimitriou
        _$ = window.$,
35 a7dd0415 Kostas Papadimitriou
36 a7dd0415 Kostas Papadimitriou
        // A central reference to the root jQuery(document)
37 a7dd0415 Kostas Papadimitriou
        rootjQuery,
38 a7dd0415 Kostas Papadimitriou
39 a7dd0415 Kostas Papadimitriou
        // A simple way to check for HTML strings or ID strings
40 a7dd0415 Kostas Papadimitriou
        // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
41 a7dd0415 Kostas Papadimitriou
        quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
42 a7dd0415 Kostas Papadimitriou
43 a7dd0415 Kostas Papadimitriou
        // Check if a string has a non-whitespace character in it
44 a7dd0415 Kostas Papadimitriou
        rnotwhite = /\S/,
45 a7dd0415 Kostas Papadimitriou
46 a7dd0415 Kostas Papadimitriou
        // Used for trimming whitespace
47 a7dd0415 Kostas Papadimitriou
        trimLeft = /^\s+/,
48 a7dd0415 Kostas Papadimitriou
        trimRight = /\s+$/,
49 a7dd0415 Kostas Papadimitriou
50 a7dd0415 Kostas Papadimitriou
        // Match a standalone tag
51 a7dd0415 Kostas Papadimitriou
        rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
52 a7dd0415 Kostas Papadimitriou
53 a7dd0415 Kostas Papadimitriou
        // JSON RegExp
54 a7dd0415 Kostas Papadimitriou
        rvalidchars = /^[\],:{}\s]*$/,
55 a7dd0415 Kostas Papadimitriou
        rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
56 a7dd0415 Kostas Papadimitriou
        rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
57 a7dd0415 Kostas Papadimitriou
        rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
58 a7dd0415 Kostas Papadimitriou
59 a7dd0415 Kostas Papadimitriou
        // Useragent RegExp
60 a7dd0415 Kostas Papadimitriou
        rwebkit = /(webkit)[ \/]([\w.]+)/,
61 a7dd0415 Kostas Papadimitriou
        ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
62 a7dd0415 Kostas Papadimitriou
        rmsie = /(msie) ([\w.]+)/,
63 a7dd0415 Kostas Papadimitriou
        rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
64 a7dd0415 Kostas Papadimitriou
65 a7dd0415 Kostas Papadimitriou
        // Matches dashed string for camelizing
66 a7dd0415 Kostas Papadimitriou
        rdashAlpha = /-([a-z]|[0-9])/ig,
67 a7dd0415 Kostas Papadimitriou
        rmsPrefix = /^-ms-/,
68 a7dd0415 Kostas Papadimitriou
69 a7dd0415 Kostas Papadimitriou
        // Used by jQuery.camelCase as callback to replace()
70 a7dd0415 Kostas Papadimitriou
        fcamelCase = function( all, letter ) {
71 a7dd0415 Kostas Papadimitriou
                return ( letter + "" ).toUpperCase();
72 a7dd0415 Kostas Papadimitriou
        },
73 a7dd0415 Kostas Papadimitriou
74 a7dd0415 Kostas Papadimitriou
        // Keep a UserAgent string for use with jQuery.browser
75 a7dd0415 Kostas Papadimitriou
        userAgent = navigator.userAgent,
76 a7dd0415 Kostas Papadimitriou
77 a7dd0415 Kostas Papadimitriou
        // For matching the engine and version of the browser
78 a7dd0415 Kostas Papadimitriou
        browserMatch,
79 a7dd0415 Kostas Papadimitriou
80 a7dd0415 Kostas Papadimitriou
        // The deferred used on DOM ready
81 a7dd0415 Kostas Papadimitriou
        readyList,
82 a7dd0415 Kostas Papadimitriou
83 a7dd0415 Kostas Papadimitriou
        // The ready event handler
84 a7dd0415 Kostas Papadimitriou
        DOMContentLoaded,
85 a7dd0415 Kostas Papadimitriou
86 a7dd0415 Kostas Papadimitriou
        // Save a reference to some core methods
87 a7dd0415 Kostas Papadimitriou
        toString = Object.prototype.toString,
88 a7dd0415 Kostas Papadimitriou
        hasOwn = Object.prototype.hasOwnProperty,
89 a7dd0415 Kostas Papadimitriou
        push = Array.prototype.push,
90 a7dd0415 Kostas Papadimitriou
        slice = Array.prototype.slice,
91 a7dd0415 Kostas Papadimitriou
        trim = String.prototype.trim,
92 a7dd0415 Kostas Papadimitriou
        indexOf = Array.prototype.indexOf,
93 a7dd0415 Kostas Papadimitriou
94 a7dd0415 Kostas Papadimitriou
        // [[Class]] -> type pairs
95 a7dd0415 Kostas Papadimitriou
        class2type = {};
96 a7dd0415 Kostas Papadimitriou
97 a7dd0415 Kostas Papadimitriou
jQuery.fn = jQuery.prototype = {
98 a7dd0415 Kostas Papadimitriou
        constructor: jQuery,
99 a7dd0415 Kostas Papadimitriou
        init: function( selector, context, rootjQuery ) {
100 a7dd0415 Kostas Papadimitriou
                var match, elem, ret, doc;
101 a7dd0415 Kostas Papadimitriou
102 a7dd0415 Kostas Papadimitriou
                // Handle $(""), $(null), or $(undefined)
103 a7dd0415 Kostas Papadimitriou
                if ( !selector ) {
104 a7dd0415 Kostas Papadimitriou
                        return this;
105 a7dd0415 Kostas Papadimitriou
                }
106 a7dd0415 Kostas Papadimitriou
107 a7dd0415 Kostas Papadimitriou
                // Handle $(DOMElement)
108 a7dd0415 Kostas Papadimitriou
                if ( selector.nodeType ) {
109 a7dd0415 Kostas Papadimitriou
                        this.context = this[0] = selector;
110 a7dd0415 Kostas Papadimitriou
                        this.length = 1;
111 a7dd0415 Kostas Papadimitriou
                        return this;
112 a7dd0415 Kostas Papadimitriou
                }
113 a7dd0415 Kostas Papadimitriou
114 a7dd0415 Kostas Papadimitriou
                // The body element only exists once, optimize finding it
115 a7dd0415 Kostas Papadimitriou
                if ( selector === "body" && !context && document.body ) {
116 a7dd0415 Kostas Papadimitriou
                        this.context = document;
117 a7dd0415 Kostas Papadimitriou
                        this[0] = document.body;
118 a7dd0415 Kostas Papadimitriou
                        this.selector = selector;
119 a7dd0415 Kostas Papadimitriou
                        this.length = 1;
120 a7dd0415 Kostas Papadimitriou
                        return this;
121 a7dd0415 Kostas Papadimitriou
                }
122 a7dd0415 Kostas Papadimitriou
123 a7dd0415 Kostas Papadimitriou
                // Handle HTML strings
124 a7dd0415 Kostas Papadimitriou
                if ( typeof selector === "string" ) {
125 a7dd0415 Kostas Papadimitriou
                        // Are we dealing with HTML string or an ID?
126 a7dd0415 Kostas Papadimitriou
                        if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
127 a7dd0415 Kostas Papadimitriou
                                // Assume that strings that start and end with <> are HTML and skip the regex check
128 a7dd0415 Kostas Papadimitriou
                                match = [ null, selector, null ];
129 a7dd0415 Kostas Papadimitriou
130 a7dd0415 Kostas Papadimitriou
                        } else {
131 a7dd0415 Kostas Papadimitriou
                                match = quickExpr.exec( selector );
132 a7dd0415 Kostas Papadimitriou
                        }
133 a7dd0415 Kostas Papadimitriou
134 a7dd0415 Kostas Papadimitriou
                        // Verify a match, and that no context was specified for #id
135 a7dd0415 Kostas Papadimitriou
                        if ( match && (match[1] || !context) ) {
136 a7dd0415 Kostas Papadimitriou
137 a7dd0415 Kostas Papadimitriou
                                // HANDLE: $(html) -> $(array)
138 a7dd0415 Kostas Papadimitriou
                                if ( match[1] ) {
139 a7dd0415 Kostas Papadimitriou
                                        context = context instanceof jQuery ? context[0] : context;
140 a7dd0415 Kostas Papadimitriou
                                        doc = ( context ? context.ownerDocument || context : document );
141 a7dd0415 Kostas Papadimitriou
142 a7dd0415 Kostas Papadimitriou
                                        // If a single string is passed in and it's a single tag
143 a7dd0415 Kostas Papadimitriou
                                        // just do a createElement and skip the rest
144 a7dd0415 Kostas Papadimitriou
                                        ret = rsingleTag.exec( selector );
145 a7dd0415 Kostas Papadimitriou
146 a7dd0415 Kostas Papadimitriou
                                        if ( ret ) {
147 a7dd0415 Kostas Papadimitriou
                                                if ( jQuery.isPlainObject( context ) ) {
148 a7dd0415 Kostas Papadimitriou
                                                        selector = [ document.createElement( ret[1] ) ];
149 a7dd0415 Kostas Papadimitriou
                                                        jQuery.fn.attr.call( selector, context, true );
150 a7dd0415 Kostas Papadimitriou
151 a7dd0415 Kostas Papadimitriou
                                                } else {
152 a7dd0415 Kostas Papadimitriou
                                                        selector = [ doc.createElement( ret[1] ) ];
153 a7dd0415 Kostas Papadimitriou
                                                }
154 a7dd0415 Kostas Papadimitriou
155 a7dd0415 Kostas Papadimitriou
                                        } else {
156 a7dd0415 Kostas Papadimitriou
                                                ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
157 a7dd0415 Kostas Papadimitriou
                                                selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
158 a7dd0415 Kostas Papadimitriou
                                        }
159 a7dd0415 Kostas Papadimitriou
160 a7dd0415 Kostas Papadimitriou
                                        return jQuery.merge( this, selector );
161 a7dd0415 Kostas Papadimitriou
162 a7dd0415 Kostas Papadimitriou
                                // HANDLE: $("#id")
163 a7dd0415 Kostas Papadimitriou
                                } else {
164 a7dd0415 Kostas Papadimitriou
                                        elem = document.getElementById( match[2] );
165 a7dd0415 Kostas Papadimitriou
166 a7dd0415 Kostas Papadimitriou
                                        // Check parentNode to catch when Blackberry 4.6 returns
167 a7dd0415 Kostas Papadimitriou
                                        // nodes that are no longer in the document #6963
168 a7dd0415 Kostas Papadimitriou
                                        if ( elem && elem.parentNode ) {
169 a7dd0415 Kostas Papadimitriou
                                                // Handle the case where IE and Opera return items
170 a7dd0415 Kostas Papadimitriou
                                                // by name instead of ID
171 a7dd0415 Kostas Papadimitriou
                                                if ( elem.id !== match[2] ) {
172 a7dd0415 Kostas Papadimitriou
                                                        return rootjQuery.find( selector );
173 a7dd0415 Kostas Papadimitriou
                                                }
174 a7dd0415 Kostas Papadimitriou
175 a7dd0415 Kostas Papadimitriou
                                                // Otherwise, we inject the element directly into the jQuery object
176 a7dd0415 Kostas Papadimitriou
                                                this.length = 1;
177 a7dd0415 Kostas Papadimitriou
                                                this[0] = elem;
178 a7dd0415 Kostas Papadimitriou
                                        }
179 a7dd0415 Kostas Papadimitriou
180 a7dd0415 Kostas Papadimitriou
                                        this.context = document;
181 a7dd0415 Kostas Papadimitriou
                                        this.selector = selector;
182 a7dd0415 Kostas Papadimitriou
                                        return this;
183 a7dd0415 Kostas Papadimitriou
                                }
184 a7dd0415 Kostas Papadimitriou
185 a7dd0415 Kostas Papadimitriou
                        // HANDLE: $(expr, $(...))
186 a7dd0415 Kostas Papadimitriou
                        } else if ( !context || context.jquery ) {
187 a7dd0415 Kostas Papadimitriou
                                return ( context || rootjQuery ).find( selector );
188 a7dd0415 Kostas Papadimitriou
189 a7dd0415 Kostas Papadimitriou
                        // HANDLE: $(expr, context)
190 a7dd0415 Kostas Papadimitriou
                        // (which is just equivalent to: $(context).find(expr)
191 a7dd0415 Kostas Papadimitriou
                        } else {
192 a7dd0415 Kostas Papadimitriou
                                return this.constructor( context ).find( selector );
193 a7dd0415 Kostas Papadimitriou
                        }
194 a7dd0415 Kostas Papadimitriou
195 a7dd0415 Kostas Papadimitriou
                // HANDLE: $(function)
196 a7dd0415 Kostas Papadimitriou
                // Shortcut for document ready
197 a7dd0415 Kostas Papadimitriou
                } else if ( jQuery.isFunction( selector ) ) {
198 a7dd0415 Kostas Papadimitriou
                        return rootjQuery.ready( selector );
199 a7dd0415 Kostas Papadimitriou
                }
200 a7dd0415 Kostas Papadimitriou
201 a7dd0415 Kostas Papadimitriou
                if ( selector.selector !== undefined ) {
202 a7dd0415 Kostas Papadimitriou
                        this.selector = selector.selector;
203 a7dd0415 Kostas Papadimitriou
                        this.context = selector.context;
204 a7dd0415 Kostas Papadimitriou
                }
205 a7dd0415 Kostas Papadimitriou
206 a7dd0415 Kostas Papadimitriou
                return jQuery.makeArray( selector, this );
207 a7dd0415 Kostas Papadimitriou
        },
208 a7dd0415 Kostas Papadimitriou
209 a7dd0415 Kostas Papadimitriou
        // Start with an empty selector
210 a7dd0415 Kostas Papadimitriou
        selector: "",
211 a7dd0415 Kostas Papadimitriou
212 a7dd0415 Kostas Papadimitriou
        // The current version of jQuery being used
213 18059f42 Kostas Papadimitriou
        jquery: "1.7.2",
214 a7dd0415 Kostas Papadimitriou
215 a7dd0415 Kostas Papadimitriou
        // The default length of a jQuery object is 0
216 a7dd0415 Kostas Papadimitriou
        length: 0,
217 a7dd0415 Kostas Papadimitriou
218 a7dd0415 Kostas Papadimitriou
        // The number of elements contained in the matched element set
219 a7dd0415 Kostas Papadimitriou
        size: function() {
220 a7dd0415 Kostas Papadimitriou
                return this.length;
221 a7dd0415 Kostas Papadimitriou
        },
222 a7dd0415 Kostas Papadimitriou
223 a7dd0415 Kostas Papadimitriou
        toArray: function() {
224 a7dd0415 Kostas Papadimitriou
                return slice.call( this, 0 );
225 a7dd0415 Kostas Papadimitriou
        },
226 a7dd0415 Kostas Papadimitriou
227 a7dd0415 Kostas Papadimitriou
        // Get the Nth element in the matched element set OR
228 a7dd0415 Kostas Papadimitriou
        // Get the whole matched element set as a clean array
229 a7dd0415 Kostas Papadimitriou
        get: function( num ) {
230 a7dd0415 Kostas Papadimitriou
                return num == null ?
231 a7dd0415 Kostas Papadimitriou
232 a7dd0415 Kostas Papadimitriou
                        // Return a 'clean' array
233 a7dd0415 Kostas Papadimitriou
                        this.toArray() :
234 a7dd0415 Kostas Papadimitriou
235 a7dd0415 Kostas Papadimitriou
                        // Return just the object
236 a7dd0415 Kostas Papadimitriou
                        ( num < 0 ? this[ this.length + num ] : this[ num ] );
237 a7dd0415 Kostas Papadimitriou
        },
238 a7dd0415 Kostas Papadimitriou
239 a7dd0415 Kostas Papadimitriou
        // Take an array of elements and push it onto the stack
240 a7dd0415 Kostas Papadimitriou
        // (returning the new matched element set)
241 a7dd0415 Kostas Papadimitriou
        pushStack: function( elems, name, selector ) {
242 a7dd0415 Kostas Papadimitriou
                // Build a new jQuery matched element set
243 a7dd0415 Kostas Papadimitriou
                var ret = this.constructor();
244 a7dd0415 Kostas Papadimitriou
245 a7dd0415 Kostas Papadimitriou
                if ( jQuery.isArray( elems ) ) {
246 a7dd0415 Kostas Papadimitriou
                        push.apply( ret, elems );
247 a7dd0415 Kostas Papadimitriou
248 a7dd0415 Kostas Papadimitriou
                } else {
249 a7dd0415 Kostas Papadimitriou
                        jQuery.merge( ret, elems );
250 a7dd0415 Kostas Papadimitriou
                }
251 a7dd0415 Kostas Papadimitriou
252 a7dd0415 Kostas Papadimitriou
                // Add the old object onto the stack (as a reference)
253 a7dd0415 Kostas Papadimitriou
                ret.prevObject = this;
254 a7dd0415 Kostas Papadimitriou
255 a7dd0415 Kostas Papadimitriou
                ret.context = this.context;
256 a7dd0415 Kostas Papadimitriou
257 a7dd0415 Kostas Papadimitriou
                if ( name === "find" ) {
258 a7dd0415 Kostas Papadimitriou
                        ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
259 a7dd0415 Kostas Papadimitriou
                } else if ( name ) {
260 a7dd0415 Kostas Papadimitriou
                        ret.selector = this.selector + "." + name + "(" + selector + ")";
261 a7dd0415 Kostas Papadimitriou
                }
262 a7dd0415 Kostas Papadimitriou
263 a7dd0415 Kostas Papadimitriou
                // Return the newly-formed element set
264 a7dd0415 Kostas Papadimitriou
                return ret;
265 a7dd0415 Kostas Papadimitriou
        },
266 a7dd0415 Kostas Papadimitriou
267 a7dd0415 Kostas Papadimitriou
        // Execute a callback for every element in the matched set.
268 a7dd0415 Kostas Papadimitriou
        // (You can seed the arguments with an array of args, but this is
269 a7dd0415 Kostas Papadimitriou
        // only used internally.)
270 a7dd0415 Kostas Papadimitriou
        each: function( callback, args ) {
271 a7dd0415 Kostas Papadimitriou
                return jQuery.each( this, callback, args );
272 a7dd0415 Kostas Papadimitriou
        },
273 a7dd0415 Kostas Papadimitriou
274 a7dd0415 Kostas Papadimitriou
        ready: function( fn ) {
275 a7dd0415 Kostas Papadimitriou
                // Attach the listeners
276 a7dd0415 Kostas Papadimitriou
                jQuery.bindReady();
277 a7dd0415 Kostas Papadimitriou
278 a7dd0415 Kostas Papadimitriou
                // Add the callback
279 a7dd0415 Kostas Papadimitriou
                readyList.add( fn );
280 a7dd0415 Kostas Papadimitriou
281 a7dd0415 Kostas Papadimitriou
                return this;
282 a7dd0415 Kostas Papadimitriou
        },
283 a7dd0415 Kostas Papadimitriou
284 a7dd0415 Kostas Papadimitriou
        eq: function( i ) {
285 a7dd0415 Kostas Papadimitriou
                i = +i;
286 a7dd0415 Kostas Papadimitriou
                return i === -1 ?
287 a7dd0415 Kostas Papadimitriou
                        this.slice( i ) :
288 a7dd0415 Kostas Papadimitriou
                        this.slice( i, i + 1 );
289 a7dd0415 Kostas Papadimitriou
        },
290 a7dd0415 Kostas Papadimitriou
291 a7dd0415 Kostas Papadimitriou
        first: function() {
292 a7dd0415 Kostas Papadimitriou
                return this.eq( 0 );
293 a7dd0415 Kostas Papadimitriou
        },
294 a7dd0415 Kostas Papadimitriou
295 a7dd0415 Kostas Papadimitriou
        last: function() {
296 a7dd0415 Kostas Papadimitriou
                return this.eq( -1 );
297 a7dd0415 Kostas Papadimitriou
        },
298 a7dd0415 Kostas Papadimitriou
299 a7dd0415 Kostas Papadimitriou
        slice: function() {
300 a7dd0415 Kostas Papadimitriou
                return this.pushStack( slice.apply( this, arguments ),
301 a7dd0415 Kostas Papadimitriou
                        "slice", slice.call(arguments).join(",") );
302 a7dd0415 Kostas Papadimitriou
        },
303 a7dd0415 Kostas Papadimitriou
304 a7dd0415 Kostas Papadimitriou
        map: function( callback ) {
305 a7dd0415 Kostas Papadimitriou
                return this.pushStack( jQuery.map(this, function( elem, i ) {
306 a7dd0415 Kostas Papadimitriou
                        return callback.call( elem, i, elem );
307 a7dd0415 Kostas Papadimitriou
                }));
308 a7dd0415 Kostas Papadimitriou
        },
309 a7dd0415 Kostas Papadimitriou
310 a7dd0415 Kostas Papadimitriou
        end: function() {
311 a7dd0415 Kostas Papadimitriou
                return this.prevObject || this.constructor(null);
312 a7dd0415 Kostas Papadimitriou
        },
313 a7dd0415 Kostas Papadimitriou
314 a7dd0415 Kostas Papadimitriou
        // For internal use only.
315 a7dd0415 Kostas Papadimitriou
        // Behaves like an Array's method, not like a jQuery method.
316 a7dd0415 Kostas Papadimitriou
        push: push,
317 a7dd0415 Kostas Papadimitriou
        sort: [].sort,
318 a7dd0415 Kostas Papadimitriou
        splice: [].splice
319 a7dd0415 Kostas Papadimitriou
};
320 a7dd0415 Kostas Papadimitriou
321 a7dd0415 Kostas Papadimitriou
// Give the init function the jQuery prototype for later instantiation
322 a7dd0415 Kostas Papadimitriou
jQuery.fn.init.prototype = jQuery.fn;
323 a7dd0415 Kostas Papadimitriou
324 a7dd0415 Kostas Papadimitriou
jQuery.extend = jQuery.fn.extend = function() {
325 a7dd0415 Kostas Papadimitriou
        var options, name, src, copy, copyIsArray, clone,
326 a7dd0415 Kostas Papadimitriou
                target = arguments[0] || {},
327 a7dd0415 Kostas Papadimitriou
                i = 1,
328 a7dd0415 Kostas Papadimitriou
                length = arguments.length,
329 a7dd0415 Kostas Papadimitriou
                deep = false;
330 a7dd0415 Kostas Papadimitriou
331 a7dd0415 Kostas Papadimitriou
        // Handle a deep copy situation
332 a7dd0415 Kostas Papadimitriou
        if ( typeof target === "boolean" ) {
333 a7dd0415 Kostas Papadimitriou
                deep = target;
334 a7dd0415 Kostas Papadimitriou
                target = arguments[1] || {};
335 a7dd0415 Kostas Papadimitriou
                // skip the boolean and the target
336 a7dd0415 Kostas Papadimitriou
                i = 2;
337 a7dd0415 Kostas Papadimitriou
        }
338 a7dd0415 Kostas Papadimitriou
339 a7dd0415 Kostas Papadimitriou
        // Handle case when target is a string or something (possible in deep copy)
340 a7dd0415 Kostas Papadimitriou
        if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
341 a7dd0415 Kostas Papadimitriou
                target = {};
342 a7dd0415 Kostas Papadimitriou
        }
343 a7dd0415 Kostas Papadimitriou
344 a7dd0415 Kostas Papadimitriou
        // extend jQuery itself if only one argument is passed
345 a7dd0415 Kostas Papadimitriou
        if ( length === i ) {
346 a7dd0415 Kostas Papadimitriou
                target = this;
347 a7dd0415 Kostas Papadimitriou
                --i;
348 a7dd0415 Kostas Papadimitriou
        }
349 a7dd0415 Kostas Papadimitriou
350 a7dd0415 Kostas Papadimitriou
        for ( ; i < length; i++ ) {
351 a7dd0415 Kostas Papadimitriou
                // Only deal with non-null/undefined values
352 a7dd0415 Kostas Papadimitriou
                if ( (options = arguments[ i ]) != null ) {
353 a7dd0415 Kostas Papadimitriou
                        // Extend the base object
354 a7dd0415 Kostas Papadimitriou
                        for ( name in options ) {
355 a7dd0415 Kostas Papadimitriou
                                src = target[ name ];
356 a7dd0415 Kostas Papadimitriou
                                copy = options[ name ];
357 a7dd0415 Kostas Papadimitriou
358 a7dd0415 Kostas Papadimitriou
                                // Prevent never-ending loop
359 a7dd0415 Kostas Papadimitriou
                                if ( target === copy ) {
360 a7dd0415 Kostas Papadimitriou
                                        continue;
361 a7dd0415 Kostas Papadimitriou
                                }
362 a7dd0415 Kostas Papadimitriou
363 a7dd0415 Kostas Papadimitriou
                                // Recurse if we're merging plain objects or arrays
364 a7dd0415 Kostas Papadimitriou
                                if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
365 a7dd0415 Kostas Papadimitriou
                                        if ( copyIsArray ) {
366 a7dd0415 Kostas Papadimitriou
                                                copyIsArray = false;
367 a7dd0415 Kostas Papadimitriou
                                                clone = src && jQuery.isArray(src) ? src : [];
368 a7dd0415 Kostas Papadimitriou
369 a7dd0415 Kostas Papadimitriou
                                        } else {
370 a7dd0415 Kostas Papadimitriou
                                                clone = src && jQuery.isPlainObject(src) ? src : {};
371 a7dd0415 Kostas Papadimitriou
                                        }
372 a7dd0415 Kostas Papadimitriou
373 a7dd0415 Kostas Papadimitriou
                                        // Never move original objects, clone them
374 a7dd0415 Kostas Papadimitriou
                                        target[ name ] = jQuery.extend( deep, clone, copy );
375 a7dd0415 Kostas Papadimitriou
376 a7dd0415 Kostas Papadimitriou
                                // Don't bring in undefined values
377 a7dd0415 Kostas Papadimitriou
                                } else if ( copy !== undefined ) {
378 a7dd0415 Kostas Papadimitriou
                                        target[ name ] = copy;
379 a7dd0415 Kostas Papadimitriou
                                }
380 a7dd0415 Kostas Papadimitriou
                        }
381 a7dd0415 Kostas Papadimitriou
                }
382 a7dd0415 Kostas Papadimitriou
        }
383 a7dd0415 Kostas Papadimitriou
384 a7dd0415 Kostas Papadimitriou
        // Return the modified object
385 a7dd0415 Kostas Papadimitriou
        return target;
386 a7dd0415 Kostas Papadimitriou
};
387 a7dd0415 Kostas Papadimitriou
388 a7dd0415 Kostas Papadimitriou
jQuery.extend({
389 a7dd0415 Kostas Papadimitriou
        noConflict: function( deep ) {
390 a7dd0415 Kostas Papadimitriou
                if ( window.$ === jQuery ) {
391 a7dd0415 Kostas Papadimitriou
                        window.$ = _$;
392 a7dd0415 Kostas Papadimitriou
                }
393 a7dd0415 Kostas Papadimitriou
394 a7dd0415 Kostas Papadimitriou
                if ( deep && window.jQuery === jQuery ) {
395 a7dd0415 Kostas Papadimitriou
                        window.jQuery = _jQuery;
396 a7dd0415 Kostas Papadimitriou
                }
397 a7dd0415 Kostas Papadimitriou
398 a7dd0415 Kostas Papadimitriou
                return jQuery;
399 a7dd0415 Kostas Papadimitriou
        },
400 a7dd0415 Kostas Papadimitriou
401 a7dd0415 Kostas Papadimitriou
        // Is the DOM ready to be used? Set to true once it occurs.
402 a7dd0415 Kostas Papadimitriou
        isReady: false,
403 a7dd0415 Kostas Papadimitriou
404 a7dd0415 Kostas Papadimitriou
        // A counter to track how many items to wait for before
405 a7dd0415 Kostas Papadimitriou
        // the ready event fires. See #6781
406 a7dd0415 Kostas Papadimitriou
        readyWait: 1,
407 a7dd0415 Kostas Papadimitriou
408 a7dd0415 Kostas Papadimitriou
        // Hold (or release) the ready event
409 a7dd0415 Kostas Papadimitriou
        holdReady: function( hold ) {
410 a7dd0415 Kostas Papadimitriou
                if ( hold ) {
411 a7dd0415 Kostas Papadimitriou
                        jQuery.readyWait++;
412 a7dd0415 Kostas Papadimitriou
                } else {
413 a7dd0415 Kostas Papadimitriou
                        jQuery.ready( true );
414 a7dd0415 Kostas Papadimitriou
                }
415 a7dd0415 Kostas Papadimitriou
        },
416 a7dd0415 Kostas Papadimitriou
417 a7dd0415 Kostas Papadimitriou
        // Handle when the DOM is ready
418 a7dd0415 Kostas Papadimitriou
        ready: function( wait ) {
419 a7dd0415 Kostas Papadimitriou
                // Either a released hold or an DOMready/load event and not yet ready
420 a7dd0415 Kostas Papadimitriou
                if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
421 a7dd0415 Kostas Papadimitriou
                        // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
422 a7dd0415 Kostas Papadimitriou
                        if ( !document.body ) {
423 a7dd0415 Kostas Papadimitriou
                                return setTimeout( jQuery.ready, 1 );
424 a7dd0415 Kostas Papadimitriou
                        }
425 a7dd0415 Kostas Papadimitriou
426 a7dd0415 Kostas Papadimitriou
                        // Remember that the DOM is ready
427 a7dd0415 Kostas Papadimitriou
                        jQuery.isReady = true;
428 a7dd0415 Kostas Papadimitriou
429 a7dd0415 Kostas Papadimitriou
                        // If a normal DOM Ready event fired, decrement, and wait if need be
430 a7dd0415 Kostas Papadimitriou
                        if ( wait !== true && --jQuery.readyWait > 0 ) {
431 a7dd0415 Kostas Papadimitriou
                                return;
432 a7dd0415 Kostas Papadimitriou
                        }
433 a7dd0415 Kostas Papadimitriou
434 a7dd0415 Kostas Papadimitriou
                        // If there are functions bound, to execute
435 a7dd0415 Kostas Papadimitriou
                        readyList.fireWith( document, [ jQuery ] );
436 a7dd0415 Kostas Papadimitriou
437 a7dd0415 Kostas Papadimitriou
                        // Trigger any bound ready events
438 a7dd0415 Kostas Papadimitriou
                        if ( jQuery.fn.trigger ) {
439 a7dd0415 Kostas Papadimitriou
                                jQuery( document ).trigger( "ready" ).off( "ready" );
440 a7dd0415 Kostas Papadimitriou
                        }
441 a7dd0415 Kostas Papadimitriou
                }
442 a7dd0415 Kostas Papadimitriou
        },
443 a7dd0415 Kostas Papadimitriou
444 a7dd0415 Kostas Papadimitriou
        bindReady: function() {
445 a7dd0415 Kostas Papadimitriou
                if ( readyList ) {
446 a7dd0415 Kostas Papadimitriou
                        return;
447 a7dd0415 Kostas Papadimitriou
                }
448 a7dd0415 Kostas Papadimitriou
449 a7dd0415 Kostas Papadimitriou
                readyList = jQuery.Callbacks( "once memory" );
450 a7dd0415 Kostas Papadimitriou
451 a7dd0415 Kostas Papadimitriou
                // Catch cases where $(document).ready() is called after the
452 a7dd0415 Kostas Papadimitriou
                // browser event has already occurred.
453 a7dd0415 Kostas Papadimitriou
                if ( document.readyState === "complete" ) {
454 a7dd0415 Kostas Papadimitriou
                        // Handle it asynchronously to allow scripts the opportunity to delay ready
455 a7dd0415 Kostas Papadimitriou
                        return setTimeout( jQuery.ready, 1 );
456 a7dd0415 Kostas Papadimitriou
                }
457 a7dd0415 Kostas Papadimitriou
458 a7dd0415 Kostas Papadimitriou
                // Mozilla, Opera and webkit nightlies currently support this event
459 a7dd0415 Kostas Papadimitriou
                if ( document.addEventListener ) {
460 a7dd0415 Kostas Papadimitriou
                        // Use the handy event callback
461 a7dd0415 Kostas Papadimitriou
                        document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
462 a7dd0415 Kostas Papadimitriou
463 a7dd0415 Kostas Papadimitriou
                        // A fallback to window.onload, that will always work
464 a7dd0415 Kostas Papadimitriou
                        window.addEventListener( "load", jQuery.ready, false );
465 a7dd0415 Kostas Papadimitriou
466 a7dd0415 Kostas Papadimitriou
                // If IE event model is used
467 a7dd0415 Kostas Papadimitriou
                } else if ( document.attachEvent ) {
468 a7dd0415 Kostas Papadimitriou
                        // ensure firing before onload,
469 a7dd0415 Kostas Papadimitriou
                        // maybe late but safe also for iframes
470 a7dd0415 Kostas Papadimitriou
                        document.attachEvent( "onreadystatechange", DOMContentLoaded );
471 a7dd0415 Kostas Papadimitriou
472 a7dd0415 Kostas Papadimitriou
                        // A fallback to window.onload, that will always work
473 a7dd0415 Kostas Papadimitriou
                        window.attachEvent( "onload", jQuery.ready );
474 a7dd0415 Kostas Papadimitriou
475 a7dd0415 Kostas Papadimitriou
                        // If IE and not a frame
476 a7dd0415 Kostas Papadimitriou
                        // continually check to see if the document is ready
477 a7dd0415 Kostas Papadimitriou
                        var toplevel = false;
478 a7dd0415 Kostas Papadimitriou
479 a7dd0415 Kostas Papadimitriou
                        try {
480 a7dd0415 Kostas Papadimitriou
                                toplevel = window.frameElement == null;
481 a7dd0415 Kostas Papadimitriou
                        } catch(e) {}
482 a7dd0415 Kostas Papadimitriou
483 a7dd0415 Kostas Papadimitriou
                        if ( document.documentElement.doScroll && toplevel ) {
484 a7dd0415 Kostas Papadimitriou
                                doScrollCheck();
485 a7dd0415 Kostas Papadimitriou
                        }
486 a7dd0415 Kostas Papadimitriou
                }
487 a7dd0415 Kostas Papadimitriou
        },
488 a7dd0415 Kostas Papadimitriou
489 a7dd0415 Kostas Papadimitriou
        // See test/unit/core.js for details concerning isFunction.
490 a7dd0415 Kostas Papadimitriou
        // Since version 1.3, DOM methods and functions like alert
491 a7dd0415 Kostas Papadimitriou
        // aren't supported. They return false on IE (#2968).
492 a7dd0415 Kostas Papadimitriou
        isFunction: function( obj ) {
493 a7dd0415 Kostas Papadimitriou
                return jQuery.type(obj) === "function";
494 a7dd0415 Kostas Papadimitriou
        },
495 a7dd0415 Kostas Papadimitriou
496 a7dd0415 Kostas Papadimitriou
        isArray: Array.isArray || function( obj ) {
497 a7dd0415 Kostas Papadimitriou
                return jQuery.type(obj) === "array";
498 a7dd0415 Kostas Papadimitriou
        },
499 a7dd0415 Kostas Papadimitriou
500 a7dd0415 Kostas Papadimitriou
        isWindow: function( obj ) {
501 18059f42 Kostas Papadimitriou
                return obj != null && obj == obj.window;
502 a7dd0415 Kostas Papadimitriou
        },
503 a7dd0415 Kostas Papadimitriou
504 a7dd0415 Kostas Papadimitriou
        isNumeric: function( obj ) {
505 a7dd0415 Kostas Papadimitriou
                return !isNaN( parseFloat(obj) ) && isFinite( obj );
506 a7dd0415 Kostas Papadimitriou
        },
507 a7dd0415 Kostas Papadimitriou
508 a7dd0415 Kostas Papadimitriou
        type: function( obj ) {
509 a7dd0415 Kostas Papadimitriou
                return obj == null ?
510 a7dd0415 Kostas Papadimitriou
                        String( obj ) :
511 a7dd0415 Kostas Papadimitriou
                        class2type[ toString.call(obj) ] || "object";
512 a7dd0415 Kostas Papadimitriou
        },
513 a7dd0415 Kostas Papadimitriou
514 a7dd0415 Kostas Papadimitriou
        isPlainObject: function( obj ) {
515 a7dd0415 Kostas Papadimitriou
                // Must be an Object.
516 a7dd0415 Kostas Papadimitriou
                // Because of IE, we also have to check the presence of the constructor property.
517 a7dd0415 Kostas Papadimitriou
                // Make sure that DOM nodes and window objects don't pass through, as well
518 a7dd0415 Kostas Papadimitriou
                if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
519 a7dd0415 Kostas Papadimitriou
                        return false;
520 a7dd0415 Kostas Papadimitriou
                }
521 a7dd0415 Kostas Papadimitriou
522 a7dd0415 Kostas Papadimitriou
                try {
523 a7dd0415 Kostas Papadimitriou
                        // Not own constructor property must be Object
524 a7dd0415 Kostas Papadimitriou
                        if ( obj.constructor &&
525 a7dd0415 Kostas Papadimitriou
                                !hasOwn.call(obj, "constructor") &&
526 a7dd0415 Kostas Papadimitriou
                                !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
527 a7dd0415 Kostas Papadimitriou
                                return false;
528 a7dd0415 Kostas Papadimitriou
                        }
529 a7dd0415 Kostas Papadimitriou
                } catch ( e ) {
530 a7dd0415 Kostas Papadimitriou
                        // IE8,9 Will throw exceptions on certain host objects #9897
531 a7dd0415 Kostas Papadimitriou
                        return false;
532 a7dd0415 Kostas Papadimitriou
                }
533 a7dd0415 Kostas Papadimitriou
534 a7dd0415 Kostas Papadimitriou
                // Own properties are enumerated firstly, so to speed up,
535 a7dd0415 Kostas Papadimitriou
                // if last one is own, then all properties are own.
536 a7dd0415 Kostas Papadimitriou
537 a7dd0415 Kostas Papadimitriou
                var key;
538 a7dd0415 Kostas Papadimitriou
                for ( key in obj ) {}
539 a7dd0415 Kostas Papadimitriou
540 a7dd0415 Kostas Papadimitriou
                return key === undefined || hasOwn.call( obj, key );
541 a7dd0415 Kostas Papadimitriou
        },
542 a7dd0415 Kostas Papadimitriou
543 a7dd0415 Kostas Papadimitriou
        isEmptyObject: function( obj ) {
544 a7dd0415 Kostas Papadimitriou
                for ( var name in obj ) {
545 a7dd0415 Kostas Papadimitriou
                        return false;
546 a7dd0415 Kostas Papadimitriou
                }
547 a7dd0415 Kostas Papadimitriou
                return true;
548 a7dd0415 Kostas Papadimitriou
        },
549 a7dd0415 Kostas Papadimitriou
550 a7dd0415 Kostas Papadimitriou
        error: function( msg ) {
551 a7dd0415 Kostas Papadimitriou
                throw new Error( msg );
552 a7dd0415 Kostas Papadimitriou
        },
553 a7dd0415 Kostas Papadimitriou
554 a7dd0415 Kostas Papadimitriou
        parseJSON: function( data ) {
555 a7dd0415 Kostas Papadimitriou
                if ( typeof data !== "string" || !data ) {
556 a7dd0415 Kostas Papadimitriou
                        return null;
557 a7dd0415 Kostas Papadimitriou
                }
558 a7dd0415 Kostas Papadimitriou
559 a7dd0415 Kostas Papadimitriou
                // Make sure leading/trailing whitespace is removed (IE can't handle it)
560 a7dd0415 Kostas Papadimitriou
                data = jQuery.trim( data );
561 a7dd0415 Kostas Papadimitriou
562 a7dd0415 Kostas Papadimitriou
                // Attempt to parse using the native JSON parser first
563 a7dd0415 Kostas Papadimitriou
                if ( window.JSON && window.JSON.parse ) {
564 a7dd0415 Kostas Papadimitriou
                        return window.JSON.parse( data );
565 a7dd0415 Kostas Papadimitriou
                }
566 a7dd0415 Kostas Papadimitriou
567 a7dd0415 Kostas Papadimitriou
                // Make sure the incoming data is actual JSON
568 a7dd0415 Kostas Papadimitriou
                // Logic borrowed from http://json.org/json2.js
569 a7dd0415 Kostas Papadimitriou
                if ( rvalidchars.test( data.replace( rvalidescape, "@" )
570 a7dd0415 Kostas Papadimitriou
                        .replace( rvalidtokens, "]" )
571 a7dd0415 Kostas Papadimitriou
                        .replace( rvalidbraces, "")) ) {
572 a7dd0415 Kostas Papadimitriou
573 a7dd0415 Kostas Papadimitriou
                        return ( new Function( "return " + data ) )();
574 a7dd0415 Kostas Papadimitriou
575 a7dd0415 Kostas Papadimitriou
                }
576 a7dd0415 Kostas Papadimitriou
                jQuery.error( "Invalid JSON: " + data );
577 a7dd0415 Kostas Papadimitriou
        },
578 a7dd0415 Kostas Papadimitriou
579 a7dd0415 Kostas Papadimitriou
        // Cross-browser xml parsing
580 a7dd0415 Kostas Papadimitriou
        parseXML: function( data ) {
581 18059f42 Kostas Papadimitriou
                if ( typeof data !== "string" || !data ) {
582 18059f42 Kostas Papadimitriou
                        return null;
583 18059f42 Kostas Papadimitriou
                }
584 a7dd0415 Kostas Papadimitriou
                var xml, tmp;
585 a7dd0415 Kostas Papadimitriou
                try {
586 a7dd0415 Kostas Papadimitriou
                        if ( window.DOMParser ) { // Standard
587 a7dd0415 Kostas Papadimitriou
                                tmp = new DOMParser();
588 a7dd0415 Kostas Papadimitriou
                                xml = tmp.parseFromString( data , "text/xml" );
589 a7dd0415 Kostas Papadimitriou
                        } else { // IE
590 a7dd0415 Kostas Papadimitriou
                                xml = new ActiveXObject( "Microsoft.XMLDOM" );
591 a7dd0415 Kostas Papadimitriou
                                xml.async = "false";
592 a7dd0415 Kostas Papadimitriou
                                xml.loadXML( data );
593 a7dd0415 Kostas Papadimitriou
                        }
594 a7dd0415 Kostas Papadimitriou
                } catch( e ) {
595 a7dd0415 Kostas Papadimitriou
                        xml = undefined;
596 a7dd0415 Kostas Papadimitriou
                }
597 a7dd0415 Kostas Papadimitriou
                if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
598 a7dd0415 Kostas Papadimitriou
                        jQuery.error( "Invalid XML: " + data );
599 a7dd0415 Kostas Papadimitriou
                }
600 a7dd0415 Kostas Papadimitriou
                return xml;
601 a7dd0415 Kostas Papadimitriou
        },
602 a7dd0415 Kostas Papadimitriou
603 a7dd0415 Kostas Papadimitriou
        noop: function() {},
604 a7dd0415 Kostas Papadimitriou
605 a7dd0415 Kostas Papadimitriou
        // Evaluates a script in a global context
606 a7dd0415 Kostas Papadimitriou
        // Workarounds based on findings by Jim Driscoll
607 a7dd0415 Kostas Papadimitriou
        // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
608 a7dd0415 Kostas Papadimitriou
        globalEval: function( data ) {
609 a7dd0415 Kostas Papadimitriou
                if ( data && rnotwhite.test( data ) ) {
610 a7dd0415 Kostas Papadimitriou
                        // We use execScript on Internet Explorer
611 a7dd0415 Kostas Papadimitriou
                        // We use an anonymous function so that context is window
612 a7dd0415 Kostas Papadimitriou
                        // rather than jQuery in Firefox
613 a7dd0415 Kostas Papadimitriou
                        ( window.execScript || function( data ) {
614 a7dd0415 Kostas Papadimitriou
                                window[ "eval" ].call( window, data );
615 a7dd0415 Kostas Papadimitriou
                        } )( data );
616 a7dd0415 Kostas Papadimitriou
                }
617 a7dd0415 Kostas Papadimitriou
        },
618 a7dd0415 Kostas Papadimitriou
619 a7dd0415 Kostas Papadimitriou
        // Convert dashed to camelCase; used by the css and data modules
620 a7dd0415 Kostas Papadimitriou
        // Microsoft forgot to hump their vendor prefix (#9572)
621 a7dd0415 Kostas Papadimitriou
        camelCase: function( string ) {
622 a7dd0415 Kostas Papadimitriou
                return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
623 a7dd0415 Kostas Papadimitriou
        },
624 a7dd0415 Kostas Papadimitriou
625 a7dd0415 Kostas Papadimitriou
        nodeName: function( elem, name ) {
626 a7dd0415 Kostas Papadimitriou
                return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
627 a7dd0415 Kostas Papadimitriou
        },
628 a7dd0415 Kostas Papadimitriou
629 a7dd0415 Kostas Papadimitriou
        // args is for internal usage only
630 a7dd0415 Kostas Papadimitriou
        each: function( object, callback, args ) {
631 a7dd0415 Kostas Papadimitriou
                var name, i = 0,
632 a7dd0415 Kostas Papadimitriou
                        length = object.length,
633 a7dd0415 Kostas Papadimitriou
                        isObj = length === undefined || jQuery.isFunction( object );
634 a7dd0415 Kostas Papadimitriou
635 a7dd0415 Kostas Papadimitriou
                if ( args ) {
636 a7dd0415 Kostas Papadimitriou
                        if ( isObj ) {
637 a7dd0415 Kostas Papadimitriou
                                for ( name in object ) {
638 a7dd0415 Kostas Papadimitriou
                                        if ( callback.apply( object[ name ], args ) === false ) {
639 a7dd0415 Kostas Papadimitriou
                                                break;
640 a7dd0415 Kostas Papadimitriou
                                        }
641 a7dd0415 Kostas Papadimitriou
                                }
642 a7dd0415 Kostas Papadimitriou
                        } else {
643 a7dd0415 Kostas Papadimitriou
                                for ( ; i < length; ) {
644 a7dd0415 Kostas Papadimitriou
                                        if ( callback.apply( object[ i++ ], args ) === false ) {
645 a7dd0415 Kostas Papadimitriou
                                                break;
646 a7dd0415 Kostas Papadimitriou
                                        }
647 a7dd0415 Kostas Papadimitriou
                                }
648 a7dd0415 Kostas Papadimitriou
                        }
649 a7dd0415 Kostas Papadimitriou
650 a7dd0415 Kostas Papadimitriou
                // A special, fast, case for the most common use of each
651 a7dd0415 Kostas Papadimitriou
                } else {
652 a7dd0415 Kostas Papadimitriou
                        if ( isObj ) {
653 a7dd0415 Kostas Papadimitriou
                                for ( name in object ) {
654 a7dd0415 Kostas Papadimitriou
                                        if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
655 a7dd0415 Kostas Papadimitriou
                                                break;
656 a7dd0415 Kostas Papadimitriou
                                        }
657 a7dd0415 Kostas Papadimitriou
                                }
658 a7dd0415 Kostas Papadimitriou
                        } else {
659 a7dd0415 Kostas Papadimitriou
                                for ( ; i < length; ) {
660 a7dd0415 Kostas Papadimitriou
                                        if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
661 a7dd0415 Kostas Papadimitriou
                                                break;
662 a7dd0415 Kostas Papadimitriou
                                        }
663 a7dd0415 Kostas Papadimitriou
                                }
664 a7dd0415 Kostas Papadimitriou
                        }
665 a7dd0415 Kostas Papadimitriou
                }
666 a7dd0415 Kostas Papadimitriou
667 a7dd0415 Kostas Papadimitriou
                return object;
668 a7dd0415 Kostas Papadimitriou
        },
669 a7dd0415 Kostas Papadimitriou
670 a7dd0415 Kostas Papadimitriou
        // Use native String.trim function wherever possible
671 a7dd0415 Kostas Papadimitriou
        trim: trim ?
672 a7dd0415 Kostas Papadimitriou
                function( text ) {
673 a7dd0415 Kostas Papadimitriou
                        return text == null ?
674 a7dd0415 Kostas Papadimitriou
                                "" :
675 a7dd0415 Kostas Papadimitriou
                                trim.call( text );
676 a7dd0415 Kostas Papadimitriou
                } :
677 a7dd0415 Kostas Papadimitriou
678 a7dd0415 Kostas Papadimitriou
                // Otherwise use our own trimming functionality
679 a7dd0415 Kostas Papadimitriou
                function( text ) {
680 a7dd0415 Kostas Papadimitriou
                        return text == null ?
681 a7dd0415 Kostas Papadimitriou
                                "" :
682 a7dd0415 Kostas Papadimitriou
                                text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
683 a7dd0415 Kostas Papadimitriou
                },
684 a7dd0415 Kostas Papadimitriou
685 a7dd0415 Kostas Papadimitriou
        // results is for internal usage only
686 a7dd0415 Kostas Papadimitriou
        makeArray: function( array, results ) {
687 a7dd0415 Kostas Papadimitriou
                var ret = results || [];
688 a7dd0415 Kostas Papadimitriou
689 a7dd0415 Kostas Papadimitriou
                if ( array != null ) {
690 a7dd0415 Kostas Papadimitriou
                        // The window, strings (and functions) also have 'length'
691 a7dd0415 Kostas Papadimitriou
                        // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
692 a7dd0415 Kostas Papadimitriou
                        var type = jQuery.type( array );
693 a7dd0415 Kostas Papadimitriou
694 a7dd0415 Kostas Papadimitriou
                        if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
695 a7dd0415 Kostas Papadimitriou
                                push.call( ret, array );
696 a7dd0415 Kostas Papadimitriou
                        } else {
697 a7dd0415 Kostas Papadimitriou
                                jQuery.merge( ret, array );
698 a7dd0415 Kostas Papadimitriou
                        }
699 a7dd0415 Kostas Papadimitriou
                }
700 a7dd0415 Kostas Papadimitriou
701 a7dd0415 Kostas Papadimitriou
                return ret;
702 a7dd0415 Kostas Papadimitriou
        },
703 a7dd0415 Kostas Papadimitriou
704 a7dd0415 Kostas Papadimitriou
        inArray: function( elem, array, i ) {
705 a7dd0415 Kostas Papadimitriou
                var len;
706 a7dd0415 Kostas Papadimitriou
707 a7dd0415 Kostas Papadimitriou
                if ( array ) {
708 a7dd0415 Kostas Papadimitriou
                        if ( indexOf ) {
709 a7dd0415 Kostas Papadimitriou
                                return indexOf.call( array, elem, i );
710 a7dd0415 Kostas Papadimitriou
                        }
711 a7dd0415 Kostas Papadimitriou
712 a7dd0415 Kostas Papadimitriou
                        len = array.length;
713 a7dd0415 Kostas Papadimitriou
                        i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
714 a7dd0415 Kostas Papadimitriou
715 a7dd0415 Kostas Papadimitriou
                        for ( ; i < len; i++ ) {
716 a7dd0415 Kostas Papadimitriou
                                // Skip accessing in sparse arrays
717 a7dd0415 Kostas Papadimitriou
                                if ( i in array && array[ i ] === elem ) {
718 a7dd0415 Kostas Papadimitriou
                                        return i;
719 a7dd0415 Kostas Papadimitriou
                                }
720 a7dd0415 Kostas Papadimitriou
                        }
721 a7dd0415 Kostas Papadimitriou
                }
722 a7dd0415 Kostas Papadimitriou
723 a7dd0415 Kostas Papadimitriou
                return -1;
724 a7dd0415 Kostas Papadimitriou
        },
725 a7dd0415 Kostas Papadimitriou
726 a7dd0415 Kostas Papadimitriou
        merge: function( first, second ) {
727 a7dd0415 Kostas Papadimitriou
                var i = first.length,
728 a7dd0415 Kostas Papadimitriou
                        j = 0;
729 a7dd0415 Kostas Papadimitriou
730 a7dd0415 Kostas Papadimitriou
                if ( typeof second.length === "number" ) {
731 a7dd0415 Kostas Papadimitriou
                        for ( var l = second.length; j < l; j++ ) {
732 a7dd0415 Kostas Papadimitriou
                                first[ i++ ] = second[ j ];
733 a7dd0415 Kostas Papadimitriou
                        }
734 a7dd0415 Kostas Papadimitriou
735 a7dd0415 Kostas Papadimitriou
                } else {
736 a7dd0415 Kostas Papadimitriou
                        while ( second[j] !== undefined ) {
737 a7dd0415 Kostas Papadimitriou
                                first[ i++ ] = second[ j++ ];
738 a7dd0415 Kostas Papadimitriou
                        }
739 a7dd0415 Kostas Papadimitriou
                }
740 a7dd0415 Kostas Papadimitriou
741 a7dd0415 Kostas Papadimitriou
                first.length = i;
742 a7dd0415 Kostas Papadimitriou
743 a7dd0415 Kostas Papadimitriou
                return first;
744 a7dd0415 Kostas Papadimitriou
        },
745 a7dd0415 Kostas Papadimitriou
746 a7dd0415 Kostas Papadimitriou
        grep: function( elems, callback, inv ) {
747 a7dd0415 Kostas Papadimitriou
                var ret = [], retVal;
748 a7dd0415 Kostas Papadimitriou
                inv = !!inv;
749 a7dd0415 Kostas Papadimitriou
750 a7dd0415 Kostas Papadimitriou
                // Go through the array, only saving the items
751 a7dd0415 Kostas Papadimitriou
                // that pass the validator function
752 a7dd0415 Kostas Papadimitriou
                for ( var i = 0, length = elems.length; i < length; i++ ) {
753 a7dd0415 Kostas Papadimitriou
                        retVal = !!callback( elems[ i ], i );
754 a7dd0415 Kostas Papadimitriou
                        if ( inv !== retVal ) {
755 a7dd0415 Kostas Papadimitriou
                                ret.push( elems[ i ] );
756 a7dd0415 Kostas Papadimitriou
                        }
757 a7dd0415 Kostas Papadimitriou
                }
758 a7dd0415 Kostas Papadimitriou
759 a7dd0415 Kostas Papadimitriou
                return ret;
760 a7dd0415 Kostas Papadimitriou
        },
761 a7dd0415 Kostas Papadimitriou
762 a7dd0415 Kostas Papadimitriou
        // arg is for internal usage only
763 a7dd0415 Kostas Papadimitriou
        map: function( elems, callback, arg ) {
764 a7dd0415 Kostas Papadimitriou
                var value, key, ret = [],
765 a7dd0415 Kostas Papadimitriou
                        i = 0,
766 a7dd0415 Kostas Papadimitriou
                        length = elems.length,
767 a7dd0415 Kostas Papadimitriou
                        // jquery objects are treated as arrays
768 a7dd0415 Kostas Papadimitriou
                        isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
769 a7dd0415 Kostas Papadimitriou
770 a7dd0415 Kostas Papadimitriou
                // Go through the array, translating each of the items to their
771 a7dd0415 Kostas Papadimitriou
                if ( isArray ) {
772 a7dd0415 Kostas Papadimitriou
                        for ( ; i < length; i++ ) {
773 a7dd0415 Kostas Papadimitriou
                                value = callback( elems[ i ], i, arg );
774 a7dd0415 Kostas Papadimitriou
775 a7dd0415 Kostas Papadimitriou
                                if ( value != null ) {
776 a7dd0415 Kostas Papadimitriou
                                        ret[ ret.length ] = value;
777 a7dd0415 Kostas Papadimitriou
                                }
778 a7dd0415 Kostas Papadimitriou
                        }
779 a7dd0415 Kostas Papadimitriou
780 a7dd0415 Kostas Papadimitriou
                // Go through every key on the object,
781 a7dd0415 Kostas Papadimitriou
                } else {
782 a7dd0415 Kostas Papadimitriou
                        for ( key in elems ) {
783 a7dd0415 Kostas Papadimitriou
                                value = callback( elems[ key ], key, arg );
784 a7dd0415 Kostas Papadimitriou
785 a7dd0415 Kostas Papadimitriou
                                if ( value != null ) {
786 a7dd0415 Kostas Papadimitriou
                                        ret[ ret.length ] = value;
787 a7dd0415 Kostas Papadimitriou
                                }
788 a7dd0415 Kostas Papadimitriou
                        }
789 a7dd0415 Kostas Papadimitriou
                }
790 a7dd0415 Kostas Papadimitriou
791 a7dd0415 Kostas Papadimitriou
                // Flatten any nested arrays
792 a7dd0415 Kostas Papadimitriou
                return ret.concat.apply( [], ret );
793 a7dd0415 Kostas Papadimitriou
        },
794 a7dd0415 Kostas Papadimitriou
795 a7dd0415 Kostas Papadimitriou
        // A global GUID counter for objects
796 a7dd0415 Kostas Papadimitriou
        guid: 1,
797 a7dd0415 Kostas Papadimitriou
798 a7dd0415 Kostas Papadimitriou
        // Bind a function to a context, optionally partially applying any
799 a7dd0415 Kostas Papadimitriou
        // arguments.
800 a7dd0415 Kostas Papadimitriou
        proxy: function( fn, context ) {
801 a7dd0415 Kostas Papadimitriou
                if ( typeof context === "string" ) {
802 a7dd0415 Kostas Papadimitriou
                        var tmp = fn[ context ];
803 a7dd0415 Kostas Papadimitriou
                        context = fn;
804 a7dd0415 Kostas Papadimitriou
                        fn = tmp;
805 a7dd0415 Kostas Papadimitriou
                }
806 a7dd0415 Kostas Papadimitriou
807 a7dd0415 Kostas Papadimitriou
                // Quick check to determine if target is callable, in the spec
808 a7dd0415 Kostas Papadimitriou
                // this throws a TypeError, but we will just return undefined.
809 a7dd0415 Kostas Papadimitriou
                if ( !jQuery.isFunction( fn ) ) {
810 a7dd0415 Kostas Papadimitriou
                        return undefined;
811 a7dd0415 Kostas Papadimitriou
                }
812 a7dd0415 Kostas Papadimitriou
813 a7dd0415 Kostas Papadimitriou
                // Simulated bind
814 a7dd0415 Kostas Papadimitriou
                var args = slice.call( arguments, 2 ),
815 a7dd0415 Kostas Papadimitriou
                        proxy = function() {
816 a7dd0415 Kostas Papadimitriou
                                return fn.apply( context, args.concat( slice.call( arguments ) ) );
817 a7dd0415 Kostas Papadimitriou
                        };
818 a7dd0415 Kostas Papadimitriou
819 a7dd0415 Kostas Papadimitriou
                // Set the guid of unique handler to the same of original handler, so it can be removed
820 a7dd0415 Kostas Papadimitriou
                proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
821 a7dd0415 Kostas Papadimitriou
822 a7dd0415 Kostas Papadimitriou
                return proxy;
823 a7dd0415 Kostas Papadimitriou
        },
824 a7dd0415 Kostas Papadimitriou
825 a7dd0415 Kostas Papadimitriou
        // Mutifunctional method to get and set values to a collection
826 a7dd0415 Kostas Papadimitriou
        // The value/s can optionally be executed if it's a function
827 18059f42 Kostas Papadimitriou
        access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
828 18059f42 Kostas Papadimitriou
                var exec,
829 18059f42 Kostas Papadimitriou
                        bulk = key == null,
830 18059f42 Kostas Papadimitriou
                        i = 0,
831 18059f42 Kostas Papadimitriou
                        length = elems.length;
832 a7dd0415 Kostas Papadimitriou
833 18059f42 Kostas Papadimitriou
                // Sets many values
834 18059f42 Kostas Papadimitriou
                if ( key && typeof key === "object" ) {
835 18059f42 Kostas Papadimitriou
                        for ( i in key ) {
836 18059f42 Kostas Papadimitriou
                                jQuery.access( elems, fn, i, key[i], 1, emptyGet, value );
837 a7dd0415 Kostas Papadimitriou
                        }
838 18059f42 Kostas Papadimitriou
                        chainable = 1;
839 a7dd0415 Kostas Papadimitriou
840 18059f42 Kostas Papadimitriou
                // Sets one value
841 18059f42 Kostas Papadimitriou
                } else if ( value !== undefined ) {
842 a7dd0415 Kostas Papadimitriou
                        // Optionally, function values get executed if exec is true
843 18059f42 Kostas Papadimitriou
                        exec = pass === undefined && jQuery.isFunction( value );
844 18059f42 Kostas Papadimitriou
845 18059f42 Kostas Papadimitriou
                        if ( bulk ) {
846 18059f42 Kostas Papadimitriou
                                // Bulk operations only iterate when executing function values
847 18059f42 Kostas Papadimitriou
                                if ( exec ) {
848 18059f42 Kostas Papadimitriou
                                        exec = fn;
849 18059f42 Kostas Papadimitriou
                                        fn = function( elem, key, value ) {
850 18059f42 Kostas Papadimitriou
                                                return exec.call( jQuery( elem ), value );
851 18059f42 Kostas Papadimitriou
                                        };
852 18059f42 Kostas Papadimitriou
853 18059f42 Kostas Papadimitriou
                                // Otherwise they run against the entire set
854 18059f42 Kostas Papadimitriou
                                } else {
855 18059f42 Kostas Papadimitriou
                                        fn.call( elems, value );
856 18059f42 Kostas Papadimitriou
                                        fn = null;
857 18059f42 Kostas Papadimitriou
                                }
858 18059f42 Kostas Papadimitriou
                        }
859 a7dd0415 Kostas Papadimitriou
860 18059f42 Kostas Papadimitriou
                        if ( fn ) {
861 18059f42 Kostas Papadimitriou
                                for (; i < length; i++ ) {
862 18059f42 Kostas Papadimitriou
                                        fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
863 18059f42 Kostas Papadimitriou
                                }
864 a7dd0415 Kostas Papadimitriou
                        }
865 a7dd0415 Kostas Papadimitriou
866 18059f42 Kostas Papadimitriou
                        chainable = 1;
867 a7dd0415 Kostas Papadimitriou
                }
868 a7dd0415 Kostas Papadimitriou
869 18059f42 Kostas Papadimitriou
                return chainable ?
870 18059f42 Kostas Papadimitriou
                        elems :
871 18059f42 Kostas Papadimitriou
872 18059f42 Kostas Papadimitriou
                        // Gets
873 18059f42 Kostas Papadimitriou
                        bulk ?
874 18059f42 Kostas Papadimitriou
                                fn.call( elems ) :
875 18059f42 Kostas Papadimitriou
                                length ? fn( elems[0], key ) : emptyGet;
876 a7dd0415 Kostas Papadimitriou
        },
877 a7dd0415 Kostas Papadimitriou
878 a7dd0415 Kostas Papadimitriou
        now: function() {
879 a7dd0415 Kostas Papadimitriou
                return ( new Date() ).getTime();
880 a7dd0415 Kostas Papadimitriou
        },
881 a7dd0415 Kostas Papadimitriou
882 a7dd0415 Kostas Papadimitriou
        // Use of jQuery.browser is frowned upon.
883 a7dd0415 Kostas Papadimitriou
        // More details: http://docs.jquery.com/Utilities/jQuery.browser
884 a7dd0415 Kostas Papadimitriou
        uaMatch: function( ua ) {
885 a7dd0415 Kostas Papadimitriou
                ua = ua.toLowerCase();
886 a7dd0415 Kostas Papadimitriou
887 a7dd0415 Kostas Papadimitriou
                var match = rwebkit.exec( ua ) ||
888 a7dd0415 Kostas Papadimitriou
                        ropera.exec( ua ) ||
889 a7dd0415 Kostas Papadimitriou
                        rmsie.exec( ua ) ||
890 a7dd0415 Kostas Papadimitriou
                        ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
891 a7dd0415 Kostas Papadimitriou
                        [];
892 a7dd0415 Kostas Papadimitriou
893 a7dd0415 Kostas Papadimitriou
                return { browser: match[1] || "", version: match[2] || "0" };
894 a7dd0415 Kostas Papadimitriou
        },
895 a7dd0415 Kostas Papadimitriou
896 a7dd0415 Kostas Papadimitriou
        sub: function() {
897 a7dd0415 Kostas Papadimitriou
                function jQuerySub( selector, context ) {
898 a7dd0415 Kostas Papadimitriou
                        return new jQuerySub.fn.init( selector, context );
899 a7dd0415 Kostas Papadimitriou
                }
900 a7dd0415 Kostas Papadimitriou
                jQuery.extend( true, jQuerySub, this );
901 a7dd0415 Kostas Papadimitriou
                jQuerySub.superclass = this;
902 a7dd0415 Kostas Papadimitriou
                jQuerySub.fn = jQuerySub.prototype = this();
903 a7dd0415 Kostas Papadimitriou
                jQuerySub.fn.constructor = jQuerySub;
904 a7dd0415 Kostas Papadimitriou
                jQuerySub.sub = this.sub;
905 a7dd0415 Kostas Papadimitriou
                jQuerySub.fn.init = function init( selector, context ) {
906 a7dd0415 Kostas Papadimitriou
                        if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
907 a7dd0415 Kostas Papadimitriou
                                context = jQuerySub( context );
908 a7dd0415 Kostas Papadimitriou
                        }
909 a7dd0415 Kostas Papadimitriou
910 a7dd0415 Kostas Papadimitriou
                        return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
911 a7dd0415 Kostas Papadimitriou
                };
912 a7dd0415 Kostas Papadimitriou
                jQuerySub.fn.init.prototype = jQuerySub.fn;
913 a7dd0415 Kostas Papadimitriou
                var rootjQuerySub = jQuerySub(document);
914 a7dd0415 Kostas Papadimitriou
                return jQuerySub;
915 a7dd0415 Kostas Papadimitriou
        },
916 a7dd0415 Kostas Papadimitriou
917 a7dd0415 Kostas Papadimitriou
        browser: {}
918 a7dd0415 Kostas Papadimitriou
});
919 a7dd0415 Kostas Papadimitriou
920 a7dd0415 Kostas Papadimitriou
// Populate the class2type map
921 a7dd0415 Kostas Papadimitriou
jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
922 a7dd0415 Kostas Papadimitriou
        class2type[ "[object " + name + "]" ] = name.toLowerCase();
923 a7dd0415 Kostas Papadimitriou
});
924 a7dd0415 Kostas Papadimitriou
925 a7dd0415 Kostas Papadimitriou
browserMatch = jQuery.uaMatch( userAgent );
926 a7dd0415 Kostas Papadimitriou
if ( browserMatch.browser ) {
927 a7dd0415 Kostas Papadimitriou
        jQuery.browser[ browserMatch.browser ] = true;
928 a7dd0415 Kostas Papadimitriou
        jQuery.browser.version = browserMatch.version;
929 a7dd0415 Kostas Papadimitriou
}
930 a7dd0415 Kostas Papadimitriou
931 a7dd0415 Kostas Papadimitriou
// Deprecated, use jQuery.browser.webkit instead
932 a7dd0415 Kostas Papadimitriou
if ( jQuery.browser.webkit ) {
933 a7dd0415 Kostas Papadimitriou
        jQuery.browser.safari = true;
934 a7dd0415 Kostas Papadimitriou
}
935 a7dd0415 Kostas Papadimitriou
936 a7dd0415 Kostas Papadimitriou
// IE doesn't match non-breaking spaces with \s
937 a7dd0415 Kostas Papadimitriou
if ( rnotwhite.test( "\xA0" ) ) {
938 a7dd0415 Kostas Papadimitriou
        trimLeft = /^[\s\xA0]+/;
939 a7dd0415 Kostas Papadimitriou
        trimRight = /[\s\xA0]+$/;
940 a7dd0415 Kostas Papadimitriou
}
941 a7dd0415 Kostas Papadimitriou
942 a7dd0415 Kostas Papadimitriou
// All jQuery objects should point back to these
943 a7dd0415 Kostas Papadimitriou
rootjQuery = jQuery(document);
944 a7dd0415 Kostas Papadimitriou
945 a7dd0415 Kostas Papadimitriou
// Cleanup functions for the document ready method
946 a7dd0415 Kostas Papadimitriou
if ( document.addEventListener ) {
947 a7dd0415 Kostas Papadimitriou
        DOMContentLoaded = function() {
948 a7dd0415 Kostas Papadimitriou
                document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
949 a7dd0415 Kostas Papadimitriou
                jQuery.ready();
950 a7dd0415 Kostas Papadimitriou
        };
951 a7dd0415 Kostas Papadimitriou
952 a7dd0415 Kostas Papadimitriou
} else if ( document.attachEvent ) {
953 a7dd0415 Kostas Papadimitriou
        DOMContentLoaded = function() {
954 a7dd0415 Kostas Papadimitriou
                // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
955 a7dd0415 Kostas Papadimitriou
                if ( document.readyState === "complete" ) {
956 a7dd0415 Kostas Papadimitriou
                        document.detachEvent( "onreadystatechange", DOMContentLoaded );
957 a7dd0415 Kostas Papadimitriou
                        jQuery.ready();
958 a7dd0415 Kostas Papadimitriou
                }
959 a7dd0415 Kostas Papadimitriou
        };
960 a7dd0415 Kostas Papadimitriou
}
961 a7dd0415 Kostas Papadimitriou
962 a7dd0415 Kostas Papadimitriou
// The DOM ready check for Internet Explorer
963 a7dd0415 Kostas Papadimitriou
function doScrollCheck() {
964 a7dd0415 Kostas Papadimitriou
        if ( jQuery.isReady ) {
965 a7dd0415 Kostas Papadimitriou
                return;
966 a7dd0415 Kostas Papadimitriou
        }
967 a7dd0415 Kostas Papadimitriou
968 a7dd0415 Kostas Papadimitriou
        try {
969 a7dd0415 Kostas Papadimitriou
                // If IE is used, use the trick by Diego Perini
970 a7dd0415 Kostas Papadimitriou
                // http://javascript.nwbox.com/IEContentLoaded/
971 a7dd0415 Kostas Papadimitriou
                document.documentElement.doScroll("left");
972 a7dd0415 Kostas Papadimitriou
        } catch(e) {
973 a7dd0415 Kostas Papadimitriou
                setTimeout( doScrollCheck, 1 );
974 a7dd0415 Kostas Papadimitriou
                return;
975 a7dd0415 Kostas Papadimitriou
        }
976 a7dd0415 Kostas Papadimitriou
977 a7dd0415 Kostas Papadimitriou
        // and execute any waiting functions
978 a7dd0415 Kostas Papadimitriou
        jQuery.ready();
979 a7dd0415 Kostas Papadimitriou
}
980 a7dd0415 Kostas Papadimitriou
981 a7dd0415 Kostas Papadimitriou
return jQuery;
982 a7dd0415 Kostas Papadimitriou
983 a7dd0415 Kostas Papadimitriou
})();
984 a7dd0415 Kostas Papadimitriou
985 a7dd0415 Kostas Papadimitriou
986 a7dd0415 Kostas Papadimitriou
// String to Object flags format cache
987 a7dd0415 Kostas Papadimitriou
var flagsCache = {};
988 a7dd0415 Kostas Papadimitriou
989 a7dd0415 Kostas Papadimitriou
// Convert String-formatted flags into Object-formatted ones and store in cache
990 a7dd0415 Kostas Papadimitriou
function createFlags( flags ) {
991 a7dd0415 Kostas Papadimitriou
        var object = flagsCache[ flags ] = {},
992 a7dd0415 Kostas Papadimitriou
                i, length;
993 a7dd0415 Kostas Papadimitriou
        flags = flags.split( /\s+/ );
994 a7dd0415 Kostas Papadimitriou
        for ( i = 0, length = flags.length; i < length; i++ ) {
995 a7dd0415 Kostas Papadimitriou
                object[ flags[i] ] = true;
996 a7dd0415 Kostas Papadimitriou
        }
997 a7dd0415 Kostas Papadimitriou
        return object;
998 a7dd0415 Kostas Papadimitriou
}
999 a7dd0415 Kostas Papadimitriou
1000 a7dd0415 Kostas Papadimitriou
/*
1001 a7dd0415 Kostas Papadimitriou
 * Create a callback list using the following parameters:
1002 a7dd0415 Kostas Papadimitriou
 *
1003 a7dd0415 Kostas Papadimitriou
 *        flags:        an optional list of space-separated flags that will change how
1004 a7dd0415 Kostas Papadimitriou
 *                        the callback list behaves
1005 a7dd0415 Kostas Papadimitriou
 *
1006 a7dd0415 Kostas Papadimitriou
 * By default a callback list will act like an event callback list and can be
1007 a7dd0415 Kostas Papadimitriou
 * "fired" multiple times.
1008 a7dd0415 Kostas Papadimitriou
 *
1009 a7dd0415 Kostas Papadimitriou
 * Possible flags:
1010 a7dd0415 Kostas Papadimitriou
 *
1011 a7dd0415 Kostas Papadimitriou
 *        once:                        will ensure the callback list can only be fired once (like a Deferred)
1012 a7dd0415 Kostas Papadimitriou
 *
1013 a7dd0415 Kostas Papadimitriou
 *        memory:                        will keep track of previous values and will call any callback added
1014 a7dd0415 Kostas Papadimitriou
 *                                        after the list has been fired right away with the latest "memorized"
1015 a7dd0415 Kostas Papadimitriou
 *                                        values (like a Deferred)
1016 a7dd0415 Kostas Papadimitriou
 *
1017 a7dd0415 Kostas Papadimitriou
 *        unique:                        will ensure a callback can only be added once (no duplicate in the list)
1018 a7dd0415 Kostas Papadimitriou
 *
1019 a7dd0415 Kostas Papadimitriou
 *        stopOnFalse:        interrupt callings when a callback returns false
1020 a7dd0415 Kostas Papadimitriou
 *
1021 a7dd0415 Kostas Papadimitriou
 */
1022 a7dd0415 Kostas Papadimitriou
jQuery.Callbacks = function( flags ) {
1023 a7dd0415 Kostas Papadimitriou
1024 a7dd0415 Kostas Papadimitriou
        // Convert flags from String-formatted to Object-formatted
1025 a7dd0415 Kostas Papadimitriou
        // (we check in cache first)
1026 a7dd0415 Kostas Papadimitriou
        flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
1027 a7dd0415 Kostas Papadimitriou
1028 a7dd0415 Kostas Papadimitriou
        var // Actual callback list
1029 a7dd0415 Kostas Papadimitriou
                list = [],
1030 a7dd0415 Kostas Papadimitriou
                // Stack of fire calls for repeatable lists
1031 a7dd0415 Kostas Papadimitriou
                stack = [],
1032 a7dd0415 Kostas Papadimitriou
                // Last fire value (for non-forgettable lists)
1033 a7dd0415 Kostas Papadimitriou
                memory,
1034 18059f42 Kostas Papadimitriou
                // Flag to know if list was already fired
1035 18059f42 Kostas Papadimitriou
                fired,
1036 a7dd0415 Kostas Papadimitriou
                // Flag to know if list is currently firing
1037 a7dd0415 Kostas Papadimitriou
                firing,
1038 a7dd0415 Kostas Papadimitriou
                // First callback to fire (used internally by add and fireWith)
1039 a7dd0415 Kostas Papadimitriou
                firingStart,
1040 a7dd0415 Kostas Papadimitriou
                // End of the loop when firing
1041 a7dd0415 Kostas Papadimitriou
                firingLength,
1042 a7dd0415 Kostas Papadimitriou
                // Index of currently firing callback (modified by remove if needed)
1043 a7dd0415 Kostas Papadimitriou
                firingIndex,
1044 a7dd0415 Kostas Papadimitriou
                // Add one or several callbacks to the list
1045 a7dd0415 Kostas Papadimitriou
                add = function( args ) {
1046 a7dd0415 Kostas Papadimitriou
                        var i,
1047 a7dd0415 Kostas Papadimitriou
                                length,
1048 a7dd0415 Kostas Papadimitriou
                                elem,
1049 a7dd0415 Kostas Papadimitriou
                                type,
1050 a7dd0415 Kostas Papadimitriou
                                actual;
1051 a7dd0415 Kostas Papadimitriou
                        for ( i = 0, length = args.length; i < length; i++ ) {
1052 a7dd0415 Kostas Papadimitriou
                                elem = args[ i ];
1053 a7dd0415 Kostas Papadimitriou
                                type = jQuery.type( elem );
1054 a7dd0415 Kostas Papadimitriou
                                if ( type === "array" ) {
1055 a7dd0415 Kostas Papadimitriou
                                        // Inspect recursively
1056 a7dd0415 Kostas Papadimitriou
                                        add( elem );
1057 a7dd0415 Kostas Papadimitriou
                                } else if ( type === "function" ) {
1058 a7dd0415 Kostas Papadimitriou
                                        // Add if not in unique mode and callback is not in
1059 a7dd0415 Kostas Papadimitriou
                                        if ( !flags.unique || !self.has( elem ) ) {
1060 a7dd0415 Kostas Papadimitriou
                                                list.push( elem );
1061 a7dd0415 Kostas Papadimitriou
                                        }
1062 a7dd0415 Kostas Papadimitriou
                                }
1063 a7dd0415 Kostas Papadimitriou
                        }
1064 a7dd0415 Kostas Papadimitriou
                },
1065 a7dd0415 Kostas Papadimitriou
                // Fire callbacks
1066 a7dd0415 Kostas Papadimitriou
                fire = function( context, args ) {
1067 a7dd0415 Kostas Papadimitriou
                        args = args || [];
1068 a7dd0415 Kostas Papadimitriou
                        memory = !flags.memory || [ context, args ];
1069 18059f42 Kostas Papadimitriou
                        fired = true;
1070 a7dd0415 Kostas Papadimitriou
                        firing = true;
1071 a7dd0415 Kostas Papadimitriou
                        firingIndex = firingStart || 0;
1072 a7dd0415 Kostas Papadimitriou
                        firingStart = 0;
1073 a7dd0415 Kostas Papadimitriou
                        firingLength = list.length;
1074 a7dd0415 Kostas Papadimitriou
                        for ( ; list && firingIndex < firingLength; firingIndex++ ) {
1075 a7dd0415 Kostas Papadimitriou
                                if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
1076 a7dd0415 Kostas Papadimitriou
                                        memory = true; // Mark as halted
1077 a7dd0415 Kostas Papadimitriou
                                        break;
1078 a7dd0415 Kostas Papadimitriou
                                }
1079 a7dd0415 Kostas Papadimitriou
                        }
1080 a7dd0415 Kostas Papadimitriou
                        firing = false;
1081 a7dd0415 Kostas Papadimitriou
                        if ( list ) {
1082 a7dd0415 Kostas Papadimitriou
                                if ( !flags.once ) {
1083 a7dd0415 Kostas Papadimitriou
                                        if ( stack && stack.length ) {
1084 a7dd0415 Kostas Papadimitriou
                                                memory = stack.shift();
1085 a7dd0415 Kostas Papadimitriou
                                                self.fireWith( memory[ 0 ], memory[ 1 ] );
1086 a7dd0415 Kostas Papadimitriou
                                        }
1087 a7dd0415 Kostas Papadimitriou
                                } else if ( memory === true ) {
1088 a7dd0415 Kostas Papadimitriou
                                        self.disable();
1089 a7dd0415 Kostas Papadimitriou
                                } else {
1090 a7dd0415 Kostas Papadimitriou
                                        list = [];
1091 a7dd0415 Kostas Papadimitriou
                                }
1092 a7dd0415 Kostas Papadimitriou
                        }
1093 a7dd0415 Kostas Papadimitriou
                },
1094 a7dd0415 Kostas Papadimitriou
                // Actual Callbacks object
1095 a7dd0415 Kostas Papadimitriou
                self = {
1096 a7dd0415 Kostas Papadimitriou
                        // Add a callback or a collection of callbacks to the list
1097 a7dd0415 Kostas Papadimitriou
                        add: function() {
1098 a7dd0415 Kostas Papadimitriou
                                if ( list ) {
1099 a7dd0415 Kostas Papadimitriou
                                        var length = list.length;
1100 a7dd0415 Kostas Papadimitriou
                                        add( arguments );
1101 a7dd0415 Kostas Papadimitriou
                                        // Do we need to add the callbacks to the
1102 a7dd0415 Kostas Papadimitriou
                                        // current firing batch?
1103 a7dd0415 Kostas Papadimitriou
                                        if ( firing ) {
1104 a7dd0415 Kostas Papadimitriou
                                                firingLength = list.length;
1105 a7dd0415 Kostas Papadimitriou
                                        // With memory, if we're not firing then
1106 a7dd0415 Kostas Papadimitriou
                                        // we should call right away, unless previous
1107 a7dd0415 Kostas Papadimitriou
                                        // firing was halted (stopOnFalse)
1108 a7dd0415 Kostas Papadimitriou
                                        } else if ( memory && memory !== true ) {
1109 a7dd0415 Kostas Papadimitriou
                                                firingStart = length;
1110 a7dd0415 Kostas Papadimitriou
                                                fire( memory[ 0 ], memory[ 1 ] );
1111 a7dd0415 Kostas Papadimitriou
                                        }
1112 a7dd0415 Kostas Papadimitriou
                                }
1113 a7dd0415 Kostas Papadimitriou
                                return this;
1114 a7dd0415 Kostas Papadimitriou
                        },
1115 a7dd0415 Kostas Papadimitriou
                        // Remove a callback from the list
1116 a7dd0415 Kostas Papadimitriou
                        remove: function() {
1117 a7dd0415 Kostas Papadimitriou
                                if ( list ) {
1118 a7dd0415 Kostas Papadimitriou
                                        var args = arguments,
1119 a7dd0415 Kostas Papadimitriou
                                                argIndex = 0,
1120 a7dd0415 Kostas Papadimitriou
                                                argLength = args.length;
1121 a7dd0415 Kostas Papadimitriou
                                        for ( ; argIndex < argLength ; argIndex++ ) {
1122 a7dd0415 Kostas Papadimitriou
                                                for ( var i = 0; i < list.length; i++ ) {
1123 a7dd0415 Kostas Papadimitriou
                                                        if ( args[ argIndex ] === list[ i ] ) {
1124 a7dd0415 Kostas Papadimitriou
                                                                // Handle firingIndex and firingLength
1125 a7dd0415 Kostas Papadimitriou
                                                                if ( firing ) {
1126 a7dd0415 Kostas Papadimitriou
                                                                        if ( i <= firingLength ) {
1127 a7dd0415 Kostas Papadimitriou
                                                                                firingLength--;
1128 a7dd0415 Kostas Papadimitriou
                                                                                if ( i <= firingIndex ) {
1129 a7dd0415 Kostas Papadimitriou
                                                                                        firingIndex--;
1130 a7dd0415 Kostas Papadimitriou
                                                                                }
1131 a7dd0415 Kostas Papadimitriou
                                                                        }
1132 a7dd0415 Kostas Papadimitriou
                                                                }
1133 a7dd0415 Kostas Papadimitriou
                                                                // Remove the element
1134 a7dd0415 Kostas Papadimitriou
                                                                list.splice( i--, 1 );
1135 a7dd0415 Kostas Papadimitriou
                                                                // If we have some unicity property then
1136 a7dd0415 Kostas Papadimitriou
                                                                // we only need to do this once
1137 a7dd0415 Kostas Papadimitriou
                                                                if ( flags.unique ) {
1138 a7dd0415 Kostas Papadimitriou
                                                                        break;
1139 a7dd0415 Kostas Papadimitriou
                                                                }
1140 a7dd0415 Kostas Papadimitriou
                                                        }
1141 a7dd0415 Kostas Papadimitriou
                                                }
1142 a7dd0415 Kostas Papadimitriou
                                        }
1143 a7dd0415 Kostas Papadimitriou
                                }
1144 a7dd0415 Kostas Papadimitriou
                                return this;
1145 a7dd0415 Kostas Papadimitriou
                        },
1146 a7dd0415 Kostas Papadimitriou
                        // Control if a given callback is in the list
1147 a7dd0415 Kostas Papadimitriou
                        has: function( fn ) {
1148 a7dd0415 Kostas Papadimitriou
                                if ( list ) {
1149 a7dd0415 Kostas Papadimitriou
                                        var i = 0,
1150 a7dd0415 Kostas Papadimitriou
                                                length = list.length;
1151 a7dd0415 Kostas Papadimitriou
                                        for ( ; i < length; i++ ) {
1152 a7dd0415 Kostas Papadimitriou
                                                if ( fn === list[ i ] ) {
1153 a7dd0415 Kostas Papadimitriou
                                                        return true;
1154 a7dd0415 Kostas Papadimitriou
                                                }
1155 a7dd0415 Kostas Papadimitriou
                                        }
1156 a7dd0415 Kostas Papadimitriou
                                }
1157 a7dd0415 Kostas Papadimitriou
                                return false;
1158 a7dd0415 Kostas Papadimitriou
                        },
1159 a7dd0415 Kostas Papadimitriou
                        // Remove all callbacks from the list
1160 a7dd0415 Kostas Papadimitriou
                        empty: function() {
1161 a7dd0415 Kostas Papadimitriou
                                list = [];
1162 a7dd0415 Kostas Papadimitriou
                                return this;
1163 a7dd0415 Kostas Papadimitriou
                        },
1164 a7dd0415 Kostas Papadimitriou
                        // Have the list do nothing anymore
1165 a7dd0415 Kostas Papadimitriou
                        disable: function() {
1166 a7dd0415 Kostas Papadimitriou
                                list = stack = memory = undefined;
1167 a7dd0415 Kostas Papadimitriou
                                return this;
1168 a7dd0415 Kostas Papadimitriou
                        },
1169 a7dd0415 Kostas Papadimitriou
                        // Is it disabled?
1170 a7dd0415 Kostas Papadimitriou
                        disabled: function() {
1171 a7dd0415 Kostas Papadimitriou
                                return !list;
1172 a7dd0415 Kostas Papadimitriou
                        },
1173 a7dd0415 Kostas Papadimitriou
                        // Lock the list in its current state
1174 a7dd0415 Kostas Papadimitriou
                        lock: function() {
1175 a7dd0415 Kostas Papadimitriou
                                stack = undefined;
1176 a7dd0415 Kostas Papadimitriou
                                if ( !memory || memory === true ) {
1177 a7dd0415 Kostas Papadimitriou
                                        self.disable();
1178 a7dd0415 Kostas Papadimitriou
                                }
1179 a7dd0415 Kostas Papadimitriou
                                return this;
1180 a7dd0415 Kostas Papadimitriou
                        },
1181 a7dd0415 Kostas Papadimitriou
                        // Is it locked?
1182 a7dd0415 Kostas Papadimitriou
                        locked: function() {
1183 a7dd0415 Kostas Papadimitriou
                                return !stack;
1184 a7dd0415 Kostas Papadimitriou
                        },
1185 a7dd0415 Kostas Papadimitriou
                        // Call all callbacks with the given context and arguments
1186 a7dd0415 Kostas Papadimitriou
                        fireWith: function( context, args ) {
1187 a7dd0415 Kostas Papadimitriou
                                if ( stack ) {
1188 a7dd0415 Kostas Papadimitriou
                                        if ( firing ) {
1189 a7dd0415 Kostas Papadimitriou
                                                if ( !flags.once ) {
1190 a7dd0415 Kostas Papadimitriou
                                                        stack.push( [ context, args ] );
1191 a7dd0415 Kostas Papadimitriou
                                                }
1192 a7dd0415 Kostas Papadimitriou
                                        } else if ( !( flags.once && memory ) ) {
1193 a7dd0415 Kostas Papadimitriou
                                                fire( context, args );
1194 a7dd0415 Kostas Papadimitriou
                                        }
1195 a7dd0415 Kostas Papadimitriou
                                }
1196 a7dd0415 Kostas Papadimitriou
                                return this;
1197 a7dd0415 Kostas Papadimitriou
                        },
1198 a7dd0415 Kostas Papadimitriou
                        // Call all the callbacks with the given arguments
1199 a7dd0415 Kostas Papadimitriou
                        fire: function() {
1200 a7dd0415 Kostas Papadimitriou
                                self.fireWith( this, arguments );
1201 a7dd0415 Kostas Papadimitriou
                                return this;
1202 a7dd0415 Kostas Papadimitriou
                        },
1203 a7dd0415 Kostas Papadimitriou
                        // To know if the callbacks have already been called at least once
1204 a7dd0415 Kostas Papadimitriou
                        fired: function() {
1205 18059f42 Kostas Papadimitriou
                                return !!fired;
1206 a7dd0415 Kostas Papadimitriou
                        }
1207 a7dd0415 Kostas Papadimitriou
                };
1208 a7dd0415 Kostas Papadimitriou
1209 a7dd0415 Kostas Papadimitriou
        return self;
1210 a7dd0415 Kostas Papadimitriou
};
1211 a7dd0415 Kostas Papadimitriou
1212 a7dd0415 Kostas Papadimitriou
1213 a7dd0415 Kostas Papadimitriou
1214 a7dd0415 Kostas Papadimitriou
1215 a7dd0415 Kostas Papadimitriou
var // Static reference to slice
1216 a7dd0415 Kostas Papadimitriou
        sliceDeferred = [].slice;
1217 a7dd0415 Kostas Papadimitriou
1218 a7dd0415 Kostas Papadimitriou
jQuery.extend({
1219 a7dd0415 Kostas Papadimitriou
1220 a7dd0415 Kostas Papadimitriou
        Deferred: function( func ) {
1221 a7dd0415 Kostas Papadimitriou
                var doneList = jQuery.Callbacks( "once memory" ),
1222 a7dd0415 Kostas Papadimitriou
                        failList = jQuery.Callbacks( "once memory" ),
1223 a7dd0415 Kostas Papadimitriou
                        progressList = jQuery.Callbacks( "memory" ),
1224 a7dd0415 Kostas Papadimitriou
                        state = "pending",
1225 a7dd0415 Kostas Papadimitriou
                        lists = {
1226 a7dd0415 Kostas Papadimitriou
                                resolve: doneList,
1227 a7dd0415 Kostas Papadimitriou
                                reject: failList,
1228 a7dd0415 Kostas Papadimitriou
                                notify: progressList
1229 a7dd0415 Kostas Papadimitriou
                        },
1230 a7dd0415 Kostas Papadimitriou
                        promise = {
1231 a7dd0415 Kostas Papadimitriou
                                done: doneList.add,
1232 a7dd0415 Kostas Papadimitriou
                                fail: failList.add,
1233 a7dd0415 Kostas Papadimitriou
                                progress: progressList.add,
1234 a7dd0415 Kostas Papadimitriou
1235 a7dd0415 Kostas Papadimitriou
                                state: function() {
1236 a7dd0415 Kostas Papadimitriou
                                        return state;
1237 a7dd0415 Kostas Papadimitriou
                                },
1238 a7dd0415 Kostas Papadimitriou
1239 a7dd0415 Kostas Papadimitriou
                                // Deprecated
1240 a7dd0415 Kostas Papadimitriou
                                isResolved: doneList.fired,
1241 a7dd0415 Kostas Papadimitriou
                                isRejected: failList.fired,
1242 a7dd0415 Kostas Papadimitriou
1243 a7dd0415 Kostas Papadimitriou
                                then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
1244 a7dd0415 Kostas Papadimitriou
                                        deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
1245 a7dd0415 Kostas Papadimitriou
                                        return this;
1246 a7dd0415 Kostas Papadimitriou
                                },
1247 a7dd0415 Kostas Papadimitriou
                                always: function() {
1248 a7dd0415 Kostas Papadimitriou
                                        deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
1249 a7dd0415 Kostas Papadimitriou
                                        return this;
1250 a7dd0415 Kostas Papadimitriou
                                },
1251 a7dd0415 Kostas Papadimitriou
                                pipe: function( fnDone, fnFail, fnProgress ) {
1252 a7dd0415 Kostas Papadimitriou
                                        return jQuery.Deferred(function( newDefer ) {
1253 a7dd0415 Kostas Papadimitriou
                                                jQuery.each( {
1254 a7dd0415 Kostas Papadimitriou
                                                        done: [ fnDone, "resolve" ],
1255 a7dd0415 Kostas Papadimitriou
                                                        fail: [ fnFail, "reject" ],
1256 a7dd0415 Kostas Papadimitriou
                                                        progress: [ fnProgress, "notify" ]
1257 a7dd0415 Kostas Papadimitriou
                                                }, function( handler, data ) {
1258 a7dd0415 Kostas Papadimitriou
                                                        var fn = data[ 0 ],
1259 a7dd0415 Kostas Papadimitriou
                                                                action = data[ 1 ],
1260 a7dd0415 Kostas Papadimitriou
                                                                returned;
1261 a7dd0415 Kostas Papadimitriou
                                                        if ( jQuery.isFunction( fn ) ) {
1262 a7dd0415 Kostas Papadimitriou
                                                                deferred[ handler ](function() {
1263 a7dd0415 Kostas Papadimitriou
                                                                        returned = fn.apply( this, arguments );
1264 a7dd0415 Kostas Papadimitriou
                                                                        if ( returned && jQuery.isFunction( returned.promise ) ) {
1265 a7dd0415 Kostas Papadimitriou
                                                                                returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
1266 a7dd0415 Kostas Papadimitriou
                                                                        } else {
1267 a7dd0415 Kostas Papadimitriou
                                                                                newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
1268 a7dd0415 Kostas Papadimitriou
                                                                        }
1269 a7dd0415 Kostas Papadimitriou
                                                                });
1270 a7dd0415 Kostas Papadimitriou
                                                        } else {
1271 a7dd0415 Kostas Papadimitriou
                                                                deferred[ handler ]( newDefer[ action ] );
1272 a7dd0415 Kostas Papadimitriou
                                                        }
1273 a7dd0415 Kostas Papadimitriou
                                                });
1274 a7dd0415 Kostas Papadimitriou
                                        }).promise();
1275 a7dd0415 Kostas Papadimitriou
                                },
1276 a7dd0415 Kostas Papadimitriou
                                // Get a promise for this deferred
1277 a7dd0415 Kostas Papadimitriou
                                // If obj is provided, the promise aspect is added to the object
1278 a7dd0415 Kostas Papadimitriou
                                promise: function( obj ) {
1279 a7dd0415 Kostas Papadimitriou
                                        if ( obj == null ) {
1280 a7dd0415 Kostas Papadimitriou
                                                obj = promise;
1281 a7dd0415 Kostas Papadimitriou
                                        } else {
1282 a7dd0415 Kostas Papadimitriou
                                                for ( var key in promise ) {
1283 a7dd0415 Kostas Papadimitriou
                                                        obj[ key ] = promise[ key ];
1284 a7dd0415 Kostas Papadimitriou
                                                }
1285 a7dd0415 Kostas Papadimitriou
                                        }
1286 a7dd0415 Kostas Papadimitriou
                                        return obj;
1287 a7dd0415 Kostas Papadimitriou
                                }
1288 a7dd0415 Kostas Papadimitriou
                        },
1289 a7dd0415 Kostas Papadimitriou
                        deferred = promise.promise({}),
1290 a7dd0415 Kostas Papadimitriou
                        key;
1291 a7dd0415 Kostas Papadimitriou
1292 a7dd0415 Kostas Papadimitriou
                for ( key in lists ) {
1293 a7dd0415 Kostas Papadimitriou
                        deferred[ key ] = lists[ key ].fire;
1294 a7dd0415 Kostas Papadimitriou
                        deferred[ key + "With" ] = lists[ key ].fireWith;
1295 a7dd0415 Kostas Papadimitriou
                }
1296 a7dd0415 Kostas Papadimitriou
1297 a7dd0415 Kostas Papadimitriou
                // Handle state
1298 a7dd0415 Kostas Papadimitriou
                deferred.done( function() {
1299 a7dd0415 Kostas Papadimitriou
                        state = "resolved";
1300 a7dd0415 Kostas Papadimitriou
                }, failList.disable, progressList.lock ).fail( function() {
1301 a7dd0415 Kostas Papadimitriou
                        state = "rejected";
1302 a7dd0415 Kostas Papadimitriou
                }, doneList.disable, progressList.lock );
1303 a7dd0415 Kostas Papadimitriou
1304 a7dd0415 Kostas Papadimitriou
                // Call given func if any
1305 a7dd0415 Kostas Papadimitriou
                if ( func ) {
1306 a7dd0415 Kostas Papadimitriou
                        func.call( deferred, deferred );
1307 a7dd0415 Kostas Papadimitriou
                }
1308 a7dd0415 Kostas Papadimitriou
1309 a7dd0415 Kostas Papadimitriou
                // All done!
1310 a7dd0415 Kostas Papadimitriou
                return deferred;
1311 a7dd0415 Kostas Papadimitriou
        },
1312 a7dd0415 Kostas Papadimitriou
1313 a7dd0415 Kostas Papadimitriou
        // Deferred helper
1314 a7dd0415 Kostas Papadimitriou
        when: function( firstParam ) {
1315 a7dd0415 Kostas Papadimitriou
                var args = sliceDeferred.call( arguments, 0 ),
1316 a7dd0415 Kostas Papadimitriou
                        i = 0,
1317 a7dd0415 Kostas Papadimitriou
                        length = args.length,
1318 a7dd0415 Kostas Papadimitriou
                        pValues = new Array( length ),
1319 a7dd0415 Kostas Papadimitriou
                        count = length,
1320 a7dd0415 Kostas Papadimitriou
                        pCount = length,
1321 a7dd0415 Kostas Papadimitriou
                        deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
1322 a7dd0415 Kostas Papadimitriou
                                firstParam :
1323 a7dd0415 Kostas Papadimitriou
                                jQuery.Deferred(),
1324 a7dd0415 Kostas Papadimitriou
                        promise = deferred.promise();
1325 a7dd0415 Kostas Papadimitriou
                function resolveFunc( i ) {
1326 a7dd0415 Kostas Papadimitriou
                        return function( value ) {
1327 a7dd0415 Kostas Papadimitriou
                                args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
1328 a7dd0415 Kostas Papadimitriou
                                if ( !( --count ) ) {
1329 a7dd0415 Kostas Papadimitriou
                                        deferred.resolveWith( deferred, args );
1330 a7dd0415 Kostas Papadimitriou
                                }
1331 a7dd0415 Kostas Papadimitriou
                        };
1332 a7dd0415 Kostas Papadimitriou
                }
1333 a7dd0415 Kostas Papadimitriou
                function progressFunc( i ) {
1334 a7dd0415 Kostas Papadimitriou
                        return function( value ) {
1335 a7dd0415 Kostas Papadimitriou
                                pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
1336 a7dd0415 Kostas Papadimitriou
                                deferred.notifyWith( promise, pValues );
1337 a7dd0415 Kostas Papadimitriou
                        };
1338 a7dd0415 Kostas Papadimitriou
                }
1339 a7dd0415 Kostas Papadimitriou
                if ( length > 1 ) {
1340 a7dd0415 Kostas Papadimitriou
                        for ( ; i < length; i++ ) {
1341 a7dd0415 Kostas Papadimitriou
                                if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
1342 a7dd0415 Kostas Papadimitriou
                                        args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
1343 a7dd0415 Kostas Papadimitriou
                                } else {
1344 a7dd0415 Kostas Papadimitriou
                                        --count;
1345 a7dd0415 Kostas Papadimitriou
                                }
1346 a7dd0415 Kostas Papadimitriou
                        }
1347 a7dd0415 Kostas Papadimitriou
                        if ( !count ) {
1348 a7dd0415 Kostas Papadimitriou
                                deferred.resolveWith( deferred, args );
1349 a7dd0415 Kostas Papadimitriou
                        }
1350 a7dd0415 Kostas Papadimitriou
                } else if ( deferred !== firstParam ) {
1351 a7dd0415 Kostas Papadimitriou
                        deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
1352 a7dd0415 Kostas Papadimitriou
                }
1353 a7dd0415 Kostas Papadimitriou
                return promise;
1354 a7dd0415 Kostas Papadimitriou
        }
1355 a7dd0415 Kostas Papadimitriou
});
1356 a7dd0415 Kostas Papadimitriou
1357 a7dd0415 Kostas Papadimitriou
1358 a7dd0415 Kostas Papadimitriou
1359 a7dd0415 Kostas Papadimitriou
1360 a7dd0415 Kostas Papadimitriou
jQuery.support = (function() {
1361 a7dd0415 Kostas Papadimitriou
1362 a7dd0415 Kostas Papadimitriou
        var support,
1363 a7dd0415 Kostas Papadimitriou
                all,
1364 a7dd0415 Kostas Papadimitriou
                a,
1365 a7dd0415 Kostas Papadimitriou
                select,
1366 a7dd0415 Kostas Papadimitriou
                opt,
1367 a7dd0415 Kostas Papadimitriou
                input,
1368 a7dd0415 Kostas Papadimitriou
                fragment,
1369 a7dd0415 Kostas Papadimitriou
                tds,
1370 a7dd0415 Kostas Papadimitriou
                events,
1371 a7dd0415 Kostas Papadimitriou
                eventName,
1372 a7dd0415 Kostas Papadimitriou
                i,
1373 a7dd0415 Kostas Papadimitriou
                isSupported,
1374 a7dd0415 Kostas Papadimitriou
                div = document.createElement( "div" ),
1375 a7dd0415 Kostas Papadimitriou
                documentElement = document.documentElement;
1376 a7dd0415 Kostas Papadimitriou
1377 a7dd0415 Kostas Papadimitriou
        // Preliminary tests
1378 a7dd0415 Kostas Papadimitriou
        div.setAttribute("className", "t");
1379 a7dd0415 Kostas Papadimitriou
        div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
1380 a7dd0415 Kostas Papadimitriou
1381 a7dd0415 Kostas Papadimitriou
        all = div.getElementsByTagName( "*" );
1382 a7dd0415 Kostas Papadimitriou
        a = div.getElementsByTagName( "a" )[ 0 ];
1383 a7dd0415 Kostas Papadimitriou
1384 a7dd0415 Kostas Papadimitriou
        // Can't get basic test support
1385 a7dd0415 Kostas Papadimitriou
        if ( !all || !all.length || !a ) {
1386 a7dd0415 Kostas Papadimitriou
                return {};
1387 a7dd0415 Kostas Papadimitriou
        }
1388 a7dd0415 Kostas Papadimitriou
1389 a7dd0415 Kostas Papadimitriou
        // First batch of supports tests
1390 a7dd0415 Kostas Papadimitriou
        select = document.createElement( "select" );
1391 a7dd0415 Kostas Papadimitriou
        opt = select.appendChild( document.createElement("option") );
1392 a7dd0415 Kostas Papadimitriou
        input = div.getElementsByTagName( "input" )[ 0 ];
1393 a7dd0415 Kostas Papadimitriou
1394 a7dd0415 Kostas Papadimitriou
        support = {
1395 a7dd0415 Kostas Papadimitriou
                // IE strips leading whitespace when .innerHTML is used
1396 a7dd0415 Kostas Papadimitriou
                leadingWhitespace: ( div.firstChild.nodeType === 3 ),
1397 a7dd0415 Kostas Papadimitriou
1398 a7dd0415 Kostas Papadimitriou
                // Make sure that tbody elements aren't automatically inserted
1399 a7dd0415 Kostas Papadimitriou
                // IE will insert them into empty tables
1400 a7dd0415 Kostas Papadimitriou
                tbody: !div.getElementsByTagName("tbody").length,
1401 a7dd0415 Kostas Papadimitriou
1402 a7dd0415 Kostas Papadimitriou
                // Make sure that link elements get serialized correctly by innerHTML
1403 a7dd0415 Kostas Papadimitriou
                // This requires a wrapper element in IE
1404 a7dd0415 Kostas Papadimitriou
                htmlSerialize: !!div.getElementsByTagName("link").length,
1405 a7dd0415 Kostas Papadimitriou
1406 a7dd0415 Kostas Papadimitriou
                // Get the style information from getAttribute
1407 a7dd0415 Kostas Papadimitriou
                // (IE uses .cssText instead)
1408 a7dd0415 Kostas Papadimitriou
                style: /top/.test( a.getAttribute("style") ),
1409 a7dd0415 Kostas Papadimitriou
1410 a7dd0415 Kostas Papadimitriou
                // Make sure that URLs aren't manipulated
1411 a7dd0415 Kostas Papadimitriou
                // (IE normalizes it by default)
1412 a7dd0415 Kostas Papadimitriou
                hrefNormalized: ( a.getAttribute("href") === "/a" ),
1413 a7dd0415 Kostas Papadimitriou
1414 a7dd0415 Kostas Papadimitriou
                // Make sure that element opacity exists
1415 a7dd0415 Kostas Papadimitriou
                // (IE uses filter instead)
1416 a7dd0415 Kostas Papadimitriou
                // Use a regex to work around a WebKit issue. See #5145
1417 a7dd0415 Kostas Papadimitriou
                opacity: /^0.55/.test( a.style.opacity ),
1418 a7dd0415 Kostas Papadimitriou
1419 a7dd0415 Kostas Papadimitriou
                // Verify style float existence
1420 a7dd0415 Kostas Papadimitriou
                // (IE uses styleFloat instead of cssFloat)
1421 a7dd0415 Kostas Papadimitriou
                cssFloat: !!a.style.cssFloat,
1422 a7dd0415 Kostas Papadimitriou
1423 a7dd0415 Kostas Papadimitriou
                // Make sure that if no value is specified for a checkbox
1424 a7dd0415 Kostas Papadimitriou
                // that it defaults to "on".
1425 a7dd0415 Kostas Papadimitriou
                // (WebKit defaults to "" instead)
1426 a7dd0415 Kostas Papadimitriou
                checkOn: ( input.value === "on" ),
1427 a7dd0415 Kostas Papadimitriou
1428 a7dd0415 Kostas Papadimitriou
                // Make sure that a selected-by-default option has a working selected property.
1429 a7dd0415 Kostas Papadimitriou
                // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
1430 a7dd0415 Kostas Papadimitriou
                optSelected: opt.selected,
1431 a7dd0415 Kostas Papadimitriou
1432 a7dd0415 Kostas Papadimitriou
                // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
1433 a7dd0415 Kostas Papadimitriou
                getSetAttribute: div.className !== "t",
1434 a7dd0415 Kostas Papadimitriou
1435 a7dd0415 Kostas Papadimitriou
                // Tests for enctype support on a form(#6743)
1436 a7dd0415 Kostas Papadimitriou
                enctype: !!document.createElement("form").enctype,
1437 a7dd0415 Kostas Papadimitriou
1438 a7dd0415 Kostas Papadimitriou
                // Makes sure cloning an html5 element does not cause problems
1439 a7dd0415 Kostas Papadimitriou
                // Where outerHTML is undefined, this still works
1440 a7dd0415 Kostas Papadimitriou
                html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
1441 a7dd0415 Kostas Papadimitriou
1442 a7dd0415 Kostas Papadimitriou
                // Will be defined later
1443 a7dd0415 Kostas Papadimitriou
                submitBubbles: true,
1444 a7dd0415 Kostas Papadimitriou
                changeBubbles: true,
1445 a7dd0415 Kostas Papadimitriou
                focusinBubbles: false,
1446 a7dd0415 Kostas Papadimitriou
                deleteExpando: true,
1447 a7dd0415 Kostas Papadimitriou
                noCloneEvent: true,
1448 a7dd0415 Kostas Papadimitriou
                inlineBlockNeedsLayout: false,
1449 a7dd0415 Kostas Papadimitriou
                shrinkWrapBlocks: false,
1450 18059f42 Kostas Papadimitriou
                reliableMarginRight: true,
1451 18059f42 Kostas Papadimitriou
                pixelMargin: true
1452 a7dd0415 Kostas Papadimitriou
        };
1453 a7dd0415 Kostas Papadimitriou
1454 18059f42 Kostas Papadimitriou
        // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead
1455 18059f42 Kostas Papadimitriou
        jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat");
1456 18059f42 Kostas Papadimitriou
1457 a7dd0415 Kostas Papadimitriou
        // Make sure checked status is properly cloned
1458 a7dd0415 Kostas Papadimitriou
        input.checked = true;
1459 a7dd0415 Kostas Papadimitriou
        support.noCloneChecked = input.cloneNode( true ).checked;
1460 a7dd0415 Kostas Papadimitriou
1461 a7dd0415 Kostas Papadimitriou
        // Make sure that the options inside disabled selects aren't marked as disabled
1462 a7dd0415 Kostas Papadimitriou
        // (WebKit marks them as disabled)
1463 a7dd0415 Kostas Papadimitriou
        select.disabled = true;
1464 a7dd0415 Kostas Papadimitriou
        support.optDisabled = !opt.disabled;
1465 a7dd0415 Kostas Papadimitriou
1466 a7dd0415 Kostas Papadimitriou
        // Test to see if it's possible to delete an expando from an element
1467 a7dd0415 Kostas Papadimitriou
        // Fails in Internet Explorer
1468 a7dd0415 Kostas Papadimitriou
        try {
1469 a7dd0415 Kostas Papadimitriou
                delete div.test;
1470 a7dd0415 Kostas Papadimitriou
        } catch( e ) {
1471 a7dd0415 Kostas Papadimitriou
                support.deleteExpando = false;
1472 a7dd0415 Kostas Papadimitriou
        }
1473 a7dd0415 Kostas Papadimitriou
1474 a7dd0415 Kostas Papadimitriou
        if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
1475 a7dd0415 Kostas Papadimitriou
                div.attachEvent( "onclick", function() {
1476 a7dd0415 Kostas Papadimitriou
                        // Cloning a node shouldn't copy over any
1477 a7dd0415 Kostas Papadimitriou
                        // bound event handlers (IE does this)
1478 a7dd0415 Kostas Papadimitriou
                        support.noCloneEvent = false;
1479 a7dd0415 Kostas Papadimitriou
                });
1480 a7dd0415 Kostas Papadimitriou
                div.cloneNode( true ).fireEvent( "onclick" );
1481 a7dd0415 Kostas Papadimitriou
        }
1482 a7dd0415 Kostas Papadimitriou
1483 a7dd0415 Kostas Papadimitriou
        // Check if a radio maintains its value
1484 a7dd0415 Kostas Papadimitriou
        // after being appended to the DOM
1485 a7dd0415 Kostas Papadimitriou
        input = document.createElement("input");
1486 a7dd0415 Kostas Papadimitriou
        input.value = "t";
1487 a7dd0415 Kostas Papadimitriou
        input.setAttribute("type", "radio");
1488 a7dd0415 Kostas Papadimitriou
        support.radioValue = input.value === "t";
1489 a7dd0415 Kostas Papadimitriou
1490 a7dd0415 Kostas Papadimitriou
        input.setAttribute("checked", "checked");
1491 18059f42 Kostas Papadimitriou
1492 18059f42 Kostas Papadimitriou
        // #11217 - WebKit loses check when the name is after the checked attribute
1493 18059f42 Kostas Papadimitriou
        input.setAttribute( "name", "t" );
1494 18059f42 Kostas Papadimitriou
1495 a7dd0415 Kostas Papadimitriou
        div.appendChild( input );
1496 a7dd0415 Kostas Papadimitriou
        fragment = document.createDocumentFragment();
1497 a7dd0415 Kostas Papadimitriou
        fragment.appendChild( div.lastChild );
1498 a7dd0415 Kostas Papadimitriou
1499 a7dd0415 Kostas Papadimitriou
        // WebKit doesn't clone checked state correctly in fragments
1500 a7dd0415 Kostas Papadimitriou
        support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
1501 a7dd0415 Kostas Papadimitriou
1502 a7dd0415 Kostas Papadimitriou
        // Check if a disconnected checkbox will retain its checked
1503 a7dd0415 Kostas Papadimitriou
        // value of true after appended to the DOM (IE6/7)
1504 a7dd0415 Kostas Papadimitriou
        support.appendChecked = input.checked;
1505 a7dd0415 Kostas Papadimitriou
1506 a7dd0415 Kostas Papadimitriou
        fragment.removeChild( input );
1507 a7dd0415 Kostas Papadimitriou
        fragment.appendChild( div );
1508 a7dd0415 Kostas Papadimitriou
1509 a7dd0415 Kostas Papadimitriou
        // Technique from Juriy Zaytsev
1510 a7dd0415 Kostas Papadimitriou
        // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
1511 a7dd0415 Kostas Papadimitriou
        // We only care about the case where non-standard event systems
1512 a7dd0415 Kostas Papadimitriou
        // are used, namely in IE. Short-circuiting here helps us to
1513 a7dd0415 Kostas Papadimitriou
        // avoid an eval call (in setAttribute) which can cause CSP
1514 a7dd0415 Kostas Papadimitriou
        // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
1515 a7dd0415 Kostas Papadimitriou
        if ( div.attachEvent ) {
1516 18059f42 Kostas Papadimitriou
                for ( i in {
1517 a7dd0415 Kostas Papadimitriou
                        submit: 1,
1518 a7dd0415 Kostas Papadimitriou
                        change: 1,
1519 a7dd0415 Kostas Papadimitriou
                        focusin: 1
1520 a7dd0415 Kostas Papadimitriou
                }) {
1521 a7dd0415 Kostas Papadimitriou
                        eventName = "on" + i;
1522 a7dd0415 Kostas Papadimitriou
                        isSupported = ( eventName in div );
1523 a7dd0415 Kostas Papadimitriou
                        if ( !isSupported ) {
1524 a7dd0415 Kostas Papadimitriou
                                div.setAttribute( eventName, "return;" );
1525 a7dd0415 Kostas Papadimitriou
                                isSupported = ( typeof div[ eventName ] === "function" );
1526 a7dd0415 Kostas Papadimitriou
                        }
1527 a7dd0415 Kostas Papadimitriou
                        support[ i + "Bubbles" ] = isSupported;
1528 a7dd0415 Kostas Papadimitriou
                }
1529 a7dd0415 Kostas Papadimitriou
        }
1530 a7dd0415 Kostas Papadimitriou
1531 a7dd0415 Kostas Papadimitriou
        fragment.removeChild( div );
1532 a7dd0415 Kostas Papadimitriou
1533 a7dd0415 Kostas Papadimitriou
        // Null elements to avoid leaks in IE
1534 18059f42 Kostas Papadimitriou
        fragment = select = opt = div = input = null;
1535 a7dd0415 Kostas Papadimitriou
1536 a7dd0415 Kostas Papadimitriou
        // Run tests that need a body at doc ready
1537 a7dd0415 Kostas Papadimitriou
        jQuery(function() {
1538 a7dd0415 Kostas Papadimitriou
                var container, outer, inner, table, td, offsetSupport,
1539 18059f42 Kostas Papadimitriou
                        marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight,
1540 18059f42 Kostas Papadimitriou
                        paddingMarginBorderVisibility, paddingMarginBorder,
1541 a7dd0415 Kostas Papadimitriou
                        body = document.getElementsByTagName("body")[0];
1542 a7dd0415 Kostas Papadimitriou
1543 a7dd0415 Kostas Papadimitriou
                if ( !body ) {
1544 a7dd0415 Kostas Papadimitriou
                        // Return for frameset docs that don't have a body
1545 a7dd0415 Kostas Papadimitriou
                        return;
1546 a7dd0415 Kostas Papadimitriou
                }
1547 a7dd0415 Kostas Papadimitriou
1548 a7dd0415 Kostas Papadimitriou
                conMarginTop = 1;
1549 18059f42 Kostas Papadimitriou
                paddingMarginBorder = "padding:0;margin:0;border:";
1550 18059f42 Kostas Papadimitriou
                positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;";
1551 18059f42 Kostas Papadimitriou
                paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;";
1552 18059f42 Kostas Papadimitriou
                style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;";
1553 18059f42 Kostas Papadimitriou
                html = "<div " + style + "display:block;'><div style='" + paddingMarginBorder + "0;display:block;overflow:hidden;'></div></div>" +
1554 18059f42 Kostas Papadimitriou
                        "<table " + style + "' cellpadding='0' cellspacing='0'>" +
1555 a7dd0415 Kostas Papadimitriou
                        "<tr><td></td></tr></table>";
1556 a7dd0415 Kostas Papadimitriou
1557 a7dd0415 Kostas Papadimitriou
                container = document.createElement("div");
1558 18059f42 Kostas Papadimitriou
                container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
1559 a7dd0415 Kostas Papadimitriou
                body.insertBefore( container, body.firstChild );
1560 a7dd0415 Kostas Papadimitriou
1561 a7dd0415 Kostas Papadimitriou
                // Construct the test element
1562 a7dd0415 Kostas Papadimitriou
                div = document.createElement("div");
1563 a7dd0415 Kostas Papadimitriou
                container.appendChild( div );
1564 a7dd0415 Kostas Papadimitriou
1565 a7dd0415 Kostas Papadimitriou
                // Check if table cells still have offsetWidth/Height when they are set
1566 a7dd0415 Kostas Papadimitriou
                // to display:none and there are still other visible table cells in a
1567 a7dd0415 Kostas Papadimitriou
                // table row; if so, offsetWidth/Height are not reliable for use when
1568 a7dd0415 Kostas Papadimitriou
                // determining if an element has been hidden directly using
1569 a7dd0415 Kostas Papadimitriou
                // display:none (it is still safe to use offsets if a parent element is
1570 a7dd0415 Kostas Papadimitriou
                // hidden; don safety goggles and see bug #4512 for more information).
1571 a7dd0415 Kostas Papadimitriou
                // (only IE 8 fails this test)
1572 18059f42 Kostas Papadimitriou
                div.innerHTML = "<table><tr><td style='" + paddingMarginBorder + "0;display:none'></td><td>t</td></tr></table>";
1573 a7dd0415 Kostas Papadimitriou
                tds = div.getElementsByTagName( "td" );
1574 a7dd0415 Kostas Papadimitriou
                isSupported = ( tds[ 0 ].offsetHeight === 0 );
1575 a7dd0415 Kostas Papadimitriou
1576 a7dd0415 Kostas Papadimitriou
                tds[ 0 ].style.display = "";
1577 a7dd0415 Kostas Papadimitriou
                tds[ 1 ].style.display = "none";
1578 a7dd0415 Kostas Papadimitriou
1579 a7dd0415 Kostas Papadimitriou
                // Check if empty table cells still have offsetWidth/Height
1580 a7dd0415 Kostas Papadimitriou
                // (IE <= 8 fail this test)
1581 a7dd0415 Kostas Papadimitriou
                support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
1582 a7dd0415 Kostas Papadimitriou
1583 18059f42 Kostas Papadimitriou
                // Check if div with explicit width and no margin-right incorrectly
1584 18059f42 Kostas Papadimitriou
                // gets computed margin-right based on width of container. For more
1585 18059f42 Kostas Papadimitriou
                // info see bug #3333
1586 18059f42 Kostas Papadimitriou
                // Fails in WebKit before Feb 2011 nightlies
1587 18059f42 Kostas Papadimitriou
                // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
1588 18059f42 Kostas Papadimitriou
                if ( window.getComputedStyle ) {
1589 18059f42 Kostas Papadimitriou
                        div.innerHTML = "";
1590 18059f42 Kostas Papadimitriou
                        marginDiv = document.createElement( "div" );
1591 18059f42 Kostas Papadimitriou
                        marginDiv.style.width = "0";
1592 18059f42 Kostas Papadimitriou
                        marginDiv.style.marginRight = "0";
1593 18059f42 Kostas Papadimitriou
                        div.style.width = "2px";
1594 18059f42 Kostas Papadimitriou
                        div.appendChild( marginDiv );
1595 18059f42 Kostas Papadimitriou
                        support.reliableMarginRight =
1596 18059f42 Kostas Papadimitriou
                                ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
1597 18059f42 Kostas Papadimitriou
                }
1598 a7dd0415 Kostas Papadimitriou
1599 a7dd0415 Kostas Papadimitriou
                if ( typeof div.style.zoom !== "undefined" ) {
1600 a7dd0415 Kostas Papadimitriou
                        // Check if natively block-level elements act like inline-block
1601 a7dd0415 Kostas Papadimitriou
                        // elements when setting their display to 'inline' and giving
1602 a7dd0415 Kostas Papadimitriou
                        // them layout
1603 a7dd0415 Kostas Papadimitriou
                        // (IE < 8 does this)
1604 18059f42 Kostas Papadimitriou
                        div.innerHTML = "";
1605 18059f42 Kostas Papadimitriou
                        div.style.width = div.style.padding = "1px";
1606 18059f42 Kostas Papadimitriou
                        div.style.border = 0;
1607 18059f42 Kostas Papadimitriou
                        div.style.overflow = "hidden";
1608 a7dd0415 Kostas Papadimitriou
                        div.style.display = "inline";
1609 a7dd0415 Kostas Papadimitriou
                        div.style.zoom = 1;
1610 18059f42 Kostas Papadimitriou
                        support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
1611 a7dd0415 Kostas Papadimitriou
1612 a7dd0415 Kostas Papadimitriou
                        // Check if elements with layout shrink-wrap their children
1613 a7dd0415 Kostas Papadimitriou
                        // (IE 6 does this)
1614 18059f42 Kostas Papadimitriou
                        div.style.display = "block";
1615 18059f42 Kostas Papadimitriou
                        div.style.overflow = "visible";
1616 18059f42 Kostas Papadimitriou
                        div.innerHTML = "<div style='width:5px;'></div>";
1617 18059f42 Kostas Papadimitriou
                        support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
1618 a7dd0415 Kostas Papadimitriou
                }
1619 a7dd0415 Kostas Papadimitriou
1620 18059f42 Kostas Papadimitriou
                div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility;
1621 a7dd0415 Kostas Papadimitriou
                div.innerHTML = html;
1622 a7dd0415 Kostas Papadimitriou
1623 a7dd0415 Kostas Papadimitriou
                outer = div.firstChild;
1624 a7dd0415 Kostas Papadimitriou
                inner = outer.firstChild;
1625 a7dd0415 Kostas Papadimitriou
                td = outer.nextSibling.firstChild.firstChild;
1626 a7dd0415 Kostas Papadimitriou
1627 a7dd0415 Kostas Papadimitriou
                offsetSupport = {
1628 a7dd0415 Kostas Papadimitriou
                        doesNotAddBorder: ( inner.offsetTop !== 5 ),
1629 a7dd0415 Kostas Papadimitriou
                        doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
1630 a7dd0415 Kostas Papadimitriou
                };
1631 a7dd0415 Kostas Papadimitriou
1632 a7dd0415 Kostas Papadimitriou
                inner.style.position = "fixed";
1633 a7dd0415 Kostas Papadimitriou
                inner.style.top = "20px";
1634 a7dd0415 Kostas Papadimitriou
1635 a7dd0415 Kostas Papadimitriou
                // safari subtracts parent border width here which is 5px
1636 a7dd0415 Kostas Papadimitriou
                offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
1637 a7dd0415 Kostas Papadimitriou
                inner.style.position = inner.style.top = "";
1638 a7dd0415 Kostas Papadimitriou
1639 a7dd0415 Kostas Papadimitriou
                outer.style.overflow = "hidden";
1640 a7dd0415 Kostas Papadimitriou
                outer.style.position = "relative";
1641 a7dd0415 Kostas Papadimitriou
1642 a7dd0415 Kostas Papadimitriou
                offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
1643 a7dd0415 Kostas Papadimitriou
                offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
1644 a7dd0415 Kostas Papadimitriou
1645 18059f42 Kostas Papadimitriou
                if ( window.getComputedStyle ) {
1646 18059f42 Kostas Papadimitriou
                        div.style.marginTop = "1%";
1647 18059f42 Kostas Papadimitriou
                        support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%";
1648 18059f42 Kostas Papadimitriou
                }
1649 18059f42 Kostas Papadimitriou
1650 18059f42 Kostas Papadimitriou
                if ( typeof container.style.zoom !== "undefined" ) {
1651 18059f42 Kostas Papadimitriou
                        container.style.zoom = 1;
1652 18059f42 Kostas Papadimitriou
                }
1653 18059f42 Kostas Papadimitriou
1654 a7dd0415 Kostas Papadimitriou
                body.removeChild( container );
1655 18059f42 Kostas Papadimitriou
                marginDiv = div = container = null;
1656 a7dd0415 Kostas Papadimitriou
1657 a7dd0415 Kostas Papadimitriou
                jQuery.extend( support, offsetSupport );
1658 a7dd0415 Kostas Papadimitriou
        });
1659 a7dd0415 Kostas Papadimitriou
1660 a7dd0415 Kostas Papadimitriou
        return support;
1661 a7dd0415 Kostas Papadimitriou
})();
1662 a7dd0415 Kostas Papadimitriou
1663 a7dd0415 Kostas Papadimitriou
1664 a7dd0415 Kostas Papadimitriou
1665 a7dd0415 Kostas Papadimitriou
1666 a7dd0415 Kostas Papadimitriou
var rbrace = /^(?:\{.*\}|\[.*\])$/,
1667 a7dd0415 Kostas Papadimitriou
        rmultiDash = /([A-Z])/g;
1668 a7dd0415 Kostas Papadimitriou
1669 a7dd0415 Kostas Papadimitriou
jQuery.extend({
1670 a7dd0415 Kostas Papadimitriou
        cache: {},
1671 a7dd0415 Kostas Papadimitriou
1672 a7dd0415 Kostas Papadimitriou
        // Please use with caution
1673 a7dd0415 Kostas Papadimitriou
        uuid: 0,
1674 a7dd0415 Kostas Papadimitriou
1675 a7dd0415 Kostas Papadimitriou
        // Unique for each copy of jQuery on the page
1676 a7dd0415 Kostas Papadimitriou
        // Non-digits removed to match rinlinejQuery
1677 a7dd0415 Kostas Papadimitriou
        expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
1678 a7dd0415 Kostas Papadimitriou
1679 a7dd0415 Kostas Papadimitriou
        // The following elements throw uncatchable exceptions if you
1680 a7dd0415 Kostas Papadimitriou
        // attempt to add expando properties to them.
1681 a7dd0415 Kostas Papadimitriou
        noData: {
1682 a7dd0415 Kostas Papadimitriou
                "embed": true,
1683 a7dd0415 Kostas Papadimitriou
                // Ban all objects except for Flash (which handle expandos)
1684 a7dd0415 Kostas Papadimitriou
                "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
1685 a7dd0415 Kostas Papadimitriou
                "applet": true
1686 a7dd0415 Kostas Papadimitriou
        },
1687 a7dd0415 Kostas Papadimitriou
1688 a7dd0415 Kostas Papadimitriou
        hasData: function( elem ) {
1689 a7dd0415 Kostas Papadimitriou
                elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
1690 a7dd0415 Kostas Papadimitriou
                return !!elem && !isEmptyDataObject( elem );
1691 a7dd0415 Kostas Papadimitriou
        },
1692 a7dd0415 Kostas Papadimitriou
1693 a7dd0415 Kostas Papadimitriou
        data: function( elem, name, data, pvt /* Internal Use Only */ ) {
1694 a7dd0415 Kostas Papadimitriou
                if ( !jQuery.acceptData( elem ) ) {
1695 a7dd0415 Kostas Papadimitriou
                        return;
1696 a7dd0415 Kostas Papadimitriou
                }
1697 a7dd0415 Kostas Papadimitriou
1698 a7dd0415 Kostas Papadimitriou
                var privateCache, thisCache, ret,
1699 a7dd0415 Kostas Papadimitriou
                        internalKey = jQuery.expando,
1700 a7dd0415 Kostas Papadimitriou
                        getByName = typeof name === "string",
1701 a7dd0415 Kostas Papadimitriou
1702 a7dd0415 Kostas Papadimitriou
                        // We have to handle DOM nodes and JS objects differently because IE6-7
1703 a7dd0415 Kostas Papadimitriou
                        // can't GC object references properly across the DOM-JS boundary
1704 a7dd0415 Kostas Papadimitriou
                        isNode = elem.nodeType,
1705 a7dd0415 Kostas Papadimitriou
1706 a7dd0415 Kostas Papadimitriou
                        // Only DOM nodes need the global jQuery cache; JS object data is
1707 a7dd0415 Kostas Papadimitriou
                        // attached directly to the object so GC can occur automatically
1708 a7dd0415 Kostas Papadimitriou
                        cache = isNode ? jQuery.cache : elem,
1709 a7dd0415 Kostas Papadimitriou
1710 a7dd0415 Kostas Papadimitriou
                        // Only defining an ID for JS objects if its cache already exists allows
1711 a7dd0415 Kostas Papadimitriou
                        // the code to shortcut on the same path as a DOM node with no cache
1712 a7dd0415 Kostas Papadimitriou
                        id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,
1713 a7dd0415 Kostas Papadimitriou
                        isEvents = name === "events";
1714 a7dd0415 Kostas Papadimitriou
1715 a7dd0415 Kostas Papadimitriou
                // Avoid doing any more work than we need to when trying to get data on an
1716 a7dd0415 Kostas Papadimitriou
                // object that has no data at all
1717 a7dd0415 Kostas Papadimitriou
                if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
1718 a7dd0415 Kostas Papadimitriou
                        return;
1719 a7dd0415 Kostas Papadimitriou
                }
1720 a7dd0415 Kostas Papadimitriou
1721 a7dd0415 Kostas Papadimitriou
                if ( !id ) {
1722 a7dd0415 Kostas Papadimitriou
                        // Only DOM nodes need a new unique ID for each element since their data
1723 a7dd0415 Kostas Papadimitriou
                        // ends up in the global cache
1724 a7dd0415 Kostas Papadimitriou
                        if ( isNode ) {
1725 a7dd0415 Kostas Papadimitriou
                                elem[ internalKey ] = id = ++jQuery.uuid;
1726 a7dd0415 Kostas Papadimitriou
                        } else {
1727 a7dd0415 Kostas Papadimitriou
                                id = internalKey;
1728 a7dd0415 Kostas Papadimitriou
                        }
1729 a7dd0415 Kostas Papadimitriou
                }
1730 a7dd0415 Kostas Papadimitriou
1731 a7dd0415 Kostas Papadimitriou
                if ( !cache[ id ] ) {
1732 a7dd0415 Kostas Papadimitriou
                        cache[ id ] = {};
1733 a7dd0415 Kostas Papadimitriou
1734 a7dd0415 Kostas Papadimitriou
                        // Avoids exposing jQuery metadata on plain JS objects when the object
1735 a7dd0415 Kostas Papadimitriou
                        // is serialized using JSON.stringify
1736 a7dd0415 Kostas Papadimitriou
                        if ( !isNode ) {
1737 a7dd0415 Kostas Papadimitriou
                                cache[ id ].toJSON = jQuery.noop;
1738 a7dd0415 Kostas Papadimitriou
                        }
1739 a7dd0415 Kostas Papadimitriou
                }
1740 a7dd0415 Kostas Papadimitriou
1741 a7dd0415 Kostas Papadimitriou
                // An object can be passed to jQuery.data instead of a key/value pair; this gets
1742 a7dd0415 Kostas Papadimitriou
                // shallow copied over onto the existing cache
1743 a7dd0415 Kostas Papadimitriou
                if ( typeof name === "object" || typeof name === "function" ) {
1744 a7dd0415 Kostas Papadimitriou
                        if ( pvt ) {
1745 a7dd0415 Kostas Papadimitriou
                                cache[ id ] = jQuery.extend( cache[ id ], name );
1746 a7dd0415 Kostas Papadimitriou
                        } else {
1747 a7dd0415 Kostas Papadimitriou
                                cache[ id ].data = jQuery.extend( cache[ id ].data, name );
1748 a7dd0415 Kostas Papadimitriou
                        }
1749 a7dd0415 Kostas Papadimitriou
                }
1750 a7dd0415 Kostas Papadimitriou
1751 a7dd0415 Kostas Papadimitriou
                privateCache = thisCache = cache[ id ];
1752 a7dd0415 Kostas Papadimitriou
1753 a7dd0415 Kostas Papadimitriou
                // jQuery data() is stored in a separate object inside the object's internal data
1754 a7dd0415 Kostas Papadimitriou
                // cache in order to avoid key collisions between internal data and user-defined
1755 a7dd0415 Kostas Papadimitriou
                // data.
1756 a7dd0415 Kostas Papadimitriou
                if ( !pvt ) {
1757 a7dd0415 Kostas Papadimitriou
                        if ( !thisCache.data ) {
1758 a7dd0415 Kostas Papadimitriou
                                thisCache.data = {};
1759 a7dd0415 Kostas Papadimitriou
                        }
1760 a7dd0415 Kostas Papadimitriou
1761 a7dd0415 Kostas Papadimitriou
                        thisCache = thisCache.data;
1762 a7dd0415 Kostas Papadimitriou
                }
1763 a7dd0415 Kostas Papadimitriou
1764 a7dd0415 Kostas Papadimitriou
                if ( data !== undefined ) {
1765 a7dd0415 Kostas Papadimitriou
                        thisCache[ jQuery.camelCase( name ) ] = data;
1766 a7dd0415 Kostas Papadimitriou
                }
1767 a7dd0415 Kostas Papadimitriou
1768 a7dd0415 Kostas Papadimitriou
                // Users should not attempt to inspect the internal events object using jQuery.data,
1769 a7dd0415 Kostas Papadimitriou
                // it is undocumented and subject to change. But does anyone listen? No.
1770 a7dd0415 Kostas Papadimitriou
                if ( isEvents && !thisCache[ name ] ) {
1771 a7dd0415 Kostas Papadimitriou
                        return privateCache.events;
1772 a7dd0415 Kostas Papadimitriou
                }
1773 a7dd0415 Kostas Papadimitriou
1774 a7dd0415 Kostas Papadimitriou
                // Check for both converted-to-camel and non-converted data property names
1775 a7dd0415 Kostas Papadimitriou
                // If a data property was specified
1776 a7dd0415 Kostas Papadimitriou
                if ( getByName ) {
1777 a7dd0415 Kostas Papadimitriou
1778 a7dd0415 Kostas Papadimitriou
                        // First Try to find as-is property data
1779 a7dd0415 Kostas Papadimitriou
                        ret = thisCache[ name ];
1780 a7dd0415 Kostas Papadimitriou
1781 a7dd0415 Kostas Papadimitriou
                        // Test for null|undefined property data
1782 a7dd0415 Kostas Papadimitriou
                        if ( ret == null ) {
1783 a7dd0415 Kostas Papadimitriou
1784 a7dd0415 Kostas Papadimitriou
                                // Try to find the camelCased property
1785 a7dd0415 Kostas Papadimitriou
                                ret = thisCache[ jQuery.camelCase( name ) ];
1786 a7dd0415 Kostas Papadimitriou
                        }
1787 a7dd0415 Kostas Papadimitriou
                } else {
1788 a7dd0415 Kostas Papadimitriou
                        ret = thisCache;
1789 a7dd0415 Kostas Papadimitriou
                }
1790 a7dd0415 Kostas Papadimitriou
1791 a7dd0415 Kostas Papadimitriou
                return ret;
1792 a7dd0415 Kostas Papadimitriou
        },
1793 a7dd0415 Kostas Papadimitriou
1794 a7dd0415 Kostas Papadimitriou
        removeData: function( elem, name, pvt /* Internal Use Only */ ) {
1795 a7dd0415 Kostas Papadimitriou
                if ( !jQuery.acceptData( elem ) ) {
1796 a7dd0415 Kostas Papadimitriou
                        return;
1797 a7dd0415 Kostas Papadimitriou
                }
1798 a7dd0415 Kostas Papadimitriou
1799 a7dd0415 Kostas Papadimitriou
                var thisCache, i, l,
1800 a7dd0415 Kostas Papadimitriou
1801 a7dd0415 Kostas Papadimitriou
                        // Reference to internal data cache key
1802 a7dd0415 Kostas Papadimitriou
                        internalKey = jQuery.expando,
1803 a7dd0415 Kostas Papadimitriou
1804 a7dd0415 Kostas Papadimitriou
                        isNode = elem.nodeType,
1805 a7dd0415 Kostas Papadimitriou
1806 a7dd0415 Kostas Papadimitriou
                        // See jQuery.data for more information
1807 a7dd0415 Kostas Papadimitriou
                        cache = isNode ? jQuery.cache : elem,
1808 a7dd0415 Kostas Papadimitriou
1809 a7dd0415 Kostas Papadimitriou
                        // See jQuery.data for more information
1810 a7dd0415 Kostas Papadimitriou
                        id = isNode ? elem[ internalKey ] : internalKey;
1811 a7dd0415 Kostas Papadimitriou
1812 a7dd0415 Kostas Papadimitriou
                // If there is already no cache entry for this object, there is no
1813 a7dd0415 Kostas Papadimitriou
                // purpose in continuing
1814 a7dd0415 Kostas Papadimitriou
                if ( !cache[ id ] ) {
1815 a7dd0415 Kostas Papadimitriou
                        return;
1816 a7dd0415 Kostas Papadimitriou
                }
1817 a7dd0415 Kostas Papadimitriou
1818 a7dd0415 Kostas Papadimitriou
                if ( name ) {
1819 a7dd0415 Kostas Papadimitriou
1820 a7dd0415 Kostas Papadimitriou
                        thisCache = pvt ? cache[ id ] : cache[ id ].data;
1821 a7dd0415 Kostas Papadimitriou
1822 a7dd0415 Kostas Papadimitriou
                        if ( thisCache ) {
1823 a7dd0415 Kostas Papadimitriou
1824 a7dd0415 Kostas Papadimitriou
                                // Support array or space separated string names for data keys
1825 a7dd0415 Kostas Papadimitriou
                                if ( !jQuery.isArray( name ) ) {
1826 a7dd0415 Kostas Papadimitriou
1827 a7dd0415 Kostas Papadimitriou
                                        // try the string as a key before any manipulation
1828 a7dd0415 Kostas Papadimitriou
                                        if ( name in thisCache ) {
1829 a7dd0415 Kostas Papadimitriou
                                                name = [ name ];
1830 a7dd0415 Kostas Papadimitriou
                                        } else {
1831 a7dd0415 Kostas Papadimitriou
1832 a7dd0415 Kostas Papadimitriou
                                                // split the camel cased version by spaces unless a key with the spaces exists
1833 a7dd0415 Kostas Papadimitriou
                                                name = jQuery.camelCase( name );
1834 a7dd0415 Kostas Papadimitriou
                                                if ( name in thisCache ) {
1835 a7dd0415 Kostas Papadimitriou
                                                        name = [ name ];
1836 a7dd0415 Kostas Papadimitriou
                                                } else {
1837 a7dd0415 Kostas Papadimitriou
                                                        name = name.split( " " );
1838 a7dd0415 Kostas Papadimitriou
                                                }
1839 a7dd0415 Kostas Papadimitriou
                                        }
1840 a7dd0415 Kostas Papadimitriou
                                }
1841 a7dd0415 Kostas Papadimitriou
1842 a7dd0415 Kostas Papadimitriou
                                for ( i = 0, l = name.length; i < l; i++ ) {
1843 a7dd0415 Kostas Papadimitriou
                                        delete thisCache[ name[i] ];
1844 a7dd0415 Kostas Papadimitriou
                                }
1845 a7dd0415 Kostas Papadimitriou
1846 a7dd0415 Kostas Papadimitriou
                                // If there is no data left in the cache, we want to continue
1847 a7dd0415 Kostas Papadimitriou
                                // and let the cache object itself get destroyed
1848 a7dd0415 Kostas Papadimitriou
                                if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
1849 a7dd0415 Kostas Papadimitriou
                                        return;
1850 a7dd0415 Kostas Papadimitriou
                                }
1851 a7dd0415 Kostas Papadimitriou
                        }
1852 a7dd0415 Kostas Papadimitriou
                }
1853 a7dd0415 Kostas Papadimitriou
1854 a7dd0415 Kostas Papadimitriou
                // See jQuery.data for more information
1855 a7dd0415 Kostas Papadimitriou
                if ( !pvt ) {
1856 a7dd0415 Kostas Papadimitriou
                        delete cache[ id ].data;
1857 a7dd0415 Kostas Papadimitriou
1858 a7dd0415 Kostas Papadimitriou
                        // Don't destroy the parent cache unless the internal data object
1859 a7dd0415 Kostas Papadimitriou
                        // had been the only thing left in it
1860 a7dd0415 Kostas Papadimitriou
                        if ( !isEmptyDataObject(cache[ id ]) ) {
1861 a7dd0415 Kostas Papadimitriou
                                return;
1862 a7dd0415 Kostas Papadimitriou
                        }
1863 a7dd0415 Kostas Papadimitriou
                }
1864 a7dd0415 Kostas Papadimitriou
1865 a7dd0415 Kostas Papadimitriou
                // Browsers that fail expando deletion also refuse to delete expandos on
1866 a7dd0415 Kostas Papadimitriou
                // the window, but it will allow it on all other JS objects; other browsers
1867 a7dd0415 Kostas Papadimitriou
                // don't care
1868 a7dd0415 Kostas Papadimitriou
                // Ensure that `cache` is not a window object #10080
1869 a7dd0415 Kostas Papadimitriou
                if ( jQuery.support.deleteExpando || !cache.setInterval ) {
1870 a7dd0415 Kostas Papadimitriou
                        delete cache[ id ];
1871 a7dd0415 Kostas Papadimitriou
                } else {
1872 a7dd0415 Kostas Papadimitriou
                        cache[ id ] = null;
1873 a7dd0415 Kostas Papadimitriou
                }
1874 a7dd0415 Kostas Papadimitriou
1875 a7dd0415 Kostas Papadimitriou
                // We destroyed the cache and need to eliminate the expando on the node to avoid
1876 a7dd0415 Kostas Papadimitriou
                // false lookups in the cache for entries that no longer exist
1877 a7dd0415 Kostas Papadimitriou
                if ( isNode ) {
1878 a7dd0415 Kostas Papadimitriou
                        // IE does not allow us to delete expando properties from nodes,
1879 a7dd0415 Kostas Papadimitriou
                        // nor does it have a removeAttribute function on Document nodes;
1880 a7dd0415 Kostas Papadimitriou
                        // we must handle all of these cases
1881 a7dd0415 Kostas Papadimitriou
                        if ( jQuery.support.deleteExpando ) {
1882 a7dd0415 Kostas Papadimitriou
                                delete elem[ internalKey ];
1883 a7dd0415 Kostas Papadimitriou
                        } else if ( elem.removeAttribute ) {
1884 a7dd0415 Kostas Papadimitriou
                                elem.removeAttribute( internalKey );
1885 a7dd0415 Kostas Papadimitriou
                        } else {
1886 a7dd0415 Kostas Papadimitriou
                                elem[ internalKey ] = null;
1887 a7dd0415 Kostas Papadimitriou
                        }
1888 a7dd0415 Kostas Papadimitriou
                }
1889 a7dd0415 Kostas Papadimitriou
        },
1890 a7dd0415 Kostas Papadimitriou
1891 a7dd0415 Kostas Papadimitriou
        // For internal use only.
1892 a7dd0415 Kostas Papadimitriou
        _data: function( elem, name, data ) {
1893 a7dd0415 Kostas Papadimitriou
                return jQuery.data( elem, name, data, true );
1894 a7dd0415 Kostas Papadimitriou
        },
1895 a7dd0415 Kostas Papadimitriou
1896 a7dd0415 Kostas Papadimitriou
        // A method for determining if a DOM node can handle the data expando
1897 a7dd0415 Kostas Papadimitriou
        acceptData: function( elem ) {
1898 a7dd0415 Kostas Papadimitriou
                if ( elem.nodeName ) {
1899 a7dd0415 Kostas Papadimitriou
                        var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
1900 a7dd0415 Kostas Papadimitriou
1901 a7dd0415 Kostas Papadimitriou
                        if ( match ) {
1902 a7dd0415 Kostas Papadimitriou
                                return !(match === true || elem.getAttribute("classid") !== match);
1903 a7dd0415 Kostas Papadimitriou
                        }
1904 a7dd0415 Kostas Papadimitriou
                }
1905 a7dd0415 Kostas Papadimitriou
1906 a7dd0415 Kostas Papadimitriou
                return true;
1907 a7dd0415 Kostas Papadimitriou
        }
1908 a7dd0415 Kostas Papadimitriou
});
1909 a7dd0415 Kostas Papadimitriou
1910 a7dd0415 Kostas Papadimitriou
jQuery.fn.extend({
1911 a7dd0415 Kostas Papadimitriou
        data: function( key, value ) {
1912 18059f42 Kostas Papadimitriou
                var parts, part, attr, name, l,
1913 18059f42 Kostas Papadimitriou
                        elem = this[0],
1914 18059f42 Kostas Papadimitriou
                        i = 0,
1915 a7dd0415 Kostas Papadimitriou
                        data = null;
1916 a7dd0415 Kostas Papadimitriou
1917 18059f42 Kostas Papadimitriou
                // Gets all values
1918 18059f42 Kostas Papadimitriou
                if ( key === undefined ) {
1919 a7dd0415 Kostas Papadimitriou
                        if ( this.length ) {
1920 18059f42 Kostas Papadimitriou
                                data = jQuery.data( elem );
1921 a7dd0415 Kostas Papadimitriou
1922 18059f42 Kostas Papadimitriou
                                if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
1923 18059f42 Kostas Papadimitriou
                                        attr = elem.attributes;
1924 18059f42 Kostas Papadimitriou
                                        for ( l = attr.length; i < l; i++ ) {
1925 a7dd0415 Kostas Papadimitriou
                                                name = attr[i].name;
1926 a7dd0415 Kostas Papadimitriou
1927 a7dd0415 Kostas Papadimitriou
                                                if ( name.indexOf( "data-" ) === 0 ) {
1928 a7dd0415 Kostas Papadimitriou
                                                        name = jQuery.camelCase( name.substring(5) );
1929 a7dd0415 Kostas Papadimitriou
1930 18059f42 Kostas Papadimitriou
                                                        dataAttr( elem, name, data[ name ] );
1931 a7dd0415 Kostas Papadimitriou
                                                }
1932 a7dd0415 Kostas Papadimitriou
                                        }
1933 18059f42 Kostas Papadimitriou
                                        jQuery._data( elem, "parsedAttrs", true );
1934 a7dd0415 Kostas Papadimitriou
                                }
1935 a7dd0415 Kostas Papadimitriou
                        }
1936 a7dd0415 Kostas Papadimitriou
1937 a7dd0415 Kostas Papadimitriou
                        return data;
1938 18059f42 Kostas Papadimitriou
                }
1939 a7dd0415 Kostas Papadimitriou
1940 18059f42 Kostas Papadimitriou
                // Sets multiple values
1941 18059f42 Kostas Papadimitriou
                if ( typeof key === "object" ) {
1942 a7dd0415 Kostas Papadimitriou
                        return this.each(function() {
1943 a7dd0415 Kostas Papadimitriou
                                jQuery.data( this, key );
1944 a7dd0415 Kostas Papadimitriou
                        });
1945 a7dd0415 Kostas Papadimitriou
                }
1946 a7dd0415 Kostas Papadimitriou
1947 18059f42 Kostas Papadimitriou
                parts = key.split( ".", 2 );
1948 a7dd0415 Kostas Papadimitriou
                parts[1] = parts[1] ? "." + parts[1] : "";
1949 18059f42 Kostas Papadimitriou
                part = parts[1] + "!";
1950 a7dd0415 Kostas Papadimitriou
1951 18059f42 Kostas Papadimitriou
                return jQuery.access( this, function( value ) {
1952 a7dd0415 Kostas Papadimitriou
1953 18059f42 Kostas Papadimitriou
                        if ( value === undefined ) {
1954 18059f42 Kostas Papadimitriou
                                data = this.triggerHandler( "getData" + part, [ parts[0] ] );
1955 a7dd0415 Kostas Papadimitriou
1956 18059f42 Kostas Papadimitriou
                                // Try to fetch any internally stored data first
1957 18059f42 Kostas Papadimitriou
                                if ( data === undefined && elem ) {
1958 18059f42 Kostas Papadimitriou
                                        data = jQuery.data( elem, key );
1959 18059f42 Kostas Papadimitriou
                                        data = dataAttr( elem, key, data );
1960 18059f42 Kostas Papadimitriou
                                }
1961 a7dd0415 Kostas Papadimitriou
1962 18059f42 Kostas Papadimitriou
                                return data === undefined && parts[1] ?
1963 18059f42 Kostas Papadimitriou
                                        this.data( parts[0] ) :
1964 18059f42 Kostas Papadimitriou
                                        data;
1965 18059f42 Kostas Papadimitriou
                        }
1966 a7dd0415 Kostas Papadimitriou
1967 18059f42 Kostas Papadimitriou
                        parts[1] = value;
1968 18059f42 Kostas Papadimitriou
                        this.each(function() {
1969 18059f42 Kostas Papadimitriou
                                var self = jQuery( this );
1970 18059f42 Kostas Papadimitriou
1971 18059f42 Kostas Papadimitriou
                                self.triggerHandler( "setData" + part, parts );
1972 a7dd0415 Kostas Papadimitriou
                                jQuery.data( this, key, value );
1973 18059f42 Kostas Papadimitriou
                                self.triggerHandler( "changeData" + part, parts );
1974 a7dd0415 Kostas Papadimitriou
                        });
1975 18059f42 Kostas Papadimitriou
                }, null, value, arguments.length > 1, null, false );
1976 a7dd0415 Kostas Papadimitriou
        },
1977 a7dd0415 Kostas Papadimitriou
1978 a7dd0415 Kostas Papadimitriou
        removeData: function( key ) {
1979 a7dd0415 Kostas Papadimitriou
                return this.each(function() {
1980 a7dd0415 Kostas Papadimitriou
                        jQuery.removeData( this, key );
1981 a7dd0415 Kostas Papadimitriou
                });
1982 a7dd0415 Kostas Papadimitriou
        }
1983 a7dd0415 Kostas Papadimitriou
});
1984 a7dd0415 Kostas Papadimitriou
1985 a7dd0415 Kostas Papadimitriou
function dataAttr( elem, key, data ) {
1986 a7dd0415 Kostas Papadimitriou
        // If nothing was found internally, try to fetch any
1987 a7dd0415 Kostas Papadimitriou
        // data from the HTML5 data-* attribute
1988 a7dd0415 Kostas Papadimitriou
        if ( data === undefined && elem.nodeType === 1 ) {
1989 a7dd0415 Kostas Papadimitriou
1990 a7dd0415 Kostas Papadimitriou
                var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
1991 a7dd0415 Kostas Papadimitriou
1992 a7dd0415 Kostas Papadimitriou
                data = elem.getAttribute( name );
1993 a7dd0415 Kostas Papadimitriou
1994 a7dd0415 Kostas Papadimitriou
                if ( typeof data === "string" ) {
1995 a7dd0415 Kostas Papadimitriou
                        try {
1996 a7dd0415 Kostas Papadimitriou
                                data = data === "true" ? true :
1997 a7dd0415 Kostas Papadimitriou
                                data === "false" ? false :
1998 a7dd0415 Kostas Papadimitriou
                                data === "null" ? null :
1999 18059f42 Kostas Papadimitriou
                                jQuery.isNumeric( data ) ? +data :
2000 a7dd0415 Kostas Papadimitriou
                                        rbrace.test( data ) ? jQuery.parseJSON( data ) :
2001 a7dd0415 Kostas Papadimitriou
                                        data;
2002 a7dd0415 Kostas Papadimitriou
                        } catch( e ) {}
2003 a7dd0415 Kostas Papadimitriou
2004 a7dd0415 Kostas Papadimitriou
                        // Make sure we set the data so it isn't changed later
2005 a7dd0415 Kostas Papadimitriou
                        jQuery.data( elem, key, data );
2006 a7dd0415 Kostas Papadimitriou
2007 a7dd0415 Kostas Papadimitriou
                } else {
2008 a7dd0415 Kostas Papadimitriou
                        data = undefined;
2009 a7dd0415 Kostas Papadimitriou
                }
2010 a7dd0415 Kostas Papadimitriou
        }
2011 a7dd0415 Kostas Papadimitriou
2012 a7dd0415 Kostas Papadimitriou
        return data;
2013 a7dd0415 Kostas Papadimitriou
}
2014 a7dd0415 Kostas Papadimitriou
2015 a7dd0415 Kostas Papadimitriou
// checks a cache object for emptiness
2016 a7dd0415 Kostas Papadimitriou
function isEmptyDataObject( obj ) {
2017 a7dd0415 Kostas Papadimitriou
        for ( var name in obj ) {
2018 a7dd0415 Kostas Papadimitriou
2019 a7dd0415 Kostas Papadimitriou
                // if the public data object is empty, the private is still empty
2020 a7dd0415 Kostas Papadimitriou
                if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
2021 a7dd0415 Kostas Papadimitriou
                        continue;
2022 a7dd0415 Kostas Papadimitriou
                }
2023 a7dd0415 Kostas Papadimitriou
                if ( name !== "toJSON" ) {
2024 a7dd0415 Kostas Papadimitriou
                        return false;
2025 a7dd0415 Kostas Papadimitriou
                }
2026 a7dd0415 Kostas Papadimitriou
        }
2027 a7dd0415 Kostas Papadimitriou
2028 a7dd0415 Kostas Papadimitriou
        return true;
2029 a7dd0415 Kostas Papadimitriou
}
2030 a7dd0415 Kostas Papadimitriou
2031 a7dd0415 Kostas Papadimitriou
2032 a7dd0415 Kostas Papadimitriou
2033 a7dd0415 Kostas Papadimitriou
2034 a7dd0415 Kostas Papadimitriou
function handleQueueMarkDefer( elem, type, src ) {
2035 a7dd0415 Kostas Papadimitriou
        var deferDataKey = type + "defer",
2036 a7dd0415 Kostas Papadimitriou
                queueDataKey = type + "queue",
2037 a7dd0415 Kostas Papadimitriou
                markDataKey = type + "mark",
2038 a7dd0415 Kostas Papadimitriou
                defer = jQuery._data( elem, deferDataKey );
2039 a7dd0415 Kostas Papadimitriou
        if ( defer &&
2040 a7dd0415 Kostas Papadimitriou
                ( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
2041 a7dd0415 Kostas Papadimitriou
                ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
2042 a7dd0415 Kostas Papadimitriou
                // Give room for hard-coded callbacks to fire first
2043 a7dd0415 Kostas Papadimitriou
                // and eventually mark/queue something else on the element
2044 a7dd0415 Kostas Papadimitriou
                setTimeout( function() {
2045 a7dd0415 Kostas Papadimitriou
                        if ( !jQuery._data( elem, queueDataKey ) &&
2046 a7dd0415 Kostas Papadimitriou
                                !jQuery._data( elem, markDataKey ) ) {
2047 a7dd0415 Kostas Papadimitriou
                                jQuery.removeData( elem, deferDataKey, true );
2048 a7dd0415 Kostas Papadimitriou
                                defer.fire();
2049 a7dd0415 Kostas Papadimitriou
                        }
2050 a7dd0415 Kostas Papadimitriou
                }, 0 );
2051 a7dd0415 Kostas Papadimitriou
        }
2052 a7dd0415 Kostas Papadimitriou
}
2053 a7dd0415 Kostas Papadimitriou
2054 a7dd0415 Kostas Papadimitriou
jQuery.extend({
2055 a7dd0415 Kostas Papadimitriou
2056 a7dd0415 Kostas Papadimitriou
        _mark: function( elem, type ) {
2057 a7dd0415 Kostas Papadimitriou
                if ( elem ) {
2058 a7dd0415 Kostas Papadimitriou
                        type = ( type || "fx" ) + "mark";
2059 a7dd0415 Kostas Papadimitriou
                        jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
2060 a7dd0415 Kostas Papadimitriou
                }
2061 a7dd0415 Kostas Papadimitriou
        },
2062 a7dd0415 Kostas Papadimitriou
2063 a7dd0415 Kostas Papadimitriou
        _unmark: function( force, elem, type ) {
2064 a7dd0415 Kostas Papadimitriou
                if ( force !== true ) {
2065 a7dd0415 Kostas Papadimitriou
                        type = elem;
2066 a7dd0415 Kostas Papadimitriou
                        elem = force;
2067 a7dd0415 Kostas Papadimitriou
                        force = false;
2068 a7dd0415 Kostas Papadimitriou
                }
2069 a7dd0415 Kostas Papadimitriou
                if ( elem ) {
2070 a7dd0415 Kostas Papadimitriou
                        type = type || "fx";
2071 a7dd0415 Kostas Papadimitriou
                        var key = type + "mark",
2072 a7dd0415 Kostas Papadimitriou
                                count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
2073 a7dd0415 Kostas Papadimitriou
                        if ( count ) {
2074 a7dd0415 Kostas Papadimitriou
                                jQuery._data( elem, key, count );
2075 a7dd0415 Kostas Papadimitriou
                        } else {
2076 a7dd0415 Kostas Papadimitriou
                                jQuery.removeData( elem, key, true );
2077 a7dd0415 Kostas Papadimitriou
                                handleQueueMarkDefer( elem, type, "mark" );
2078 a7dd0415 Kostas Papadimitriou
                        }
2079 a7dd0415 Kostas Papadimitriou
                }
2080 a7dd0415 Kostas Papadimitriou
        },
2081 a7dd0415 Kostas Papadimitriou
2082 a7dd0415 Kostas Papadimitriou
        queue: function( elem, type, data ) {
2083 a7dd0415 Kostas Papadimitriou
                var q;
2084 a7dd0415 Kostas Papadimitriou
                if ( elem ) {
2085 a7dd0415 Kostas Papadimitriou
                        type = ( type || "fx" ) + "queue";
2086 a7dd0415 Kostas Papadimitriou
                        q = jQuery._data( elem, type );
2087 a7dd0415 Kostas Papadimitriou
2088 a7dd0415 Kostas Papadimitriou
                        // Speed up dequeue by getting out quickly if this is just a lookup
2089 a7dd0415 Kostas Papadimitriou
                        if ( data ) {
2090 a7dd0415 Kostas Papadimitriou
                                if ( !q || jQuery.isArray(data) ) {
2091 a7dd0415 Kostas Papadimitriou
                                        q = jQuery._data( elem, type, jQuery.makeArray(data) );
2092 a7dd0415 Kostas Papadimitriou
                                } else {
2093 a7dd0415 Kostas Papadimitriou
                                        q.push( data );
2094 a7dd0415 Kostas Papadimitriou
                                }
2095 a7dd0415 Kostas Papadimitriou
                        }
2096 a7dd0415 Kostas Papadimitriou
                        return q || [];
2097 a7dd0415 Kostas Papadimitriou
                }
2098 a7dd0415 Kostas Papadimitriou
        },
2099 a7dd0415 Kostas Papadimitriou
2100 a7dd0415 Kostas Papadimitriou
        dequeue: function( elem, type ) {
2101 a7dd0415 Kostas Papadimitriou
                type = type || "fx";
2102 a7dd0415 Kostas Papadimitriou
2103 a7dd0415 Kostas Papadimitriou
                var queue = jQuery.queue( elem, type ),
2104 a7dd0415 Kostas Papadimitriou
                        fn = queue.shift(),
2105 a7dd0415 Kostas Papadimitriou
                        hooks = {};
2106 a7dd0415 Kostas Papadimitriou
2107 a7dd0415 Kostas Papadimitriou
                // If the fx queue is dequeued, always remove the progress sentinel
2108 a7dd0415 Kostas Papadimitriou
                if ( fn === "inprogress" ) {
2109 a7dd0415 Kostas Papadimitriou
                        fn = queue.shift();
2110 a7dd0415 Kostas Papadimitriou
                }
2111 a7dd0415 Kostas Papadimitriou
2112 a7dd0415 Kostas Papadimitriou
                if ( fn ) {
2113 a7dd0415 Kostas Papadimitriou
                        // Add a progress sentinel to prevent the fx queue from being
2114 a7dd0415 Kostas Papadimitriou
                        // automatically dequeued
2115 a7dd0415 Kostas Papadimitriou
                        if ( type === "fx" ) {
2116 a7dd0415 Kostas Papadimitriou
                                queue.unshift( "inprogress" );
2117 a7dd0415 Kostas Papadimitriou
                        }
2118 a7dd0415 Kostas Papadimitriou
2119 a7dd0415 Kostas Papadimitriou
                        jQuery._data( elem, type + ".run", hooks );
2120 a7dd0415 Kostas Papadimitriou
                        fn.call( elem, function() {
2121 a7dd0415 Kostas Papadimitriou
                                jQuery.dequeue( elem, type );
2122 a7dd0415 Kostas Papadimitriou
                        }, hooks );
2123 a7dd0415 Kostas Papadimitriou
                }
2124 a7dd0415 Kostas Papadimitriou
2125 a7dd0415 Kostas Papadimitriou
                if ( !queue.length ) {
2126 a7dd0415 Kostas Papadimitriou
                        jQuery.removeData( elem, type + "queue " + type + ".run", true );
2127 a7dd0415 Kostas Papadimitriou
                        handleQueueMarkDefer( elem, type, "queue" );
2128 a7dd0415 Kostas Papadimitriou
                }
2129 a7dd0415 Kostas Papadimitriou
        }
2130 a7dd0415 Kostas Papadimitriou
});
2131 a7dd0415 Kostas Papadimitriou
2132 a7dd0415 Kostas Papadimitriou
jQuery.fn.extend({
2133 a7dd0415 Kostas Papadimitriou
        queue: function( type, data ) {
2134 18059f42 Kostas Papadimitriou
                var setter = 2;
2135 18059f42 Kostas Papadimitriou
2136 a7dd0415 Kostas Papadimitriou
                if ( typeof type !== "string" ) {
2137 a7dd0415 Kostas Papadimitriou
                        data = type;
2138 a7dd0415 Kostas Papadimitriou
                        type = "fx";
2139 18059f42 Kostas Papadimitriou
                        setter--;
2140 a7dd0415 Kostas Papadimitriou
                }
2141 a7dd0415 Kostas Papadimitriou
2142 18059f42 Kostas Papadimitriou
                if ( arguments.length < setter ) {
2143 a7dd0415 Kostas Papadimitriou
                        return jQuery.queue( this[0], type );
2144 a7dd0415 Kostas Papadimitriou
                }
2145 a7dd0415 Kostas Papadimitriou
2146 18059f42 Kostas Papadimitriou
                return data === undefined ?
2147 18059f42 Kostas Papadimitriou
                        this :
2148 18059f42 Kostas Papadimitriou
                        this.each(function() {
2149 18059f42 Kostas Papadimitriou
                                var queue = jQuery.queue( this, type, data );
2150 18059f42 Kostas Papadimitriou
2151 18059f42 Kostas Papadimitriou
                                if ( type === "fx" && queue[0] !== "inprogress" ) {
2152 18059f42 Kostas Papadimitriou
                                        jQuery.dequeue( this, type );
2153 18059f42 Kostas Papadimitriou
                                }
2154 18059f42 Kostas Papadimitriou
                        });
2155 a7dd0415 Kostas Papadimitriou
        },
2156 a7dd0415 Kostas Papadimitriou
        dequeue: function( type ) {
2157 a7dd0415 Kostas Papadimitriou
                return this.each(function() {
2158 a7dd0415 Kostas Papadimitriou
                        jQuery.dequeue( this, type );
2159 a7dd0415 Kostas Papadimitriou
                });
2160 a7dd0415 Kostas Papadimitriou
        },
2161 a7dd0415 Kostas Papadimitriou
        // Based off of the plugin by Clint Helfers, with permission.
2162 a7dd0415 Kostas Papadimitriou
        // http://blindsignals.com/index.php/2009/07/jquery-delay/
2163 a7dd0415 Kostas Papadimitriou
        delay: function( time, type ) {
2164 a7dd0415 Kostas Papadimitriou
                time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
2165 a7dd0415 Kostas Papadimitriou
                type = type || "fx";
2166 a7dd0415 Kostas Papadimitriou
2167 a7dd0415 Kostas Papadimitriou
                return this.queue( type, function( next, hooks ) {
2168 a7dd0415 Kostas Papadimitriou
                        var timeout = setTimeout( next, time );
2169 a7dd0415 Kostas Papadimitriou
                        hooks.stop = function() {
2170 a7dd0415 Kostas Papadimitriou
                                clearTimeout( timeout );
2171 a7dd0415 Kostas Papadimitriou
                        };
2172 a7dd0415 Kostas Papadimitriou
                });
2173 a7dd0415 Kostas Papadimitriou
        },
2174 a7dd0415 Kostas Papadimitriou
        clearQueue: function( type ) {
2175 a7dd0415 Kostas Papadimitriou
                return this.queue( type || "fx", [] );
2176 a7dd0415 Kostas Papadimitriou
        },
2177 a7dd0415 Kostas Papadimitriou
        // Get a promise resolved when queues of a certain type
2178 a7dd0415 Kostas Papadimitriou
        // are emptied (fx is the type by default)
2179 a7dd0415 Kostas Papadimitriou
        promise: function( type, object ) {
2180 a7dd0415 Kostas Papadimitriou
                if ( typeof type !== "string" ) {
2181 a7dd0415 Kostas Papadimitriou
                        object = type;
2182 a7dd0415 Kostas Papadimitriou
                        type = undefined;
2183 a7dd0415 Kostas Papadimitriou
                }
2184 a7dd0415 Kostas Papadimitriou
                type = type || "fx";
2185 a7dd0415 Kostas Papadimitriou
                var defer = jQuery.Deferred(),
2186 a7dd0415 Kostas Papadimitriou
                        elements = this,
2187 a7dd0415 Kostas Papadimitriou
                        i = elements.length,
2188 a7dd0415 Kostas Papadimitriou
                        count = 1,
2189 a7dd0415 Kostas Papadimitriou
                        deferDataKey = type + "defer",
2190 a7dd0415 Kostas Papadimitriou
                        queueDataKey = type + "queue",
2191 a7dd0415 Kostas Papadimitriou
                        markDataKey = type + "mark",
2192 a7dd0415 Kostas Papadimitriou
                        tmp;
2193 a7dd0415 Kostas Papadimitriou
                function resolve() {
2194 a7dd0415 Kostas Papadimitriou
                        if ( !( --count ) ) {
2195 a7dd0415 Kostas Papadimitriou
                                defer.resolveWith( elements, [ elements ] );
2196 a7dd0415 Kostas Papadimitriou
                        }
2197 a7dd0415 Kostas Papadimitriou
                }
2198 a7dd0415 Kostas Papadimitriou
                while( i-- ) {
2199 a7dd0415 Kostas Papadimitriou
                        if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
2200 a7dd0415 Kostas Papadimitriou
                                        ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
2201 a7dd0415 Kostas Papadimitriou
                                                jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
2202 a7dd0415 Kostas Papadimitriou
                                        jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
2203 a7dd0415 Kostas Papadimitriou
                                count++;
2204 a7dd0415 Kostas Papadimitriou
                                tmp.add( resolve );
2205 a7dd0415 Kostas Papadimitriou
                        }
2206 a7dd0415 Kostas Papadimitriou
                }
2207 a7dd0415 Kostas Papadimitriou
                resolve();
2208 18059f42 Kostas Papadimitriou
                return defer.promise( object );
2209 a7dd0415 Kostas Papadimitriou
        }
2210 a7dd0415 Kostas Papadimitriou
});
2211 a7dd0415 Kostas Papadimitriou
2212 a7dd0415 Kostas Papadimitriou
2213 a7dd0415 Kostas Papadimitriou
2214 a7dd0415 Kostas Papadimitriou
2215 a7dd0415 Kostas Papadimitriou
var rclass = /[\n\t\r]/g,
2216 a7dd0415 Kostas Papadimitriou
        rspace = /\s+/,
2217 a7dd0415 Kostas Papadimitriou
        rreturn = /\r/g,
2218 a7dd0415 Kostas Papadimitriou
        rtype = /^(?:button|input)$/i,
2219 a7dd0415 Kostas Papadimitriou
        rfocusable = /^(?:button|input|object|select|textarea)$/i,
2220 a7dd0415 Kostas Papadimitriou
        rclickable = /^a(?:rea)?$/i,
2221 a7dd0415 Kostas Papadimitriou
        rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
2222 a7dd0415 Kostas Papadimitriou
        getSetAttribute = jQuery.support.getSetAttribute,
2223 a7dd0415 Kostas Papadimitriou
        nodeHook, boolHook, fixSpecified;
2224 a7dd0415 Kostas Papadimitriou
2225 a7dd0415 Kostas Papadimitriou
jQuery.fn.extend({
2226 a7dd0415 Kostas Papadimitriou
        attr: function( name, value ) {
2227 18059f42 Kostas Papadimitriou
                return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
2228 a7dd0415 Kostas Papadimitriou
        },
2229 a7dd0415 Kostas Papadimitriou
2230 a7dd0415 Kostas Papadimitriou
        removeAttr: function( name ) {
2231 a7dd0415 Kostas Papadimitriou
                return this.each(function() {
2232 a7dd0415 Kostas Papadimitriou
                        jQuery.removeAttr( this, name );
2233 a7dd0415 Kostas Papadimitriou
                });
2234 a7dd0415 Kostas Papadimitriou
        },
2235 a7dd0415 Kostas Papadimitriou
2236 a7dd0415 Kostas Papadimitriou
        prop: function( name, value ) {
2237 18059f42 Kostas Papadimitriou
                return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
2238 a7dd0415 Kostas Papadimitriou
        },
2239 a7dd0415 Kostas Papadimitriou
2240 a7dd0415 Kostas Papadimitriou
        removeProp: function( name ) {
2241 a7dd0415 Kostas Papadimitriou
                name = jQuery.propFix[ name ] || name;
2242 a7dd0415 Kostas Papadimitriou
                return this.each(function() {
2243 a7dd0415 Kostas Papadimitriou
                        // try/catch handles cases where IE balks (such as removing a property on window)
2244 a7dd0415 Kostas Papadimitriou
                        try {
2245 a7dd0415 Kostas Papadimitriou
                                this[ name ] = undefined;
2246 a7dd0415 Kostas Papadimitriou
                                delete this[ name ];
2247 a7dd0415 Kostas Papadimitriou
                        } catch( e ) {}
2248 a7dd0415 Kostas Papadimitriou
                });
2249 a7dd0415 Kostas Papadimitriou
        },
2250 a7dd0415 Kostas Papadimitriou
2251 a7dd0415 Kostas Papadimitriou
        addClass: function( value ) {
2252 a7dd0415 Kostas Papadimitriou
                var classNames, i, l, elem,
2253 a7dd0415 Kostas Papadimitriou
                        setClass, c, cl;
2254 a7dd0415 Kostas Papadimitriou
2255 a7dd0415 Kostas Papadimitriou
                if ( jQuery.isFunction( value ) ) {
2256 a7dd0415 Kostas Papadimitriou
                        return this.each(function( j ) {
2257 a7dd0415 Kostas Papadimitriou
                                jQuery( this ).addClass( value.call(this, j, this.className) );
2258 a7dd0415 Kostas Papadimitriou
                        });
2259 a7dd0415 Kostas Papadimitriou
                }
2260 a7dd0415 Kostas Papadimitriou
2261 a7dd0415 Kostas Papadimitriou
                if ( value && typeof value === "string" ) {
2262 a7dd0415 Kostas Papadimitriou
                        classNames = value.split( rspace );
2263 a7dd0415 Kostas Papadimitriou
2264 a7dd0415 Kostas Papadimitriou
                        for ( i = 0, l = this.length; i < l; i++ ) {
2265 a7dd0415 Kostas Papadimitriou
                                elem = this[ i ];
2266 a7dd0415 Kostas Papadimitriou
2267 a7dd0415 Kostas Papadimitriou
                                if ( elem.nodeType === 1 ) {
2268 a7dd0415 Kostas Papadimitriou
                                        if ( !elem.className && classNames.length === 1 ) {
2269 a7dd0415 Kostas Papadimitriou
                                                elem.className = value;
2270 a7dd0415 Kostas Papadimitriou
2271 a7dd0415 Kostas Papadimitriou
                                        } else {
2272 a7dd0415 Kostas Papadimitriou
                                                setClass = " " + elem.className + " ";
2273 a7dd0415 Kostas Papadimitriou
2274 a7dd0415 Kostas Papadimitriou
                                                for ( c = 0, cl = classNames.length; c < cl; c++ ) {
2275 a7dd0415 Kostas Papadimitriou
                                                        if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
2276 a7dd0415 Kostas Papadimitriou
                                                                setClass += classNames[ c ] + " ";
2277 a7dd0415 Kostas Papadimitriou
                                                        }
2278 a7dd0415 Kostas Papadimitriou
                                                }
2279 a7dd0415 Kostas Papadimitriou
                                                elem.className = jQuery.trim( setClass );
2280 a7dd0415 Kostas Papadimitriou
                                        }
2281 a7dd0415 Kostas Papadimitriou
                                }
2282 a7dd0415 Kostas Papadimitriou
                        }
2283 a7dd0415 Kostas Papadimitriou
                }
2284 a7dd0415 Kostas Papadimitriou
2285 a7dd0415 Kostas Papadimitriou
                return this;
2286 a7dd0415 Kostas Papadimitriou
        },
2287 a7dd0415 Kostas Papadimitriou
2288 a7dd0415 Kostas Papadimitriou
        removeClass: function( value ) {
2289 a7dd0415 Kostas Papadimitriou
                var classNames, i, l, elem, className, c, cl;
2290 a7dd0415 Kostas Papadimitriou
2291 a7dd0415 Kostas Papadimitriou
                if ( jQuery.isFunction( value ) ) {
2292 a7dd0415 Kostas Papadimitriou
                        return this.each(function( j ) {
2293 a7dd0415 Kostas Papadimitriou
                                jQuery( this ).removeClass( value.call(this, j, this.className) );
2294 a7dd0415 Kostas Papadimitriou
                        });
2295 a7dd0415 Kostas Papadimitriou
                }
2296 a7dd0415 Kostas Papadimitriou
2297 a7dd0415 Kostas Papadimitriou
                if ( (value && typeof value === "string") || value === undefined ) {
2298 a7dd0415 Kostas Papadimitriou
                        classNames = ( value || "" ).split( rspace );
2299 a7dd0415 Kostas Papadimitriou
2300 a7dd0415 Kostas Papadimitriou
                        for ( i = 0, l = this.length; i < l; i++ ) {
2301 a7dd0415 Kostas Papadimitriou
                                elem = this[ i ];
2302 a7dd0415 Kostas Papadimitriou
2303 a7dd0415 Kostas Papadimitriou
                                if ( elem.nodeType === 1 && elem.className ) {
2304 a7dd0415 Kostas Papadimitriou
                                        if ( value ) {
2305 a7dd0415 Kostas Papadimitriou
                                                className = (" " + elem.className + " ").replace( rclass, " " );
2306 a7dd0415 Kostas Papadimitriou
                                                for ( c = 0, cl = classNames.length; c < cl; c++ ) {
2307 a7dd0415 Kostas Papadimitriou
                                                        className = className.replace(" " + classNames[ c ] + " ", " ");
2308 a7dd0415 Kostas Papadimitriou
                                                }
2309 a7dd0415 Kostas Papadimitriou
                                                elem.className = jQuery.trim( className );
2310 a7dd0415 Kostas Papadimitriou
2311 a7dd0415 Kostas Papadimitriou
                                        } else {
2312 a7dd0415 Kostas Papadimitriou
                                                elem.className = "";
2313 a7dd0415 Kostas Papadimitriou
                                        }
2314 a7dd0415 Kostas Papadimitriou
                                }
2315 a7dd0415 Kostas Papadimitriou
                        }
2316 a7dd0415 Kostas Papadimitriou
                }
2317 a7dd0415 Kostas Papadimitriou
2318 a7dd0415 Kostas Papadimitriou
                return this;
2319 a7dd0415 Kostas Papadimitriou
        },
2320 a7dd0415 Kostas Papadimitriou
2321 a7dd0415 Kostas Papadimitriou
        toggleClass: function( value, stateVal ) {
2322 a7dd0415 Kostas Papadimitriou
                var type = typeof value,
2323 a7dd0415 Kostas Papadimitriou
                        isBool = typeof stateVal === "boolean";
2324 a7dd0415 Kostas Papadimitriou
2325 a7dd0415 Kostas Papadimitriou
                if ( jQuery.isFunction( value ) ) {
2326 a7dd0415 Kostas Papadimitriou
                        return this.each(function( i ) {
2327 a7dd0415 Kostas Papadimitriou
                                jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
2328 a7dd0415 Kostas Papadimitriou
                        });
2329 a7dd0415 Kostas Papadimitriou
                }
2330 a7dd0415 Kostas Papadimitriou
2331 a7dd0415 Kostas Papadimitriou
                return this.each(function() {
2332 a7dd0415 Kostas Papadimitriou
                        if ( type === "string" ) {
2333 a7dd0415 Kostas Papadimitriou
                                // toggle individual class names
2334 a7dd0415 Kostas Papadimitriou
                                var className,
2335 a7dd0415 Kostas Papadimitriou
                                        i = 0,
2336 a7dd0415 Kostas Papadimitriou
                                        self = jQuery( this ),
2337 a7dd0415 Kostas Papadimitriou
                                        state = stateVal,
2338 a7dd0415 Kostas Papadimitriou
                                        classNames = value.split( rspace );
2339 a7dd0415 Kostas Papadimitriou
2340 a7dd0415 Kostas Papadimitriou
                                while ( (className = classNames[ i++ ]) ) {
2341 a7dd0415 Kostas Papadimitriou
                                        // check each className given, space seperated list
2342 a7dd0415 Kostas Papadimitriou
                                        state = isBool ? state : !self.hasClass( className );
2343 a7dd0415 Kostas Papadimitriou
                                        self[ state ? "addClass" : "removeClass" ]( className );
2344 a7dd0415 Kostas Papadimitriou
                                }
2345 a7dd0415 Kostas Papadimitriou
2346 a7dd0415 Kostas Papadimitriou
                        } else if ( type === "undefined" || type === "boolean" ) {
2347 a7dd0415 Kostas Papadimitriou
                                if ( this.className ) {
2348 a7dd0415 Kostas Papadimitriou
                                        // store className if set
2349 a7dd0415 Kostas Papadimitriou
                                        jQuery._data( this, "__className__", this.className );
2350 a7dd0415 Kostas Papadimitriou
                                }
2351 a7dd0415 Kostas Papadimitriou
2352 a7dd0415 Kostas Papadimitriou
                                // toggle whole className
2353 a7dd0415 Kostas Papadimitriou
                                this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
2354 a7dd0415 Kostas Papadimitriou
                        }
2355 a7dd0415 Kostas Papadimitriou
                });
2356 a7dd0415 Kostas Papadimitriou
        },
2357 a7dd0415 Kostas Papadimitriou
2358 a7dd0415 Kostas Papadimitriou
        hasClass: function( selector ) {
2359 a7dd0415 Kostas Papadimitriou
                var className = " " + selector + " ",
2360 a7dd0415 Kostas Papadimitriou
                        i = 0,
2361 a7dd0415 Kostas Papadimitriou
                        l = this.length;
2362 a7dd0415 Kostas Papadimitriou
                for ( ; i < l; i++ ) {
2363 a7dd0415 Kostas Papadimitriou
                        if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
2364 a7dd0415 Kostas Papadimitriou
                                return true;
2365 a7dd0415 Kostas Papadimitriou
                        }
2366 a7dd0415 Kostas Papadimitriou
                }
2367 a7dd0415 Kostas Papadimitriou
2368 a7dd0415 Kostas Papadimitriou
                return false;
2369 a7dd0415 Kostas Papadimitriou
        },
2370 a7dd0415 Kostas Papadimitriou
2371 a7dd0415 Kostas Papadimitriou
        val: function( value ) {
2372 a7dd0415 Kostas Papadimitriou
                var hooks, ret, isFunction,
2373 a7dd0415 Kostas Papadimitriou
                        elem = this[0];
2374 a7dd0415 Kostas Papadimitriou
2375 a7dd0415 Kostas Papadimitriou
                if ( !arguments.length ) {
2376 a7dd0415 Kostas Papadimitriou
                        if ( elem ) {
2377 18059f42 Kostas Papadimitriou
                                hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
2378 a7dd0415 Kostas Papadimitriou
2379 a7dd0415 Kostas Papadimitriou
                                if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
2380 a7dd0415 Kostas Papadimitriou
                                        return ret;
2381 a7dd0415 Kostas Papadimitriou
                                }
2382 a7dd0415 Kostas Papadimitriou
2383 a7dd0415 Kostas Papadimitriou
                                ret = elem.value;
2384 a7dd0415 Kostas Papadimitriou
2385 a7dd0415 Kostas Papadimitriou
                                return typeof ret === "string" ?
2386 a7dd0415 Kostas Papadimitriou
                                        // handle most common string cases
2387 a7dd0415 Kostas Papadimitriou
                                        ret.replace(rreturn, "") :
2388 a7dd0415 Kostas Papadimitriou
                                        // handle cases where value is null/undef or number
2389 a7dd0415 Kostas Papadimitriou
                                        ret == null ? "" : ret;
2390 a7dd0415 Kostas Papadimitriou
                        }
2391 a7dd0415 Kostas Papadimitriou
2392 a7dd0415 Kostas Papadimitriou
                        return;
2393 a7dd0415 Kostas Papadimitriou
                }
2394 a7dd0415 Kostas Papadimitriou
2395 a7dd0415 Kostas Papadimitriou
                isFunction = jQuery.isFunction( value );
2396 a7dd0415 Kostas Papadimitriou
2397 a7dd0415 Kostas Papadimitriou
                return this.each(function( i ) {
2398 a7dd0415 Kostas Papadimitriou
                        var self = jQuery(this), val;
2399 a7dd0415 Kostas Papadimitriou
2400 a7dd0415 Kostas Papadimitriou
                        if ( this.nodeType !== 1 ) {
2401 a7dd0415 Kostas Papadimitriou
                                return;
2402 a7dd0415 Kostas Papadimitriou
                        }
2403 a7dd0415 Kostas Papadimitriou
2404 a7dd0415 Kostas Papadimitriou
                        if ( isFunction ) {
2405 a7dd0415 Kostas Papadimitriou
                                val = value.call( this, i, self.val() );
2406 a7dd0415 Kostas Papadimitriou
                        } else {
2407 a7dd0415 Kostas Papadimitriou
                                val = value;
2408 a7dd0415 Kostas Papadimitriou
                        }
2409 a7dd0415 Kostas Papadimitriou
2410 a7dd0415 Kostas Papadimitriou
                        // Treat null/undefined as ""; convert numbers to string
2411 a7dd0415 Kostas Papadimitriou
                        if ( val == null ) {
2412 a7dd0415 Kostas Papadimitriou
                                val = "";
2413 a7dd0415 Kostas Papadimitriou
                        } else if ( typeof val === "number" ) {
2414 a7dd0415 Kostas Papadimitriou
                                val += "";
2415 a7dd0415 Kostas Papadimitriou
                        } else if ( jQuery.isArray( val ) ) {
2416 a7dd0415 Kostas Papadimitriou
                                val = jQuery.map(val, function ( value ) {
2417 a7dd0415 Kostas Papadimitriou
                                        return value == null ? "" : value + "";
2418 a7dd0415 Kostas Papadimitriou
                                });
2419 a7dd0415 Kostas Papadimitriou
                        }
2420 a7dd0415 Kostas Papadimitriou
2421 18059f42 Kostas Papadimitriou
                        hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
2422 a7dd0415 Kostas Papadimitriou
2423 a7dd0415 Kostas Papadimitriou
                        // If set returns undefined, fall back to normal setting
2424 a7dd0415 Kostas Papadimitriou
                        if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
2425 a7dd0415 Kostas Papadimitriou
                                this.value = val;
2426 a7dd0415 Kostas Papadimitriou
                        }
2427 a7dd0415 Kostas Papadimitriou
                });
2428 a7dd0415 Kostas Papadimitriou
        }
2429 a7dd0415 Kostas Papadimitriou
});
2430 a7dd0415 Kostas Papadimitriou
2431 a7dd0415 Kostas Papadimitriou
jQuery.extend({
2432 a7dd0415 Kostas Papadimitriou
        valHooks: {
2433 a7dd0415 Kostas Papadimitriou
                option: {
2434 a7dd0415 Kostas Papadimitriou
                        get: function( elem ) {
2435 a7dd0415 Kostas Papadimitriou
                                // attributes.value is undefined in Blackberry 4.7 but
2436 a7dd0415 Kostas Papadimitriou
                                // uses .value. See #6932
2437 a7dd0415 Kostas Papadimitriou
                                var val = elem.attributes.value;
2438 a7dd0415 Kostas Papadimitriou
                                return !val || val.specified ? elem.value : elem.text;
2439 a7dd0415 Kostas Papadimitriou
                        }
2440 a7dd0415 Kostas Papadimitriou
                },
2441 a7dd0415 Kostas Papadimitriou
                select: {
2442 a7dd0415 Kostas Papadimitriou
                        get: function( elem ) {
2443 a7dd0415 Kostas Papadimitriou
                                var value, i, max, option,
2444 a7dd0415 Kostas Papadimitriou
                                        index = elem.selectedIndex,
2445 a7dd0415 Kostas Papadimitriou
                                        values = [],
2446 a7dd0415 Kostas Papadimitriou
                                        options = elem.options,
2447 a7dd0415 Kostas Papadimitriou
                                        one = elem.type === "select-one";
2448 a7dd0415 Kostas Papadimitriou
2449 a7dd0415 Kostas Papadimitriou
                                // Nothing was selected
2450 a7dd0415 Kostas Papadimitriou
                                if ( index < 0 ) {
2451 a7dd0415 Kostas Papadimitriou
                                        return null;
2452 a7dd0415 Kostas Papadimitriou
                                }
2453 a7dd0415 Kostas Papadimitriou
2454 a7dd0415 Kostas Papadimitriou
                                // Loop through all the selected options
2455 a7dd0415 Kostas Papadimitriou
                                i = one ? index : 0;
2456 a7dd0415 Kostas Papadimitriou
                                max = one ? index + 1 : options.length;
2457 a7dd0415 Kostas Papadimitriou
                                for ( ; i < max; i++ ) {
2458 a7dd0415 Kostas Papadimitriou
                                        option = options[ i ];
2459 a7dd0415 Kostas Papadimitriou
2460 a7dd0415 Kostas Papadimitriou
                                        // Don't return options that are disabled or in a disabled optgroup
2461 a7dd0415 Kostas Papadimitriou
                                        if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
2462 a7dd0415 Kostas Papadimitriou
                                                        (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
2463 a7dd0415 Kostas Papadimitriou
2464 a7dd0415 Kostas Papadimitriou
                                                // Get the specific value for the option
2465 a7dd0415 Kostas Papadimitriou
                                                value = jQuery( option ).val();
2466 a7dd0415 Kostas Papadimitriou
2467 a7dd0415 Kostas Papadimitriou
                                                // We don't need an array for one selects
2468 a7dd0415 Kostas Papadimitriou
                                                if ( one ) {
2469 a7dd0415 Kostas Papadimitriou
                                                        return value;
2470 a7dd0415 Kostas Papadimitriou
                                                }
2471 a7dd0415 Kostas Papadimitriou
2472 a7dd0415 Kostas Papadimitriou
                                                // Multi-Selects return an array
2473 a7dd0415 Kostas Papadimitriou
                                                values.push( value );
2474 a7dd0415 Kostas Papadimitriou
                                        }
2475 a7dd0415 Kostas Papadimitriou
                                }
2476 a7dd0415 Kostas Papadimitriou
2477 a7dd0415 Kostas Papadimitriou
                                // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
2478 a7dd0415 Kostas Papadimitriou
                                if ( one && !values.length && options.length ) {
2479 a7dd0415 Kostas Papadimitriou
                                        return jQuery( options[ index ] ).val();
2480 a7dd0415 Kostas Papadimitriou
                                }
2481 a7dd0415 Kostas Papadimitriou
2482 a7dd0415 Kostas Papadimitriou
                                return values;
2483 a7dd0415 Kostas Papadimitriou
                        },
2484 a7dd0415 Kostas Papadimitriou
2485 a7dd0415 Kostas Papadimitriou
                        set: function( elem, value ) {
2486 a7dd0415 Kostas Papadimitriou
                                var values = jQuery.makeArray( value );
2487 a7dd0415 Kostas Papadimitriou
2488 a7dd0415 Kostas Papadimitriou
                                jQuery(elem).find("option").each(function() {
2489 a7dd0415 Kostas Papadimitriou
                                        this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
2490 a7dd0415 Kostas Papadimitriou
                                });
2491 a7dd0415 Kostas Papadimitriou
2492 a7dd0415 Kostas Papadimitriou
                                if ( !values.length ) {
2493 a7dd0415 Kostas Papadimitriou
                                        elem.selectedIndex = -1;
2494 a7dd0415 Kostas Papadimitriou
                                }
2495 a7dd0415 Kostas Papadimitriou
                                return values;
2496 a7dd0415 Kostas Papadimitriou
                        }
2497 a7dd0415 Kostas Papadimitriou
                }
2498 a7dd0415 Kostas Papadimitriou
        },
2499 a7dd0415 Kostas Papadimitriou
2500 a7dd0415 Kostas Papadimitriou
        attrFn: {
2501 a7dd0415 Kostas Papadimitriou
                val: true,
2502 a7dd0415 Kostas Papadimitriou
                css: true,
2503 a7dd0415 Kostas Papadimitriou
                html: true,
2504 a7dd0415 Kostas Papadimitriou
                text: true,
2505 a7dd0415 Kostas Papadimitriou
                data: true,
2506 a7dd0415 Kostas Papadimitriou
                width: true,
2507 a7dd0415 Kostas Papadimitriou
                height: true,
2508 a7dd0415 Kostas Papadimitriou
                offset: true
2509 a7dd0415 Kostas Papadimitriou
        },
2510 a7dd0415 Kostas Papadimitriou
2511 a7dd0415 Kostas Papadimitriou
        attr: function( elem, name, value, pass ) {
2512 a7dd0415 Kostas Papadimitriou
                var ret, hooks, notxml,
2513 a7dd0415 Kostas Papadimitriou
                        nType = elem.nodeType;
2514 a7dd0415 Kostas Papadimitriou
2515 a7dd0415 Kostas Papadimitriou
                // don't get/set attributes on text, comment and attribute nodes
2516 a7dd0415 Kostas Papadimitriou
                if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
2517 a7dd0415 Kostas Papadimitriou
                        return;
2518 a7dd0415 Kostas Papadimitriou
                }
2519 a7dd0415 Kostas Papadimitriou
2520 a7dd0415 Kostas Papadimitriou
                if ( pass && name in jQuery.attrFn ) {
2521 a7dd0415 Kostas Papadimitriou
                        return jQuery( elem )[ name ]( value );
2522 a7dd0415 Kostas Papadimitriou
                }
2523 a7dd0415 Kostas Papadimitriou
2524 a7dd0415 Kostas Papadimitriou
                // Fallback to prop when attributes are not supported
2525 a7dd0415 Kostas Papadimitriou
                if ( typeof elem.getAttribute === "undefined" ) {
2526 a7dd0415 Kostas Papadimitriou
                        return jQuery.prop( elem, name, value );
2527 a7dd0415 Kostas Papadimitriou
                }
2528 a7dd0415 Kostas Papadimitriou
2529 a7dd0415 Kostas Papadimitriou
                notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
2530 a7dd0415 Kostas Papadimitriou
2531 a7dd0415 Kostas Papadimitriou
                // All attributes are lowercase
2532 a7dd0415 Kostas Papadimitriou
                // Grab necessary hook if one is defined
2533 a7dd0415 Kostas Papadimitriou
                if ( notxml ) {
2534 a7dd0415 Kostas Papadimitriou
                        name = name.toLowerCase();
2535 a7dd0415 Kostas Papadimitriou
                        hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
2536 a7dd0415 Kostas Papadimitriou
                }
2537 a7dd0415 Kostas Papadimitriou
2538 a7dd0415 Kostas Papadimitriou
                if ( value !== undefined ) {
2539 a7dd0415 Kostas Papadimitriou
2540 a7dd0415 Kostas Papadimitriou
                        if ( value === null ) {
2541 a7dd0415 Kostas Papadimitriou
                                jQuery.removeAttr( elem, name );
2542 a7dd0415 Kostas Papadimitriou
                                return;
2543 a7dd0415 Kostas Papadimitriou
2544 a7dd0415 Kostas Papadimitriou
                        } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
2545 a7dd0415 Kostas Papadimitriou
                                return ret;
2546 a7dd0415 Kostas Papadimitriou
2547 a7dd0415 Kostas Papadimitriou
                        } else {
2548 a7dd0415 Kostas Papadimitriou
                                elem.setAttribute( name, "" + value );
2549 a7dd0415 Kostas Papadimitriou
                                return value;
2550 a7dd0415 Kostas Papadimitriou
                        }
2551 a7dd0415 Kostas Papadimitriou
2552 a7dd0415 Kostas Papadimitriou
                } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
2553 a7dd0415 Kostas Papadimitriou
                        return ret;
2554 a7dd0415 Kostas Papadimitriou
2555 a7dd0415 Kostas Papadimitriou
                } else {
2556 a7dd0415 Kostas Papadimitriou
2557 a7dd0415 Kostas Papadimitriou
                        ret = elem.getAttribute( name );
2558 a7dd0415 Kostas Papadimitriou
2559 a7dd0415 Kostas Papadimitriou
                        // Non-existent attributes return null, we normalize to undefined
2560 a7dd0415 Kostas Papadimitriou
                        return ret === null ?
2561 a7dd0415 Kostas Papadimitriou
                                undefined :
2562 a7dd0415 Kostas Papadimitriou
                                ret;
2563 a7dd0415 Kostas Papadimitriou
                }
2564 a7dd0415 Kostas Papadimitriou
        },
2565 a7dd0415 Kostas Papadimitriou
2566 a7dd0415 Kostas Papadimitriou
        removeAttr: function( elem, value ) {
2567 18059f42 Kostas Papadimitriou
                var propName, attrNames, name, l, isBool,
2568 a7dd0415 Kostas Papadimitriou
                        i = 0;
2569 a7dd0415 Kostas Papadimitriou
2570 a7dd0415 Kostas Papadimitriou
                if ( value && elem.nodeType === 1 ) {
2571 a7dd0415 Kostas Papadimitriou
                        attrNames = value.toLowerCase().split( rspace );
2572 a7dd0415 Kostas Papadimitriou
                        l = attrNames.length;
2573 a7dd0415 Kostas Papadimitriou
2574 a7dd0415 Kostas Papadimitriou
                        for ( ; i < l; i++ ) {
2575 a7dd0415 Kostas Papadimitriou
                                name = attrNames[ i ];
2576 a7dd0415 Kostas Papadimitriou
2577 a7dd0415 Kostas Papadimitriou
                                if ( name ) {
2578 a7dd0415 Kostas Papadimitriou
                                        propName = jQuery.propFix[ name ] || name;
2579 18059f42 Kostas Papadimitriou
                                        isBool = rboolean.test( name );
2580 a7dd0415 Kostas Papadimitriou
2581 a7dd0415 Kostas Papadimitriou
                                        // See #9699 for explanation of this approach (setting first, then removal)
2582 18059f42 Kostas Papadimitriou
                                        // Do not do this for boolean attributes (see #10870)
2583 18059f42 Kostas Papadimitriou
                                        if ( !isBool ) {
2584 18059f42 Kostas Papadimitriou
                                                jQuery.attr( elem, name, "" );
2585 18059f42 Kostas Papadimitriou
                                        }
2586 a7dd0415 Kostas Papadimitriou
                                        elem.removeAttribute( getSetAttribute ? name : propName );
2587 a7dd0415 Kostas Papadimitriou
2588 a7dd0415 Kostas Papadimitriou
                                        // Set corresponding property to false for boolean attributes
2589 18059f42 Kostas Papadimitriou
                                        if ( isBool && propName in elem ) {
2590 a7dd0415 Kostas Papadimitriou
                                                elem[ propName ] = false;
2591 a7dd0415 Kostas Papadimitriou
                                        }
2592 a7dd0415 Kostas Papadimitriou
                                }
2593 a7dd0415 Kostas Papadimitriou
                        }
2594 a7dd0415 Kostas Papadimitriou
                }
2595 a7dd0415 Kostas Papadimitriou
        },
2596 a7dd0415 Kostas Papadimitriou
2597 a7dd0415 Kostas Papadimitriou
        attrHooks: {
2598 a7dd0415 Kostas Papadimitriou
                type: {
2599 a7dd0415 Kostas Papadimitriou
                        set: function( elem, value ) {
2600 a7dd0415 Kostas Papadimitriou
                                // We can't allow the type property to be changed (since it causes problems in IE)
2601 a7dd0415 Kostas Papadimitriou
                                if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
2602 a7dd0415 Kostas Papadimitriou
                                        jQuery.error( "type property can't be changed" );
2603 a7dd0415 Kostas Papadimitriou
                                } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
2604 a7dd0415 Kostas Papadimitriou
                                        // Setting the type on a radio button after the value resets the value in IE6-9
2605 a7dd0415 Kostas Papadimitriou
                                        // Reset value to it's default in case type is set after value
2606 a7dd0415 Kostas Papadimitriou
                                        // This is for element creation
2607 a7dd0415 Kostas Papadimitriou
                                        var val = elem.value;
2608 a7dd0415 Kostas Papadimitriou
                                        elem.setAttribute( "type", value );
2609 a7dd0415 Kostas Papadimitriou
                                        if ( val ) {
2610 a7dd0415 Kostas Papadimitriou
                                                elem.value = val;
2611 a7dd0415 Kostas Papadimitriou
                                        }
2612 a7dd0415 Kostas Papadimitriou
                                        return value;
2613 a7dd0415 Kostas Papadimitriou
                                }
2614 a7dd0415 Kostas Papadimitriou
                        }
2615 a7dd0415 Kostas Papadimitriou
                },
2616 a7dd0415 Kostas Papadimitriou
                // Use the value property for back compat
2617 a7dd0415 Kostas Papadimitriou
                // Use the nodeHook for button elements in IE6/7 (#1954)
2618 a7dd0415 Kostas Papadimitriou
                value: {
2619 a7dd0415 Kostas Papadimitriou
                        get: function( elem, name ) {
2620 a7dd0415 Kostas Papadimitriou
                                if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
2621 a7dd0415 Kostas Papadimitriou
                                        return nodeHook.get( elem, name );
2622 a7dd0415 Kostas Papadimitriou
                                }
2623 a7dd0415 Kostas Papadimitriou
                                return name in elem ?
2624 a7dd0415 Kostas Papadimitriou
                                        elem.value :
2625 a7dd0415 Kostas Papadimitriou
                                        null;
2626 a7dd0415 Kostas Papadimitriou
                        },
2627 a7dd0415 Kostas Papadimitriou
                        set: function( elem, value, name ) {
2628 a7dd0415 Kostas Papadimitriou
                                if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
2629 a7dd0415 Kostas Papadimitriou
                                        return nodeHook.set( elem, value, name );
2630 a7dd0415 Kostas Papadimitriou
                                }
2631 a7dd0415 Kostas Papadimitriou
                                // Does not return so that setAttribute is also used
2632 a7dd0415 Kostas Papadimitriou
                                elem.value = value;
2633 a7dd0415 Kostas Papadimitriou
                        }
2634 a7dd0415 Kostas Papadimitriou
                }
2635 a7dd0415 Kostas Papadimitriou
        },
2636 a7dd0415 Kostas Papadimitriou
2637 a7dd0415 Kostas Papadimitriou
        propFix: {
2638 a7dd0415 Kostas Papadimitriou
                tabindex: "tabIndex",
2639 a7dd0415 Kostas Papadimitriou
                readonly: "readOnly",
2640 a7dd0415 Kostas Papadimitriou
                "for": "htmlFor",
2641 a7dd0415 Kostas Papadimitriou
                "class": "className",
2642 a7dd0415 Kostas Papadimitriou
                maxlength: "maxLength",
2643 a7dd0415 Kostas Papadimitriou
                cellspacing: "cellSpacing",
2644 a7dd0415 Kostas Papadimitriou
                cellpadding: "cellPadding",
2645 a7dd0415 Kostas Papadimitriou
                rowspan: "rowSpan",
2646 a7dd0415 Kostas Papadimitriou
                colspan: "colSpan",
2647 a7dd0415 Kostas Papadimitriou
                usemap: "useMap",
2648 a7dd0415 Kostas Papadimitriou
                frameborder: "frameBorder",
2649 a7dd0415 Kostas Papadimitriou
                contenteditable: "contentEditable"
2650 a7dd0415 Kostas Papadimitriou
        },
2651 a7dd0415 Kostas Papadimitriou
2652 a7dd0415 Kostas Papadimitriou
        prop: function( elem, name, value ) {
2653 a7dd0415 Kostas Papadimitriou
                var ret, hooks, notxml,
2654 a7dd0415 Kostas Papadimitriou
                        nType = elem.nodeType;
2655 a7dd0415 Kostas Papadimitriou
2656 a7dd0415 Kostas Papadimitriou
                // don't get/set properties on text, comment and attribute nodes
2657 a7dd0415 Kostas Papadimitriou
                if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
2658 a7dd0415 Kostas Papadimitriou
                        return;
2659 a7dd0415 Kostas Papadimitriou
                }
2660 a7dd0415 Kostas Papadimitriou
2661 a7dd0415 Kostas Papadimitriou
                notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
2662 a7dd0415 Kostas Papadimitriou
2663 a7dd0415 Kostas Papadimitriou
                if ( notxml ) {
2664 a7dd0415 Kostas Papadimitriou
                        // Fix name and attach hooks
2665 a7dd0415 Kostas Papadimitriou
                        name = jQuery.propFix[ name ] || name;
2666 a7dd0415 Kostas Papadimitriou
                        hooks = jQuery.propHooks[ name ];
2667 a7dd0415 Kostas Papadimitriou
                }
2668 a7dd0415 Kostas Papadimitriou
2669 a7dd0415 Kostas Papadimitriou
                if ( value !== undefined ) {
2670 a7dd0415 Kostas Papadimitriou
                        if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
2671 a7dd0415 Kostas Papadimitriou
                                return ret;
2672 a7dd0415 Kostas Papadimitriou
2673 a7dd0415 Kostas Papadimitriou
                        } else {
2674 a7dd0415 Kostas Papadimitriou
                                return ( elem[ name ] = value );
2675 a7dd0415 Kostas Papadimitriou
                        }
2676 a7dd0415 Kostas Papadimitriou
2677 a7dd0415 Kostas Papadimitriou
                } else {
2678 a7dd0415 Kostas Papadimitriou
                        if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
2679 a7dd0415 Kostas Papadimitriou
                                return ret;
2680 a7dd0415 Kostas Papadimitriou
2681 a7dd0415 Kostas Papadimitriou
                        } else {
2682 a7dd0415 Kostas Papadimitriou
                                return elem[ name ];
2683 a7dd0415 Kostas Papadimitriou
                        }
2684 a7dd0415 Kostas Papadimitriou
                }
2685 a7dd0415 Kostas Papadimitriou
        },
2686 a7dd0415 Kostas Papadimitriou
2687 a7dd0415 Kostas Papadimitriou
        propHooks: {
2688 a7dd0415 Kostas Papadimitriou
                tabIndex: {
2689 a7dd0415 Kostas Papadimitriou
                        get: function( elem ) {
2690 a7dd0415 Kostas Papadimitriou
                                // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
2691 a7dd0415 Kostas Papadimitriou
                                // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
2692 a7dd0415 Kostas Papadimitriou
                                var attributeNode = elem.getAttributeNode("tabindex");
2693 a7dd0415 Kostas Papadimitriou
2694 a7dd0415 Kostas Papadimitriou
                                return attributeNode && attributeNode.specified ?
2695 a7dd0415 Kostas Papadimitriou
                                        parseInt( attributeNode.value, 10 ) :
2696 a7dd0415 Kostas Papadimitriou
                                        rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
2697 a7dd0415 Kostas Papadimitriou
                                                0 :
2698 a7dd0415 Kostas Papadimitriou
                                                undefined;
2699 a7dd0415 Kostas Papadimitriou
                        }
2700 a7dd0415 Kostas Papadimitriou
                }
2701 a7dd0415 Kostas Papadimitriou
        }
2702 a7dd0415 Kostas Papadimitriou
});
2703 a7dd0415 Kostas Papadimitriou
2704 a7dd0415 Kostas Papadimitriou
// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
2705 a7dd0415 Kostas Papadimitriou
jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
2706 a7dd0415 Kostas Papadimitriou
2707 a7dd0415 Kostas Papadimitriou
// Hook for boolean attributes
2708 a7dd0415 Kostas Papadimitriou
boolHook = {
2709 a7dd0415 Kostas Papadimitriou
        get: function( elem, name ) {
2710 a7dd0415 Kostas Papadimitriou
                // Align boolean attributes with corresponding properties
2711 a7dd0415 Kostas Papadimitriou
                // Fall back to attribute presence where some booleans are not supported
2712 a7dd0415 Kostas Papadimitriou
                var attrNode,
2713 a7dd0415 Kostas Papadimitriou
                        property = jQuery.prop( elem, name );
2714 a7dd0415 Kostas Papadimitriou
                return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
2715 a7dd0415 Kostas Papadimitriou
                        name.toLowerCase() :
2716 a7dd0415 Kostas Papadimitriou
                        undefined;
2717 a7dd0415 Kostas Papadimitriou
        },
2718 a7dd0415 Kostas Papadimitriou
        set: function( elem, value, name ) {
2719 a7dd0415 Kostas Papadimitriou
                var propName;
2720 a7dd0415 Kostas Papadimitriou
                if ( value === false ) {
2721 a7dd0415 Kostas Papadimitriou
                        // Remove boolean attributes when set to false
2722 a7dd0415 Kostas Papadimitriou
                        jQuery.removeAttr( elem, name );
2723 a7dd0415 Kostas Papadimitriou
                } else {
2724 a7dd0415 Kostas Papadimitriou
                        // value is true since we know at this point it's type boolean and not false
2725 a7dd0415 Kostas Papadimitriou
                        // Set boolean attributes to the same name and set the DOM property
2726 a7dd0415 Kostas Papadimitriou
                        propName = jQuery.propFix[ name ] || name;
2727 a7dd0415 Kostas Papadimitriou
                        if ( propName in elem ) {
2728 a7dd0415 Kostas Papadimitriou
                                // Only set the IDL specifically if it already exists on the element
2729 a7dd0415 Kostas Papadimitriou
                                elem[ propName ] = true;
2730 a7dd0415 Kostas Papadimitriou
                        }
2731 a7dd0415 Kostas Papadimitriou
2732 a7dd0415 Kostas Papadimitriou
                        elem.setAttribute( name, name.toLowerCase() );
2733 a7dd0415 Kostas Papadimitriou
                }
2734 a7dd0415 Kostas Papadimitriou
                return name;
2735 a7dd0415 Kostas Papadimitriou
        }
2736 a7dd0415 Kostas Papadimitriou
};
2737 a7dd0415 Kostas Papadimitriou
2738 a7dd0415 Kostas Papadimitriou
// IE6/7 do not support getting/setting some attributes with get/setAttribute
2739 a7dd0415 Kostas Papadimitriou
if ( !getSetAttribute ) {
2740 a7dd0415 Kostas Papadimitriou
2741 a7dd0415 Kostas Papadimitriou
        fixSpecified = {
2742 a7dd0415 Kostas Papadimitriou
                name: true,
2743 18059f42 Kostas Papadimitriou
                id: true,
2744 18059f42 Kostas Papadimitriou
                coords: true
2745 a7dd0415 Kostas Papadimitriou
        };
2746 a7dd0415 Kostas Papadimitriou
2747 a7dd0415 Kostas Papadimitriou
        // Use this for any attribute in IE6/7
2748 a7dd0415 Kostas Papadimitriou
        // This fixes almost every IE6/7 issue
2749 a7dd0415 Kostas Papadimitriou
        nodeHook = jQuery.valHooks.button = {
2750 a7dd0415 Kostas Papadimitriou
                get: function( elem, name ) {
2751 a7dd0415 Kostas Papadimitriou
                        var ret;
2752 a7dd0415 Kostas Papadimitriou
                        ret = elem.getAttributeNode( name );
2753 a7dd0415 Kostas Papadimitriou
                        return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
2754 a7dd0415 Kostas Papadimitriou
                                ret.nodeValue :
2755 a7dd0415 Kostas Papadimitriou
                                undefined;
2756 a7dd0415 Kostas Papadimitriou
                },
2757 a7dd0415 Kostas Papadimitriou
                set: function( elem, value, name ) {
2758 a7dd0415 Kostas Papadimitriou
                        // Set the existing or create a new attribute node
2759 a7dd0415 Kostas Papadimitriou
                        var ret = elem.getAttributeNode( name );
2760 a7dd0415 Kostas Papadimitriou
                        if ( !ret ) {
2761 a7dd0415 Kostas Papadimitriou
                                ret = document.createAttribute( name );
2762 a7dd0415 Kostas Papadimitriou
                                elem.setAttributeNode( ret );
2763 a7dd0415 Kostas Papadimitriou
                        }
2764 a7dd0415 Kostas Papadimitriou
                        return ( ret.nodeValue = value + "" );
2765 a7dd0415 Kostas Papadimitriou
                }
2766 a7dd0415 Kostas Papadimitriou
        };
2767 a7dd0415 Kostas Papadimitriou
2768 a7dd0415 Kostas Papadimitriou
        // Apply the nodeHook to tabindex
2769 a7dd0415 Kostas Papadimitriou
        jQuery.attrHooks.tabindex.set = nodeHook.set;
2770 a7dd0415 Kostas Papadimitriou
2771 a7dd0415 Kostas Papadimitriou
        // Set width and height to auto instead of 0 on empty string( Bug #8150 )
2772 a7dd0415 Kostas Papadimitriou
        // This is for removals
2773 a7dd0415 Kostas Papadimitriou
        jQuery.each([ "width", "height" ], function( i, name ) {
2774 a7dd0415 Kostas Papadimitriou
                jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
2775 a7dd0415 Kostas Papadimitriou
                        set: function( elem, value ) {
2776 a7dd0415 Kostas Papadimitriou
                                if ( value === "" ) {
2777 a7dd0415 Kostas Papadimitriou
                                        elem.setAttribute( name, "auto" );
2778 a7dd0415 Kostas Papadimitriou
                                        return value;
2779 a7dd0415 Kostas Papadimitriou
                                }
2780 a7dd0415 Kostas Papadimitriou
                        }
2781 a7dd0415 Kostas Papadimitriou
                });
2782 a7dd0415 Kostas Papadimitriou
        });
2783 a7dd0415 Kostas Papadimitriou
2784 a7dd0415 Kostas Papadimitriou
        // Set contenteditable to false on removals(#10429)
2785 a7dd0415 Kostas Papadimitriou
        // Setting to empty string throws an error as an invalid value
2786 a7dd0415 Kostas Papadimitriou
        jQuery.attrHooks.contenteditable = {
2787 a7dd0415 Kostas Papadimitriou
                get: nodeHook.get,
2788 a7dd0415 Kostas Papadimitriou
                set: function( elem, value, name ) {
2789 a7dd0415 Kostas Papadimitriou
                        if ( value === "" ) {
2790 a7dd0415 Kostas Papadimitriou
                                value = "false";
2791 a7dd0415 Kostas Papadimitriou
                        }
2792 a7dd0415 Kostas Papadimitriou
                        nodeHook.set( elem, value, name );
2793 a7dd0415 Kostas Papadimitriou
                }
2794 a7dd0415 Kostas Papadimitriou
        };
2795 a7dd0415 Kostas Papadimitriou
}
2796 a7dd0415 Kostas Papadimitriou
2797 a7dd0415 Kostas Papadimitriou
2798 a7dd0415 Kostas Papadimitriou
// Some attributes require a special call on IE
2799 a7dd0415 Kostas Papadimitriou
if ( !jQuery.support.hrefNormalized ) {
2800 a7dd0415 Kostas Papadimitriou
        jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
2801 a7dd0415 Kostas Papadimitriou
                jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
2802 a7dd0415 Kostas Papadimitriou
                        get: function( elem ) {
2803 a7dd0415 Kostas Papadimitriou
                                var ret = elem.getAttribute( name, 2 );
2804 a7dd0415 Kostas Papadimitriou
                                return ret === null ? undefined : ret;
2805 a7dd0415 Kostas Papadimitriou
                        }
2806 a7dd0415 Kostas Papadimitriou
                });
2807 a7dd0415 Kostas Papadimitriou
        });
2808 a7dd0415 Kostas Papadimitriou
}
2809 a7dd0415 Kostas Papadimitriou
2810 a7dd0415 Kostas Papadimitriou
if ( !jQuery.support.style ) {
2811 a7dd0415 Kostas Papadimitriou
        jQuery.attrHooks.style = {
2812 a7dd0415 Kostas Papadimitriou
                get: function( elem ) {
2813 a7dd0415 Kostas Papadimitriou
                        // Return undefined in the case of empty string
2814 a7dd0415 Kostas Papadimitriou
                        // Normalize to lowercase since IE uppercases css property names
2815 a7dd0415 Kostas Papadimitriou
                        return elem.style.cssText.toLowerCase() || undefined;
2816 a7dd0415 Kostas Papadimitriou
                },
2817 a7dd0415 Kostas Papadimitriou
                set: function( elem, value ) {
2818 a7dd0415 Kostas Papadimitriou
                        return ( elem.style.cssText = "" + value );
2819 a7dd0415 Kostas Papadimitriou
                }
2820 a7dd0415 Kostas Papadimitriou
        };
2821 a7dd0415 Kostas Papadimitriou
}
2822 a7dd0415 Kostas Papadimitriou
2823 a7dd0415 Kostas Papadimitriou
// Safari mis-reports the default selected property of an option
2824 a7dd0415 Kostas Papadimitriou
// Accessing the parent's selectedIndex property fixes it
2825 a7dd0415 Kostas Papadimitriou
if ( !jQuery.support.optSelected ) {
2826 a7dd0415 Kostas Papadimitriou
        jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
2827 a7dd0415 Kostas Papadimitriou
                get: function( elem ) {
2828 a7dd0415 Kostas Papadimitriou
                        var parent = elem.parentNode;
2829 a7dd0415 Kostas Papadimitriou
2830 a7dd0415 Kostas Papadimitriou
                        if ( parent ) {
2831 a7dd0415 Kostas Papadimitriou
                                parent.selectedIndex;
2832 a7dd0415 Kostas Papadimitriou
2833 a7dd0415 Kostas Papadimitriou
                                // Make sure that it also works with optgroups, see #5701
2834 a7dd0415 Kostas Papadimitriou
                                if ( parent.parentNode ) {
2835 a7dd0415 Kostas Papadimitriou
                                        parent.parentNode.selectedIndex;
2836 a7dd0415 Kostas Papadimitriou
                                }
2837 a7dd0415 Kostas Papadimitriou
                        }
2838 a7dd0415 Kostas Papadimitriou
                        return null;
2839 a7dd0415 Kostas Papadimitriou
                }
2840 a7dd0415 Kostas Papadimitriou
        });
2841 a7dd0415 Kostas Papadimitriou
}
2842 a7dd0415 Kostas Papadimitriou
2843 a7dd0415 Kostas Papadimitriou
// IE6/7 call enctype encoding
2844 a7dd0415 Kostas Papadimitriou
if ( !jQuery.support.enctype ) {
2845 a7dd0415 Kostas Papadimitriou
        jQuery.propFix.enctype = "encoding";
2846 a7dd0415 Kostas Papadimitriou
}
2847 a7dd0415 Kostas Papadimitriou
2848 a7dd0415 Kostas Papadimitriou
// Radios and checkboxes getter/setter
2849 a7dd0415 Kostas Papadimitriou
if ( !jQuery.support.checkOn ) {
2850 a7dd0415 Kostas Papadimitriou
        jQuery.each([ "radio", "checkbox" ], function() {
2851 a7dd0415 Kostas Papadimitriou
                jQuery.valHooks[ this ] = {
2852 a7dd0415 Kostas Papadimitriou
                        get: function( elem ) {
2853 a7dd0415 Kostas Papadimitriou
                                // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
2854 a7dd0415 Kostas Papadimitriou
                                return elem.getAttribute("value") === null ? "on" : elem.value;
2855 a7dd0415 Kostas Papadimitriou
                        }
2856 a7dd0415 Kostas Papadimitriou
                };
2857 a7dd0415 Kostas Papadimitriou
        });
2858 a7dd0415 Kostas Papadimitriou
}
2859 a7dd0415 Kostas Papadimitriou
jQuery.each([ "radio", "checkbox" ], function() {
2860 a7dd0415 Kostas Papadimitriou
        jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
2861 a7dd0415 Kostas Papadimitriou
                set: function( elem, value ) {
2862 a7dd0415 Kostas Papadimitriou
                        if ( jQuery.isArray( value ) ) {
2863 a7dd0415 Kostas Papadimitriou
                                return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
2864 a7dd0415 Kostas Papadimitriou
                        }
2865 a7dd0415 Kostas Papadimitriou
                }
2866 a7dd0415 Kostas Papadimitriou
        });
2867 a7dd0415 Kostas Papadimitriou
});
2868 a7dd0415 Kostas Papadimitriou
2869 a7dd0415 Kostas Papadimitriou
2870 a7dd0415 Kostas Papadimitriou
2871 a7dd0415 Kostas Papadimitriou
2872 a7dd0415 Kostas Papadimitriou
var rformElems = /^(?:textarea|input|select)$/i,
2873 a7dd0415 Kostas Papadimitriou
        rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
2874 18059f42 Kostas Papadimitriou
        rhoverHack = /(?:^|\s)hover(\.\S+)?\b/,
2875 a7dd0415 Kostas Papadimitriou
        rkeyEvent = /^key/,
2876 a7dd0415 Kostas Papadimitriou
        rmouseEvent = /^(?:mouse|contextmenu)|click/,
2877 a7dd0415 Kostas Papadimitriou
        rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
2878 a7dd0415 Kostas Papadimitriou
        rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
2879 a7dd0415 Kostas Papadimitriou
        quickParse = function( selector ) {
2880 a7dd0415 Kostas Papadimitriou
                var quick = rquickIs.exec( selector );
2881 a7dd0415 Kostas Papadimitriou
                if ( quick ) {
2882 a7dd0415 Kostas Papadimitriou
                        //   0  1    2   3
2883 a7dd0415 Kostas Papadimitriou
                        // [ _, tag, id, class ]
2884 a7dd0415 Kostas Papadimitriou
                        quick[1] = ( quick[1] || "" ).toLowerCase();
2885 a7dd0415 Kostas Papadimitriou
                        quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
2886 a7dd0415 Kostas Papadimitriou
                }
2887 a7dd0415 Kostas Papadimitriou
                return quick;
2888 a7dd0415 Kostas Papadimitriou
        },
2889 a7dd0415 Kostas Papadimitriou
        quickIs = function( elem, m ) {
2890 a7dd0415 Kostas Papadimitriou
                var attrs = elem.attributes || {};
2891 a7dd0415 Kostas Papadimitriou
                return (
2892 a7dd0415 Kostas Papadimitriou
                        (!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
2893 a7dd0415 Kostas Papadimitriou
                        (!m[2] || (attrs.id || {}).value === m[2]) &&
2894 a7dd0415 Kostas Papadimitriou
                        (!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
2895 a7dd0415 Kostas Papadimitriou
                );
2896 a7dd0415 Kostas Papadimitriou
        },
2897 a7dd0415 Kostas Papadimitriou
        hoverHack = function( events ) {
2898 a7dd0415 Kostas Papadimitriou
                return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
2899 a7dd0415 Kostas Papadimitriou
        };
2900 a7dd0415 Kostas Papadimitriou
2901 a7dd0415 Kostas Papadimitriou
/*
2902 a7dd0415 Kostas Papadimitriou
 * Helper functions for managing events -- not part of the public interface.
2903 a7dd0415 Kostas Papadimitriou
 * Props to Dean Edwards' addEvent library for many of the ideas.
2904 a7dd0415 Kostas Papadimitriou
 */
2905 a7dd0415 Kostas Papadimitriou
jQuery.event = {
2906 a7dd0415 Kostas Papadimitriou
2907 a7dd0415 Kostas Papadimitriou
        add: function( elem, types, handler, data, selector ) {
2908 a7dd0415 Kostas Papadimitriou
2909 a7dd0415 Kostas Papadimitriou
                var elemData, eventHandle, events,
2910 a7dd0415 Kostas Papadimitriou
                        t, tns, type, namespaces, handleObj,
2911 a7dd0415 Kostas Papadimitriou
                        handleObjIn, quick, handlers, special;
2912 a7dd0415 Kostas Papadimitriou
2913 a7dd0415 Kostas Papadimitriou
                // Don't attach events to noData or text/comment nodes (allow plain objects tho)
2914 a7dd0415 Kostas Papadimitriou
                if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
2915 a7dd0415 Kostas Papadimitriou
                        return;
2916 a7dd0415 Kostas Papadimitriou
                }
2917 a7dd0415 Kostas Papadimitriou
2918 a7dd0415 Kostas Papadimitriou
                // Caller can pass in an object of custom data in lieu of the handler
2919 a7dd0415 Kostas Papadimitriou
                if ( handler.handler ) {
2920 a7dd0415 Kostas Papadimitriou
                        handleObjIn = handler;
2921 a7dd0415 Kostas Papadimitriou
                        handler = handleObjIn.handler;
2922 18059f42 Kostas Papadimitriou
                        selector = handleObjIn.selector;
2923 a7dd0415 Kostas Papadimitriou
                }
2924 a7dd0415 Kostas Papadimitriou
2925 a7dd0415 Kostas Papadimitriou
                // Make sure that the handler has a unique ID, used to find/remove it later
2926 a7dd0415 Kostas Papadimitriou
                if ( !handler.guid ) {
2927 a7dd0415 Kostas Papadimitriou
                        handler.guid = jQuery.guid++;
2928 a7dd0415 Kostas Papadimitriou
                }
2929 a7dd0415 Kostas Papadimitriou
2930 a7dd0415 Kostas Papadimitriou
                // Init the element's event structure and main handler, if this is the first
2931 a7dd0415 Kostas Papadimitriou
                events = elemData.events;
2932 a7dd0415 Kostas Papadimitriou
                if ( !events ) {
2933 a7dd0415 Kostas Papadimitriou
                        elemData.events = events = {};
2934 a7dd0415 Kostas Papadimitriou
                }
2935 a7dd0415 Kostas Papadimitriou
                eventHandle = elemData.handle;
2936 a7dd0415 Kostas Papadimitriou
                if ( !eventHandle ) {
2937 a7dd0415 Kostas Papadimitriou
                        elemData.handle = eventHandle = function( e ) {
2938 a7dd0415 Kostas Papadimitriou
                                // Discard the second event of a jQuery.event.trigger() and
2939 a7dd0415 Kostas Papadimitriou
                                // when an event is called after a page has unloaded
2940 a7dd0415 Kostas Papadimitriou
                                return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
2941 a7dd0415 Kostas Papadimitriou
                                        jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
2942 a7dd0415 Kostas Papadimitriou
                                        undefined;
2943 a7dd0415 Kostas Papadimitriou
                        };
2944 a7dd0415 Kostas Papadimitriou
                        // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
2945 a7dd0415 Kostas Papadimitriou
                        eventHandle.elem = elem;
2946 a7dd0415 Kostas Papadimitriou
                }
2947 a7dd0415 Kostas Papadimitriou
2948 a7dd0415 Kostas Papadimitriou
                // Handle multiple events separated by a space
2949 a7dd0415 Kostas Papadimitriou
                // jQuery(...).bind("mouseover mouseout", fn);
2950 a7dd0415 Kostas Papadimitriou
                types = jQuery.trim( hoverHack(types) ).split( " " );
2951 a7dd0415 Kostas Papadimitriou
                for ( t = 0; t < types.length; t++ ) {
2952 a7dd0415 Kostas Papadimitriou
2953 a7dd0415 Kostas Papadimitriou
                        tns = rtypenamespace.exec( types[t] ) || [];
2954 a7dd0415 Kostas Papadimitriou
                        type = tns[1];
2955 a7dd0415 Kostas Papadimitriou
                        namespaces = ( tns[2] || "" ).split( "." ).sort();
2956 a7dd0415 Kostas Papadimitriou
2957 a7dd0415 Kostas Papadimitriou
                        // If event changes its type, use the special event handlers for the changed type
2958 a7dd0415 Kostas Papadimitriou
                        special = jQuery.event.special[ type ] || {};
2959 a7dd0415 Kostas Papadimitriou
2960 a7dd0415 Kostas Papadimitriou
                        // If selector defined, determine special event api type, otherwise given type
2961 a7dd0415 Kostas Papadimitriou
                        type = ( selector ? special.delegateType : special.bindType ) || type;
2962 a7dd0415 Kostas Papadimitriou
2963 a7dd0415 Kostas Papadimitriou
                        // Update special based on newly reset type
2964 a7dd0415 Kostas Papadimitriou
                        special = jQuery.event.special[ type ] || {};
2965 a7dd0415 Kostas Papadimitriou
2966 a7dd0415 Kostas Papadimitriou
                        // handleObj is passed to all event handlers
2967 a7dd0415 Kostas Papadimitriou
                        handleObj = jQuery.extend({
2968 a7dd0415 Kostas Papadimitriou
                                type: type,
2969 a7dd0415 Kostas Papadimitriou
                                origType: tns[1],
2970 a7dd0415 Kostas Papadimitriou
                                data: data,
2971 a7dd0415 Kostas Papadimitriou
                                handler: handler,
2972 a7dd0415 Kostas Papadimitriou
                                guid: handler.guid,
2973 a7dd0415 Kostas Papadimitriou
                                selector: selector,
2974 18059f42 Kostas Papadimitriou
                                quick: selector && quickParse( selector ),
2975 a7dd0415 Kostas Papadimitriou
                                namespace: namespaces.join(".")
2976 a7dd0415 Kostas Papadimitriou
                        }, handleObjIn );
2977 a7dd0415 Kostas Papadimitriou
2978 a7dd0415 Kostas Papadimitriou
                        // Init the event handler queue if we're the first
2979 a7dd0415 Kostas Papadimitriou
                        handlers = events[ type ];
2980 a7dd0415 Kostas Papadimitriou
                        if ( !handlers ) {
2981 a7dd0415 Kostas Papadimitriou
                                handlers = events[ type ] = [];
2982 a7dd0415 Kostas Papadimitriou
                                handlers.delegateCount = 0;
2983 a7dd0415 Kostas Papadimitriou
2984 a7dd0415 Kostas Papadimitriou
                                // Only use addEventListener/attachEvent if the special events handler returns false
2985 a7dd0415 Kostas Papadimitriou
                                if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
2986 a7dd0415 Kostas Papadimitriou
                                        // Bind the global event handler to the element
2987 a7dd0415 Kostas Papadimitriou
                                        if ( elem.addEventListener ) {
2988 a7dd0415 Kostas Papadimitriou
                                                elem.addEventListener( type, eventHandle, false );
2989 a7dd0415 Kostas Papadimitriou
2990 a7dd0415 Kostas Papadimitriou
                                        } else if ( elem.attachEvent ) {
2991 a7dd0415 Kostas Papadimitriou
                                                elem.attachEvent( "on" + type, eventHandle );
2992 a7dd0415 Kostas Papadimitriou
                                        }
2993 a7dd0415 Kostas Papadimitriou
                                }
2994 a7dd0415 Kostas Papadimitriou
                        }
2995 a7dd0415 Kostas Papadimitriou
2996 a7dd0415 Kostas Papadimitriou
                        if ( special.add ) {
2997 a7dd0415 Kostas Papadimitriou
                                special.add.call( elem, handleObj );
2998 a7dd0415 Kostas Papadimitriou
2999 a7dd0415 Kostas Papadimitriou
                                if ( !handleObj.handler.guid ) {
3000 a7dd0415 Kostas Papadimitriou
                                        handleObj.handler.guid = handler.guid;
3001 a7dd0415 Kostas Papadimitriou
                                }
3002 a7dd0415 Kostas Papadimitriou
                        }
3003 a7dd0415 Kostas Papadimitriou
3004 a7dd0415 Kostas Papadimitriou
                        // Add to the element's handler list, delegates in front
3005 a7dd0415 Kostas Papadimitriou
                        if ( selector ) {
3006 a7dd0415 Kostas Papadimitriou
                                handlers.splice( handlers.delegateCount++, 0, handleObj );
3007 a7dd0415 Kostas Papadimitriou
                        } else {
3008 a7dd0415 Kostas Papadimitriou
                                handlers.push( handleObj );
3009 a7dd0415 Kostas Papadimitriou
                        }
3010 a7dd0415 Kostas Papadimitriou
3011 a7dd0415 Kostas Papadimitriou
                        // Keep track of which events have ever been used, for event optimization
3012 a7dd0415 Kostas Papadimitriou
                        jQuery.event.global[ type ] = true;
3013 a7dd0415 Kostas Papadimitriou
                }
3014 a7dd0415 Kostas Papadimitriou
3015 a7dd0415 Kostas Papadimitriou
                // Nullify elem to prevent memory leaks in IE
3016 a7dd0415 Kostas Papadimitriou
                elem = null;
3017 a7dd0415 Kostas Papadimitriou
        },
3018 a7dd0415 Kostas Papadimitriou
3019 a7dd0415 Kostas Papadimitriou
        global: {},
3020 a7dd0415 Kostas Papadimitriou
3021 a7dd0415 Kostas Papadimitriou
        // Detach an event or set of events from an element
3022 a7dd0415 Kostas Papadimitriou
        remove: function( elem, types, handler, selector, mappedTypes ) {
3023 a7dd0415 Kostas Papadimitriou
3024 a7dd0415 Kostas Papadimitriou
                var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
3025 a7dd0415 Kostas Papadimitriou
                        t, tns, type, origType, namespaces, origCount,
3026 a7dd0415 Kostas Papadimitriou
                        j, events, special, handle, eventType, handleObj;
3027 a7dd0415 Kostas Papadimitriou
3028 a7dd0415 Kostas Papadimitriou
                if ( !elemData || !(events = elemData.events) ) {
3029 a7dd0415 Kostas Papadimitriou
                        return;
3030 a7dd0415 Kostas Papadimitriou
                }
3031 a7dd0415 Kostas Papadimitriou
3032 a7dd0415 Kostas Papadimitriou
                // Once for each type.namespace in types; type may be omitted
3033 a7dd0415 Kostas Papadimitriou
                types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
3034 a7dd0415 Kostas Papadimitriou
                for ( t = 0; t < types.length; t++ ) {
3035 a7dd0415 Kostas Papadimitriou
                        tns = rtypenamespace.exec( types[t] ) || [];
3036 a7dd0415 Kostas Papadimitriou
                        type = origType = tns[1];
3037 a7dd0415 Kostas Papadimitriou
                        namespaces = tns[2];
3038 a7dd0415 Kostas Papadimitriou
3039 a7dd0415 Kostas Papadimitriou
                        // Unbind all events (on this namespace, if provided) for the element
3040 a7dd0415 Kostas Papadimitriou
                        if ( !type ) {
3041 a7dd0415 Kostas Papadimitriou
                                for ( type in events ) {
3042 a7dd0415 Kostas Papadimitriou
                                        jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
3043 a7dd0415 Kostas Papadimitriou
                                }
3044 a7dd0415 Kostas Papadimitriou
                                continue;
3045 a7dd0415 Kostas Papadimitriou
                        }
3046 a7dd0415 Kostas Papadimitriou
3047 a7dd0415 Kostas Papadimitriou
                        special = jQuery.event.special[ type ] || {};
3048 a7dd0415 Kostas Papadimitriou
                        type = ( selector? special.delegateType : special.bindType ) || type;
3049 a7dd0415 Kostas Papadimitriou
                        eventType = events[ type ] || [];
3050 a7dd0415 Kostas Papadimitriou
                        origCount = eventType.length;
3051 a7dd0415 Kostas Papadimitriou
                        namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
3052 a7dd0415 Kostas Papadimitriou
3053 a7dd0415 Kostas Papadimitriou
                        // Remove matching events
3054 a7dd0415 Kostas Papadimitriou
                        for ( j = 0; j < eventType.length; j++ ) {
3055 a7dd0415 Kostas Papadimitriou
                                handleObj = eventType[ j ];
3056 a7dd0415 Kostas Papadimitriou
3057 a7dd0415 Kostas Papadimitriou
                                if ( ( mappedTypes || origType === handleObj.origType ) &&
3058 a7dd0415 Kostas Papadimitriou
                                         ( !handler || handler.guid === handleObj.guid ) &&
3059 a7dd0415 Kostas Papadimitriou
                                         ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
3060 a7dd0415 Kostas Papadimitriou
                                         ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
3061 a7dd0415 Kostas Papadimitriou
                                        eventType.splice( j--, 1 );
3062 a7dd0415 Kostas Papadimitriou
3063 a7dd0415 Kostas Papadimitriou
                                        if ( handleObj.selector ) {
3064 a7dd0415 Kostas Papadimitriou
                                                eventType.delegateCount--;
3065 a7dd0415 Kostas Papadimitriou
                                        }
3066 a7dd0415 Kostas Papadimitriou
                                        if ( special.remove ) {
3067 a7dd0415 Kostas Papadimitriou
                                                special.remove.call( elem, handleObj );
3068 a7dd0415 Kostas Papadimitriou
                                        }
3069 a7dd0415 Kostas Papadimitriou
                                }
3070 a7dd0415 Kostas Papadimitriou
                        }
3071 a7dd0415 Kostas Papadimitriou
3072 a7dd0415 Kostas Papadimitriou
                        // Remove generic event handler if we removed something and no more handlers exist
3073 a7dd0415 Kostas Papadimitriou
                        // (avoids potential for endless recursion during removal of special event handlers)
3074 a7dd0415 Kostas Papadimitriou
                        if ( eventType.length === 0 && origCount !== eventType.length ) {
3075 a7dd0415 Kostas Papadimitriou
                                if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
3076 a7dd0415 Kostas Papadimitriou
                                        jQuery.removeEvent( elem, type, elemData.handle );
3077 a7dd0415 Kostas Papadimitriou
                                }
3078 a7dd0415 Kostas Papadimitriou
3079 a7dd0415 Kostas Papadimitriou
                                delete events[ type ];
3080 a7dd0415 Kostas Papadimitriou
                        }
3081 a7dd0415 Kostas Papadimitriou
                }
3082 a7dd0415 Kostas Papadimitriou
3083 a7dd0415 Kostas Papadimitriou
                // Remove the expando if it's no longer used
3084 a7dd0415 Kostas Papadimitriou
                if ( jQuery.isEmptyObject( events ) ) {
3085 a7dd0415 Kostas Papadimitriou
                        handle = elemData.handle;
3086 a7dd0415 Kostas Papadimitriou
                        if ( handle ) {
3087 a7dd0415 Kostas Papadimitriou
                                handle.elem = null;
3088 a7dd0415 Kostas Papadimitriou
                        }
3089 a7dd0415 Kostas Papadimitriou
3090 a7dd0415 Kostas Papadimitriou
                        // removeData also checks for emptiness and clears the expando if empty
3091 a7dd0415 Kostas Papadimitriou
                        // so use it instead of delete
3092 a7dd0415 Kostas Papadimitriou
                        jQuery.removeData( elem, [ "events", "handle" ], true );
3093 a7dd0415 Kostas Papadimitriou
                }
3094 a7dd0415 Kostas Papadimitriou
        },
3095 a7dd0415 Kostas Papadimitriou
3096 a7dd0415 Kostas Papadimitriou
        // Events that are safe to short-circuit if no handlers are attached.
3097 a7dd0415 Kostas Papadimitriou
        // Native DOM events should not be added, they may have inline handlers.
3098 a7dd0415 Kostas Papadimitriou
        customEvent: {
3099 a7dd0415 Kostas Papadimitriou
                "getData": true,
3100 a7dd0415 Kostas Papadimitriou
                "setData": true,
3101 a7dd0415 Kostas Papadimitriou
                "changeData": true
3102 a7dd0415 Kostas Papadimitriou
        },
3103 a7dd0415 Kostas Papadimitriou
3104 a7dd0415 Kostas Papadimitriou
        trigger: function( event, data, elem, onlyHandlers ) {
3105 a7dd0415 Kostas Papadimitriou
                // Don't do events on text and comment nodes
3106 a7dd0415 Kostas Papadimitriou
                if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
3107 a7dd0415 Kostas Papadimitriou
                        return;
3108 a7dd0415 Kostas Papadimitriou
                }
3109 a7dd0415 Kostas Papadimitriou
3110 a7dd0415 Kostas Papadimitriou
                // Event object or event type
3111 a7dd0415 Kostas Papadimitriou
                var type = event.type || event,
3112 a7dd0415 Kostas Papadimitriou
                        namespaces = [],
3113 a7dd0415 Kostas Papadimitriou
                        cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
3114 a7dd0415 Kostas Papadimitriou
3115 a7dd0415 Kostas Papadimitriou
                // focus/blur morphs to focusin/out; ensure we're not firing them right now
3116 a7dd0415 Kostas Papadimitriou
                if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
3117 a7dd0415 Kostas Papadimitriou
                        return;
3118 a7dd0415 Kostas Papadimitriou
                }
3119 a7dd0415 Kostas Papadimitriou
3120 a7dd0415 Kostas Papadimitriou
                if ( type.indexOf( "!" ) >= 0 ) {
3121 a7dd0415 Kostas Papadimitriou
                        // Exclusive events trigger only for the exact event (no namespaces)
3122 a7dd0415 Kostas Papadimitriou
                        type = type.slice(0, -1);
3123 a7dd0415 Kostas Papadimitriou
                        exclusive = true;
3124 a7dd0415 Kostas Papadimitriou
                }
3125 a7dd0415 Kostas Papadimitriou
3126 a7dd0415 Kostas Papadimitriou
                if ( type.indexOf( "." ) >= 0 ) {
3127 a7dd0415 Kostas Papadimitriou
                        // Namespaced trigger; create a regexp to match event type in handle()
3128 a7dd0415 Kostas Papadimitriou
                        namespaces = type.split(".");
3129 a7dd0415 Kostas Papadimitriou
                        type = namespaces.shift();
3130 a7dd0415 Kostas Papadimitriou
                        namespaces.sort();
3131 a7dd0415 Kostas Papadimitriou
                }
3132 a7dd0415 Kostas Papadimitriou
3133 a7dd0415 Kostas Papadimitriou
                if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
3134 a7dd0415 Kostas Papadimitriou
                        // No jQuery handlers for this event type, and it can't have inline handlers
3135 a7dd0415 Kostas Papadimitriou
                        return;
3136 a7dd0415 Kostas Papadimitriou
                }
3137 a7dd0415 Kostas Papadimitriou
3138 a7dd0415 Kostas Papadimitriou
                // Caller can pass in an Event, Object, or just an event type string
3139 a7dd0415 Kostas Papadimitriou
                event = typeof event === "object" ?
3140 a7dd0415 Kostas Papadimitriou
                        // jQuery.Event object
3141 a7dd0415 Kostas Papadimitriou
                        event[ jQuery.expando ] ? event :
3142 a7dd0415 Kostas Papadimitriou
                        // Object literal
3143 a7dd0415 Kostas Papadimitriou
                        new jQuery.Event( type, event ) :
3144 a7dd0415 Kostas Papadimitriou
                        // Just the event type (string)
3145 a7dd0415 Kostas Papadimitriou
                        new jQuery.Event( type );
3146 a7dd0415 Kostas Papadimitriou
3147 a7dd0415 Kostas Papadimitriou
                event.type = type;
3148 a7dd0415 Kostas Papadimitriou
                event.isTrigger = true;
3149 a7dd0415 Kostas Papadimitriou
                event.exclusive = exclusive;
3150 a7dd0415 Kostas Papadimitriou
                event.namespace = namespaces.join( "." );
3151 a7dd0415 Kostas Papadimitriou
                event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
3152 a7dd0415 Kostas Papadimitriou
                ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
3153 a7dd0415 Kostas Papadimitriou
3154 a7dd0415 Kostas Papadimitriou
                // Handle a global trigger
3155 a7dd0415 Kostas Papadimitriou
                if ( !elem ) {
3156 a7dd0415 Kostas Papadimitriou
3157 a7dd0415 Kostas Papadimitriou
                        // TODO: Stop taunting the data cache; remove global events and always attach to document
3158 a7dd0415 Kostas Papadimitriou
                        cache = jQuery.cache;
3159 a7dd0415 Kostas Papadimitriou
                        for ( i in cache ) {
3160 a7dd0415 Kostas Papadimitriou
                                if ( cache[ i ].events && cache[ i ].events[ type ] ) {
3161 a7dd0415 Kostas Papadimitriou
                                        jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
3162 a7dd0415 Kostas Papadimitriou
                                }
3163 a7dd0415 Kostas Papadimitriou
                        }
3164 a7dd0415 Kostas Papadimitriou
                        return;
3165 a7dd0415 Kostas Papadimitriou
                }
3166 a7dd0415 Kostas Papadimitriou
3167 a7dd0415 Kostas Papadimitriou
                // Clean up the event in case it is being reused
3168 a7dd0415 Kostas Papadimitriou
                event.result = undefined;
3169 a7dd0415 Kostas Papadimitriou
                if ( !event.target ) {
3170 a7dd0415 Kostas Papadimitriou
                        event.target = elem;
3171 a7dd0415 Kostas Papadimitriou
                }
3172 a7dd0415 Kostas Papadimitriou
3173 a7dd0415 Kostas Papadimitriou
                // Clone any incoming data and prepend the event, creating the handler arg list
3174 a7dd0415 Kostas Papadimitriou
                data = data != null ? jQuery.makeArray( data ) : [];
3175 a7dd0415 Kostas Papadimitriou
                data.unshift( event );
3176 a7dd0415 Kostas Papadimitriou
3177 a7dd0415 Kostas Papadimitriou
                // Allow special events to draw outside the lines
3178 a7dd0415 Kostas Papadimitriou
                special = jQuery.event.special[ type ] || {};
3179 a7dd0415 Kostas Papadimitriou
                if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
3180 a7dd0415 Kostas Papadimitriou
                        return;
3181 a7dd0415 Kostas Papadimitriou
                }
3182 a7dd0415 Kostas Papadimitriou
3183 a7dd0415 Kostas Papadimitriou
                // Determine event propagation path in advance, per W3C events spec (#9951)
3184 a7dd0415 Kostas Papadimitriou
                // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
3185 a7dd0415 Kostas Papadimitriou
                eventPath = [[ elem, special.bindType || type ]];
3186 a7dd0415 Kostas Papadimitriou
                if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
3187 a7dd0415 Kostas Papadimitriou
3188 a7dd0415 Kostas Papadimitriou
                        bubbleType = special.delegateType || type;
3189 a7dd0415 Kostas Papadimitriou
                        cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
3190 a7dd0415 Kostas Papadimitriou
                        old = null;
3191 a7dd0415 Kostas Papadimitriou
                        for ( ; cur; cur = cur.parentNode ) {
3192 a7dd0415 Kostas Papadimitriou
                                eventPath.push([ cur, bubbleType ]);
3193 a7dd0415 Kostas Papadimitriou
                                old = cur;
3194 a7dd0415 Kostas Papadimitriou
                        }
3195 a7dd0415 Kostas Papadimitriou
3196 a7dd0415 Kostas Papadimitriou
                        // Only add window if we got to document (e.g., not plain obj or detached DOM)
3197 a7dd0415 Kostas Papadimitriou
                        if ( old && old === elem.ownerDocument ) {
3198 a7dd0415 Kostas Papadimitriou
                                eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
3199 a7dd0415 Kostas Papadimitriou
                        }
3200 a7dd0415 Kostas Papadimitriou
                }
3201 a7dd0415 Kostas Papadimitriou
3202 a7dd0415 Kostas Papadimitriou
                // Fire handlers on the event path
3203 a7dd0415 Kostas Papadimitriou
                for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
3204 a7dd0415 Kostas Papadimitriou
3205 a7dd0415 Kostas Papadimitriou
                        cur = eventPath[i][0];
3206 a7dd0415 Kostas Papadimitriou
                        event.type = eventPath[i][1];
3207 a7dd0415 Kostas Papadimitriou
3208 a7dd0415 Kostas Papadimitriou
                        handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
3209 a7dd0415 Kostas Papadimitriou
                        if ( handle ) {
3210 a7dd0415 Kostas Papadimitriou
                                handle.apply( cur, data );
3211 a7dd0415 Kostas Papadimitriou
                        }
3212 a7dd0415 Kostas Papadimitriou
                        // Note that this is a bare JS function and not a jQuery handler
3213 a7dd0415 Kostas Papadimitriou
                        handle = ontype && cur[ ontype ];
3214 a7dd0415 Kostas Papadimitriou
                        if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
3215 a7dd0415 Kostas Papadimitriou
                                event.preventDefault();
3216 a7dd0415 Kostas Papadimitriou
                        }
3217 a7dd0415 Kostas Papadimitriou
                }
3218 a7dd0415 Kostas Papadimitriou
                event.type = type;
3219 a7dd0415 Kostas Papadimitriou
3220 a7dd0415 Kostas Papadimitriou
                // If nobody prevented the default action, do it now
3221 a7dd0415 Kostas Papadimitriou
                if ( !onlyHandlers && !event.isDefaultPrevented() ) {
3222 a7dd0415 Kostas Papadimitriou
3223 a7dd0415 Kostas Papadimitriou
                        if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
3224 a7dd0415 Kostas Papadimitriou
                                !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
3225 a7dd0415 Kostas Papadimitriou
3226 a7dd0415 Kostas Papadimitriou
                                // Call a native DOM method on the target with the same name name as the event.
3227 a7dd0415 Kostas Papadimitriou
                                // Can't use an .isFunction() check here because IE6/7 fails that test.
3228 a7dd0415 Kostas Papadimitriou
                                // Don't do default actions on window, that's where global variables be (#6170)
3229 a7dd0415 Kostas Papadimitriou
                                // IE<9 dies on focus/blur to hidden element (#1486)
3230 a7dd0415 Kostas Papadimitriou
                                if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
3231 a7dd0415 Kostas Papadimitriou
3232 a7dd0415 Kostas Papadimitriou
                                        // Don't re-trigger an onFOO event when we call its FOO() method
3233 a7dd0415 Kostas Papadimitriou
                                        old = elem[ ontype ];
3234 a7dd0415 Kostas Papadimitriou
3235 a7dd0415 Kostas Papadimitriou
                                        if ( old ) {
3236 a7dd0415 Kostas Papadimitriou
                                                elem[ ontype ] = null;
3237 a7dd0415 Kostas Papadimitriou
                                        }
3238 a7dd0415 Kostas Papadimitriou
3239 a7dd0415 Kostas Papadimitriou
                                        // Prevent re-triggering of the same event, since we already bubbled it above
3240 a7dd0415 Kostas Papadimitriou
                                        jQuery.event.triggered = type;
3241 a7dd0415 Kostas Papadimitriou
                                        elem[ type ]();
3242 a7dd0415 Kostas Papadimitriou
                                        jQuery.event.triggered = undefined;
3243 a7dd0415 Kostas Papadimitriou
3244 a7dd0415 Kostas Papadimitriou
                                        if ( old ) {
3245 a7dd0415 Kostas Papadimitriou
                                                elem[ ontype ] = old;
3246 a7dd0415 Kostas Papadimitriou
                                        }
3247 a7dd0415 Kostas Papadimitriou
                                }
3248 a7dd0415 Kostas Papadimitriou
                        }
3249 a7dd0415 Kostas Papadimitriou
                }
3250 a7dd0415 Kostas Papadimitriou
3251 a7dd0415 Kostas Papadimitriou
                return event.result;
3252 a7dd0415 Kostas Papadimitriou
        },
3253 a7dd0415 Kostas Papadimitriou
3254 a7dd0415 Kostas Papadimitriou
        dispatch: function( event ) {
3255 a7dd0415 Kostas Papadimitriou
3256 a7dd0415 Kostas Papadimitriou
                // Make a writable jQuery.Event from the native event object
3257 a7dd0415 Kostas Papadimitriou
                event = jQuery.event.fix( event || window.event );
3258 a7dd0415 Kostas Papadimitriou
3259 a7dd0415 Kostas Papadimitriou
                var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
3260 a7dd0415 Kostas Papadimitriou
                        delegateCount = handlers.delegateCount,
3261 a7dd0415 Kostas Papadimitriou
                        args = [].slice.call( arguments, 0 ),
3262 a7dd0415 Kostas Papadimitriou
                        run_all = !event.exclusive && !event.namespace,
3263 18059f42 Kostas Papadimitriou
                        special = jQuery.event.special[ event.type ] || {},
3264 a7dd0415 Kostas Papadimitriou
                        handlerQueue = [],
3265 a7dd0415 Kostas Papadimitriou
                        i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
3266 a7dd0415 Kostas Papadimitriou
3267 a7dd0415 Kostas Papadimitriou
                // Use the fix-ed jQuery.Event rather than the (read-only) native event
3268 a7dd0415 Kostas Papadimitriou
                args[0] = event;
3269 a7dd0415 Kostas Papadimitriou
                event.delegateTarget = this;
3270 a7dd0415 Kostas Papadimitriou
3271 18059f42 Kostas Papadimitriou
                // Call the preDispatch hook for the mapped type, and let it bail if desired
3272 18059f42 Kostas Papadimitriou
                if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
3273 18059f42 Kostas Papadimitriou
                        return;
3274 18059f42 Kostas Papadimitriou
                }
3275 18059f42 Kostas Papadimitriou
3276 a7dd0415 Kostas Papadimitriou
                // Determine handlers that should run if there are delegated events
3277 18059f42 Kostas Papadimitriou
                // Avoid non-left-click bubbling in Firefox (#3861)
3278 18059f42 Kostas Papadimitriou
                if ( delegateCount && !(event.button && event.type === "click") ) {
3279 a7dd0415 Kostas Papadimitriou
3280 a7dd0415 Kostas Papadimitriou
                        // Pregenerate a single jQuery object for reuse with .is()
3281 a7dd0415 Kostas Papadimitriou
                        jqcur = jQuery(this);
3282 a7dd0415 Kostas Papadimitriou
                        jqcur.context = this.ownerDocument || this;
3283 a7dd0415 Kostas Papadimitriou
3284 a7dd0415 Kostas Papadimitriou
                        for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
3285 18059f42 Kostas Papadimitriou
3286 18059f42 Kostas Papadimitriou
                                // Don't process events on disabled elements (#6911, #8165)
3287 18059f42 Kostas Papadimitriou
                                if ( cur.disabled !== true ) {
3288 18059f42 Kostas Papadimitriou
                                        selMatch = {};
3289 18059f42 Kostas Papadimitriou
                                        matches = [];
3290 18059f42 Kostas Papadimitriou
                                        jqcur[0] = cur;
3291 18059f42 Kostas Papadimitriou
                                        for ( i = 0; i < delegateCount; i++ ) {
3292 18059f42 Kostas Papadimitriou
                                                handleObj = handlers[ i ];
3293 18059f42 Kostas Papadimitriou
                                                sel = handleObj.selector;
3294 18059f42 Kostas Papadimitriou
3295 18059f42 Kostas Papadimitriou
                                                if ( selMatch[ sel ] === undefined ) {
3296 18059f42 Kostas Papadimitriou
                                                        selMatch[ sel ] = (
3297 18059f42 Kostas Papadimitriou
                                                                handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )
3298 18059f42 Kostas Papadimitriou
                                                        );
3299 18059f42 Kostas Papadimitriou
                                                }
3300 18059f42 Kostas Papadimitriou
                                                if ( selMatch[ sel ] ) {
3301 18059f42 Kostas Papadimitriou
                                                        matches.push( handleObj );
3302 18059f42 Kostas Papadimitriou
                                                }
3303 a7dd0415 Kostas Papadimitriou
                                        }
3304 18059f42 Kostas Papadimitriou
                                        if ( matches.length ) {
3305 18059f42 Kostas Papadimitriou
                                                handlerQueue.push({ elem: cur, matches: matches });
3306 a7dd0415 Kostas Papadimitriou
                                        }
3307 a7dd0415 Kostas Papadimitriou
                                }
3308 a7dd0415 Kostas Papadimitriou
                        }
3309 a7dd0415 Kostas Papadimitriou
                }
3310 a7dd0415 Kostas Papadimitriou
3311 a7dd0415 Kostas Papadimitriou
                // Add the remaining (directly-bound) handlers
3312 a7dd0415 Kostas Papadimitriou
                if ( handlers.length > delegateCount ) {
3313 a7dd0415 Kostas Papadimitriou
                        handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
3314 a7dd0415 Kostas Papadimitriou
                }
3315 a7dd0415 Kostas Papadimitriou
3316 a7dd0415 Kostas Papadimitriou
                // Run delegates first; they may want to stop propagation beneath us
3317 a7dd0415 Kostas Papadimitriou
                for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
3318 a7dd0415 Kostas Papadimitriou
                        matched = handlerQueue[ i ];
3319 a7dd0415 Kostas Papadimitriou
                        event.currentTarget = matched.elem;
3320 a7dd0415 Kostas Papadimitriou
3321 a7dd0415 Kostas Papadimitriou
                        for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
3322 a7dd0415 Kostas Papadimitriou
                                handleObj = matched.matches[ j ];
3323 a7dd0415 Kostas Papadimitriou
3324 a7dd0415 Kostas Papadimitriou
                                // Triggered event must either 1) be non-exclusive and have no namespace, or
3325 a7dd0415 Kostas Papadimitriou
                                // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
3326 a7dd0415 Kostas Papadimitriou
                                if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
3327 a7dd0415 Kostas Papadimitriou
3328 a7dd0415 Kostas Papadimitriou
                                        event.data = handleObj.data;
3329 a7dd0415 Kostas Papadimitriou
                                        event.handleObj = handleObj;
3330 a7dd0415 Kostas Papadimitriou
3331 a7dd0415 Kostas Papadimitriou
                                        ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
3332 a7dd0415 Kostas Papadimitriou
                                                        .apply( matched.elem, args );
3333 a7dd0415 Kostas Papadimitriou
3334 a7dd0415 Kostas Papadimitriou
                                        if ( ret !== undefined ) {
3335 a7dd0415 Kostas Papadimitriou
                                                event.result = ret;
3336 a7dd0415 Kostas Papadimitriou
                                                if ( ret === false ) {
3337 a7dd0415 Kostas Papadimitriou
                                                        event.preventDefault();
3338 a7dd0415 Kostas Papadimitriou
                                                        event.stopPropagation();
3339 a7dd0415 Kostas Papadimitriou
                                                }
3340 a7dd0415 Kostas Papadimitriou
                                        }
3341 a7dd0415 Kostas Papadimitriou
                                }
3342 a7dd0415 Kostas Papadimitriou
                        }
3343 a7dd0415 Kostas Papadimitriou
                }
3344 a7dd0415 Kostas Papadimitriou
3345 18059f42 Kostas Papadimitriou
                // Call the postDispatch hook for the mapped type
3346 18059f42 Kostas Papadimitriou
                if ( special.postDispatch ) {
3347 18059f42 Kostas Papadimitriou
                        special.postDispatch.call( this, event );
3348 18059f42 Kostas Papadimitriou
                }
3349 18059f42 Kostas Papadimitriou
3350 a7dd0415 Kostas Papadimitriou
                return event.result;
3351 a7dd0415 Kostas Papadimitriou
        },
3352 a7dd0415 Kostas Papadimitriou
3353 a7dd0415 Kostas Papadimitriou
        // Includes some event props shared by KeyEvent and MouseEvent
3354 a7dd0415 Kostas Papadimitriou
        // *** attrChange attrName relatedNode srcElement  are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
3355 a7dd0415 Kostas Papadimitriou
        props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
3356 a7dd0415 Kostas Papadimitriou
3357 a7dd0415 Kostas Papadimitriou
        fixHooks: {},
3358 a7dd0415 Kostas Papadimitriou
3359 a7dd0415 Kostas Papadimitriou
        keyHooks: {
3360 a7dd0415 Kostas Papadimitriou
                props: "char charCode key keyCode".split(" "),
3361 a7dd0415 Kostas Papadimitriou
                filter: function( event, original ) {
3362 a7dd0415 Kostas Papadimitriou
3363 a7dd0415 Kostas Papadimitriou
                        // Add which for key events
3364 a7dd0415 Kostas Papadimitriou
                        if ( event.which == null ) {
3365 a7dd0415 Kostas Papadimitriou
                                event.which = original.charCode != null ? original.charCode : original.keyCode;
3366 a7dd0415 Kostas Papadimitriou
                        }
3367 a7dd0415 Kostas Papadimitriou
3368 a7dd0415 Kostas Papadimitriou
                        return event;
3369 a7dd0415 Kostas Papadimitriou
                }
3370 a7dd0415 Kostas Papadimitriou
        },
3371 a7dd0415 Kostas Papadimitriou
3372 a7dd0415 Kostas Papadimitriou
        mouseHooks: {
3373 a7dd0415 Kostas Papadimitriou
                props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
3374 a7dd0415 Kostas Papadimitriou
                filter: function( event, original ) {
3375 a7dd0415 Kostas Papadimitriou
                        var eventDoc, doc, body,
3376 a7dd0415 Kostas Papadimitriou
                                button = original.button,
3377 a7dd0415 Kostas Papadimitriou
                                fromElement = original.fromElement;
3378 a7dd0415 Kostas Papadimitriou
3379 a7dd0415 Kostas Papadimitriou
                        // Calculate pageX/Y if missing and clientX/Y available
3380 a7dd0415 Kostas Papadimitriou
                        if ( event.pageX == null && original.clientX != null ) {
3381 a7dd0415 Kostas Papadimitriou
                                eventDoc = event.target.ownerDocument || document;
3382 a7dd0415 Kostas Papadimitriou
                                doc = eventDoc.documentElement;
3383 a7dd0415 Kostas Papadimitriou
                                body = eventDoc.body;
3384 a7dd0415 Kostas Papadimitriou
3385 a7dd0415 Kostas Papadimitriou
                                event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
3386 a7dd0415 Kostas Papadimitriou
                                event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
3387 a7dd0415 Kostas Papadimitriou
                        }
3388 a7dd0415 Kostas Papadimitriou
3389 a7dd0415 Kostas Papadimitriou
                        // Add relatedTarget, if necessary
3390 a7dd0415 Kostas Papadimitriou
                        if ( !event.relatedTarget && fromElement ) {
3391 a7dd0415 Kostas Papadimitriou
                                event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
3392 a7dd0415 Kostas Papadimitriou
                        }
3393 a7dd0415 Kostas Papadimitriou
3394 a7dd0415 Kostas Papadimitriou
                        // Add which for click: 1 === left; 2 === middle; 3 === right
3395 a7dd0415 Kostas Papadimitriou
                        // Note: button is not normalized, so don't use it
3396 a7dd0415 Kostas Papadimitriou
                        if ( !event.which && button !== undefined ) {
3397 a7dd0415 Kostas Papadimitriou
                                event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
3398 a7dd0415 Kostas Papadimitriou
                        }
3399 a7dd0415 Kostas Papadimitriou
3400 a7dd0415 Kostas Papadimitriou
                        return event;
3401 a7dd0415 Kostas Papadimitriou
                }
3402 a7dd0415 Kostas Papadimitriou
        },
3403 a7dd0415 Kostas Papadimitriou
3404 a7dd0415 Kostas Papadimitriou
        fix: function( event ) {
3405 a7dd0415 Kostas Papadimitriou
                if ( event[ jQuery.expando ] ) {
3406 a7dd0415 Kostas Papadimitriou
                        return event;
3407 a7dd0415 Kostas Papadimitriou
                }
3408 a7dd0415 Kostas Papadimitriou
3409 a7dd0415 Kostas Papadimitriou
                // Create a writable copy of the event object and normalize some properties
3410 a7dd0415 Kostas Papadimitriou
                var i, prop,
3411 a7dd0415 Kostas Papadimitriou
                        originalEvent = event,
3412 a7dd0415 Kostas Papadimitriou
                        fixHook = jQuery.event.fixHooks[ event.type ] || {},
3413 a7dd0415 Kostas Papadimitriou
                        copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
3414 a7dd0415 Kostas Papadimitriou
3415 a7dd0415 Kostas Papadimitriou
                event = jQuery.Event( originalEvent );
3416 a7dd0415 Kostas Papadimitriou
3417 a7dd0415 Kostas Papadimitriou
                for ( i = copy.length; i; ) {
3418 a7dd0415 Kostas Papadimitriou
                        prop = copy[ --i ];
3419 a7dd0415 Kostas Papadimitriou
                        event[ prop ] = originalEvent[ prop ];
3420 a7dd0415 Kostas Papadimitriou
                }
3421 a7dd0415 Kostas Papadimitriou
3422 a7dd0415 Kostas Papadimitriou
                // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
3423 a7dd0415 Kostas Papadimitriou
                if ( !event.target ) {
3424 a7dd0415 Kostas Papadimitriou
                        event.target = originalEvent.srcElement || document;
3425 a7dd0415 Kostas Papadimitriou
                }
3426 a7dd0415 Kostas Papadimitriou
3427 a7dd0415 Kostas Papadimitriou
                // Target should not be a text node (#504, Safari)
3428 a7dd0415 Kostas Papadimitriou
                if ( event.target.nodeType === 3 ) {
3429 a7dd0415 Kostas Papadimitriou
                        event.target = event.target.parentNode;
3430 a7dd0415 Kostas Papadimitriou
                }
3431 a7dd0415 Kostas Papadimitriou
3432 a7dd0415 Kostas Papadimitriou
                // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
3433 a7dd0415 Kostas Papadimitriou
                if ( event.metaKey === undefined ) {
3434 a7dd0415 Kostas Papadimitriou
                        event.metaKey = event.ctrlKey;
3435 a7dd0415 Kostas Papadimitriou
                }
3436 a7dd0415 Kostas Papadimitriou
3437 a7dd0415 Kostas Papadimitriou
                return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
3438 a7dd0415 Kostas Papadimitriou
        },
3439 a7dd0415 Kostas Papadimitriou
3440 a7dd0415 Kostas Papadimitriou
        special: {
3441 a7dd0415 Kostas Papadimitriou
                ready: {
3442 a7dd0415 Kostas Papadimitriou
                        // Make sure the ready event is setup
3443 a7dd0415 Kostas Papadimitriou
                        setup: jQuery.bindReady
3444 a7dd0415 Kostas Papadimitriou
                },
3445 a7dd0415 Kostas Papadimitriou
3446 a7dd0415 Kostas Papadimitriou
                load: {
3447 a7dd0415 Kostas Papadimitriou
                        // Prevent triggered image.load events from bubbling to window.load
3448 a7dd0415 Kostas Papadimitriou
                        noBubble: true
3449 a7dd0415 Kostas Papadimitriou
                },
3450 a7dd0415 Kostas Papadimitriou
3451 a7dd0415 Kostas Papadimitriou
                focus: {
3452 a7dd0415 Kostas Papadimitriou
                        delegateType: "focusin"
3453 a7dd0415 Kostas Papadimitriou
                },
3454 a7dd0415 Kostas Papadimitriou
                blur: {
3455 a7dd0415 Kostas Papadimitriou
                        delegateType: "focusout"
3456 a7dd0415 Kostas Papadimitriou
                },
3457 a7dd0415 Kostas Papadimitriou
3458 a7dd0415 Kostas Papadimitriou
                beforeunload: {
3459 a7dd0415 Kostas Papadimitriou
                        setup: function( data, namespaces, eventHandle ) {
3460 a7dd0415 Kostas Papadimitriou
                                // We only want to do this special case on windows
3461 a7dd0415 Kostas Papadimitriou
                                if ( jQuery.isWindow( this ) ) {
3462 a7dd0415 Kostas Papadimitriou
                                        this.onbeforeunload = eventHandle;
3463 a7dd0415 Kostas Papadimitriou
                                }
3464 a7dd0415 Kostas Papadimitriou
                        },
3465 a7dd0415 Kostas Papadimitriou
3466 a7dd0415 Kostas Papadimitriou
                        teardown: function( namespaces, eventHandle ) {
3467 a7dd0415 Kostas Papadimitriou
                                if ( this.onbeforeunload === eventHandle ) {
3468 a7dd0415 Kostas Papadimitriou
                                        this.onbeforeunload = null;
3469 a7dd0415 Kostas Papadimitriou
                                }
3470 a7dd0415 Kostas Papadimitriou
                        }
3471 a7dd0415 Kostas Papadimitriou
                }
3472 a7dd0415 Kostas Papadimitriou
        },
3473 a7dd0415 Kostas Papadimitriou
3474 a7dd0415 Kostas Papadimitriou
        simulate: function( type, elem, event, bubble ) {
3475 a7dd0415 Kostas Papadimitriou
                // Piggyback on a donor event to simulate a different one.
3476 a7dd0415 Kostas Papadimitriou
                // Fake originalEvent to avoid donor's stopPropagation, but if the
3477 a7dd0415 Kostas Papadimitriou
                // simulated event prevents default then we do the same on the donor.
3478 a7dd0415 Kostas Papadimitriou
                var e = jQuery.extend(
3479 a7dd0415 Kostas Papadimitriou
                        new jQuery.Event(),
3480 a7dd0415 Kostas Papadimitriou
                        event,
3481 a7dd0415 Kostas Papadimitriou
                        { type: type,
3482 a7dd0415 Kostas Papadimitriou
                                isSimulated: true,
3483 a7dd0415 Kostas Papadimitriou
                                originalEvent: {}
3484 a7dd0415 Kostas Papadimitriou
                        }
3485 a7dd0415 Kostas Papadimitriou
                );
3486 a7dd0415 Kostas Papadimitriou
                if ( bubble ) {
3487 a7dd0415 Kostas Papadimitriou
                        jQuery.event.trigger( e, null, elem );
3488 a7dd0415 Kostas Papadimitriou
                } else {
3489 a7dd0415 Kostas Papadimitriou
                        jQuery.event.dispatch.call( elem, e );
3490 a7dd0415 Kostas Papadimitriou
                }
3491 a7dd0415 Kostas Papadimitriou
                if ( e.isDefaultPrevented() ) {
3492 a7dd0415 Kostas Papadimitriou
                        event.preventDefault();
3493 a7dd0415 Kostas Papadimitriou
                }
3494 a7dd0415 Kostas Papadimitriou
        }
3495 a7dd0415 Kostas Papadimitriou
};
3496 a7dd0415 Kostas Papadimitriou
3497 a7dd0415 Kostas Papadimitriou
// Some plugins are using, but it's undocumented/deprecated and will be removed.
3498 a7dd0415 Kostas Papadimitriou
// The 1.7 special event interface should provide all the hooks needed now.
3499 a7dd0415 Kostas Papadimitriou
jQuery.event.handle = jQuery.event.dispatch;
3500 a7dd0415 Kostas Papadimitriou
3501 a7dd0415 Kostas Papadimitriou
jQuery.removeEvent = document.removeEventListener ?
3502 a7dd0415 Kostas Papadimitriou
        function( elem, type, handle ) {
3503 a7dd0415 Kostas Papadimitriou
                if ( elem.removeEventListener ) {
3504 a7dd0415 Kostas Papadimitriou
                        elem.removeEventListener( type, handle, false );
3505 a7dd0415 Kostas Papadimitriou
                }
3506 a7dd0415 Kostas Papadimitriou
        } :
3507 a7dd0415 Kostas Papadimitriou
        function( elem, type, handle ) {
3508 a7dd0415 Kostas Papadimitriou
                if ( elem.detachEvent ) {
3509 a7dd0415 Kostas Papadimitriou
                        elem.detachEvent( "on" + type, handle );
3510 a7dd0415 Kostas Papadimitriou
                }
3511 a7dd0415 Kostas Papadimitriou
        };
3512 a7dd0415 Kostas Papadimitriou
3513 a7dd0415 Kostas Papadimitriou
jQuery.Event = function( src, props ) {
3514 a7dd0415 Kostas Papadimitriou
        // Allow instantiation without the 'new' keyword
3515 a7dd0415 Kostas Papadimitriou
        if ( !(this instanceof jQuery.Event) ) {
3516 a7dd0415 Kostas Papadimitriou
                return new jQuery.Event( src, props );
3517 a7dd0415 Kostas Papadimitriou
        }
3518 a7dd0415 Kostas Papadimitriou
3519 a7dd0415 Kostas Papadimitriou
        // Event object
3520 a7dd0415 Kostas Papadimitriou
        if ( src && src.type ) {
3521 a7dd0415 Kostas Papadimitriou
                this.originalEvent = src;
3522 a7dd0415 Kostas Papadimitriou
                this.type = src.type;
3523 a7dd0415 Kostas Papadimitriou
3524 a7dd0415 Kostas Papadimitriou
                // Events bubbling up the document may have been marked as prevented
3525 a7dd0415 Kostas Papadimitriou
                // by a handler lower down the tree; reflect the correct value.
3526 a7dd0415 Kostas Papadimitriou
                this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
3527 a7dd0415 Kostas Papadimitriou
                        src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
3528 a7dd0415 Kostas Papadimitriou
3529 a7dd0415 Kostas Papadimitriou
        // Event type
3530 a7dd0415 Kostas Papadimitriou
        } else {
3531 a7dd0415 Kostas Papadimitriou
                this.type = src;
3532 a7dd0415 Kostas Papadimitriou
        }
3533 a7dd0415 Kostas Papadimitriou
3534 a7dd0415 Kostas Papadimitriou
        // Put explicitly provided properties onto the event object
3535 a7dd0415 Kostas Papadimitriou
        if ( props ) {
3536 a7dd0415 Kostas Papadimitriou
                jQuery.extend( this, props );
3537 a7dd0415 Kostas Papadimitriou
        }
3538 a7dd0415 Kostas Papadimitriou
3539 a7dd0415 Kostas Papadimitriou
        // Create a timestamp if incoming event doesn't have one
3540 a7dd0415 Kostas Papadimitriou
        this.timeStamp = src && src.timeStamp || jQuery.now();
3541 a7dd0415 Kostas Papadimitriou
3542 a7dd0415 Kostas Papadimitriou
        // Mark it as fixed
3543 a7dd0415 Kostas Papadimitriou
        this[ jQuery.expando ] = true;
3544 a7dd0415 Kostas Papadimitriou
};
3545 a7dd0415 Kostas Papadimitriou
3546 a7dd0415 Kostas Papadimitriou
function returnFalse() {
3547 a7dd0415 Kostas Papadimitriou
        return false;
3548 a7dd0415 Kostas Papadimitriou
}
3549 a7dd0415 Kostas Papadimitriou
function returnTrue() {
3550 a7dd0415 Kostas Papadimitriou
        return true;
3551 a7dd0415 Kostas Papadimitriou
}
3552 a7dd0415 Kostas Papadimitriou
3553 a7dd0415 Kostas Papadimitriou
// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
3554 a7dd0415 Kostas Papadimitriou
// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
3555 a7dd0415 Kostas Papadimitriou
jQuery.Event.prototype = {
3556 a7dd0415 Kostas Papadimitriou
        preventDefault: function() {
3557 a7dd0415 Kostas Papadimitriou
                this.isDefaultPrevented = returnTrue;
3558 a7dd0415 Kostas Papadimitriou
3559 a7dd0415 Kostas Papadimitriou
                var e = this.originalEvent;
3560 a7dd0415 Kostas Papadimitriou
                if ( !e ) {
3561 a7dd0415 Kostas Papadimitriou
                        return;
3562 a7dd0415 Kostas Papadimitriou
                }
3563 a7dd0415 Kostas Papadimitriou
3564 a7dd0415 Kostas Papadimitriou
                // if preventDefault exists run it on the original event
3565 a7dd0415 Kostas Papadimitriou
                if ( e.preventDefault ) {
3566 a7dd0415 Kostas Papadimitriou
                        e.preventDefault();
3567 a7dd0415 Kostas Papadimitriou
3568 a7dd0415 Kostas Papadimitriou
                // otherwise set the returnValue property of the original event to false (IE)
3569 a7dd0415 Kostas Papadimitriou
                } else {
3570 a7dd0415 Kostas Papadimitriou
                        e.returnValue = false;
3571 a7dd0415 Kostas Papadimitriou
                }
3572 a7dd0415 Kostas Papadimitriou
        },
3573 a7dd0415 Kostas Papadimitriou
        stopPropagation: function() {
3574 a7dd0415 Kostas Papadimitriou
                this.isPropagationStopped = returnTrue;
3575 a7dd0415 Kostas Papadimitriou
3576 a7dd0415 Kostas Papadimitriou
                var e = this.originalEvent;
3577 a7dd0415 Kostas Papadimitriou
                if ( !e ) {
3578 a7dd0415 Kostas Papadimitriou
                        return;
3579 a7dd0415 Kostas Papadimitriou
                }
3580 a7dd0415 Kostas Papadimitriou
                // if stopPropagation exists run it on the original event
3581 a7dd0415 Kostas Papadimitriou
                if ( e.stopPropagation ) {
3582 a7dd0415 Kostas Papadimitriou
                        e.stopPropagation();
3583 a7dd0415 Kostas Papadimitriou
                }
3584 a7dd0415 Kostas Papadimitriou
                // otherwise set the cancelBubble property of the original event to true (IE)
3585 a7dd0415 Kostas Papadimitriou
                e.cancelBubble = true;
3586 a7dd0415 Kostas Papadimitriou
        },
3587 a7dd0415 Kostas Papadimitriou
        stopImmediatePropagation: function() {
3588 a7dd0415 Kostas Papadimitriou
                this.isImmediatePropagationStopped = returnTrue;
3589 a7dd0415 Kostas Papadimitriou
                this.stopPropagation();
3590 a7dd0415 Kostas Papadimitriou
        },
3591 a7dd0415 Kostas Papadimitriou
        isDefaultPrevented: returnFalse,
3592 a7dd0415 Kostas Papadimitriou
        isPropagationStopped: returnFalse,
3593 a7dd0415 Kostas Papadimitriou
        isImmediatePropagationStopped: returnFalse
3594 a7dd0415 Kostas Papadimitriou
};
3595 a7dd0415 Kostas Papadimitriou
3596 a7dd0415 Kostas Papadimitriou
// Create mouseenter/leave events using mouseover/out and event-time checks
3597 a7dd0415 Kostas Papadimitriou
jQuery.each({
3598 a7dd0415 Kostas Papadimitriou
        mouseenter: "mouseover",
3599 a7dd0415 Kostas Papadimitriou
        mouseleave: "mouseout"
3600 a7dd0415 Kostas Papadimitriou
}, function( orig, fix ) {
3601 a7dd0415 Kostas Papadimitriou
        jQuery.event.special[ orig ] = {
3602 a7dd0415 Kostas Papadimitriou
                delegateType: fix,
3603 a7dd0415 Kostas Papadimitriou
                bindType: fix,
3604 a7dd0415 Kostas Papadimitriou
3605 a7dd0415 Kostas Papadimitriou
                handle: function( event ) {
3606 a7dd0415 Kostas Papadimitriou
                        var target = this,
3607 a7dd0415 Kostas Papadimitriou
                                related = event.relatedTarget,
3608 a7dd0415 Kostas Papadimitriou
                                handleObj = event.handleObj,
3609 a7dd0415 Kostas Papadimitriou
                                selector = handleObj.selector,
3610 a7dd0415 Kostas Papadimitriou
                                ret;
3611 a7dd0415 Kostas Papadimitriou
3612 a7dd0415 Kostas Papadimitriou
                        // For mousenter/leave call the handler if related is outside the target.
3613 a7dd0415 Kostas Papadimitriou
                        // NB: No relatedTarget if the mouse left/entered the browser window
3614 a7dd0415 Kostas Papadimitriou
                        if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
3615 a7dd0415 Kostas Papadimitriou
                                event.type = handleObj.origType;
3616 a7dd0415 Kostas Papadimitriou
                                ret = handleObj.handler.apply( this, arguments );
3617 a7dd0415 Kostas Papadimitriou
                                event.type = fix;
3618 a7dd0415 Kostas Papadimitriou
                        }
3619 a7dd0415 Kostas Papadimitriou
                        return ret;
3620 a7dd0415 Kostas Papadimitriou
                }
3621 a7dd0415 Kostas Papadimitriou
        };
3622 a7dd0415 Kostas Papadimitriou
});
3623 a7dd0415 Kostas Papadimitriou
3624 a7dd0415 Kostas Papadimitriou
// IE submit delegation
3625 a7dd0415 Kostas Papadimitriou
if ( !jQuery.support.submitBubbles ) {
3626 a7dd0415 Kostas Papadimitriou
3627 a7dd0415 Kostas Papadimitriou
        jQuery.event.special.submit = {
3628 a7dd0415 Kostas Papadimitriou
                setup: function() {
3629 a7dd0415 Kostas Papadimitriou
                        // Only need this for delegated form submit events
3630 a7dd0415 Kostas Papadimitriou
                        if ( jQuery.nodeName( this, "form" ) ) {
3631 a7dd0415 Kostas Papadimitriou
                                return false;
3632 a7dd0415 Kostas Papadimitriou
                        }
3633 a7dd0415 Kostas Papadimitriou
3634 a7dd0415 Kostas Papadimitriou
                        // Lazy-add a submit handler when a descendant form may potentially be submitted
3635 a7dd0415 Kostas Papadimitriou
                        jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
3636 a7dd0415 Kostas Papadimitriou
                                // Node name check avoids a VML-related crash in IE (#9807)
3637 a7dd0415 Kostas Papadimitriou
                                var elem = e.target,
3638 a7dd0415 Kostas Papadimitriou
                                        form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
3639 a7dd0415 Kostas Papadimitriou
                                if ( form && !form._submit_attached ) {
3640 a7dd0415 Kostas Papadimitriou
                                        jQuery.event.add( form, "submit._submit", function( event ) {
3641 18059f42 Kostas Papadimitriou
                                                event._submit_bubble = true;
3642 a7dd0415 Kostas Papadimitriou
                                        });
3643 a7dd0415 Kostas Papadimitriou
                                        form._submit_attached = true;
3644 a7dd0415 Kostas Papadimitriou
                                }
3645 a7dd0415 Kostas Papadimitriou
                        });
3646 a7dd0415 Kostas Papadimitriou
                        // return undefined since we don't need an event listener
3647 a7dd0415 Kostas Papadimitriou
                },
3648 18059f42 Kostas Papadimitriou
                
3649 18059f42 Kostas Papadimitriou
                postDispatch: function( event ) {
3650 18059f42 Kostas Papadimitriou
                        // If form was submitted by the user, bubble the event up the tree
3651 18059f42 Kostas Papadimitriou
                        if ( event._submit_bubble ) {
3652 18059f42 Kostas Papadimitriou
                                delete event._submit_bubble;
3653 18059f42 Kostas Papadimitriou
                                if ( this.parentNode && !event.isTrigger ) {
3654 18059f42 Kostas Papadimitriou
                                        jQuery.event.simulate( "submit", this.parentNode, event, true );
3655 18059f42 Kostas Papadimitriou
                                }
3656 18059f42 Kostas Papadimitriou
                        }
3657 18059f42 Kostas Papadimitriou
                },
3658 a7dd0415 Kostas Papadimitriou
3659 a7dd0415 Kostas Papadimitriou
                teardown: function() {
3660 a7dd0415 Kostas Papadimitriou
                        // Only need this for delegated form submit events
3661 a7dd0415 Kostas Papadimitriou
                        if ( jQuery.nodeName( this, "form" ) ) {
3662 a7dd0415 Kostas Papadimitriou
                                return false;
3663 a7dd0415 Kostas Papadimitriou
                        }
3664 a7dd0415 Kostas Papadimitriou
3665 a7dd0415 Kostas Papadimitriou
                        // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
3666 a7dd0415 Kostas Papadimitriou
                        jQuery.event.remove( this, "._submit" );
3667 a7dd0415 Kostas Papadimitriou
                }
3668 a7dd0415 Kostas Papadimitriou
        };
3669 a7dd0415 Kostas Papadimitriou
}
3670 a7dd0415 Kostas Papadimitriou
3671 a7dd0415 Kostas Papadimitriou
// IE change delegation and checkbox/radio fix
3672 a7dd0415 Kostas Papadimitriou
if ( !jQuery.support.changeBubbles ) {
3673 a7dd0415 Kostas Papadimitriou
3674 a7dd0415 Kostas Papadimitriou
        jQuery.event.special.change = {
3675 a7dd0415 Kostas Papadimitriou
3676 a7dd0415 Kostas Papadimitriou
                setup: function() {
3677 a7dd0415 Kostas Papadimitriou
3678 a7dd0415 Kostas Papadimitriou
                        if ( rformElems.test( this.nodeName ) ) {
3679 a7dd0415 Kostas Papadimitriou
                                // IE doesn't fire change on a check/radio until blur; trigger it on click
3680 a7dd0415 Kostas Papadimitriou
                                // after a propertychange. Eat the blur-change in special.change.handle.
3681 a7dd0415 Kostas Papadimitriou
                                // This still fires onchange a second time for check/radio after blur.
3682 a7dd0415 Kostas Papadimitriou
                                if ( this.type === "checkbox" || this.type === "radio" ) {
3683 a7dd0415 Kostas Papadimitriou
                                        jQuery.event.add( this, "propertychange._change", function( event ) {
3684 a7dd0415 Kostas Papadimitriou
                                                if ( event.originalEvent.propertyName === "checked" ) {
3685 a7dd0415 Kostas Papadimitriou
                                                        this._just_changed = true;
3686 a7dd0415 Kostas Papadimitriou
                                                }
3687 a7dd0415 Kostas Papadimitriou
                                        });
3688 a7dd0415 Kostas Papadimitriou
                                        jQuery.event.add( this, "click._change", function( event ) {
3689 a7dd0415 Kostas Papadimitriou
                                                if ( this._just_changed && !event.isTrigger ) {
3690 a7dd0415 Kostas Papadimitriou
                                                        this._just_changed = false;
3691 a7dd0415 Kostas Papadimitriou
                                                        jQuery.event.simulate( "change", this, event, true );
3692 a7dd0415 Kostas Papadimitriou
                                                }
3693 a7dd0415 Kostas Papadimitriou
                                        });
3694 a7dd0415 Kostas Papadimitriou
                                }
3695 a7dd0415 Kostas Papadimitriou
                                return false;
3696 a7dd0415 Kostas Papadimitriou
                        }
3697 a7dd0415 Kostas Papadimitriou
                        // Delegated event; lazy-add a change handler on descendant inputs
3698 a7dd0415 Kostas Papadimitriou
                        jQuery.event.add( this, "beforeactivate._change", function( e ) {
3699 a7dd0415 Kostas Papadimitriou
                                var elem = e.target;
3700 a7dd0415 Kostas Papadimitriou
3701 a7dd0415 Kostas Papadimitriou
                                if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
3702 a7dd0415 Kostas Papadimitriou
                                        jQuery.event.add( elem, "change._change", function( event ) {
3703 a7dd0415 Kostas Papadimitriou
                                                if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
3704 a7dd0415 Kostas Papadimitriou
                                                        jQuery.event.simulate( "change", this.parentNode, event, true );
3705 a7dd0415 Kostas Papadimitriou
                                                }
3706 a7dd0415 Kostas Papadimitriou
                                        });
3707 a7dd0415 Kostas Papadimitriou
                                        elem._change_attached = true;
3708 a7dd0415 Kostas Papadimitriou
                                }
3709 a7dd0415 Kostas Papadimitriou
                        });
3710 a7dd0415 Kostas Papadimitriou
                },
3711 a7dd0415 Kostas Papadimitriou
3712 a7dd0415 Kostas Papadimitriou
                handle: function( event ) {
3713 a7dd0415 Kostas Papadimitriou
                        var elem = event.target;
3714 a7dd0415 Kostas Papadimitriou
3715 a7dd0415 Kostas Papadimitriou
                        // Swallow native change events from checkbox/radio, we already triggered them above
3716 a7dd0415 Kostas Papadimitriou
                        if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
3717 a7dd0415 Kostas Papadimitriou
                                return event.handleObj.handler.apply( this, arguments );
3718 a7dd0415 Kostas Papadimitriou
                        }
3719 a7dd0415 Kostas Papadimitriou
                },
3720 a7dd0415 Kostas Papadimitriou
3721 a7dd0415 Kostas Papadimitriou
                teardown: function() {
3722 a7dd0415 Kostas Papadimitriou
                        jQuery.event.remove( this, "._change" );
3723 a7dd0415 Kostas Papadimitriou
3724 a7dd0415 Kostas Papadimitriou
                        return rformElems.test( this.nodeName );
3725 a7dd0415 Kostas Papadimitriou
                }
3726 a7dd0415 Kostas Papadimitriou
        };
3727 a7dd0415 Kostas Papadimitriou
}
3728 a7dd0415 Kostas Papadimitriou
3729 a7dd0415 Kostas Papadimitriou
// Create "bubbling" focus and blur events
3730 a7dd0415 Kostas Papadimitriou
if ( !jQuery.support.focusinBubbles ) {
3731 a7dd0415 Kostas Papadimitriou
        jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
3732 a7dd0415 Kostas Papadimitriou
3733 a7dd0415 Kostas Papadimitriou
                // Attach a single capturing handler while someone wants focusin/focusout
3734 a7dd0415 Kostas Papadimitriou
                var attaches = 0,
3735 a7dd0415 Kostas Papadimitriou
                        handler = function( event ) {
3736 a7dd0415 Kostas Papadimitriou
                                jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
3737 a7dd0415 Kostas Papadimitriou
                        };
3738 a7dd0415 Kostas Papadimitriou
3739 a7dd0415 Kostas Papadimitriou
                jQuery.event.special[ fix ] = {
3740 a7dd0415 Kostas Papadimitriou
                        setup: function() {
3741 a7dd0415 Kostas Papadimitriou
                                if ( attaches++ === 0 ) {
3742 a7dd0415 Kostas Papadimitriou
                                        document.addEventListener( orig, handler, true );
3743 a7dd0415 Kostas Papadimitriou
                                }
3744 a7dd0415 Kostas Papadimitriou
                        },
3745 a7dd0415 Kostas Papadimitriou
                        teardown: function() {
3746 a7dd0415 Kostas Papadimitriou
                                if ( --attaches === 0 ) {
3747 a7dd0415 Kostas Papadimitriou
                                        document.removeEventListener( orig, handler, true );
3748 a7dd0415 Kostas Papadimitriou
                                }
3749 a7dd0415 Kostas Papadimitriou
                        }
3750 a7dd0415 Kostas Papadimitriou
                };
3751 a7dd0415 Kostas Papadimitriou
        });
3752 a7dd0415 Kostas Papadimitriou
}
3753 a7dd0415 Kostas Papadimitriou
3754 a7dd0415 Kostas Papadimitriou
jQuery.fn.extend({
3755 a7dd0415 Kostas Papadimitriou
3756 a7dd0415 Kostas Papadimitriou
        on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
3757 a7dd0415 Kostas Papadimitriou
                var origFn, type;
3758 a7dd0415 Kostas Papadimitriou
3759 a7dd0415 Kostas Papadimitriou
                // Types can be a map of types/handlers
3760 a7dd0415 Kostas Papadimitriou
                if ( typeof types === "object" ) {
3761 a7dd0415 Kostas Papadimitriou
                        // ( types-Object, selector, data )
3762 18059f42 Kostas Papadimitriou
                        if ( typeof selector !== "string" ) { // && selector != null
3763 a7dd0415 Kostas Papadimitriou
                                // ( types-Object, data )
3764 18059f42 Kostas Papadimitriou
                                data = data || selector;
3765 a7dd0415 Kostas Papadimitriou
                                selector = undefined;
3766 a7dd0415 Kostas Papadimitriou
                        }
3767 a7dd0415 Kostas Papadimitriou
                        for ( type in types ) {
3768 a7dd0415 Kostas Papadimitriou
                                this.on( type, selector, data, types[ type ], one );
3769 a7dd0415 Kostas Papadimitriou
                        }
3770 a7dd0415 Kostas Papadimitriou
                        return this;
3771 a7dd0415 Kostas Papadimitriou
                }
3772 a7dd0415 Kostas Papadimitriou
3773 a7dd0415 Kostas Papadimitriou
                if ( data == null && fn == null ) {
3774 a7dd0415 Kostas Papadimitriou
                        // ( types, fn )
3775 a7dd0415 Kostas Papadimitriou
                        fn = selector;
3776 a7dd0415 Kostas Papadimitriou
                        data = selector = undefined;
3777 a7dd0415 Kostas Papadimitriou
                } else if ( fn == null ) {
3778 a7dd0415 Kostas Papadimitriou
                        if ( typeof selector === "string" ) {
3779 a7dd0415 Kostas Papadimitriou
                                // ( types, selector, fn )
3780 a7dd0415 Kostas Papadimitriou
                                fn = data;
3781 a7dd0415 Kostas Papadimitriou
                                data = undefined;
3782 a7dd0415 Kostas Papadimitriou
                        } else {
3783 a7dd0415 Kostas Papadimitriou
                                // ( types, data, fn )
3784 a7dd0415 Kostas Papadimitriou
                                fn = data;
3785 a7dd0415 Kostas Papadimitriou
                                data = selector;
3786 a7dd0415 Kostas Papadimitriou
                                selector = undefined;
3787 a7dd0415 Kostas Papadimitriou
                        }
3788 a7dd0415 Kostas Papadimitriou
                }
3789 a7dd0415 Kostas Papadimitriou
                if ( fn === false ) {
3790 a7dd0415 Kostas Papadimitriou
                        fn = returnFalse;
3791 a7dd0415 Kostas Papadimitriou
                } else if ( !fn ) {
3792 a7dd0415 Kostas Papadimitriou
                        return this;
3793 a7dd0415 Kostas Papadimitriou
                }
3794 a7dd0415 Kostas Papadimitriou
3795 a7dd0415 Kostas Papadimitriou
                if ( one === 1 ) {
3796 a7dd0415 Kostas Papadimitriou
                        origFn = fn;
3797 a7dd0415 Kostas Papadimitriou
                        fn = function( event ) {
3798 a7dd0415 Kostas Papadimitriou
                                // Can use an empty set, since event contains the info
3799 a7dd0415 Kostas Papadimitriou
                                jQuery().off( event );
3800 a7dd0415 Kostas Papadimitriou
                                return origFn.apply( this, arguments );
3801 a7dd0415 Kostas Papadimitriou
                        };
3802 a7dd0415 Kostas Papadimitriou
                        // Use same guid so caller can remove using origFn
3803 a7dd0415 Kostas Papadimitriou
                        fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
3804 a7dd0415 Kostas Papadimitriou
                }
3805 a7dd0415 Kostas Papadimitriou
                return this.each( function() {
3806 a7dd0415 Kostas Papadimitriou
                        jQuery.event.add( this, types, fn, data, selector );
3807 a7dd0415 Kostas Papadimitriou
                });
3808 a7dd0415 Kostas Papadimitriou
        },
3809 a7dd0415 Kostas Papadimitriou
        one: function( types, selector, data, fn ) {
3810 18059f42 Kostas Papadimitriou
                return this.on( types, selector, data, fn, 1 );
3811 a7dd0415 Kostas Papadimitriou
        },
3812 a7dd0415 Kostas Papadimitriou
        off: function( types, selector, fn ) {
3813 a7dd0415 Kostas Papadimitriou
                if ( types && types.preventDefault && types.handleObj ) {
3814 a7dd0415 Kostas Papadimitriou
                        // ( event )  dispatched jQuery.Event
3815 a7dd0415 Kostas Papadimitriou
                        var handleObj = types.handleObj;
3816 a7dd0415 Kostas Papadimitriou
                        jQuery( types.delegateTarget ).off(
3817 18059f42 Kostas Papadimitriou
                                handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
3818 a7dd0415 Kostas Papadimitriou
                                handleObj.selector,
3819 a7dd0415 Kostas Papadimitriou
                                handleObj.handler
3820 a7dd0415 Kostas Papadimitriou
                        );
3821 a7dd0415 Kostas Papadimitriou
                        return this;
3822 a7dd0415 Kostas Papadimitriou
                }
3823 a7dd0415 Kostas Papadimitriou
                if ( typeof types === "object" ) {
3824 a7dd0415 Kostas Papadimitriou
                        // ( types-object [, selector] )
3825 a7dd0415 Kostas Papadimitriou
                        for ( var type in types ) {
3826 a7dd0415 Kostas Papadimitriou
                                this.off( type, selector, types[ type ] );
3827 a7dd0415 Kostas Papadimitriou
                        }
3828 a7dd0415 Kostas Papadimitriou
                        return this;
3829 a7dd0415 Kostas Papadimitriou
                }
3830 a7dd0415 Kostas Papadimitriou
                if ( selector === false || typeof selector === "function" ) {
3831 a7dd0415 Kostas Papadimitriou
                        // ( types [, fn] )
3832 a7dd0415 Kostas Papadimitriou
                        fn = selector;
3833 a7dd0415 Kostas Papadimitriou
                        selector = undefined;
3834 a7dd0415 Kostas Papadimitriou
                }
3835 a7dd0415 Kostas Papadimitriou
                if ( fn === false ) {
3836 a7dd0415 Kostas Papadimitriou
                        fn = returnFalse;
3837 a7dd0415 Kostas Papadimitriou
                }
3838 a7dd0415 Kostas Papadimitriou
                return this.each(function() {
3839 a7dd0415 Kostas Papadimitriou
                        jQuery.event.remove( this, types, fn, selector );
3840 a7dd0415 Kostas Papadimitriou
                });
3841 a7dd0415 Kostas Papadimitriou
        },
3842 a7dd0415 Kostas Papadimitriou
3843 a7dd0415 Kostas Papadimitriou
        bind: function( types, data, fn ) {
3844 a7dd0415 Kostas Papadimitriou
                return this.on( types, null, data, fn );
3845 a7dd0415 Kostas Papadimitriou
        },
3846 a7dd0415 Kostas Papadimitriou
        unbind: function( types, fn ) {
3847 a7dd0415 Kostas Papadimitriou
                return this.off( types, null, fn );
3848 a7dd0415 Kostas Papadimitriou
        },
3849 a7dd0415 Kostas Papadimitriou
3850 a7dd0415 Kostas Papadimitriou
        live: function( types, data, fn ) {
3851 a7dd0415 Kostas Papadimitriou
                jQuery( this.context ).on( types, this.selector, data, fn );
3852 a7dd0415 Kostas Papadimitriou
                return this;
3853 a7dd0415 Kostas Papadimitriou
        },
3854 a7dd0415 Kostas Papadimitriou
        die: function( types, fn ) {
3855 a7dd0415 Kostas Papadimitriou
                jQuery( this.context ).off( types, this.selector || "**", fn );
3856 a7dd0415 Kostas Papadimitriou
                return this;
3857 a7dd0415 Kostas Papadimitriou
        },
3858 a7dd0415 Kostas Papadimitriou
3859 a7dd0415 Kostas Papadimitriou
        delegate: function( selector, types, data, fn ) {
3860 a7dd0415 Kostas Papadimitriou
                return this.on( types, selector, data, fn );
3861 a7dd0415 Kostas Papadimitriou
        },
3862 a7dd0415 Kostas Papadimitriou
        undelegate: function( selector, types, fn ) {
3863 a7dd0415 Kostas Papadimitriou
                // ( namespace ) or ( selector, types [, fn] )
3864 a7dd0415 Kostas Papadimitriou
                return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
3865 a7dd0415 Kostas Papadimitriou
        },
3866 a7dd0415 Kostas Papadimitriou
3867 a7dd0415 Kostas Papadimitriou
        trigger: function( type, data ) {
3868 a7dd0415 Kostas Papadimitriou
                return this.each(function() {
3869 a7dd0415 Kostas Papadimitriou
                        jQuery.event.trigger( type, data, this );
3870 a7dd0415 Kostas Papadimitriou
                });
3871 a7dd0415 Kostas Papadimitriou
        },
3872 a7dd0415 Kostas Papadimitriou
        triggerHandler: function( type, data ) {
3873 a7dd0415 Kostas Papadimitriou
                if ( this[0] ) {
3874 a7dd0415 Kostas Papadimitriou
                        return jQuery.event.trigger( type, data, this[0], true );
3875 a7dd0415 Kostas Papadimitriou
                }
3876 a7dd0415 Kostas Papadimitriou
        },
3877 a7dd0415 Kostas Papadimitriou
3878 a7dd0415 Kostas Papadimitriou
        toggle: function( fn ) {
3879 a7dd0415 Kostas Papadimitriou
                // Save reference to arguments for access in closure
3880 a7dd0415 Kostas Papadimitriou
                var args = arguments,
3881 a7dd0415 Kostas Papadimitriou
                        guid = fn.guid || jQuery.guid++,
3882 a7dd0415 Kostas Papadimitriou
                        i = 0,
3883 a7dd0415 Kostas Papadimitriou
                        toggler = function( event ) {
3884 a7dd0415 Kostas Papadimitriou
                                // Figure out which function to execute
3885 a7dd0415 Kostas Papadimitriou
                                var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
3886 a7dd0415 Kostas Papadimitriou
                                jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
3887 a7dd0415 Kostas Papadimitriou
3888 a7dd0415 Kostas Papadimitriou
                                // Make sure that clicks stop
3889 a7dd0415 Kostas Papadimitriou
                                event.preventDefault();
3890 a7dd0415 Kostas Papadimitriou
3891 a7dd0415 Kostas Papadimitriou
                                // and execute the function
3892 a7dd0415 Kostas Papadimitriou
                                return args[ lastToggle ].apply( this, arguments ) || false;
3893 a7dd0415 Kostas Papadimitriou
                        };
3894 a7dd0415 Kostas Papadimitriou
3895 a7dd0415 Kostas Papadimitriou
                // link all the functions, so any of them can unbind this click handler
3896 a7dd0415 Kostas Papadimitriou
                toggler.guid = guid;
3897 a7dd0415 Kostas Papadimitriou
                while ( i < args.length ) {
3898 a7dd0415 Kostas Papadimitriou
                        args[ i++ ].guid = guid;
3899 a7dd0415 Kostas Papadimitriou
                }
3900 a7dd0415 Kostas Papadimitriou
3901 a7dd0415 Kostas Papadimitriou
                return this.click( toggler );
3902 a7dd0415 Kostas Papadimitriou
        },
3903 a7dd0415 Kostas Papadimitriou
3904 a7dd0415 Kostas Papadimitriou
        hover: function( fnOver, fnOut ) {
3905 a7dd0415 Kostas Papadimitriou
                return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
3906 a7dd0415 Kostas Papadimitriou
        }
3907 a7dd0415 Kostas Papadimitriou
});
3908 a7dd0415 Kostas Papadimitriou
3909 a7dd0415 Kostas Papadimitriou
jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
3910 a7dd0415 Kostas Papadimitriou
        "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
3911 a7dd0415 Kostas Papadimitriou
        "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
3912 a7dd0415 Kostas Papadimitriou
3913 a7dd0415 Kostas Papadimitriou
        // Handle event binding
3914 a7dd0415 Kostas Papadimitriou
        jQuery.fn[ name ] = function( data, fn ) {
3915 a7dd0415 Kostas Papadimitriou
                if ( fn == null ) {
3916 a7dd0415 Kostas Papadimitriou
                        fn = data;
3917 a7dd0415 Kostas Papadimitriou
                        data = null;
3918 a7dd0415 Kostas Papadimitriou
                }
3919 a7dd0415 Kostas Papadimitriou
3920 a7dd0415 Kostas Papadimitriou
                return arguments.length > 0 ?
3921 a7dd0415 Kostas Papadimitriou
                        this.on( name, null, data, fn ) :
3922 a7dd0415 Kostas Papadimitriou
                        this.trigger( name );
3923 a7dd0415 Kostas Papadimitriou
        };
3924 a7dd0415 Kostas Papadimitriou
3925 a7dd0415 Kostas Papadimitriou
        if ( jQuery.attrFn ) {
3926 a7dd0415 Kostas Papadimitriou
                jQuery.attrFn[ name ] = true;
3927 a7dd0415 Kostas Papadimitriou
        }
3928 a7dd0415 Kostas Papadimitriou
3929 a7dd0415 Kostas Papadimitriou
        if ( rkeyEvent.test( name ) ) {
3930 a7dd0415 Kostas Papadimitriou
                jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
3931 a7dd0415 Kostas Papadimitriou
        }
3932 a7dd0415 Kostas Papadimitriou
3933 a7dd0415 Kostas Papadimitriou
        if ( rmouseEvent.test( name ) ) {
3934 a7dd0415 Kostas Papadimitriou
                jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
3935 a7dd0415 Kostas Papadimitriou
        }
3936 a7dd0415 Kostas Papadimitriou
});
3937 a7dd0415 Kostas Papadimitriou
3938 a7dd0415 Kostas Papadimitriou
3939 a7dd0415 Kostas Papadimitriou
3940 a7dd0415 Kostas Papadimitriou
/*!
3941 a7dd0415 Kostas Papadimitriou
 * Sizzle CSS Selector Engine
3942 a7dd0415 Kostas Papadimitriou
 *  Copyright 2011, The Dojo Foundation
3943 a7dd0415 Kostas Papadimitriou
 *  Released under the MIT, BSD, and GPL Licenses.
3944 a7dd0415 Kostas Papadimitriou
 *  More information: http://sizzlejs.com/
3945 a7dd0415 Kostas Papadimitriou
 */
3946 a7dd0415 Kostas Papadimitriou
(function(){
3947 a7dd0415 Kostas Papadimitriou
3948 a7dd0415 Kostas Papadimitriou
var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
3949 a7dd0415 Kostas Papadimitriou
        expando = "sizcache" + (Math.random() + '').replace('.', ''),
3950 a7dd0415 Kostas Papadimitriou
        done = 0,
3951 a7dd0415 Kostas Papadimitriou
        toString = Object.prototype.toString,
3952 a7dd0415 Kostas Papadimitriou
        hasDuplicate = false,
3953 a7dd0415 Kostas Papadimitriou
        baseHasDuplicate = true,
3954 a7dd0415 Kostas Papadimitriou
        rBackslash = /\\/g,
3955 a7dd0415 Kostas Papadimitriou
        rReturn = /\r\n/g,
3956 a7dd0415 Kostas Papadimitriou
        rNonWord = /\W/;
3957 a7dd0415 Kostas Papadimitriou
3958 a7dd0415 Kostas Papadimitriou
// Here we check if the JavaScript engine is using some sort of
3959 a7dd0415 Kostas Papadimitriou
// optimization where it does not always call our comparision
3960 a7dd0415 Kostas Papadimitriou
// function. If that is the case, discard the hasDuplicate value.
3961 a7dd0415 Kostas Papadimitriou
//   Thus far that includes Google Chrome.
3962 a7dd0415 Kostas Papadimitriou
[0, 0].sort(function() {
3963 a7dd0415 Kostas Papadimitriou
        baseHasDuplicate = false;
3964 a7dd0415 Kostas Papadimitriou
        return 0;
3965 a7dd0415 Kostas Papadimitriou
});
3966 a7dd0415 Kostas Papadimitriou
3967 a7dd0415 Kostas Papadimitriou
var Sizzle = function( selector, context, results, seed ) {
3968 a7dd0415 Kostas Papadimitriou
        results = results || [];
3969 a7dd0415 Kostas Papadimitriou
        context = context || document;
3970 a7dd0415 Kostas Papadimitriou
3971 a7dd0415 Kostas Papadimitriou
        var origContext = context;
3972 a7dd0415 Kostas Papadimitriou
3973 a7dd0415 Kostas Papadimitriou
        if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
3974 a7dd0415 Kostas Papadimitriou
                return [];
3975 a7dd0415 Kostas Papadimitriou
        }
3976 18059f42 Kostas Papadimitriou
3977 a7dd0415 Kostas Papadimitriou
        if ( !selector || typeof selector !== "string" ) {
3978 a7dd0415 Kostas Papadimitriou
                return results;
3979 a7dd0415 Kostas Papadimitriou
        }
3980 a7dd0415 Kostas Papadimitriou
3981 a7dd0415 Kostas Papadimitriou
        var m, set, checkSet, extra, ret, cur, pop, i,
3982 a7dd0415 Kostas Papadimitriou
                prune = true,
3983 a7dd0415 Kostas Papadimitriou
                contextXML = Sizzle.isXML( context ),
3984 a7dd0415 Kostas Papadimitriou
                parts = [],
3985 a7dd0415 Kostas Papadimitriou
                soFar = selector;
3986 18059f42 Kostas Papadimitriou
3987 a7dd0415 Kostas Papadimitriou
        // Reset the position of the chunker regexp (start from head)
3988 a7dd0415 Kostas Papadimitriou
        do {
3989 a7dd0415 Kostas Papadimitriou
                chunker.exec( "" );
3990 a7dd0415 Kostas Papadimitriou
                m = chunker.exec( soFar );
3991 a7dd0415 Kostas Papadimitriou
3992 a7dd0415 Kostas Papadimitriou
                if ( m ) {
3993 a7dd0415 Kostas Papadimitriou
                        soFar = m[3];
3994 18059f42 Kostas Papadimitriou
3995 a7dd0415 Kostas Papadimitriou
                        parts.push( m[1] );
3996 18059f42 Kostas Papadimitriou
3997 a7dd0415 Kostas Papadimitriou
                        if ( m[2] ) {
3998 a7dd0415 Kostas Papadimitriou
                                extra = m[3];
3999 a7dd0415 Kostas Papadimitriou
                                break;
4000 a7dd0415 Kostas Papadimitriou
                        }
4001 a7dd0415 Kostas Papadimitriou
                }
4002 a7dd0415 Kostas Papadimitriou
        } while ( m );
4003 a7dd0415 Kostas Papadimitriou
4004 a7dd0415 Kostas Papadimitriou
        if ( parts.length > 1 && origPOS.exec( selector ) ) {
4005 a7dd0415 Kostas Papadimitriou
4006 a7dd0415 Kostas Papadimitriou
                if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
4007 a7dd0415 Kostas Papadimitriou
                        set = posProcess( parts[0] + parts[1], context, seed );
4008 a7dd0415 Kostas Papadimitriou
4009 a7dd0415 Kostas Papadimitriou
                } else {
4010 a7dd0415 Kostas Papadimitriou
                        set = Expr.relative[ parts[0] ] ?
4011 a7dd0415 Kostas Papadimitriou
                                [ context ] :
4012 a7dd0415 Kostas Papadimitriou
                                Sizzle( parts.shift(), context );
4013 a7dd0415 Kostas Papadimitriou
4014 a7dd0415 Kostas Papadimitriou
                        while ( parts.length ) {
4015 a7dd0415 Kostas Papadimitriou
                                selector = parts.shift();
4016 a7dd0415 Kostas Papadimitriou
4017 a7dd0415 Kostas Papadimitriou
                                if ( Expr.relative[ selector ] ) {
4018 a7dd0415 Kostas Papadimitriou
                                        selector += parts.shift();
4019 a7dd0415 Kostas Papadimitriou
                                }
4020 18059f42 Kostas Papadimitriou
4021 a7dd0415 Kostas Papadimitriou
                                set = posProcess( selector, set, seed );
4022 a7dd0415 Kostas Papadimitriou
                        }
4023 a7dd0415 Kostas Papadimitriou
                }
4024 a7dd0415 Kostas Papadimitriou
4025 a7dd0415 Kostas Papadimitriou
        } else {
4026 a7dd0415 Kostas Papadimitriou
                // Take a shortcut and set the context if the root selector is an ID
4027 a7dd0415 Kostas Papadimitriou
                // (but not if it'll be faster if the inner selector is an ID)
4028 a7dd0415 Kostas Papadimitriou
                if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
4029 a7dd0415 Kostas Papadimitriou
                                Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
4030 a7dd0415 Kostas Papadimitriou
4031 a7dd0415 Kostas Papadimitriou
                        ret = Sizzle.find( parts.shift(), context, contextXML );
4032 a7dd0415 Kostas Papadimitriou
                        context = ret.expr ?
4033 a7dd0415 Kostas Papadimitriou
                                Sizzle.filter( ret.expr, ret.set )[0] :
4034 a7dd0415 Kostas Papadimitriou
                                ret.set[0];
4035 a7dd0415 Kostas Papadimitriou
                }
4036 a7dd0415 Kostas Papadimitriou
4037 a7dd0415 Kostas Papadimitriou
                if ( context ) {
4038 a7dd0415 Kostas Papadimitriou
                        ret = seed ?
4039 a7dd0415 Kostas Papadimitriou
                                { expr: parts.pop(), set: makeArray(seed) } :
4040 a7dd0415 Kostas Papadimitriou
                                Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
4041 a7dd0415 Kostas Papadimitriou
4042 a7dd0415 Kostas Papadimitriou
                        set = ret.expr ?
4043 a7dd0415 Kostas Papadimitriou
                                Sizzle.filter( ret.expr, ret.set ) :
4044 a7dd0415 Kostas Papadimitriou
                                ret.set;
4045 a7dd0415 Kostas Papadimitriou
4046 a7dd0415 Kostas Papadimitriou
                        if ( parts.length > 0 ) {
4047 a7dd0415 Kostas Papadimitriou
                                checkSet = makeArray( set );
4048 a7dd0415 Kostas Papadimitriou
4049 a7dd0415 Kostas Papadimitriou
                        } else {
4050 a7dd0415 Kostas Papadimitriou
                                prune = false;
4051 a7dd0415 Kostas Papadimitriou
                        }
4052 a7dd0415 Kostas Papadimitriou
4053 a7dd0415 Kostas Papadimitriou
                        while ( parts.length ) {
4054 a7dd0415 Kostas Papadimitriou
                                cur = parts.pop();
4055 a7dd0415 Kostas Papadimitriou
                                pop = cur;
4056 a7dd0415 Kostas Papadimitriou
4057 a7dd0415 Kostas Papadimitriou
                                if ( !Expr.relative[ cur ] ) {
4058 a7dd0415 Kostas Papadimitriou
                                        cur = "";
4059 a7dd0415 Kostas Papadimitriou
                                } else {
4060 a7dd0415 Kostas Papadimitriou
                                        pop = parts.pop();
4061 a7dd0415 Kostas Papadimitriou
                                }
4062 a7dd0415 Kostas Papadimitriou
4063 a7dd0415 Kostas Papadimitriou
                                if ( pop == null ) {
4064 a7dd0415 Kostas Papadimitriou
                                        pop = context;
4065 a7dd0415 Kostas Papadimitriou
                                }
4066 a7dd0415 Kostas Papadimitriou
4067 a7dd0415 Kostas Papadimitriou
                                Expr.relative[ cur ]( checkSet, pop, contextXML );
4068 a7dd0415 Kostas Papadimitriou
                        }
4069 a7dd0415 Kostas Papadimitriou
4070 a7dd0415 Kostas Papadimitriou
                } else {
4071 a7dd0415 Kostas Papadimitriou
                        checkSet = parts = [];
4072 a7dd0415 Kostas Papadimitriou
                }
4073 a7dd0415 Kostas Papadimitriou
        }
4074 a7dd0415 Kostas Papadimitriou
4075 a7dd0415 Kostas Papadimitriou
        if ( !checkSet ) {
4076 a7dd0415 Kostas Papadimitriou
                checkSet = set;
4077 a7dd0415 Kostas Papadimitriou
        }
4078 a7dd0415 Kostas Papadimitriou
4079 a7dd0415 Kostas Papadimitriou
        if ( !checkSet ) {
4080 a7dd0415 Kostas Papadimitriou
                Sizzle.error( cur || selector );
4081 a7dd0415 Kostas Papadimitriou
        }
4082 a7dd0415 Kostas Papadimitriou
4083 a7dd0415 Kostas Papadimitriou
        if ( toString.call(checkSet) === "[object Array]" ) {
4084 a7dd0415 Kostas Papadimitriou
                if ( !prune ) {
4085 a7dd0415 Kostas Papadimitriou
                        results.push.apply( results, checkSet );
4086 a7dd0415 Kostas Papadimitriou
4087 a7dd0415 Kostas Papadimitriou
                } else if ( context && context.nodeType === 1 ) {
4088 a7dd0415 Kostas Papadimitriou
                        for ( i = 0; checkSet[i] != null; i++ ) {
4089 a7dd0415 Kostas Papadimitriou
                                if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
4090 a7dd0415 Kostas Papadimitriou
                                        results.push( set[i] );
4091 a7dd0415 Kostas Papadimitriou
                                }
4092 a7dd0415 Kostas Papadimitriou
                        }
4093 a7dd0415 Kostas Papadimitriou
4094 a7dd0415 Kostas Papadimitriou
                } else {
4095 a7dd0415 Kostas Papadimitriou
                        for ( i = 0; checkSet[i] != null; i++ ) {
4096 a7dd0415 Kostas Papadimitriou
                                if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
4097 a7dd0415 Kostas Papadimitriou
                                        results.push( set[i] );
4098 a7dd0415 Kostas Papadimitriou
                                }
4099 a7dd0415 Kostas Papadimitriou
                        }
4100 a7dd0415 Kostas Papadimitriou
                }
4101 a7dd0415 Kostas Papadimitriou
4102 a7dd0415 Kostas Papadimitriou
        } else {
4103 a7dd0415 Kostas Papadimitriou
                makeArray( checkSet, results );
4104 a7dd0415 Kostas Papadimitriou
        }
4105 a7dd0415 Kostas Papadimitriou
4106 a7dd0415 Kostas Papadimitriou
        if ( extra ) {
4107 a7dd0415 Kostas Papadimitriou
                Sizzle( extra, origContext, results, seed );
4108 a7dd0415 Kostas Papadimitriou
                Sizzle.uniqueSort( results );
4109 a7dd0415 Kostas Papadimitriou
        }
4110 a7dd0415 Kostas Papadimitriou
4111 a7dd0415 Kostas Papadimitriou
        return results;
4112 a7dd0415 Kostas Papadimitriou
};
4113 a7dd0415 Kostas Papadimitriou
4114 a7dd0415 Kostas Papadimitriou
Sizzle.uniqueSort = function( results ) {
4115 a7dd0415 Kostas Papadimitriou
        if ( sortOrder ) {
4116 a7dd0415 Kostas Papadimitriou
                hasDuplicate = baseHasDuplicate;
4117 a7dd0415 Kostas Papadimitriou
                results.sort( sortOrder );
4118 a7dd0415 Kostas Papadimitriou
4119 a7dd0415 Kostas Papadimitriou
                if ( hasDuplicate ) {
4120 a7dd0415 Kostas Papadimitriou
                        for ( var i = 1; i < results.length; i++ ) {
4121 a7dd0415 Kostas Papadimitriou
                                if ( results[i] === results[ i - 1 ] ) {
4122 a7dd0415 Kostas Papadimitriou
                                        results.splice( i--, 1 );
4123 a7dd0415 Kostas Papadimitriou
                                }
4124 a7dd0415 Kostas Papadimitriou
                        }
4125 a7dd0415 Kostas Papadimitriou
                }
4126 a7dd0415 Kostas Papadimitriou
        }
4127 a7dd0415 Kostas Papadimitriou
4128 a7dd0415 Kostas Papadimitriou
        return results;
4129 a7dd0415 Kostas Papadimitriou
};
4130 a7dd0415 Kostas Papadimitriou
4131 a7dd0415 Kostas Papadimitriou
Sizzle.matches = function( expr, set ) {
4132 a7dd0415 Kostas Papadimitriou
        return Sizzle( expr, null, null, set );
4133 a7dd0415 Kostas Papadimitriou
};
4134 a7dd0415 Kostas Papadimitriou
4135 a7dd0415 Kostas Papadimitriou
Sizzle.matchesSelector = function( node, expr ) {
4136 a7dd0415 Kostas Papadimitriou
        return Sizzle( expr, null, null, [node] ).length > 0;
4137 a7dd0415 Kostas Papadimitriou
};
4138 a7dd0415 Kostas Papadimitriou
4139 a7dd0415 Kostas Papadimitriou
Sizzle.find = function( expr, context, isXML ) {
4140 a7dd0415 Kostas Papadimitriou
        var set, i, len, match, type, left;
4141 a7dd0415 Kostas Papadimitriou
4142 a7dd0415 Kostas Papadimitriou
        if ( !expr ) {
4143 a7dd0415 Kostas Papadimitriou
                return [];
4144 a7dd0415 Kostas Papadimitriou
        }
4145 a7dd0415 Kostas Papadimitriou
4146 a7dd0415 Kostas Papadimitriou
        for ( i = 0, len = Expr.order.length; i < len; i++ ) {
4147 a7dd0415 Kostas Papadimitriou
                type = Expr.order[i];
4148 18059f42 Kostas Papadimitriou
4149 a7dd0415 Kostas Papadimitriou
                if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
4150 a7dd0415 Kostas Papadimitriou
                        left = match[1];
4151 a7dd0415 Kostas Papadimitriou
                        match.splice( 1, 1 );
4152 a7dd0415 Kostas Papadimitriou
4153 a7dd0415 Kostas Papadimitriou
                        if ( left.substr( left.length - 1 ) !== "\\" ) {
4154 a7dd0415 Kostas Papadimitriou
                                match[1] = (match[1] || "").replace( rBackslash, "" );
4155 a7dd0415 Kostas Papadimitriou
                                set = Expr.find[ type ]( match, context, isXML );
4156 a7dd0415 Kostas Papadimitriou
4157 a7dd0415 Kostas Papadimitriou
                                if ( set != null ) {
4158 a7dd0415 Kostas Papadimitriou
                                        expr = expr.replace( Expr.match[ type ], "" );
4159 a7dd0415 Kostas Papadimitriou
                                        break;
4160 a7dd0415 Kostas Papadimitriou
                                }
4161 a7dd0415 Kostas Papadimitriou
                        }
4162 a7dd0415 Kostas Papadimitriou
                }
4163 a7dd0415 Kostas Papadimitriou
        }
4164 a7dd0415 Kostas Papadimitriou
4165 a7dd0415 Kostas Papadimitriou
        if ( !set ) {
4166 a7dd0415 Kostas Papadimitriou
                set = typeof context.getElementsByTagName !== "undefined" ?
4167 a7dd0415 Kostas Papadimitriou
                        context.getElementsByTagName( "*" ) :
4168 a7dd0415 Kostas Papadimitriou
                        [];
4169 a7dd0415 Kostas Papadimitriou
        }
4170 a7dd0415 Kostas Papadimitriou
4171 a7dd0415 Kostas Papadimitriou
        return { set: set, expr: expr };
4172 a7dd0415 Kostas Papadimitriou
};
4173 a7dd0415 Kostas Papadimitriou
4174 a7dd0415 Kostas Papadimitriou
Sizzle.filter = function( expr, set, inplace, not ) {
4175 a7dd0415 Kostas Papadimitriou
        var match, anyFound,
4176 a7dd0415 Kostas Papadimitriou
                type, found, item, filter, left,
4177 a7dd0415 Kostas Papadimitriou
                i, pass,
4178 a7dd0415 Kostas Papadimitriou
                old = expr,
4179 a7dd0415 Kostas Papadimitriou
                result = [],
4180 a7dd0415 Kostas Papadimitriou
                curLoop = set,
4181 a7dd0415 Kostas Papadimitriou
                isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
4182 a7dd0415 Kostas Papadimitriou
4183 a7dd0415 Kostas Papadimitriou
        while ( expr && set.length ) {
4184 a7dd0415 Kostas Papadimitriou
                for ( type in Expr.filter ) {
4185 a7dd0415 Kostas Papadimitriou
                        if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
4186 a7dd0415 Kostas Papadimitriou
                                filter = Expr.filter[ type ];
4187 a7dd0415 Kostas Papadimitriou
                                left = match[1];
4188 a7dd0415 Kostas Papadimitriou
4189 a7dd0415 Kostas Papadimitriou
                                anyFound = false;
4190 a7dd0415 Kostas Papadimitriou
4191 a7dd0415 Kostas Papadimitriou
                                match.splice(1,1);
4192 a7dd0415 Kostas Papadimitriou
4193 a7dd0415 Kostas Papadimitriou
                                if ( left.substr( left.length - 1 ) === "\\" ) {
4194 a7dd0415 Kostas Papadimitriou
                                        continue;
4195 a7dd0415 Kostas Papadimitriou
                                }
4196 a7dd0415 Kostas Papadimitriou
4197 a7dd0415 Kostas Papadimitriou
                                if ( curLoop === result ) {
4198 a7dd0415 Kostas Papadimitriou
                                        result = [];
4199 a7dd0415 Kostas Papadimitriou
                                }
4200 a7dd0415 Kostas Papadimitriou
4201 a7dd0415 Kostas Papadimitriou
                                if ( Expr.preFilter[ type ] ) {
4202 a7dd0415 Kostas Papadimitriou
                                        match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
4203 a7dd0415 Kostas Papadimitriou
4204 a7dd0415 Kostas Papadimitriou
                                        if ( !match ) {
4205 a7dd0415 Kostas Papadimitriou
                                                anyFound = found = true;
4206 a7dd0415 Kostas Papadimitriou
4207 a7dd0415 Kostas Papadimitriou
                                        } else if ( match === true ) {
4208 a7dd0415 Kostas Papadimitriou
                                                continue;
4209 a7dd0415 Kostas Papadimitriou
                                        }
4210 a7dd0415 Kostas Papadimitriou
                                }
4211 a7dd0415 Kostas Papadimitriou
4212 a7dd0415 Kostas Papadimitriou
                                if ( match ) {
4213 a7dd0415 Kostas Papadimitriou
                                        for ( i = 0; (item = curLoop[i]) != null; i++ ) {
4214 a7dd0415 Kostas Papadimitriou
                                                if ( item ) {
4215 a7dd0415 Kostas Papadimitriou
                                                        found = filter( item, match, i, curLoop );
4216 a7dd0415 Kostas Papadimitriou
                                                        pass = not ^ found;
4217 a7dd0415 Kostas Papadimitriou
4218 a7dd0415 Kostas Papadimitriou
                                                        if ( inplace && found != null ) {
4219 a7dd0415 Kostas Papadimitriou
                                                                if ( pass ) {
4220 a7dd0415 Kostas Papadimitriou
                                                                        anyFound = true;
4221 a7dd0415 Kostas Papadimitriou
4222 a7dd0415 Kostas Papadimitriou
                                                                } else {
4223 a7dd0415 Kostas Papadimitriou
                                                                        curLoop[i] = false;
4224 a7dd0415 Kostas Papadimitriou
                                                                }
4225 a7dd0415 Kostas Papadimitriou
4226 a7dd0415 Kostas Papadimitriou
                                                        } else if ( pass ) {
4227 a7dd0415 Kostas Papadimitriou
                                                                result.push( item );
4228 a7dd0415 Kostas Papadimitriou
                                                                anyFound = true;
4229 a7dd0415 Kostas Papadimitriou
                                                        }
4230 a7dd0415 Kostas Papadimitriou
                                                }
4231 a7dd0415 Kostas Papadimitriou
                                        }
4232 a7dd0415 Kostas Papadimitriou
                                }
4233 a7dd0415 Kostas Papadimitriou
4234 a7dd0415 Kostas Papadimitriou
                                if ( found !== undefined ) {
4235 a7dd0415 Kostas Papadimitriou
                                        if ( !inplace ) {
4236 a7dd0415 Kostas Papadimitriou
                                                curLoop = result;
4237 a7dd0415 Kostas Papadimitriou
                                        }
4238 a7dd0415 Kostas Papadimitriou
4239 a7dd0415 Kostas Papadimitriou
                                        expr = expr.replace( Expr.match[ type ], "" );
4240 a7dd0415 Kostas Papadimitriou
4241 a7dd0415 Kostas Papadimitriou
                                        if ( !anyFound ) {
4242 a7dd0415 Kostas Papadimitriou
                                                return [];
4243 a7dd0415 Kostas Papadimitriou
                                        }
4244 a7dd0415 Kostas Papadimitriou
4245 a7dd0415 Kostas Papadimitriou
                                        break;
4246 a7dd0415 Kostas Papadimitriou
                                }
4247 a7dd0415 Kostas Papadimitriou
                        }
4248 a7dd0415 Kostas Papadimitriou
                }
4249 a7dd0415 Kostas Papadimitriou
4250 a7dd0415 Kostas Papadimitriou
                // Improper expression
4251 a7dd0415 Kostas Papadimitriou
                if ( expr === old ) {
4252 a7dd0415 Kostas Papadimitriou
                        if ( anyFound == null ) {
4253 a7dd0415 Kostas Papadimitriou
                                Sizzle.error( expr );
4254 a7dd0415 Kostas Papadimitriou
4255 a7dd0415 Kostas Papadimitriou
                        } else {
4256 a7dd0415 Kostas Papadimitriou
                                break;
4257 a7dd0415 Kostas Papadimitriou
                        }
4258 a7dd0415 Kostas Papadimitriou
                }
4259 a7dd0415 Kostas Papadimitriou
4260 a7dd0415 Kostas Papadimitriou
                old = expr;
4261 a7dd0415 Kostas Papadimitriou
        }
4262 a7dd0415 Kostas Papadimitriou
4263 a7dd0415 Kostas Papadimitriou
        return curLoop;
4264 a7dd0415 Kostas Papadimitriou
};
4265 a7dd0415 Kostas Papadimitriou
4266 a7dd0415 Kostas Papadimitriou
Sizzle.error = function( msg ) {
4267 a7dd0415 Kostas Papadimitriou
        throw new Error( "Syntax error, unrecognized expression: " + msg );
4268 a7dd0415 Kostas Papadimitriou
};
4269 a7dd0415 Kostas Papadimitriou
4270 a7dd0415 Kostas Papadimitriou
/**
4271 a7dd0415 Kostas Papadimitriou
 * Utility function for retreiving the text value of an array of DOM nodes
4272 a7dd0415 Kostas Papadimitriou
 * @param {Array|Element} elem
4273 a7dd0415 Kostas Papadimitriou
 */
4274 a7dd0415 Kostas Papadimitriou
var getText = Sizzle.getText = function( elem ) {
4275 a7dd0415 Kostas Papadimitriou
    var i, node,
4276 a7dd0415 Kostas Papadimitriou
                nodeType = elem.nodeType,
4277 a7dd0415 Kostas Papadimitriou
                ret = "";
4278 a7dd0415 Kostas Papadimitriou
4279 a7dd0415 Kostas Papadimitriou
        if ( nodeType ) {
4280 18059f42 Kostas Papadimitriou
                if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
4281 a7dd0415 Kostas Papadimitriou
                        // Use textContent || innerText for elements
4282 a7dd0415 Kostas Papadimitriou
                        if ( typeof elem.textContent === 'string' ) {
4283 a7dd0415 Kostas Papadimitriou
                                return elem.textContent;
4284 a7dd0415 Kostas Papadimitriou
                        } else if ( typeof elem.innerText === 'string' ) {
4285 a7dd0415 Kostas Papadimitriou
                                // Replace IE's carriage returns
4286 a7dd0415 Kostas Papadimitriou
                                return elem.innerText.replace( rReturn, '' );
4287 a7dd0415 Kostas Papadimitriou
                        } else {
4288 a7dd0415 Kostas Papadimitriou
                                // Traverse it's children
4289 a7dd0415 Kostas Papadimitriou
                                for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
4290 a7dd0415 Kostas Papadimitriou
                                        ret += getText( elem );
4291 a7dd0415 Kostas Papadimitriou
                                }
4292 a7dd0415 Kostas Papadimitriou
                        }
4293 a7dd0415 Kostas Papadimitriou
                } else if ( nodeType === 3 || nodeType === 4 ) {
4294 a7dd0415 Kostas Papadimitriou
                        return elem.nodeValue;
4295 a7dd0415 Kostas Papadimitriou
                }
4296 a7dd0415 Kostas Papadimitriou
        } else {
4297 a7dd0415 Kostas Papadimitriou
4298 a7dd0415 Kostas Papadimitriou
                // If no nodeType, this is expected to be an array
4299 a7dd0415 Kostas Papadimitriou
                for ( i = 0; (node = elem[i]); i++ ) {
4300 a7dd0415 Kostas Papadimitriou
                        // Do not traverse comment nodes
4301 a7dd0415 Kostas Papadimitriou
                        if ( node.nodeType !== 8 ) {
4302 a7dd0415 Kostas Papadimitriou
                                ret += getText( node );
4303 a7dd0415 Kostas Papadimitriou
                        }
4304 a7dd0415 Kostas Papadimitriou
                }
4305 a7dd0415 Kostas Papadimitriou
        }
4306 a7dd0415 Kostas Papadimitriou
        return ret;
4307 a7dd0415 Kostas Papadimitriou
};
4308 a7dd0415 Kostas Papadimitriou
4309 a7dd0415 Kostas Papadimitriou
var Expr = Sizzle.selectors = {
4310 a7dd0415 Kostas Papadimitriou
        order: [ "ID", "NAME", "TAG" ],
4311 a7dd0415 Kostas Papadimitriou
4312 a7dd0415 Kostas Papadimitriou
        match: {
4313 a7dd0415 Kostas Papadimitriou
                ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
4314 a7dd0415 Kostas Papadimitriou
                CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
4315 a7dd0415 Kostas Papadimitriou
                NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
4316 a7dd0415 Kostas Papadimitriou
                ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
4317 a7dd0415 Kostas Papadimitriou
                TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
4318 a7dd0415 Kostas Papadimitriou
                CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
4319 a7dd0415 Kostas Papadimitriou
                POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
4320 a7dd0415 Kostas Papadimitriou
                PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
4321 a7dd0415 Kostas Papadimitriou
        },
4322 a7dd0415 Kostas Papadimitriou
4323 a7dd0415 Kostas Papadimitriou
        leftMatch: {},
4324 a7dd0415 Kostas Papadimitriou
4325 a7dd0415 Kostas Papadimitriou
        attrMap: {
4326 a7dd0415 Kostas Papadimitriou
                "class": "className",
4327 a7dd0415 Kostas Papadimitriou
                "for": "htmlFor"
4328 a7dd0415 Kostas Papadimitriou
        },
4329 a7dd0415 Kostas Papadimitriou
4330 a7dd0415 Kostas Papadimitriou
        attrHandle: {
4331 a7dd0415 Kostas Papadimitriou
                href: function( elem ) {
4332 a7dd0415 Kostas Papadimitriou
                        return elem.getAttribute( "href" );
4333 a7dd0415 Kostas Papadimitriou
                },
4334 a7dd0415 Kostas Papadimitriou
                type: function( elem ) {
4335 a7dd0415 Kostas Papadimitriou
                        return elem.getAttribute( "type" );
4336 a7dd0415 Kostas Papadimitriou
                }
4337 a7dd0415 Kostas Papadimitriou
        },
4338 a7dd0415 Kostas Papadimitriou
4339 a7dd0415 Kostas Papadimitriou
        relative: {
4340 a7dd0415 Kostas Papadimitriou
                "+": function(checkSet, part){
4341 a7dd0415 Kostas Papadimitriou
                        var isPartStr = typeof part === "string",
4342 a7dd0415 Kostas Papadimitriou
                                isTag = isPartStr && !rNonWord.test( part ),
4343 a7dd0415 Kostas Papadimitriou
                                isPartStrNotTag = isPartStr && !isTag;
4344 a7dd0415 Kostas Papadimitriou
4345 a7dd0415 Kostas Papadimitriou
                        if ( isTag ) {
4346 a7dd0415 Kostas Papadimitriou
                                part = part.toLowerCase();
4347 a7dd0415 Kostas Papadimitriou
                        }
4348 a7dd0415 Kostas Papadimitriou
4349 a7dd0415 Kostas Papadimitriou
                        for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
4350 a7dd0415 Kostas Papadimitriou
                                if ( (elem = checkSet[i]) ) {
4351 a7dd0415 Kostas Papadimitriou
                                        while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
4352 a7dd0415 Kostas Papadimitriou
4353 a7dd0415 Kostas Papadimitriou
                                        checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
4354 a7dd0415 Kostas Papadimitriou
                                                elem || false :
4355 a7dd0415 Kostas Papadimitriou
                                                elem === part;
4356 a7dd0415 Kostas Papadimitriou
                                }
4357 a7dd0415 Kostas Papadimitriou
                        }
4358 a7dd0415 Kostas Papadimitriou
4359 a7dd0415 Kostas Papadimitriou
                        if ( isPartStrNotTag ) {
4360 a7dd0415 Kostas Papadimitriou
                                Sizzle.filter( part, checkSet, true );
4361 a7dd0415 Kostas Papadimitriou
                        }
4362 a7dd0415 Kostas Papadimitriou
                },
4363 a7dd0415 Kostas Papadimitriou
4364 a7dd0415 Kostas Papadimitriou
                ">": function( checkSet, part ) {
4365 a7dd0415 Kostas Papadimitriou
                        var elem,
4366 a7dd0415 Kostas Papadimitriou
                                isPartStr = typeof part === "string",
4367 a7dd0415 Kostas Papadimitriou
                                i = 0,
4368 a7dd0415 Kostas Papadimitriou
                                l = checkSet.length;
4369 a7dd0415 Kostas Papadimitriou
4370 a7dd0415 Kostas Papadimitriou
                        if ( isPartStr && !rNonWord.test( part ) ) {
4371 a7dd0415 Kostas Papadimitriou
                                part = part.toLowerCase();
4372 a7dd0415 Kostas Papadimitriou
4373 a7dd0415 Kostas Papadimitriou
                                for ( ; i < l; i++ ) {
4374 a7dd0415 Kostas Papadimitriou
                                        elem = checkSet[i];
4375 a7dd0415 Kostas Papadimitriou
4376 a7dd0415 Kostas Papadimitriou
                                        if ( elem ) {
4377 a7dd0415 Kostas Papadimitriou
                                                var parent = elem.parentNode;
4378 a7dd0415 Kostas Papadimitriou
                                                checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
4379 a7dd0415 Kostas Papadimitriou
                                        }
4380 a7dd0415 Kostas Papadimitriou
                                }
4381 a7dd0415 Kostas Papadimitriou
4382 a7dd0415 Kostas Papadimitriou
                        } else {
4383 a7dd0415 Kostas Papadimitriou
                                for ( ; i < l; i++ ) {
4384 a7dd0415 Kostas Papadimitriou
                                        elem = checkSet[i];
4385 a7dd0415 Kostas Papadimitriou
4386 a7dd0415 Kostas Papadimitriou
                                        if ( elem ) {
4387 a7dd0415 Kostas Papadimitriou
                                                checkSet[i] = isPartStr ?
4388 a7dd0415 Kostas Papadimitriou
                                                        elem.parentNode :
4389 a7dd0415 Kostas Papadimitriou
                                                        elem.parentNode === part;
4390 a7dd0415 Kostas Papadimitriou
                                        }
4391 a7dd0415 Kostas Papadimitriou
                                }
4392 a7dd0415 Kostas Papadimitriou
4393 a7dd0415 Kostas Papadimitriou
                                if ( isPartStr ) {
4394 a7dd0415 Kostas Papadimitriou
                                        Sizzle.filter( part, checkSet, true );
4395 a7dd0415 Kostas Papadimitriou
                                }
4396 a7dd0415 Kostas Papadimitriou
                        }
4397 a7dd0415 Kostas Papadimitriou
                },
4398 a7dd0415 Kostas Papadimitriou
4399 a7dd0415 Kostas Papadimitriou
                "": function(checkSet, part, isXML){
4400 a7dd0415 Kostas Papadimitriou
                        var nodeCheck,
4401 a7dd0415 Kostas Papadimitriou
                                doneName = done++,
4402 a7dd0415 Kostas Papadimitriou
                                checkFn = dirCheck;
4403 a7dd0415 Kostas Papadimitriou
4404 a7dd0415 Kostas Papadimitriou
                        if ( typeof part === "string" && !rNonWord.test( part ) ) {
4405 a7dd0415 Kostas Papadimitriou
                                part = part.toLowerCase();
4406 a7dd0415 Kostas Papadimitriou
                                nodeCheck = part;
4407 a7dd0415 Kostas Papadimitriou
                                checkFn = dirNodeCheck;
4408 a7dd0415 Kostas Papadimitriou
                        }
4409 a7dd0415 Kostas Papadimitriou
4410 a7dd0415 Kostas Papadimitriou
                        checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
4411 a7dd0415 Kostas Papadimitriou
                },
4412 a7dd0415 Kostas Papadimitriou
4413 a7dd0415 Kostas Papadimitriou
                "~": function( checkSet, part, isXML ) {
4414 a7dd0415 Kostas Papadimitriou
                        var nodeCheck,
4415 a7dd0415 Kostas Papadimitriou
                                doneName = done++,
4416 a7dd0415 Kostas Papadimitriou
                                checkFn = dirCheck;
4417 a7dd0415 Kostas Papadimitriou
4418 a7dd0415 Kostas Papadimitriou
                        if ( typeof part === "string" && !rNonWord.test( part ) ) {
4419 a7dd0415 Kostas Papadimitriou
                                part = part.toLowerCase();
4420 a7dd0415 Kostas Papadimitriou
                                nodeCheck = part;
4421 a7dd0415 Kostas Papadimitriou
                                checkFn = dirNodeCheck;
4422 a7dd0415 Kostas Papadimitriou
                        }
4423 a7dd0415 Kostas Papadimitriou
4424 a7dd0415 Kostas Papadimitriou
                        checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
4425 a7dd0415 Kostas Papadimitriou
                }
4426 a7dd0415 Kostas Papadimitriou
        },
4427 a7dd0415 Kostas Papadimitriou
4428 a7dd0415 Kostas Papadimitriou
        find: {
4429 a7dd0415 Kostas Papadimitriou
                ID: function( match, context, isXML ) {
4430 a7dd0415 Kostas Papadimitriou
                        if ( typeof context.getElementById !== "undefined" && !isXML ) {
4431 a7dd0415 Kostas Papadimitriou
                                var m = context.getElementById(match[1]);
4432 a7dd0415 Kostas Papadimitriou
                                // Check parentNode to catch when Blackberry 4.6 returns
4433 a7dd0415 Kostas Papadimitriou
                                // nodes that are no longer in the document #6963
4434 a7dd0415 Kostas Papadimitriou
                                return m && m.parentNode ? [m] : [];
4435 a7dd0415 Kostas Papadimitriou
                        }
4436 a7dd0415 Kostas Papadimitriou
                },
4437 a7dd0415 Kostas Papadimitriou
4438 a7dd0415 Kostas Papadimitriou
                NAME: function( match, context ) {
4439 a7dd0415 Kostas Papadimitriou
                        if ( typeof context.getElementsByName !== "undefined" ) {
4440 a7dd0415 Kostas Papadimitriou
                                var ret = [],
4441 a7dd0415 Kostas Papadimitriou
                                        results = context.getElementsByName( match[1] );
4442 a7dd0415 Kostas Papadimitriou
4443 a7dd0415 Kostas Papadimitriou
                                for ( var i = 0, l = results.length; i < l; i++ ) {
4444 a7dd0415 Kostas Papadimitriou
                                        if ( results[i].getAttribute("name") === match[1] ) {
4445 a7dd0415 Kostas Papadimitriou
                                                ret.push( results[i] );
4446 a7dd0415 Kostas Papadimitriou
                                        }
4447 a7dd0415 Kostas Papadimitriou
                                }
4448 a7dd0415 Kostas Papadimitriou
4449 a7dd0415 Kostas Papadimitriou
                                return ret.length === 0 ? null : ret;
4450 a7dd0415 Kostas Papadimitriou
                        }
4451 a7dd0415 Kostas Papadimitriou
                },
4452 a7dd0415 Kostas Papadimitriou
4453 a7dd0415 Kostas Papadimitriou
                TAG: function( match, context ) {
4454 a7dd0415 Kostas Papadimitriou
                        if ( typeof context.getElementsByTagName !== "undefined" ) {
4455 a7dd0415 Kostas Papadimitriou
                                return context.getElementsByTagName( match[1] );
4456 a7dd0415 Kostas Papadimitriou
                        }
4457 a7dd0415 Kostas Papadimitriou
                }
4458 a7dd0415 Kostas Papadimitriou
        },
4459 a7dd0415 Kostas Papadimitriou
        preFilter: {
4460 a7dd0415 Kostas Papadimitriou
                CLASS: function( match, curLoop, inplace, result, not, isXML ) {
4461 a7dd0415 Kostas Papadimitriou
                        match = " " + match[1].replace( rBackslash, "" ) + " ";
4462 a7dd0415 Kostas Papadimitriou
4463 a7dd0415 Kostas Papadimitriou
                        if ( isXML ) {
4464 a7dd0415 Kostas Papadimitriou
                                return match;
4465 a7dd0415 Kostas Papadimitriou
                        }
4466 a7dd0415 Kostas Papadimitriou
4467 a7dd0415 Kostas Papadimitriou
                        for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
4468 a7dd0415 Kostas Papadimitriou
                                if ( elem ) {
4469 a7dd0415 Kostas Papadimitriou
                                        if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
4470 a7dd0415 Kostas Papadimitriou
                                                if ( !inplace ) {
4471 a7dd0415 Kostas Papadimitriou
                                                        result.push( elem );
4472 a7dd0415 Kostas Papadimitriou
                                                }
4473 a7dd0415 Kostas Papadimitriou
4474 a7dd0415 Kostas Papadimitriou
                                        } else if ( inplace ) {
4475 a7dd0415 Kostas Papadimitriou
                                                curLoop[i] = false;
4476 a7dd0415 Kostas Papadimitriou
                                        }
4477 a7dd0415 Kostas Papadimitriou
                                }
4478 a7dd0415 Kostas Papadimitriou
                        }
4479 a7dd0415 Kostas Papadimitriou
4480 a7dd0415 Kostas Papadimitriou
                        return false;
4481 a7dd0415 Kostas Papadimitriou
                },
4482 a7dd0415 Kostas Papadimitriou
4483 a7dd0415 Kostas Papadimitriou
                ID: function( match ) {
4484 a7dd0415 Kostas Papadimitriou
                        return match[1].replace( rBackslash, "" );
4485 a7dd0415 Kostas Papadimitriou
                },
4486 a7dd0415 Kostas Papadimitriou
4487 a7dd0415 Kostas Papadimitriou
                TAG: function( match, curLoop ) {
4488 a7dd0415 Kostas Papadimitriou
                        return match[1].replace( rBackslash, "" ).toLowerCase();
4489 a7dd0415 Kostas Papadimitriou
                },
4490 a7dd0415 Kostas Papadimitriou
4491 a7dd0415 Kostas Papadimitriou
                CHILD: function( match ) {
4492 a7dd0415 Kostas Papadimitriou
                        if ( match[1] === "nth" ) {
4493 a7dd0415 Kostas Papadimitriou
                                if ( !match[2] ) {
4494 a7dd0415 Kostas Papadimitriou
                                        Sizzle.error( match[0] );
4495 a7dd0415 Kostas Papadimitriou
                                }
4496 a7dd0415 Kostas Papadimitriou
4497 a7dd0415 Kostas Papadimitriou
                                match[2] = match[2].replace(/^\+|\s*/g, '');
4498 a7dd0415 Kostas Papadimitriou
4499 a7dd0415 Kostas Papadimitriou
                                // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
4500 a7dd0415 Kostas Papadimitriou
                                var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
4501 a7dd0415 Kostas Papadimitriou
                                        match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
4502 a7dd0415 Kostas Papadimitriou
                                        !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
4503 a7dd0415 Kostas Papadimitriou
4504 a7dd0415 Kostas Papadimitriou
                                // calculate the numbers (first)n+(last) including if they are negative
4505 a7dd0415 Kostas Papadimitriou
                                match[2] = (test[1] + (test[2] || 1)) - 0;
4506 a7dd0415 Kostas Papadimitriou
                                match[3] = test[3] - 0;
4507 a7dd0415 Kostas Papadimitriou
                        }
4508 a7dd0415 Kostas Papadimitriou
                        else if ( match[2] ) {
4509 a7dd0415 Kostas Papadimitriou
                                Sizzle.error( match[0] );
4510 a7dd0415 Kostas Papadimitriou
                        }
4511 a7dd0415 Kostas Papadimitriou
4512 a7dd0415 Kostas Papadimitriou
                        // TODO: Move to normal caching system
4513 a7dd0415 Kostas Papadimitriou
                        match[0] = done++;
4514 a7dd0415 Kostas Papadimitriou
4515 a7dd0415 Kostas Papadimitriou
                        return match;
4516 a7dd0415 Kostas Papadimitriou
                },
4517 a7dd0415 Kostas Papadimitriou
4518 a7dd0415 Kostas Papadimitriou
                ATTR: function( match, curLoop, inplace, result, not, isXML ) {
4519 a7dd0415 Kostas Papadimitriou
                        var name = match[1] = match[1].replace( rBackslash, "" );
4520 18059f42 Kostas Papadimitriou
4521 a7dd0415 Kostas Papadimitriou
                        if ( !isXML && Expr.attrMap[name] ) {
4522 a7dd0415 Kostas Papadimitriou
                                match[1] = Expr.attrMap[name];
4523 a7dd0415 Kostas Papadimitriou
                        }
4524 a7dd0415 Kostas Papadimitriou
4525 a7dd0415 Kostas Papadimitriou
                        // Handle if an un-quoted value was used
4526 a7dd0415 Kostas Papadimitriou
                        match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
4527 a7dd0415 Kostas Papadimitriou
4528 a7dd0415 Kostas Papadimitriou
                        if ( match[2] === "~=" ) {
4529 a7dd0415 Kostas Papadimitriou
                                match[4] = " " + match[4] + " ";
4530 a7dd0415 Kostas Papadimitriou
                        }
4531 a7dd0415 Kostas Papadimitriou
4532 a7dd0415 Kostas Papadimitriou
                        return match;
4533 a7dd0415 Kostas Papadimitriou
                },
4534 a7dd0415 Kostas Papadimitriou
4535 a7dd0415 Kostas Papadimitriou
                PSEUDO: function( match, curLoop, inplace, result, not ) {
4536 a7dd0415 Kostas Papadimitriou
                        if ( match[1] === "not" ) {
4537 a7dd0415 Kostas Papadimitriou
                                // If we're dealing with a complex expression, or a simple one
4538 a7dd0415 Kostas Papadimitriou
                                if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
4539 a7dd0415 Kostas Papadimitriou
                                        match[3] = Sizzle(match[3], null, null, curLoop);
4540 a7dd0415 Kostas Papadimitriou
4541 a7dd0415 Kostas Papadimitriou
                                } else {
4542 a7dd0415 Kostas Papadimitriou
                                        var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
4543 a7dd0415 Kostas Papadimitriou
4544 a7dd0415 Kostas Papadimitriou
                                        if ( !inplace ) {
4545 a7dd0415 Kostas Papadimitriou
                                                result.push.apply( result, ret );
4546 a7dd0415 Kostas Papadimitriou
                                        }
4547 a7dd0415 Kostas Papadimitriou
4548 a7dd0415 Kostas Papadimitriou
                                        return false;
4549 a7dd0415 Kostas Papadimitriou
                                }
4550 a7dd0415 Kostas Papadimitriou
4551 a7dd0415 Kostas Papadimitriou
                        } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
4552 a7dd0415 Kostas Papadimitriou
                                return true;
4553 a7dd0415 Kostas Papadimitriou
                        }
4554 18059f42 Kostas Papadimitriou
4555 a7dd0415 Kostas Papadimitriou
                        return match;
4556 a7dd0415 Kostas Papadimitriou
                },
4557 a7dd0415 Kostas Papadimitriou
4558 a7dd0415 Kostas Papadimitriou
                POS: function( match ) {
4559 a7dd0415 Kostas Papadimitriou
                        match.unshift( true );
4560 a7dd0415 Kostas Papadimitriou
4561 a7dd0415 Kostas Papadimitriou
                        return match;
4562 a7dd0415 Kostas Papadimitriou
                }
4563 a7dd0415 Kostas Papadimitriou
        },
4564 18059f42 Kostas Papadimitriou
4565 a7dd0415 Kostas Papadimitriou
        filters: {
4566 a7dd0415 Kostas Papadimitriou
                enabled: function( elem ) {
4567 a7dd0415 Kostas Papadimitriou
                        return elem.disabled === false && elem.type !== "hidden";
4568 a7dd0415 Kostas Papadimitriou
                },
4569 a7dd0415 Kostas Papadimitriou
4570 a7dd0415 Kostas Papadimitriou
                disabled: function( elem ) {
4571 a7dd0415 Kostas Papadimitriou
                        return elem.disabled === true;
4572 a7dd0415 Kostas Papadimitriou
                },
4573 a7dd0415 Kostas Papadimitriou
4574 a7dd0415 Kostas Papadimitriou
                checked: function( elem ) {
4575 a7dd0415 Kostas Papadimitriou
                        return elem.checked === true;
4576 a7dd0415 Kostas Papadimitriou
                },
4577 18059f42 Kostas Papadimitriou
4578 a7dd0415 Kostas Papadimitriou
                selected: function( elem ) {
4579 a7dd0415 Kostas Papadimitriou
                        // Accessing this property makes selected-by-default
4580 a7dd0415 Kostas Papadimitriou
                        // options in Safari work properly
4581 a7dd0415 Kostas Papadimitriou
                        if ( elem.parentNode ) {
4582 a7dd0415 Kostas Papadimitriou
                                elem.parentNode.selectedIndex;
4583 a7dd0415 Kostas Papadimitriou
                        }
4584 18059f42 Kostas Papadimitriou
4585 a7dd0415 Kostas Papadimitriou
                        return elem.selected === true;
4586 a7dd0415 Kostas Papadimitriou
                },
4587 a7dd0415 Kostas Papadimitriou
4588 a7dd0415 Kostas Papadimitriou
                parent: function( elem ) {
4589 a7dd0415 Kostas Papadimitriou
                        return !!elem.firstChild;
4590 a7dd0415 Kostas Papadimitriou
                },
4591 a7dd0415 Kostas Papadimitriou
4592 a7dd0415 Kostas Papadimitriou
                empty: function( elem ) {
4593 a7dd0415 Kostas Papadimitriou
                        return !elem.firstChild;
4594 a7dd0415 Kostas Papadimitriou
                },
4595 a7dd0415 Kostas Papadimitriou
4596 a7dd0415 Kostas Papadimitriou
                has: function( elem, i, match ) {
4597 a7dd0415 Kostas Papadimitriou
                        return !!Sizzle( match[3], elem ).length;
4598 a7dd0415 Kostas Papadimitriou
                },
4599 a7dd0415 Kostas Papadimitriou
4600 a7dd0415 Kostas Papadimitriou
                header: function( elem ) {
4601 a7dd0415 Kostas Papadimitriou
                        return (/h\d/i).test( elem.nodeName );
4602 a7dd0415 Kostas Papadimitriou
                },
4603 a7dd0415 Kostas Papadimitriou
4604 a7dd0415 Kostas Papadimitriou
                text: function( elem ) {
4605 a7dd0415 Kostas Papadimitriou
                        var attr = elem.getAttribute( "type" ), type = elem.type;
4606 18059f42 Kostas Papadimitriou
                        // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
4607 a7dd0415 Kostas Papadimitriou
                        // use getAttribute instead to test this case
4608 a7dd0415 Kostas Papadimitriou
                        return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
4609 a7dd0415 Kostas Papadimitriou
                },
4610 a7dd0415 Kostas Papadimitriou
4611 a7dd0415 Kostas Papadimitriou
                radio: function( elem ) {
4612 a7dd0415 Kostas Papadimitriou
                        return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
4613 a7dd0415 Kostas Papadimitriou
                },
4614 a7dd0415 Kostas Papadimitriou
4615 a7dd0415 Kostas Papadimitriou
                checkbox: function( elem ) {
4616 a7dd0415 Kostas Papadimitriou
                        return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
4617 a7dd0415 Kostas Papadimitriou
                },
4618 a7dd0415 Kostas Papadimitriou
4619 a7dd0415 Kostas Papadimitriou
                file: function( elem ) {
4620 a7dd0415 Kostas Papadimitriou
                        return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
4621 a7dd0415 Kostas Papadimitriou
                },
4622 a7dd0415 Kostas Papadimitriou
4623 a7dd0415 Kostas Papadimitriou
                password: function( elem ) {
4624 a7dd0415 Kostas Papadimitriou
                        return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
4625 a7dd0415 Kostas Papadimitriou
                },
4626 a7dd0415 Kostas Papadimitriou
4627 a7dd0415 Kostas Papadimitriou
                submit: function( elem ) {
4628 a7dd0415 Kostas Papadimitriou
                        var name = elem.nodeName.toLowerCase();
4629 a7dd0415 Kostas Papadimitriou
                        return (name === "input" || name === "button") && "submit" === elem.type;
4630 a7dd0415 Kostas Papadimitriou
                },
4631 a7dd0415 Kostas Papadimitriou
4632 a7dd0415 Kostas Papadimitriou
                image: function( elem ) {
4633 a7dd0415 Kostas Papadimitriou
                        return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
4634 a7dd0415 Kostas Papadimitriou
                },
4635 a7dd0415 Kostas Papadimitriou
4636 a7dd0415 Kostas Papadimitriou
                reset: function( elem ) {
4637 a7dd0415 Kostas Papadimitriou
                        var name = elem.nodeName.toLowerCase();
4638 a7dd0415 Kostas Papadimitriou
                        return (name === "input" || name === "button") && "reset" === elem.type;
4639 a7dd0415 Kostas Papadimitriou
                },
4640 a7dd0415 Kostas Papadimitriou
4641 a7dd0415 Kostas Papadimitriou
                button: function( elem ) {
4642 a7dd0415 Kostas Papadimitriou
                        var name = elem.nodeName.toLowerCase();
4643 a7dd0415 Kostas Papadimitriou
                        return name === "input" && "button" === elem.type || name === "button";
4644 a7dd0415 Kostas Papadimitriou
                },
4645 a7dd0415 Kostas Papadimitriou
4646 a7dd0415 Kostas Papadimitriou
                input: function( elem ) {
4647 a7dd0415 Kostas Papadimitriou
                        return (/input|select|textarea|button/i).test( elem.nodeName );
4648 a7dd0415 Kostas Papadimitriou
                },
4649 a7dd0415 Kostas Papadimitriou
4650 a7dd0415 Kostas Papadimitriou
                focus: function( elem ) {
4651 a7dd0415 Kostas Papadimitriou
                        return elem === elem.ownerDocument.activeElement;
4652 a7dd0415 Kostas Papadimitriou
                }
4653 a7dd0415 Kostas Papadimitriou
        },
4654 a7dd0415 Kostas Papadimitriou
        setFilters: {
4655 a7dd0415 Kostas Papadimitriou
                first: function( elem, i ) {
4656 a7dd0415 Kostas Papadimitriou
                        return i === 0;
4657 a7dd0415 Kostas Papadimitriou
                },
4658 a7dd0415 Kostas Papadimitriou
4659 a7dd0415 Kostas Papadimitriou
                last: function( elem, i, match, array ) {
4660 a7dd0415 Kostas Papadimitriou
                        return i === array.length - 1;
4661 a7dd0415 Kostas Papadimitriou
                },
4662 a7dd0415 Kostas Papadimitriou
4663 a7dd0415 Kostas Papadimitriou
                even: function( elem, i ) {
4664 a7dd0415 Kostas Papadimitriou
                        return i % 2 === 0;
4665 a7dd0415 Kostas Papadimitriou
                },
4666 a7dd0415 Kostas Papadimitriou
4667 a7dd0415 Kostas Papadimitriou
                odd: function( elem, i ) {
4668 a7dd0415 Kostas Papadimitriou
                        return i % 2 === 1;
4669 a7dd0415 Kostas Papadimitriou
                },
4670 a7dd0415 Kostas Papadimitriou
4671 a7dd0415 Kostas Papadimitriou
                lt: function( elem, i, match ) {
4672 a7dd0415 Kostas Papadimitriou
                        return i < match[3] - 0;
4673 a7dd0415 Kostas Papadimitriou
                },
4674 a7dd0415 Kostas Papadimitriou
4675 a7dd0415 Kostas Papadimitriou
                gt: function( elem, i, match ) {
4676 a7dd0415 Kostas Papadimitriou
                        return i > match[3] - 0;
4677 a7dd0415 Kostas Papadimitriou
                },
4678 a7dd0415 Kostas Papadimitriou
4679 a7dd0415 Kostas Papadimitriou
                nth: function( elem, i, match ) {
4680 a7dd0415 Kostas Papadimitriou
                        return match[3] - 0 === i;
4681 a7dd0415 Kostas Papadimitriou
                },
4682 a7dd0415 Kostas Papadimitriou
4683 a7dd0415 Kostas Papadimitriou
                eq: function( elem, i, match ) {
4684 a7dd0415 Kostas Papadimitriou
                        return match[3] - 0 === i;
4685 a7dd0415 Kostas Papadimitriou
                }
4686 a7dd0415 Kostas Papadimitriou
        },
4687 a7dd0415 Kostas Papadimitriou
        filter: {
4688 a7dd0415 Kostas Papadimitriou
                PSEUDO: function( elem, match, i, array ) {
4689 a7dd0415 Kostas Papadimitriou
                        var name = match[1],
4690 a7dd0415 Kostas Papadimitriou
                                filter = Expr.filters[ name ];
4691 a7dd0415 Kostas Papadimitriou
4692 a7dd0415 Kostas Papadimitriou
                        if ( filter ) {
4693 a7dd0415 Kostas Papadimitriou
                                return filter( elem, i, match, array );
4694 a7dd0415 Kostas Papadimitriou
4695 a7dd0415 Kostas Papadimitriou
                        } else if ( name === "contains" ) {
4696 a7dd0415 Kostas Papadimitriou
                                return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
4697 a7dd0415 Kostas Papadimitriou
4698 a7dd0415 Kostas Papadimitriou
                        } else if ( name === "not" ) {
4699 a7dd0415 Kostas Papadimitriou
                                var not = match[3];
4700 a7dd0415 Kostas Papadimitriou
4701 a7dd0415 Kostas Papadimitriou
                                for ( var j = 0, l = not.length; j < l; j++ ) {
4702 a7dd0415 Kostas Papadimitriou
                                        if ( not[j] === elem ) {
4703 a7dd0415 Kostas Papadimitriou
                                                return false;
4704 a7dd0415 Kostas Papadimitriou
                                        }
4705 a7dd0415 Kostas Papadimitriou
                                }
4706 a7dd0415 Kostas Papadimitriou
4707 a7dd0415 Kostas Papadimitriou
                                return true;
4708 a7dd0415 Kostas Papadimitriou
4709 a7dd0415 Kostas Papadimitriou
                        } else {
4710 a7dd0415 Kostas Papadimitriou
                                Sizzle.error( name );
4711 a7dd0415 Kostas Papadimitriou
                        }
4712 a7dd0415 Kostas Papadimitriou
                },
4713 a7dd0415 Kostas Papadimitriou
4714 a7dd0415 Kostas Papadimitriou
                CHILD: function( elem, match ) {
4715 a7dd0415 Kostas Papadimitriou
                        var first, last,
4716 a7dd0415 Kostas Papadimitriou
                                doneName, parent, cache,
4717 a7dd0415 Kostas Papadimitriou
                                count, diff,
4718 a7dd0415 Kostas Papadimitriou
                                type = match[1],
4719 a7dd0415 Kostas Papadimitriou
                                node = elem;
4720 a7dd0415 Kostas Papadimitriou
4721 a7dd0415 Kostas Papadimitriou
                        switch ( type ) {
4722 a7dd0415 Kostas Papadimitriou
                                case "only":
4723 a7dd0415 Kostas Papadimitriou
                                case "first":
4724 18059f42 Kostas Papadimitriou
                                        while ( (node = node.previousSibling) ) {
4725 18059f42 Kostas Papadimitriou
                                                if ( node.nodeType === 1 ) {
4726 18059f42 Kostas Papadimitriou
                                                        return false;
4727 a7dd0415 Kostas Papadimitriou
                                                }
4728 a7dd0415 Kostas Papadimitriou
                                        }
4729 a7dd0415 Kostas Papadimitriou
4730 18059f42 Kostas Papadimitriou
                                        if ( type === "first" ) {
4731 18059f42 Kostas Papadimitriou
                                                return true;
4732 a7dd0415 Kostas Papadimitriou
                                        }
4733 a7dd0415 Kostas Papadimitriou
4734 a7dd0415 Kostas Papadimitriou
                                        node = elem;
4735 a7dd0415 Kostas Papadimitriou
4736 18059f42 Kostas Papadimitriou
                                        /* falls through */
4737 a7dd0415 Kostas Papadimitriou
                                case "last":
4738 18059f42 Kostas Papadimitriou
                                        while ( (node = node.nextSibling) ) {
4739 18059f42 Kostas Papadimitriou
                                                if ( node.nodeType === 1 ) {
4740 18059f42 Kostas Papadimitriou
                                                        return false;
4741 a7dd0415 Kostas Papadimitriou
                                                }
4742 a7dd0415 Kostas Papadimitriou
                                        }
4743 a7dd0415 Kostas Papadimitriou
4744 a7dd0415 Kostas Papadimitriou
                                        return true;
4745 a7dd0415 Kostas Papadimitriou
4746 a7dd0415 Kostas Papadimitriou
                                case "nth":
4747 a7dd0415 Kostas Papadimitriou
                                        first = match[2];
4748 a7dd0415 Kostas Papadimitriou
                                        last = match[3];
4749 a7dd0415 Kostas Papadimitriou
4750 a7dd0415 Kostas Papadimitriou
                                        if ( first === 1 && last === 0 ) {
4751 a7dd0415 Kostas Papadimitriou
                                                return true;
4752 a7dd0415 Kostas Papadimitriou
                                        }
4753 18059f42 Kostas Papadimitriou
4754 a7dd0415 Kostas Papadimitriou
                                        doneName = match[0];
4755 a7dd0415 Kostas Papadimitriou
                                        parent = elem.parentNode;
4756 18059f42 Kostas Papadimitriou
4757 a7dd0415 Kostas Papadimitriou
                                        if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
4758 a7dd0415 Kostas Papadimitriou
                                                count = 0;
4759 18059f42 Kostas Papadimitriou
4760 a7dd0415 Kostas Papadimitriou
                                                for ( node = parent.firstChild; node; node = node.nextSibling ) {
4761 a7dd0415 Kostas Papadimitriou
                                                        if ( node.nodeType === 1 ) {
4762 a7dd0415 Kostas Papadimitriou
                                                                node.nodeIndex = ++count;
4763 a7dd0415 Kostas Papadimitriou
                                                        }
4764 18059f42 Kostas Papadimitriou
                                                }
4765 a7dd0415 Kostas Papadimitriou
4766 a7dd0415 Kostas Papadimitriou
                                                parent[ expando ] = doneName;
4767 a7dd0415 Kostas Papadimitriou
                                        }
4768 18059f42 Kostas Papadimitriou
4769 a7dd0415 Kostas Papadimitriou
                                        diff = elem.nodeIndex - last;
4770 a7dd0415 Kostas Papadimitriou
4771 a7dd0415 Kostas Papadimitriou
                                        if ( first === 0 ) {
4772 a7dd0415 Kostas Papadimitriou
                                                return diff === 0;
4773 a7dd0415 Kostas Papadimitriou
4774 a7dd0415 Kostas Papadimitriou
                                        } else {
4775 a7dd0415 Kostas Papadimitriou
                                                return ( diff % first === 0 && diff / first >= 0 );
4776 a7dd0415 Kostas Papadimitriou
                                        }
4777 a7dd0415 Kostas Papadimitriou
                        }
4778 a7dd0415 Kostas Papadimitriou
                },
4779 a7dd0415 Kostas Papadimitriou
4780 a7dd0415 Kostas Papadimitriou
                ID: function( elem, match ) {
4781 a7dd0415 Kostas Papadimitriou
                        return elem.nodeType === 1 && elem.getAttribute("id") === match;
4782 a7dd0415 Kostas Papadimitriou
                },
4783 a7dd0415 Kostas Papadimitriou
4784 a7dd0415 Kostas Papadimitriou
                TAG: function( elem, match ) {
4785 a7dd0415 Kostas Papadimitriou
                        return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
4786 a7dd0415 Kostas Papadimitriou
                },
4787 18059f42 Kostas Papadimitriou
4788 a7dd0415 Kostas Papadimitriou
                CLASS: function( elem, match ) {
4789 a7dd0415 Kostas Papadimitriou
                        return (" " + (elem.className || elem.getAttribute("class")) + " ")
4790 a7dd0415 Kostas Papadimitriou
                                .indexOf( match ) > -1;
4791 a7dd0415 Kostas Papadimitriou
                },
4792 a7dd0415 Kostas Papadimitriou
4793 a7dd0415 Kostas Papadimitriou
                ATTR: function( elem, match ) {
4794 a7dd0415 Kostas Papadimitriou
                        var name = match[1],
4795 a7dd0415 Kostas Papadimitriou
                                result = Sizzle.attr ?
4796 a7dd0415 Kostas Papadimitriou
                                        Sizzle.attr( elem, name ) :
4797 a7dd0415 Kostas Papadimitriou
                                        Expr.attrHandle[ name ] ?
4798 a7dd0415 Kostas Papadimitriou
                                        Expr.attrHandle[ name ]( elem ) :
4799 a7dd0415 Kostas Papadimitriou
                                        elem[ name ] != null ?
4800 a7dd0415 Kostas Papadimitriou
                                                elem[ name ] :
4801 a7dd0415 Kostas Papadimitriou
                                                elem.getAttribute( name ),
4802 a7dd0415 Kostas Papadimitriou
                                value = result + "",
4803 a7dd0415 Kostas Papadimitriou
                                type = match[2],
4804 a7dd0415 Kostas Papadimitriou
                                check = match[4];
4805 a7dd0415 Kostas Papadimitriou
4806 a7dd0415 Kostas Papadimitriou
                        return result == null ?
4807 a7dd0415 Kostas Papadimitriou
                                type === "!=" :
4808 a7dd0415 Kostas Papadimitriou
                                !type && Sizzle.attr ?
4809 a7dd0415 Kostas Papadimitriou
                                result != null :
4810 a7dd0415 Kostas Papadimitriou
                                type === "=" ?
4811 a7dd0415 Kostas Papadimitriou
                                value === check :
4812 a7dd0415 Kostas Papadimitriou
                                type === "*=" ?
4813 a7dd0415 Kostas Papadimitriou
                                value.indexOf(check) >= 0 :
4814 a7dd0415 Kostas Papadimitriou
                                type === "~=" ?
4815 a7dd0415 Kostas Papadimitriou
                                (" " + value + " ").indexOf(check) >= 0 :
4816 a7dd0415 Kostas Papadimitriou
                                !check ?
4817 a7dd0415 Kostas Papadimitriou
                                value && result !== false :
4818 a7dd0415 Kostas Papadimitriou
                                type === "!=" ?
4819 a7dd0415 Kostas Papadimitriou
                                value !== check :
4820 a7dd0415 Kostas Papadimitriou
                                type === "^=" ?
4821 a7dd0415 Kostas Papadimitriou
                                value.indexOf(check) === 0 :
4822 a7dd0415 Kostas Papadimitriou
                                type === "$=" ?
4823 a7dd0415 Kostas Papadimitriou
                                value.substr(value.length - check.length) === check :
4824 a7dd0415 Kostas Papadimitriou
                                type === "|=" ?
4825 a7dd0415 Kostas Papadimitriou
                                value === check || value.substr(0, check.length + 1) === check + "-" :
4826 a7dd0415 Kostas Papadimitriou
                                false;
4827 a7dd0415 Kostas Papadimitriou
                },
4828 a7dd0415 Kostas Papadimitriou
4829 a7dd0415 Kostas Papadimitriou
                POS: function( elem, match, i, array ) {
4830 a7dd0415 Kostas Papadimitriou
                        var name = match[2],
4831 a7dd0415 Kostas Papadimitriou
                                filter = Expr.setFilters[ name ];
4832 a7dd0415 Kostas Papadimitriou
4833 a7dd0415 Kostas Papadimitriou
                        if ( filter ) {
4834 a7dd0415 Kostas Papadimitriou
                                return filter( elem, i, match, array );
4835 a7dd0415 Kostas Papadimitriou
                        }
4836 a7dd0415 Kostas Papadimitriou
                }
4837 a7dd0415 Kostas Papadimitriou
        }
4838 a7dd0415 Kostas Papadimitriou
};
4839 a7dd0415 Kostas Papadimitriou
4840 a7dd0415 Kostas Papadimitriou
var origPOS = Expr.match.POS,
4841 a7dd0415 Kostas Papadimitriou
        fescape = function(all, num){
4842 a7dd0415 Kostas Papadimitriou
                return "\\" + (num - 0 + 1);
4843 a7dd0415 Kostas Papadimitriou
        };
4844 a7dd0415 Kostas Papadimitriou
4845 a7dd0415 Kostas Papadimitriou
for ( var type in Expr.match ) {
4846 a7dd0415 Kostas Papadimitriou
        Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
4847 a7dd0415 Kostas Papadimitriou
        Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
4848 a7dd0415 Kostas Papadimitriou
}
4849 18059f42 Kostas Papadimitriou
// Expose origPOS
4850 18059f42 Kostas Papadimitriou
// "global" as in regardless of relation to brackets/parens
4851 18059f42 Kostas Papadimitriou
Expr.match.globalPOS = origPOS;
4852 a7dd0415 Kostas Papadimitriou
4853 a7dd0415 Kostas Papadimitriou
var makeArray = function( array, results ) {
4854 a7dd0415 Kostas Papadimitriou
        array = Array.prototype.slice.call( array, 0 );
4855 a7dd0415 Kostas Papadimitriou
4856 a7dd0415 Kostas Papadimitriou
        if ( results ) {
4857 a7dd0415 Kostas Papadimitriou
                results.push.apply( results, array );
4858 a7dd0415 Kostas Papadimitriou
                return results;
4859 a7dd0415 Kostas Papadimitriou
        }
4860 18059f42 Kostas Papadimitriou
4861 a7dd0415 Kostas Papadimitriou
        return array;
4862 a7dd0415 Kostas Papadimitriou
};
4863 a7dd0415 Kostas Papadimitriou
4864 a7dd0415 Kostas Papadimitriou
// Perform a simple check to determine if the browser is capable of
4865 a7dd0415 Kostas Papadimitriou
// converting a NodeList to an array using builtin methods.
4866 a7dd0415 Kostas Papadimitriou
// Also verifies that the returned array holds DOM nodes
4867 a7dd0415 Kostas Papadimitriou
// (which is not the case in the Blackberry browser)
4868 a7dd0415 Kostas Papadimitriou
try {
4869 a7dd0415 Kostas Papadimitriou
        Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
4870 a7dd0415 Kostas Papadimitriou
4871 a7dd0415 Kostas Papadimitriou
// Provide a fallback method if it does not work
4872 a7dd0415 Kostas Papadimitriou
} catch( e ) {
4873 a7dd0415 Kostas Papadimitriou
        makeArray = function( array, results ) {
4874 a7dd0415 Kostas Papadimitriou
                var i = 0,
4875 a7dd0415 Kostas Papadimitriou
                        ret = results || [];
4876 a7dd0415 Kostas Papadimitriou
4877 a7dd0415 Kostas Papadimitriou
                if ( toString.call(array) === "[object Array]" ) {
4878 a7dd0415 Kostas Papadimitriou
                        Array.prototype.push.apply( ret, array );
4879 a7dd0415 Kostas Papadimitriou
4880 a7dd0415 Kostas Papadimitriou
                } else {
4881 a7dd0415 Kostas Papadimitriou
                        if ( typeof array.length === "number" ) {
4882 a7dd0415 Kostas Papadimitriou
                                for ( var l = array.length; i < l; i++ ) {
4883 a7dd0415 Kostas Papadimitriou
                                        ret.push( array[i] );
4884 a7dd0415 Kostas Papadimitriou
                                }
4885 a7dd0415 Kostas Papadimitriou
4886 a7dd0415 Kostas Papadimitriou
                        } else {
4887 a7dd0415 Kostas Papadimitriou
                                for ( ; array[i]; i++ ) {
4888 a7dd0415 Kostas Papadimitriou
                                        ret.push( array[i] );
4889 a7dd0415 Kostas Papadimitriou
                                }
4890 a7dd0415 Kostas Papadimitriou
                        }
4891 a7dd0415 Kostas Papadimitriou
                }
4892 a7dd0415 Kostas Papadimitriou
4893 a7dd0415 Kostas Papadimitriou
                return ret;
4894 a7dd0415 Kostas Papadimitriou
        };
4895 a7dd0415 Kostas Papadimitriou
}
4896 a7dd0415 Kostas Papadimitriou
4897 a7dd0415 Kostas Papadimitriou
var sortOrder, siblingCheck;
4898 a7dd0415 Kostas Papadimitriou
4899 a7dd0415 Kostas Papadimitriou
if ( document.documentElement.compareDocumentPosition ) {
4900 a7dd0415 Kostas Papadimitriou
        sortOrder = function( a, b ) {
4901 a7dd0415 Kostas Papadimitriou
                if ( a === b ) {
4902 a7dd0415 Kostas Papadimitriou
                        hasDuplicate = true;
4903 a7dd0415 Kostas Papadimitriou
                        return 0;
4904 a7dd0415 Kostas Papadimitriou
                }
4905 a7dd0415 Kostas Papadimitriou
4906 a7dd0415 Kostas Papadimitriou
                if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
4907 a7dd0415 Kostas Papadimitriou
                        return a.compareDocumentPosition ? -1 : 1;
4908 a7dd0415 Kostas Papadimitriou
                }
4909 a7dd0415 Kostas Papadimitriou
4910 a7dd0415 Kostas Papadimitriou
                return a.compareDocumentPosition(b) & 4 ? -1 : 1;
4911 a7dd0415 Kostas Papadimitriou
        };
4912 a7dd0415 Kostas Papadimitriou
4913 a7dd0415 Kostas Papadimitriou
} else {
4914 a7dd0415 Kostas Papadimitriou
        sortOrder = function( a, b ) {
4915 a7dd0415 Kostas Papadimitriou
                // The nodes are identical, we can exit early
4916 a7dd0415 Kostas Papadimitriou
                if ( a === b ) {
4917 a7dd0415 Kostas Papadimitriou
                        hasDuplicate = true;
4918 a7dd0415 Kostas Papadimitriou
                        return 0;
4919 a7dd0415 Kostas Papadimitriou
4920 a7dd0415 Kostas Papadimitriou
                // Fallback to using sourceIndex (in IE) if it's available on both nodes
4921 a7dd0415 Kostas Papadimitriou
                } else if ( a.sourceIndex && b.sourceIndex ) {
4922 a7dd0415 Kostas Papadimitriou
                        return a.sourceIndex - b.sourceIndex;
4923 a7dd0415 Kostas Papadimitriou
                }
4924 a7dd0415 Kostas Papadimitriou
4925 a7dd0415 Kostas Papadimitriou
                var al, bl,
4926 a7dd0415 Kostas Papadimitriou
                        ap = [],
4927 a7dd0415 Kostas Papadimitriou
                        bp = [],
4928 a7dd0415 Kostas Papadimitriou
                        aup = a.parentNode,
4929 a7dd0415 Kostas Papadimitriou
                        bup = b.parentNode,
4930 a7dd0415 Kostas Papadimitriou
                        cur = aup;
4931 a7dd0415 Kostas Papadimitriou
4932 a7dd0415 Kostas Papadimitriou
                // If the nodes are siblings (or identical) we can do a quick check
4933 a7dd0415 Kostas Papadimitriou
                if ( aup === bup ) {
4934 a7dd0415 Kostas Papadimitriou
                        return siblingCheck( a, b );
4935 a7dd0415 Kostas Papadimitriou
4936 a7dd0415 Kostas Papadimitriou
                // If no parents were found then the nodes are disconnected
4937 a7dd0415 Kostas Papadimitriou
                } else if ( !aup ) {
4938 a7dd0415 Kostas Papadimitriou
                        return -1;
4939 a7dd0415 Kostas Papadimitriou
4940 a7dd0415 Kostas Papadimitriou
                } else if ( !bup ) {
4941 a7dd0415 Kostas Papadimitriou
                        return 1;
4942 a7dd0415 Kostas Papadimitriou
                }
4943 a7dd0415 Kostas Papadimitriou
4944 a7dd0415 Kostas Papadimitriou
                // Otherwise they're somewhere else in the tree so we need
4945 a7dd0415 Kostas Papadimitriou
                // to build up a full list of the parentNodes for comparison
4946 a7dd0415 Kostas Papadimitriou
                while ( cur ) {
4947 a7dd0415 Kostas Papadimitriou
                        ap.unshift( cur );
4948 a7dd0415 Kostas Papadimitriou
                        cur = cur.parentNode;
4949 a7dd0415 Kostas Papadimitriou
                }
4950 a7dd0415 Kostas Papadimitriou
4951 a7dd0415 Kostas Papadimitriou
                cur = bup;
4952 a7dd0415 Kostas Papadimitriou
4953 a7dd0415 Kostas Papadimitriou
                while ( cur ) {
4954 a7dd0415 Kostas Papadimitriou
                        bp.unshift( cur );
4955 a7dd0415 Kostas Papadimitriou
                        cur = cur.parentNode;
4956 a7dd0415 Kostas Papadimitriou
                }
4957 a7dd0415 Kostas Papadimitriou
4958 a7dd0415 Kostas Papadimitriou
                al = ap.length;
4959 a7dd0415 Kostas Papadimitriou
                bl = bp.length;
4960 a7dd0415 Kostas Papadimitriou
4961 a7dd0415 Kostas Papadimitriou
                // Start walking down the tree looking for a discrepancy
4962 a7dd0415 Kostas Papadimitriou
                for ( var i = 0; i < al && i < bl; i++ ) {
4963 a7dd0415 Kostas Papadimitriou
                        if ( ap[i] !== bp[i] ) {
4964 a7dd0415 Kostas Papadimitriou
                                return siblingCheck( ap[i], bp[i] );
4965 a7dd0415 Kostas Papadimitriou
                        }
4966 a7dd0415 Kostas Papadimitriou
                }
4967 a7dd0415 Kostas Papadimitriou
4968 a7dd0415 Kostas Papadimitriou
                // We ended someplace up the tree so do a sibling check
4969 a7dd0415 Kostas Papadimitriou
                return i === al ?
4970 a7dd0415 Kostas Papadimitriou
                        siblingCheck( a, bp[i], -1 ) :
4971 a7dd0415 Kostas Papadimitriou
                        siblingCheck( ap[i], b, 1 );
4972 a7dd0415 Kostas Papadimitriou
        };
4973 a7dd0415 Kostas Papadimitriou
4974 a7dd0415 Kostas Papadimitriou
        siblingCheck = function( a, b, ret ) {
4975 a7dd0415 Kostas Papadimitriou
                if ( a === b ) {
4976 a7dd0415 Kostas Papadimitriou
                        return ret;
4977 a7dd0415 Kostas Papadimitriou
                }
4978 a7dd0415 Kostas Papadimitriou
4979 a7dd0415 Kostas Papadimitriou
                var cur = a.nextSibling;
4980 a7dd0415 Kostas Papadimitriou
4981 a7dd0415 Kostas Papadimitriou
                while ( cur ) {
4982 a7dd0415 Kostas Papadimitriou
                        if ( cur === b ) {
4983 a7dd0415 Kostas Papadimitriou
                                return -1;
4984 a7dd0415 Kostas Papadimitriou
                        }
4985 a7dd0415 Kostas Papadimitriou
4986 a7dd0415 Kostas Papadimitriou
                        cur = cur.nextSibling;
4987 a7dd0415 Kostas Papadimitriou
                }
4988 a7dd0415 Kostas Papadimitriou
4989 a7dd0415 Kostas Papadimitriou
                return 1;
4990 a7dd0415 Kostas Papadimitriou
        };
4991 a7dd0415 Kostas Papadimitriou
}
4992 a7dd0415 Kostas Papadimitriou
4993 a7dd0415 Kostas Papadimitriou
// Check to see if the browser returns elements by name when
4994 a7dd0415 Kostas Papadimitriou
// querying by getElementById (and provide a workaround)
4995 a7dd0415 Kostas Papadimitriou
(function(){
4996 a7dd0415 Kostas Papadimitriou
        // We're going to inject a fake input element with a specified name
4997 a7dd0415 Kostas Papadimitriou
        var form = document.createElement("div"),
4998 a7dd0415 Kostas Papadimitriou
                id = "script" + (new Date()).getTime(),
4999 a7dd0415 Kostas Papadimitriou
                root = document.documentElement;
5000 a7dd0415 Kostas Papadimitriou
5001 a7dd0415 Kostas Papadimitriou
        form.innerHTML = "<a name='" + id + "'/>";
5002 a7dd0415 Kostas Papadimitriou
5003 a7dd0415 Kostas Papadimitriou
        // Inject it into the root element, check its status, and remove it quickly
5004 a7dd0415 Kostas Papadimitriou
        root.insertBefore( form, root.firstChild );
5005 a7dd0415 Kostas Papadimitriou
5006 a7dd0415 Kostas Papadimitriou
        // The workaround has to do additional checks after a getElementById
5007 a7dd0415 Kostas Papadimitriou
        // Which slows things down for other browsers (hence the branching)
5008 a7dd0415 Kostas Papadimitriou
        if ( document.getElementById( id ) ) {
5009 a7dd0415 Kostas Papadimitriou
                Expr.find.ID = function( match, context, isXML ) {
5010 a7dd0415 Kostas Papadimitriou
                        if ( typeof context.getElementById !== "undefined" && !isXML ) {
5011 a7dd0415 Kostas Papadimitriou
                                var m = context.getElementById(match[1]);
5012 a7dd0415 Kostas Papadimitriou
5013 a7dd0415 Kostas Papadimitriou
                                return m ?
5014 a7dd0415 Kostas Papadimitriou
                                        m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
5015 a7dd0415 Kostas Papadimitriou
                                                [m] :
5016 a7dd0415 Kostas Papadimitriou
                                                undefined :
5017 a7dd0415 Kostas Papadimitriou
                                        [];
5018 a7dd0415 Kostas Papadimitriou
                        }
5019 a7dd0415 Kostas Papadimitriou
                };
5020 a7dd0415 Kostas Papadimitriou
5021 a7dd0415 Kostas Papadimitriou
                Expr.filter.ID = function( elem, match ) {
5022 a7dd0415 Kostas Papadimitriou
                        var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
5023 a7dd0415 Kostas Papadimitriou
5024 a7dd0415 Kostas Papadimitriou
                        return elem.nodeType === 1 && node && node.nodeValue === match;
5025 a7dd0415 Kostas Papadimitriou
                };
5026 a7dd0415 Kostas Papadimitriou
        }
5027 a7dd0415 Kostas Papadimitriou
5028 a7dd0415 Kostas Papadimitriou
        root.removeChild( form );
5029 a7dd0415 Kostas Papadimitriou
5030 a7dd0415 Kostas Papadimitriou
        // release memory in IE
5031 a7dd0415 Kostas Papadimitriou
        root = form = null;
5032 a7dd0415 Kostas Papadimitriou
})();
5033 a7dd0415 Kostas Papadimitriou
5034 a7dd0415 Kostas Papadimitriou
(function(){
5035 a7dd0415 Kostas Papadimitriou
        // Check to see if the browser returns only elements
5036 a7dd0415 Kostas Papadimitriou
        // when doing getElementsByTagName("*")
5037 a7dd0415 Kostas Papadimitriou
5038 a7dd0415 Kostas Papadimitriou
        // Create a fake element
5039 a7dd0415 Kostas Papadimitriou
        var div = document.createElement("div");
5040 a7dd0415 Kostas Papadimitriou
        div.appendChild( document.createComment("") );
5041 a7dd0415 Kostas Papadimitriou
5042 a7dd0415 Kostas Papadimitriou
        // Make sure no comments are found
5043 a7dd0415 Kostas Papadimitriou
        if ( div.getElementsByTagName("*").length > 0 ) {
5044 a7dd0415 Kostas Papadimitriou
                Expr.find.TAG = function( match, context ) {
5045 a7dd0415 Kostas Papadimitriou
                        var results = context.getElementsByTagName( match[1] );
5046 a7dd0415 Kostas Papadimitriou
5047 a7dd0415 Kostas Papadimitriou
                        // Filter out possible comments
5048 a7dd0415 Kostas Papadimitriou
                        if ( match[1] === "*" ) {
5049 a7dd0415 Kostas Papadimitriou
                                var tmp = [];
5050 a7dd0415 Kostas Papadimitriou
5051 a7dd0415 Kostas Papadimitriou
                                for ( var i = 0; results[i]; i++ ) {
5052 a7dd0415 Kostas Papadimitriou
                                        if ( results[i].nodeType === 1 ) {
5053 a7dd0415 Kostas Papadimitriou
                                                tmp.push( results[i] );
5054 a7dd0415 Kostas Papadimitriou
                                        }
5055 a7dd0415 Kostas Papadimitriou
                                }
5056 a7dd0415 Kostas Papadimitriou
5057 a7dd0415 Kostas Papadimitriou
                                results = tmp;
5058 a7dd0415 Kostas Papadimitriou
                        }
5059 a7dd0415 Kostas Papadimitriou
5060 a7dd0415 Kostas Papadimitriou
                        return results;
5061 a7dd0415 Kostas Papadimitriou
                };
5062 a7dd0415 Kostas Papadimitriou
        }
5063 a7dd0415 Kostas Papadimitriou
5064 a7dd0415 Kostas Papadimitriou
        // Check to see if an attribute returns normalized href attributes
5065 a7dd0415 Kostas Papadimitriou
        div.innerHTML = "<a href='#'></a>";
5066 a7dd0415 Kostas Papadimitriou
5067 a7dd0415 Kostas Papadimitriou
        if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
5068 a7dd0415 Kostas Papadimitriou
                        div.firstChild.getAttribute("href") !== "#" ) {
5069 a7dd0415 Kostas Papadimitriou
5070 a7dd0415 Kostas Papadimitriou
                Expr.attrHandle.href = function( elem ) {
5071 a7dd0415 Kostas Papadimitriou
                        return elem.getAttribute( "href", 2 );
5072 a7dd0415 Kostas Papadimitriou
                };
5073 a7dd0415 Kostas Papadimitriou
        }
5074 a7dd0415 Kostas Papadimitriou
5075 a7dd0415 Kostas Papadimitriou
        // release memory in IE
5076 a7dd0415 Kostas Papadimitriou
        div = null;
5077 a7dd0415 Kostas Papadimitriou
})();
5078 a7dd0415 Kostas Papadimitriou
5079 a7dd0415 Kostas Papadimitriou
if ( document.querySelectorAll ) {
5080 a7dd0415 Kostas Papadimitriou
        (function(){
5081 a7dd0415 Kostas Papadimitriou
                var oldSizzle = Sizzle,
5082 a7dd0415 Kostas Papadimitriou
                        div = document.createElement("div"),
5083 a7dd0415 Kostas Papadimitriou
                        id = "__sizzle__";
5084 a7dd0415 Kostas Papadimitriou
5085 a7dd0415 Kostas Papadimitriou
                div.innerHTML = "<p class='TEST'></p>";
5086 a7dd0415 Kostas Papadimitriou
5087 a7dd0415 Kostas Papadimitriou
                // Safari can't handle uppercase or unicode characters when
5088 a7dd0415 Kostas Papadimitriou
                // in quirks mode.
5089 a7dd0415 Kostas Papadimitriou
                if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
5090 a7dd0415 Kostas Papadimitriou
                        return;
5091 a7dd0415 Kostas Papadimitriou
                }
5092 18059f42 Kostas Papadimitriou
5093 a7dd0415 Kostas Papadimitriou
                Sizzle = function( query, context, extra, seed ) {
5094 a7dd0415 Kostas Papadimitriou
                        context = context || document;
5095 a7dd0415 Kostas Papadimitriou
5096 a7dd0415 Kostas Papadimitriou
                        // Only use querySelectorAll on non-XML documents
5097 a7dd0415 Kostas Papadimitriou
                        // (ID selectors don't work in non-HTML documents)
5098 a7dd0415 Kostas Papadimitriou
                        if ( !seed && !Sizzle.isXML(context) ) {
5099 a7dd0415 Kostas Papadimitriou
                                // See if we find a selector to speed up
5100 a7dd0415 Kostas Papadimitriou
                                var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
5101 18059f42 Kostas Papadimitriou
5102 a7dd0415 Kostas Papadimitriou
                                if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
5103 a7dd0415 Kostas Papadimitriou
                                        // Speed-up: Sizzle("TAG")
5104 a7dd0415 Kostas Papadimitriou
                                        if ( match[1] ) {
5105 a7dd0415 Kostas Papadimitriou
                                                return makeArray( context.getElementsByTagName( query ), extra );
5106 18059f42 Kostas Papadimitriou
5107 a7dd0415 Kostas Papadimitriou
                                        // Speed-up: Sizzle(".CLASS")
5108 a7dd0415 Kostas Papadimitriou
                                        } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
5109 a7dd0415 Kostas Papadimitriou
                                                return makeArray( context.getElementsByClassName( match[2] ), extra );
5110 a7dd0415 Kostas Papadimitriou
                                        }
5111 a7dd0415 Kostas Papadimitriou
                                }
5112 18059f42 Kostas Papadimitriou
5113 a7dd0415 Kostas Papadimitriou
                                if ( context.nodeType === 9 ) {
5114 a7dd0415 Kostas Papadimitriou
                                        // Speed-up: Sizzle("body")
5115 a7dd0415 Kostas Papadimitriou
                                        // The body element only exists once, optimize finding it
5116 a7dd0415 Kostas Papadimitriou
                                        if ( query === "body" && context.body ) {
5117 a7dd0415 Kostas Papadimitriou
                                                return makeArray( [ context.body ], extra );
5118 18059f42 Kostas Papadimitriou
5119 a7dd0415 Kostas Papadimitriou
                                        // Speed-up: Sizzle("#ID")
5120 a7dd0415 Kostas Papadimitriou
                                        } else if ( match && match[3] ) {
5121 a7dd0415 Kostas Papadimitriou
                                                var elem = context.getElementById( match[3] );
5122 a7dd0415 Kostas Papadimitriou
5123 a7dd0415 Kostas Papadimitriou
                                                // Check parentNode to catch when Blackberry 4.6 returns
5124 a7dd0415 Kostas Papadimitriou
                                                // nodes that are no longer in the document #6963
5125 a7dd0415 Kostas Papadimitriou
                                                if ( elem && elem.parentNode ) {
5126 a7dd0415 Kostas Papadimitriou
                                                        // Handle the case where IE and Opera return items
5127 a7dd0415 Kostas Papadimitriou
                                                        // by name instead of ID
5128 a7dd0415 Kostas Papadimitriou
                                                        if ( elem.id === match[3] ) {
5129 a7dd0415 Kostas Papadimitriou
                                                                return makeArray( [ elem ], extra );
5130 a7dd0415 Kostas Papadimitriou
                                                        }
5131 18059f42 Kostas Papadimitriou
5132 a7dd0415 Kostas Papadimitriou
                                                } else {
5133 a7dd0415 Kostas Papadimitriou
                                                        return makeArray( [], extra );
5134 a7dd0415 Kostas Papadimitriou
                                                }
5135 a7dd0415 Kostas Papadimitriou
                                        }
5136 18059f42 Kostas Papadimitriou
5137 a7dd0415 Kostas Papadimitriou
                                        try {
5138 a7dd0415 Kostas Papadimitriou
                                                return makeArray( context.querySelectorAll(query), extra );
5139 a7dd0415 Kostas Papadimitriou
                                        } catch(qsaError) {}
5140 a7dd0415 Kostas Papadimitriou
5141 a7dd0415 Kostas Papadimitriou
                                // qSA works strangely on Element-rooted queries
5142 a7dd0415 Kostas Papadimitriou
                                // We can work around this by specifying an extra ID on the root
5143 a7dd0415 Kostas Papadimitriou
                                // and working up from there (Thanks to Andrew Dupont for the technique)
5144 a7dd0415 Kostas Papadimitriou
                                // IE 8 doesn't work on object elements
5145 a7dd0415 Kostas Papadimitriou
                                } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
5146 a7dd0415 Kostas Papadimitriou
                                        var oldContext = context,
5147 a7dd0415 Kostas Papadimitriou
                                                old = context.getAttribute( "id" ),
5148 a7dd0415 Kostas Papadimitriou
                                                nid = old || id,
5149 a7dd0415 Kostas Papadimitriou
                                                hasParent = context.parentNode,
5150 a7dd0415 Kostas Papadimitriou
                                                relativeHierarchySelector = /^\s*[+~]/.test( query );
5151 a7dd0415 Kostas Papadimitriou
5152 a7dd0415 Kostas Papadimitriou
                                        if ( !old ) {
5153 a7dd0415 Kostas Papadimitriou
                                                context.setAttribute( "id", nid );
5154 a7dd0415 Kostas Papadimitriou
                                        } else {
5155 a7dd0415 Kostas Papadimitriou
                                                nid = nid.replace( /'/g, "\\$&" );
5156 a7dd0415 Kostas Papadimitriou
                                        }
5157 a7dd0415 Kostas Papadimitriou
                                        if ( relativeHierarchySelector && hasParent ) {
5158 a7dd0415 Kostas Papadimitriou
                                                context = context.parentNode;
5159 a7dd0415 Kostas Papadimitriou
                                        }
5160 a7dd0415 Kostas Papadimitriou
5161 a7dd0415 Kostas Papadimitriou
                                        try {
5162 a7dd0415 Kostas Papadimitriou
                                                if ( !relativeHierarchySelector || hasParent ) {
5163 a7dd0415 Kostas Papadimitriou
                                                        return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
5164 a7dd0415 Kostas Papadimitriou
                                                }
5165 a7dd0415 Kostas Papadimitriou
5166 a7dd0415 Kostas Papadimitriou
                                        } catch(pseudoError) {
5167 a7dd0415 Kostas Papadimitriou
                                        } finally {
5168 a7dd0415 Kostas Papadimitriou
                                                if ( !old ) {
5169 a7dd0415 Kostas Papadimitriou
                                                        oldContext.removeAttribute( "id" );
5170 a7dd0415 Kostas Papadimitriou
                                                }
5171 a7dd0415 Kostas Papadimitriou
                                        }
5172 a7dd0415 Kostas Papadimitriou
                                }
5173 a7dd0415 Kostas Papadimitriou
                        }
5174 18059f42 Kostas Papadimitriou
5175 a7dd0415 Kostas Papadimitriou
                        return oldSizzle(query, context, extra, seed);
5176 a7dd0415 Kostas Papadimitriou
                };
5177 a7dd0415 Kostas Papadimitriou
5178 a7dd0415 Kostas Papadimitriou
                for ( var prop in oldSizzle ) {
5179 a7dd0415 Kostas Papadimitriou
                        Sizzle[ prop ] = oldSizzle[ prop ];
5180 a7dd0415 Kostas Papadimitriou
                }
5181 a7dd0415 Kostas Papadimitriou
5182 a7dd0415 Kostas Papadimitriou
                // release memory in IE
5183 a7dd0415 Kostas Papadimitriou
                div = null;
5184 a7dd0415 Kostas Papadimitriou
        })();
5185 a7dd0415 Kostas Papadimitriou
}
5186 a7dd0415 Kostas Papadimitriou
5187 a7dd0415 Kostas Papadimitriou
(function(){
5188 a7dd0415 Kostas Papadimitriou
        var html = document.documentElement,
5189 a7dd0415 Kostas Papadimitriou
                matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
5190 a7dd0415 Kostas Papadimitriou
5191 a7dd0415 Kostas Papadimitriou
        if ( matches ) {
5192 a7dd0415 Kostas Papadimitriou
                // Check to see if it's possible to do matchesSelector
5193 a7dd0415 Kostas Papadimitriou
                // on a disconnected node (IE 9 fails this)
5194 a7dd0415 Kostas Papadimitriou
                var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
5195 a7dd0415 Kostas Papadimitriou
                        pseudoWorks = false;
5196 a7dd0415 Kostas Papadimitriou
5197 a7dd0415 Kostas Papadimitriou
                try {
5198 a7dd0415 Kostas Papadimitriou
                        // This should fail with an exception
5199 a7dd0415 Kostas Papadimitriou
                        // Gecko does not error, returns false instead
5200 a7dd0415 Kostas Papadimitriou
                        matches.call( document.documentElement, "[test!='']:sizzle" );
5201 18059f42 Kostas Papadimitriou
5202 a7dd0415 Kostas Papadimitriou
                } catch( pseudoError ) {
5203 a7dd0415 Kostas Papadimitriou
                        pseudoWorks = true;
5204 a7dd0415 Kostas Papadimitriou
                }
5205 a7dd0415 Kostas Papadimitriou
5206 a7dd0415 Kostas Papadimitriou
                Sizzle.matchesSelector = function( node, expr ) {
5207 a7dd0415 Kostas Papadimitriou
                        // Make sure that attribute selectors are quoted
5208 a7dd0415 Kostas Papadimitriou
                        expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
5209 a7dd0415 Kostas Papadimitriou
5210 a7dd0415 Kostas Papadimitriou
                        if ( !Sizzle.isXML( node ) ) {
5211 18059f42 Kostas Papadimitriou
                                try {
5212 a7dd0415 Kostas Papadimitriou
                                        if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
5213 a7dd0415 Kostas Papadimitriou
                                                var ret = matches.call( node, expr );
5214 a7dd0415 Kostas Papadimitriou
5215 a7dd0415 Kostas Papadimitriou
                                                // IE 9's matchesSelector returns false on disconnected nodes
5216 a7dd0415 Kostas Papadimitriou
                                                if ( ret || !disconnectedMatch ||
5217 a7dd0415 Kostas Papadimitriou
                                                                // As well, disconnected nodes are said to be in a document
5218 a7dd0415 Kostas Papadimitriou
                                                                // fragment in IE 9, so check for that
5219 a7dd0415 Kostas Papadimitriou
                                                                node.document && node.document.nodeType !== 11 ) {
5220 a7dd0415 Kostas Papadimitriou
                                                        return ret;
5221 a7dd0415 Kostas Papadimitriou
                                                }
5222 a7dd0415 Kostas Papadimitriou
                                        }
5223 a7dd0415 Kostas Papadimitriou
                                } catch(e) {}
5224 a7dd0415 Kostas Papadimitriou
                        }
5225 a7dd0415 Kostas Papadimitriou
5226 a7dd0415 Kostas Papadimitriou
                        return Sizzle(expr, null, null, [node]).length > 0;
5227 a7dd0415 Kostas Papadimitriou
                };
5228 a7dd0415 Kostas Papadimitriou
        }
5229 a7dd0415 Kostas Papadimitriou
})();
5230 a7dd0415 Kostas Papadimitriou
5231 a7dd0415 Kostas Papadimitriou
(function(){
5232 a7dd0415 Kostas Papadimitriou
        var div = document.createElement("div");
5233 a7dd0415 Kostas Papadimitriou
5234 a7dd0415 Kostas Papadimitriou
        div.innerHTML = "<div class='test e'></div><div class='test'></div>";
5235 a7dd0415 Kostas Papadimitriou
5236 a7dd0415 Kostas Papadimitriou
        // Opera can't find a second classname (in 9.6)
5237 a7dd0415 Kostas Papadimitriou
        // Also, make sure that getElementsByClassName actually exists
5238 a7dd0415 Kostas Papadimitriou
        if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
5239 a7dd0415 Kostas Papadimitriou
                return;
5240 a7dd0415 Kostas Papadimitriou
        }
5241 a7dd0415 Kostas Papadimitriou
5242 a7dd0415 Kostas Papadimitriou
        // Safari caches class attributes, doesn't catch changes (in 3.2)
5243 a7dd0415 Kostas Papadimitriou
        div.lastChild.className = "e";
5244 a7dd0415 Kostas Papadimitriou
5245 a7dd0415 Kostas Papadimitriou
        if ( div.getElementsByClassName("e").length === 1 ) {
5246 a7dd0415 Kostas Papadimitriou
                return;
5247 a7dd0415 Kostas Papadimitriou
        }
5248 18059f42 Kostas Papadimitriou
5249 a7dd0415 Kostas Papadimitriou
        Expr.order.splice(1, 0, "CLASS");
5250 a7dd0415 Kostas Papadimitriou
        Expr.find.CLASS = function( match, context, isXML ) {
5251 a7dd0415 Kostas Papadimitriou
                if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
5252 a7dd0415 Kostas Papadimitriou
                        return context.getElementsByClassName(match[1]);
5253 a7dd0415 Kostas Papadimitriou
                }
5254 a7dd0415 Kostas Papadimitriou
        };
5255 a7dd0415 Kostas Papadimitriou
5256 a7dd0415 Kostas Papadimitriou
        // release memory in IE
5257 a7dd0415 Kostas Papadimitriou
        div = null;
5258 a7dd0415 Kostas Papadimitriou
})();
5259 a7dd0415 Kostas Papadimitriou
5260 a7dd0415 Kostas Papadimitriou
function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
5261 a7dd0415 Kostas Papadimitriou
        for ( var i = 0, l = checkSet.length; i < l; i++ ) {
5262 a7dd0415 Kostas Papadimitriou
                var elem = checkSet[i];
5263 a7dd0415 Kostas Papadimitriou
5264 a7dd0415 Kostas Papadimitriou
                if ( elem ) {
5265 a7dd0415 Kostas Papadimitriou
                        var match = false;
5266 a7dd0415 Kostas Papadimitriou
5267 a7dd0415 Kostas Papadimitriou
                        elem = elem[dir];
5268 a7dd0415 Kostas Papadimitriou
5269 a7dd0415 Kostas Papadimitriou
                        while ( elem ) {
5270 a7dd0415 Kostas Papadimitriou
                                if ( elem[ expando ] === doneName ) {
5271 a7dd0415 Kostas Papadimitriou
                                        match = checkSet[elem.sizset];
5272 a7dd0415 Kostas Papadimitriou
                                        break;
5273 a7dd0415 Kostas Papadimitriou
                                }
5274 a7dd0415 Kostas Papadimitriou
5275 a7dd0415 Kostas Papadimitriou
                                if ( elem.nodeType === 1 && !isXML ){
5276 a7dd0415 Kostas Papadimitriou
                                        elem[ expando ] = doneName;
5277 a7dd0415 Kostas Papadimitriou
                                        elem.sizset = i;
5278 a7dd0415 Kostas Papadimitriou
                                }
5279 a7dd0415 Kostas Papadimitriou
5280 a7dd0415 Kostas Papadimitriou
                                if ( elem.nodeName.toLowerCase() === cur ) {
5281 a7dd0415 Kostas Papadimitriou
                                        match = elem;
5282 a7dd0415 Kostas Papadimitriou
                                        break;
5283 a7dd0415 Kostas Papadimitriou
                                }
5284 a7dd0415 Kostas Papadimitriou
5285 a7dd0415 Kostas Papadimitriou
                                elem = elem[dir];
5286 a7dd0415 Kostas Papadimitriou
                        }
5287 a7dd0415 Kostas Papadimitriou
5288 a7dd0415 Kostas Papadimitriou
                        checkSet[i] = match;
5289 a7dd0415 Kostas Papadimitriou
                }
5290 a7dd0415 Kostas Papadimitriou
        }
5291 a7dd0415 Kostas Papadimitriou
}
5292 a7dd0415 Kostas Papadimitriou
5293 a7dd0415 Kostas Papadimitriou
function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
5294 a7dd0415 Kostas Papadimitriou
        for ( var i = 0, l = checkSet.length; i < l; i++ ) {
5295 a7dd0415 Kostas Papadimitriou
                var elem = checkSet[i];
5296 a7dd0415 Kostas Papadimitriou
5297 a7dd0415 Kostas Papadimitriou
                if ( elem ) {
5298 a7dd0415 Kostas Papadimitriou
                        var match = false;
5299 18059f42 Kostas Papadimitriou
5300 a7dd0415 Kostas Papadimitriou
                        elem = elem[dir];
5301 a7dd0415 Kostas Papadimitriou
5302 a7dd0415 Kostas Papadimitriou
                        while ( elem ) {
5303 a7dd0415 Kostas Papadimitriou
                                if ( elem[ expando ] === doneName ) {
5304 a7dd0415 Kostas Papadimitriou
                                        match = checkSet[elem.sizset];
5305 a7dd0415 Kostas Papadimitriou
                                        break;
5306 a7dd0415 Kostas Papadimitriou
                                }
5307 a7dd0415 Kostas Papadimitriou
5308 a7dd0415 Kostas Papadimitriou
                                if ( elem.nodeType === 1 ) {
5309 a7dd0415 Kostas Papadimitriou
                                        if ( !isXML ) {
5310 a7dd0415 Kostas Papadimitriou
                                                elem[ expando ] = doneName;
5311 a7dd0415 Kostas Papadimitriou
                                                elem.sizset = i;
5312 a7dd0415 Kostas Papadimitriou
                                        }
5313 a7dd0415 Kostas Papadimitriou
5314 a7dd0415 Kostas Papadimitriou
                                        if ( typeof cur !== "string" ) {
5315 a7dd0415 Kostas Papadimitriou
                                                if ( elem === cur ) {
5316 a7dd0415 Kostas Papadimitriou
                                                        match = true;
5317 a7dd0415 Kostas Papadimitriou
                                                        break;
5318 a7dd0415 Kostas Papadimitriou
                                                }
5319 a7dd0415 Kostas Papadimitriou
5320 a7dd0415 Kostas Papadimitriou
                                        } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
5321 a7dd0415 Kostas Papadimitriou
                                                match = elem;
5322 a7dd0415 Kostas Papadimitriou
                                                break;
5323 a7dd0415 Kostas Papadimitriou
                                        }
5324 a7dd0415 Kostas Papadimitriou
                                }
5325 a7dd0415 Kostas Papadimitriou
5326 a7dd0415 Kostas Papadimitriou
                                elem = elem[dir];
5327 a7dd0415 Kostas Papadimitriou
                        }
5328 a7dd0415 Kostas Papadimitriou
5329 a7dd0415 Kostas Papadimitriou
                        checkSet[i] = match;
5330 a7dd0415 Kostas Papadimitriou
                }
5331 a7dd0415 Kostas Papadimitriou
        }
5332 a7dd0415 Kostas Papadimitriou
}
5333 a7dd0415 Kostas Papadimitriou
5334 a7dd0415 Kostas Papadimitriou
if ( document.documentElement.contains ) {
5335 a7dd0415 Kostas Papadimitriou
        Sizzle.contains = function( a, b ) {
5336 a7dd0415 Kostas Papadimitriou
                return a !== b && (a.contains ? a.contains(b) : true);
5337 a7dd0415 Kostas Papadimitriou
        };
5338 a7dd0415 Kostas Papadimitriou
5339 a7dd0415 Kostas Papadimitriou
} else if ( document.documentElement.compareDocumentPosition ) {
5340 a7dd0415 Kostas Papadimitriou
        Sizzle.contains = function( a, b ) {
5341 a7dd0415 Kostas Papadimitriou
                return !!(a.compareDocumentPosition(b) & 16);
5342 a7dd0415 Kostas Papadimitriou
        };
5343 a7dd0415 Kostas Papadimitriou
5344 a7dd0415 Kostas Papadimitriou
} else {
5345 a7dd0415 Kostas Papadimitriou
        Sizzle.contains = function() {
5346 a7dd0415 Kostas Papadimitriou
                return false;
5347 a7dd0415 Kostas Papadimitriou
        };
5348 a7dd0415 Kostas Papadimitriou
}
5349 a7dd0415 Kostas Papadimitriou
5350 a7dd0415 Kostas Papadimitriou
Sizzle.isXML = function( elem ) {
5351 a7dd0415 Kostas Papadimitriou
        // documentElement is verified for cases where it doesn't yet exist
5352 18059f42 Kostas Papadimitriou
        // (such as loading iframes in IE - #4833)
5353 a7dd0415 Kostas Papadimitriou
        var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
5354 a7dd0415 Kostas Papadimitriou
5355 a7dd0415 Kostas Papadimitriou
        return documentElement ? documentElement.nodeName !== "HTML" : false;
5356 a7dd0415 Kostas Papadimitriou
};
5357 a7dd0415 Kostas Papadimitriou
5358 a7dd0415 Kostas Papadimitriou
var posProcess = function( selector, context, seed ) {
5359 a7dd0415 Kostas Papadimitriou
        var match,
5360 a7dd0415 Kostas Papadimitriou
                tmpSet = [],
5361 a7dd0415 Kostas Papadimitriou
                later = "",
5362 a7dd0415 Kostas Papadimitriou
                root = context.nodeType ? [context] : context;
5363 a7dd0415 Kostas Papadimitriou
5364 a7dd0415 Kostas Papadimitriou
        // Position selectors must be done after the filter
5365 a7dd0415 Kostas Papadimitriou
        // And so must :not(positional) so we move all PSEUDOs to the end
5366 a7dd0415 Kostas Papadimitriou
        while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
5367 a7dd0415 Kostas Papadimitriou
                later += match[0];
5368 a7dd0415 Kostas Papadimitriou
                selector = selector.replace( Expr.match.PSEUDO, "" );
5369 a7dd0415 Kostas Papadimitriou
        }
5370 a7dd0415 Kostas Papadimitriou
5371 a7dd0415 Kostas Papadimitriou
        selector = Expr.relative[selector] ? selector + "*" : selector;
5372 a7dd0415 Kostas Papadimitriou
5373 a7dd0415 Kostas Papadimitriou
        for ( var i = 0, l = root.length; i < l; i++ ) {
5374 a7dd0415 Kostas Papadimitriou
                Sizzle( selector, root[i], tmpSet, seed );
5375 a7dd0415 Kostas Papadimitriou
        }
5376 a7dd0415 Kostas Papadimitriou
5377 a7dd0415 Kostas Papadimitriou
        return Sizzle.filter( later, tmpSet );
5378 a7dd0415 Kostas Papadimitriou
};
5379 a7dd0415 Kostas Papadimitriou
5380 a7dd0415 Kostas Papadimitriou
// EXPOSE
5381 a7dd0415 Kostas Papadimitriou
// Override sizzle attribute retrieval
5382 a7dd0415 Kostas Papadimitriou
Sizzle.attr = jQuery.attr;
5383 a7dd0415 Kostas Papadimitriou
Sizzle.selectors.attrMap = {};
5384 a7dd0415 Kostas Papadimitriou
jQuery.find = Sizzle;
5385 a7dd0415 Kostas Papadimitriou
jQuery.expr = Sizzle.selectors;
5386 a7dd0415 Kostas Papadimitriou
jQuery.expr[":"] = jQuery.expr.filters;
5387 a7dd0415 Kostas Papadimitriou
jQuery.unique = Sizzle.uniqueSort;
5388 a7dd0415 Kostas Papadimitriou
jQuery.text = Sizzle.getText;
5389 a7dd0415 Kostas Papadimitriou
jQuery.isXMLDoc = Sizzle.isXML;
5390 a7dd0415 Kostas Papadimitriou
jQuery.contains = Sizzle.contains;
5391 a7dd0415 Kostas Papadimitriou
5392 a7dd0415 Kostas Papadimitriou
5393 a7dd0415 Kostas Papadimitriou
})();
5394 a7dd0415 Kostas Papadimitriou
5395 a7dd0415 Kostas Papadimitriou
5396 a7dd0415 Kostas Papadimitriou
var runtil = /Until$/,
5397 a7dd0415 Kostas Papadimitriou
        rparentsprev = /^(?:parents|prevUntil|prevAll)/,
5398 a7dd0415 Kostas Papadimitriou
        // Note: This RegExp should be improved, or likely pulled from Sizzle
5399 a7dd0415 Kostas Papadimitriou
        rmultiselector = /,/,
5400 a7dd0415 Kostas Papadimitriou
        isSimple = /^.[^:#\[\.,]*$/,
5401 a7dd0415 Kostas Papadimitriou
        slice = Array.prototype.slice,
5402 18059f42 Kostas Papadimitriou
        POS = jQuery.expr.match.globalPOS,
5403 a7dd0415 Kostas Papadimitriou
        // methods guaranteed to produce a unique set when starting from a unique set
5404 a7dd0415 Kostas Papadimitriou
        guaranteedUnique = {
5405 a7dd0415 Kostas Papadimitriou
                children: true,
5406 a7dd0415 Kostas Papadimitriou
                contents: true,
5407 a7dd0415 Kostas Papadimitriou
                next: true,
5408 a7dd0415 Kostas Papadimitriou
                prev: true
5409 a7dd0415 Kostas Papadimitriou
        };
5410 a7dd0415 Kostas Papadimitriou
5411 a7dd0415 Kostas Papadimitriou
jQuery.fn.extend({
5412 a7dd0415 Kostas Papadimitriou
        find: function( selector ) {
5413 a7dd0415 Kostas Papadimitriou
                var self = this,
5414 a7dd0415 Kostas Papadimitriou
                        i, l;
5415 a7dd0415 Kostas Papadimitriou
5416 a7dd0415 Kostas Papadimitriou
                if ( typeof selector !== "string" ) {
5417 a7dd0415 Kostas Papadimitriou
                        return jQuery( selector ).filter(function() {
5418 a7dd0415 Kostas Papadimitriou
                                for ( i = 0, l = self.length; i < l; i++ ) {
5419 a7dd0415 Kostas Papadimitriou
                                        if ( jQuery.contains( self[ i ], this ) ) {
5420 a7dd0415 Kostas Papadimitriou
                                                return true;
5421 a7dd0415 Kostas Papadimitriou
                                        }
5422 a7dd0415 Kostas Papadimitriou
                                }
5423 a7dd0415 Kostas Papadimitriou
                        });
5424 a7dd0415 Kostas Papadimitriou
                }
5425 a7dd0415 Kostas Papadimitriou
5426 a7dd0415 Kostas Papadimitriou
                var ret = this.pushStack( "", "find", selector ),
5427 a7dd0415 Kostas Papadimitriou
                        length, n, r;
5428 a7dd0415 Kostas Papadimitriou
5429 a7dd0415 Kostas Papadimitriou
                for ( i = 0, l = this.length; i < l; i++ ) {
5430 a7dd0415 Kostas Papadimitriou
                        length = ret.length;
5431 a7dd0415 Kostas Papadimitriou
                        jQuery.find( selector, this[i], ret );
5432 a7dd0415 Kostas Papadimitriou
5433 a7dd0415 Kostas Papadimitriou
                        if ( i > 0 ) {
5434 a7dd0415 Kostas Papadimitriou
                                // Make sure that the results are unique
5435 a7dd0415 Kostas Papadimitriou
                                for ( n = length; n < ret.length; n++ ) {
5436 a7dd0415 Kostas Papadimitriou
                                        for ( r = 0; r < length; r++ ) {
5437 a7dd0415 Kostas Papadimitriou
                                                if ( ret[r] === ret[n] ) {
5438 a7dd0415 Kostas Papadimitriou
                                                        ret.splice(n--, 1);
5439 a7dd0415 Kostas Papadimitriou
                                                        break;
5440 a7dd0415 Kostas Papadimitriou
                                                }
5441 a7dd0415 Kostas Papadimitriou
                                        }
5442 a7dd0415 Kostas Papadimitriou
                                }
5443 a7dd0415 Kostas Papadimitriou
                        }
5444 a7dd0415 Kostas Papadimitriou
                }
5445 a7dd0415 Kostas Papadimitriou
5446 a7dd0415 Kostas Papadimitriou
                return ret;
5447 a7dd0415 Kostas Papadimitriou
        },
5448 a7dd0415 Kostas Papadimitriou
5449 a7dd0415 Kostas Papadimitriou
        has: function( target ) {
5450 a7dd0415 Kostas Papadimitriou
                var targets = jQuery( target );
5451 a7dd0415 Kostas Papadimitriou
                return this.filter(function() {
5452 a7dd0415 Kostas Papadimitriou
                        for ( var i = 0, l = targets.length; i < l; i++ ) {
5453 a7dd0415 Kostas Papadimitriou
                                if ( jQuery.contains( this, targets[i] ) ) {
5454 a7dd0415 Kostas Papadimitriou
                                        return true;
5455 a7dd0415 Kostas Papadimitriou
                                }
5456 a7dd0415 Kostas Papadimitriou
                        }
5457 a7dd0415 Kostas Papadimitriou
                });
5458 a7dd0415 Kostas Papadimitriou
        },
5459 a7dd0415 Kostas Papadimitriou
5460 a7dd0415 Kostas Papadimitriou
        not: function( selector ) {
5461 a7dd0415 Kostas Papadimitriou
                return this.pushStack( winnow(this, selector, false), "not", selector);
5462 a7dd0415 Kostas Papadimitriou
        },
5463 a7dd0415 Kostas Papadimitriou
5464 a7dd0415 Kostas Papadimitriou
        filter: function( selector ) {
5465 a7dd0415 Kostas Papadimitriou
                return this.pushStack( winnow(this, selector, true), "filter", selector );
5466 a7dd0415 Kostas Papadimitriou
        },
5467 a7dd0415 Kostas Papadimitriou
5468 a7dd0415 Kostas Papadimitriou
        is: function( selector ) {
5469 18059f42 Kostas Papadimitriou
                return !!selector && (
5470 a7dd0415 Kostas Papadimitriou
                        typeof selector === "string" ?
5471 a7dd0415 Kostas Papadimitriou
                                // If this is a positional selector, check membership in the returned set
5472 a7dd0415 Kostas Papadimitriou
                                // so $("p:first").is("p:last") won't return true for a doc with two "p".
5473 18059f42 Kostas Papadimitriou
                                POS.test( selector ) ?
5474 a7dd0415 Kostas Papadimitriou
                                        jQuery( selector, this.context ).index( this[0] ) >= 0 :
5475 a7dd0415 Kostas Papadimitriou
                                        jQuery.filter( selector, this ).length > 0 :
5476 a7dd0415 Kostas Papadimitriou
                                this.filter( selector ).length > 0 );
5477 a7dd0415 Kostas Papadimitriou
        },
5478 a7dd0415 Kostas Papadimitriou
5479 a7dd0415 Kostas Papadimitriou
        closest: function( selectors, context ) {
5480 a7dd0415 Kostas Papadimitriou
                var ret = [], i, l, cur = this[0];
5481 18059f42 Kostas Papadimitriou
5482 a7dd0415 Kostas Papadimitriou
                // Array (deprecated as of jQuery 1.7)
5483 a7dd0415 Kostas Papadimitriou
                if ( jQuery.isArray( selectors ) ) {
5484 a7dd0415 Kostas Papadimitriou
                        var level = 1;
5485 a7dd0415 Kostas Papadimitriou
5486 a7dd0415 Kostas Papadimitriou
                        while ( cur && cur.ownerDocument && cur !== context ) {
5487 a7dd0415 Kostas Papadimitriou
                                for ( i = 0; i < selectors.length; i++ ) {
5488 a7dd0415 Kostas Papadimitriou
5489 a7dd0415 Kostas Papadimitriou
                                        if ( jQuery( cur ).is( selectors[ i ] ) ) {
5490 a7dd0415 Kostas Papadimitriou
                                                ret.push({ selector: selectors[ i ], elem: cur, level: level });
5491 a7dd0415 Kostas Papadimitriou
                                        }
5492 a7dd0415 Kostas Papadimitriou
                                }
5493 a7dd0415 Kostas Papadimitriou
5494 a7dd0415 Kostas Papadimitriou
                                cur = cur.parentNode;
5495 a7dd0415 Kostas Papadimitriou
                                level++;
5496 a7dd0415 Kostas Papadimitriou
                        }
5497 a7dd0415 Kostas Papadimitriou
5498 a7dd0415 Kostas Papadimitriou
                        return ret;
5499 a7dd0415 Kostas Papadimitriou
                }
5500 a7dd0415 Kostas Papadimitriou
5501 a7dd0415 Kostas Papadimitriou
                // String
5502 a7dd0415 Kostas Papadimitriou
                var pos = POS.test( selectors ) || typeof selectors !== "string" ?
5503 a7dd0415 Kostas Papadimitriou
                                jQuery( selectors, context || this.context ) :
5504 a7dd0415 Kostas Papadimitriou
                                0;
5505 a7dd0415 Kostas Papadimitriou
5506 a7dd0415 Kostas Papadimitriou
                for ( i = 0, l = this.length; i < l; i++ ) {
5507 a7dd0415 Kostas Papadimitriou
                        cur = this[i];
5508 a7dd0415 Kostas Papadimitriou
5509 a7dd0415 Kostas Papadimitriou
                        while ( cur ) {
5510 a7dd0415 Kostas Papadimitriou
                                if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
5511 a7dd0415 Kostas Papadimitriou
                                        ret.push( cur );
5512 a7dd0415 Kostas Papadimitriou
                                        break;
5513 a7dd0415 Kostas Papadimitriou
5514 a7dd0415 Kostas Papadimitriou
                                } else {
5515 a7dd0415 Kostas Papadimitriou
                                        cur = cur.parentNode;
5516 a7dd0415 Kostas Papadimitriou
                                        if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
5517 a7dd0415 Kostas Papadimitriou
                                                break;
5518 a7dd0415 Kostas Papadimitriou
                                        }
5519 a7dd0415 Kostas Papadimitriou
                                }
5520 a7dd0415 Kostas Papadimitriou
                        }
5521 a7dd0415 Kostas Papadimitriou
                }
5522 a7dd0415 Kostas Papadimitriou
5523 a7dd0415 Kostas Papadimitriou
                ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
5524 a7dd0415 Kostas Papadimitriou
5525 a7dd0415 Kostas Papadimitriou
                return this.pushStack( ret, "closest", selectors );
5526 a7dd0415 Kostas Papadimitriou
        },
5527 a7dd0415 Kostas Papadimitriou
5528 a7dd0415 Kostas Papadimitriou
        // Determine the position of an element within
5529 a7dd0415 Kostas Papadimitriou
        // the matched set of elements
5530 a7dd0415 Kostas Papadimitriou
        index: function( elem ) {
5531 a7dd0415 Kostas Papadimitriou
5532 a7dd0415 Kostas Papadimitriou
                // No argument, return index in parent
5533 a7dd0415 Kostas Papadimitriou
                if ( !elem ) {
5534 a7dd0415 Kostas Papadimitriou
                        return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
5535 a7dd0415 Kostas Papadimitriou
                }
5536 a7dd0415 Kostas Papadimitriou
5537 a7dd0415 Kostas Papadimitriou
                // index in selector
5538 a7dd0415 Kostas Papadimitriou
                if ( typeof elem === "string" ) {
5539 a7dd0415 Kostas Papadimitriou
                        return jQuery.inArray( this[0], jQuery( elem ) );
5540 a7dd0415 Kostas Papadimitriou
                }
5541 a7dd0415 Kostas Papadimitriou
5542 a7dd0415 Kostas Papadimitriou
                // Locate the position of the desired element
5543 a7dd0415 Kostas Papadimitriou
                return jQuery.inArray(
5544 a7dd0415 Kostas Papadimitriou
                        // If it receives a jQuery object, the first element is used
5545 a7dd0415 Kostas Papadimitriou
                        elem.jquery ? elem[0] : elem, this );
5546 a7dd0415 Kostas Papadimitriou
        },
5547 a7dd0415 Kostas Papadimitriou
5548 a7dd0415 Kostas Papadimitriou
        add: function( selector, context ) {
5549 a7dd0415 Kostas Papadimitriou
                var set = typeof selector === "string" ?
5550 a7dd0415 Kostas Papadimitriou
                                jQuery( selector, context ) :
5551 a7dd0415 Kostas Papadimitriou
                                jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
5552 a7dd0415 Kostas Papadimitriou
                        all = jQuery.merge( this.get(), set );
5553 a7dd0415 Kostas Papadimitriou
5554 a7dd0415 Kostas Papadimitriou
                return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
5555 a7dd0415 Kostas Papadimitriou
                        all :
5556 a7dd0415 Kostas Papadimitriou
                        jQuery.unique( all ) );
5557 a7dd0415 Kostas Papadimitriou
        },
5558 a7dd0415 Kostas Papadimitriou
5559 a7dd0415 Kostas Papadimitriou
        andSelf: function() {
5560 a7dd0415 Kostas Papadimitriou
                return this.add( this.prevObject );
5561 a7dd0415 Kostas Papadimitriou
        }
5562 a7dd0415 Kostas Papadimitriou
});
5563 a7dd0415 Kostas Papadimitriou
5564 a7dd0415 Kostas Papadimitriou
// A painfully simple check to see if an element is disconnected
5565 a7dd0415 Kostas Papadimitriou
// from a document (should be improved, where feasible).
5566 a7dd0415 Kostas Papadimitriou
function isDisconnected( node ) {
5567 a7dd0415 Kostas Papadimitriou
        return !node || !node.parentNode || node.parentNode.nodeType === 11;
5568 a7dd0415 Kostas Papadimitriou
}
5569 a7dd0415 Kostas Papadimitriou
5570 a7dd0415 Kostas Papadimitriou
jQuery.each({
5571 a7dd0415 Kostas Papadimitriou
        parent: function( elem ) {
5572 a7dd0415 Kostas Papadimitriou
                var parent = elem.parentNode;
5573 a7dd0415 Kostas Papadimitriou
                return parent && parent.nodeType !== 11 ? parent : null;
5574 a7dd0415 Kostas Papadimitriou
        },
5575 a7dd0415 Kostas Papadimitriou
        parents: function( elem ) {
5576 a7dd0415 Kostas Papadimitriou
                return jQuery.dir( elem, "parentNode" );
5577 a7dd0415 Kostas Papadimitriou
        },
5578 a7dd0415 Kostas Papadimitriou
        parentsUntil: function( elem, i, until ) {
5579 a7dd0415 Kostas Papadimitriou
                return jQuery.dir( elem, "parentNode", until );
5580 a7dd0415 Kostas Papadimitriou
        },
5581 a7dd0415 Kostas Papadimitriou
        next: function( elem ) {
5582 a7dd0415 Kostas Papadimitriou
                return jQuery.nth( elem, 2, "nextSibling" );
5583 a7dd0415 Kostas Papadimitriou
        },
5584 a7dd0415 Kostas Papadimitriou
        prev: function( elem ) {
5585 a7dd0415 Kostas Papadimitriou
                return jQuery.nth( elem, 2, "previousSibling" );
5586 a7dd0415 Kostas Papadimitriou
        },
5587 a7dd0415 Kostas Papadimitriou
        nextAll: function( elem ) {
5588 a7dd0415 Kostas Papadimitriou
                return jQuery.dir( elem, "nextSibling" );
5589 a7dd0415 Kostas Papadimitriou
        },
5590 a7dd0415 Kostas Papadimitriou
        prevAll: function( elem ) {
5591 a7dd0415 Kostas Papadimitriou
                return jQuery.dir( elem, "previousSibling" );
5592 a7dd0415 Kostas Papadimitriou
        },
5593 a7dd0415 Kostas Papadimitriou
        nextUntil: function( elem, i, until ) {
5594 a7dd0415 Kostas Papadimitriou
                return jQuery.dir( elem, "nextSibling", until );
5595 a7dd0415 Kostas Papadimitriou
        },
5596 a7dd0415 Kostas Papadimitriou
        prevUntil: function( elem, i, until ) {
5597 a7dd0415 Kostas Papadimitriou
                return jQuery.dir( elem, "previousSibling", until );
5598 a7dd0415 Kostas Papadimitriou
        },
5599 a7dd0415 Kostas Papadimitriou
        siblings: function( elem ) {
5600 18059f42 Kostas Papadimitriou
                return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
5601 a7dd0415 Kostas Papadimitriou
        },
5602 a7dd0415 Kostas Papadimitriou
        children: function( elem ) {
5603 a7dd0415 Kostas Papadimitriou
                return jQuery.sibling( elem.firstChild );
5604 a7dd0415 Kostas Papadimitriou
        },
5605 a7dd0415 Kostas Papadimitriou
        contents: function( elem ) {
5606 a7dd0415 Kostas Papadimitriou
                return jQuery.nodeName( elem, "iframe" ) ?
5607 a7dd0415 Kostas Papadimitriou
                        elem.contentDocument || elem.contentWindow.document :
5608 a7dd0415 Kostas Papadimitriou
                        jQuery.makeArray( elem.childNodes );
5609 a7dd0415 Kostas Papadimitriou
        }
5610 a7dd0415 Kostas Papadimitriou
}, function( name, fn ) {
5611 a7dd0415 Kostas Papadimitriou
        jQuery.fn[ name ] = function( until, selector ) {
5612 a7dd0415 Kostas Papadimitriou
                var ret = jQuery.map( this, fn, until );
5613 a7dd0415 Kostas Papadimitriou
5614 a7dd0415 Kostas Papadimitriou
                if ( !runtil.test( name ) ) {
5615 a7dd0415 Kostas Papadimitriou
                        selector = until;
5616 a7dd0415 Kostas Papadimitriou
                }
5617 a7dd0415 Kostas Papadimitriou
5618 a7dd0415 Kostas Papadimitriou
                if ( selector && typeof selector === "string" ) {
5619 a7dd0415 Kostas Papadimitriou
                        ret = jQuery.filter( selector, ret );
5620 a7dd0415 Kostas Papadimitriou
                }
5621 a7dd0415 Kostas Papadimitriou
5622 a7dd0415 Kostas Papadimitriou
                ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
5623 a7dd0415 Kostas Papadimitriou
5624 a7dd0415 Kostas Papadimitriou
                if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
5625 a7dd0415 Kostas Papadimitriou
                        ret = ret.reverse();
5626 a7dd0415 Kostas Papadimitriou
                }
5627 a7dd0415 Kostas Papadimitriou
5628 a7dd0415 Kostas Papadimitriou
                return this.pushStack( ret, name, slice.call( arguments ).join(",") );
5629 a7dd0415 Kostas Papadimitriou
        };
5630 a7dd0415 Kostas Papadimitriou
});
5631 a7dd0415 Kostas Papadimitriou
5632 a7dd0415 Kostas Papadimitriou
jQuery.extend({
5633 a7dd0415 Kostas Papadimitriou
        filter: function( expr, elems, not ) {
5634 a7dd0415 Kostas Papadimitriou
                if ( not ) {
5635 a7dd0415 Kostas Papadimitriou
                        expr = ":not(" + expr + ")";
5636 a7dd0415 Kostas Papadimitriou
                }
5637 a7dd0415 Kostas Papadimitriou
5638 a7dd0415 Kostas Papadimitriou
                return elems.length === 1 ?
5639 a7dd0415 Kostas Papadimitriou
                        jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
5640 a7dd0415 Kostas Papadimitriou
                        jQuery.find.matches(expr, elems);
5641 a7dd0415 Kostas Papadimitriou
        },
5642 a7dd0415 Kostas Papadimitriou
5643 a7dd0415 Kostas Papadimitriou
        dir: function( elem, dir, until ) {
5644 a7dd0415 Kostas Papadimitriou
                var matched = [],
5645 a7dd0415 Kostas Papadimitriou
                        cur = elem[ dir ];
5646 a7dd0415 Kostas Papadimitriou
5647 a7dd0415 Kostas Papadimitriou
                while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
5648 a7dd0415 Kostas Papadimitriou
                        if ( cur.nodeType === 1 ) {
5649 a7dd0415 Kostas Papadimitriou
                                matched.push( cur );
5650 a7dd0415 Kostas Papadimitriou
                        }
5651 a7dd0415 Kostas Papadimitriou
                        cur = cur[dir];
5652 a7dd0415 Kostas Papadimitriou
                }
5653 a7dd0415 Kostas Papadimitriou
                return matched;
5654 a7dd0415 Kostas Papadimitriou
        },
5655 a7dd0415 Kostas Papadimitriou
5656 a7dd0415 Kostas Papadimitriou
        nth: function( cur, result, dir, elem ) {
5657 a7dd0415 Kostas Papadimitriou
                result = result || 1;
5658 a7dd0415 Kostas Papadimitriou
                var num = 0;
5659 a7dd0415 Kostas Papadimitriou
5660 a7dd0415 Kostas Papadimitriou
                for ( ; cur; cur = cur[dir] ) {
5661 a7dd0415 Kostas Papadimitriou
                        if ( cur.nodeType === 1 && ++num === result ) {
5662 a7dd0415 Kostas Papadimitriou
                                break;
5663 a7dd0415 Kostas Papadimitriou
                        }
5664 a7dd0415 Kostas Papadimitriou
                }
5665 a7dd0415 Kostas Papadimitriou
5666 a7dd0415 Kostas Papadimitriou
                return cur;
5667 a7dd0415 Kostas Papadimitriou
        },
5668 a7dd0415 Kostas Papadimitriou
5669 a7dd0415 Kostas Papadimitriou
        sibling: function( n, elem ) {
5670 a7dd0415 Kostas Papadimitriou
                var r = [];
5671 a7dd0415 Kostas Papadimitriou
5672 a7dd0415 Kostas Papadimitriou
                for ( ; n; n = n.nextSibling ) {
5673 a7dd0415 Kostas Papadimitriou
                        if ( n.nodeType === 1 && n !== elem ) {
5674 a7dd0415 Kostas Papadimitriou
                                r.push( n );
5675 a7dd0415 Kostas Papadimitriou
                        }
5676 a7dd0415 Kostas Papadimitriou
                }
5677 a7dd0415 Kostas Papadimitriou
5678 a7dd0415 Kostas Papadimitriou
                return r;
5679 a7dd0415 Kostas Papadimitriou
        }
5680 a7dd0415 Kostas Papadimitriou
});
5681 a7dd0415 Kostas Papadimitriou
5682 a7dd0415 Kostas Papadimitriou
// Implement the identical functionality for filter and not
5683 a7dd0415 Kostas Papadimitriou
function winnow( elements, qualifier, keep ) {
5684 a7dd0415 Kostas Papadimitriou
5685 a7dd0415 Kostas Papadimitriou
        // Can't pass null or undefined to indexOf in Firefox 4
5686 a7dd0415 Kostas Papadimitriou
        // Set to 0 to skip string check
5687 a7dd0415 Kostas Papadimitriou
        qualifier = qualifier || 0;
5688 a7dd0415 Kostas Papadimitriou
5689 a7dd0415 Kostas Papadimitriou
        if ( jQuery.isFunction( qualifier ) ) {
5690 a7dd0415 Kostas Papadimitriou
                return jQuery.grep(elements, function( elem, i ) {
5691 a7dd0415 Kostas Papadimitriou
                        var retVal = !!qualifier.call( elem, i, elem );
5692 a7dd0415 Kostas Papadimitriou
                        return retVal === keep;
5693 a7dd0415 Kostas Papadimitriou
                });
5694 a7dd0415 Kostas Papadimitriou
5695 a7dd0415 Kostas Papadimitriou
        } else if ( qualifier.nodeType ) {
5696 a7dd0415 Kostas Papadimitriou
                return jQuery.grep(elements, function( elem, i ) {
5697 a7dd0415 Kostas Papadimitriou
                        return ( elem === qualifier ) === keep;
5698 a7dd0415 Kostas Papadimitriou
                });
5699 a7dd0415 Kostas Papadimitriou
5700 a7dd0415 Kostas Papadimitriou
        } else if ( typeof qualifier === "string" ) {
5701 a7dd0415 Kostas Papadimitriou
                var filtered = jQuery.grep(elements, function( elem ) {
5702 a7dd0415 Kostas Papadimitriou
                        return elem.nodeType === 1;
5703 a7dd0415 Kostas Papadimitriou
                });
5704 a7dd0415 Kostas Papadimitriou
5705 a7dd0415 Kostas Papadimitriou
                if ( isSimple.test( qualifier ) ) {
5706 a7dd0415 Kostas Papadimitriou
                        return jQuery.filter(qualifier, filtered, !keep);
5707 a7dd0415 Kostas Papadimitriou
                } else {
5708 a7dd0415 Kostas Papadimitriou
                        qualifier = jQuery.filter( qualifier, filtered );
5709 a7dd0415 Kostas Papadimitriou
                }
5710 a7dd0415 Kostas Papadimitriou
        }
5711 a7dd0415 Kostas Papadimitriou
5712 a7dd0415 Kostas Papadimitriou
        return jQuery.grep(elements, function( elem, i ) {
5713 a7dd0415 Kostas Papadimitriou
                return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
5714 a7dd0415 Kostas Papadimitriou
        });
5715 a7dd0415 Kostas Papadimitriou
}
5716 a7dd0415 Kostas Papadimitriou
5717 a7dd0415 Kostas Papadimitriou
5718 a7dd0415 Kostas Papadimitriou
5719 a7dd0415 Kostas Papadimitriou
5720 a7dd0415 Kostas Papadimitriou
function createSafeFragment( document ) {
5721 a7dd0415 Kostas Papadimitriou
        var list = nodeNames.split( "|" ),
5722 a7dd0415 Kostas Papadimitriou
        safeFrag = document.createDocumentFragment();
5723 a7dd0415 Kostas Papadimitriou
5724 a7dd0415 Kostas Papadimitriou
        if ( safeFrag.createElement ) {
5725 a7dd0415 Kostas Papadimitriou
                while ( list.length ) {
5726 a7dd0415 Kostas Papadimitriou
                        safeFrag.createElement(
5727 a7dd0415 Kostas Papadimitriou
                                list.pop()
5728 a7dd0415 Kostas Papadimitriou
                        );
5729 a7dd0415 Kostas Papadimitriou
                }
5730 a7dd0415 Kostas Papadimitriou
        }
5731 a7dd0415 Kostas Papadimitriou
        return safeFrag;
5732 a7dd0415 Kostas Papadimitriou
}
5733 a7dd0415 Kostas Papadimitriou
5734 18059f42 Kostas Papadimitriou
var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
5735 a7dd0415 Kostas Papadimitriou
                "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
5736 a7dd0415 Kostas Papadimitriou
        rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
5737 a7dd0415 Kostas Papadimitriou
        rleadingWhitespace = /^\s+/,
5738 a7dd0415 Kostas Papadimitriou
        rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
5739 a7dd0415 Kostas Papadimitriou
        rtagName = /<([\w:]+)/,
5740 a7dd0415 Kostas Papadimitriou
        rtbody = /<tbody/i,
5741 a7dd0415 Kostas Papadimitriou
        rhtml = /<|&#?\w+;/,
5742 a7dd0415 Kostas Papadimitriou
        rnoInnerhtml = /<(?:script|style)/i,
5743 a7dd0415 Kostas Papadimitriou
        rnocache = /<(?:script|object|embed|option|style)/i,
5744 18059f42 Kostas Papadimitriou
        rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
5745 a7dd0415 Kostas Papadimitriou
        // checked="checked" or checked
5746 a7dd0415 Kostas Papadimitriou
        rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
5747 a7dd0415 Kostas Papadimitriou
        rscriptType = /\/(java|ecma)script/i,
5748 a7dd0415 Kostas Papadimitriou
        rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
5749 a7dd0415 Kostas Papadimitriou
        wrapMap = {
5750 a7dd0415 Kostas Papadimitriou
                option: [ 1, "<select multiple='multiple'>", "</select>" ],
5751 a7dd0415 Kostas Papadimitriou
                legend: [ 1, "<fieldset>", "</fieldset>" ],
5752 a7dd0415 Kostas Papadimitriou
                thead: [ 1, "<table>", "</table>" ],
5753 a7dd0415 Kostas Papadimitriou
                tr: [ 2, "<table><tbody>", "</tbody></table>" ],
5754 a7dd0415 Kostas Papadimitriou
                td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
5755 a7dd0415 Kostas Papadimitriou
                col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
5756 a7dd0415 Kostas Papadimitriou
                area: [ 1, "<map>", "</map>" ],
5757 a7dd0415 Kostas Papadimitriou
                _default: [ 0, "", "" ]
5758 a7dd0415 Kostas Papadimitriou
        },
5759 a7dd0415 Kostas Papadimitriou
        safeFragment = createSafeFragment( document );
5760 a7dd0415 Kostas Papadimitriou
5761 a7dd0415 Kostas Papadimitriou
wrapMap.optgroup = wrapMap.option;
5762 a7dd0415 Kostas Papadimitriou
wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
5763 a7dd0415 Kostas Papadimitriou
wrapMap.th = wrapMap.td;
5764 a7dd0415 Kostas Papadimitriou
5765 a7dd0415 Kostas Papadimitriou
// IE can't serialize <link> and <script> tags normally
5766 a7dd0415 Kostas Papadimitriou
if ( !jQuery.support.htmlSerialize ) {
5767 a7dd0415 Kostas Papadimitriou
        wrapMap._default = [ 1, "div<div>", "</div>" ];
5768 a7dd0415 Kostas Papadimitriou
}
5769 a7dd0415 Kostas Papadimitriou
5770 a7dd0415 Kostas Papadimitriou
jQuery.fn.extend({
5771 18059f42 Kostas Papadimitriou
        text: function( value ) {
5772 18059f42 Kostas Papadimitriou
                return jQuery.access( this, function( value ) {
5773 18059f42 Kostas Papadimitriou
                        return value === undefined ?
5774 18059f42 Kostas Papadimitriou
                                jQuery.text( this ) :
5775 18059f42 Kostas Papadimitriou
                                this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
5776 18059f42 Kostas Papadimitriou
                }, null, value, arguments.length );
5777 a7dd0415 Kostas Papadimitriou
        },
5778 a7dd0415 Kostas Papadimitriou
5779 a7dd0415 Kostas Papadimitriou
        wrapAll: function( html ) {
5780 a7dd0415 Kostas Papadimitriou
                if ( jQuery.isFunction( html ) ) {
5781 a7dd0415 Kostas Papadimitriou
                        return this.each(function(i) {
5782 a7dd0415 Kostas Papadimitriou
                                jQuery(this).wrapAll( html.call(this, i) );
5783 a7dd0415 Kostas Papadimitriou
                        });
5784 a7dd0415 Kostas Papadimitriou
                }
5785 a7dd0415 Kostas Papadimitriou
5786 a7dd0415 Kostas Papadimitriou
                if ( this[0] ) {
5787 a7dd0415 Kostas Papadimitriou
                        // The elements to wrap the target around
5788 a7dd0415 Kostas Papadimitriou
                        var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
5789 a7dd0415 Kostas Papadimitriou
5790 a7dd0415 Kostas Papadimitriou
                        if ( this[0].parentNode ) {
5791 a7dd0415 Kostas Papadimitriou
                                wrap.insertBefore( this[0] );
5792 a7dd0415 Kostas Papadimitriou
                        }
5793 a7dd0415 Kostas Papadimitriou
5794 a7dd0415 Kostas Papadimitriou
                        wrap.map(function() {
5795 a7dd0415 Kostas Papadimitriou
                                var elem = this;
5796 a7dd0415 Kostas Papadimitriou
5797 a7dd0415 Kostas Papadimitriou
                                while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
5798 a7dd0415 Kostas Papadimitriou
                                        elem = elem.firstChild;
5799 a7dd0415 Kostas Papadimitriou
                                }
5800 a7dd0415 Kostas Papadimitriou
5801 a7dd0415 Kostas Papadimitriou
                                return elem;
5802 a7dd0415 Kostas Papadimitriou
                        }).append( this );
5803 a7dd0415 Kostas Papadimitriou
                }
5804 a7dd0415 Kostas Papadimitriou
5805 a7dd0415 Kostas Papadimitriou
                return this;
5806 a7dd0415 Kostas Papadimitriou
        },
5807 a7dd0415 Kostas Papadimitriou
5808 a7dd0415 Kostas Papadimitriou
        wrapInner: function( html ) {
5809 a7dd0415 Kostas Papadimitriou
                if ( jQuery.isFunction( html ) ) {
5810 a7dd0415 Kostas Papadimitriou
                        return this.each(function(i) {
5811 a7dd0415 Kostas Papadimitriou
                                jQuery(this).wrapInner( html.call(this, i) );
5812 a7dd0415 Kostas Papadimitriou
                        });
5813 a7dd0415 Kostas Papadimitriou
                }
5814 a7dd0415 Kostas Papadimitriou
5815 a7dd0415 Kostas Papadimitriou
                return this.each(function() {
5816 a7dd0415 Kostas Papadimitriou
                        var self = jQuery( this ),
5817 a7dd0415 Kostas Papadimitriou
                                contents = self.contents();
5818 a7dd0415 Kostas Papadimitriou
5819 a7dd0415 Kostas Papadimitriou
                        if ( contents.length ) {
5820 a7dd0415 Kostas Papadimitriou
                                contents.wrapAll( html );
5821 a7dd0415 Kostas Papadimitriou
5822 a7dd0415 Kostas Papadimitriou
                        } else {
5823 a7dd0415 Kostas Papadimitriou
                                self.append( html );
5824 a7dd0415 Kostas Papadimitriou
                        }
5825 a7dd0415 Kostas Papadimitriou
                });
5826 a7dd0415 Kostas Papadimitriou
        },
5827 a7dd0415 Kostas Papadimitriou
5828 a7dd0415 Kostas Papadimitriou
        wrap: function( html ) {
5829 a7dd0415 Kostas Papadimitriou
                var isFunction = jQuery.isFunction( html );
5830 a7dd0415 Kostas Papadimitriou
5831 a7dd0415 Kostas Papadimitriou
                return this.each(function(i) {
5832 a7dd0415 Kostas Papadimitriou
                        jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
5833 a7dd0415 Kostas Papadimitriou
                });
5834 a7dd0415 Kostas Papadimitriou
        },
5835 a7dd0415 Kostas Papadimitriou
5836 a7dd0415 Kostas Papadimitriou
        unwrap: function() {
5837 a7dd0415 Kostas Papadimitriou
                return this.parent().each(function() {
5838 a7dd0415 Kostas Papadimitriou
                        if ( !jQuery.nodeName( this, "body" ) ) {
5839 a7dd0415 Kostas Papadimitriou
                                jQuery( this ).replaceWith( this.childNodes );
5840 a7dd0415 Kostas Papadimitriou
                        }
5841 a7dd0415 Kostas Papadimitriou
                }).end();
5842 a7dd0415 Kostas Papadimitriou
        },
5843 a7dd0415 Kostas Papadimitriou
5844 a7dd0415 Kostas Papadimitriou
        append: function() {
5845 a7dd0415 Kostas Papadimitriou
                return this.domManip(arguments, true, function( elem ) {
5846 a7dd0415 Kostas Papadimitriou
                        if ( this.nodeType === 1 ) {
5847 a7dd0415 Kostas Papadimitriou
                                this.appendChild( elem );
5848 a7dd0415 Kostas Papadimitriou
                        }
5849 a7dd0415 Kostas Papadimitriou
                });
5850 a7dd0415 Kostas Papadimitriou
        },
5851 a7dd0415 Kostas Papadimitriou
5852 a7dd0415 Kostas Papadimitriou
        prepend: function() {
5853 a7dd0415 Kostas Papadimitriou
                return this.domManip(arguments, true, function( elem ) {
5854 a7dd0415 Kostas Papadimitriou
                        if ( this.nodeType === 1 ) {
5855 a7dd0415 Kostas Papadimitriou
                                this.insertBefore( elem, this.firstChild );
5856 a7dd0415 Kostas Papadimitriou
                        }
5857 a7dd0415 Kostas Papadimitriou
                });
5858 a7dd0415 Kostas Papadimitriou
        },
5859 a7dd0415 Kostas Papadimitriou
5860 a7dd0415 Kostas Papadimitriou
        before: function() {
5861 a7dd0415 Kostas Papadimitriou
                if ( this[0] && this[0].parentNode ) {
5862 a7dd0415 Kostas Papadimitriou
                        return this.domManip(arguments, false, function( elem ) {
5863 a7dd0415 Kostas Papadimitriou
                                this.parentNode.insertBefore( elem, this );
5864 a7dd0415 Kostas Papadimitriou
                        });
5865 a7dd0415 Kostas Papadimitriou
                } else if ( arguments.length ) {
5866 a7dd0415 Kostas Papadimitriou
                        var set = jQuery.clean( arguments );
5867 a7dd0415 Kostas Papadimitriou
                        set.push.apply( set, this.toArray() );
5868 a7dd0415 Kostas Papadimitriou
                        return this.pushStack( set, "before", arguments );
5869 a7dd0415 Kostas Papadimitriou
                }
5870 a7dd0415 Kostas Papadimitriou
        },
5871 a7dd0415 Kostas Papadimitriou
5872 a7dd0415 Kostas Papadimitriou
        after: function() {
5873 a7dd0415 Kostas Papadimitriou
                if ( this[0] && this[0].parentNode ) {
5874 a7dd0415 Kostas Papadimitriou
                        return this.domManip(arguments, false, function( elem ) {
5875 a7dd0415 Kostas Papadimitriou
                                this.parentNode.insertBefore( elem, this.nextSibling );
5876 a7dd0415 Kostas Papadimitriou
                        });
5877 a7dd0415 Kostas Papadimitriou
                } else if ( arguments.length ) {
5878 a7dd0415 Kostas Papadimitriou
                        var set = this.pushStack( this, "after", arguments );
5879 a7dd0415 Kostas Papadimitriou
                        set.push.apply( set, jQuery.clean(arguments) );
5880 a7dd0415 Kostas Papadimitriou
                        return set;
5881 a7dd0415 Kostas Papadimitriou
                }
5882 a7dd0415 Kostas Papadimitriou
        },
5883 a7dd0415 Kostas Papadimitriou
5884 a7dd0415 Kostas Papadimitriou
        // keepData is for internal use only--do not document
5885 a7dd0415 Kostas Papadimitriou
        remove: function( selector, keepData ) {
5886 a7dd0415 Kostas Papadimitriou
                for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
5887 a7dd0415 Kostas Papadimitriou
                        if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
5888 a7dd0415 Kostas Papadimitriou
                                if ( !keepData && elem.nodeType === 1 ) {
5889 a7dd0415 Kostas Papadimitriou
                                        jQuery.cleanData( elem.getElementsByTagName("*") );
5890 a7dd0415 Kostas Papadimitriou
                                        jQuery.cleanData( [ elem ] );
5891 a7dd0415 Kostas Papadimitriou
                                }
5892 a7dd0415 Kostas Papadimitriou
5893 a7dd0415 Kostas Papadimitriou
                                if ( elem.parentNode ) {
5894 a7dd0415 Kostas Papadimitriou
                                        elem.parentNode.removeChild( elem );
5895 a7dd0415 Kostas Papadimitriou
                                }
5896 a7dd0415 Kostas Papadimitriou
                        }
5897 a7dd0415 Kostas Papadimitriou
                }
5898 a7dd0415 Kostas Papadimitriou
5899 a7dd0415 Kostas Papadimitriou
                return this;
5900 a7dd0415 Kostas Papadimitriou
        },
5901 a7dd0415 Kostas Papadimitriou
5902 a7dd0415 Kostas Papadimitriou
        empty: function() {
5903 a7dd0415 Kostas Papadimitriou
                for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
5904 a7dd0415 Kostas Papadimitriou
                        // Remove element nodes and prevent memory leaks
5905 a7dd0415 Kostas Papadimitriou
                        if ( elem.nodeType === 1 ) {
5906 a7dd0415 Kostas Papadimitriou
                                jQuery.cleanData( elem.getElementsByTagName("*") );
5907 a7dd0415 Kostas Papadimitriou
                        }
5908 a7dd0415 Kostas Papadimitriou
5909 a7dd0415 Kostas Papadimitriou
                        // Remove any remaining nodes
5910 a7dd0415 Kostas Papadimitriou
                        while ( elem.firstChild ) {
5911 a7dd0415 Kostas Papadimitriou
                                elem.removeChild( elem.firstChild );
5912 a7dd0415 Kostas Papadimitriou
                        }
5913 a7dd0415 Kostas Papadimitriou
                }
5914 a7dd0415 Kostas Papadimitriou
5915 a7dd0415 Kostas Papadimitriou
                return this;
5916 a7dd0415 Kostas Papadimitriou
        },
5917 a7dd0415 Kostas Papadimitriou
5918 a7dd0415 Kostas Papadimitriou
        clone: function( dataAndEvents, deepDataAndEvents ) {
5919 a7dd0415 Kostas Papadimitriou
                dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
5920 a7dd0415 Kostas Papadimitriou
                deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
5921 a7dd0415 Kostas Papadimitriou
5922 a7dd0415 Kostas Papadimitriou
                return this.map( function () {
5923 a7dd0415 Kostas Papadimitriou
                        return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
5924 a7dd0415 Kostas Papadimitriou
                });
5925 a7dd0415 Kostas Papadimitriou
        },
5926 a7dd0415 Kostas Papadimitriou
5927 a7dd0415 Kostas Papadimitriou
        html: function( value ) {
5928 18059f42 Kostas Papadimitriou
                return jQuery.access( this, function( value ) {
5929 18059f42 Kostas Papadimitriou
                        var elem = this[0] || {},
5930 18059f42 Kostas Papadimitriou
                                i = 0,
5931 18059f42 Kostas Papadimitriou
                                l = this.length;
5932 a7dd0415 Kostas Papadimitriou
5933 18059f42 Kostas Papadimitriou
                        if ( value === undefined ) {
5934 18059f42 Kostas Papadimitriou
                                return elem.nodeType === 1 ?
5935 18059f42 Kostas Papadimitriou
                                        elem.innerHTML.replace( rinlinejQuery, "" ) :
5936 18059f42 Kostas Papadimitriou
                                        null;
5937 18059f42 Kostas Papadimitriou
                        }
5938 a7dd0415 Kostas Papadimitriou
5939 a7dd0415 Kostas Papadimitriou
5940 18059f42 Kostas Papadimitriou
                        if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
5941 18059f42 Kostas Papadimitriou
                                ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
5942 18059f42 Kostas Papadimitriou
                                !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
5943 a7dd0415 Kostas Papadimitriou
5944 18059f42 Kostas Papadimitriou
                                value = value.replace( rxhtmlTag, "<$1></$2>" );
5945 a7dd0415 Kostas Papadimitriou
5946 18059f42 Kostas Papadimitriou
                                try {
5947 18059f42 Kostas Papadimitriou
                                        for (; i < l; i++ ) {
5948 18059f42 Kostas Papadimitriou
                                                // Remove element nodes and prevent memory leaks
5949 18059f42 Kostas Papadimitriou
                                                elem = this[i] || {};
5950 18059f42 Kostas Papadimitriou
                                                if ( elem.nodeType === 1 ) {
5951 18059f42 Kostas Papadimitriou
                                                        jQuery.cleanData( elem.getElementsByTagName( "*" ) );
5952 18059f42 Kostas Papadimitriou
                                                        elem.innerHTML = value;
5953 18059f42 Kostas Papadimitriou
                                                }
5954 18059f42 Kostas Papadimitriou
                                        }
5955 a7dd0415 Kostas Papadimitriou
5956 18059f42 Kostas Papadimitriou
                                        elem = 0;
5957 a7dd0415 Kostas Papadimitriou
5958 18059f42 Kostas Papadimitriou
                                // If using innerHTML throws an exception, use the fallback method
5959 18059f42 Kostas Papadimitriou
                                } catch(e) {}
5960 18059f42 Kostas Papadimitriou
                        }
5961 a7dd0415 Kostas Papadimitriou
5962 18059f42 Kostas Papadimitriou
                        if ( elem ) {
5963 18059f42 Kostas Papadimitriou
                                this.empty().append( value );
5964 18059f42 Kostas Papadimitriou
                        }
5965 18059f42 Kostas Papadimitriou
                }, null, value, arguments.length );
5966 a7dd0415 Kostas Papadimitriou
        },
5967 a7dd0415 Kostas Papadimitriou
5968 a7dd0415 Kostas Papadimitriou
        replaceWith: function( value ) {
5969 a7dd0415 Kostas Papadimitriou
                if ( this[0] && this[0].parentNode ) {
5970 a7dd0415 Kostas Papadimitriou
                        // Make sure that the elements are removed from the DOM before they are inserted
5971 a7dd0415 Kostas Papadimitriou
                        // this can help fix replacing a parent with child elements
5972 a7dd0415 Kostas Papadimitriou
                        if ( jQuery.isFunction( value ) ) {
5973 a7dd0415 Kostas Papadimitriou
                                return this.each(function(i) {
5974 a7dd0415 Kostas Papadimitriou
                                        var self = jQuery(this), old = self.html();
5975 a7dd0415 Kostas Papadimitriou
                                        self.replaceWith( value.call( this, i, old ) );
5976 a7dd0415 Kostas Papadimitriou
                                });
5977 a7dd0415 Kostas Papadimitriou
                        }
5978 a7dd0415 Kostas Papadimitriou
5979 a7dd0415 Kostas Papadimitriou
                        if ( typeof value !== "string" ) {
5980 a7dd0415 Kostas Papadimitriou
                                value = jQuery( value ).detach();
5981 a7dd0415 Kostas Papadimitriou
                        }
5982 a7dd0415 Kostas Papadimitriou
5983 a7dd0415 Kostas Papadimitriou
                        return this.each(function() {
5984 a7dd0415 Kostas Papadimitriou
                                var next = this.nextSibling,
5985 a7dd0415 Kostas Papadimitriou
                                        parent = this.parentNode;
5986 a7dd0415 Kostas Papadimitriou
5987 a7dd0415 Kostas Papadimitriou
                                jQuery( this ).remove();
5988 a7dd0415 Kostas Papadimitriou
5989 a7dd0415 Kostas Papadimitriou
                                if ( next ) {
5990 a7dd0415 Kostas Papadimitriou
                                        jQuery(next).before( value );
5991 a7dd0415 Kostas Papadimitriou
                                } else {
5992 a7dd0415 Kostas Papadimitriou
                                        jQuery(parent).append( value );
5993 a7dd0415 Kostas Papadimitriou
                                }
5994 a7dd0415 Kostas Papadimitriou
                        });
5995 a7dd0415 Kostas Papadimitriou
                } else {
5996 a7dd0415 Kostas Papadimitriou
                        return this.length ?
5997 a7dd0415 Kostas Papadimitriou
                                this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
5998 a7dd0415 Kostas Papadimitriou
                                this;
5999 a7dd0415 Kostas Papadimitriou
                }
6000 a7dd0415 Kostas Papadimitriou
        },
6001 a7dd0415 Kostas Papadimitriou
6002 a7dd0415 Kostas Papadimitriou
        detach: function( selector ) {
6003 a7dd0415 Kostas Papadimitriou
                return this.remove( selector, true );
6004 a7dd0415 Kostas Papadimitriou
        },
6005 a7dd0415 Kostas Papadimitriou
6006 a7dd0415 Kostas Papadimitriou
        domManip: function( args, table, callback ) {
6007 a7dd0415 Kostas Papadimitriou
                var results, first, fragment, parent,
6008 a7dd0415 Kostas Papadimitriou
                        value = args[0],
6009 a7dd0415 Kostas Papadimitriou
                        scripts = [];
6010 a7dd0415 Kostas Papadimitriou
6011 a7dd0415 Kostas Papadimitriou
                // We can't cloneNode fragments that contain checked, in WebKit
6012 a7dd0415 Kostas Papadimitriou
                if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
6013 a7dd0415 Kostas Papadimitriou
                        return this.each(function() {
6014 a7dd0415 Kostas Papadimitriou
                                jQuery(this).domManip( args, table, callback, true );
6015 a7dd0415 Kostas Papadimitriou
                        });
6016 a7dd0415 Kostas Papadimitriou
                }
6017 a7dd0415 Kostas Papadimitriou
6018 a7dd0415 Kostas Papadimitriou
                if ( jQuery.isFunction(value) ) {
6019 a7dd0415 Kostas Papadimitriou
                        return this.each(function(i) {
6020 a7dd0415 Kostas Papadimitriou
                                var self = jQuery(this);
6021 a7dd0415 Kostas Papadimitriou
                                args[0] = value.call(this, i, table ? self.html() : undefined);
6022 a7dd0415 Kostas Papadimitriou
                                self.domManip( args, table, callback );
6023 a7dd0415 Kostas Papadimitriou
                        });
6024 a7dd0415 Kostas Papadimitriou
                }
6025 a7dd0415 Kostas Papadimitriou
6026 a7dd0415 Kostas Papadimitriou
                if ( this[0] ) {
6027 a7dd0415 Kostas Papadimitriou
                        parent = value && value.parentNode;
6028 a7dd0415 Kostas Papadimitriou
6029 a7dd0415 Kostas Papadimitriou
                        // If we're in a fragment, just use that instead of building a new one
6030 a7dd0415 Kostas Papadimitriou
                        if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
6031 a7dd0415 Kostas Papadimitriou
                                results = { fragment: parent };
6032 a7dd0415 Kostas Papadimitriou
6033 a7dd0415 Kostas Papadimitriou
                        } else {
6034 a7dd0415 Kostas Papadimitriou
                                results = jQuery.buildFragment( args, this, scripts );
6035 a7dd0415 Kostas Papadimitriou
                        }
6036 a7dd0415 Kostas Papadimitriou
6037 a7dd0415 Kostas Papadimitriou
                        fragment = results.fragment;
6038 a7dd0415 Kostas Papadimitriou
6039 a7dd0415 Kostas Papadimitriou
                        if ( fragment.childNodes.length === 1 ) {
6040 a7dd0415 Kostas Papadimitriou
                                first = fragment = fragment.firstChild;
6041 a7dd0415 Kostas Papadimitriou
                        } else {
6042 a7dd0415 Kostas Papadimitriou
                                first = fragment.firstChild;
6043 a7dd0415 Kostas Papadimitriou
                        }
6044 a7dd0415 Kostas Papadimitriou
6045 a7dd0415 Kostas Papadimitriou
                        if ( first ) {
6046 a7dd0415 Kostas Papadimitriou
                                table = table && jQuery.nodeName( first, "tr" );
6047 a7dd0415 Kostas Papadimitriou
6048 a7dd0415 Kostas Papadimitriou
                                for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
6049 a7dd0415 Kostas Papadimitriou
                                        callback.call(
6050 a7dd0415 Kostas Papadimitriou
                                                table ?
6051 a7dd0415 Kostas Papadimitriou
                                                        root(this[i], first) :
6052 a7dd0415 Kostas Papadimitriou
                                                        this[i],
6053 a7dd0415 Kostas Papadimitriou
                                                // Make sure that we do not leak memory by inadvertently discarding
6054 a7dd0415 Kostas Papadimitriou
                                                // the original fragment (which might have attached data) instead of
6055 a7dd0415 Kostas Papadimitriou
                                                // using it; in addition, use the original fragment object for the last
6056 a7dd0415 Kostas Papadimitriou
                                                // item instead of first because it can end up being emptied incorrectly
6057 a7dd0415 Kostas Papadimitriou
                                                // in certain situations (Bug #8070).
6058 a7dd0415 Kostas Papadimitriou
                                                // Fragments from the fragment cache must always be cloned and never used
6059 a7dd0415 Kostas Papadimitriou
                                                // in place.
6060 a7dd0415 Kostas Papadimitriou
                                                results.cacheable || ( l > 1 && i < lastIndex ) ?
6061 a7dd0415 Kostas Papadimitriou
                                                        jQuery.clone( fragment, true, true ) :
6062 a7dd0415 Kostas Papadimitriou
                                                        fragment
6063 a7dd0415 Kostas Papadimitriou
                                        );
6064 a7dd0415 Kostas Papadimitriou
                                }
6065 a7dd0415 Kostas Papadimitriou
                        }
6066 a7dd0415 Kostas Papadimitriou
6067 a7dd0415 Kostas Papadimitriou
                        if ( scripts.length ) {
6068 18059f42 Kostas Papadimitriou
                                jQuery.each( scripts, function( i, elem ) {
6069 18059f42 Kostas Papadimitriou
                                        if ( elem.src ) {
6070 18059f42 Kostas Papadimitriou
                                                jQuery.ajax({
6071 18059f42 Kostas Papadimitriou
                                                        type: "GET",
6072 18059f42 Kostas Papadimitriou
                                                        global: false,
6073 18059f42 Kostas Papadimitriou
                                                        url: elem.src,
6074 18059f42 Kostas Papadimitriou
                                                        async: false,
6075 18059f42 Kostas Papadimitriou
                                                        dataType: "script"
6076 18059f42 Kostas Papadimitriou
                                                });
6077 18059f42 Kostas Papadimitriou
                                        } else {
6078 18059f42 Kostas Papadimitriou
                                                jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
6079 18059f42 Kostas Papadimitriou
                                        }
6080 18059f42 Kostas Papadimitriou
6081 18059f42 Kostas Papadimitriou
                                        if ( elem.parentNode ) {
6082 18059f42 Kostas Papadimitriou
                                                elem.parentNode.removeChild( elem );
6083 18059f42 Kostas Papadimitriou
                                        }
6084 18059f42 Kostas Papadimitriou
                                });
6085 a7dd0415 Kostas Papadimitriou
                        }
6086 a7dd0415 Kostas Papadimitriou
                }
6087 a7dd0415 Kostas Papadimitriou
6088 a7dd0415 Kostas Papadimitriou
                return this;
6089 a7dd0415 Kostas Papadimitriou
        }
6090 a7dd0415 Kostas Papadimitriou
});
6091 a7dd0415 Kostas Papadimitriou
6092 a7dd0415 Kostas Papadimitriou
function root( elem, cur ) {
6093 a7dd0415 Kostas Papadimitriou
        return jQuery.nodeName(elem, "table") ?
6094 a7dd0415 Kostas Papadimitriou
                (elem.getElementsByTagName("tbody")[0] ||
6095 a7dd0415 Kostas Papadimitriou
                elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
6096 a7dd0415 Kostas Papadimitriou
                elem;
6097 a7dd0415 Kostas Papadimitriou
}
6098 a7dd0415 Kostas Papadimitriou
6099 a7dd0415 Kostas Papadimitriou
function cloneCopyEvent( src, dest ) {
6100 a7dd0415 Kostas Papadimitriou
6101 a7dd0415 Kostas Papadimitriou
        if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
6102 a7dd0415 Kostas Papadimitriou
                return;
6103 a7dd0415 Kostas Papadimitriou
        }
6104 a7dd0415 Kostas Papadimitriou
6105 a7dd0415 Kostas Papadimitriou
        var type, i, l,
6106 a7dd0415 Kostas Papadimitriou
                oldData = jQuery._data( src ),
6107 a7dd0415 Kostas Papadimitriou
                curData = jQuery._data( dest, oldData ),
6108 a7dd0415 Kostas Papadimitriou
                events = oldData.events;
6109 a7dd0415 Kostas Papadimitriou
6110 a7dd0415 Kostas Papadimitriou
        if ( events ) {
6111 a7dd0415 Kostas Papadimitriou
                delete curData.handle;
6112 a7dd0415 Kostas Papadimitriou
                curData.events = {};
6113 a7dd0415 Kostas Papadimitriou
6114 a7dd0415 Kostas Papadimitriou
                for ( type in events ) {
6115 a7dd0415 Kostas Papadimitriou
                        for ( i = 0, l = events[ type ].length; i < l; i++ ) {
6116 18059f42 Kostas Papadimitriou
                                jQuery.event.add( dest, type, events[ type ][ i ] );
6117 a7dd0415 Kostas Papadimitriou
                        }
6118 a7dd0415 Kostas Papadimitriou
                }
6119 a7dd0415 Kostas Papadimitriou
        }
6120 a7dd0415 Kostas Papadimitriou
6121 a7dd0415 Kostas Papadimitriou
        // make the cloned public data object a copy from the original
6122 a7dd0415 Kostas Papadimitriou
        if ( curData.data ) {
6123 a7dd0415 Kostas Papadimitriou
                curData.data = jQuery.extend( {}, curData.data );
6124 a7dd0415 Kostas Papadimitriou
        }
6125 a7dd0415 Kostas Papadimitriou
}
6126 a7dd0415 Kostas Papadimitriou
6127 a7dd0415 Kostas Papadimitriou
function cloneFixAttributes( src, dest ) {
6128 a7dd0415 Kostas Papadimitriou
        var nodeName;
6129 a7dd0415 Kostas Papadimitriou
6130 a7dd0415 Kostas Papadimitriou
        // We do not need to do anything for non-Elements
6131 a7dd0415 Kostas Papadimitriou
        if ( dest.nodeType !== 1 ) {
6132 a7dd0415 Kostas Papadimitriou
                return;
6133 a7dd0415 Kostas Papadimitriou
        }
6134 a7dd0415 Kostas Papadimitriou
6135 a7dd0415 Kostas Papadimitriou
        // clearAttributes removes the attributes, which we don't want,
6136 a7dd0415 Kostas Papadimitriou
        // but also removes the attachEvent events, which we *do* want
6137 a7dd0415 Kostas Papadimitriou
        if ( dest.clearAttributes ) {
6138 a7dd0415 Kostas Papadimitriou
                dest.clearAttributes();
6139 a7dd0415 Kostas Papadimitriou
        }
6140 a7dd0415 Kostas Papadimitriou
6141 a7dd0415 Kostas Papadimitriou
        // mergeAttributes, in contrast, only merges back on the
6142 a7dd0415 Kostas Papadimitriou
        // original attributes, not the events
6143 a7dd0415 Kostas Papadimitriou
        if ( dest.mergeAttributes ) {
6144 a7dd0415 Kostas Papadimitriou
                dest.mergeAttributes( src );
6145 a7dd0415 Kostas Papadimitriou
        }
6146 a7dd0415 Kostas Papadimitriou
6147 a7dd0415 Kostas Papadimitriou
        nodeName = dest.nodeName.toLowerCase();
6148 a7dd0415 Kostas Papadimitriou
6149 a7dd0415 Kostas Papadimitriou
        // IE6-8 fail to clone children inside object elements that use
6150 a7dd0415 Kostas Papadimitriou
        // the proprietary classid attribute value (rather than the type
6151 a7dd0415 Kostas Papadimitriou
        // attribute) to identify the type of content to display
6152 a7dd0415 Kostas Papadimitriou
        if ( nodeName === "object" ) {
6153 a7dd0415 Kostas Papadimitriou
                dest.outerHTML = src.outerHTML;
6154 a7dd0415 Kostas Papadimitriou
6155 a7dd0415 Kostas Papadimitriou
        } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
6156 a7dd0415 Kostas Papadimitriou
                // IE6-8 fails to persist the checked state of a cloned checkbox
6157 a7dd0415 Kostas Papadimitriou
                // or radio button. Worse, IE6-7 fail to give the cloned element
6158 a7dd0415 Kostas Papadimitriou
                // a checked appearance if the defaultChecked value isn't also set
6159 a7dd0415 Kostas Papadimitriou
                if ( src.checked ) {
6160 a7dd0415 Kostas Papadimitriou
                        dest.defaultChecked = dest.checked = src.checked;
6161 a7dd0415 Kostas Papadimitriou
                }
6162 a7dd0415 Kostas Papadimitriou
6163 a7dd0415 Kostas Papadimitriou
                // IE6-7 get confused and end up setting the value of a cloned
6164 a7dd0415 Kostas Papadimitriou
                // checkbox/radio button to an empty string instead of "on"
6165 a7dd0415 Kostas Papadimitriou
                if ( dest.value !== src.value ) {
6166 a7dd0415 Kostas Papadimitriou
                        dest.value = src.value;
6167 a7dd0415 Kostas Papadimitriou
                }
6168 a7dd0415 Kostas Papadimitriou
6169 a7dd0415 Kostas Papadimitriou
        // IE6-8 fails to return the selected option to the default selected
6170 a7dd0415 Kostas Papadimitriou
        // state when cloning options
6171 a7dd0415 Kostas Papadimitriou
        } else if ( nodeName === "option" ) {
6172 a7dd0415 Kostas Papadimitriou
                dest.selected = src.defaultSelected;
6173 a7dd0415 Kostas Papadimitriou
6174 a7dd0415 Kostas Papadimitriou
        // IE6-8 fails to set the defaultValue to the correct value when
6175 a7dd0415 Kostas Papadimitriou
        // cloning other types of input fields
6176 a7dd0415 Kostas Papadimitriou
        } else if ( nodeName === "input" || nodeName === "textarea" ) {
6177 a7dd0415 Kostas Papadimitriou
                dest.defaultValue = src.defaultValue;
6178 18059f42 Kostas Papadimitriou
6179 18059f42 Kostas Papadimitriou
        // IE blanks contents when cloning scripts
6180 18059f42 Kostas Papadimitriou
        } else if ( nodeName === "script" && dest.text !== src.text ) {
6181 18059f42 Kostas Papadimitriou
                dest.text = src.text;
6182 a7dd0415 Kostas Papadimitriou
        }
6183 a7dd0415 Kostas Papadimitriou
6184 a7dd0415 Kostas Papadimitriou
        // Event data gets referenced instead of copied if the expando
6185 a7dd0415 Kostas Papadimitriou
        // gets copied too
6186 a7dd0415 Kostas Papadimitriou
        dest.removeAttribute( jQuery.expando );
6187 18059f42 Kostas Papadimitriou
6188 18059f42 Kostas Papadimitriou
        // Clear flags for bubbling special change/submit events, they must
6189 18059f42 Kostas Papadimitriou
        // be reattached when the newly cloned events are first activated
6190 18059f42 Kostas Papadimitriou
        dest.removeAttribute( "_submit_attached" );
6191 18059f42 Kostas Papadimitriou
        dest.removeAttribute( "_change_attached" );
6192 a7dd0415 Kostas Papadimitriou
}
6193 a7dd0415 Kostas Papadimitriou
6194 a7dd0415 Kostas Papadimitriou
jQuery.buildFragment = function( args, nodes, scripts ) {
6195 a7dd0415 Kostas Papadimitriou
        var fragment, cacheable, cacheresults, doc,
6196 a7dd0415 Kostas Papadimitriou
        first = args[ 0 ];
6197 a7dd0415 Kostas Papadimitriou
6198 a7dd0415 Kostas Papadimitriou
        // nodes may contain either an explicit document object,
6199 a7dd0415 Kostas Papadimitriou
        // a jQuery collection or context object.
6200 a7dd0415 Kostas Papadimitriou
        // If nodes[0] contains a valid object to assign to doc
6201 a7dd0415 Kostas Papadimitriou
        if ( nodes && nodes[0] ) {
6202 a7dd0415 Kostas Papadimitriou
                doc = nodes[0].ownerDocument || nodes[0];
6203 a7dd0415 Kostas Papadimitriou
        }
6204 a7dd0415 Kostas Papadimitriou
6205 a7dd0415 Kostas Papadimitriou
        // Ensure that an attr object doesn't incorrectly stand in as a document object
6206 a7dd0415 Kostas Papadimitriou
        // Chrome and Firefox seem to allow this to occur and will throw exception
6207 a7dd0415 Kostas Papadimitriou
        // Fixes #8950
6208 a7dd0415 Kostas Papadimitriou
        if ( !doc.createDocumentFragment ) {
6209 a7dd0415 Kostas Papadimitriou
                doc = document;
6210 a7dd0415 Kostas Papadimitriou
        }
6211 a7dd0415 Kostas Papadimitriou
6212 a7dd0415 Kostas Papadimitriou
        // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
6213 a7dd0415 Kostas Papadimitriou
        // Cloning options loses the selected state, so don't cache them
6214 a7dd0415 Kostas Papadimitriou
        // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
6215 a7dd0415 Kostas Papadimitriou
        // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
6216 a7dd0415 Kostas Papadimitriou
        // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
6217 a7dd0415 Kostas Papadimitriou
        if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
6218 a7dd0415 Kostas Papadimitriou
                first.charAt(0) === "<" && !rnocache.test( first ) &&
6219 a7dd0415 Kostas Papadimitriou
                (jQuery.support.checkClone || !rchecked.test( first )) &&
6220 a7dd0415 Kostas Papadimitriou
                (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
6221 a7dd0415 Kostas Papadimitriou
6222 a7dd0415 Kostas Papadimitriou
                cacheable = true;
6223 a7dd0415 Kostas Papadimitriou
6224 a7dd0415 Kostas Papadimitriou
                cacheresults = jQuery.fragments[ first ];
6225 a7dd0415 Kostas Papadimitriou
                if ( cacheresults && cacheresults !== 1 ) {
6226 a7dd0415 Kostas Papadimitriou
                        fragment = cacheresults;
6227 a7dd0415 Kostas Papadimitriou
                }
6228 a7dd0415 Kostas Papadimitriou
        }
6229 a7dd0415 Kostas Papadimitriou
6230 a7dd0415 Kostas Papadimitriou
        if ( !fragment ) {
6231 a7dd0415 Kostas Papadimitriou
                fragment = doc.createDocumentFragment();
6232 a7dd0415 Kostas Papadimitriou
                jQuery.clean( args, doc, fragment, scripts );
6233 a7dd0415 Kostas Papadimitriou
        }
6234 a7dd0415 Kostas Papadimitriou
6235 a7dd0415 Kostas Papadimitriou
        if ( cacheable ) {
6236 a7dd0415 Kostas Papadimitriou
                jQuery.fragments[ first ] = cacheresults ? fragment : 1;
6237 a7dd0415 Kostas Papadimitriou
        }
6238 a7dd0415 Kostas Papadimitriou
6239 a7dd0415 Kostas Papadimitriou
        return { fragment: fragment, cacheable: cacheable };
6240 a7dd0415 Kostas Papadimitriou
};
6241 a7dd0415 Kostas Papadimitriou
6242 a7dd0415 Kostas Papadimitriou
jQuery.fragments = {};
6243 a7dd0415 Kostas Papadimitriou
6244 a7dd0415 Kostas Papadimitriou
jQuery.each({
6245 a7dd0415 Kostas Papadimitriou
        appendTo: "append",
6246 a7dd0415 Kostas Papadimitriou
        prependTo: "prepend",
6247 a7dd0415 Kostas Papadimitriou
        insertBefore: "before",
6248 a7dd0415 Kostas Papadimitriou
        insertAfter: "after",
6249 a7dd0415 Kostas Papadimitriou
        replaceAll: "replaceWith"
6250 a7dd0415 Kostas Papadimitriou
}, function( name, original ) {
6251 a7dd0415 Kostas Papadimitriou
        jQuery.fn[ name ] = function( selector ) {
6252 a7dd0415 Kostas Papadimitriou
                var ret = [],
6253 a7dd0415 Kostas Papadimitriou
                        insert = jQuery( selector ),
6254 a7dd0415 Kostas Papadimitriou
                        parent = this.length === 1 && this[0].parentNode;
6255 a7dd0415 Kostas Papadimitriou
6256 a7dd0415 Kostas Papadimitriou
                if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
6257 a7dd0415 Kostas Papadimitriou
                        insert[ original ]( this[0] );
6258 a7dd0415 Kostas Papadimitriou
                        return this;
6259 a7dd0415 Kostas Papadimitriou
6260 a7dd0415 Kostas Papadimitriou
                } else {
6261 a7dd0415 Kostas Papadimitriou
                        for ( var i = 0, l = insert.length; i < l; i++ ) {
6262 a7dd0415 Kostas Papadimitriou
                                var elems = ( i > 0 ? this.clone(true) : this ).get();
6263 a7dd0415 Kostas Papadimitriou
                                jQuery( insert[i] )[ original ]( elems );
6264 a7dd0415 Kostas Papadimitriou
                                ret = ret.concat( elems );
6265 a7dd0415 Kostas Papadimitriou
                        }
6266 a7dd0415 Kostas Papadimitriou
6267 a7dd0415 Kostas Papadimitriou
                        return this.pushStack( ret, name, insert.selector );
6268 a7dd0415 Kostas Papadimitriou
                }
6269 a7dd0415 Kostas Papadimitriou
        };
6270 a7dd0415 Kostas Papadimitriou
});
6271 a7dd0415 Kostas Papadimitriou
6272 a7dd0415 Kostas Papadimitriou
function getAll( elem ) {
6273 a7dd0415 Kostas Papadimitriou
        if ( typeof elem.getElementsByTagName !== "undefined" ) {
6274 a7dd0415 Kostas Papadimitriou
                return elem.getElementsByTagName( "*" );
6275 a7dd0415 Kostas Papadimitriou
6276 a7dd0415 Kostas Papadimitriou
        } else if ( typeof elem.querySelectorAll !== "undefined" ) {
6277 a7dd0415 Kostas Papadimitriou
                return elem.querySelectorAll( "*" );
6278 a7dd0415 Kostas Papadimitriou
6279 a7dd0415 Kostas Papadimitriou
        } else {
6280 a7dd0415 Kostas Papadimitriou
                return [];
6281 a7dd0415 Kostas Papadimitriou
        }
6282 a7dd0415 Kostas Papadimitriou
}
6283 a7dd0415 Kostas Papadimitriou
6284 a7dd0415 Kostas Papadimitriou
// Used in clean, fixes the defaultChecked property
6285 a7dd0415 Kostas Papadimitriou
function fixDefaultChecked( elem ) {
6286 a7dd0415 Kostas Papadimitriou
        if ( elem.type === "checkbox" || elem.type === "radio" ) {
6287 a7dd0415 Kostas Papadimitriou
                elem.defaultChecked = elem.checked;
6288 a7dd0415 Kostas Papadimitriou
        }
6289 a7dd0415 Kostas Papadimitriou
}
6290 a7dd0415 Kostas Papadimitriou
// Finds all inputs and passes them to fixDefaultChecked
6291 a7dd0415 Kostas Papadimitriou
function findInputs( elem ) {
6292 a7dd0415 Kostas Papadimitriou
        var nodeName = ( elem.nodeName || "" ).toLowerCase();
6293 a7dd0415 Kostas Papadimitriou
        if ( nodeName === "input" ) {
6294 a7dd0415 Kostas Papadimitriou
                fixDefaultChecked( elem );
6295 a7dd0415 Kostas Papadimitriou
        // Skip scripts, get other children
6296 a7dd0415 Kostas Papadimitriou
        } else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
6297 a7dd0415 Kostas Papadimitriou
                jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
6298 a7dd0415 Kostas Papadimitriou
        }
6299 a7dd0415 Kostas Papadimitriou
}
6300 a7dd0415 Kostas Papadimitriou
6301 a7dd0415 Kostas Papadimitriou
// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js
6302 a7dd0415 Kostas Papadimitriou
function shimCloneNode( elem ) {
6303 a7dd0415 Kostas Papadimitriou
        var div = document.createElement( "div" );
6304 a7dd0415 Kostas Papadimitriou
        safeFragment.appendChild( div );
6305 a7dd0415 Kostas Papadimitriou
6306 a7dd0415 Kostas Papadimitriou
        div.innerHTML = elem.outerHTML;
6307 a7dd0415 Kostas Papadimitriou
        return div.firstChild;
6308 a7dd0415 Kostas Papadimitriou
}
6309 a7dd0415 Kostas Papadimitriou
6310 a7dd0415 Kostas Papadimitriou
jQuery.extend({
6311 a7dd0415 Kostas Papadimitriou
        clone: function( elem, dataAndEvents, deepDataAndEvents ) {
6312 a7dd0415 Kostas Papadimitriou
                var srcElements,
6313 a7dd0415 Kostas Papadimitriou
                        destElements,
6314 a7dd0415 Kostas Papadimitriou
                        i,
6315 a7dd0415 Kostas Papadimitriou
                        // IE<=8 does not properly clone detached, unknown element nodes
6316 18059f42 Kostas Papadimitriou
                        clone = jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ?
6317 a7dd0415 Kostas Papadimitriou
                                elem.cloneNode( true ) :
6318 a7dd0415 Kostas Papadimitriou
                                shimCloneNode( elem );
6319 a7dd0415 Kostas Papadimitriou
6320 a7dd0415 Kostas Papadimitriou
                if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
6321 a7dd0415 Kostas Papadimitriou
                                (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
6322 a7dd0415 Kostas Papadimitriou
                        // IE copies events bound via attachEvent when using cloneNode.
6323 a7dd0415 Kostas Papadimitriou
                        // Calling detachEvent on the clone will also remove the events
6324 a7dd0415 Kostas Papadimitriou
                        // from the original. In order to get around this, we use some
6325 a7dd0415 Kostas Papadimitriou
                        // proprietary methods to clear the events. Thanks to MooTools
6326 a7dd0415 Kostas Papadimitriou
                        // guys for this hotness.
6327 a7dd0415 Kostas Papadimitriou
6328 a7dd0415 Kostas Papadimitriou
                        cloneFixAttributes( elem, clone );
6329 a7dd0415 Kostas Papadimitriou
6330 a7dd0415 Kostas Papadimitriou
                        // Using Sizzle here is crazy slow, so we use getElementsByTagName instead
6331 a7dd0415 Kostas Papadimitriou
                        srcElements = getAll( elem );
6332 a7dd0415 Kostas Papadimitriou
                        destElements = getAll( clone );
6333 a7dd0415 Kostas Papadimitriou
6334 a7dd0415 Kostas Papadimitriou
                        // Weird iteration because IE will replace the length property
6335 a7dd0415 Kostas Papadimitriou
                        // with an element if you are cloning the body and one of the
6336 a7dd0415 Kostas Papadimitriou
                        // elements on the page has a name or id of "length"
6337 a7dd0415 Kostas Papadimitriou
                        for ( i = 0; srcElements[i]; ++i ) {
6338 a7dd0415 Kostas Papadimitriou
                                // Ensure that the destination node is not null; Fixes #9587
6339 a7dd0415 Kostas Papadimitriou
                                if ( destElements[i] ) {
6340 a7dd0415 Kostas Papadimitriou
                                        cloneFixAttributes( srcElements[i], destElements[i] );
6341 a7dd0415 Kostas Papadimitriou
                                }
6342 a7dd0415 Kostas Papadimitriou
                        }
6343 a7dd0415 Kostas Papadimitriou
                }
6344 a7dd0415 Kostas Papadimitriou
6345 a7dd0415 Kostas Papadimitriou
                // Copy the events from the original to the clone
6346 a7dd0415 Kostas Papadimitriou
                if ( dataAndEvents ) {
6347 a7dd0415 Kostas Papadimitriou
                        cloneCopyEvent( elem, clone );
6348 a7dd0415 Kostas Papadimitriou
6349 a7dd0415 Kostas Papadimitriou
                        if ( deepDataAndEvents ) {
6350 a7dd0415 Kostas Papadimitriou
                                srcElements = getAll( elem );
6351 a7dd0415 Kostas Papadimitriou
                                destElements = getAll( clone );
6352 a7dd0415 Kostas Papadimitriou
6353 a7dd0415 Kostas Papadimitriou
                                for ( i = 0; srcElements[i]; ++i ) {
6354 a7dd0415 Kostas Papadimitriou
                                        cloneCopyEvent( srcElements[i], destElements[i] );
6355 a7dd0415 Kostas Papadimitriou
                                }
6356 a7dd0415 Kostas Papadimitriou
                        }
6357 a7dd0415 Kostas Papadimitriou
                }
6358 a7dd0415 Kostas Papadimitriou
6359 a7dd0415 Kostas Papadimitriou
                srcElements = destElements = null;
6360 a7dd0415 Kostas Papadimitriou
6361 a7dd0415 Kostas Papadimitriou
                // Return the cloned set
6362 a7dd0415 Kostas Papadimitriou
                return clone;
6363 a7dd0415 Kostas Papadimitriou
        },
6364 a7dd0415 Kostas Papadimitriou
6365 a7dd0415 Kostas Papadimitriou
        clean: function( elems, context, fragment, scripts ) {
6366 18059f42 Kostas Papadimitriou
                var checkScriptType, script, j,
6367 18059f42 Kostas Papadimitriou
                                ret = [];
6368 a7dd0415 Kostas Papadimitriou
6369 a7dd0415 Kostas Papadimitriou
                context = context || document;
6370 a7dd0415 Kostas Papadimitriou
6371 a7dd0415 Kostas Papadimitriou
                // !context.createElement fails in IE with an error but returns typeof 'object'
6372 a7dd0415 Kostas Papadimitriou
                if ( typeof context.createElement === "undefined" ) {
6373 a7dd0415 Kostas Papadimitriou
                        context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
6374 a7dd0415 Kostas Papadimitriou
                }
6375 a7dd0415 Kostas Papadimitriou
6376 a7dd0415 Kostas Papadimitriou
                for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
6377 a7dd0415 Kostas Papadimitriou
                        if ( typeof elem === "number" ) {
6378 a7dd0415 Kostas Papadimitriou
                                elem += "";
6379 a7dd0415 Kostas Papadimitriou
                        }
6380 a7dd0415 Kostas Papadimitriou
6381 a7dd0415 Kostas Papadimitriou
                        if ( !elem ) {
6382 a7dd0415 Kostas Papadimitriou
                                continue;
6383 a7dd0415 Kostas Papadimitriou
                        }
6384 a7dd0415 Kostas Papadimitriou
6385 a7dd0415 Kostas Papadimitriou
                        // Convert html string into DOM nodes
6386 a7dd0415 Kostas Papadimitriou
                        if ( typeof elem === "string" ) {
6387 a7dd0415 Kostas Papadimitriou
                                if ( !rhtml.test( elem ) ) {
6388 a7dd0415 Kostas Papadimitriou
                                        elem = context.createTextNode( elem );
6389 a7dd0415 Kostas Papadimitriou
                                } else {
6390 a7dd0415 Kostas Papadimitriou
                                        // Fix "XHTML"-style tags in all browsers
6391 a7dd0415 Kostas Papadimitriou
                                        elem = elem.replace(rxhtmlTag, "<$1></$2>");
6392 a7dd0415 Kostas Papadimitriou
6393 a7dd0415 Kostas Papadimitriou
                                        // Trim whitespace, otherwise indexOf won't work as expected
6394 a7dd0415 Kostas Papadimitriou
                                        var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
6395 a7dd0415 Kostas Papadimitriou
                                                wrap = wrapMap[ tag ] || wrapMap._default,
6396 a7dd0415 Kostas Papadimitriou
                                                depth = wrap[0],
6397 18059f42 Kostas Papadimitriou
                                                div = context.createElement("div"),
6398 18059f42 Kostas Papadimitriou
                                                safeChildNodes = safeFragment.childNodes,
6399 18059f42 Kostas Papadimitriou
                                                remove;
6400 a7dd0415 Kostas Papadimitriou
6401 a7dd0415 Kostas Papadimitriou
                                        // Append wrapper element to unknown element safe doc fragment
6402 a7dd0415 Kostas Papadimitriou
                                        if ( context === document ) {
6403 a7dd0415 Kostas Papadimitriou
                                                // Use the fragment we've already created for this document
6404 a7dd0415 Kostas Papadimitriou
                                                safeFragment.appendChild( div );
6405 a7dd0415 Kostas Papadimitriou
                                        } else {
6406 a7dd0415 Kostas Papadimitriou
                                                // Use a fragment created with the owner document
6407 a7dd0415 Kostas Papadimitriou
                                                createSafeFragment( context ).appendChild( div );
6408 a7dd0415 Kostas Papadimitriou
                                        }
6409 a7dd0415 Kostas Papadimitriou
6410 a7dd0415 Kostas Papadimitriou
                                        // Go to html and back, then peel off extra wrappers
6411 a7dd0415 Kostas Papadimitriou
                                        div.innerHTML = wrap[1] + elem + wrap[2];
6412 a7dd0415 Kostas Papadimitriou
6413 a7dd0415 Kostas Papadimitriou
                                        // Move to the right depth
6414 a7dd0415 Kostas Papadimitriou
                                        while ( depth-- ) {
6415 a7dd0415 Kostas Papadimitriou
                                                div = div.lastChild;
6416 a7dd0415 Kostas Papadimitriou
                                        }
6417 a7dd0415 Kostas Papadimitriou
6418 a7dd0415 Kostas Papadimitriou
                                        // Remove IE's autoinserted <tbody> from table fragments
6419 a7dd0415 Kostas Papadimitriou
                                        if ( !jQuery.support.tbody ) {
6420 a7dd0415 Kostas Papadimitriou
6421 a7dd0415 Kostas Papadimitriou
                                                // String was a <table>, *may* have spurious <tbody>
6422 a7dd0415 Kostas Papadimitriou
                                                var hasBody = rtbody.test(elem),
6423 a7dd0415 Kostas Papadimitriou
                                                        tbody = tag === "table" && !hasBody ?
6424 a7dd0415 Kostas Papadimitriou
                                                                div.firstChild && div.firstChild.childNodes :
6425 a7dd0415 Kostas Papadimitriou
6426 a7dd0415 Kostas Papadimitriou
                                                                // String was a bare <thead> or <tfoot>
6427 a7dd0415 Kostas Papadimitriou
                                                                wrap[1] === "<table>" && !hasBody ?
6428 a7dd0415 Kostas Papadimitriou
                                                                        div.childNodes :
6429 a7dd0415 Kostas Papadimitriou
                                                                        [];
6430 a7dd0415 Kostas Papadimitriou
6431 a7dd0415 Kostas Papadimitriou
                                                for ( j = tbody.length - 1; j >= 0 ; --j ) {
6432 a7dd0415 Kostas Papadimitriou
                                                        if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
6433 a7dd0415 Kostas Papadimitriou
                                                                tbody[ j ].parentNode.removeChild( tbody[ j ] );
6434 a7dd0415 Kostas Papadimitriou
                                                        }
6435 a7dd0415 Kostas Papadimitriou
                                                }
6436 a7dd0415 Kostas Papadimitriou
                                        }
6437 a7dd0415 Kostas Papadimitriou
6438 a7dd0415 Kostas Papadimitriou
                                        // IE completely kills leading whitespace when innerHTML is used
6439 a7dd0415 Kostas Papadimitriou
                                        if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
6440 a7dd0415 Kostas Papadimitriou
                                                div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
6441 a7dd0415 Kostas Papadimitriou
                                        }
6442 a7dd0415 Kostas Papadimitriou
6443 a7dd0415 Kostas Papadimitriou
                                        elem = div.childNodes;
6444 18059f42 Kostas Papadimitriou
6445 18059f42 Kostas Papadimitriou
                                        // Clear elements from DocumentFragment (safeFragment or otherwise)
6446 18059f42 Kostas Papadimitriou
                                        // to avoid hoarding elements. Fixes #11356
6447 18059f42 Kostas Papadimitriou
                                        if ( div ) {
6448 18059f42 Kostas Papadimitriou
                                                div.parentNode.removeChild( div );
6449 18059f42 Kostas Papadimitriou
6450 18059f42 Kostas Papadimitriou
                                                // Guard against -1 index exceptions in FF3.6
6451 18059f42 Kostas Papadimitriou
                                                if ( safeChildNodes.length > 0 ) {
6452 18059f42 Kostas Papadimitriou
                                                        remove = safeChildNodes[ safeChildNodes.length - 1 ];
6453 18059f42 Kostas Papadimitriou
6454 18059f42 Kostas Papadimitriou
                                                        if ( remove && remove.parentNode ) {
6455 18059f42 Kostas Papadimitriou
                                                                remove.parentNode.removeChild( remove );
6456 18059f42 Kostas Papadimitriou
                                                        }
6457 18059f42 Kostas Papadimitriou
                                                }
6458 18059f42 Kostas Papadimitriou
                                        }
6459 a7dd0415 Kostas Papadimitriou
                                }
6460 a7dd0415 Kostas Papadimitriou
                        }
6461 a7dd0415 Kostas Papadimitriou
6462 a7dd0415 Kostas Papadimitriou
                        // Resets defaultChecked for any radios and checkboxes
6463 a7dd0415 Kostas Papadimitriou
                        // about to be appended to the DOM in IE 6/7 (#8060)
6464 a7dd0415 Kostas Papadimitriou
                        var len;
6465 a7dd0415 Kostas Papadimitriou
                        if ( !jQuery.support.appendChecked ) {
6466 a7dd0415 Kostas Papadimitriou
                                if ( elem[0] && typeof (len = elem.length) === "number" ) {
6467 a7dd0415 Kostas Papadimitriou
                                        for ( j = 0; j < len; j++ ) {
6468 a7dd0415 Kostas Papadimitriou
                                                findInputs( elem[j] );
6469 a7dd0415 Kostas Papadimitriou
                                        }
6470 a7dd0415 Kostas Papadimitriou
                                } else {
6471 a7dd0415 Kostas Papadimitriou
                                        findInputs( elem );
6472 a7dd0415 Kostas Papadimitriou
                                }
6473 a7dd0415 Kostas Papadimitriou
                        }
6474 a7dd0415 Kostas Papadimitriou
6475 a7dd0415 Kostas Papadimitriou
                        if ( elem.nodeType ) {
6476 a7dd0415 Kostas Papadimitriou
                                ret.push( elem );
6477 a7dd0415 Kostas Papadimitriou
                        } else {
6478 a7dd0415 Kostas Papadimitriou
                                ret = jQuery.merge( ret, elem );
6479 a7dd0415 Kostas Papadimitriou
                        }
6480 a7dd0415 Kostas Papadimitriou
                }
6481 a7dd0415 Kostas Papadimitriou
6482 a7dd0415 Kostas Papadimitriou
                if ( fragment ) {
6483 a7dd0415 Kostas Papadimitriou
                        checkScriptType = function( elem ) {
6484 a7dd0415 Kostas Papadimitriou
                                return !elem.type || rscriptType.test( elem.type );
6485 a7dd0415 Kostas Papadimitriou
                        };
6486 a7dd0415 Kostas Papadimitriou
                        for ( i = 0; ret[i]; i++ ) {
6487 18059f42 Kostas Papadimitriou
                                script = ret[i];
6488 18059f42 Kostas Papadimitriou
                                if ( scripts && jQuery.nodeName( script, "script" ) && (!script.type || rscriptType.test( script.type )) ) {
6489 18059f42 Kostas Papadimitriou
                                        scripts.push( script.parentNode ? script.parentNode.removeChild( script ) : script );
6490 a7dd0415 Kostas Papadimitriou
6491 a7dd0415 Kostas Papadimitriou
                                } else {
6492 18059f42 Kostas Papadimitriou
                                        if ( script.nodeType === 1 ) {
6493 18059f42 Kostas Papadimitriou
                                                var jsTags = jQuery.grep( script.getElementsByTagName( "script" ), checkScriptType );
6494 a7dd0415 Kostas Papadimitriou
6495 a7dd0415 Kostas Papadimitriou
                                                ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
6496 a7dd0415 Kostas Papadimitriou
                                        }
6497 18059f42 Kostas Papadimitriou
                                        fragment.appendChild( script );
6498 a7dd0415 Kostas Papadimitriou
                                }
6499 a7dd0415 Kostas Papadimitriou
                        }
6500 a7dd0415 Kostas Papadimitriou
                }
6501 a7dd0415 Kostas Papadimitriou
6502 a7dd0415 Kostas Papadimitriou
                return ret;
6503 a7dd0415 Kostas Papadimitriou
        },
6504 a7dd0415 Kostas Papadimitriou
6505 a7dd0415 Kostas Papadimitriou
        cleanData: function( elems ) {
6506 a7dd0415 Kostas Papadimitriou
                var data, id,
6507 a7dd0415 Kostas Papadimitriou
                        cache = jQuery.cache,
6508 a7dd0415 Kostas Papadimitriou
                        special = jQuery.event.special,
6509 a7dd0415 Kostas Papadimitriou
                        deleteExpando = jQuery.support.deleteExpando;
6510 a7dd0415 Kostas Papadimitriou
6511 a7dd0415 Kostas Papadimitriou
                for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
6512 a7dd0415 Kostas Papadimitriou
                        if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
6513 a7dd0415 Kostas Papadimitriou
                                continue;
6514 a7dd0415 Kostas Papadimitriou
                        }
6515 a7dd0415 Kostas Papadimitriou
6516 a7dd0415 Kostas Papadimitriou
                        id = elem[ jQuery.expando ];
6517 a7dd0415 Kostas Papadimitriou
6518 a7dd0415 Kostas Papadimitriou
                        if ( id ) {
6519 a7dd0415 Kostas Papadimitriou
                                data = cache[ id ];
6520 a7dd0415 Kostas Papadimitriou
6521 a7dd0415 Kostas Papadimitriou
                                if ( data && data.events ) {
6522 a7dd0415 Kostas Papadimitriou
                                        for ( var type in data.events ) {
6523 a7dd0415 Kostas Papadimitriou
                                                if ( special[ type ] ) {
6524 a7dd0415 Kostas Papadimitriou
                                                        jQuery.event.remove( elem, type );
6525 a7dd0415 Kostas Papadimitriou
6526 a7dd0415 Kostas Papadimitriou
                                                // This is a shortcut to avoid jQuery.event.remove's overhead
6527 a7dd0415 Kostas Papadimitriou
                                                } else {
6528 a7dd0415 Kostas Papadimitriou
                                                        jQuery.removeEvent( elem, type, data.handle );
6529 a7dd0415 Kostas Papadimitriou
                                                }
6530 a7dd0415 Kostas Papadimitriou
                                        }
6531 a7dd0415 Kostas Papadimitriou
6532 a7dd0415 Kostas Papadimitriou
                                        // Null the DOM reference to avoid IE6/7/8 leak (#7054)
6533 a7dd0415 Kostas Papadimitriou
                                        if ( data.handle ) {
6534 a7dd0415 Kostas Papadimitriou
                                                data.handle.elem = null;
6535 a7dd0415 Kostas Papadimitriou
                                        }
6536 a7dd0415 Kostas Papadimitriou
                                }
6537 a7dd0415 Kostas Papadimitriou
6538 a7dd0415 Kostas Papadimitriou
                                if ( deleteExpando ) {
6539 a7dd0415 Kostas Papadimitriou
                                        delete elem[ jQuery.expando ];
6540 a7dd0415 Kostas Papadimitriou
6541 a7dd0415 Kostas Papadimitriou
                                } else if ( elem.removeAttribute ) {
6542 a7dd0415 Kostas Papadimitriou
                                        elem.removeAttribute( jQuery.expando );
6543 a7dd0415 Kostas Papadimitriou
                                }
6544 a7dd0415 Kostas Papadimitriou
6545 a7dd0415 Kostas Papadimitriou
                                delete cache[ id ];
6546 a7dd0415 Kostas Papadimitriou
                        }
6547 a7dd0415 Kostas Papadimitriou
                }
6548 a7dd0415 Kostas Papadimitriou
        }
6549 a7dd0415 Kostas Papadimitriou
});
6550 a7dd0415 Kostas Papadimitriou
6551 a7dd0415 Kostas Papadimitriou
6552 a7dd0415 Kostas Papadimitriou
6553 a7dd0415 Kostas Papadimitriou
6554 a7dd0415 Kostas Papadimitriou
var ralpha = /alpha\([^)]*\)/i,
6555 a7dd0415 Kostas Papadimitriou
        ropacity = /opacity=([^)]*)/,
6556 a7dd0415 Kostas Papadimitriou
        // fixed for IE9, see #8346
6557 a7dd0415 Kostas Papadimitriou
        rupper = /([A-Z]|^ms)/g,
6558 18059f42 Kostas Papadimitriou
        rnum = /^[\-+]?(?:\d*\.)?\d+$/i,
6559 18059f42 Kostas Papadimitriou
        rnumnonpx = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,
6560 a7dd0415 Kostas Papadimitriou
        rrelNum = /^([\-+])=([\-+.\de]+)/,
6561 18059f42 Kostas Papadimitriou
        rmargin = /^margin/,
6562 a7dd0415 Kostas Papadimitriou
6563 a7dd0415 Kostas Papadimitriou
        cssShow = { position: "absolute", visibility: "hidden", display: "block" },
6564 18059f42 Kostas Papadimitriou
6565 18059f42 Kostas Papadimitriou
        // order is important!
6566 18059f42 Kostas Papadimitriou
        cssExpand = [ "Top", "Right", "Bottom", "Left" ],
6567 18059f42 Kostas Papadimitriou
6568 a7dd0415 Kostas Papadimitriou
        curCSS,
6569 a7dd0415 Kostas Papadimitriou
6570 a7dd0415 Kostas Papadimitriou
        getComputedStyle,
6571 a7dd0415 Kostas Papadimitriou
        currentStyle;
6572 a7dd0415 Kostas Papadimitriou
6573 a7dd0415 Kostas Papadimitriou
jQuery.fn.css = function( name, value ) {
6574 18059f42 Kostas Papadimitriou
        return jQuery.access( this, function( elem, name, value ) {
6575 a7dd0415 Kostas Papadimitriou
                return value !== undefined ?
6576 a7dd0415 Kostas Papadimitriou
                        jQuery.style( elem, name, value ) :
6577 a7dd0415 Kostas Papadimitriou
                        jQuery.css( elem, name );
6578 18059f42 Kostas Papadimitriou
        }, name, value, arguments.length > 1 );
6579 a7dd0415 Kostas Papadimitriou
};
6580 a7dd0415 Kostas Papadimitriou
6581 a7dd0415 Kostas Papadimitriou
jQuery.extend({
6582 a7dd0415 Kostas Papadimitriou
        // Add in style property hooks for overriding the default
6583 a7dd0415 Kostas Papadimitriou
        // behavior of getting and setting a style property
6584 a7dd0415 Kostas Papadimitriou
        cssHooks: {
6585 a7dd0415 Kostas Papadimitriou
                opacity: {
6586 a7dd0415 Kostas Papadimitriou
                        get: function( elem, computed ) {
6587 a7dd0415 Kostas Papadimitriou
                                if ( computed ) {
6588 a7dd0415 Kostas Papadimitriou
                                        // We should always get a number back from opacity
6589 18059f42 Kostas Papadimitriou
                                        var ret = curCSS( elem, "opacity" );
6590 a7dd0415 Kostas Papadimitriou
                                        return ret === "" ? "1" : ret;
6591 a7dd0415 Kostas Papadimitriou
6592 a7dd0415 Kostas Papadimitriou
                                } else {
6593 a7dd0415 Kostas Papadimitriou
                                        return elem.style.opacity;
6594 a7dd0415 Kostas Papadimitriou
                                }
6595 a7dd0415 Kostas Papadimitriou
                        }
6596 a7dd0415 Kostas Papadimitriou
                }
6597 a7dd0415 Kostas Papadimitriou
        },
6598 a7dd0415 Kostas Papadimitriou
6599 a7dd0415 Kostas Papadimitriou
        // Exclude the following css properties to add px
6600 a7dd0415 Kostas Papadimitriou
        cssNumber: {
6601 a7dd0415 Kostas Papadimitriou
                "fillOpacity": true,
6602 a7dd0415 Kostas Papadimitriou
                "fontWeight": true,
6603 a7dd0415 Kostas Papadimitriou
                "lineHeight": true,
6604 a7dd0415 Kostas Papadimitriou
                "opacity": true,
6605 a7dd0415 Kostas Papadimitriou
                "orphans": true,
6606 a7dd0415 Kostas Papadimitriou
                "widows": true,
6607 a7dd0415 Kostas Papadimitriou
                "zIndex": true,
6608 a7dd0415 Kostas Papadimitriou
                "zoom": true
6609 a7dd0415 Kostas Papadimitriou
        },
6610 a7dd0415 Kostas Papadimitriou
6611 a7dd0415 Kostas Papadimitriou
        // Add in properties whose names you wish to fix before
6612 a7dd0415 Kostas Papadimitriou
        // setting or getting the value
6613 a7dd0415 Kostas Papadimitriou
        cssProps: {
6614 a7dd0415 Kostas Papadimitriou
                // normalize float css property
6615 a7dd0415 Kostas Papadimitriou
                "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
6616 a7dd0415 Kostas Papadimitriou
        },
6617 a7dd0415 Kostas Papadimitriou
6618 a7dd0415 Kostas Papadimitriou
        // Get and set the style property on a DOM Node
6619 a7dd0415 Kostas Papadimitriou
        style: function( elem, name, value, extra ) {
6620 a7dd0415 Kostas Papadimitriou
                // Don't set styles on text and comment nodes
6621 a7dd0415 Kostas Papadimitriou
                if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
6622 a7dd0415 Kostas Papadimitriou
                        return;
6623 a7dd0415 Kostas Papadimitriou
                }
6624 a7dd0415 Kostas Papadimitriou
6625 a7dd0415 Kostas Papadimitriou
                // Make sure that we're working with the right name
6626 a7dd0415 Kostas Papadimitriou
                var ret, type, origName = jQuery.camelCase( name ),
6627 a7dd0415 Kostas Papadimitriou
                        style = elem.style, hooks = jQuery.cssHooks[ origName ];
6628 a7dd0415 Kostas Papadimitriou
6629 a7dd0415 Kostas Papadimitriou
                name = jQuery.cssProps[ origName ] || origName;
6630 a7dd0415 Kostas Papadimitriou
6631 a7dd0415 Kostas Papadimitriou
                // Check if we're setting a value
6632 a7dd0415 Kostas Papadimitriou
                if ( value !== undefined ) {
6633 a7dd0415 Kostas Papadimitriou
                        type = typeof value;
6634 a7dd0415 Kostas Papadimitriou
6635 a7dd0415 Kostas Papadimitriou
                        // convert relative number strings (+= or -=) to relative numbers. #7345
6636 a7dd0415 Kostas Papadimitriou
                        if ( type === "string" && (ret = rrelNum.exec( value )) ) {
6637 a7dd0415 Kostas Papadimitriou
                                value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
6638 a7dd0415 Kostas Papadimitriou
                                // Fixes bug #9237
6639 a7dd0415 Kostas Papadimitriou
                                type = "number";
6640 a7dd0415 Kostas Papadimitriou
                        }
6641 a7dd0415 Kostas Papadimitriou
6642 a7dd0415 Kostas Papadimitriou
                        // Make sure that NaN and null values aren't set. See: #7116
6643 a7dd0415 Kostas Papadimitriou
                        if ( value == null || type === "number" && isNaN( value ) ) {
6644 a7dd0415 Kostas Papadimitriou
                                return;
6645 a7dd0415 Kostas Papadimitriou
                        }
6646 a7dd0415 Kostas Papadimitriou
6647 a7dd0415 Kostas Papadimitriou
                        // If a number was passed in, add 'px' to the (except for certain CSS properties)
6648 a7dd0415 Kostas Papadimitriou
                        if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
6649 a7dd0415 Kostas Papadimitriou
                                value += "px";
6650 a7dd0415 Kostas Papadimitriou
                        }
6651 a7dd0415 Kostas Papadimitriou
6652 a7dd0415 Kostas Papadimitriou
                        // If a hook was provided, use that value, otherwise just set the specified value
6653 a7dd0415 Kostas Papadimitriou
                        if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
6654 a7dd0415 Kostas Papadimitriou
                                // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
6655 a7dd0415 Kostas Papadimitriou
                                // Fixes bug #5509
6656 a7dd0415 Kostas Papadimitriou
                                try {
6657 a7dd0415 Kostas Papadimitriou
                                        style[ name ] = value;
6658 a7dd0415 Kostas Papadimitriou
                                } catch(e) {}
6659 a7dd0415 Kostas Papadimitriou
                        }
6660 a7dd0415 Kostas Papadimitriou
6661 a7dd0415 Kostas Papadimitriou
                } else {
6662 a7dd0415 Kostas Papadimitriou
                        // If a hook was provided get the non-computed value from there
6663 a7dd0415 Kostas Papadimitriou
                        if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
6664 a7dd0415 Kostas Papadimitriou
                                return ret;
6665 a7dd0415 Kostas Papadimitriou
                        }
6666 a7dd0415 Kostas Papadimitriou
6667 a7dd0415 Kostas Papadimitriou
                        // Otherwise just get the value from the style object
6668 a7dd0415 Kostas Papadimitriou
                        return style[ name ];
6669 a7dd0415 Kostas Papadimitriou
                }
6670 a7dd0415 Kostas Papadimitriou
        },
6671 a7dd0415 Kostas Papadimitriou
6672 a7dd0415 Kostas Papadimitriou
        css: function( elem, name, extra ) {
6673 a7dd0415 Kostas Papadimitriou
                var ret, hooks;
6674 a7dd0415 Kostas Papadimitriou
6675 a7dd0415 Kostas Papadimitriou
                // Make sure that we're working with the right name
6676 a7dd0415 Kostas Papadimitriou
                name = jQuery.camelCase( name );
6677 a7dd0415 Kostas Papadimitriou
                hooks = jQuery.cssHooks[ name ];
6678 a7dd0415 Kostas Papadimitriou
                name = jQuery.cssProps[ name ] || name;
6679 a7dd0415 Kostas Papadimitriou
6680 a7dd0415 Kostas Papadimitriou
                // cssFloat needs a special treatment
6681 a7dd0415 Kostas Papadimitriou
                if ( name === "cssFloat" ) {
6682 a7dd0415 Kostas Papadimitriou
                        name = "float";
6683 a7dd0415 Kostas Papadimitriou
                }
6684 a7dd0415 Kostas Papadimitriou
6685 a7dd0415 Kostas Papadimitriou
                // If a hook was provided get the computed value from there
6686 a7dd0415 Kostas Papadimitriou
                if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
6687 a7dd0415 Kostas Papadimitriou
                        return ret;
6688 a7dd0415 Kostas Papadimitriou
6689 a7dd0415 Kostas Papadimitriou
                // Otherwise, if a way to get the computed value exists, use that
6690 a7dd0415 Kostas Papadimitriou
                } else if ( curCSS ) {
6691 a7dd0415 Kostas Papadimitriou
                        return curCSS( elem, name );
6692 a7dd0415 Kostas Papadimitriou
                }
6693 a7dd0415 Kostas Papadimitriou
        },
6694 a7dd0415 Kostas Papadimitriou
6695 a7dd0415 Kostas Papadimitriou
        // A method for quickly swapping in/out CSS properties to get correct calculations
6696 a7dd0415 Kostas Papadimitriou
        swap: function( elem, options, callback ) {
6697 18059f42 Kostas Papadimitriou
                var old = {},
6698 18059f42 Kostas Papadimitriou
                        ret, name;
6699 a7dd0415 Kostas Papadimitriou
6700 a7dd0415 Kostas Papadimitriou
                // Remember the old values, and insert the new ones
6701 18059f42 Kostas Papadimitriou
                for ( name in options ) {
6702 a7dd0415 Kostas Papadimitriou
                        old[ name ] = elem.style[ name ];
6703 a7dd0415 Kostas Papadimitriou
                        elem.style[ name ] = options[ name ];
6704 a7dd0415 Kostas Papadimitriou
                }
6705 a7dd0415 Kostas Papadimitriou
6706 18059f42 Kostas Papadimitriou
                ret = callback.call( elem );
6707 a7dd0415 Kostas Papadimitriou
6708 a7dd0415 Kostas Papadimitriou
                // Revert the old values
6709 a7dd0415 Kostas Papadimitriou
                for ( name in options ) {
6710 a7dd0415 Kostas Papadimitriou
                        elem.style[ name ] = old[ name ];
6711 a7dd0415 Kostas Papadimitriou
                }
6712 18059f42 Kostas Papadimitriou
6713 18059f42 Kostas Papadimitriou
                return ret;
6714 a7dd0415 Kostas Papadimitriou
        }
6715 a7dd0415 Kostas Papadimitriou
});
6716 a7dd0415 Kostas Papadimitriou
6717 18059f42 Kostas Papadimitriou
// DEPRECATED in 1.3, Use jQuery.css() instead
6718 a7dd0415 Kostas Papadimitriou
jQuery.curCSS = jQuery.css;
6719 a7dd0415 Kostas Papadimitriou
6720 a7dd0415 Kostas Papadimitriou
if ( document.defaultView && document.defaultView.getComputedStyle ) {
6721 a7dd0415 Kostas Papadimitriou
        getComputedStyle = function( elem, name ) {
6722 18059f42 Kostas Papadimitriou
                var ret, defaultView, computedStyle, width,
6723 18059f42 Kostas Papadimitriou
                        style = elem.style;
6724 a7dd0415 Kostas Papadimitriou
6725 a7dd0415 Kostas Papadimitriou
                name = name.replace( rupper, "-$1" ).toLowerCase();
6726 a7dd0415 Kostas Papadimitriou
6727 a7dd0415 Kostas Papadimitriou
                if ( (defaultView = elem.ownerDocument.defaultView) &&
6728 a7dd0415 Kostas Papadimitriou
                                (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
6729 18059f42 Kostas Papadimitriou
6730 a7dd0415 Kostas Papadimitriou
                        ret = computedStyle.getPropertyValue( name );
6731 a7dd0415 Kostas Papadimitriou
                        if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
6732 a7dd0415 Kostas Papadimitriou
                                ret = jQuery.style( elem, name );
6733 a7dd0415 Kostas Papadimitriou
                        }
6734 a7dd0415 Kostas Papadimitriou
                }
6735 a7dd0415 Kostas Papadimitriou
6736 18059f42 Kostas Papadimitriou
                // A tribute to the "awesome hack by Dean Edwards"
6737 18059f42 Kostas Papadimitriou
                // WebKit uses "computed value (percentage if specified)" instead of "used value" for margins
6738 18059f42 Kostas Papadimitriou
                // which is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
6739 18059f42 Kostas Papadimitriou
                if ( !jQuery.support.pixelMargin && computedStyle && rmargin.test( name ) && rnumnonpx.test( ret ) ) {
6740 18059f42 Kostas Papadimitriou
                        width = style.width;
6741 18059f42 Kostas Papadimitriou
                        style.width = ret;
6742 18059f42 Kostas Papadimitriou
                        ret = computedStyle.width;
6743 18059f42 Kostas Papadimitriou
                        style.width = width;
6744 18059f42 Kostas Papadimitriou
                }
6745 18059f42 Kostas Papadimitriou
6746 a7dd0415 Kostas Papadimitriou
                return ret;
6747 a7dd0415 Kostas Papadimitriou
        };
6748 a7dd0415 Kostas Papadimitriou
}
6749 a7dd0415 Kostas Papadimitriou
6750 a7dd0415 Kostas Papadimitriou
if ( document.documentElement.currentStyle ) {
6751 a7dd0415 Kostas Papadimitriou
        currentStyle = function( elem, name ) {
6752 a7dd0415 Kostas Papadimitriou
                var left, rsLeft, uncomputed,
6753 a7dd0415 Kostas Papadimitriou
                        ret = elem.currentStyle && elem.currentStyle[ name ],
6754 a7dd0415 Kostas Papadimitriou
                        style = elem.style;
6755 a7dd0415 Kostas Papadimitriou
6756 a7dd0415 Kostas Papadimitriou
                // Avoid setting ret to empty string here
6757 a7dd0415 Kostas Papadimitriou
                // so we don't default to auto
6758 18059f42 Kostas Papadimitriou
                if ( ret == null && style && (uncomputed = style[ name ]) ) {
6759 a7dd0415 Kostas Papadimitriou
                        ret = uncomputed;
6760 a7dd0415 Kostas Papadimitriou
                }
6761 a7dd0415 Kostas Papadimitriou
6762 a7dd0415 Kostas Papadimitriou
                // From the awesome hack by Dean Edwards
6763 a7dd0415 Kostas Papadimitriou
                // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
6764 a7dd0415 Kostas Papadimitriou
6765 a7dd0415 Kostas Papadimitriou
                // If we're not dealing with a regular pixel number
6766 a7dd0415 Kostas Papadimitriou
                // but a number that has a weird ending, we need to convert it to pixels
6767 18059f42 Kostas Papadimitriou
                if ( rnumnonpx.test( ret ) ) {
6768 a7dd0415 Kostas Papadimitriou
6769 a7dd0415 Kostas Papadimitriou
                        // Remember the original values
6770 a7dd0415 Kostas Papadimitriou
                        left = style.left;
6771 a7dd0415 Kostas Papadimitriou
                        rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
6772 a7dd0415 Kostas Papadimitriou
6773 a7dd0415 Kostas Papadimitriou
                        // Put in the new values to get a computed value out
6774 a7dd0415 Kostas Papadimitriou
                        if ( rsLeft ) {
6775 a7dd0415 Kostas Papadimitriou
                                elem.runtimeStyle.left = elem.currentStyle.left;
6776 a7dd0415 Kostas Papadimitriou
                        }
6777 18059f42 Kostas Papadimitriou
                        style.left = name === "fontSize" ? "1em" : ret;
6778 a7dd0415 Kostas Papadimitriou
                        ret = style.pixelLeft + "px";
6779 a7dd0415 Kostas Papadimitriou
6780 a7dd0415 Kostas Papadimitriou
                        // Revert the changed values
6781 a7dd0415 Kostas Papadimitriou
                        style.left = left;
6782 a7dd0415 Kostas Papadimitriou
                        if ( rsLeft ) {
6783 a7dd0415 Kostas Papadimitriou
                                elem.runtimeStyle.left = rsLeft;
6784 a7dd0415 Kostas Papadimitriou
                        }
6785 a7dd0415 Kostas Papadimitriou
                }
6786 a7dd0415 Kostas Papadimitriou
6787 a7dd0415 Kostas Papadimitriou
                return ret === "" ? "auto" : ret;
6788 a7dd0415 Kostas Papadimitriou
        };
6789 a7dd0415 Kostas Papadimitriou
}
6790 a7dd0415 Kostas Papadimitriou
6791 a7dd0415 Kostas Papadimitriou
curCSS = getComputedStyle || currentStyle;
6792 a7dd0415 Kostas Papadimitriou
6793 18059f42 Kostas Papadimitriou
function getWidthOrHeight( elem, name, extra ) {
6794 a7dd0415 Kostas Papadimitriou
6795 a7dd0415 Kostas Papadimitriou
        // Start with offset property
6796 a7dd0415 Kostas Papadimitriou
        var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
6797 18059f42 Kostas Papadimitriou
                i = name === "width" ? 1 : 0,
6798 18059f42 Kostas Papadimitriou
                len = 4;
6799 a7dd0415 Kostas Papadimitriou
6800 a7dd0415 Kostas Papadimitriou
        if ( val > 0 ) {
6801 a7dd0415 Kostas Papadimitriou
                if ( extra !== "border" ) {
6802 18059f42 Kostas Papadimitriou
                        for ( ; i < len; i += 2 ) {
6803 a7dd0415 Kostas Papadimitriou
                                if ( !extra ) {
6804 18059f42 Kostas Papadimitriou
                                        val -= parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0;
6805 a7dd0415 Kostas Papadimitriou
                                }
6806 a7dd0415 Kostas Papadimitriou
                                if ( extra === "margin" ) {
6807 18059f42 Kostas Papadimitriou
                                        val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ] ) ) || 0;
6808 a7dd0415 Kostas Papadimitriou
                                } else {
6809 18059f42 Kostas Papadimitriou
                                        val -= parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
6810 a7dd0415 Kostas Papadimitriou
                                }
6811 a7dd0415 Kostas Papadimitriou
                        }
6812 a7dd0415 Kostas Papadimitriou
                }
6813 a7dd0415 Kostas Papadimitriou
6814 a7dd0415 Kostas Papadimitriou
                return val + "px";
6815 a7dd0415 Kostas Papadimitriou
        }
6816 a7dd0415 Kostas Papadimitriou
6817 a7dd0415 Kostas Papadimitriou
        // Fall back to computed then uncomputed css if necessary
6818 18059f42 Kostas Papadimitriou
        val = curCSS( elem, name );
6819 a7dd0415 Kostas Papadimitriou
        if ( val < 0 || val == null ) {
6820 18059f42 Kostas Papadimitriou
                val = elem.style[ name ];
6821 a7dd0415 Kostas Papadimitriou
        }
6822 18059f42 Kostas Papadimitriou
6823 18059f42 Kostas Papadimitriou
        // Computed unit is not pixels. Stop here and return.
6824 18059f42 Kostas Papadimitriou
        if ( rnumnonpx.test(val) ) {
6825 18059f42 Kostas Papadimitriou
                return val;
6826 18059f42 Kostas Papadimitriou
        }
6827 18059f42 Kostas Papadimitriou
6828 a7dd0415 Kostas Papadimitriou
        // Normalize "", auto, and prepare for extra
6829 a7dd0415 Kostas Papadimitriou
        val = parseFloat( val ) || 0;
6830 a7dd0415 Kostas Papadimitriou
6831 a7dd0415 Kostas Papadimitriou
        // Add padding, border, margin
6832 a7dd0415 Kostas Papadimitriou
        if ( extra ) {
6833 18059f42 Kostas Papadimitriou
                for ( ; i < len; i += 2 ) {
6834 18059f42 Kostas Papadimitriou
                        val += parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0;
6835 a7dd0415 Kostas Papadimitriou
                        if ( extra !== "padding" ) {
6836 18059f42 Kostas Papadimitriou
                                val += parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
6837 a7dd0415 Kostas Papadimitriou
                        }
6838 a7dd0415 Kostas Papadimitriou
                        if ( extra === "margin" ) {
6839 18059f42 Kostas Papadimitriou
                                val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ]) ) || 0;
6840 a7dd0415 Kostas Papadimitriou
                        }
6841 a7dd0415 Kostas Papadimitriou
                }
6842 a7dd0415 Kostas Papadimitriou
        }
6843 a7dd0415 Kostas Papadimitriou
6844 a7dd0415 Kostas Papadimitriou
        return val + "px";
6845 a7dd0415 Kostas Papadimitriou
}
6846 a7dd0415 Kostas Papadimitriou
6847 18059f42 Kostas Papadimitriou
jQuery.each([ "height", "width" ], function( i, name ) {
6848 18059f42 Kostas Papadimitriou
        jQuery.cssHooks[ name ] = {
6849 18059f42 Kostas Papadimitriou
                get: function( elem, computed, extra ) {
6850 18059f42 Kostas Papadimitriou
                        if ( computed ) {
6851 18059f42 Kostas Papadimitriou
                                if ( elem.offsetWidth !== 0 ) {
6852 18059f42 Kostas Papadimitriou
                                        return getWidthOrHeight( elem, name, extra );
6853 18059f42 Kostas Papadimitriou
                                } else {
6854 18059f42 Kostas Papadimitriou
                                        return jQuery.swap( elem, cssShow, function() {
6855 18059f42 Kostas Papadimitriou
                                                return getWidthOrHeight( elem, name, extra );
6856 18059f42 Kostas Papadimitriou
                                        });
6857 18059f42 Kostas Papadimitriou
                                }
6858 18059f42 Kostas Papadimitriou
                        }
6859 18059f42 Kostas Papadimitriou
                },
6860 18059f42 Kostas Papadimitriou
6861 18059f42 Kostas Papadimitriou
                set: function( elem, value ) {
6862 18059f42 Kostas Papadimitriou
                        return rnum.test( value ) ?
6863 18059f42 Kostas Papadimitriou
                                value + "px" :
6864 18059f42 Kostas Papadimitriou
                                value;
6865 18059f42 Kostas Papadimitriou
                }
6866 18059f42 Kostas Papadimitriou
        };
6867 18059f42 Kostas Papadimitriou
});
6868 18059f42 Kostas Papadimitriou
6869 18059f42 Kostas Papadimitriou
if ( !jQuery.support.opacity ) {
6870 18059f42 Kostas Papadimitriou
        jQuery.cssHooks.opacity = {
6871 18059f42 Kostas Papadimitriou
                get: function( elem, computed ) {
6872 18059f42 Kostas Papadimitriou
                        // IE uses filters for opacity
6873 18059f42 Kostas Papadimitriou
                        return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
6874 18059f42 Kostas Papadimitriou
                                ( parseFloat( RegExp.$1 ) / 100 ) + "" :
6875 18059f42 Kostas Papadimitriou
                                computed ? "1" : "";
6876 18059f42 Kostas Papadimitriou
                },
6877 18059f42 Kostas Papadimitriou
6878 18059f42 Kostas Papadimitriou
                set: function( elem, value ) {
6879 18059f42 Kostas Papadimitriou
                        var style = elem.style,
6880 18059f42 Kostas Papadimitriou
                                currentStyle = elem.currentStyle,
6881 18059f42 Kostas Papadimitriou
                                opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
6882 18059f42 Kostas Papadimitriou
                                filter = currentStyle && currentStyle.filter || style.filter || "";
6883 18059f42 Kostas Papadimitriou
6884 18059f42 Kostas Papadimitriou
                        // IE has trouble with opacity if it does not have layout
6885 18059f42 Kostas Papadimitriou
                        // Force it by setting the zoom level
6886 18059f42 Kostas Papadimitriou
                        style.zoom = 1;
6887 18059f42 Kostas Papadimitriou
6888 18059f42 Kostas Papadimitriou
                        // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
6889 18059f42 Kostas Papadimitriou
                        if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
6890 18059f42 Kostas Papadimitriou
6891 18059f42 Kostas Papadimitriou
                                // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
6892 18059f42 Kostas Papadimitriou
                                // if "filter:" is present at all, clearType is disabled, we want to avoid this
6893 18059f42 Kostas Papadimitriou
                                // style.removeAttribute is IE Only, but so apparently is this code path...
6894 18059f42 Kostas Papadimitriou
                                style.removeAttribute( "filter" );
6895 18059f42 Kostas Papadimitriou
6896 18059f42 Kostas Papadimitriou
                                // if there there is no filter style applied in a css rule, we are done
6897 18059f42 Kostas Papadimitriou
                                if ( currentStyle && !currentStyle.filter ) {
6898 18059f42 Kostas Papadimitriou
                                        return;
6899 18059f42 Kostas Papadimitriou
                                }
6900 18059f42 Kostas Papadimitriou
                        }
6901 18059f42 Kostas Papadimitriou
6902 18059f42 Kostas Papadimitriou
                        // otherwise, set new filter values
6903 18059f42 Kostas Papadimitriou
                        style.filter = ralpha.test( filter ) ?
6904 18059f42 Kostas Papadimitriou
                                filter.replace( ralpha, opacity ) :
6905 18059f42 Kostas Papadimitriou
                                filter + " " + opacity;
6906 18059f42 Kostas Papadimitriou
                }
6907 18059f42 Kostas Papadimitriou
        };
6908 18059f42 Kostas Papadimitriou
}
6909 18059f42 Kostas Papadimitriou
6910 18059f42 Kostas Papadimitriou
jQuery(function() {
6911 18059f42 Kostas Papadimitriou
        // This hook cannot be added until DOM ready because the support test
6912 18059f42 Kostas Papadimitriou
        // for it is not run until after DOM ready
6913 18059f42 Kostas Papadimitriou
        if ( !jQuery.support.reliableMarginRight ) {
6914 18059f42 Kostas Papadimitriou
                jQuery.cssHooks.marginRight = {
6915 18059f42 Kostas Papadimitriou
                        get: function( elem, computed ) {
6916 18059f42 Kostas Papadimitriou
                                // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
6917 18059f42 Kostas Papadimitriou
                                // Work around by temporarily setting element display to inline-block
6918 18059f42 Kostas Papadimitriou
                                return jQuery.swap( elem, { "display": "inline-block" }, function() {
6919 18059f42 Kostas Papadimitriou
                                        if ( computed ) {
6920 18059f42 Kostas Papadimitriou
                                                return curCSS( elem, "margin-right" );
6921 18059f42 Kostas Papadimitriou
                                        } else {
6922 18059f42 Kostas Papadimitriou
                                                return elem.style.marginRight;
6923 18059f42 Kostas Papadimitriou
                                        }
6924 18059f42 Kostas Papadimitriou
                                });
6925 18059f42 Kostas Papadimitriou
                        }
6926 18059f42 Kostas Papadimitriou
                };
6927 18059f42 Kostas Papadimitriou
        }
6928 18059f42 Kostas Papadimitriou
});
6929 18059f42 Kostas Papadimitriou
6930 a7dd0415 Kostas Papadimitriou
if ( jQuery.expr && jQuery.expr.filters ) {
6931 a7dd0415 Kostas Papadimitriou
        jQuery.expr.filters.hidden = function( elem ) {
6932 a7dd0415 Kostas Papadimitriou
                var width = elem.offsetWidth,
6933 a7dd0415 Kostas Papadimitriou
                        height = elem.offsetHeight;
6934 a7dd0415 Kostas Papadimitriou
6935 a7dd0415 Kostas Papadimitriou
                return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
6936 a7dd0415 Kostas Papadimitriou
        };
6937 a7dd0415 Kostas Papadimitriou
6938 a7dd0415 Kostas Papadimitriou
        jQuery.expr.filters.visible = function( elem ) {
6939 a7dd0415 Kostas Papadimitriou
                return !jQuery.expr.filters.hidden( elem );
6940 a7dd0415 Kostas Papadimitriou
        };
6941 a7dd0415 Kostas Papadimitriou
}
6942 a7dd0415 Kostas Papadimitriou
6943 18059f42 Kostas Papadimitriou
// These hooks are used by animate to expand properties
6944 18059f42 Kostas Papadimitriou
jQuery.each({
6945 18059f42 Kostas Papadimitriou
        margin: "",
6946 18059f42 Kostas Papadimitriou
        padding: "",
6947 18059f42 Kostas Papadimitriou
        border: "Width"
6948 18059f42 Kostas Papadimitriou
}, function( prefix, suffix ) {
6949 18059f42 Kostas Papadimitriou
6950 18059f42 Kostas Papadimitriou
        jQuery.cssHooks[ prefix + suffix ] = {
6951 18059f42 Kostas Papadimitriou
                expand: function( value ) {
6952 18059f42 Kostas Papadimitriou
                        var i,
6953 18059f42 Kostas Papadimitriou
6954 18059f42 Kostas Papadimitriou
                                // assumes a single number if not a string
6955 18059f42 Kostas Papadimitriou
                                parts = typeof value === "string" ? value.split(" ") : [ value ],
6956 18059f42 Kostas Papadimitriou
                                expanded = {};
6957 18059f42 Kostas Papadimitriou
6958 18059f42 Kostas Papadimitriou
                        for ( i = 0; i < 4; i++ ) {
6959 18059f42 Kostas Papadimitriou
                                expanded[ prefix + cssExpand[ i ] + suffix ] =
6960 18059f42 Kostas Papadimitriou
                                        parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
6961 18059f42 Kostas Papadimitriou
                        }
6962 18059f42 Kostas Papadimitriou
6963 18059f42 Kostas Papadimitriou
                        return expanded;
6964 18059f42 Kostas Papadimitriou
                }
6965 18059f42 Kostas Papadimitriou
        };
6966 18059f42 Kostas Papadimitriou
});
6967 18059f42 Kostas Papadimitriou
6968 a7dd0415 Kostas Papadimitriou
6969 a7dd0415 Kostas Papadimitriou
6970 a7dd0415 Kostas Papadimitriou
6971 a7dd0415 Kostas Papadimitriou
var r20 = /%20/g,
6972 a7dd0415 Kostas Papadimitriou
        rbracket = /\[\]$/,
6973 a7dd0415 Kostas Papadimitriou
        rCRLF = /\r?\n/g,
6974 a7dd0415 Kostas Papadimitriou
        rhash = /#.*$/,
6975 a7dd0415 Kostas Papadimitriou
        rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
6976 a7dd0415 Kostas Papadimitriou
        rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
6977 a7dd0415 Kostas Papadimitriou
        // #7653, #8125, #8152: local protocol detection
6978 a7dd0415 Kostas Papadimitriou
        rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
6979 a7dd0415 Kostas Papadimitriou
        rnoContent = /^(?:GET|HEAD)$/,
6980 a7dd0415 Kostas Papadimitriou
        rprotocol = /^\/\//,
6981 a7dd0415 Kostas Papadimitriou
        rquery = /\?/,
6982 a7dd0415 Kostas Papadimitriou
        rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
6983 a7dd0415 Kostas Papadimitriou
        rselectTextarea = /^(?:select|textarea)/i,
6984 a7dd0415 Kostas Papadimitriou
        rspacesAjax = /\s+/,
6985 a7dd0415 Kostas Papadimitriou
        rts = /([?&])_=[^&]*/,
6986 a7dd0415 Kostas Papadimitriou
        rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
6987 a7dd0415 Kostas Papadimitriou
6988 a7dd0415 Kostas Papadimitriou
        // Keep a copy of the old load method
6989 a7dd0415 Kostas Papadimitriou
        _load = jQuery.fn.load,
6990 a7dd0415 Kostas Papadimitriou
6991 a7dd0415 Kostas Papadimitriou
        /* Prefilters
6992 a7dd0415 Kostas Papadimitriou
         * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
6993 a7dd0415 Kostas Papadimitriou
         * 2) These are called:
6994 a7dd0415 Kostas Papadimitriou
         *    - BEFORE asking for a transport
6995 a7dd0415 Kostas Papadimitriou
         *    - AFTER param serialization (s.data is a string if s.processData is true)
6996 a7dd0415 Kostas Papadimitriou
         * 3) key is the dataType
6997 a7dd0415 Kostas Papadimitriou
         * 4) the catchall symbol "*" can be used
6998 a7dd0415 Kostas Papadimitriou
         * 5) execution will start with transport dataType and THEN continue down to "*" if needed
6999 a7dd0415 Kostas Papadimitriou
         */
7000 a7dd0415 Kostas Papadimitriou
        prefilters = {},
7001 a7dd0415 Kostas Papadimitriou
7002 a7dd0415 Kostas Papadimitriou
        /* Transports bindings
7003 a7dd0415 Kostas Papadimitriou
         * 1) key is the dataType
7004 a7dd0415 Kostas Papadimitriou
         * 2) the catchall symbol "*" can be used
7005 a7dd0415 Kostas Papadimitriou
         * 3) selection will start with transport dataType and THEN go to "*" if needed
7006 a7dd0415 Kostas Papadimitriou
         */
7007 a7dd0415 Kostas Papadimitriou
        transports = {},
7008 a7dd0415 Kostas Papadimitriou
7009 a7dd0415 Kostas Papadimitriou
        // Document location
7010 a7dd0415 Kostas Papadimitriou
        ajaxLocation,
7011 a7dd0415 Kostas Papadimitriou
7012 a7dd0415 Kostas Papadimitriou
        // Document location segments
7013 a7dd0415 Kostas Papadimitriou
        ajaxLocParts,
7014 a7dd0415 Kostas Papadimitriou
7015 a7dd0415 Kostas Papadimitriou
        // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
7016 a7dd0415 Kostas Papadimitriou
        allTypes = ["*/"] + ["*"];
7017 a7dd0415 Kostas Papadimitriou
7018 a7dd0415 Kostas Papadimitriou
// #8138, IE may throw an exception when accessing
7019 a7dd0415 Kostas Papadimitriou
// a field from window.location if document.domain has been set
7020 a7dd0415 Kostas Papadimitriou
try {
7021 a7dd0415 Kostas Papadimitriou
        ajaxLocation = location.href;
7022 a7dd0415 Kostas Papadimitriou
} catch( e ) {
7023 a7dd0415 Kostas Papadimitriou
        // Use the href attribute of an A element
7024 a7dd0415 Kostas Papadimitriou
        // since IE will modify it given document.location
7025 a7dd0415 Kostas Papadimitriou
        ajaxLocation = document.createElement( "a" );
7026 a7dd0415 Kostas Papadimitriou
        ajaxLocation.href = "";
7027 a7dd0415 Kostas Papadimitriou
        ajaxLocation = ajaxLocation.href;
7028 a7dd0415 Kostas Papadimitriou
}
7029 a7dd0415 Kostas Papadimitriou
7030 a7dd0415 Kostas Papadimitriou
// Segment location into parts
7031 a7dd0415 Kostas Papadimitriou
ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
7032 a7dd0415 Kostas Papadimitriou
7033 a7dd0415 Kostas Papadimitriou
// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
7034 a7dd0415 Kostas Papadimitriou
function addToPrefiltersOrTransports( structure ) {
7035 a7dd0415 Kostas Papadimitriou
7036 a7dd0415 Kostas Papadimitriou
        // dataTypeExpression is optional and defaults to "*"
7037 a7dd0415 Kostas Papadimitriou
        return function( dataTypeExpression, func ) {
7038 a7dd0415 Kostas Papadimitriou
7039 a7dd0415 Kostas Papadimitriou
                if ( typeof dataTypeExpression !== "string" ) {
7040 a7dd0415 Kostas Papadimitriou
                        func = dataTypeExpression;
7041 a7dd0415 Kostas Papadimitriou
                        dataTypeExpression = "*";
7042 a7dd0415 Kostas Papadimitriou
                }
7043 a7dd0415 Kostas Papadimitriou
7044 a7dd0415 Kostas Papadimitriou
                if ( jQuery.isFunction( func ) ) {
7045 a7dd0415 Kostas Papadimitriou
                        var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
7046 a7dd0415 Kostas Papadimitriou
                                i = 0,
7047 a7dd0415 Kostas Papadimitriou
                                length = dataTypes.length,
7048 a7dd0415 Kostas Papadimitriou
                                dataType,
7049 a7dd0415 Kostas Papadimitriou
                                list,
7050 a7dd0415 Kostas Papadimitriou
                                placeBefore;
7051 a7dd0415 Kostas Papadimitriou
7052 a7dd0415 Kostas Papadimitriou
                        // For each dataType in the dataTypeExpression
7053 a7dd0415 Kostas Papadimitriou
                        for ( ; i < length; i++ ) {
7054 a7dd0415 Kostas Papadimitriou
                                dataType = dataTypes[ i ];
7055 a7dd0415 Kostas Papadimitriou
                                // We control if we're asked to add before
7056 a7dd0415 Kostas Papadimitriou
                                // any existing element
7057 a7dd0415 Kostas Papadimitriou
                                placeBefore = /^\+/.test( dataType );
7058 a7dd0415 Kostas Papadimitriou
                                if ( placeBefore ) {
7059 a7dd0415 Kostas Papadimitriou
                                        dataType = dataType.substr( 1 ) || "*";
7060 a7dd0415 Kostas Papadimitriou
                                }
7061 a7dd0415 Kostas Papadimitriou
                                list = structure[ dataType ] = structure[ dataType ] || [];
7062 a7dd0415 Kostas Papadimitriou
                                // then we add to the structure accordingly
7063 a7dd0415 Kostas Papadimitriou
                                list[ placeBefore ? "unshift" : "push" ]( func );
7064 a7dd0415 Kostas Papadimitriou
                        }
7065 a7dd0415 Kostas Papadimitriou
                }
7066 a7dd0415 Kostas Papadimitriou
        };
7067 a7dd0415 Kostas Papadimitriou
}
7068 a7dd0415 Kostas Papadimitriou
7069 a7dd0415 Kostas Papadimitriou
// Base inspection function for prefilters and transports
7070 a7dd0415 Kostas Papadimitriou
function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
7071 a7dd0415 Kostas Papadimitriou
                dataType /* internal */, inspected /* internal */ ) {
7072 a7dd0415 Kostas Papadimitriou
7073 a7dd0415 Kostas Papadimitriou
        dataType = dataType || options.dataTypes[ 0 ];
7074 a7dd0415 Kostas Papadimitriou
        inspected = inspected || {};
7075 a7dd0415 Kostas Papadimitriou
7076 a7dd0415 Kostas Papadimitriou
        inspected[ dataType ] = true;
7077 a7dd0415 Kostas Papadimitriou
7078 a7dd0415 Kostas Papadimitriou
        var list = structure[ dataType ],
7079 a7dd0415 Kostas Papadimitriou
                i = 0,
7080 a7dd0415 Kostas Papadimitriou
                length = list ? list.length : 0,
7081 a7dd0415 Kostas Papadimitriou
                executeOnly = ( structure === prefilters ),
7082 a7dd0415 Kostas Papadimitriou
                selection;
7083 a7dd0415 Kostas Papadimitriou
7084 a7dd0415 Kostas Papadimitriou
        for ( ; i < length && ( executeOnly || !selection ); i++ ) {
7085 a7dd0415 Kostas Papadimitriou
                selection = list[ i ]( options, originalOptions, jqXHR );
7086 a7dd0415 Kostas Papadimitriou
                // If we got redirected to another dataType
7087 a7dd0415 Kostas Papadimitriou
                // we try there if executing only and not done already
7088 a7dd0415 Kostas Papadimitriou
                if ( typeof selection === "string" ) {
7089 a7dd0415 Kostas Papadimitriou
                        if ( !executeOnly || inspected[ selection ] ) {
7090 a7dd0415 Kostas Papadimitriou
                                selection = undefined;
7091 a7dd0415 Kostas Papadimitriou
                        } else {
7092 a7dd0415 Kostas Papadimitriou
                                options.dataTypes.unshift( selection );
7093 a7dd0415 Kostas Papadimitriou
                                selection = inspectPrefiltersOrTransports(
7094 a7dd0415 Kostas Papadimitriou
                                                structure, options, originalOptions, jqXHR, selection, inspected );
7095 a7dd0415 Kostas Papadimitriou
                        }
7096 a7dd0415 Kostas Papadimitriou
                }
7097 a7dd0415 Kostas Papadimitriou
        }
7098 a7dd0415 Kostas Papadimitriou
        // If we're only executing or nothing was selected
7099 a7dd0415 Kostas Papadimitriou
        // we try the catchall dataType if not done already
7100 a7dd0415 Kostas Papadimitriou
        if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
7101 a7dd0415 Kostas Papadimitriou
                selection = inspectPrefiltersOrTransports(
7102 a7dd0415 Kostas Papadimitriou
                                structure, options, originalOptions, jqXHR, "*", inspected );
7103 a7dd0415 Kostas Papadimitriou
        }
7104 a7dd0415 Kostas Papadimitriou
        // unnecessary when only executing (prefilters)
7105 a7dd0415 Kostas Papadimitriou
        // but it'll be ignored by the caller in that case
7106 a7dd0415 Kostas Papadimitriou
        return selection;
7107 a7dd0415 Kostas Papadimitriou
}
7108 a7dd0415 Kostas Papadimitriou
7109 a7dd0415 Kostas Papadimitriou
// A special extend for ajax options
7110 a7dd0415 Kostas Papadimitriou
// that takes "flat" options (not to be deep extended)
7111 a7dd0415 Kostas Papadimitriou
// Fixes #9887
7112 a7dd0415 Kostas Papadimitriou
function ajaxExtend( target, src ) {
7113 a7dd0415 Kostas Papadimitriou
        var key, deep,
7114 a7dd0415 Kostas Papadimitriou
                flatOptions = jQuery.ajaxSettings.flatOptions || {};
7115 a7dd0415 Kostas Papadimitriou
        for ( key in src ) {
7116 a7dd0415 Kostas Papadimitriou
                if ( src[ key ] !== undefined ) {
7117 a7dd0415 Kostas Papadimitriou
                        ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
7118 a7dd0415 Kostas Papadimitriou
                }
7119 a7dd0415 Kostas Papadimitriou
        }
7120 a7dd0415 Kostas Papadimitriou
        if ( deep ) {
7121 a7dd0415 Kostas Papadimitriou
                jQuery.extend( true, target, deep );
7122 a7dd0415 Kostas Papadimitriou
        }
7123 a7dd0415 Kostas Papadimitriou
}
7124 a7dd0415 Kostas Papadimitriou
7125 a7dd0415 Kostas Papadimitriou
jQuery.fn.extend({
7126 a7dd0415 Kostas Papadimitriou
        load: function( url, params, callback ) {
7127 a7dd0415 Kostas Papadimitriou
                if ( typeof url !== "string" && _load ) {
7128 a7dd0415 Kostas Papadimitriou
                        return _load.apply( this, arguments );
7129 a7dd0415 Kostas Papadimitriou
7130 a7dd0415 Kostas Papadimitriou
                // Don't do a request if no elements are being requested
7131 a7dd0415 Kostas Papadimitriou
                } else if ( !this.length ) {
7132 a7dd0415 Kostas Papadimitriou
                        return this;
7133 a7dd0415 Kostas Papadimitriou
                }
7134 a7dd0415 Kostas Papadimitriou
7135 a7dd0415 Kostas Papadimitriou
                var off = url.indexOf( " " );
7136 a7dd0415 Kostas Papadimitriou
                if ( off >= 0 ) {
7137 a7dd0415 Kostas Papadimitriou
                        var selector = url.slice( off, url.length );
7138 a7dd0415 Kostas Papadimitriou
                        url = url.slice( 0, off );
7139 a7dd0415 Kostas Papadimitriou
                }
7140 a7dd0415 Kostas Papadimitriou
7141 a7dd0415 Kostas Papadimitriou
                // Default to a GET request
7142 a7dd0415 Kostas Papadimitriou
                var type = "GET";
7143 a7dd0415 Kostas Papadimitriou
7144 a7dd0415 Kostas Papadimitriou
                // If the second parameter was provided
7145 a7dd0415 Kostas Papadimitriou
                if ( params ) {
7146 a7dd0415 Kostas Papadimitriou
                        // If it's a function
7147 a7dd0415 Kostas Papadimitriou
                        if ( jQuery.isFunction( params ) ) {
7148 a7dd0415 Kostas Papadimitriou
                                // We assume that it's the callback
7149 a7dd0415 Kostas Papadimitriou
                                callback = params;
7150 a7dd0415 Kostas Papadimitriou
                                params = undefined;
7151 a7dd0415 Kostas Papadimitriou
7152 a7dd0415 Kostas Papadimitriou
                        // Otherwise, build a param string
7153 a7dd0415 Kostas Papadimitriou
                        } else if ( typeof params === "object" ) {
7154 a7dd0415 Kostas Papadimitriou
                                params = jQuery.param( params, jQuery.ajaxSettings.traditional );
7155 a7dd0415 Kostas Papadimitriou
                                type = "POST";
7156 a7dd0415 Kostas Papadimitriou
                        }
7157 a7dd0415 Kostas Papadimitriou
                }
7158 a7dd0415 Kostas Papadimitriou
7159 a7dd0415 Kostas Papadimitriou
                var self = this;
7160 a7dd0415 Kostas Papadimitriou
7161 a7dd0415 Kostas Papadimitriou
                // Request the remote document
7162 a7dd0415 Kostas Papadimitriou
                jQuery.ajax({
7163 a7dd0415 Kostas Papadimitriou
                        url: url,
7164 a7dd0415 Kostas Papadimitriou
                        type: type,
7165 a7dd0415 Kostas Papadimitriou
                        dataType: "html",
7166 a7dd0415 Kostas Papadimitriou
                        data: params,
7167 a7dd0415 Kostas Papadimitriou
                        // Complete callback (responseText is used internally)
7168 a7dd0415 Kostas Papadimitriou
                        complete: function( jqXHR, status, responseText ) {
7169 a7dd0415 Kostas Papadimitriou
                                // Store the response as specified by the jqXHR object
7170 a7dd0415 Kostas Papadimitriou
                                responseText = jqXHR.responseText;
7171 a7dd0415 Kostas Papadimitriou
                                // If successful, inject the HTML into all the matched elements
7172 a7dd0415 Kostas Papadimitriou
                                if ( jqXHR.isResolved() ) {
7173 a7dd0415 Kostas Papadimitriou
                                        // #4825: Get the actual response in case
7174 a7dd0415 Kostas Papadimitriou
                                        // a dataFilter is present in ajaxSettings
7175 a7dd0415 Kostas Papadimitriou
                                        jqXHR.done(function( r ) {
7176 a7dd0415 Kostas Papadimitriou
                                                responseText = r;
7177 a7dd0415 Kostas Papadimitriou
                                        });
7178 a7dd0415 Kostas Papadimitriou
                                        // See if a selector was specified
7179 a7dd0415 Kostas Papadimitriou
                                        self.html( selector ?
7180 a7dd0415 Kostas Papadimitriou
                                                // Create a dummy div to hold the results
7181 a7dd0415 Kostas Papadimitriou
                                                jQuery("<div>")
7182 a7dd0415 Kostas Papadimitriou
                                                        // inject the contents of the document in, removing the scripts
7183 a7dd0415 Kostas Papadimitriou
                                                        // to avoid any 'Permission Denied' errors in IE
7184 a7dd0415 Kostas Papadimitriou
                                                        .append(responseText.replace(rscript, ""))
7185 a7dd0415 Kostas Papadimitriou
7186 a7dd0415 Kostas Papadimitriou
                                                        // Locate the specified elements
7187 a7dd0415 Kostas Papadimitriou
                                                        .find(selector) :
7188 a7dd0415 Kostas Papadimitriou
7189 a7dd0415 Kostas Papadimitriou
                                                // If not, just inject the full result
7190 a7dd0415 Kostas Papadimitriou
                                                responseText );
7191 a7dd0415 Kostas Papadimitriou
                                }
7192 a7dd0415 Kostas Papadimitriou
7193 a7dd0415 Kostas Papadimitriou
                                if ( callback ) {
7194 a7dd0415 Kostas Papadimitriou
                                        self.each( callback, [ responseText, status, jqXHR ] );
7195 a7dd0415 Kostas Papadimitriou
                                }
7196 a7dd0415 Kostas Papadimitriou
                        }
7197 a7dd0415 Kostas Papadimitriou
                });
7198 a7dd0415 Kostas Papadimitriou
7199 a7dd0415 Kostas Papadimitriou
                return this;
7200 a7dd0415 Kostas Papadimitriou
        },
7201 a7dd0415 Kostas Papadimitriou
7202 a7dd0415 Kostas Papadimitriou
        serialize: function() {
7203 a7dd0415 Kostas Papadimitriou
                return jQuery.param( this.serializeArray() );
7204 a7dd0415 Kostas Papadimitriou
        },
7205 a7dd0415 Kostas Papadimitriou
7206 a7dd0415 Kostas Papadimitriou
        serializeArray: function() {
7207 a7dd0415 Kostas Papadimitriou
                return this.map(function(){
7208 a7dd0415 Kostas Papadimitriou
                        return this.elements ? jQuery.makeArray( this.elements ) : this;
7209 a7dd0415 Kostas Papadimitriou
                })
7210 a7dd0415 Kostas Papadimitriou
                .filter(function(){
7211 a7dd0415 Kostas Papadimitriou
                        return this.name && !this.disabled &&
7212 a7dd0415 Kostas Papadimitriou
                                ( this.checked || rselectTextarea.test( this.nodeName ) ||
7213 a7dd0415 Kostas Papadimitriou
                                        rinput.test( this.type ) );
7214 a7dd0415 Kostas Papadimitriou
                })
7215 a7dd0415 Kostas Papadimitriou
                .map(function( i, elem ){
7216 a7dd0415 Kostas Papadimitriou
                        var val = jQuery( this ).val();
7217 a7dd0415 Kostas Papadimitriou
7218 a7dd0415 Kostas Papadimitriou
                        return val == null ?
7219 a7dd0415 Kostas Papadimitriou
                                null :
7220 a7dd0415 Kostas Papadimitriou
                                jQuery.isArray( val ) ?
7221 a7dd0415 Kostas Papadimitriou
                                        jQuery.map( val, function( val, i ){
7222 a7dd0415 Kostas Papadimitriou
                                                return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
7223 a7dd0415 Kostas Papadimitriou
                                        }) :
7224 a7dd0415 Kostas Papadimitriou
                                        { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
7225 a7dd0415 Kostas Papadimitriou
                }).get();
7226 a7dd0415 Kostas Papadimitriou
        }
7227 a7dd0415 Kostas Papadimitriou
});
7228 a7dd0415 Kostas Papadimitriou
7229 a7dd0415 Kostas Papadimitriou
// Attach a bunch of functions for handling common AJAX events
7230 a7dd0415 Kostas Papadimitriou
jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
7231 a7dd0415 Kostas Papadimitriou
        jQuery.fn[ o ] = function( f ){
7232 a7dd0415 Kostas Papadimitriou
                return this.on( o, f );
7233 a7dd0415 Kostas Papadimitriou
        };
7234 a7dd0415 Kostas Papadimitriou
});
7235 a7dd0415 Kostas Papadimitriou
7236 a7dd0415 Kostas Papadimitriou
jQuery.each( [ "get", "post" ], function( i, method ) {
7237 a7dd0415 Kostas Papadimitriou
        jQuery[ method ] = function( url, data, callback, type ) {
7238 a7dd0415 Kostas Papadimitriou
                // shift arguments if data argument was omitted
7239 a7dd0415 Kostas Papadimitriou
                if ( jQuery.isFunction( data ) ) {
7240 a7dd0415 Kostas Papadimitriou
                        type = type || callback;
7241 a7dd0415 Kostas Papadimitriou
                        callback = data;
7242 a7dd0415 Kostas Papadimitriou
                        data = undefined;
7243 a7dd0415 Kostas Papadimitriou
                }
7244 a7dd0415 Kostas Papadimitriou
7245 a7dd0415 Kostas Papadimitriou
                return jQuery.ajax({
7246 a7dd0415 Kostas Papadimitriou
                        type: method,
7247 a7dd0415 Kostas Papadimitriou
                        url: url,
7248 a7dd0415 Kostas Papadimitriou
                        data: data,
7249 a7dd0415 Kostas Papadimitriou
                        success: callback,
7250 a7dd0415 Kostas Papadimitriou
                        dataType: type
7251 a7dd0415 Kostas Papadimitriou
                });
7252 a7dd0415 Kostas Papadimitriou
        };
7253 a7dd0415 Kostas Papadimitriou
});
7254 a7dd0415 Kostas Papadimitriou
7255 a7dd0415 Kostas Papadimitriou
jQuery.extend({
7256 a7dd0415 Kostas Papadimitriou
7257 a7dd0415 Kostas Papadimitriou
        getScript: function( url, callback ) {
7258 a7dd0415 Kostas Papadimitriou
                return jQuery.get( url, undefined, callback, "script" );
7259 a7dd0415 Kostas Papadimitriou
        },
7260 a7dd0415 Kostas Papadimitriou
7261 a7dd0415 Kostas Papadimitriou
        getJSON: function( url, data, callback ) {
7262 a7dd0415 Kostas Papadimitriou
                return jQuery.get( url, data, callback, "json" );
7263 a7dd0415 Kostas Papadimitriou
        },
7264 a7dd0415 Kostas Papadimitriou
7265 a7dd0415 Kostas Papadimitriou
        // Creates a full fledged settings object into target
7266 a7dd0415 Kostas Papadimitriou
        // with both ajaxSettings and settings fields.
7267 a7dd0415 Kostas Papadimitriou
        // If target is omitted, writes into ajaxSettings.
7268 a7dd0415 Kostas Papadimitriou
        ajaxSetup: function( target, settings ) {
7269 a7dd0415 Kostas Papadimitriou
                if ( settings ) {
7270 a7dd0415 Kostas Papadimitriou
                        // Building a settings object
7271 a7dd0415 Kostas Papadimitriou
                        ajaxExtend( target, jQuery.ajaxSettings );
7272 a7dd0415 Kostas Papadimitriou
                } else {
7273 a7dd0415 Kostas Papadimitriou
                        // Extending ajaxSettings
7274 a7dd0415 Kostas Papadimitriou
                        settings = target;
7275 a7dd0415 Kostas Papadimitriou
                        target = jQuery.ajaxSettings;
7276 a7dd0415 Kostas Papadimitriou
                }
7277 a7dd0415 Kostas Papadimitriou
                ajaxExtend( target, settings );
7278 a7dd0415 Kostas Papadimitriou
                return target;
7279 a7dd0415 Kostas Papadimitriou
        },
7280 a7dd0415 Kostas Papadimitriou
7281 a7dd0415 Kostas Papadimitriou
        ajaxSettings: {
7282 a7dd0415 Kostas Papadimitriou
                url: ajaxLocation,
7283 a7dd0415 Kostas Papadimitriou
                isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
7284 a7dd0415 Kostas Papadimitriou
                global: true,
7285 a7dd0415 Kostas Papadimitriou
                type: "GET",
7286 18059f42 Kostas Papadimitriou
                contentType: "application/x-www-form-urlencoded; charset=UTF-8",
7287 a7dd0415 Kostas Papadimitriou
                processData: true,
7288 a7dd0415 Kostas Papadimitriou
                async: true,
7289 a7dd0415 Kostas Papadimitriou
                /*
7290 a7dd0415 Kostas Papadimitriou
                timeout: 0,
7291 a7dd0415 Kostas Papadimitriou
                data: null,
7292 a7dd0415 Kostas Papadimitriou
                dataType: null,
7293 a7dd0415 Kostas Papadimitriou
                username: null,
7294 a7dd0415 Kostas Papadimitriou
                password: null,
7295 a7dd0415 Kostas Papadimitriou
                cache: null,
7296 a7dd0415 Kostas Papadimitriou
                traditional: false,
7297 a7dd0415 Kostas Papadimitriou
                headers: {},
7298 a7dd0415 Kostas Papadimitriou
                */
7299 a7dd0415 Kostas Papadimitriou
7300 a7dd0415 Kostas Papadimitriou
                accepts: {
7301 a7dd0415 Kostas Papadimitriou
                        xml: "application/xml, text/xml",
7302 a7dd0415 Kostas Papadimitriou
                        html: "text/html",
7303 a7dd0415 Kostas Papadimitriou
                        text: "text/plain",
7304 a7dd0415 Kostas Papadimitriou
                        json: "application/json, text/javascript",
7305 a7dd0415 Kostas Papadimitriou
                        "*": allTypes
7306 a7dd0415 Kostas Papadimitriou
                },
7307 a7dd0415 Kostas Papadimitriou
7308 a7dd0415 Kostas Papadimitriou
                contents: {
7309 a7dd0415 Kostas Papadimitriou
                        xml: /xml/,
7310 a7dd0415 Kostas Papadimitriou
                        html: /html/,
7311 a7dd0415 Kostas Papadimitriou
                        json: /json/
7312 a7dd0415 Kostas Papadimitriou
                },
7313 a7dd0415 Kostas Papadimitriou
7314 a7dd0415 Kostas Papadimitriou
                responseFields: {
7315 a7dd0415 Kostas Papadimitriou
                        xml: "responseXML",
7316 a7dd0415 Kostas Papadimitriou
                        text: "responseText"
7317 a7dd0415 Kostas Papadimitriou
                },
7318 a7dd0415 Kostas Papadimitriou
7319 a7dd0415 Kostas Papadimitriou
                // List of data converters
7320 a7dd0415 Kostas Papadimitriou
                // 1) key format is "source_type destination_type" (a single space in-between)
7321 a7dd0415 Kostas Papadimitriou
                // 2) the catchall symbol "*" can be used for source_type
7322 a7dd0415 Kostas Papadimitriou
                converters: {
7323 a7dd0415 Kostas Papadimitriou
7324 a7dd0415 Kostas Papadimitriou
                        // Convert anything to text
7325 a7dd0415 Kostas Papadimitriou
                        "* text": window.String,
7326 a7dd0415 Kostas Papadimitriou
7327 a7dd0415 Kostas Papadimitriou
                        // Text to html (true = no transformation)
7328 a7dd0415 Kostas Papadimitriou
                        "text html": true,
7329 a7dd0415 Kostas Papadimitriou
7330 a7dd0415 Kostas Papadimitriou
                        // Evaluate text as a json expression
7331 a7dd0415 Kostas Papadimitriou
                        "text json": jQuery.parseJSON,
7332 a7dd0415 Kostas Papadimitriou
7333 a7dd0415 Kostas Papadimitriou
                        // Parse text as xml
7334 a7dd0415 Kostas Papadimitriou
                        "text xml": jQuery.parseXML
7335 a7dd0415 Kostas Papadimitriou
                },
7336 a7dd0415 Kostas Papadimitriou
7337 a7dd0415 Kostas Papadimitriou
                // For options that shouldn't be deep extended:
7338 a7dd0415 Kostas Papadimitriou
                // you can add your own custom options here if
7339 a7dd0415 Kostas Papadimitriou
                // and when you create one that shouldn't be
7340 a7dd0415 Kostas Papadimitriou
                // deep extended (see ajaxExtend)
7341 a7dd0415 Kostas Papadimitriou
                flatOptions: {
7342 a7dd0415 Kostas Papadimitriou
                        context: true,
7343 a7dd0415 Kostas Papadimitriou
                        url: true
7344 a7dd0415 Kostas Papadimitriou
                }
7345 a7dd0415 Kostas Papadimitriou
        },
7346 a7dd0415 Kostas Papadimitriou
7347 a7dd0415 Kostas Papadimitriou
        ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
7348 a7dd0415 Kostas Papadimitriou
        ajaxTransport: addToPrefiltersOrTransports( transports ),
7349 a7dd0415 Kostas Papadimitriou
7350 a7dd0415 Kostas Papadimitriou
        // Main method
7351 a7dd0415 Kostas Papadimitriou
        ajax: function( url, options ) {
7352 a7dd0415 Kostas Papadimitriou
7353 a7dd0415 Kostas Papadimitriou
                // If url is an object, simulate pre-1.5 signature
7354 a7dd0415 Kostas Papadimitriou
                if ( typeof url === "object" ) {
7355 a7dd0415 Kostas Papadimitriou
                        options = url;
7356 a7dd0415 Kostas Papadimitriou
                        url = undefined;
7357 a7dd0415 Kostas Papadimitriou
                }
7358 a7dd0415 Kostas Papadimitriou
7359 a7dd0415 Kostas Papadimitriou
                // Force options to be an object
7360 a7dd0415 Kostas Papadimitriou
                options = options || {};
7361 a7dd0415 Kostas Papadimitriou
7362 a7dd0415 Kostas Papadimitriou
                var // Create the final options object
7363 a7dd0415 Kostas Papadimitriou
                        s = jQuery.ajaxSetup( {}, options ),
7364 a7dd0415 Kostas Papadimitriou
                        // Callbacks context
7365 a7dd0415 Kostas Papadimitriou
                        callbackContext = s.context || s,
7366 a7dd0415 Kostas Papadimitriou
                        // Context for global events
7367 a7dd0415 Kostas Papadimitriou
                        // It's the callbackContext if one was provided in the options
7368 a7dd0415 Kostas Papadimitriou
                        // and if it's a DOM node or a jQuery collection
7369 a7dd0415 Kostas Papadimitriou
                        globalEventContext = callbackContext !== s &&
7370 a7dd0415 Kostas Papadimitriou
                                ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
7371 a7dd0415 Kostas Papadimitriou
                                                jQuery( callbackContext ) : jQuery.event,
7372 a7dd0415 Kostas Papadimitriou
                        // Deferreds
7373 a7dd0415 Kostas Papadimitriou
                        deferred = jQuery.Deferred(),
7374 a7dd0415 Kostas Papadimitriou
                        completeDeferred = jQuery.Callbacks( "once memory" ),
7375 a7dd0415 Kostas Papadimitriou
                        // Status-dependent callbacks
7376 a7dd0415 Kostas Papadimitriou
                        statusCode = s.statusCode || {},
7377 a7dd0415 Kostas Papadimitriou
                        // ifModified key
7378 a7dd0415 Kostas Papadimitriou
                        ifModifiedKey,
7379 a7dd0415 Kostas Papadimitriou
                        // Headers (they are sent all at once)
7380 a7dd0415 Kostas Papadimitriou
                        requestHeaders = {},
7381 a7dd0415 Kostas Papadimitriou
                        requestHeadersNames = {},
7382 a7dd0415 Kostas Papadimitriou
                        // Response headers
7383 a7dd0415 Kostas Papadimitriou
                        responseHeadersString,
7384 a7dd0415 Kostas Papadimitriou
                        responseHeaders,
7385 a7dd0415 Kostas Papadimitriou
                        // transport
7386 a7dd0415 Kostas Papadimitriou
                        transport,
7387 a7dd0415 Kostas Papadimitriou
                        // timeout handle
7388 a7dd0415 Kostas Papadimitriou
                        timeoutTimer,
7389 a7dd0415 Kostas Papadimitriou
                        // Cross-domain detection vars
7390 a7dd0415 Kostas Papadimitriou
                        parts,
7391 a7dd0415 Kostas Papadimitriou
                        // The jqXHR state
7392 a7dd0415 Kostas Papadimitriou
                        state = 0,
7393 a7dd0415 Kostas Papadimitriou
                        // To know if global events are to be dispatched
7394 a7dd0415 Kostas Papadimitriou
                        fireGlobals,
7395 a7dd0415 Kostas Papadimitriou
                        // Loop variable
7396 a7dd0415 Kostas Papadimitriou
                        i,
7397 a7dd0415 Kostas Papadimitriou
                        // Fake xhr
7398 a7dd0415 Kostas Papadimitriou
                        jqXHR = {
7399 a7dd0415 Kostas Papadimitriou
7400 a7dd0415 Kostas Papadimitriou
                                readyState: 0,
7401 a7dd0415 Kostas Papadimitriou
7402 a7dd0415 Kostas Papadimitriou
                                // Caches the header
7403 a7dd0415 Kostas Papadimitriou
                                setRequestHeader: function( name, value ) {
7404 a7dd0415 Kostas Papadimitriou
                                        if ( !state ) {
7405 a7dd0415 Kostas Papadimitriou
                                                var lname = name.toLowerCase();
7406 a7dd0415 Kostas Papadimitriou
                                                name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
7407 a7dd0415 Kostas Papadimitriou
                                                requestHeaders[ name ] = value;
7408 a7dd0415 Kostas Papadimitriou
                                        }
7409 a7dd0415 Kostas Papadimitriou
                                        return this;
7410 a7dd0415 Kostas Papadimitriou
                                },
7411 a7dd0415 Kostas Papadimitriou
7412 a7dd0415 Kostas Papadimitriou
                                // Raw string
7413 a7dd0415 Kostas Papadimitriou
                                getAllResponseHeaders: function() {
7414 a7dd0415 Kostas Papadimitriou
                                        return state === 2 ? responseHeadersString : null;
7415 a7dd0415 Kostas Papadimitriou
                                },
7416 a7dd0415 Kostas Papadimitriou
7417 a7dd0415 Kostas Papadimitriou
                                // Builds headers hashtable if needed
7418 a7dd0415 Kostas Papadimitriou
                                getResponseHeader: function( key ) {
7419 a7dd0415 Kostas Papadimitriou
                                        var match;
7420 a7dd0415 Kostas Papadimitriou
                                        if ( state === 2 ) {
7421 a7dd0415 Kostas Papadimitriou
                                                if ( !responseHeaders ) {
7422 a7dd0415 Kostas Papadimitriou
                                                        responseHeaders = {};
7423 a7dd0415 Kostas Papadimitriou
                                                        while( ( match = rheaders.exec( responseHeadersString ) ) ) {
7424 a7dd0415 Kostas Papadimitriou
                                                                responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
7425 a7dd0415 Kostas Papadimitriou
                                                        }
7426 a7dd0415 Kostas Papadimitriou
                                                }
7427 a7dd0415 Kostas Papadimitriou
                                                match = responseHeaders[ key.toLowerCase() ];
7428 a7dd0415 Kostas Papadimitriou
                                        }
7429 a7dd0415 Kostas Papadimitriou
                                        return match === undefined ? null : match;
7430 a7dd0415 Kostas Papadimitriou
                                },
7431 a7dd0415 Kostas Papadimitriou
7432 a7dd0415 Kostas Papadimitriou
                                // Overrides response content-type header
7433 a7dd0415 Kostas Papadimitriou
                                overrideMimeType: function( type ) {
7434 a7dd0415 Kostas Papadimitriou
                                        if ( !state ) {
7435 a7dd0415 Kostas Papadimitriou
                                                s.mimeType = type;
7436 a7dd0415 Kostas Papadimitriou
                                        }
7437 a7dd0415 Kostas Papadimitriou
                                        return this;
7438 a7dd0415 Kostas Papadimitriou
                                },
7439 a7dd0415 Kostas Papadimitriou
7440 a7dd0415 Kostas Papadimitriou
                                // Cancel the request
7441 a7dd0415 Kostas Papadimitriou
                                abort: function( statusText ) {
7442 a7dd0415 Kostas Papadimitriou
                                        statusText = statusText || "abort";
7443 a7dd0415 Kostas Papadimitriou
                                        if ( transport ) {
7444 a7dd0415 Kostas Papadimitriou
                                                transport.abort( statusText );
7445 a7dd0415 Kostas Papadimitriou
                                        }
7446 a7dd0415 Kostas Papadimitriou
                                        done( 0, statusText );
7447 a7dd0415 Kostas Papadimitriou
                                        return this;
7448 a7dd0415 Kostas Papadimitriou
                                }
7449 a7dd0415 Kostas Papadimitriou
                        };
7450 a7dd0415 Kostas Papadimitriou
7451 a7dd0415 Kostas Papadimitriou
                // Callback for when everything is done
7452 a7dd0415 Kostas Papadimitriou
                // It is defined here because jslint complains if it is declared
7453 a7dd0415 Kostas Papadimitriou
                // at the end of the function (which would be more logical and readable)
7454 a7dd0415 Kostas Papadimitriou
                function done( status, nativeStatusText, responses, headers ) {
7455 a7dd0415 Kostas Papadimitriou
7456 a7dd0415 Kostas Papadimitriou
                        // Called once
7457 a7dd0415 Kostas Papadimitriou
                        if ( state === 2 ) {
7458 a7dd0415 Kostas Papadimitriou
                                return;
7459 a7dd0415 Kostas Papadimitriou
                        }
7460 a7dd0415 Kostas Papadimitriou
7461 a7dd0415 Kostas Papadimitriou
                        // State is "done" now
7462 a7dd0415 Kostas Papadimitriou
                        state = 2;
7463 a7dd0415 Kostas Papadimitriou
7464 a7dd0415 Kostas Papadimitriou
                        // Clear timeout if it exists
7465 a7dd0415 Kostas Papadimitriou
                        if ( timeoutTimer ) {
7466 a7dd0415 Kostas Papadimitriou
                                clearTimeout( timeoutTimer );
7467 a7dd0415 Kostas Papadimitriou
                        }
7468 a7dd0415 Kostas Papadimitriou
7469 a7dd0415 Kostas Papadimitriou
                        // Dereference transport for early garbage collection
7470 a7dd0415 Kostas Papadimitriou
                        // (no matter how long the jqXHR object will be used)
7471 a7dd0415 Kostas Papadimitriou
                        transport = undefined;
7472 a7dd0415 Kostas Papadimitriou
7473 a7dd0415 Kostas Papadimitriou
                        // Cache response headers
7474 a7dd0415 Kostas Papadimitriou
                        responseHeadersString = headers || "";
7475 a7dd0415 Kostas Papadimitriou
7476 a7dd0415 Kostas Papadimitriou
                        // Set readyState
7477 a7dd0415 Kostas Papadimitriou
                        jqXHR.readyState = status > 0 ? 4 : 0;
7478 a7dd0415 Kostas Papadimitriou
7479 a7dd0415 Kostas Papadimitriou
                        var isSuccess,
7480 a7dd0415 Kostas Papadimitriou
                                success,
7481 a7dd0415 Kostas Papadimitriou
                                error,
7482 a7dd0415 Kostas Papadimitriou
                                statusText = nativeStatusText,
7483 a7dd0415 Kostas Papadimitriou
                                response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
7484 a7dd0415 Kostas Papadimitriou
                                lastModified,
7485 a7dd0415 Kostas Papadimitriou
                                etag;
7486 a7dd0415 Kostas Papadimitriou
7487 a7dd0415 Kostas Papadimitriou
                        // If successful, handle type chaining
7488 a7dd0415 Kostas Papadimitriou
                        if ( status >= 200 && status < 300 || status === 304 ) {
7489 a7dd0415 Kostas Papadimitriou
7490 a7dd0415 Kostas Papadimitriou
                                // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
7491 a7dd0415 Kostas Papadimitriou
                                if ( s.ifModified ) {
7492 a7dd0415 Kostas Papadimitriou
7493 a7dd0415 Kostas Papadimitriou
                                        if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
7494 a7dd0415 Kostas Papadimitriou
                                                jQuery.lastModified[ ifModifiedKey ] = lastModified;
7495 a7dd0415 Kostas Papadimitriou
                                        }
7496 a7dd0415 Kostas Papadimitriou
                                        if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
7497 a7dd0415 Kostas Papadimitriou
                                                jQuery.etag[ ifModifiedKey ] = etag;
7498 a7dd0415 Kostas Papadimitriou
                                        }
7499 a7dd0415 Kostas Papadimitriou
                                }
7500 a7dd0415 Kostas Papadimitriou
7501 a7dd0415 Kostas Papadimitriou
                                // If not modified
7502 a7dd0415 Kostas Papadimitriou
                                if ( status === 304 ) {
7503 a7dd0415 Kostas Papadimitriou
7504 a7dd0415 Kostas Papadimitriou
                                        statusText = "notmodified";
7505 a7dd0415 Kostas Papadimitriou
                                        isSuccess = true;
7506 a7dd0415 Kostas Papadimitriou
7507 a7dd0415 Kostas Papadimitriou
                                // If we have data
7508 a7dd0415 Kostas Papadimitriou
                                } else {
7509 a7dd0415 Kostas Papadimitriou
7510 a7dd0415 Kostas Papadimitriou
                                        try {
7511 a7dd0415 Kostas Papadimitriou
                                                success = ajaxConvert( s, response );
7512 a7dd0415 Kostas Papadimitriou
                                                statusText = "success";
7513 a7dd0415 Kostas Papadimitriou
                                                isSuccess = true;
7514 a7dd0415 Kostas Papadimitriou
                                        } catch(e) {
7515 a7dd0415 Kostas Papadimitriou
                                                // We have a parsererror
7516 a7dd0415 Kostas Papadimitriou
                                                statusText = "parsererror";
7517 a7dd0415 Kostas Papadimitriou
                                                error = e;
7518 a7dd0415 Kostas Papadimitriou
                                        }
7519 a7dd0415 Kostas Papadimitriou
                                }
7520 a7dd0415 Kostas Papadimitriou
                        } else {
7521 a7dd0415 Kostas Papadimitriou
                                // We extract error from statusText
7522 a7dd0415 Kostas Papadimitriou
                                // then normalize statusText and status for non-aborts
7523 a7dd0415 Kostas Papadimitriou
                                error = statusText;
7524 a7dd0415 Kostas Papadimitriou
                                if ( !statusText || status ) {
7525 a7dd0415 Kostas Papadimitriou
                                        statusText = "error";
7526 a7dd0415 Kostas Papadimitriou
                                        if ( status < 0 ) {
7527 a7dd0415 Kostas Papadimitriou
                                                status = 0;
7528 a7dd0415 Kostas Papadimitriou
                                        }
7529 a7dd0415 Kostas Papadimitriou
                                }
7530 a7dd0415 Kostas Papadimitriou
                        }
7531 a7dd0415 Kostas Papadimitriou
7532 a7dd0415 Kostas Papadimitriou
                        // Set data for the fake xhr object
7533 a7dd0415 Kostas Papadimitriou
                        jqXHR.status = status;
7534 a7dd0415 Kostas Papadimitriou
                        jqXHR.statusText = "" + ( nativeStatusText || statusText );
7535 a7dd0415 Kostas Papadimitriou
7536 a7dd0415 Kostas Papadimitriou
                        // Success/Error
7537 a7dd0415 Kostas Papadimitriou
                        if ( isSuccess ) {
7538 a7dd0415 Kostas Papadimitriou
                                deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
7539 a7dd0415 Kostas Papadimitriou
                        } else {
7540 a7dd0415 Kostas Papadimitriou
                                deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
7541 a7dd0415 Kostas Papadimitriou
                        }
7542 a7dd0415 Kostas Papadimitriou
7543 a7dd0415 Kostas Papadimitriou
                        // Status-dependent callbacks
7544 a7dd0415 Kostas Papadimitriou
                        jqXHR.statusCode( statusCode );
7545 a7dd0415 Kostas Papadimitriou
                        statusCode = undefined;
7546 a7dd0415 Kostas Papadimitriou
7547 a7dd0415 Kostas Papadimitriou
                        if ( fireGlobals ) {
7548 a7dd0415 Kostas Papadimitriou
                                globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
7549 a7dd0415 Kostas Papadimitriou
                                                [ jqXHR, s, isSuccess ? success : error ] );
7550 a7dd0415 Kostas Papadimitriou
                        }
7551 a7dd0415 Kostas Papadimitriou
7552 a7dd0415 Kostas Papadimitriou
                        // Complete
7553 a7dd0415 Kostas Papadimitriou
                        completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
7554 a7dd0415 Kostas Papadimitriou
7555 a7dd0415 Kostas Papadimitriou
                        if ( fireGlobals ) {
7556 a7dd0415 Kostas Papadimitriou
                                globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
7557 a7dd0415 Kostas Papadimitriou
                                // Handle the global AJAX counter
7558 a7dd0415 Kostas Papadimitriou
                                if ( !( --jQuery.active ) ) {
7559 a7dd0415 Kostas Papadimitriou
                                        jQuery.event.trigger( "ajaxStop" );
7560 a7dd0415 Kostas Papadimitriou
                                }
7561 a7dd0415 Kostas Papadimitriou
                        }
7562 a7dd0415 Kostas Papadimitriou
                }
7563 a7dd0415 Kostas Papadimitriou
7564 a7dd0415 Kostas Papadimitriou
                // Attach deferreds
7565 a7dd0415 Kostas Papadimitriou
                deferred.promise( jqXHR );
7566 a7dd0415 Kostas Papadimitriou
                jqXHR.success = jqXHR.done;
7567 a7dd0415 Kostas Papadimitriou
                jqXHR.error = jqXHR.fail;
7568 a7dd0415 Kostas Papadimitriou
                jqXHR.complete = completeDeferred.add;
7569 a7dd0415 Kostas Papadimitriou
7570 a7dd0415 Kostas Papadimitriou
                // Status-dependent callbacks
7571 a7dd0415 Kostas Papadimitriou
                jqXHR.statusCode = function( map ) {
7572 a7dd0415 Kostas Papadimitriou
                        if ( map ) {
7573 a7dd0415 Kostas Papadimitriou
                                var tmp;
7574 a7dd0415 Kostas Papadimitriou
                                if ( state < 2 ) {
7575 a7dd0415 Kostas Papadimitriou
                                        for ( tmp in map ) {
7576 a7dd0415 Kostas Papadimitriou
                                                statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
7577 a7dd0415 Kostas Papadimitriou
                                        }
7578 a7dd0415 Kostas Papadimitriou
                                } else {
7579 a7dd0415 Kostas Papadimitriou
                                        tmp = map[ jqXHR.status ];
7580 a7dd0415 Kostas Papadimitriou
                                        jqXHR.then( tmp, tmp );
7581 a7dd0415 Kostas Papadimitriou
                                }
7582 a7dd0415 Kostas Papadimitriou
                        }
7583 a7dd0415 Kostas Papadimitriou
                        return this;
7584 a7dd0415 Kostas Papadimitriou
                };
7585 a7dd0415 Kostas Papadimitriou
7586 a7dd0415 Kostas Papadimitriou
                // Remove hash character (#7531: and string promotion)
7587 a7dd0415 Kostas Papadimitriou
                // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
7588 a7dd0415 Kostas Papadimitriou
                // We also use the url parameter if available
7589 a7dd0415 Kostas Papadimitriou
                s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
7590 a7dd0415 Kostas Papadimitriou
7591 a7dd0415 Kostas Papadimitriou
                // Extract dataTypes list
7592 a7dd0415 Kostas Papadimitriou
                s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
7593 a7dd0415 Kostas Papadimitriou
7594 a7dd0415 Kostas Papadimitriou
                // Determine if a cross-domain request is in order
7595 a7dd0415 Kostas Papadimitriou
                if ( s.crossDomain == null ) {
7596 a7dd0415 Kostas Papadimitriou
                        parts = rurl.exec( s.url.toLowerCase() );
7597 a7dd0415 Kostas Papadimitriou
                        s.crossDomain = !!( parts &&
7598 a7dd0415 Kostas Papadimitriou
                                ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
7599 a7dd0415 Kostas Papadimitriou
                                        ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
7600 a7dd0415 Kostas Papadimitriou
                                                ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
7601 a7dd0415 Kostas Papadimitriou
                        );
7602 a7dd0415 Kostas Papadimitriou
                }
7603 a7dd0415 Kostas Papadimitriou
7604 a7dd0415 Kostas Papadimitriou
                // Convert data if not already a string
7605 a7dd0415 Kostas Papadimitriou
                if ( s.data && s.processData && typeof s.data !== "string" ) {
7606 a7dd0415 Kostas Papadimitriou
                        s.data = jQuery.param( s.data, s.traditional );
7607 a7dd0415 Kostas Papadimitriou
                }
7608 a7dd0415 Kostas Papadimitriou
7609 a7dd0415 Kostas Papadimitriou
                // Apply prefilters
7610 a7dd0415 Kostas Papadimitriou
                inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
7611 a7dd0415 Kostas Papadimitriou
7612 18059f42 Kostas Papadimitriou
                // If request was aborted inside a prefilter, stop there
7613 a7dd0415 Kostas Papadimitriou
                if ( state === 2 ) {
7614 a7dd0415 Kostas Papadimitriou
                        return false;
7615 a7dd0415 Kostas Papadimitriou
                }
7616 a7dd0415 Kostas Papadimitriou
7617 a7dd0415 Kostas Papadimitriou
                // We can fire global events as of now if asked to
7618 a7dd0415 Kostas Papadimitriou
                fireGlobals = s.global;
7619 a7dd0415 Kostas Papadimitriou
7620 a7dd0415 Kostas Papadimitriou
                // Uppercase the type
7621 a7dd0415 Kostas Papadimitriou
                s.type = s.type.toUpperCase();
7622 a7dd0415 Kostas Papadimitriou
7623 a7dd0415 Kostas Papadimitriou
                // Determine if request has content
7624 a7dd0415 Kostas Papadimitriou
                s.hasContent = !rnoContent.test( s.type );
7625 a7dd0415 Kostas Papadimitriou
7626 a7dd0415 Kostas Papadimitriou
                // Watch for a new set of requests
7627 a7dd0415 Kostas Papadimitriou
                if ( fireGlobals && jQuery.active++ === 0 ) {
7628 a7dd0415 Kostas Papadimitriou
                        jQuery.event.trigger( "ajaxStart" );
7629 a7dd0415 Kostas Papadimitriou
                }
7630 a7dd0415 Kostas Papadimitriou
7631 a7dd0415 Kostas Papadimitriou
                // More options handling for requests with no content
7632 a7dd0415 Kostas Papadimitriou
                if ( !s.hasContent ) {
7633 a7dd0415 Kostas Papadimitriou
7634 a7dd0415 Kostas Papadimitriou
                        // If data is available, append data to url
7635 a7dd0415 Kostas Papadimitriou
                        if ( s.data ) {
7636 a7dd0415 Kostas Papadimitriou
                                s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
7637 a7dd0415 Kostas Papadimitriou
                                // #9682: remove data so that it's not used in an eventual retry
7638 a7dd0415 Kostas Papadimitriou
                                delete s.data;
7639 a7dd0415 Kostas Papadimitriou
                        }
7640 a7dd0415 Kostas Papadimitriou
7641 a7dd0415 Kostas Papadimitriou
                        // Get ifModifiedKey before adding the anti-cache parameter
7642 a7dd0415 Kostas Papadimitriou
                        ifModifiedKey = s.url;
7643 a7dd0415 Kostas Papadimitriou
7644 a7dd0415 Kostas Papadimitriou
                        // Add anti-cache in url if needed
7645 a7dd0415 Kostas Papadimitriou
                        if ( s.cache === false ) {
7646 a7dd0415 Kostas Papadimitriou
7647 a7dd0415 Kostas Papadimitriou
                                var ts = jQuery.now(),
7648 a7dd0415 Kostas Papadimitriou
                                        // try replacing _= if it is there
7649 a7dd0415 Kostas Papadimitriou
                                        ret = s.url.replace( rts, "$1_=" + ts );
7650 a7dd0415 Kostas Papadimitriou
7651 a7dd0415 Kostas Papadimitriou
                                // if nothing was replaced, add timestamp to the end
7652 a7dd0415 Kostas Papadimitriou
                                s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
7653 a7dd0415 Kostas Papadimitriou
                        }
7654 a7dd0415 Kostas Papadimitriou
                }
7655 a7dd0415 Kostas Papadimitriou
7656 a7dd0415 Kostas Papadimitriou
                // Set the correct header, if data is being sent
7657 a7dd0415 Kostas Papadimitriou
                if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
7658 a7dd0415 Kostas Papadimitriou
                        jqXHR.setRequestHeader( "Content-Type", s.contentType );
7659 a7dd0415 Kostas Papadimitriou
                }
7660 a7dd0415 Kostas Papadimitriou
7661 a7dd0415 Kostas Papadimitriou
                // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
7662 a7dd0415 Kostas Papadimitriou
                if ( s.ifModified ) {
7663 a7dd0415 Kostas Papadimitriou
                        ifModifiedKey = ifModifiedKey || s.url;
7664 a7dd0415 Kostas Papadimitriou
                        if ( jQuery.lastModified[ ifModifiedKey ] ) {
7665 a7dd0415 Kostas Papadimitriou
                                jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
7666 a7dd0415 Kostas Papadimitriou
                        }
7667 a7dd0415 Kostas Papadimitriou
                        if ( jQuery.etag[ ifModifiedKey ] ) {
7668 a7dd0415 Kostas Papadimitriou
                                jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
7669 a7dd0415 Kostas Papadimitriou
                        }
7670 a7dd0415 Kostas Papadimitriou
                }
7671 a7dd0415 Kostas Papadimitriou
7672 a7dd0415 Kostas Papadimitriou
                // Set the Accepts header for the server, depending on the dataType
7673 a7dd0415 Kostas Papadimitriou
                jqXHR.setRequestHeader(
7674 a7dd0415 Kostas Papadimitriou
                        "Accept",
7675 a7dd0415 Kostas Papadimitriou
                        s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
7676 a7dd0415 Kostas Papadimitriou
                                s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
7677 a7dd0415 Kostas Papadimitriou
                                s.accepts[ "*" ]
7678 a7dd0415 Kostas Papadimitriou
                );
7679 a7dd0415 Kostas Papadimitriou
7680 a7dd0415 Kostas Papadimitriou
                // Check for headers option
7681 a7dd0415 Kostas Papadimitriou
                for ( i in s.headers ) {
7682 a7dd0415 Kostas Papadimitriou
                        jqXHR.setRequestHeader( i, s.headers[ i ] );
7683 a7dd0415 Kostas Papadimitriou
                }
7684 a7dd0415 Kostas Papadimitriou
7685 a7dd0415 Kostas Papadimitriou
                // Allow custom headers/mimetypes and early abort
7686 a7dd0415 Kostas Papadimitriou
                if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
7687 a7dd0415 Kostas Papadimitriou
                                // Abort if not done already
7688 a7dd0415 Kostas Papadimitriou
                                jqXHR.abort();
7689 a7dd0415 Kostas Papadimitriou
                                return false;
7690 a7dd0415 Kostas Papadimitriou
7691 a7dd0415 Kostas Papadimitriou
                }
7692 a7dd0415 Kostas Papadimitriou
7693 a7dd0415 Kostas Papadimitriou
                // Install callbacks on deferreds
7694 a7dd0415 Kostas Papadimitriou
                for ( i in { success: 1, error: 1, complete: 1 } ) {
7695 a7dd0415 Kostas Papadimitriou
                        jqXHR[ i ]( s[ i ] );
7696 a7dd0415 Kostas Papadimitriou
                }
7697 a7dd0415 Kostas Papadimitriou
7698 a7dd0415 Kostas Papadimitriou
                // Get transport
7699 a7dd0415 Kostas Papadimitriou
                transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
7700 a7dd0415 Kostas Papadimitriou
7701 a7dd0415 Kostas Papadimitriou
                // If no transport, we auto-abort
7702 a7dd0415 Kostas Papadimitriou
                if ( !transport ) {
7703 a7dd0415 Kostas Papadimitriou
                        done( -1, "No Transport" );
7704 a7dd0415 Kostas Papadimitriou
                } else {
7705 a7dd0415 Kostas Papadimitriou
                        jqXHR.readyState = 1;
7706 a7dd0415 Kostas Papadimitriou
                        // Send global event
7707 a7dd0415 Kostas Papadimitriou
                        if ( fireGlobals ) {
7708 a7dd0415 Kostas Papadimitriou
                                globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
7709 a7dd0415 Kostas Papadimitriou
                        }
7710 a7dd0415 Kostas Papadimitriou
                        // Timeout
7711 a7dd0415 Kostas Papadimitriou
                        if ( s.async && s.timeout > 0 ) {
7712 a7dd0415 Kostas Papadimitriou
                                timeoutTimer = setTimeout( function(){
7713 a7dd0415 Kostas Papadimitriou
                                        jqXHR.abort( "timeout" );
7714 a7dd0415 Kostas Papadimitriou
                                }, s.timeout );
7715 a7dd0415 Kostas Papadimitriou
                        }
7716 a7dd0415 Kostas Papadimitriou
7717 a7dd0415 Kostas Papadimitriou
                        try {
7718 a7dd0415 Kostas Papadimitriou
                                state = 1;
7719 a7dd0415 Kostas Papadimitriou
                                transport.send( requestHeaders, done );
7720 a7dd0415 Kostas Papadimitriou
                        } catch (e) {
7721 a7dd0415 Kostas Papadimitriou
                                // Propagate exception as error if not done
7722 a7dd0415 Kostas Papadimitriou
                                if ( state < 2 ) {
7723 a7dd0415 Kostas Papadimitriou
                                        done( -1, e );
7724 a7dd0415 Kostas Papadimitriou
                                // Simply rethrow otherwise
7725 a7dd0415 Kostas Papadimitriou
                                } else {
7726 a7dd0415 Kostas Papadimitriou
                                        throw e;
7727 a7dd0415 Kostas Papadimitriou
                                }
7728 a7dd0415 Kostas Papadimitriou
                        }
7729 a7dd0415 Kostas Papadimitriou
                }
7730 a7dd0415 Kostas Papadimitriou
7731 a7dd0415 Kostas Papadimitriou
                return jqXHR;
7732 a7dd0415 Kostas Papadimitriou
        },
7733 a7dd0415 Kostas Papadimitriou
7734 a7dd0415 Kostas Papadimitriou
        // Serialize an array of form elements or a set of
7735 a7dd0415 Kostas Papadimitriou
        // key/values into a query string
7736 a7dd0415 Kostas Papadimitriou
        param: function( a, traditional ) {
7737 a7dd0415 Kostas Papadimitriou
                var s = [],
7738 a7dd0415 Kostas Papadimitriou
                        add = function( key, value ) {
7739 a7dd0415 Kostas Papadimitriou
                                // If value is a function, invoke it and return its value
7740 a7dd0415 Kostas Papadimitriou
                                value = jQuery.isFunction( value ) ? value() : value;
7741 a7dd0415 Kostas Papadimitriou
                                s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
7742 a7dd0415 Kostas Papadimitriou
                        };
7743 a7dd0415 Kostas Papadimitriou
7744 a7dd0415 Kostas Papadimitriou
                // Set traditional to true for jQuery <= 1.3.2 behavior.
7745 a7dd0415 Kostas Papadimitriou
                if ( traditional === undefined ) {
7746 a7dd0415 Kostas Papadimitriou
                        traditional = jQuery.ajaxSettings.traditional;
7747 a7dd0415 Kostas Papadimitriou
                }
7748 a7dd0415 Kostas Papadimitriou
7749 a7dd0415 Kostas Papadimitriou
                // If an array was passed in, assume that it is an array of form elements.
7750 a7dd0415 Kostas Papadimitriou
                if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
7751 a7dd0415 Kostas Papadimitriou
                        // Serialize the form elements
7752 a7dd0415 Kostas Papadimitriou
                        jQuery.each( a, function() {
7753 a7dd0415 Kostas Papadimitriou
                                add( this.name, this.value );
7754 a7dd0415 Kostas Papadimitriou
                        });
7755 a7dd0415 Kostas Papadimitriou
7756 a7dd0415 Kostas Papadimitriou
                } else {
7757 a7dd0415 Kostas Papadimitriou
                        // If traditional, encode the "old" way (the way 1.3.2 or older
7758 a7dd0415 Kostas Papadimitriou
                        // did it), otherwise encode params recursively.
7759 a7dd0415 Kostas Papadimitriou
                        for ( var prefix in a ) {
7760 a7dd0415 Kostas Papadimitriou
                                buildParams( prefix, a[ prefix ], traditional, add );
7761 a7dd0415 Kostas Papadimitriou
                        }
7762 a7dd0415 Kostas Papadimitriou
                }
7763 a7dd0415 Kostas Papadimitriou
7764 a7dd0415 Kostas Papadimitriou
                // Return the resulting serialization
7765 a7dd0415 Kostas Papadimitriou
                return s.join( "&" ).replace( r20, "+" );
7766 a7dd0415 Kostas Papadimitriou
        }
7767 a7dd0415 Kostas Papadimitriou
});
7768 a7dd0415 Kostas Papadimitriou
7769 a7dd0415 Kostas Papadimitriou
function buildParams( prefix, obj, traditional, add ) {
7770 a7dd0415 Kostas Papadimitriou
        if ( jQuery.isArray( obj ) ) {
7771 a7dd0415 Kostas Papadimitriou
                // Serialize array item.
7772 a7dd0415 Kostas Papadimitriou
                jQuery.each( obj, function( i, v ) {
7773 a7dd0415 Kostas Papadimitriou
                        if ( traditional || rbracket.test( prefix ) ) {
7774 a7dd0415 Kostas Papadimitriou
                                // Treat each array item as a scalar.
7775 a7dd0415 Kostas Papadimitriou
                                add( prefix, v );
7776 a7dd0415 Kostas Papadimitriou
7777 a7dd0415 Kostas Papadimitriou
                        } else {
7778 a7dd0415 Kostas Papadimitriou
                                // If array item is non-scalar (array or object), encode its
7779 a7dd0415 Kostas Papadimitriou
                                // numeric index to resolve deserialization ambiguity issues.
7780 a7dd0415 Kostas Papadimitriou
                                // Note that rack (as of 1.0.0) can't currently deserialize
7781 a7dd0415 Kostas Papadimitriou
                                // nested arrays properly, and attempting to do so may cause
7782 a7dd0415 Kostas Papadimitriou
                                // a server error. Possible fixes are to modify rack's
7783 a7dd0415 Kostas Papadimitriou
                                // deserialization algorithm or to provide an option or flag
7784 a7dd0415 Kostas Papadimitriou
                                // to force array serialization to be shallow.
7785 18059f42 Kostas Papadimitriou
                                buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
7786 a7dd0415 Kostas Papadimitriou
                        }
7787 a7dd0415 Kostas Papadimitriou
                });
7788 a7dd0415 Kostas Papadimitriou
7789 18059f42 Kostas Papadimitriou
        } else if ( !traditional && jQuery.type( obj ) === "object" ) {
7790 a7dd0415 Kostas Papadimitriou
                // Serialize object item.
7791 a7dd0415 Kostas Papadimitriou
                for ( var name in obj ) {
7792 a7dd0415 Kostas Papadimitriou
                        buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
7793 a7dd0415 Kostas Papadimitriou
                }
7794 a7dd0415 Kostas Papadimitriou
7795 a7dd0415 Kostas Papadimitriou
        } else {
7796 a7dd0415 Kostas Papadimitriou
                // Serialize scalar item.
7797 a7dd0415 Kostas Papadimitriou
                add( prefix, obj );
7798 a7dd0415 Kostas Papadimitriou
        }
7799 a7dd0415 Kostas Papadimitriou
}
7800 a7dd0415 Kostas Papadimitriou
7801 a7dd0415 Kostas Papadimitriou
// This is still on the jQuery object... for now
7802 a7dd0415 Kostas Papadimitriou
// Want to move this to jQuery.ajax some day
7803 a7dd0415 Kostas Papadimitriou
jQuery.extend({
7804 a7dd0415 Kostas Papadimitriou
7805 a7dd0415 Kostas Papadimitriou
        // Counter for holding the number of active queries
7806 a7dd0415 Kostas Papadimitriou
        active: 0,
7807 a7dd0415 Kostas Papadimitriou
7808 a7dd0415 Kostas Papadimitriou
        // Last-Modified header cache for next request
7809 a7dd0415 Kostas Papadimitriou
        lastModified: {},
7810 a7dd0415 Kostas Papadimitriou
        etag: {}
7811 a7dd0415 Kostas Papadimitriou
7812 a7dd0415 Kostas Papadimitriou
});
7813 a7dd0415 Kostas Papadimitriou
7814 a7dd0415 Kostas Papadimitriou
/* Handles responses to an ajax request:
7815 a7dd0415 Kostas Papadimitriou
 * - sets all responseXXX fields accordingly
7816 a7dd0415 Kostas Papadimitriou
 * - finds the right dataType (mediates between content-type and expected dataType)
7817 a7dd0415 Kostas Papadimitriou
 * - returns the corresponding response
7818 a7dd0415 Kostas Papadimitriou
 */
7819 a7dd0415 Kostas Papadimitriou
function ajaxHandleResponses( s, jqXHR, responses ) {
7820 a7dd0415 Kostas Papadimitriou
7821 a7dd0415 Kostas Papadimitriou
        var contents = s.contents,
7822 a7dd0415 Kostas Papadimitriou
                dataTypes = s.dataTypes,
7823 a7dd0415 Kostas Papadimitriou
                responseFields = s.responseFields,
7824 a7dd0415 Kostas Papadimitriou
                ct,
7825 a7dd0415 Kostas Papadimitriou
                type,
7826 a7dd0415 Kostas Papadimitriou
                finalDataType,
7827 a7dd0415 Kostas Papadimitriou
                firstDataType;
7828 a7dd0415 Kostas Papadimitriou
7829 a7dd0415 Kostas Papadimitriou
        // Fill responseXXX fields
7830 a7dd0415 Kostas Papadimitriou
        for ( type in responseFields ) {
7831 a7dd0415 Kostas Papadimitriou
                if ( type in responses ) {
7832 a7dd0415 Kostas Papadimitriou
                        jqXHR[ responseFields[type] ] = responses[ type ];
7833 a7dd0415 Kostas Papadimitriou
                }
7834 a7dd0415 Kostas Papadimitriou
        }
7835 a7dd0415 Kostas Papadimitriou
7836 a7dd0415 Kostas Papadimitriou
        // Remove auto dataType and get content-type in the process
7837 a7dd0415 Kostas Papadimitriou
        while( dataTypes[ 0 ] === "*" ) {
7838 a7dd0415 Kostas Papadimitriou
                dataTypes.shift();
7839 a7dd0415 Kostas Papadimitriou
                if ( ct === undefined ) {
7840 a7dd0415 Kostas Papadimitriou
                        ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
7841 a7dd0415 Kostas Papadimitriou
                }
7842 a7dd0415 Kostas Papadimitriou
        }
7843 a7dd0415 Kostas Papadimitriou
7844 a7dd0415 Kostas Papadimitriou
        // Check if we're dealing with a known content-type
7845 a7dd0415 Kostas Papadimitriou
        if ( ct ) {
7846 a7dd0415 Kostas Papadimitriou
                for ( type in contents ) {
7847 a7dd0415 Kostas Papadimitriou
                        if ( contents[ type ] && contents[ type ].test( ct ) ) {
7848 a7dd0415 Kostas Papadimitriou
                                dataTypes.unshift( type );
7849 a7dd0415 Kostas Papadimitriou
                                break;
7850 a7dd0415 Kostas Papadimitriou
                        }
7851 a7dd0415 Kostas Papadimitriou
                }
7852 a7dd0415 Kostas Papadimitriou
        }
7853 a7dd0415 Kostas Papadimitriou
7854 a7dd0415 Kostas Papadimitriou
        // Check to see if we have a response for the expected dataType
7855 a7dd0415 Kostas Papadimitriou
        if ( dataTypes[ 0 ] in responses ) {
7856 a7dd0415 Kostas Papadimitriou
                finalDataType = dataTypes[ 0 ];
7857 a7dd0415 Kostas Papadimitriou
        } else {
7858 a7dd0415 Kostas Papadimitriou
                // Try convertible dataTypes
7859 a7dd0415 Kostas Papadimitriou
                for ( type in responses ) {
7860 a7dd0415 Kostas Papadimitriou
                        if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
7861 a7dd0415 Kostas Papadimitriou
                                finalDataType = type;
7862 a7dd0415 Kostas Papadimitriou
                                break;
7863 a7dd0415 Kostas Papadimitriou
                        }
7864 a7dd0415 Kostas Papadimitriou
                        if ( !firstDataType ) {
7865 a7dd0415 Kostas Papadimitriou
                                firstDataType = type;
7866 a7dd0415 Kostas Papadimitriou
                        }
7867 a7dd0415 Kostas Papadimitriou
                }
7868 a7dd0415 Kostas Papadimitriou
                // Or just use first one
7869 a7dd0415 Kostas Papadimitriou
                finalDataType = finalDataType || firstDataType;
7870 a7dd0415 Kostas Papadimitriou
        }
7871 a7dd0415 Kostas Papadimitriou
7872 a7dd0415 Kostas Papadimitriou
        // If we found a dataType
7873 a7dd0415 Kostas Papadimitriou
        // We add the dataType to the list if needed
7874 a7dd0415 Kostas Papadimitriou
        // and return the corresponding response
7875 a7dd0415 Kostas Papadimitriou
        if ( finalDataType ) {
7876 a7dd0415 Kostas Papadimitriou
                if ( finalDataType !== dataTypes[ 0 ] ) {
7877 a7dd0415 Kostas Papadimitriou
                        dataTypes.unshift( finalDataType );
7878 a7dd0415 Kostas Papadimitriou
                }
7879 a7dd0415 Kostas Papadimitriou
                return responses[ finalDataType ];
7880 a7dd0415 Kostas Papadimitriou
        }
7881 a7dd0415 Kostas Papadimitriou
}
7882 a7dd0415 Kostas Papadimitriou
7883 a7dd0415 Kostas Papadimitriou
// Chain conversions given the request and the original response
7884 a7dd0415 Kostas Papadimitriou
function ajaxConvert( s, response ) {
7885 a7dd0415 Kostas Papadimitriou
7886 a7dd0415 Kostas Papadimitriou
        // Apply the dataFilter if provided
7887 a7dd0415 Kostas Papadimitriou
        if ( s.dataFilter ) {
7888 a7dd0415 Kostas Papadimitriou
                response = s.dataFilter( response, s.dataType );
7889 a7dd0415 Kostas Papadimitriou
        }
7890 a7dd0415 Kostas Papadimitriou
7891 a7dd0415 Kostas Papadimitriou
        var dataTypes = s.dataTypes,
7892 a7dd0415 Kostas Papadimitriou
                converters = {},
7893 a7dd0415 Kostas Papadimitriou
                i,
7894 a7dd0415 Kostas Papadimitriou
                key,
7895 a7dd0415 Kostas Papadimitriou
                length = dataTypes.length,
7896 a7dd0415 Kostas Papadimitriou
                tmp,
7897 a7dd0415 Kostas Papadimitriou
                // Current and previous dataTypes
7898 a7dd0415 Kostas Papadimitriou
                current = dataTypes[ 0 ],
7899 a7dd0415 Kostas Papadimitriou
                prev,
7900 a7dd0415 Kostas Papadimitriou
                // Conversion expression
7901 a7dd0415 Kostas Papadimitriou
                conversion,
7902 a7dd0415 Kostas Papadimitriou
                // Conversion function
7903 a7dd0415 Kostas Papadimitriou
                conv,
7904 a7dd0415 Kostas Papadimitriou
                // Conversion functions (transitive conversion)
7905 a7dd0415 Kostas Papadimitriou
                conv1,
7906 a7dd0415 Kostas Papadimitriou
                conv2;
7907 a7dd0415 Kostas Papadimitriou
7908 a7dd0415 Kostas Papadimitriou
        // For each dataType in the chain
7909 a7dd0415 Kostas Papadimitriou
        for ( i = 1; i < length; i++ ) {
7910 a7dd0415 Kostas Papadimitriou
7911 a7dd0415 Kostas Papadimitriou
                // Create converters map
7912 a7dd0415 Kostas Papadimitriou
                // with lowercased keys
7913 a7dd0415 Kostas Papadimitriou
                if ( i === 1 ) {
7914 a7dd0415 Kostas Papadimitriou
                        for ( key in s.converters ) {
7915 a7dd0415 Kostas Papadimitriou
                                if ( typeof key === "string" ) {
7916 a7dd0415 Kostas Papadimitriou
                                        converters[ key.toLowerCase() ] = s.converters[ key ];
7917 a7dd0415 Kostas Papadimitriou
                                }
7918 a7dd0415 Kostas Papadimitriou
                        }
7919 a7dd0415 Kostas Papadimitriou
                }
7920 a7dd0415 Kostas Papadimitriou
7921 a7dd0415 Kostas Papadimitriou
                // Get the dataTypes
7922 a7dd0415 Kostas Papadimitriou
                prev = current;
7923 a7dd0415 Kostas Papadimitriou
                current = dataTypes[ i ];
7924 a7dd0415 Kostas Papadimitriou
7925 a7dd0415 Kostas Papadimitriou
                // If current is auto dataType, update it to prev
7926 a7dd0415 Kostas Papadimitriou
                if ( current === "*" ) {
7927 a7dd0415 Kostas Papadimitriou
                        current = prev;
7928 a7dd0415 Kostas Papadimitriou
                // If no auto and dataTypes are actually different
7929 a7dd0415 Kostas Papadimitriou
                } else if ( prev !== "*" && prev !== current ) {
7930 a7dd0415 Kostas Papadimitriou
7931 a7dd0415 Kostas Papadimitriou
                        // Get the converter
7932 a7dd0415 Kostas Papadimitriou
                        conversion = prev + " " + current;
7933 a7dd0415 Kostas Papadimitriou
                        conv = converters[ conversion ] || converters[ "* " + current ];
7934 a7dd0415 Kostas Papadimitriou
7935 a7dd0415 Kostas Papadimitriou
                        // If there is no direct converter, search transitively
7936 a7dd0415 Kostas Papadimitriou
                        if ( !conv ) {
7937 a7dd0415 Kostas Papadimitriou
                                conv2 = undefined;
7938 a7dd0415 Kostas Papadimitriou
                                for ( conv1 in converters ) {
7939 a7dd0415 Kostas Papadimitriou
                                        tmp = conv1.split( " " );
7940 a7dd0415 Kostas Papadimitriou
                                        if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
7941 a7dd0415 Kostas Papadimitriou
                                                conv2 = converters[ tmp[1] + " " + current ];
7942 a7dd0415 Kostas Papadimitriou
                                                if ( conv2 ) {
7943 a7dd0415 Kostas Papadimitriou
                                                        conv1 = converters[ conv1 ];
7944 a7dd0415 Kostas Papadimitriou
                                                        if ( conv1 === true ) {
7945 a7dd0415 Kostas Papadimitriou
                                                                conv = conv2;
7946 a7dd0415 Kostas Papadimitriou
                                                        } else if ( conv2 === true ) {
7947 a7dd0415 Kostas Papadimitriou
                                                                conv = conv1;
7948 a7dd0415 Kostas Papadimitriou
                                                        }
7949 a7dd0415 Kostas Papadimitriou
                                                        break;
7950 a7dd0415 Kostas Papadimitriou
                                                }
7951 a7dd0415 Kostas Papadimitriou
                                        }
7952 a7dd0415 Kostas Papadimitriou
                                }
7953 a7dd0415 Kostas Papadimitriou
                        }
7954 a7dd0415 Kostas Papadimitriou
                        // If we found no converter, dispatch an error
7955 a7dd0415 Kostas Papadimitriou
                        if ( !( conv || conv2 ) ) {
7956 a7dd0415 Kostas Papadimitriou
                                jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
7957 a7dd0415 Kostas Papadimitriou
                        }
7958 a7dd0415 Kostas Papadimitriou
                        // If found converter is not an equivalence
7959 a7dd0415 Kostas Papadimitriou
                        if ( conv !== true ) {
7960 a7dd0415 Kostas Papadimitriou
                                // Convert with 1 or 2 converters accordingly
7961 a7dd0415 Kostas Papadimitriou
                                response = conv ? conv( response ) : conv2( conv1(response) );
7962 a7dd0415 Kostas Papadimitriou
                        }
7963 a7dd0415 Kostas Papadimitriou
                }
7964 a7dd0415 Kostas Papadimitriou
        }
7965 a7dd0415 Kostas Papadimitriou
        return response;
7966 a7dd0415 Kostas Papadimitriou
}
7967 a7dd0415 Kostas Papadimitriou
7968 a7dd0415 Kostas Papadimitriou
7969 a7dd0415 Kostas Papadimitriou
7970 a7dd0415 Kostas Papadimitriou
7971 a7dd0415 Kostas Papadimitriou
var jsc = jQuery.now(),
7972 a7dd0415 Kostas Papadimitriou
        jsre = /(\=)\?(&|$)|\?\?/i;
7973 a7dd0415 Kostas Papadimitriou
7974 a7dd0415 Kostas Papadimitriou
// Default jsonp settings
7975 a7dd0415 Kostas Papadimitriou
jQuery.ajaxSetup({
7976 a7dd0415 Kostas Papadimitriou
        jsonp: "callback",
7977 a7dd0415 Kostas Papadimitriou
        jsonpCallback: function() {
7978 a7dd0415 Kostas Papadimitriou
                return jQuery.expando + "_" + ( jsc++ );
7979 a7dd0415 Kostas Papadimitriou
        }
7980 a7dd0415 Kostas Papadimitriou
});
7981 a7dd0415 Kostas Papadimitriou
7982 a7dd0415 Kostas Papadimitriou
// Detect, normalize options and install callbacks for jsonp requests
7983 a7dd0415 Kostas Papadimitriou
jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
7984 a7dd0415 Kostas Papadimitriou
7985 18059f42 Kostas Papadimitriou
        var inspectData = ( typeof s.data === "string" ) && /^application\/x\-www\-form\-urlencoded/.test( s.contentType );
7986 a7dd0415 Kostas Papadimitriou
7987 a7dd0415 Kostas Papadimitriou
        if ( s.dataTypes[ 0 ] === "jsonp" ||
7988 a7dd0415 Kostas Papadimitriou
                s.jsonp !== false && ( jsre.test( s.url ) ||
7989 a7dd0415 Kostas Papadimitriou
                                inspectData && jsre.test( s.data ) ) ) {
7990 a7dd0415 Kostas Papadimitriou
7991 a7dd0415 Kostas Papadimitriou
                var responseContainer,
7992 a7dd0415 Kostas Papadimitriou
                        jsonpCallback = s.jsonpCallback =
7993 a7dd0415 Kostas Papadimitriou
                                jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
7994 a7dd0415 Kostas Papadimitriou
                        previous = window[ jsonpCallback ],
7995 a7dd0415 Kostas Papadimitriou
                        url = s.url,
7996 a7dd0415 Kostas Papadimitriou
                        data = s.data,
7997 a7dd0415 Kostas Papadimitriou
                        replace = "$1" + jsonpCallback + "$2";
7998 a7dd0415 Kostas Papadimitriou
7999 a7dd0415 Kostas Papadimitriou
                if ( s.jsonp !== false ) {
8000 a7dd0415 Kostas Papadimitriou
                        url = url.replace( jsre, replace );
8001 a7dd0415 Kostas Papadimitriou
                        if ( s.url === url ) {
8002 a7dd0415 Kostas Papadimitriou
                                if ( inspectData ) {
8003 a7dd0415 Kostas Papadimitriou
                                        data = data.replace( jsre, replace );
8004 a7dd0415 Kostas Papadimitriou
                                }
8005 a7dd0415 Kostas Papadimitriou
                                if ( s.data === data ) {
8006 a7dd0415 Kostas Papadimitriou
                                        // Add callback manually
8007 a7dd0415 Kostas Papadimitriou
                                        url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
8008 a7dd0415 Kostas Papadimitriou
                                }
8009 a7dd0415 Kostas Papadimitriou
                        }
8010 a7dd0415 Kostas Papadimitriou
                }
8011 a7dd0415 Kostas Papadimitriou
8012 a7dd0415 Kostas Papadimitriou
                s.url = url;
8013 a7dd0415 Kostas Papadimitriou
                s.data = data;
8014 a7dd0415 Kostas Papadimitriou
8015 a7dd0415 Kostas Papadimitriou
                // Install callback
8016 a7dd0415 Kostas Papadimitriou
                window[ jsonpCallback ] = function( response ) {
8017 a7dd0415 Kostas Papadimitriou
                        responseContainer = [ response ];
8018 a7dd0415 Kostas Papadimitriou
                };
8019 a7dd0415 Kostas Papadimitriou
8020 a7dd0415 Kostas Papadimitriou
                // Clean-up function
8021 a7dd0415 Kostas Papadimitriou
                jqXHR.always(function() {
8022 a7dd0415 Kostas Papadimitriou
                        // Set callback back to previous value
8023 a7dd0415 Kostas Papadimitriou
                        window[ jsonpCallback ] = previous;
8024 a7dd0415 Kostas Papadimitriou
                        // Call if it was a function and we have a response
8025 a7dd0415 Kostas Papadimitriou
                        if ( responseContainer && jQuery.isFunction( previous ) ) {
8026 a7dd0415 Kostas Papadimitriou
                                window[ jsonpCallback ]( responseContainer[ 0 ] );
8027 a7dd0415 Kostas Papadimitriou
                        }
8028 a7dd0415 Kostas Papadimitriou
                });
8029 a7dd0415 Kostas Papadimitriou
8030 a7dd0415 Kostas Papadimitriou
                // Use data converter to retrieve json after script execution
8031 a7dd0415 Kostas Papadimitriou
                s.converters["script json"] = function() {
8032 a7dd0415 Kostas Papadimitriou
                        if ( !responseContainer ) {
8033 a7dd0415 Kostas Papadimitriou
                                jQuery.error( jsonpCallback + " was not called" );
8034 a7dd0415 Kostas Papadimitriou
                        }
8035 a7dd0415 Kostas Papadimitriou
                        return responseContainer[ 0 ];
8036 a7dd0415 Kostas Papadimitriou
                };
8037 a7dd0415 Kostas Papadimitriou
8038 a7dd0415 Kostas Papadimitriou
                // force json dataType
8039 a7dd0415 Kostas Papadimitriou
                s.dataTypes[ 0 ] = "json";
8040 a7dd0415 Kostas Papadimitriou
8041 a7dd0415 Kostas Papadimitriou
                // Delegate to script
8042 a7dd0415 Kostas Papadimitriou
                return "script";
8043 a7dd0415 Kostas Papadimitriou
        }
8044 a7dd0415 Kostas Papadimitriou
});
8045 a7dd0415 Kostas Papadimitriou
8046 a7dd0415 Kostas Papadimitriou
8047 a7dd0415 Kostas Papadimitriou
8048 a7dd0415 Kostas Papadimitriou
8049 a7dd0415 Kostas Papadimitriou
// Install script dataType
8050 a7dd0415 Kostas Papadimitriou
jQuery.ajaxSetup({
8051 a7dd0415 Kostas Papadimitriou
        accepts: {
8052 a7dd0415 Kostas Papadimitriou
                script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
8053 a7dd0415 Kostas Papadimitriou
        },
8054 a7dd0415 Kostas Papadimitriou
        contents: {
8055 a7dd0415 Kostas Papadimitriou
                script: /javascript|ecmascript/
8056 a7dd0415 Kostas Papadimitriou
        },
8057 a7dd0415 Kostas Papadimitriou
        converters: {
8058 a7dd0415 Kostas Papadimitriou
                "text script": function( text ) {
8059 a7dd0415 Kostas Papadimitriou
                        jQuery.globalEval( text );
8060 a7dd0415 Kostas Papadimitriou
                        return text;
8061 a7dd0415 Kostas Papadimitriou
                }
8062 a7dd0415 Kostas Papadimitriou
        }
8063 a7dd0415 Kostas Papadimitriou
});
8064 a7dd0415 Kostas Papadimitriou
8065 a7dd0415 Kostas Papadimitriou
// Handle cache's special case and global
8066 a7dd0415 Kostas Papadimitriou
jQuery.ajaxPrefilter( "script", function( s ) {
8067 a7dd0415 Kostas Papadimitriou
        if ( s.cache === undefined ) {
8068 a7dd0415 Kostas Papadimitriou
                s.cache = false;
8069 a7dd0415 Kostas Papadimitriou
        }
8070 a7dd0415 Kostas Papadimitriou
        if ( s.crossDomain ) {
8071 a7dd0415 Kostas Papadimitriou
                s.type = "GET";
8072 a7dd0415 Kostas Papadimitriou
                s.global = false;
8073 a7dd0415 Kostas Papadimitriou
        }
8074 a7dd0415 Kostas Papadimitriou
});
8075 a7dd0415 Kostas Papadimitriou
8076 a7dd0415 Kostas Papadimitriou
// Bind script tag hack transport
8077 a7dd0415 Kostas Papadimitriou
jQuery.ajaxTransport( "script", function(s) {
8078 a7dd0415 Kostas Papadimitriou
8079 a7dd0415 Kostas Papadimitriou
        // This transport only deals with cross domain requests
8080 a7dd0415 Kostas Papadimitriou
        if ( s.crossDomain ) {
8081 a7dd0415 Kostas Papadimitriou
8082 a7dd0415 Kostas Papadimitriou
                var script,
8083 a7dd0415 Kostas Papadimitriou
                        head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
8084 a7dd0415 Kostas Papadimitriou
8085 a7dd0415 Kostas Papadimitriou
                return {
8086 a7dd0415 Kostas Papadimitriou
8087 a7dd0415 Kostas Papadimitriou
                        send: function( _, callback ) {
8088 a7dd0415 Kostas Papadimitriou
8089 a7dd0415 Kostas Papadimitriou
                                script = document.createElement( "script" );
8090 a7dd0415 Kostas Papadimitriou
8091 a7dd0415 Kostas Papadimitriou
                                script.async = "async";
8092 a7dd0415 Kostas Papadimitriou
8093 a7dd0415 Kostas Papadimitriou
                                if ( s.scriptCharset ) {
8094 a7dd0415 Kostas Papadimitriou
                                        script.charset = s.scriptCharset;
8095 a7dd0415 Kostas Papadimitriou
                                }
8096 a7dd0415 Kostas Papadimitriou
8097 a7dd0415 Kostas Papadimitriou
                                script.src = s.url;
8098 a7dd0415 Kostas Papadimitriou
8099 a7dd0415 Kostas Papadimitriou
                                // Attach handlers for all browsers
8100 a7dd0415 Kostas Papadimitriou
                                script.onload = script.onreadystatechange = function( _, isAbort ) {
8101 a7dd0415 Kostas Papadimitriou
8102 a7dd0415 Kostas Papadimitriou
                                        if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
8103 a7dd0415 Kostas Papadimitriou
8104 a7dd0415 Kostas Papadimitriou
                                                // Handle memory leak in IE
8105 a7dd0415 Kostas Papadimitriou
                                                script.onload = script.onreadystatechange = null;
8106 a7dd0415 Kostas Papadimitriou
8107 a7dd0415 Kostas Papadimitriou
                                                // Remove the script
8108 a7dd0415 Kostas Papadimitriou
                                                if ( head && script.parentNode ) {
8109 a7dd0415 Kostas Papadimitriou
                                                        head.removeChild( script );
8110 a7dd0415 Kostas Papadimitriou
                                                }
8111 a7dd0415 Kostas Papadimitriou
8112 a7dd0415 Kostas Papadimitriou
                                                // Dereference the script
8113 a7dd0415 Kostas Papadimitriou
                                                script = undefined;
8114 a7dd0415 Kostas Papadimitriou
8115 a7dd0415 Kostas Papadimitriou
                                                // Callback if not abort
8116 a7dd0415 Kostas Papadimitriou
                                                if ( !isAbort ) {
8117 a7dd0415 Kostas Papadimitriou
                                                        callback( 200, "success" );
8118 a7dd0415 Kostas Papadimitriou
                                                }
8119 a7dd0415 Kostas Papadimitriou
                                        }
8120 a7dd0415 Kostas Papadimitriou
                                };
8121 a7dd0415 Kostas Papadimitriou
                                // Use insertBefore instead of appendChild  to circumvent an IE6 bug.
8122 a7dd0415 Kostas Papadimitriou
                                // This arises when a base node is used (#2709 and #4378).
8123 a7dd0415 Kostas Papadimitriou
                                head.insertBefore( script, head.firstChild );
8124 a7dd0415 Kostas Papadimitriou
                        },
8125 a7dd0415 Kostas Papadimitriou
8126 a7dd0415 Kostas Papadimitriou
                        abort: function() {
8127 a7dd0415 Kostas Papadimitriou
                                if ( script ) {
8128 a7dd0415 Kostas Papadimitriou
                                        script.onload( 0, 1 );
8129 a7dd0415 Kostas Papadimitriou
                                }
8130 a7dd0415 Kostas Papadimitriou
                        }
8131 a7dd0415 Kostas Papadimitriou
                };
8132 a7dd0415 Kostas Papadimitriou
        }
8133 a7dd0415 Kostas Papadimitriou
});
8134 a7dd0415 Kostas Papadimitriou
8135 a7dd0415 Kostas Papadimitriou
8136 a7dd0415 Kostas Papadimitriou
8137 a7dd0415 Kostas Papadimitriou
8138 a7dd0415 Kostas Papadimitriou
var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
8139 a7dd0415 Kostas Papadimitriou
        xhrOnUnloadAbort = window.ActiveXObject ? function() {
8140 a7dd0415 Kostas Papadimitriou
                // Abort all pending requests
8141 a7dd0415 Kostas Papadimitriou
                for ( var key in xhrCallbacks ) {
8142 a7dd0415 Kostas Papadimitriou
                        xhrCallbacks[ key ]( 0, 1 );
8143 a7dd0415 Kostas Papadimitriou
                }
8144 a7dd0415 Kostas Papadimitriou
        } : false,
8145 a7dd0415 Kostas Papadimitriou
        xhrId = 0,
8146 a7dd0415 Kostas Papadimitriou
        xhrCallbacks;
8147 a7dd0415 Kostas Papadimitriou
8148 a7dd0415 Kostas Papadimitriou
// Functions to create xhrs
8149 a7dd0415 Kostas Papadimitriou
function createStandardXHR() {
8150 a7dd0415 Kostas Papadimitriou
        try {
8151 a7dd0415 Kostas Papadimitriou
                return new window.XMLHttpRequest();
8152 a7dd0415 Kostas Papadimitriou
        } catch( e ) {}
8153 a7dd0415 Kostas Papadimitriou
}
8154 a7dd0415 Kostas Papadimitriou
8155 a7dd0415 Kostas Papadimitriou
function createActiveXHR() {
8156 a7dd0415 Kostas Papadimitriou
        try {
8157 a7dd0415 Kostas Papadimitriou
                return new window.ActiveXObject( "Microsoft.XMLHTTP" );
8158 a7dd0415 Kostas Papadimitriou
        } catch( e ) {}
8159 a7dd0415 Kostas Papadimitriou
}
8160 a7dd0415 Kostas Papadimitriou
8161 a7dd0415 Kostas Papadimitriou
// Create the request object
8162 a7dd0415 Kostas Papadimitriou
// (This is still attached to ajaxSettings for backward compatibility)
8163 a7dd0415 Kostas Papadimitriou
jQuery.ajaxSettings.xhr = window.ActiveXObject ?
8164 a7dd0415 Kostas Papadimitriou
        /* Microsoft failed to properly
8165 a7dd0415 Kostas Papadimitriou
         * implement the XMLHttpRequest in IE7 (can't request local files),
8166 a7dd0415 Kostas Papadimitriou
         * so we use the ActiveXObject when it is available
8167 a7dd0415 Kostas Papadimitriou
         * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
8168 a7dd0415 Kostas Papadimitriou
         * we need a fallback.
8169 a7dd0415 Kostas Papadimitriou
         */
8170 a7dd0415 Kostas Papadimitriou
        function() {
8171 a7dd0415 Kostas Papadimitriou
                return !this.isLocal && createStandardXHR() || createActiveXHR();
8172 a7dd0415 Kostas Papadimitriou
        } :
8173 a7dd0415 Kostas Papadimitriou
        // For all other browsers, use the standard XMLHttpRequest object
8174 a7dd0415 Kostas Papadimitriou
        createStandardXHR;
8175 a7dd0415 Kostas Papadimitriou
8176 a7dd0415 Kostas Papadimitriou
// Determine support properties
8177 a7dd0415 Kostas Papadimitriou
(function( xhr ) {
8178 a7dd0415 Kostas Papadimitriou
        jQuery.extend( jQuery.support, {
8179 a7dd0415 Kostas Papadimitriou
                ajax: !!xhr,
8180 a7dd0415 Kostas Papadimitriou
                cors: !!xhr && ( "withCredentials" in xhr )
8181 a7dd0415 Kostas Papadimitriou
        });
8182 a7dd0415 Kostas Papadimitriou
})( jQuery.ajaxSettings.xhr() );
8183 a7dd0415 Kostas Papadimitriou
8184 a7dd0415 Kostas Papadimitriou
// Create transport if the browser can provide an xhr
8185 a7dd0415 Kostas Papadimitriou
if ( jQuery.support.ajax ) {
8186 a7dd0415 Kostas Papadimitriou
8187 a7dd0415 Kostas Papadimitriou
        jQuery.ajaxTransport(function( s ) {
8188 a7dd0415 Kostas Papadimitriou
                // Cross domain only allowed if supported through XMLHttpRequest
8189 a7dd0415 Kostas Papadimitriou
                if ( !s.crossDomain || jQuery.support.cors ) {
8190 a7dd0415 Kostas Papadimitriou
8191 a7dd0415 Kostas Papadimitriou
                        var callback;
8192 a7dd0415 Kostas Papadimitriou
8193 a7dd0415 Kostas Papadimitriou
                        return {
8194 a7dd0415 Kostas Papadimitriou
                                send: function( headers, complete ) {
8195 a7dd0415 Kostas Papadimitriou
8196 a7dd0415 Kostas Papadimitriou
                                        // Get a new xhr
8197 a7dd0415 Kostas Papadimitriou
                                        var xhr = s.xhr(),
8198 a7dd0415 Kostas Papadimitriou
                                                handle,
8199 a7dd0415 Kostas Papadimitriou
                                                i;
8200 a7dd0415 Kostas Papadimitriou
8201 a7dd0415 Kostas Papadimitriou
                                        // Open the socket
8202 a7dd0415 Kostas Papadimitriou
                                        // Passing null username, generates a login popup on Opera (#2865)
8203 a7dd0415 Kostas Papadimitriou
                                        if ( s.username ) {
8204 a7dd0415 Kostas Papadimitriou
                                                xhr.open( s.type, s.url, s.async, s.username, s.password );
8205 a7dd0415 Kostas Papadimitriou
                                        } else {
8206 a7dd0415 Kostas Papadimitriou
                                                xhr.open( s.type, s.url, s.async );
8207 a7dd0415 Kostas Papadimitriou
                                        }
8208 a7dd0415 Kostas Papadimitriou
8209 a7dd0415 Kostas Papadimitriou
                                        // Apply custom fields if provided
8210 a7dd0415 Kostas Papadimitriou
                                        if ( s.xhrFields ) {
8211 a7dd0415 Kostas Papadimitriou
                                                for ( i in s.xhrFields ) {
8212 a7dd0415 Kostas Papadimitriou
                                                        xhr[ i ] = s.xhrFields[ i ];
8213 a7dd0415 Kostas Papadimitriou
                                                }
8214 a7dd0415 Kostas Papadimitriou
                                        }
8215 a7dd0415 Kostas Papadimitriou
8216 a7dd0415 Kostas Papadimitriou
                                        // Override mime type if needed
8217 a7dd0415 Kostas Papadimitriou
                                        if ( s.mimeType && xhr.overrideMimeType ) {
8218 a7dd0415 Kostas Papadimitriou
                                                xhr.overrideMimeType( s.mimeType );
8219 a7dd0415 Kostas Papadimitriou
                                        }
8220 a7dd0415 Kostas Papadimitriou
8221 a7dd0415 Kostas Papadimitriou
                                        // X-Requested-With header
8222 a7dd0415 Kostas Papadimitriou
                                        // For cross-domain requests, seeing as conditions for a preflight are
8223 a7dd0415 Kostas Papadimitriou
                                        // akin to a jigsaw puzzle, we simply never set it to be sure.
8224 a7dd0415 Kostas Papadimitriou
                                        // (it can always be set on a per-request basis or even using ajaxSetup)
8225 a7dd0415 Kostas Papadimitriou
                                        // For same-domain requests, won't change header if already provided.
8226 a7dd0415 Kostas Papadimitriou
                                        if ( !s.crossDomain && !headers["X-Requested-With"] ) {
8227 a7dd0415 Kostas Papadimitriou
                                                headers[ "X-Requested-With" ] = "XMLHttpRequest";
8228 a7dd0415 Kostas Papadimitriou
                                        }
8229 a7dd0415 Kostas Papadimitriou
8230 a7dd0415 Kostas Papadimitriou
                                        // Need an extra try/catch for cross domain requests in Firefox 3
8231 a7dd0415 Kostas Papadimitriou
                                        try {
8232 a7dd0415 Kostas Papadimitriou
                                                for ( i in headers ) {
8233 a7dd0415 Kostas Papadimitriou
                                                        xhr.setRequestHeader( i, headers[ i ] );
8234 a7dd0415 Kostas Papadimitriou
                                                }
8235 a7dd0415 Kostas Papadimitriou
                                        } catch( _ ) {}
8236 a7dd0415 Kostas Papadimitriou
8237 a7dd0415 Kostas Papadimitriou
                                        // Do send the request
8238 a7dd0415 Kostas Papadimitriou
                                        // This may raise an exception which is actually
8239 a7dd0415 Kostas Papadimitriou
                                        // handled in jQuery.ajax (so no try/catch here)
8240 a7dd0415 Kostas Papadimitriou
                                        xhr.send( ( s.hasContent && s.data ) || null );
8241 a7dd0415 Kostas Papadimitriou
8242 a7dd0415 Kostas Papadimitriou
                                        // Listener
8243 a7dd0415 Kostas Papadimitriou
                                        callback = function( _, isAbort ) {
8244 a7dd0415 Kostas Papadimitriou
8245 a7dd0415 Kostas Papadimitriou
                                                var status,
8246 a7dd0415 Kostas Papadimitriou
                                                        statusText,
8247 a7dd0415 Kostas Papadimitriou
                                                        responseHeaders,
8248 a7dd0415 Kostas Papadimitriou
                                                        responses,
8249 a7dd0415 Kostas Papadimitriou
                                                        xml;
8250 a7dd0415 Kostas Papadimitriou
8251 a7dd0415 Kostas Papadimitriou
                                                // Firefox throws exceptions when accessing properties
8252 a7dd0415 Kostas Papadimitriou
                                                // of an xhr when a network error occured
8253 a7dd0415 Kostas Papadimitriou
                                                // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
8254 a7dd0415 Kostas Papadimitriou
                                                try {
8255 a7dd0415 Kostas Papadimitriou
8256 a7dd0415 Kostas Papadimitriou
                                                        // Was never called and is aborted or complete
8257 a7dd0415 Kostas Papadimitriou
                                                        if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
8258 a7dd0415 Kostas Papadimitriou
8259 a7dd0415 Kostas Papadimitriou
                                                                // Only called once
8260 a7dd0415 Kostas Papadimitriou
                                                                callback = undefined;
8261 a7dd0415 Kostas Papadimitriou
8262 a7dd0415 Kostas Papadimitriou
                                                                // Do not keep as active anymore
8263 a7dd0415 Kostas Papadimitriou
                                                                if ( handle ) {
8264 a7dd0415 Kostas Papadimitriou
                                                                        xhr.onreadystatechange = jQuery.noop;
8265 a7dd0415 Kostas Papadimitriou
                                                                        if ( xhrOnUnloadAbort ) {
8266 a7dd0415 Kostas Papadimitriou
                                                                                delete xhrCallbacks[ handle ];
8267 a7dd0415 Kostas Papadimitriou
                                                                        }
8268 a7dd0415 Kostas Papadimitriou
                                                                }
8269 a7dd0415 Kostas Papadimitriou
8270 a7dd0415 Kostas Papadimitriou
                                                                // If it's an abort
8271 a7dd0415 Kostas Papadimitriou
                                                                if ( isAbort ) {
8272 a7dd0415 Kostas Papadimitriou
                                                                        // Abort it manually if needed
8273 a7dd0415 Kostas Papadimitriou
                                                                        if ( xhr.readyState !== 4 ) {
8274 a7dd0415 Kostas Papadimitriou
                                                                                xhr.abort();
8275 a7dd0415 Kostas Papadimitriou
                                                                        }
8276 a7dd0415 Kostas Papadimitriou
                                                                } else {
8277 a7dd0415 Kostas Papadimitriou
                                                                        status = xhr.status;
8278 a7dd0415 Kostas Papadimitriou
                                                                        responseHeaders = xhr.getAllResponseHeaders();
8279 a7dd0415 Kostas Papadimitriou
                                                                        responses = {};
8280 a7dd0415 Kostas Papadimitriou
                                                                        xml = xhr.responseXML;
8281 a7dd0415 Kostas Papadimitriou
8282 a7dd0415 Kostas Papadimitriou
                                                                        // Construct response list
8283 a7dd0415 Kostas Papadimitriou
                                                                        if ( xml && xml.documentElement /* #4958 */ ) {
8284 a7dd0415 Kostas Papadimitriou
                                                                                responses.xml = xml;
8285 a7dd0415 Kostas Papadimitriou
                                                                        }
8286 18059f42 Kostas Papadimitriou
8287 18059f42 Kostas Papadimitriou
                                                                        // When requesting binary data, IE6-9 will throw an exception
8288 18059f42 Kostas Papadimitriou
                                                                        // on any attempt to access responseText (#11426)
8289 18059f42 Kostas Papadimitriou
                                                                        try {
8290 18059f42 Kostas Papadimitriou
                                                                                responses.text = xhr.responseText;
8291 18059f42 Kostas Papadimitriou
                                                                        } catch( _ ) {
8292 18059f42 Kostas Papadimitriou
                                                                        }
8293 a7dd0415 Kostas Papadimitriou
8294 a7dd0415 Kostas Papadimitriou
                                                                        // Firefox throws an exception when accessing
8295 a7dd0415 Kostas Papadimitriou
                                                                        // statusText for faulty cross-domain requests
8296 a7dd0415 Kostas Papadimitriou
                                                                        try {
8297 a7dd0415 Kostas Papadimitriou
                                                                                statusText = xhr.statusText;
8298 a7dd0415 Kostas Papadimitriou
                                                                        } catch( e ) {
8299 a7dd0415 Kostas Papadimitriou
                                                                                // We normalize with Webkit giving an empty statusText
8300 a7dd0415 Kostas Papadimitriou
                                                                                statusText = "";
8301 a7dd0415 Kostas Papadimitriou
                                                                        }
8302 a7dd0415 Kostas Papadimitriou
8303 a7dd0415 Kostas Papadimitriou
                                                                        // Filter status for non standard behaviors
8304 a7dd0415 Kostas Papadimitriou
8305 a7dd0415 Kostas Papadimitriou
                                                                        // If the request is local and we have data: assume a success
8306 a7dd0415 Kostas Papadimitriou
                                                                        // (success with no data won't get notified, that's the best we
8307 a7dd0415 Kostas Papadimitriou
                                                                        // can do given current implementations)
8308 a7dd0415 Kostas Papadimitriou
                                                                        if ( !status && s.isLocal && !s.crossDomain ) {
8309 a7dd0415 Kostas Papadimitriou
                                                                                status = responses.text ? 200 : 404;
8310 a7dd0415 Kostas Papadimitriou
                                                                        // IE - #1450: sometimes returns 1223 when it should be 204
8311 a7dd0415 Kostas Papadimitriou
                                                                        } else if ( status === 1223 ) {
8312 a7dd0415 Kostas Papadimitriou
                                                                                status = 204;
8313 a7dd0415 Kostas Papadimitriou
                                                                        }
8314 a7dd0415 Kostas Papadimitriou
                                                                }
8315 a7dd0415 Kostas Papadimitriou
                                                        }
8316 a7dd0415 Kostas Papadimitriou
                                                } catch( firefoxAccessException ) {
8317 a7dd0415 Kostas Papadimitriou
                                                        if ( !isAbort ) {
8318 a7dd0415 Kostas Papadimitriou
                                                                complete( -1, firefoxAccessException );
8319 a7dd0415 Kostas Papadimitriou
                                                        }
8320 a7dd0415 Kostas Papadimitriou
                                                }
8321 a7dd0415 Kostas Papadimitriou
8322 a7dd0415 Kostas Papadimitriou
                                                // Call complete if needed
8323 a7dd0415 Kostas Papadimitriou
                                                if ( responses ) {
8324 a7dd0415 Kostas Papadimitriou
                                                        complete( status, statusText, responses, responseHeaders );
8325 a7dd0415 Kostas Papadimitriou
                                                }
8326 a7dd0415 Kostas Papadimitriou
                                        };
8327 a7dd0415 Kostas Papadimitriou
8328 a7dd0415 Kostas Papadimitriou
                                        // if we're in sync mode or it's in cache
8329 a7dd0415 Kostas Papadimitriou
                                        // and has been retrieved directly (IE6 & IE7)
8330 a7dd0415 Kostas Papadimitriou
                                        // we need to manually fire the callback
8331 a7dd0415 Kostas Papadimitriou
                                        if ( !s.async || xhr.readyState === 4 ) {
8332 a7dd0415 Kostas Papadimitriou
                                                callback();
8333 a7dd0415 Kostas Papadimitriou
                                        } else {
8334 a7dd0415 Kostas Papadimitriou
                                                handle = ++xhrId;
8335 a7dd0415 Kostas Papadimitriou
                                                if ( xhrOnUnloadAbort ) {
8336 a7dd0415 Kostas Papadimitriou
                                                        // Create the active xhrs callbacks list if needed
8337 a7dd0415 Kostas Papadimitriou
                                                        // and attach the unload handler
8338 a7dd0415 Kostas Papadimitriou
                                                        if ( !xhrCallbacks ) {
8339 a7dd0415 Kostas Papadimitriou
                                                                xhrCallbacks = {};
8340 a7dd0415 Kostas Papadimitriou
                                                                jQuery( window ).unload( xhrOnUnloadAbort );
8341 a7dd0415 Kostas Papadimitriou
                                                        }
8342 a7dd0415 Kostas Papadimitriou
                                                        // Add to list of active xhrs callbacks
8343 a7dd0415 Kostas Papadimitriou
                                                        xhrCallbacks[ handle ] = callback;
8344 a7dd0415 Kostas Papadimitriou
                                                }
8345 a7dd0415 Kostas Papadimitriou
                                                xhr.onreadystatechange = callback;
8346 a7dd0415 Kostas Papadimitriou
                                        }
8347 a7dd0415 Kostas Papadimitriou
                                },
8348 a7dd0415 Kostas Papadimitriou
8349 a7dd0415 Kostas Papadimitriou
                                abort: function() {
8350 a7dd0415 Kostas Papadimitriou
                                        if ( callback ) {
8351 a7dd0415 Kostas Papadimitriou
                                                callback(0,1);
8352 a7dd0415 Kostas Papadimitriou
                                        }
8353 a7dd0415 Kostas Papadimitriou
                                }
8354 a7dd0415 Kostas Papadimitriou
                        };
8355 a7dd0415 Kostas Papadimitriou
                }
8356 a7dd0415 Kostas Papadimitriou
        });
8357 a7dd0415 Kostas Papadimitriou
}
8358 a7dd0415 Kostas Papadimitriou
8359 a7dd0415 Kostas Papadimitriou
8360 a7dd0415 Kostas Papadimitriou
8361 a7dd0415 Kostas Papadimitriou
8362 a7dd0415 Kostas Papadimitriou
var elemdisplay = {},
8363 a7dd0415 Kostas Papadimitriou
        iframe, iframeDoc,
8364 a7dd0415 Kostas Papadimitriou
        rfxtypes = /^(?:toggle|show|hide)$/,
8365 a7dd0415 Kostas Papadimitriou
        rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
8366 a7dd0415 Kostas Papadimitriou
        timerId,
8367 a7dd0415 Kostas Papadimitriou
        fxAttrs = [
8368 a7dd0415 Kostas Papadimitriou
                // height animations
8369 a7dd0415 Kostas Papadimitriou
                [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
8370 a7dd0415 Kostas Papadimitriou
                // width animations
8371 a7dd0415 Kostas Papadimitriou
                [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
8372 a7dd0415 Kostas Papadimitriou
                // opacity animations
8373 a7dd0415 Kostas Papadimitriou
                [ "opacity" ]
8374 a7dd0415 Kostas Papadimitriou
        ],
8375 a7dd0415 Kostas Papadimitriou
        fxNow;
8376 a7dd0415 Kostas Papadimitriou
8377 a7dd0415 Kostas Papadimitriou
jQuery.fn.extend({
8378 a7dd0415 Kostas Papadimitriou
        show: function( speed, easing, callback ) {
8379 a7dd0415 Kostas Papadimitriou
                var elem, display;
8380 a7dd0415 Kostas Papadimitriou
8381 a7dd0415 Kostas Papadimitriou
                if ( speed || speed === 0 ) {
8382 a7dd0415 Kostas Papadimitriou
                        return this.animate( genFx("show", 3), speed, easing, callback );
8383 a7dd0415 Kostas Papadimitriou
8384 a7dd0415 Kostas Papadimitriou
                } else {
8385 a7dd0415 Kostas Papadimitriou
                        for ( var i = 0, j = this.length; i < j; i++ ) {
8386 a7dd0415 Kostas Papadimitriou
                                elem = this[ i ];
8387 a7dd0415 Kostas Papadimitriou
8388 a7dd0415 Kostas Papadimitriou
                                if ( elem.style ) {
8389 a7dd0415 Kostas Papadimitriou
                                        display = elem.style.display;
8390 a7dd0415 Kostas Papadimitriou
8391 a7dd0415 Kostas Papadimitriou
                                        // Reset the inline display of this element to learn if it is
8392 a7dd0415 Kostas Papadimitriou
                                        // being hidden by cascaded rules or not
8393 a7dd0415 Kostas Papadimitriou
                                        if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
8394 a7dd0415 Kostas Papadimitriou
                                                display = elem.style.display = "";
8395 a7dd0415 Kostas Papadimitriou
                                        }
8396 a7dd0415 Kostas Papadimitriou
8397 a7dd0415 Kostas Papadimitriou
                                        // Set elements which have been overridden with display: none
8398 a7dd0415 Kostas Papadimitriou
                                        // in a stylesheet to whatever the default browser style is
8399 a7dd0415 Kostas Papadimitriou
                                        // for such an element
8400 18059f42 Kostas Papadimitriou
                                        if ( (display === "" && jQuery.css(elem, "display") === "none") ||
8401 18059f42 Kostas Papadimitriou
                                                !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
8402 a7dd0415 Kostas Papadimitriou
                                                jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
8403 a7dd0415 Kostas Papadimitriou
                                        }
8404 a7dd0415 Kostas Papadimitriou
                                }
8405 a7dd0415 Kostas Papadimitriou
                        }
8406 a7dd0415 Kostas Papadimitriou
8407 a7dd0415 Kostas Papadimitriou
                        // Set the display of most of the elements in a second loop
8408 a7dd0415 Kostas Papadimitriou
                        // to avoid the constant reflow
8409 a7dd0415 Kostas Papadimitriou
                        for ( i = 0; i < j; i++ ) {
8410 a7dd0415 Kostas Papadimitriou
                                elem = this[ i ];
8411 a7dd0415 Kostas Papadimitriou
8412 a7dd0415 Kostas Papadimitriou
                                if ( elem.style ) {
8413 a7dd0415 Kostas Papadimitriou
                                        display = elem.style.display;
8414 a7dd0415 Kostas Papadimitriou
8415 a7dd0415 Kostas Papadimitriou
                                        if ( display === "" || display === "none" ) {
8416 a7dd0415 Kostas Papadimitriou
                                                elem.style.display = jQuery._data( elem, "olddisplay" ) || "";
8417 a7dd0415 Kostas Papadimitriou
                                        }
8418 a7dd0415 Kostas Papadimitriou
                                }
8419 a7dd0415 Kostas Papadimitriou
                        }
8420 a7dd0415 Kostas Papadimitriou
8421 a7dd0415 Kostas Papadimitriou
                        return this;
8422 a7dd0415 Kostas Papadimitriou
                }
8423 a7dd0415 Kostas Papadimitriou
        },
8424 a7dd0415 Kostas Papadimitriou
8425 a7dd0415 Kostas Papadimitriou
        hide: function( speed, easing, callback ) {
8426 a7dd0415 Kostas Papadimitriou
                if ( speed || speed === 0 ) {
8427 a7dd0415 Kostas Papadimitriou
                        return this.animate( genFx("hide", 3), speed, easing, callback);
8428 a7dd0415 Kostas Papadimitriou
8429 a7dd0415 Kostas Papadimitriou
                } else {
8430 a7dd0415 Kostas Papadimitriou
                        var elem, display,
8431 a7dd0415 Kostas Papadimitriou
                                i = 0,
8432 a7dd0415 Kostas Papadimitriou
                                j = this.length;
8433 a7dd0415 Kostas Papadimitriou
8434 a7dd0415 Kostas Papadimitriou
                        for ( ; i < j; i++ ) {
8435 a7dd0415 Kostas Papadimitriou
                                elem = this[i];
8436 a7dd0415 Kostas Papadimitriou
                                if ( elem.style ) {
8437 a7dd0415 Kostas Papadimitriou
                                        display = jQuery.css( elem, "display" );
8438 a7dd0415 Kostas Papadimitriou
8439 a7dd0415 Kostas Papadimitriou
                                        if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) {
8440 a7dd0415 Kostas Papadimitriou
                                                jQuery._data( elem, "olddisplay", display );
8441 a7dd0415 Kostas Papadimitriou
                                        }
8442 a7dd0415 Kostas Papadimitriou
                                }
8443 a7dd0415 Kostas Papadimitriou
                        }
8444 a7dd0415 Kostas Papadimitriou
8445 a7dd0415 Kostas Papadimitriou
                        // Set the display of the elements in a second loop
8446 a7dd0415 Kostas Papadimitriou
                        // to avoid the constant reflow
8447 a7dd0415 Kostas Papadimitriou
                        for ( i = 0; i < j; i++ ) {
8448 a7dd0415 Kostas Papadimitriou
                                if ( this[i].style ) {
8449 a7dd0415 Kostas Papadimitriou
                                        this[i].style.display = "none";
8450 a7dd0415 Kostas Papadimitriou
                                }
8451 a7dd0415 Kostas Papadimitriou
                        }
8452 a7dd0415 Kostas Papadimitriou
8453 a7dd0415 Kostas Papadimitriou
                        return this;
8454 a7dd0415 Kostas Papadimitriou
                }
8455 a7dd0415 Kostas Papadimitriou
        },
8456 a7dd0415 Kostas Papadimitriou
8457 a7dd0415 Kostas Papadimitriou
        // Save the old toggle function
8458 a7dd0415 Kostas Papadimitriou
        _toggle: jQuery.fn.toggle,
8459 a7dd0415 Kostas Papadimitriou
8460 a7dd0415 Kostas Papadimitriou
        toggle: function( fn, fn2, callback ) {
8461 a7dd0415 Kostas Papadimitriou
                var bool = typeof fn === "boolean";
8462 a7dd0415 Kostas Papadimitriou
8463 a7dd0415 Kostas Papadimitriou
                if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
8464 a7dd0415 Kostas Papadimitriou
                        this._toggle.apply( this, arguments );
8465 a7dd0415 Kostas Papadimitriou
8466 a7dd0415 Kostas Papadimitriou
                } else if ( fn == null || bool ) {
8467 a7dd0415 Kostas Papadimitriou
                        this.each(function() {
8468 a7dd0415 Kostas Papadimitriou
                                var state = bool ? fn : jQuery(this).is(":hidden");
8469 a7dd0415 Kostas Papadimitriou
                                jQuery(this)[ state ? "show" : "hide" ]();
8470 a7dd0415 Kostas Papadimitriou
                        });
8471 a7dd0415 Kostas Papadimitriou
8472 a7dd0415 Kostas Papadimitriou
                } else {
8473 a7dd0415 Kostas Papadimitriou
                        this.animate(genFx("toggle", 3), fn, fn2, callback);
8474 a7dd0415 Kostas Papadimitriou
                }
8475 a7dd0415 Kostas Papadimitriou
8476 a7dd0415 Kostas Papadimitriou
                return this;
8477 a7dd0415 Kostas Papadimitriou
        },
8478 a7dd0415 Kostas Papadimitriou
8479 a7dd0415 Kostas Papadimitriou
        fadeTo: function( speed, to, easing, callback ) {
8480 a7dd0415 Kostas Papadimitriou
                return this.filter(":hidden").css("opacity", 0).show().end()
8481 a7dd0415 Kostas Papadimitriou
                                        .animate({opacity: to}, speed, easing, callback);
8482 a7dd0415 Kostas Papadimitriou
        },
8483 a7dd0415 Kostas Papadimitriou
8484 a7dd0415 Kostas Papadimitriou
        animate: function( prop, speed, easing, callback ) {
8485 a7dd0415 Kostas Papadimitriou
                var optall = jQuery.speed( speed, easing, callback );
8486 a7dd0415 Kostas Papadimitriou
8487 a7dd0415 Kostas Papadimitriou
                if ( jQuery.isEmptyObject( prop ) ) {
8488 a7dd0415 Kostas Papadimitriou
                        return this.each( optall.complete, [ false ] );
8489 a7dd0415 Kostas Papadimitriou
                }
8490 a7dd0415 Kostas Papadimitriou
8491 a7dd0415 Kostas Papadimitriou
                // Do not change referenced properties as per-property easing will be lost
8492 a7dd0415 Kostas Papadimitriou
                prop = jQuery.extend( {}, prop );
8493 a7dd0415 Kostas Papadimitriou
8494 a7dd0415 Kostas Papadimitriou
                function doAnimation() {
8495 a7dd0415 Kostas Papadimitriou
                        // XXX 'this' does not always have a nodeName when running the
8496 a7dd0415 Kostas Papadimitriou
                        // test suite
8497 a7dd0415 Kostas Papadimitriou
8498 a7dd0415 Kostas Papadimitriou
                        if ( optall.queue === false ) {
8499 a7dd0415 Kostas Papadimitriou
                                jQuery._mark( this );
8500 a7dd0415 Kostas Papadimitriou
                        }
8501 a7dd0415 Kostas Papadimitriou
8502 a7dd0415 Kostas Papadimitriou
                        var opt = jQuery.extend( {}, optall ),
8503 a7dd0415 Kostas Papadimitriou
                                isElement = this.nodeType === 1,
8504 a7dd0415 Kostas Papadimitriou
                                hidden = isElement && jQuery(this).is(":hidden"),
8505 18059f42 Kostas Papadimitriou
                                name, val, p, e, hooks, replace,
8506 a7dd0415 Kostas Papadimitriou
                                parts, start, end, unit,
8507 a7dd0415 Kostas Papadimitriou
                                method;
8508 a7dd0415 Kostas Papadimitriou
8509 a7dd0415 Kostas Papadimitriou
                        // will store per property easing and be used to determine when an animation is complete
8510 a7dd0415 Kostas Papadimitriou
                        opt.animatedProperties = {};
8511 a7dd0415 Kostas Papadimitriou
8512 18059f42 Kostas Papadimitriou
                        // first pass over propertys to expand / normalize
8513 a7dd0415 Kostas Papadimitriou
                        for ( p in prop ) {
8514 a7dd0415 Kostas Papadimitriou
                                name = jQuery.camelCase( p );
8515 a7dd0415 Kostas Papadimitriou
                                if ( p !== name ) {
8516 a7dd0415 Kostas Papadimitriou
                                        prop[ name ] = prop[ p ];
8517 a7dd0415 Kostas Papadimitriou
                                        delete prop[ p ];
8518 a7dd0415 Kostas Papadimitriou
                                }
8519 a7dd0415 Kostas Papadimitriou
8520 18059f42 Kostas Papadimitriou
                                if ( ( hooks = jQuery.cssHooks[ name ] ) && "expand" in hooks ) {
8521 18059f42 Kostas Papadimitriou
                                        replace = hooks.expand( prop[ name ] );
8522 18059f42 Kostas Papadimitriou
                                        delete prop[ name ];
8523 a7dd0415 Kostas Papadimitriou
8524 18059f42 Kostas Papadimitriou
                                        // not quite $.extend, this wont overwrite keys already present.
8525 18059f42 Kostas Papadimitriou
                                        // also - reusing 'p' from above because we have the correct "name"
8526 18059f42 Kostas Papadimitriou
                                        for ( p in replace ) {
8527 18059f42 Kostas Papadimitriou
                                                if ( ! ( p in prop ) ) {
8528 18059f42 Kostas Papadimitriou
                                                        prop[ p ] = replace[ p ];
8529 18059f42 Kostas Papadimitriou
                                                }
8530 18059f42 Kostas Papadimitriou
                                        }
8531 18059f42 Kostas Papadimitriou
                                }
8532 18059f42 Kostas Papadimitriou
                        }
8533 18059f42 Kostas Papadimitriou
8534 18059f42 Kostas Papadimitriou
                        for ( name in prop ) {
8535 18059f42 Kostas Papadimitriou
                                val = prop[ name ];
8536 a7dd0415 Kostas Papadimitriou
                                // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
8537 a7dd0415 Kostas Papadimitriou
                                if ( jQuery.isArray( val ) ) {
8538 a7dd0415 Kostas Papadimitriou
                                        opt.animatedProperties[ name ] = val[ 1 ];
8539 a7dd0415 Kostas Papadimitriou
                                        val = prop[ name ] = val[ 0 ];
8540 a7dd0415 Kostas Papadimitriou
                                } else {
8541 a7dd0415 Kostas Papadimitriou
                                        opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
8542 a7dd0415 Kostas Papadimitriou
                                }
8543 a7dd0415 Kostas Papadimitriou
8544 a7dd0415 Kostas Papadimitriou
                                if ( val === "hide" && hidden || val === "show" && !hidden ) {
8545 a7dd0415 Kostas Papadimitriou
                                        return opt.complete.call( this );
8546 a7dd0415 Kostas Papadimitriou
                                }
8547 a7dd0415 Kostas Papadimitriou
8548 a7dd0415 Kostas Papadimitriou
                                if ( isElement && ( name === "height" || name === "width" ) ) {
8549 a7dd0415 Kostas Papadimitriou
                                        // Make sure that nothing sneaks out
8550 a7dd0415 Kostas Papadimitriou
                                        // Record all 3 overflow attributes because IE does not
8551 a7dd0415 Kostas Papadimitriou
                                        // change the overflow attribute when overflowX and
8552 a7dd0415 Kostas Papadimitriou
                                        // overflowY are set to the same value
8553 a7dd0415 Kostas Papadimitriou
                                        opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
8554 a7dd0415 Kostas Papadimitriou
8555 a7dd0415 Kostas Papadimitriou
                                        // Set display property to inline-block for height/width
8556 a7dd0415 Kostas Papadimitriou
                                        // animations on inline elements that are having width/height animated
8557 a7dd0415 Kostas Papadimitriou
                                        if ( jQuery.css( this, "display" ) === "inline" &&
8558 a7dd0415 Kostas Papadimitriou
                                                        jQuery.css( this, "float" ) === "none" ) {
8559 a7dd0415 Kostas Papadimitriou
8560 a7dd0415 Kostas Papadimitriou
                                                // inline-level elements accept inline-block;
8561 a7dd0415 Kostas Papadimitriou
                                                // block-level elements need to be inline with layout
8562 a7dd0415 Kostas Papadimitriou
                                                if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
8563 a7dd0415 Kostas Papadimitriou
                                                        this.style.display = "inline-block";
8564 a7dd0415 Kostas Papadimitriou
8565 a7dd0415 Kostas Papadimitriou
                                                } else {
8566 a7dd0415 Kostas Papadimitriou
                                                        this.style.zoom = 1;
8567 a7dd0415 Kostas Papadimitriou
                                                }
8568 a7dd0415 Kostas Papadimitriou
                                        }
8569 a7dd0415 Kostas Papadimitriou
                                }
8570 a7dd0415 Kostas Papadimitriou
                        }
8571 a7dd0415 Kostas Papadimitriou
8572 a7dd0415 Kostas Papadimitriou
                        if ( opt.overflow != null ) {
8573 a7dd0415 Kostas Papadimitriou
                                this.style.overflow = "hidden";
8574 a7dd0415 Kostas Papadimitriou
                        }
8575 a7dd0415 Kostas Papadimitriou
8576 a7dd0415 Kostas Papadimitriou
                        for ( p in prop ) {
8577 a7dd0415 Kostas Papadimitriou
                                e = new jQuery.fx( this, opt, p );
8578 a7dd0415 Kostas Papadimitriou
                                val = prop[ p ];
8579 a7dd0415 Kostas Papadimitriou
8580 a7dd0415 Kostas Papadimitriou
                                if ( rfxtypes.test( val ) ) {
8581 a7dd0415 Kostas Papadimitriou
8582 a7dd0415 Kostas Papadimitriou
                                        // Tracks whether to show or hide based on private
8583 a7dd0415 Kostas Papadimitriou
                                        // data attached to the element
8584 a7dd0415 Kostas Papadimitriou
                                        method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 );
8585 a7dd0415 Kostas Papadimitriou
                                        if ( method ) {
8586 a7dd0415 Kostas Papadimitriou
                                                jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
8587 a7dd0415 Kostas Papadimitriou
                                                e[ method ]();
8588 a7dd0415 Kostas Papadimitriou
                                        } else {
8589 a7dd0415 Kostas Papadimitriou
                                                e[ val ]();
8590 a7dd0415 Kostas Papadimitriou
                                        }
8591 a7dd0415 Kostas Papadimitriou
8592 a7dd0415 Kostas Papadimitriou
                                } else {
8593 a7dd0415 Kostas Papadimitriou
                                        parts = rfxnum.exec( val );
8594 a7dd0415 Kostas Papadimitriou
                                        start = e.cur();
8595 a7dd0415 Kostas Papadimitriou
8596 a7dd0415 Kostas Papadimitriou
                                        if ( parts ) {
8597 a7dd0415 Kostas Papadimitriou
                                                end = parseFloat( parts[2] );
8598 a7dd0415 Kostas Papadimitriou
                                                unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
8599 a7dd0415 Kostas Papadimitriou
8600 a7dd0415 Kostas Papadimitriou
                                                // We need to compute starting value
8601 a7dd0415 Kostas Papadimitriou
                                                if ( unit !== "px" ) {
8602 a7dd0415 Kostas Papadimitriou
                                                        jQuery.style( this, p, (end || 1) + unit);
8603 a7dd0415 Kostas Papadimitriou
                                                        start = ( (end || 1) / e.cur() ) * start;
8604 a7dd0415 Kostas Papadimitriou
                                                        jQuery.style( this, p, start + unit);
8605 a7dd0415 Kostas Papadimitriou
                                                }
8606 a7dd0415 Kostas Papadimitriou
8607 a7dd0415 Kostas Papadimitriou
                                                // If a +=/-= token was provided, we're doing a relative animation
8608 a7dd0415 Kostas Papadimitriou
                                                if ( parts[1] ) {
8609 a7dd0415 Kostas Papadimitriou
                                                        end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
8610 a7dd0415 Kostas Papadimitriou
                                                }
8611 a7dd0415 Kostas Papadimitriou
8612 a7dd0415 Kostas Papadimitriou
                                                e.custom( start, end, unit );
8613 a7dd0415 Kostas Papadimitriou
8614 a7dd0415 Kostas Papadimitriou
                                        } else {
8615 a7dd0415 Kostas Papadimitriou
                                                e.custom( start, val, "" );
8616 a7dd0415 Kostas Papadimitriou
                                        }
8617 a7dd0415 Kostas Papadimitriou
                                }
8618 a7dd0415 Kostas Papadimitriou
                        }
8619 a7dd0415 Kostas Papadimitriou
8620 a7dd0415 Kostas Papadimitriou
                        // For JS strict compliance
8621 a7dd0415 Kostas Papadimitriou
                        return true;
8622 a7dd0415 Kostas Papadimitriou
                }
8623 a7dd0415 Kostas Papadimitriou
8624 a7dd0415 Kostas Papadimitriou
                return optall.queue === false ?
8625 a7dd0415 Kostas Papadimitriou
                        this.each( doAnimation ) :
8626 a7dd0415 Kostas Papadimitriou
                        this.queue( optall.queue, doAnimation );
8627 a7dd0415 Kostas Papadimitriou
        },
8628 a7dd0415 Kostas Papadimitriou
8629 a7dd0415 Kostas Papadimitriou
        stop: function( type, clearQueue, gotoEnd ) {
8630 a7dd0415 Kostas Papadimitriou
                if ( typeof type !== "string" ) {
8631 a7dd0415 Kostas Papadimitriou
                        gotoEnd = clearQueue;
8632 a7dd0415 Kostas Papadimitriou
                        clearQueue = type;
8633 a7dd0415 Kostas Papadimitriou
                        type = undefined;
8634 a7dd0415 Kostas Papadimitriou
                }
8635 a7dd0415 Kostas Papadimitriou
                if ( clearQueue && type !== false ) {
8636 a7dd0415 Kostas Papadimitriou
                        this.queue( type || "fx", [] );
8637 a7dd0415 Kostas Papadimitriou
                }
8638 a7dd0415 Kostas Papadimitriou
8639 a7dd0415 Kostas Papadimitriou
                return this.each(function() {
8640 a7dd0415 Kostas Papadimitriou
                        var index,
8641 a7dd0415 Kostas Papadimitriou
                                hadTimers = false,
8642 a7dd0415 Kostas Papadimitriou
                                timers = jQuery.timers,
8643 a7dd0415 Kostas Papadimitriou
                                data = jQuery._data( this );
8644 a7dd0415 Kostas Papadimitriou
8645 a7dd0415 Kostas Papadimitriou
                        // clear marker counters if we know they won't be
8646 a7dd0415 Kostas Papadimitriou
                        if ( !gotoEnd ) {
8647 a7dd0415 Kostas Papadimitriou
                                jQuery._unmark( true, this );
8648 a7dd0415 Kostas Papadimitriou
                        }
8649 a7dd0415 Kostas Papadimitriou
8650 a7dd0415 Kostas Papadimitriou
                        function stopQueue( elem, data, index ) {
8651 a7dd0415 Kostas Papadimitriou
                                var hooks = data[ index ];
8652 a7dd0415 Kostas Papadimitriou
                                jQuery.removeData( elem, index, true );
8653 a7dd0415 Kostas Papadimitriou
                                hooks.stop( gotoEnd );
8654 a7dd0415 Kostas Papadimitriou
                        }
8655 a7dd0415 Kostas Papadimitriou
8656 a7dd0415 Kostas Papadimitriou
                        if ( type == null ) {
8657 a7dd0415 Kostas Papadimitriou
                                for ( index in data ) {
8658 a7dd0415 Kostas Papadimitriou
                                        if ( data[ index ] && data[ index ].stop && index.indexOf(".run") === index.length - 4 ) {
8659 a7dd0415 Kostas Papadimitriou
                                                stopQueue( this, data, index );
8660 a7dd0415 Kostas Papadimitriou
                                        }
8661 a7dd0415 Kostas Papadimitriou
                                }
8662 a7dd0415 Kostas Papadimitriou
                        } else if ( data[ index = type + ".run" ] && data[ index ].stop ){
8663 a7dd0415 Kostas Papadimitriou
                                stopQueue( this, data, index );
8664 a7dd0415 Kostas Papadimitriou
                        }
8665 a7dd0415 Kostas Papadimitriou
8666 a7dd0415 Kostas Papadimitriou
                        for ( index = timers.length; index--; ) {
8667 a7dd0415 Kostas Papadimitriou
                                if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
8668 a7dd0415 Kostas Papadimitriou
                                        if ( gotoEnd ) {
8669 a7dd0415 Kostas Papadimitriou
8670 a7dd0415 Kostas Papadimitriou
                                                // force the next step to be the last
8671 a7dd0415 Kostas Papadimitriou
                                                timers[ index ]( true );
8672 a7dd0415 Kostas Papadimitriou
                                        } else {
8673 a7dd0415 Kostas Papadimitriou
                                                timers[ index ].saveState();
8674 a7dd0415 Kostas Papadimitriou
                                        }
8675 a7dd0415 Kostas Papadimitriou
                                        hadTimers = true;
8676 a7dd0415 Kostas Papadimitriou
                                        timers.splice( index, 1 );
8677 a7dd0415 Kostas Papadimitriou
                                }
8678 a7dd0415 Kostas Papadimitriou
                        }
8679 a7dd0415 Kostas Papadimitriou
8680 a7dd0415 Kostas Papadimitriou
                        // start the next in the queue if the last step wasn't forced
8681 a7dd0415 Kostas Papadimitriou
                        // timers currently will call their complete callbacks, which will dequeue
8682 a7dd0415 Kostas Papadimitriou
                        // but only if they were gotoEnd
8683 a7dd0415 Kostas Papadimitriou
                        if ( !( gotoEnd && hadTimers ) ) {
8684 a7dd0415 Kostas Papadimitriou
                                jQuery.dequeue( this, type );
8685 a7dd0415 Kostas Papadimitriou
                        }
8686 a7dd0415 Kostas Papadimitriou
                });
8687 a7dd0415 Kostas Papadimitriou
        }
8688 a7dd0415 Kostas Papadimitriou
8689 a7dd0415 Kostas Papadimitriou
});
8690 a7dd0415 Kostas Papadimitriou
8691 a7dd0415 Kostas Papadimitriou
// Animations created synchronously will run synchronously
8692 a7dd0415 Kostas Papadimitriou
function createFxNow() {
8693 a7dd0415 Kostas Papadimitriou
        setTimeout( clearFxNow, 0 );
8694 a7dd0415 Kostas Papadimitriou
        return ( fxNow = jQuery.now() );
8695 a7dd0415 Kostas Papadimitriou
}
8696 a7dd0415 Kostas Papadimitriou
8697 a7dd0415 Kostas Papadimitriou
function clearFxNow() {
8698 a7dd0415 Kostas Papadimitriou
        fxNow = undefined;
8699 a7dd0415 Kostas Papadimitriou
}
8700 a7dd0415 Kostas Papadimitriou
8701 a7dd0415 Kostas Papadimitriou
// Generate parameters to create a standard animation
8702 a7dd0415 Kostas Papadimitriou
function genFx( type, num ) {
8703 a7dd0415 Kostas Papadimitriou
        var obj = {};
8704 a7dd0415 Kostas Papadimitriou
8705 a7dd0415 Kostas Papadimitriou
        jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
8706 a7dd0415 Kostas Papadimitriou
                obj[ this ] = type;
8707 a7dd0415 Kostas Papadimitriou
        });
8708 a7dd0415 Kostas Papadimitriou
8709 a7dd0415 Kostas Papadimitriou
        return obj;
8710 a7dd0415 Kostas Papadimitriou
}
8711 a7dd0415 Kostas Papadimitriou
8712 a7dd0415 Kostas Papadimitriou
// Generate shortcuts for custom animations
8713 a7dd0415 Kostas Papadimitriou
jQuery.each({
8714 a7dd0415 Kostas Papadimitriou
        slideDown: genFx( "show", 1 ),
8715 a7dd0415 Kostas Papadimitriou
        slideUp: genFx( "hide", 1 ),
8716 a7dd0415 Kostas Papadimitriou
        slideToggle: genFx( "toggle", 1 ),
8717 a7dd0415 Kostas Papadimitriou
        fadeIn: { opacity: "show" },
8718 a7dd0415 Kostas Papadimitriou
        fadeOut: { opacity: "hide" },
8719 a7dd0415 Kostas Papadimitriou
        fadeToggle: { opacity: "toggle" }
8720 a7dd0415 Kostas Papadimitriou
}, function( name, props ) {
8721 a7dd0415 Kostas Papadimitriou
        jQuery.fn[ name ] = function( speed, easing, callback ) {
8722 a7dd0415 Kostas Papadimitriou
                return this.animate( props, speed, easing, callback );
8723 a7dd0415 Kostas Papadimitriou
        };
8724 a7dd0415 Kostas Papadimitriou
});
8725 a7dd0415 Kostas Papadimitriou
8726 a7dd0415 Kostas Papadimitriou
jQuery.extend({
8727 a7dd0415 Kostas Papadimitriou
        speed: function( speed, easing, fn ) {
8728 a7dd0415 Kostas Papadimitriou
                var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
8729 a7dd0415 Kostas Papadimitriou
                        complete: fn || !fn && easing ||
8730 a7dd0415 Kostas Papadimitriou
                                jQuery.isFunction( speed ) && speed,
8731 a7dd0415 Kostas Papadimitriou
                        duration: speed,
8732 a7dd0415 Kostas Papadimitriou
                        easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
8733 a7dd0415 Kostas Papadimitriou
                };
8734 a7dd0415 Kostas Papadimitriou
8735 a7dd0415 Kostas Papadimitriou
                opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
8736 a7dd0415 Kostas Papadimitriou
                        opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
8737 a7dd0415 Kostas Papadimitriou
8738 a7dd0415 Kostas Papadimitriou
                // normalize opt.queue - true/undefined/null -> "fx"
8739 a7dd0415 Kostas Papadimitriou
                if ( opt.queue == null || opt.queue === true ) {
8740 a7dd0415 Kostas Papadimitriou
                        opt.queue = "fx";
8741 a7dd0415 Kostas Papadimitriou
                }
8742 a7dd0415 Kostas Papadimitriou
8743 a7dd0415 Kostas Papadimitriou
                // Queueing
8744 a7dd0415 Kostas Papadimitriou
                opt.old = opt.complete;
8745 a7dd0415 Kostas Papadimitriou
8746 a7dd0415 Kostas Papadimitriou
                opt.complete = function( noUnmark ) {
8747 a7dd0415 Kostas Papadimitriou
                        if ( jQuery.isFunction( opt.old ) ) {
8748 a7dd0415 Kostas Papadimitriou
                                opt.old.call( this );
8749 a7dd0415 Kostas Papadimitriou
                        }
8750 a7dd0415 Kostas Papadimitriou
8751 a7dd0415 Kostas Papadimitriou
                        if ( opt.queue ) {
8752 a7dd0415 Kostas Papadimitriou
                                jQuery.dequeue( this, opt.queue );
8753 a7dd0415 Kostas Papadimitriou
                        } else if ( noUnmark !== false ) {
8754 a7dd0415 Kostas Papadimitriou
                                jQuery._unmark( this );
8755 a7dd0415 Kostas Papadimitriou
                        }
8756 a7dd0415 Kostas Papadimitriou
                };
8757 a7dd0415 Kostas Papadimitriou
8758 a7dd0415 Kostas Papadimitriou
                return opt;
8759 a7dd0415 Kostas Papadimitriou
        },
8760 a7dd0415 Kostas Papadimitriou
8761 a7dd0415 Kostas Papadimitriou
        easing: {
8762 18059f42 Kostas Papadimitriou
                linear: function( p ) {
8763 18059f42 Kostas Papadimitriou
                        return p;
8764 a7dd0415 Kostas Papadimitriou
                },
8765 18059f42 Kostas Papadimitriou
                swing: function( p ) {
8766 18059f42 Kostas Papadimitriou
                        return ( -Math.cos( p*Math.PI ) / 2 ) + 0.5;
8767 a7dd0415 Kostas Papadimitriou
                }
8768 a7dd0415 Kostas Papadimitriou
        },
8769 a7dd0415 Kostas Papadimitriou
8770 a7dd0415 Kostas Papadimitriou
        timers: [],
8771 a7dd0415 Kostas Papadimitriou
8772 a7dd0415 Kostas Papadimitriou
        fx: function( elem, options, prop ) {
8773 a7dd0415 Kostas Papadimitriou
                this.options = options;
8774 a7dd0415 Kostas Papadimitriou
                this.elem = elem;
8775 a7dd0415 Kostas Papadimitriou
                this.prop = prop;
8776 a7dd0415 Kostas Papadimitriou
8777 a7dd0415 Kostas Papadimitriou
                options.orig = options.orig || {};
8778 a7dd0415 Kostas Papadimitriou
        }
8779 a7dd0415 Kostas Papadimitriou
8780 a7dd0415 Kostas Papadimitriou
});
8781 a7dd0415 Kostas Papadimitriou
8782 a7dd0415 Kostas Papadimitriou
jQuery.fx.prototype = {
8783 a7dd0415 Kostas Papadimitriou
        // Simple function for setting a style value
8784 a7dd0415 Kostas Papadimitriou
        update: function() {
8785 a7dd0415 Kostas Papadimitriou
                if ( this.options.step ) {
8786 a7dd0415 Kostas Papadimitriou
                        this.options.step.call( this.elem, this.now, this );
8787 a7dd0415 Kostas Papadimitriou
                }
8788 a7dd0415 Kostas Papadimitriou
8789 a7dd0415 Kostas Papadimitriou
                ( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );
8790 a7dd0415 Kostas Papadimitriou
        },
8791 a7dd0415 Kostas Papadimitriou
8792 a7dd0415 Kostas Papadimitriou
        // Get the current size
8793 a7dd0415 Kostas Papadimitriou
        cur: function() {
8794 a7dd0415 Kostas Papadimitriou
                if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
8795 a7dd0415 Kostas Papadimitriou
                        return this.elem[ this.prop ];
8796 a7dd0415 Kostas Papadimitriou
                }
8797 a7dd0415 Kostas Papadimitriou
8798 a7dd0415 Kostas Papadimitriou
                var parsed,
8799 a7dd0415 Kostas Papadimitriou
                        r = jQuery.css( this.elem, this.prop );
8800 a7dd0415 Kostas Papadimitriou
                // Empty strings, null, undefined and "auto" are converted to 0,
8801 a7dd0415 Kostas Papadimitriou
                // complex values such as "rotate(1rad)" are returned as is,
8802 a7dd0415 Kostas Papadimitriou
                // simple values such as "10px" are parsed to Float.
8803 a7dd0415 Kostas Papadimitriou
                return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
8804 a7dd0415 Kostas Papadimitriou
        },
8805 a7dd0415 Kostas Papadimitriou
8806 a7dd0415 Kostas Papadimitriou
        // Start an animation from one number to another
8807 a7dd0415 Kostas Papadimitriou
        custom: function( from, to, unit ) {
8808 a7dd0415 Kostas Papadimitriou
                var self = this,
8809 a7dd0415 Kostas Papadimitriou
                        fx = jQuery.fx;
8810 a7dd0415 Kostas Papadimitriou
8811 a7dd0415 Kostas Papadimitriou
                this.startTime = fxNow || createFxNow();
8812 a7dd0415 Kostas Papadimitriou
                this.end = to;
8813 a7dd0415 Kostas Papadimitriou
                this.now = this.start = from;
8814 a7dd0415 Kostas Papadimitriou
                this.pos = this.state = 0;
8815 a7dd0415 Kostas Papadimitriou
                this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
8816 a7dd0415 Kostas Papadimitriou
8817 a7dd0415 Kostas Papadimitriou
                function t( gotoEnd ) {
8818 a7dd0415 Kostas Papadimitriou
                        return self.step( gotoEnd );
8819 a7dd0415 Kostas Papadimitriou
                }
8820 a7dd0415 Kostas Papadimitriou
8821 a7dd0415 Kostas Papadimitriou
                t.queue = this.options.queue;
8822 a7dd0415 Kostas Papadimitriou
                t.elem = this.elem;
8823 a7dd0415 Kostas Papadimitriou
                t.saveState = function() {
8824 18059f42 Kostas Papadimitriou
                        if ( jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
8825 18059f42 Kostas Papadimitriou
                                if ( self.options.hide ) {
8826 18059f42 Kostas Papadimitriou
                                        jQuery._data( self.elem, "fxshow" + self.prop, self.start );
8827 18059f42 Kostas Papadimitriou
                                } else if ( self.options.show ) {
8828 18059f42 Kostas Papadimitriou
                                        jQuery._data( self.elem, "fxshow" + self.prop, self.end );
8829 18059f42 Kostas Papadimitriou
                                }
8830 a7dd0415 Kostas Papadimitriou
                        }
8831 a7dd0415 Kostas Papadimitriou
                };
8832 a7dd0415 Kostas Papadimitriou
8833 a7dd0415 Kostas Papadimitriou
                if ( t() && jQuery.timers.push(t) && !timerId ) {
8834 a7dd0415 Kostas Papadimitriou
                        timerId = setInterval( fx.tick, fx.interval );
8835 a7dd0415 Kostas Papadimitriou
                }
8836 a7dd0415 Kostas Papadimitriou
        },
8837 a7dd0415 Kostas Papadimitriou
8838 a7dd0415 Kostas Papadimitriou
        // Simple 'show' function
8839 a7dd0415 Kostas Papadimitriou
        show: function() {
8840 a7dd0415 Kostas Papadimitriou
                var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
8841 a7dd0415 Kostas Papadimitriou
8842 a7dd0415 Kostas Papadimitriou
                // Remember where we started, so that we can go back to it later
8843 a7dd0415 Kostas Papadimitriou
                this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
8844 a7dd0415 Kostas Papadimitriou
                this.options.show = true;
8845 a7dd0415 Kostas Papadimitriou
8846 a7dd0415 Kostas Papadimitriou
                // Begin the animation
8847 a7dd0415 Kostas Papadimitriou
                // Make sure that we start at a small width/height to avoid any flash of content
8848 a7dd0415 Kostas Papadimitriou
                if ( dataShow !== undefined ) {
8849 a7dd0415 Kostas Papadimitriou
                        // This show is picking up where a previous hide or show left off
8850 a7dd0415 Kostas Papadimitriou
                        this.custom( this.cur(), dataShow );
8851 a7dd0415 Kostas Papadimitriou
                } else {
8852 a7dd0415 Kostas Papadimitriou
                        this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
8853 a7dd0415 Kostas Papadimitriou
                }
8854 a7dd0415 Kostas Papadimitriou
8855 a7dd0415 Kostas Papadimitriou
                // Start by showing the element
8856 a7dd0415 Kostas Papadimitriou
                jQuery( this.elem ).show();
8857 a7dd0415 Kostas Papadimitriou
        },
8858 a7dd0415 Kostas Papadimitriou
8859 a7dd0415 Kostas Papadimitriou
        // Simple 'hide' function
8860 a7dd0415 Kostas Papadimitriou
        hide: function() {
8861 a7dd0415 Kostas Papadimitriou
                // Remember where we started, so that we can go back to it later
8862 a7dd0415 Kostas Papadimitriou
                this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
8863 a7dd0415 Kostas Papadimitriou
                this.options.hide = true;
8864 a7dd0415 Kostas Papadimitriou
8865 a7dd0415 Kostas Papadimitriou
                // Begin the animation
8866 a7dd0415 Kostas Papadimitriou
                this.custom( this.cur(), 0 );
8867 a7dd0415 Kostas Papadimitriou
        },
8868 a7dd0415 Kostas Papadimitriou
8869 a7dd0415 Kostas Papadimitriou
        // Each step of an animation
8870 a7dd0415 Kostas Papadimitriou
        step: function( gotoEnd ) {
8871 a7dd0415 Kostas Papadimitriou
                var p, n, complete,
8872 a7dd0415 Kostas Papadimitriou
                        t = fxNow || createFxNow(),
8873 a7dd0415 Kostas Papadimitriou
                        done = true,
8874 a7dd0415 Kostas Papadimitriou
                        elem = this.elem,
8875 a7dd0415 Kostas Papadimitriou
                        options = this.options;
8876 a7dd0415 Kostas Papadimitriou
8877 a7dd0415 Kostas Papadimitriou
                if ( gotoEnd || t >= options.duration + this.startTime ) {
8878 a7dd0415 Kostas Papadimitriou
                        this.now = this.end;
8879 a7dd0415 Kostas Papadimitriou
                        this.pos = this.state = 1;
8880 a7dd0415 Kostas Papadimitriou
                        this.update();
8881 a7dd0415 Kostas Papadimitriou
8882 a7dd0415 Kostas Papadimitriou
                        options.animatedProperties[ this.prop ] = true;
8883 a7dd0415 Kostas Papadimitriou
8884 a7dd0415 Kostas Papadimitriou
                        for ( p in options.animatedProperties ) {
8885 a7dd0415 Kostas Papadimitriou
                                if ( options.animatedProperties[ p ] !== true ) {
8886 a7dd0415 Kostas Papadimitriou
                                        done = false;
8887 a7dd0415 Kostas Papadimitriou
                                }
8888 a7dd0415 Kostas Papadimitriou
                        }
8889 a7dd0415 Kostas Papadimitriou
8890 a7dd0415 Kostas Papadimitriou
                        if ( done ) {
8891 a7dd0415 Kostas Papadimitriou
                                // Reset the overflow
8892 a7dd0415 Kostas Papadimitriou
                                if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
8893 a7dd0415 Kostas Papadimitriou
8894 a7dd0415 Kostas Papadimitriou
                                        jQuery.each( [ "", "X", "Y" ], function( index, value ) {
8895 a7dd0415 Kostas Papadimitriou
                                                elem.style[ "overflow" + value ] = options.overflow[ index ];
8896 a7dd0415 Kostas Papadimitriou
                                        });
8897 a7dd0415 Kostas Papadimitriou
                                }
8898 a7dd0415 Kostas Papadimitriou
8899 a7dd0415 Kostas Papadimitriou
                                // Hide the element if the "hide" operation was done
8900 a7dd0415 Kostas Papadimitriou
                                if ( options.hide ) {
8901 a7dd0415 Kostas Papadimitriou
                                        jQuery( elem ).hide();
8902 a7dd0415 Kostas Papadimitriou
                                }
8903 a7dd0415 Kostas Papadimitriou
8904 a7dd0415 Kostas Papadimitriou
                                // Reset the properties, if the item has been hidden or shown
8905 a7dd0415 Kostas Papadimitriou
                                if ( options.hide || options.show ) {
8906 a7dd0415 Kostas Papadimitriou
                                        for ( p in options.animatedProperties ) {
8907 a7dd0415 Kostas Papadimitriou
                                                jQuery.style( elem, p, options.orig[ p ] );
8908 a7dd0415 Kostas Papadimitriou
                                                jQuery.removeData( elem, "fxshow" + p, true );
8909 a7dd0415 Kostas Papadimitriou
                                                // Toggle data is no longer needed
8910 a7dd0415 Kostas Papadimitriou
                                                jQuery.removeData( elem, "toggle" + p, true );
8911 a7dd0415 Kostas Papadimitriou
                                        }
8912 a7dd0415 Kostas Papadimitriou
                                }
8913 a7dd0415 Kostas Papadimitriou
8914 a7dd0415 Kostas Papadimitriou
                                // Execute the complete function
8915 a7dd0415 Kostas Papadimitriou
                                // in the event that the complete function throws an exception
8916 a7dd0415 Kostas Papadimitriou
                                // we must ensure it won't be called twice. #5684
8917 a7dd0415 Kostas Papadimitriou
8918 a7dd0415 Kostas Papadimitriou
                                complete = options.complete;
8919 a7dd0415 Kostas Papadimitriou
                                if ( complete ) {
8920 a7dd0415 Kostas Papadimitriou
8921 a7dd0415 Kostas Papadimitriou
                                        options.complete = false;
8922 a7dd0415 Kostas Papadimitriou
                                        complete.call( elem );
8923 a7dd0415 Kostas Papadimitriou
                                }
8924 a7dd0415 Kostas Papadimitriou
                        }
8925 a7dd0415 Kostas Papadimitriou
8926 a7dd0415 Kostas Papadimitriou
                        return false;
8927 a7dd0415 Kostas Papadimitriou
8928 a7dd0415 Kostas Papadimitriou
                } else {
8929 a7dd0415 Kostas Papadimitriou
                        // classical easing cannot be used with an Infinity duration
8930 a7dd0415 Kostas Papadimitriou
                        if ( options.duration == Infinity ) {
8931 a7dd0415 Kostas Papadimitriou
                                this.now = t;
8932 a7dd0415 Kostas Papadimitriou
                        } else {
8933 a7dd0415 Kostas Papadimitriou
                                n = t - this.startTime;
8934 a7dd0415 Kostas Papadimitriou
                                this.state = n / options.duration;
8935 a7dd0415 Kostas Papadimitriou
8936 a7dd0415 Kostas Papadimitriou
                                // Perform the easing function, defaults to swing
8937 a7dd0415 Kostas Papadimitriou
                                this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
8938 a7dd0415 Kostas Papadimitriou
                                this.now = this.start + ( (this.end - this.start) * this.pos );
8939 a7dd0415 Kostas Papadimitriou
                        }
8940 a7dd0415 Kostas Papadimitriou
                        // Perform the next step of the animation
8941 a7dd0415 Kostas Papadimitriou
                        this.update();
8942 a7dd0415 Kostas Papadimitriou
                }
8943 a7dd0415 Kostas Papadimitriou
8944 a7dd0415 Kostas Papadimitriou
                return true;
8945 a7dd0415 Kostas Papadimitriou
        }
8946 a7dd0415 Kostas Papadimitriou
};
8947 a7dd0415 Kostas Papadimitriou
8948 a7dd0415 Kostas Papadimitriou
jQuery.extend( jQuery.fx, {
8949 a7dd0415 Kostas Papadimitriou
        tick: function() {
8950 a7dd0415 Kostas Papadimitriou
                var timer,
8951 a7dd0415 Kostas Papadimitriou
                        timers = jQuery.timers,
8952 a7dd0415 Kostas Papadimitriou
                        i = 0;
8953 a7dd0415 Kostas Papadimitriou
8954 a7dd0415 Kostas Papadimitriou
                for ( ; i < timers.length; i++ ) {
8955 a7dd0415 Kostas Papadimitriou
                        timer = timers[ i ];
8956 a7dd0415 Kostas Papadimitriou
                        // Checks the timer has not already been removed
8957 a7dd0415 Kostas Papadimitriou
                        if ( !timer() && timers[ i ] === timer ) {
8958 a7dd0415 Kostas Papadimitriou
                                timers.splice( i--, 1 );
8959 a7dd0415 Kostas Papadimitriou
                        }
8960 a7dd0415 Kostas Papadimitriou
                }
8961 a7dd0415 Kostas Papadimitriou
8962 a7dd0415 Kostas Papadimitriou
                if ( !timers.length ) {
8963 a7dd0415 Kostas Papadimitriou
                        jQuery.fx.stop();
8964 a7dd0415 Kostas Papadimitriou
                }
8965 a7dd0415 Kostas Papadimitriou
        },
8966 a7dd0415 Kostas Papadimitriou
8967 a7dd0415 Kostas Papadimitriou
        interval: 13,
8968 a7dd0415 Kostas Papadimitriou
8969 a7dd0415 Kostas Papadimitriou
        stop: function() {
8970 a7dd0415 Kostas Papadimitriou
                clearInterval( timerId );
8971 a7dd0415 Kostas Papadimitriou
                timerId = null;
8972 a7dd0415 Kostas Papadimitriou
        },
8973 a7dd0415 Kostas Papadimitriou
8974 a7dd0415 Kostas Papadimitriou
        speeds: {
8975 a7dd0415 Kostas Papadimitriou
                slow: 600,
8976 a7dd0415 Kostas Papadimitriou
                fast: 200,
8977 a7dd0415 Kostas Papadimitriou
                // Default speed
8978 a7dd0415 Kostas Papadimitriou
                _default: 400
8979 a7dd0415 Kostas Papadimitriou
        },
8980 a7dd0415 Kostas Papadimitriou
8981 a7dd0415 Kostas Papadimitriou
        step: {
8982 a7dd0415 Kostas Papadimitriou
                opacity: function( fx ) {
8983 a7dd0415 Kostas Papadimitriou
                        jQuery.style( fx.elem, "opacity", fx.now );
8984 a7dd0415 Kostas Papadimitriou
                },
8985 a7dd0415 Kostas Papadimitriou
8986 a7dd0415 Kostas Papadimitriou
                _default: function( fx ) {
8987 a7dd0415 Kostas Papadimitriou
                        if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
8988 a7dd0415 Kostas Papadimitriou
                                fx.elem.style[ fx.prop ] = fx.now + fx.unit;
8989 a7dd0415 Kostas Papadimitriou
                        } else {
8990 a7dd0415 Kostas Papadimitriou
                                fx.elem[ fx.prop ] = fx.now;
8991 a7dd0415 Kostas Papadimitriou
                        }
8992 a7dd0415 Kostas Papadimitriou
                }
8993 a7dd0415 Kostas Papadimitriou
        }
8994 a7dd0415 Kostas Papadimitriou
});
8995 a7dd0415 Kostas Papadimitriou
8996 18059f42 Kostas Papadimitriou
// Ensure props that can't be negative don't go there on undershoot easing
8997 18059f42 Kostas Papadimitriou
jQuery.each( fxAttrs.concat.apply( [], fxAttrs ), function( i, prop ) {
8998 18059f42 Kostas Papadimitriou
        // exclude marginTop, marginLeft, marginBottom and marginRight from this list
8999 18059f42 Kostas Papadimitriou
        if ( prop.indexOf( "margin" ) ) {
9000 18059f42 Kostas Papadimitriou
                jQuery.fx.step[ prop ] = function( fx ) {
9001 18059f42 Kostas Papadimitriou
                        jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );
9002 18059f42 Kostas Papadimitriou
                };
9003 18059f42 Kostas Papadimitriou
        }
9004 a7dd0415 Kostas Papadimitriou
});
9005 a7dd0415 Kostas Papadimitriou
9006 a7dd0415 Kostas Papadimitriou
if ( jQuery.expr && jQuery.expr.filters ) {
9007 a7dd0415 Kostas Papadimitriou
        jQuery.expr.filters.animated = function( elem ) {
9008 a7dd0415 Kostas Papadimitriou
                return jQuery.grep(jQuery.timers, function( fn ) {
9009 a7dd0415 Kostas Papadimitriou
                        return elem === fn.elem;
9010 a7dd0415 Kostas Papadimitriou
                }).length;
9011 a7dd0415 Kostas Papadimitriou
        };
9012 a7dd0415 Kostas Papadimitriou
}
9013 a7dd0415 Kostas Papadimitriou
9014 a7dd0415 Kostas Papadimitriou
// Try to restore the default display value of an element
9015 a7dd0415 Kostas Papadimitriou
function defaultDisplay( nodeName ) {
9016 a7dd0415 Kostas Papadimitriou
9017 a7dd0415 Kostas Papadimitriou
        if ( !elemdisplay[ nodeName ] ) {
9018 a7dd0415 Kostas Papadimitriou
9019 a7dd0415 Kostas Papadimitriou
                var body = document.body,
9020 a7dd0415 Kostas Papadimitriou
                        elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
9021 a7dd0415 Kostas Papadimitriou
                        display = elem.css( "display" );
9022 a7dd0415 Kostas Papadimitriou
                elem.remove();
9023 a7dd0415 Kostas Papadimitriou
9024 a7dd0415 Kostas Papadimitriou
                // If the simple way fails,
9025 a7dd0415 Kostas Papadimitriou
                // get element's real default display by attaching it to a temp iframe
9026 a7dd0415 Kostas Papadimitriou
                if ( display === "none" || display === "" ) {
9027 a7dd0415 Kostas Papadimitriou
                        // No iframe to use yet, so create it
9028 a7dd0415 Kostas Papadimitriou
                        if ( !iframe ) {
9029 a7dd0415 Kostas Papadimitriou
                                iframe = document.createElement( "iframe" );
9030 a7dd0415 Kostas Papadimitriou
                                iframe.frameBorder = iframe.width = iframe.height = 0;
9031 a7dd0415 Kostas Papadimitriou
                        }
9032 a7dd0415 Kostas Papadimitriou
9033 a7dd0415 Kostas Papadimitriou
                        body.appendChild( iframe );
9034 a7dd0415 Kostas Papadimitriou
9035 a7dd0415 Kostas Papadimitriou
                        // Create a cacheable copy of the iframe document on first call.
9036 a7dd0415 Kostas Papadimitriou
                        // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
9037 a7dd0415 Kostas Papadimitriou
                        // document to it; WebKit & Firefox won't allow reusing the iframe document.
9038 a7dd0415 Kostas Papadimitriou
                        if ( !iframeDoc || !iframe.createElement ) {
9039 a7dd0415 Kostas Papadimitriou
                                iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
9040 18059f42 Kostas Papadimitriou
                                iframeDoc.write( ( jQuery.support.boxModel ? "<!doctype html>" : "" ) + "<html><body>" );
9041 a7dd0415 Kostas Papadimitriou
                                iframeDoc.close();
9042 a7dd0415 Kostas Papadimitriou
                        }
9043 a7dd0415 Kostas Papadimitriou
9044 a7dd0415 Kostas Papadimitriou
                        elem = iframeDoc.createElement( nodeName );
9045 a7dd0415 Kostas Papadimitriou
9046 a7dd0415 Kostas Papadimitriou
                        iframeDoc.body.appendChild( elem );
9047 a7dd0415 Kostas Papadimitriou
9048 a7dd0415 Kostas Papadimitriou
                        display = jQuery.css( elem, "display" );
9049 a7dd0415 Kostas Papadimitriou
                        body.removeChild( iframe );
9050 a7dd0415 Kostas Papadimitriou
                }
9051 a7dd0415 Kostas Papadimitriou
9052 a7dd0415 Kostas Papadimitriou
                // Store the correct default display
9053 a7dd0415 Kostas Papadimitriou
                elemdisplay[ nodeName ] = display;
9054 a7dd0415 Kostas Papadimitriou
        }
9055 a7dd0415 Kostas Papadimitriou
9056 a7dd0415 Kostas Papadimitriou
        return elemdisplay[ nodeName ];
9057 a7dd0415 Kostas Papadimitriou
}
9058 a7dd0415 Kostas Papadimitriou
9059 a7dd0415 Kostas Papadimitriou
9060 a7dd0415 Kostas Papadimitriou
9061 a7dd0415 Kostas Papadimitriou
9062 18059f42 Kostas Papadimitriou
var getOffset,
9063 18059f42 Kostas Papadimitriou
        rtable = /^t(?:able|d|h)$/i,
9064 a7dd0415 Kostas Papadimitriou
        rroot = /^(?:body|html)$/i;
9065 a7dd0415 Kostas Papadimitriou
9066 a7dd0415 Kostas Papadimitriou
if ( "getBoundingClientRect" in document.documentElement ) {
9067 18059f42 Kostas Papadimitriou
        getOffset = function( elem, doc, docElem, box ) {
9068 a7dd0415 Kostas Papadimitriou
                try {
9069 a7dd0415 Kostas Papadimitriou
                        box = elem.getBoundingClientRect();
9070 a7dd0415 Kostas Papadimitriou
                } catch(e) {}
9071 a7dd0415 Kostas Papadimitriou
9072 a7dd0415 Kostas Papadimitriou
                // Make sure we're not dealing with a disconnected DOM node
9073 a7dd0415 Kostas Papadimitriou
                if ( !box || !jQuery.contains( docElem, elem ) ) {
9074 a7dd0415 Kostas Papadimitriou
                        return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
9075 a7dd0415 Kostas Papadimitriou
                }
9076 a7dd0415 Kostas Papadimitriou
9077 a7dd0415 Kostas Papadimitriou
                var body = doc.body,
9078 18059f42 Kostas Papadimitriou
                        win = getWindow( doc ),
9079 a7dd0415 Kostas Papadimitriou
                        clientTop  = docElem.clientTop  || body.clientTop  || 0,
9080 a7dd0415 Kostas Papadimitriou
                        clientLeft = docElem.clientLeft || body.clientLeft || 0,
9081 a7dd0415 Kostas Papadimitriou
                        scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
9082 a7dd0415 Kostas Papadimitriou
                        scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
9083 a7dd0415 Kostas Papadimitriou
                        top  = box.top  + scrollTop  - clientTop,
9084 a7dd0415 Kostas Papadimitriou
                        left = box.left + scrollLeft - clientLeft;
9085 a7dd0415 Kostas Papadimitriou
9086 a7dd0415 Kostas Papadimitriou
                return { top: top, left: left };
9087 a7dd0415 Kostas Papadimitriou
        };
9088 a7dd0415 Kostas Papadimitriou
9089 a7dd0415 Kostas Papadimitriou
} else {
9090 18059f42 Kostas Papadimitriou
        getOffset = function( elem, doc, docElem ) {
9091 a7dd0415 Kostas Papadimitriou
                var computedStyle,
9092 a7dd0415 Kostas Papadimitriou
                        offsetParent = elem.offsetParent,
9093 a7dd0415 Kostas Papadimitriou
                        prevOffsetParent = elem,
9094 a7dd0415 Kostas Papadimitriou
                        body = doc.body,
9095 a7dd0415 Kostas Papadimitriou
                        defaultView = doc.defaultView,
9096 a7dd0415 Kostas Papadimitriou
                        prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
9097 a7dd0415 Kostas Papadimitriou
                        top = elem.offsetTop,
9098 a7dd0415 Kostas Papadimitriou
                        left = elem.offsetLeft;
9099 a7dd0415 Kostas Papadimitriou
9100 a7dd0415 Kostas Papadimitriou
                while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
9101 a7dd0415 Kostas Papadimitriou
                        if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
9102 a7dd0415 Kostas Papadimitriou
                                break;
9103 a7dd0415 Kostas Papadimitriou
                        }
9104 a7dd0415 Kostas Papadimitriou
9105 a7dd0415 Kostas Papadimitriou
                        computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
9106 a7dd0415 Kostas Papadimitriou
                        top  -= elem.scrollTop;
9107 a7dd0415 Kostas Papadimitriou
                        left -= elem.scrollLeft;
9108 a7dd0415 Kostas Papadimitriou
9109 a7dd0415 Kostas Papadimitriou
                        if ( elem === offsetParent ) {
9110 a7dd0415 Kostas Papadimitriou
                                top  += elem.offsetTop;
9111 a7dd0415 Kostas Papadimitriou
                                left += elem.offsetLeft;
9112 a7dd0415 Kostas Papadimitriou
9113 a7dd0415 Kostas Papadimitriou
                                if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
9114 a7dd0415 Kostas Papadimitriou
                                        top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
9115 a7dd0415 Kostas Papadimitriou
                                        left += parseFloat( computedStyle.borderLeftWidth ) || 0;
9116 a7dd0415 Kostas Papadimitriou
                                }
9117 a7dd0415 Kostas Papadimitriou
9118 a7dd0415 Kostas Papadimitriou
                                prevOffsetParent = offsetParent;
9119 a7dd0415 Kostas Papadimitriou
                                offsetParent = elem.offsetParent;
9120 a7dd0415 Kostas Papadimitriou
                        }
9121 a7dd0415 Kostas Papadimitriou
9122 a7dd0415 Kostas Papadimitriou
                        if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
9123 a7dd0415 Kostas Papadimitriou
                                top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
9124 a7dd0415 Kostas Papadimitriou
                                left += parseFloat( computedStyle.borderLeftWidth ) || 0;
9125 a7dd0415 Kostas Papadimitriou
                        }
9126 a7dd0415 Kostas Papadimitriou
9127 a7dd0415 Kostas Papadimitriou
                        prevComputedStyle = computedStyle;
9128 a7dd0415 Kostas Papadimitriou
                }
9129 a7dd0415 Kostas Papadimitriou
9130 a7dd0415 Kostas Papadimitriou
                if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
9131 a7dd0415 Kostas Papadimitriou
                        top  += body.offsetTop;
9132 a7dd0415 Kostas Papadimitriou
                        left += body.offsetLeft;
9133 a7dd0415 Kostas Papadimitriou
                }
9134 a7dd0415 Kostas Papadimitriou
9135 a7dd0415 Kostas Papadimitriou
                if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
9136 a7dd0415 Kostas Papadimitriou
                        top  += Math.max( docElem.scrollTop, body.scrollTop );
9137 a7dd0415 Kostas Papadimitriou
                        left += Math.max( docElem.scrollLeft, body.scrollLeft );
9138 a7dd0415 Kostas Papadimitriou
                }
9139 a7dd0415 Kostas Papadimitriou
9140 a7dd0415 Kostas Papadimitriou
                return { top: top, left: left };
9141 a7dd0415 Kostas Papadimitriou
        };
9142 a7dd0415 Kostas Papadimitriou
}
9143 a7dd0415 Kostas Papadimitriou
9144 18059f42 Kostas Papadimitriou
jQuery.fn.offset = function( options ) {
9145 18059f42 Kostas Papadimitriou
        if ( arguments.length ) {
9146 18059f42 Kostas Papadimitriou
                return options === undefined ?
9147 18059f42 Kostas Papadimitriou
                        this :
9148 18059f42 Kostas Papadimitriou
                        this.each(function( i ) {
9149 18059f42 Kostas Papadimitriou
                                jQuery.offset.setOffset( this, options, i );
9150 18059f42 Kostas Papadimitriou
                        });
9151 18059f42 Kostas Papadimitriou
        }
9152 18059f42 Kostas Papadimitriou
9153 18059f42 Kostas Papadimitriou
        var elem = this[0],
9154 18059f42 Kostas Papadimitriou
                doc = elem && elem.ownerDocument;
9155 18059f42 Kostas Papadimitriou
9156 18059f42 Kostas Papadimitriou
        if ( !doc ) {
9157 18059f42 Kostas Papadimitriou
                return null;
9158 18059f42 Kostas Papadimitriou
        }
9159 18059f42 Kostas Papadimitriou
9160 18059f42 Kostas Papadimitriou
        if ( elem === doc.body ) {
9161 18059f42 Kostas Papadimitriou
                return jQuery.offset.bodyOffset( elem );
9162 18059f42 Kostas Papadimitriou
        }
9163 18059f42 Kostas Papadimitriou
9164 18059f42 Kostas Papadimitriou
        return getOffset( elem, doc, doc.documentElement );
9165 18059f42 Kostas Papadimitriou
};
9166 18059f42 Kostas Papadimitriou
9167 a7dd0415 Kostas Papadimitriou
jQuery.offset = {
9168 a7dd0415 Kostas Papadimitriou
9169 a7dd0415 Kostas Papadimitriou
        bodyOffset: function( body ) {
9170 a7dd0415 Kostas Papadimitriou
                var top = body.offsetTop,
9171 a7dd0415 Kostas Papadimitriou
                        left = body.offsetLeft;
9172 a7dd0415 Kostas Papadimitriou
9173 a7dd0415 Kostas Papadimitriou
                if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
9174 a7dd0415 Kostas Papadimitriou
                        top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
9175 a7dd0415 Kostas Papadimitriou
                        left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
9176 a7dd0415 Kostas Papadimitriou
                }
9177 a7dd0415 Kostas Papadimitriou
9178 a7dd0415 Kostas Papadimitriou
                return { top: top, left: left };
9179 a7dd0415 Kostas Papadimitriou
        },
9180 a7dd0415 Kostas Papadimitriou
9181 a7dd0415 Kostas Papadimitriou
        setOffset: function( elem, options, i ) {
9182 a7dd0415 Kostas Papadimitriou
                var position = jQuery.css( elem, "position" );
9183 a7dd0415 Kostas Papadimitriou
9184 a7dd0415 Kostas Papadimitriou
                // set position first, in-case top/left are set even on static elem
9185 a7dd0415 Kostas Papadimitriou
                if ( position === "static" ) {
9186 a7dd0415 Kostas Papadimitriou
                        elem.style.position = "relative";
9187 a7dd0415 Kostas Papadimitriou
                }
9188 a7dd0415 Kostas Papadimitriou
9189 a7dd0415 Kostas Papadimitriou
                var curElem = jQuery( elem ),
9190 a7dd0415 Kostas Papadimitriou
                        curOffset = curElem.offset(),
9191 a7dd0415 Kostas Papadimitriou
                        curCSSTop = jQuery.css( elem, "top" ),
9192 a7dd0415 Kostas Papadimitriou
                        curCSSLeft = jQuery.css( elem, "left" ),
9193 a7dd0415 Kostas Papadimitriou
                        calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
9194 a7dd0415 Kostas Papadimitriou
                        props = {}, curPosition = {}, curTop, curLeft;
9195 a7dd0415 Kostas Papadimitriou
9196 a7dd0415 Kostas Papadimitriou
                // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
9197 a7dd0415 Kostas Papadimitriou
                if ( calculatePosition ) {
9198 a7dd0415 Kostas Papadimitriou
                        curPosition = curElem.position();
9199 a7dd0415 Kostas Papadimitriou
                        curTop = curPosition.top;
9200 a7dd0415 Kostas Papadimitriou
                        curLeft = curPosition.left;
9201 a7dd0415 Kostas Papadimitriou
                } else {
9202 a7dd0415 Kostas Papadimitriou
                        curTop = parseFloat( curCSSTop ) || 0;
9203 a7dd0415 Kostas Papadimitriou
                        curLeft = parseFloat( curCSSLeft ) || 0;
9204 a7dd0415 Kostas Papadimitriou
                }
9205 a7dd0415 Kostas Papadimitriou
9206 a7dd0415 Kostas Papadimitriou
                if ( jQuery.isFunction( options ) ) {
9207 a7dd0415 Kostas Papadimitriou
                        options = options.call( elem, i, curOffset );
9208 a7dd0415 Kostas Papadimitriou
                }
9209 a7dd0415 Kostas Papadimitriou
9210 a7dd0415 Kostas Papadimitriou
                if ( options.top != null ) {
9211 a7dd0415 Kostas Papadimitriou
                        props.top = ( options.top - curOffset.top ) + curTop;
9212 a7dd0415 Kostas Papadimitriou
                }
9213 a7dd0415 Kostas Papadimitriou
                if ( options.left != null ) {
9214 a7dd0415 Kostas Papadimitriou
                        props.left = ( options.left - curOffset.left ) + curLeft;
9215 a7dd0415 Kostas Papadimitriou
                }
9216 a7dd0415 Kostas Papadimitriou
9217 a7dd0415 Kostas Papadimitriou
                if ( "using" in options ) {
9218 a7dd0415 Kostas Papadimitriou
                        options.using.call( elem, props );
9219 a7dd0415 Kostas Papadimitriou
                } else {
9220 a7dd0415 Kostas Papadimitriou
                        curElem.css( props );
9221 a7dd0415 Kostas Papadimitriou
                }
9222 a7dd0415 Kostas Papadimitriou
        }
9223 a7dd0415 Kostas Papadimitriou
};
9224 a7dd0415 Kostas Papadimitriou
9225 a7dd0415 Kostas Papadimitriou
9226 a7dd0415 Kostas Papadimitriou
jQuery.fn.extend({
9227 a7dd0415 Kostas Papadimitriou
9228 a7dd0415 Kostas Papadimitriou
        position: function() {
9229 a7dd0415 Kostas Papadimitriou
                if ( !this[0] ) {
9230 a7dd0415 Kostas Papadimitriou
                        return null;
9231 a7dd0415 Kostas Papadimitriou
                }
9232 a7dd0415 Kostas Papadimitriou
9233 a7dd0415 Kostas Papadimitriou
                var elem = this[0],
9234 a7dd0415 Kostas Papadimitriou
9235 a7dd0415 Kostas Papadimitriou
                // Get *real* offsetParent
9236 a7dd0415 Kostas Papadimitriou
                offsetParent = this.offsetParent(),
9237 a7dd0415 Kostas Papadimitriou
9238 a7dd0415 Kostas Papadimitriou
                // Get correct offsets
9239 a7dd0415 Kostas Papadimitriou
                offset       = this.offset(),
9240 a7dd0415 Kostas Papadimitriou
                parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
9241 a7dd0415 Kostas Papadimitriou
9242 a7dd0415 Kostas Papadimitriou
                // Subtract element margins
9243 a7dd0415 Kostas Papadimitriou
                // note: when an element has margin: auto the offsetLeft and marginLeft
9244 a7dd0415 Kostas Papadimitriou
                // are the same in Safari causing offset.left to incorrectly be 0
9245 a7dd0415 Kostas Papadimitriou
                offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
9246 a7dd0415 Kostas Papadimitriou
                offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
9247 a7dd0415 Kostas Papadimitriou
9248 a7dd0415 Kostas Papadimitriou
                // Add offsetParent borders
9249 a7dd0415 Kostas Papadimitriou
                parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
9250 a7dd0415 Kostas Papadimitriou
                parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
9251 a7dd0415 Kostas Papadimitriou
9252 a7dd0415 Kostas Papadimitriou
                // Subtract the two offsets
9253 a7dd0415 Kostas Papadimitriou
                return {
9254 a7dd0415 Kostas Papadimitriou
                        top:  offset.top  - parentOffset.top,
9255 a7dd0415 Kostas Papadimitriou
                        left: offset.left - parentOffset.left
9256 a7dd0415 Kostas Papadimitriou
                };
9257 a7dd0415 Kostas Papadimitriou
        },
9258 a7dd0415 Kostas Papadimitriou
9259 a7dd0415 Kostas Papadimitriou
        offsetParent: function() {
9260 a7dd0415 Kostas Papadimitriou
                return this.map(function() {
9261 a7dd0415 Kostas Papadimitriou
                        var offsetParent = this.offsetParent || document.body;
9262 a7dd0415 Kostas Papadimitriou
                        while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
9263 a7dd0415 Kostas Papadimitriou
                                offsetParent = offsetParent.offsetParent;
9264 a7dd0415 Kostas Papadimitriou
                        }
9265 a7dd0415 Kostas Papadimitriou
                        return offsetParent;
9266 a7dd0415 Kostas Papadimitriou
                });
9267 a7dd0415 Kostas Papadimitriou
        }
9268 a7dd0415 Kostas Papadimitriou
});
9269 a7dd0415 Kostas Papadimitriou
9270 a7dd0415 Kostas Papadimitriou
9271 a7dd0415 Kostas Papadimitriou
// Create scrollLeft and scrollTop methods
9272 18059f42 Kostas Papadimitriou
jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
9273 18059f42 Kostas Papadimitriou
        var top = /Y/.test( prop );
9274 a7dd0415 Kostas Papadimitriou
9275 a7dd0415 Kostas Papadimitriou
        jQuery.fn[ method ] = function( val ) {
9276 18059f42 Kostas Papadimitriou
                return jQuery.access( this, function( elem, method, val ) {
9277 18059f42 Kostas Papadimitriou
                        var win = getWindow( elem );
9278 a7dd0415 Kostas Papadimitriou
9279 18059f42 Kostas Papadimitriou
                        if ( val === undefined ) {
9280 18059f42 Kostas Papadimitriou
                                return win ? (prop in win) ? win[ prop ] :
9281 18059f42 Kostas Papadimitriou
                                        jQuery.support.boxModel && win.document.documentElement[ method ] ||
9282 18059f42 Kostas Papadimitriou
                                                win.document.body[ method ] :
9283 18059f42 Kostas Papadimitriou
                                        elem[ method ];
9284 a7dd0415 Kostas Papadimitriou
                        }
9285 a7dd0415 Kostas Papadimitriou
9286 a7dd0415 Kostas Papadimitriou
                        if ( win ) {
9287 a7dd0415 Kostas Papadimitriou
                                win.scrollTo(
9288 18059f42 Kostas Papadimitriou
                                        !top ? val : jQuery( win ).scrollLeft(),
9289 18059f42 Kostas Papadimitriou
                                         top ? val : jQuery( win ).scrollTop()
9290 a7dd0415 Kostas Papadimitriou
                                );
9291 a7dd0415 Kostas Papadimitriou
9292 a7dd0415 Kostas Papadimitriou
                        } else {
9293 18059f42 Kostas Papadimitriou
                                elem[ method ] = val;
9294 a7dd0415 Kostas Papadimitriou
                        }
9295 18059f42 Kostas Papadimitriou
                }, method, val, arguments.length, null );
9296 a7dd0415 Kostas Papadimitriou
        };
9297 a7dd0415 Kostas Papadimitriou
});
9298 a7dd0415 Kostas Papadimitriou
9299 a7dd0415 Kostas Papadimitriou
function getWindow( elem ) {
9300 a7dd0415 Kostas Papadimitriou
        return jQuery.isWindow( elem ) ?
9301 a7dd0415 Kostas Papadimitriou
                elem :
9302 a7dd0415 Kostas Papadimitriou
                elem.nodeType === 9 ?
9303 a7dd0415 Kostas Papadimitriou
                        elem.defaultView || elem.parentWindow :
9304 a7dd0415 Kostas Papadimitriou
                        false;
9305 a7dd0415 Kostas Papadimitriou
}
9306 a7dd0415 Kostas Papadimitriou
9307 a7dd0415 Kostas Papadimitriou
9308 a7dd0415 Kostas Papadimitriou
9309 a7dd0415 Kostas Papadimitriou
9310 a7dd0415 Kostas Papadimitriou
// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
9311 18059f42 Kostas Papadimitriou
jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
9312 18059f42 Kostas Papadimitriou
        var clientProp = "client" + name,
9313 18059f42 Kostas Papadimitriou
                scrollProp = "scroll" + name,
9314 18059f42 Kostas Papadimitriou
                offsetProp = "offset" + name;
9315 a7dd0415 Kostas Papadimitriou
9316 a7dd0415 Kostas Papadimitriou
        // innerHeight and innerWidth
9317 a7dd0415 Kostas Papadimitriou
        jQuery.fn[ "inner" + name ] = function() {
9318 a7dd0415 Kostas Papadimitriou
                var elem = this[0];
9319 a7dd0415 Kostas Papadimitriou
                return elem ?
9320 a7dd0415 Kostas Papadimitriou
                        elem.style ?
9321 a7dd0415 Kostas Papadimitriou
                        parseFloat( jQuery.css( elem, type, "padding" ) ) :
9322 a7dd0415 Kostas Papadimitriou
                        this[ type ]() :
9323 a7dd0415 Kostas Papadimitriou
                        null;
9324 a7dd0415 Kostas Papadimitriou
        };
9325 a7dd0415 Kostas Papadimitriou
9326 a7dd0415 Kostas Papadimitriou
        // outerHeight and outerWidth
9327 a7dd0415 Kostas Papadimitriou
        jQuery.fn[ "outer" + name ] = function( margin ) {
9328 a7dd0415 Kostas Papadimitriou
                var elem = this[0];
9329 a7dd0415 Kostas Papadimitriou
                return elem ?
9330 a7dd0415 Kostas Papadimitriou
                        elem.style ?
9331 a7dd0415 Kostas Papadimitriou
                        parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
9332 a7dd0415 Kostas Papadimitriou
                        this[ type ]() :
9333 a7dd0415 Kostas Papadimitriou
                        null;
9334 a7dd0415 Kostas Papadimitriou
        };
9335 a7dd0415 Kostas Papadimitriou
9336 18059f42 Kostas Papadimitriou
        jQuery.fn[ type ] = function( value ) {
9337 18059f42 Kostas Papadimitriou
                return jQuery.access( this, function( elem, type, value ) {
9338 18059f42 Kostas Papadimitriou
                        var doc, docElemProp, orig, ret;
9339 a7dd0415 Kostas Papadimitriou
9340 18059f42 Kostas Papadimitriou
                        if ( jQuery.isWindow( elem ) ) {
9341 18059f42 Kostas Papadimitriou
                                // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
9342 18059f42 Kostas Papadimitriou
                                doc = elem.document;
9343 18059f42 Kostas Papadimitriou
                                docElemProp = doc.documentElement[ clientProp ];
9344 18059f42 Kostas Papadimitriou
                                return jQuery.support.boxModel && docElemProp ||
9345 18059f42 Kostas Papadimitriou
                                        doc.body && doc.body[ clientProp ] || docElemProp;
9346 18059f42 Kostas Papadimitriou
                        }
9347 a7dd0415 Kostas Papadimitriou
9348 18059f42 Kostas Papadimitriou
                        // Get document width or height
9349 18059f42 Kostas Papadimitriou
                        if ( elem.nodeType === 9 ) {
9350 18059f42 Kostas Papadimitriou
                                // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
9351 18059f42 Kostas Papadimitriou
                                doc = elem.documentElement;
9352 a7dd0415 Kostas Papadimitriou
9353 18059f42 Kostas Papadimitriou
                                // when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height]
9354 18059f42 Kostas Papadimitriou
                                // so we can't use max, as it'll choose the incorrect offset[Width/Height]
9355 18059f42 Kostas Papadimitriou
                                // instead we use the correct client[Width/Height]
9356 18059f42 Kostas Papadimitriou
                                // support:IE6
9357 18059f42 Kostas Papadimitriou
                                if ( doc[ clientProp ] >= doc[ scrollProp ] ) {
9358 18059f42 Kostas Papadimitriou
                                        return doc[ clientProp ];
9359 18059f42 Kostas Papadimitriou
                                }
9360 18059f42 Kostas Papadimitriou
9361 18059f42 Kostas Papadimitriou
                                return Math.max(
9362 18059f42 Kostas Papadimitriou
                                        elem.body[ scrollProp ], doc[ scrollProp ],
9363 18059f42 Kostas Papadimitriou
                                        elem.body[ offsetProp ], doc[ offsetProp ]
9364 18059f42 Kostas Papadimitriou
                                );
9365 18059f42 Kostas Papadimitriou
                        }
9366 a7dd0415 Kostas Papadimitriou
9367 18059f42 Kostas Papadimitriou
                        // Get width or height on the element
9368 18059f42 Kostas Papadimitriou
                        if ( value === undefined ) {
9369 18059f42 Kostas Papadimitriou
                                orig = jQuery.css( elem, type );
9370 18059f42 Kostas Papadimitriou
                                ret = parseFloat( orig );
9371 18059f42 Kostas Papadimitriou
                                return jQuery.isNumeric( ret ) ? ret : orig;
9372 18059f42 Kostas Papadimitriou
                        }
9373 a7dd0415 Kostas Papadimitriou
9374 18059f42 Kostas Papadimitriou
                        // Set the width or height on the element
9375 18059f42 Kostas Papadimitriou
                        jQuery( elem ).css( type, value );
9376 18059f42 Kostas Papadimitriou
                }, type, value, arguments.length, null );
9377 a7dd0415 Kostas Papadimitriou
        };
9378 a7dd0415 Kostas Papadimitriou
});
9379 a7dd0415 Kostas Papadimitriou
9380 a7dd0415 Kostas Papadimitriou
9381 a7dd0415 Kostas Papadimitriou
9382 a7dd0415 Kostas Papadimitriou
9383 a7dd0415 Kostas Papadimitriou
// Expose jQuery to the global object
9384 a7dd0415 Kostas Papadimitriou
window.jQuery = window.$ = jQuery;
9385 a7dd0415 Kostas Papadimitriou
9386 a7dd0415 Kostas Papadimitriou
// Expose jQuery as an AMD module, but only for AMD loaders that
9387 a7dd0415 Kostas Papadimitriou
// understand the issues with loading multiple versions of jQuery
9388 a7dd0415 Kostas Papadimitriou
// in a page that all might call define(). The loader will indicate
9389 a7dd0415 Kostas Papadimitriou
// they have special allowances for multiple jQuery versions by
9390 a7dd0415 Kostas Papadimitriou
// specifying define.amd.jQuery = true. Register as a named module,
9391 a7dd0415 Kostas Papadimitriou
// since jQuery can be concatenated with other files that may use define,
9392 a7dd0415 Kostas Papadimitriou
// but not use a proper concatenation script that understands anonymous
9393 a7dd0415 Kostas Papadimitriou
// AMD modules. A named AMD is safest and most robust way to register.
9394 a7dd0415 Kostas Papadimitriou
// Lowercase jquery is used because AMD module names are derived from
9395 a7dd0415 Kostas Papadimitriou
// file names, and jQuery is normally delivered in a lowercase file name.
9396 a7dd0415 Kostas Papadimitriou
// Do this after creating the global so that if an AMD module wants to call
9397 a7dd0415 Kostas Papadimitriou
// noConflict to hide this version of jQuery, it will work.
9398 a7dd0415 Kostas Papadimitriou
if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
9399 a7dd0415 Kostas Papadimitriou
        define( "jquery", [], function () { return jQuery; } );
9400 a7dd0415 Kostas Papadimitriou
}
9401 a7dd0415 Kostas Papadimitriou
9402 a7dd0415 Kostas Papadimitriou
9403 a7dd0415 Kostas Papadimitriou
9404 a7dd0415 Kostas Papadimitriou
})( window );