PluginProbe
RSVP and Event Management / 1.3.0
RSVP and Event Management v1.3.0
trunk 0.5.0 0.6.0 0.7.0 0.8.0 0.9.0 0.9.5 1.0.0 1.1.0 1.2.0 1.2.1 1.3.0 1.3.1 1.3.2 1.5.0 1.6.0 1.6.1 1.6.2 1.6.5 1.7.0 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 All 136 releases
rsvp / jquery-ui-1.7.2.custom / development-bundle / ui / effects.core.js

effects.core.js in RSVP and Event Management 1.3.0, at jquery-ui-1.7.2.custom/development-bundle/ui/effects.core.js

546 lines 19.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /*
2 * jQuery UI Effects 1.7.2
3 *
4 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
5 * Dual licensed under the MIT (MIT-LICENSE.txt)
6 * and GPL (GPL-LICENSE.txt) licenses.
7 *
8 * http://docs.jquery.com/UI/Effects/
9 */
10 ;jQuery.effects || (function($) {
11
12 $.effects = {
13 version: "1.7.2",
14
15 // Saves a set of properties in a data storage
16 save: function(element, set) {
17 for(var i=0; i < set.length; i++) {
18 if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]);
19 }
20 },
21
22 // Restores a set of previously saved properties from a data storage
23 restore: function(element, set) {
24 for(var i=0; i < set.length; i++) {
25 if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i]));
26 }
27 },
28
29 setMode: function(el, mode) {
30 if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle
31 return mode;
32 },
33
34 getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value
35 // this should be a little more flexible in the future to handle a string & hash
36 var y, x;
37 switch (origin[0]) {
38 case 'top': y = 0; break;
39 case 'middle': y = 0.5; break;
40 case 'bottom': y = 1; break;
41 default: y = origin[0] / original.height;
42 };
43 switch (origin[1]) {
44 case 'left': x = 0; break;
45 case 'center': x = 0.5; break;
46 case 'right': x = 1; break;
47 default: x = origin[1] / original.width;
48 };
49 return {x: x, y: y};
50 },
51
52 // Wraps the element around a wrapper that copies position properties
53 createWrapper: function(element) {
54
55 //if the element is already wrapped, return it
56 if (element.parent().is('.ui-effects-wrapper'))
57 return element.parent();
58
59 //Cache width,height and float properties of the element, and create a wrapper around it
60 var props = { width: element.outerWidth(true), height: element.outerHeight(true), 'float': element.css('float') };
61 element.wrap('<div class="ui-effects-wrapper" style="font-size:100%;background:transparent;border:none;margin:0;padding:0"></div>');
62 var wrapper = element.parent();
63
64 //Transfer the positioning of the element to the wrapper
65 if (element.css('position') == 'static') {
66 wrapper.css({ position: 'relative' });
67 element.css({ position: 'relative'} );
68 } else {
69 var top = element.css('top'); if(isNaN(parseInt(top,10))) top = 'auto';
70 var left = element.css('left'); if(isNaN(parseInt(left,10))) left = 'auto';
71 wrapper.css({ position: element.css('position'), top: top, left: left, zIndex: element.css('z-index') }).show();
72 element.css({position: 'relative', top: 0, left: 0 });
73 }
74
75 wrapper.css(props);
76 return wrapper;
77 },
78
79 removeWrapper: function(element) {
80 if (element.parent().is('.ui-effects-wrapper'))
81 return element.parent().replaceWith(element);
82 return element;
83 },
84
85 setTransition: function(element, list, factor, value) {
86 value = value || {};
87 $.each(list, function(i, x){
88 unit = element.cssUnit(x);
89 if (unit[0] > 0) value[x] = unit[0] * factor + unit[1];
90 });
91 return value;
92 },
93
94 //Base function to animate from one class to another in a seamless transition
95 animateClass: function(value, duration, easing, callback) {
96
97 var cb = (typeof easing == "function" ? easing : (callback ? callback : null));
98 var ea = (typeof easing == "string" ? easing : null);
99
100 return this.each(function() {
101
102 var offset = {}; var that = $(this); var oldStyleAttr = that.attr("style") || '';
103 if(typeof oldStyleAttr == 'object') oldStyleAttr = oldStyleAttr["cssText"]; /* Stupidly in IE, style is a object.. */
104 if(value.toggle) { that.hasClass(value.toggle) ? value.remove = value.toggle : value.add = value.toggle; }
105
106 //Let's get a style offset
107 var oldStyle = $.extend({}, (document.defaultView ? document.defaultView.getComputedStyle(this,null) : this.currentStyle));
108 if(value.add) that.addClass(value.add); if(value.remove) that.removeClass(value.remove);
109 var newStyle = $.extend({}, (document.defaultView ? document.defaultView.getComputedStyle(this,null) : this.currentStyle));
110 if(value.add) that.removeClass(value.add); if(value.remove) that.addClass(value.remove);
111
112 // The main function to form the object for animation
113 for(var n in newStyle) {
114 if( typeof newStyle[n] != "function" && newStyle[n] /* No functions and null properties */
115 && n.indexOf("Moz") == -1 && n.indexOf("length") == -1 /* No mozilla spezific render properties. */
116 && newStyle[n] != oldStyle[n] /* Only values that have changed are used for the animation */
117 && (n.match(/color/i) || (!n.match(/color/i) && !isNaN(parseInt(newStyle[n],10)))) /* Only things that can be parsed to integers or colors */
118 && (oldStyle.position != "static" || (oldStyle.position == "static" && !n.match(/left|top|bottom|right/))) /* No need for positions when dealing with static positions */
119 ) offset[n] = newStyle[n];
120 }
121
122 that.animate(offset, duration, ea, function() { // Animate the newly constructed offset object
123 // Change style attribute back to original. For stupid IE, we need to clear the damn object.
124 if(typeof $(this).attr("style") == 'object') { $(this).attr("style")["cssText"] = ""; $(this).attr("style")["cssText"] = oldStyleAttr; } else $(this).attr("style", oldStyleAttr);
125 if(value.add) $(this).addClass(value.add); if(value.remove) $(this).removeClass(value.remove);
126 if(cb) cb.apply(this, arguments);
127 });
128
129 });
130 }
131 };
132
133
134 function _normalizeArguments(a, m) {
135
136 var o = a[1] && a[1].constructor == Object ? a[1] : {}; if(m) o.mode = m;
137 var speed = a[1] && a[1].constructor != Object ? a[1] : (o.duration ? o.duration : a[2]); //either comes from options.duration or the secon/third argument
138 speed = $.fx.off ? 0 : typeof speed === "number" ? speed : $.fx.speeds[speed] || $.fx.speeds._default;
139 var callback = o.callback || ( $.isFunction(a[1]) && a[1] ) || ( $.isFunction(a[2]) && a[2] ) || ( $.isFunction(a[3]) && a[3] );
140
141 return [a[0], o, speed, callback];
142
143 }
144
145 //Extend the methods of jQuery
146 $.fn.extend({
147
148 //Save old methods
149 _show: $.fn.show,
150 _hide: $.fn.hide,
151 __toggle: $.fn.toggle,
152 _addClass: $.fn.addClass,
153 _removeClass: $.fn.removeClass,
154 _toggleClass: $.fn.toggleClass,
155
156 // New effect methods
157 effect: function(fx, options, speed, callback) {
158 return $.effects[fx] ? $.effects[fx].call(this, {method: fx, options: options || {}, duration: speed, callback: callback }) : null;
159 },
160
161 show: function() {
162 if(!arguments[0] || (arguments[0].constructor == Number || (/(slow|normal|fast)/).test(arguments[0])))
163 return this._show.apply(this, arguments);
164 else {
165 return this.effect.apply(this, _normalizeArguments(arguments, 'show'));
166 }
167 },
168
169 hide: function() {
170 if(!arguments[0] || (arguments[0].constructor == Number || (/(slow|normal|fast)/).test(arguments[0])))
171 return this._hide.apply(this, arguments);
172 else {
173 return this.effect.apply(this, _normalizeArguments(arguments, 'hide'));
174 }
175 },
176
177 toggle: function(){
178 if(!arguments[0] ||
179 (arguments[0].constructor == Number || (/(slow|normal|fast)/).test(arguments[0])) ||
180 ($.isFunction(arguments[0]) || typeof arguments[0] == 'boolean')) {
181 return this.__toggle.apply(this, arguments);
182 } else {
183 return this.effect.apply(this, _normalizeArguments(arguments, 'toggle'));
184 }
185 },
186
187 addClass: function(classNames, speed, easing, callback) {
188 return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames);
189 },
190 removeClass: function(classNames,speed,easing,callback) {
191 return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames);
192 },
193 toggleClass: function(classNames,speed,easing,callback) {
194 return ( (typeof speed !== "boolean") && speed ) ? $.effects.animateClass.apply(this, [{ toggle: classNames },speed,easing,callback]) : this._toggleClass(classNames, speed);
195 },
196 morph: function(remove,add,speed,easing,callback) {
197 return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]);
198 },
199 switchClass: function() {
200 return this.morph.apply(this, arguments);
201 },
202
203 // helper functions
204 cssUnit: function(key) {
205 var style = this.css(key), val = [];
206 $.each( ['em','px','%','pt'], function(i, unit){
207 if(style.indexOf(unit) > 0)
208 val = [parseFloat(style), unit];
209 });
210 return val;
211 }
212 });
213
214 /*
215 * jQuery Color Animations
216 * Copyright 2007 John Resig
217 * Released under the MIT and GPL licenses.
218 */
219
220 // We override the animation for all of these color styles
221 $.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i,attr){
222 $.fx.step[attr] = function(fx) {
223 if ( fx.state == 0 ) {
224 fx.start = getColor( fx.elem, attr );
225 fx.end = getRGB( fx.end );
226 }
227
228 fx.elem.style[attr] = "rgb(" + [
229 Math.max(Math.min( parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0],10), 255), 0),
230 Math.max(Math.min( parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1],10), 255), 0),
231 Math.max(Math.min( parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2],10), 255), 0)
232 ].join(",") + ")";
233 };
234 });
235
236 // Color Conversion functions from highlightFade
237 // By Blair Mitchelmore
238 // http://jquery.offput.ca/highlightFade/
239
240 // Parse strings looking for color tuples [255,255,255]
241 function getRGB(color) {
242 var result;
243
244 // Check if we're already dealing with an array of colors
245 if ( color && color.constructor == Array && color.length == 3 )
246 return color;
247
248 // Look for rgb(num,num,num)
249 if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color))
250 return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)];
251
252 // Look for rgb(num%,num%,num%)
253 if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color))
254 return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55];
255
256 // Look for #a0b1c2
257 if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color))
258 return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)];
259
260 // Look for #fff
261 if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color))
262 return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)];
263
264 // Look for rgba(0, 0, 0, 0) == transparent in Safari 3
265 if (result = /rgba\(0, 0, 0, 0\)/.exec(color))
266 return colors['transparent'];
267
268 // Otherwise, we're most likely dealing with a named color
269 return colors[$.trim(color).toLowerCase()];
270 }
271
272 function getColor(elem, attr) {
273 var color;
274
275 do {
276 color = $.curCSS(elem, attr);
277
278 // Keep going until we find an element that has color, or we hit the body
279 if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") )
280 break;
281
282 attr = "backgroundColor";
283 } while ( elem = elem.parentNode );
284
285 return getRGB(color);
286 };
287
288 // Some named colors to work with
289 // From Interface by Stefan Petre
290 // http://interface.eyecon.ro/
291
292 var colors = {
293 aqua:[0,255,255],
294 azure:[240,255,255],
295 beige:[245,245,220],
296 black:[0,0,0],
297 blue:[0,0,255],
298 brown:[165,42,42],
299 cyan:[0,255,255],
300 darkblue:[0,0,139],
301 darkcyan:[0,139,139],
302 darkgrey:[169,169,169],
303 darkgreen:[0,100,0],
304 darkkhaki:[189,183,107],
305 darkmagenta:[139,0,139],
306 darkolivegreen:[85,107,47],
307 darkorange:[255,140,0],
308 darkorchid:[153,50,204],
309 darkred:[139,0,0],
310 darksalmon:[233,150,122],
311 darkviolet:[148,0,211],
312 fuchsia:[255,0,255],
313 gold:[255,215,0],
314 green:[0,128,0],
315 indigo:[75,0,130],
316 khaki:[240,230,140],
317 lightblue:[173,216,230],
318 lightcyan:[224,255,255],
319 lightgreen:[144,238,144],
320 lightgrey:[211,211,211],
321 lightpink:[255,182,193],
322 lightyellow:[255,255,224],
323 lime:[0,255,0],
324 magenta:[255,0,255],
325 maroon:[128,0,0],
326 navy:[0,0,128],
327 olive:[128,128,0],
328 orange:[255,165,0],
329 pink:[255,192,203],
330 purple:[128,0,128],
331 violet:[128,0,128],
332 red:[255,0,0],
333 silver:[192,192,192],
334 white:[255,255,255],
335 yellow:[255,255,0],
336 transparent: [255,255,255]
337 };
338
339 /*
340 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
341 *
342 * Uses the built in easing capabilities added In jQuery 1.1
343 * to offer multiple easing options
344 *
345 * TERMS OF USE - jQuery Easing
346 *
347 * Open source under the BSD License.
348 *
349 * Copyright 2008 George McGinley Smith
350 * All rights reserved.
351 *
352 * Redistribution and use in source and binary forms, with or without modification,
353 * are permitted provided that the following conditions are met:
354 *
355 * Redistributions of source code must retain the above copyright notice, this list of
356 * conditions and the following disclaimer.
357 * Redistributions in binary form must reproduce the above copyright notice, this list
358 * of conditions and the following disclaimer in the documentation and/or other materials
359 * provided with the distribution.
360 *
361 * Neither the name of the author nor the names of contributors may be used to endorse
362 * or promote products derived from this software without specific prior written permission.
363 *
364 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
365 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
366 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
367 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
368 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
369 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
370 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
371 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
372 * OF THE POSSIBILITY OF SUCH DAMAGE.
373 *
374 */
375
376 // t: current time, b: begInnIng value, c: change In value, d: duration
377 $.easing.jswing = $.easing.swing;
378
379 $.extend($.easing,
380 {
381 def: 'easeOutQuad',
382 swing: function (x, t, b, c, d) {
383 //alert($.easing.default);
384 return $.easing[$.easing.def](x, t, b, c, d);
385 },
386 easeInQuad: function (x, t, b, c, d) {
387 return c*(t/=d)*t + b;
388 },
389 easeOutQuad: function (x, t, b, c, d) {
390 return -c *(t/=d)*(t-2) + b;
391 },
392 easeInOutQuad: function (x, t, b, c, d) {
393 if ((t/=d/2) < 1) return c/2*t*t + b;
394 return -c/2 * ((--t)*(t-2) - 1) + b;
395 },
396 easeInCubic: function (x, t, b, c, d) {
397 return c*(t/=d)*t*t + b;
398 },
399 easeOutCubic: function (x, t, b, c, d) {
400 return c*((t=t/d-1)*t*t + 1) + b;
401 },
402 easeInOutCubic: function (x, t, b, c, d) {
403 if ((t/=d/2) < 1) return c/2*t*t*t + b;
404 return c/2*((t-=2)*t*t + 2) + b;
405 },
406 easeInQuart: function (x, t, b, c, d) {
407 return c*(t/=d)*t*t*t + b;
408 },
409 easeOutQuart: function (x, t, b, c, d) {
410 return -c * ((t=t/d-1)*t*t*t - 1) + b;
411 },
412 easeInOutQuart: function (x, t, b, c, d) {
413 if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
414 return -c/2 * ((t-=2)*t*t*t - 2) + b;
415 },
416 easeInQuint: function (x, t, b, c, d) {
417 return c*(t/=d)*t*t*t*t + b;
418 },
419 easeOutQuint: function (x, t, b, c, d) {
420 return c*((t=t/d-1)*t*t*t*t + 1) + b;
421 },
422 easeInOutQuint: function (x, t, b, c, d) {
423 if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
424 return c/2*((t-=2)*t*t*t*t + 2) + b;
425 },
426 easeInSine: function (x, t, b, c, d) {
427 return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
428 },
429 easeOutSine: function (x, t, b, c, d) {
430 return c * Math.sin(t/d * (Math.PI/2)) + b;
431 },
432 easeInOutSine: function (x, t, b, c, d) {
433 return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
434 },
435 easeInExpo: function (x, t, b, c, d) {
436 return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
437 },
438 easeOutExpo: function (x, t, b, c, d) {
439 return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
440 },
441 easeInOutExpo: function (x, t, b, c, d) {
442 if (t==0) return b;
443 if (t==d) return b+c;
444 if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
445 return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
446 },
447 easeInCirc: function (x, t, b, c, d) {
448 return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
449 },
450 easeOutCirc: function (x, t, b, c, d) {
451 return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
452 },
453 easeInOutCirc: function (x, t, b, c, d) {
454 if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
455 return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
456 },
457 easeInElastic: function (x, t, b, c, d) {
458 var s=1.70158;var p=0;var a=c;
459 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
460 if (a < Math.abs(c)) { a=c; var s=p/4; }
461 else var s = p/(2*Math.PI) * Math.asin (c/a);
462 return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
463 },
464 easeOutElastic: function (x, t, b, c, d) {
465 var s=1.70158;var p=0;var a=c;
466 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
467 if (a < Math.abs(c)) { a=c; var s=p/4; }
468 else var s = p/(2*Math.PI) * Math.asin (c/a);
469 return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
470 },
471 easeInOutElastic: function (x, t, b, c, d) {
472 var s=1.70158;var p=0;var a=c;
473 if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
474 if (a < Math.abs(c)) { a=c; var s=p/4; }
475 else var s = p/(2*Math.PI) * Math.asin (c/a);
476 if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
477 return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
478 },
479 easeInBack: function (x, t, b, c, d, s) {
480 if (s == undefined) s = 1.70158;
481 return c*(t/=d)*t*((s+1)*t - s) + b;
482 },
483 easeOutBack: function (x, t, b, c, d, s) {
484 if (s == undefined) s = 1.70158;
485 return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
486 },
487 easeInOutBack: function (x, t, b, c, d, s) {
488 if (s == undefined) s = 1.70158;
489 if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
490 return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
491 },
492 easeInBounce: function (x, t, b, c, d) {
493 return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b;
494 },
495 easeOutBounce: function (x, t, b, c, d) {
496 if ((t/=d) < (1/2.75)) {
497 return c*(7.5625*t*t) + b;
498 } else if (t < (2/2.75)) {
499 return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
500 } else if (t < (2.5/2.75)) {
501 return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
502 } else {
503 return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
504 }
505 },
506 easeInOutBounce: function (x, t, b, c, d) {
507 if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
508 return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
509 }
510 });
511
512 /*
513 *
514 * TERMS OF USE - EASING EQUATIONS
515 *
516 * Open source under the BSD License.
517 *
518 * Copyright 2001 Robert Penner
519 * All rights reserved.
520 *
521 * Redistribution and use in source and binary forms, with or without modification,
522 * are permitted provided that the following conditions are met:
523 *
524 * Redistributions of source code must retain the above copyright notice, this list of
525 * conditions and the following disclaimer.
526 * Redistributions in binary form must reproduce the above copyright notice, this list
527 * of conditions and the following disclaimer in the documentation and/or other materials
528 * provided with the distribution.
529 *
530 * Neither the name of the author nor the names of contributors may be used to endorse
531 * or promote products derived from this software without specific prior written permission.
532 *
533 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
534 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
535 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
536 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
537 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
538 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
539 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
540 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
541 * OF THE POSSIBILITY OF SUCH DAMAGE.
542 *
543 */
544
545 })(jQuery);
546