diff -r c84f8401d36e -r 9578d3ddce17 web/res/metadataplayer/test/interface 1.2/source/ifx.js --- a/web/res/metadataplayer/test/interface 1.2/source/ifx.js Wed Apr 27 15:40:01 2011 +0200 +++ b/web/res/metadataplayer/test/interface 1.2/source/ifx.js Wed Apr 27 18:54:31 2011 +0200 @@ -1,490 +1,490 @@ -/** - * Interface Elements for jQuery - * FX - * - * http://interface.eyecon.ro - * - * Copyright (c) 2006 Stefan Petre - * Dual licensed under the MIT (MIT-LICENSE.txt) - * and GPL (GPL-LICENSE.txt) licenses. - * - * - */ - -/** - * Validates elements that can be animated - */ -jQuery.fxCheckTag = function(e) -{ - if (/^tr$|^td$|^tbody$|^caption$|^thead$|^tfoot$|^col$|^colgroup$|^th$|^body$|^header$|^script$|^frame$|^frameset$|^option$|^optgroup$|^meta$/i.test(e.nodeName) ) - return false; - else - return true; -}; - -/** - * Destroy the wrapper used for some animations - */ -jQuery.fx.destroyWrapper = function(e, old) -{ - var c = e.firstChild; - var cs = c.style; - cs.position = old.position; - cs.marginTop = old.margins.t; - cs.marginLeft = old.margins.l; - cs.marginBottom = old.margins.b; - cs.marginRight = old.margins.r; - cs.top = old.top + 'px'; - cs.left = old.left + 'px'; - e.parentNode.insertBefore(c, e); - e.parentNode.removeChild(e); -}; - -/** - * Builds a wrapper used for some animations - */ -jQuery.fx.buildWrapper = function(e) -{ - if (!jQuery.fxCheckTag(e)) - return false; - var t = jQuery(e); - var es = e.style; - var restoreStyle = false; - - if (t.css('display') == 'none') { - oldVisibility = t.css('visibility'); - t.css('visibility', 'hidden').show(); - restoreStyle = true; - } - var oldStyle = {}; - oldStyle.position = t.css('position'); - oldStyle.sizes = jQuery.iUtil.getSize(e); - oldStyle.margins = jQuery.iUtil.getMargins(e); - - var oldFloat = e.currentStyle ? e.currentStyle.styleFloat : t.css('float'); - oldStyle.top = parseInt(t.css('top'))||0; - oldStyle.left = parseInt(t.css('left'))||0; - var wid = 'w_' + parseInt(Math.random() * 10000); - var wr = document.createElement(/^img$|^br$|^input$|^hr$|^select$|^textarea$|^object$|^iframe$|^button$|^form$|^table$|^ul$|^dl$|^ol$/i.test(e.nodeName) ? 'div' : e.nodeName); - jQuery.attr(wr,'id', wid); - var wrapEl = jQuery(wr).addClass('fxWrapper'); - var wrs = wr.style; - var top = 0; - var left = 0; - if (oldStyle.position == 'relative' || oldStyle.position == 'absolute'){ - top = oldStyle.top; - left = oldStyle.left; - } - - wrs.top = top + 'px'; - wrs.left = left + 'px'; - wrs.position = oldStyle.position != 'relative' && oldStyle.position != 'absolute' ? 'relative' : oldStyle.position; - wrs.height = oldStyle.sizes.hb + 'px'; - wrs.width = oldStyle.sizes.wb + 'px'; - wrs.marginTop = oldStyle.margins.t; - wrs.marginRight = oldStyle.margins.r; - wrs.marginBottom = oldStyle.margins.b; - wrs.marginLeft = oldStyle.margins.l; - wrs.overflow = 'hidden'; - if (jQuery.browser.msie) { - wrs.styleFloat = oldFloat; - } else { - wrs.cssFloat = oldFloat; - } - if (jQuery.browser == "msie") { - es.filter = "alpha(opacity=" + 0.999*100 + ")"; - } - es.opacity = 0.999; - //t.wrap(wr); - e.parentNode.insertBefore(wr, e); - wr.appendChild(e); - es.marginTop = '0px'; - es.marginRight = '0px'; - es.marginBottom = '0px'; - es.marginLeft = '0px'; - es.position = 'absolute'; - es.listStyle = 'none'; - es.top = '0px'; - es.left = '0px'; - if (restoreStyle) { - t.hide(); - es.visibility = oldVisibility; - } - return {oldStyle:oldStyle, wrapper:jQuery(wr)}; -}; - -/** - * named colors - */ -jQuery.fx.namedColors = { - aqua:[0,255,255], - azure:[240,255,255], - beige:[245,245,220], - black:[0,0,0], - blue:[0,0,255], - brown:[165,42,42], - cyan:[0,255,255], - darkblue:[0,0,139], - darkcyan:[0,139,139], - darkgrey:[169,169,169], - darkgreen:[0,100,0], - darkkhaki:[189,183,107], - darkmagenta:[139,0,139], - darkolivegreen:[85,107,47], - darkorange:[255,140,0], - darkorchid:[153,50,204], - darkred:[139,0,0], - darksalmon:[233,150,122], - darkviolet:[148,0,211], - fuchsia:[255,0,255], - gold:[255,215,0], - green:[0,128,0], - indigo:[75,0,130], - khaki:[240,230,140], - lightblue:[173,216,230], - lightcyan:[224,255,255], - lightgreen:[144,238,144], - lightgrey:[211,211,211], - lightpink:[255,182,193], - lightyellow:[255,255,224], - lime:[0,255,0], - magenta:[255,0,255], - maroon:[128,0,0], - navy:[0,0,128], - olive:[128,128,0], - orange:[255,165,0], - pink:[255,192,203], - purple:[128,0,128], - red:[255,0,0], - silver:[192,192,192], - white:[255,255,255], - yellow:[255,255,0] -}; - -/** - * parses a color to an object for reg, green and blue - */ -jQuery.fx.parseColor = function(color, notColor) -{ - if (jQuery.fx.namedColors[color]) - return { - r: jQuery.fx.namedColors[color][0], - g: jQuery.fx.namedColors[color][1], - b: jQuery.fx.namedColors[color][2] - }; - else if (result = /^rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)$/.exec(color)) - return { - r: parseInt(result[1]), - g: parseInt(result[2]), - b: parseInt(result[3]) - }; - else if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)$/.exec(color)) - return { - r: parseFloat(result[1])*2.55, - g: parseFloat(result[2])*2.55, - b: parseFloat(result[3])*2.55 - }; - else if (result = /^#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])$/.exec(color)) - return { - r: parseInt("0x"+ result[1] + result[1]), - g: parseInt("0x" + result[2] + result[2]), - b: parseInt("0x" + result[3] + result[3]) - }; - else if (result = /^#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})$/.exec(color)) - return { - r: parseInt("0x" + result[1]), - g: parseInt("0x" + result[2]), - b: parseInt("0x" + result[3]) - }; - else - return notColor == true ? false : {r: 255, g: 255, b: 255}; -}; -/** - * CSS rules that can be animated - */ -jQuery.fx.cssProps = { - borderBottomWidth:1, - borderLeftWidth:1, - borderRightWidth:1, - borderTopWidth:1, - bottom:1, - fontSize:1, - height:1, - left:1, - letterSpacing:1, - lineHeight:1, - marginBottom:1, - marginLeft:1, - marginRight:1, - marginTop:1, - maxHeight:1, - maxWidth:1, - minHeight:1, - minWidth:1, - opacity:1, - outlineOffset:1, - outlineWidth:1, - paddingBottom:1, - paddingLeft:1, - paddingRight:1, - paddingTop:1, - right:1, - textIndent:1, - top:1, - width:1, - zIndex:1 -}; -/** - * CSS color rules that can be animated - */ -jQuery.fx.colorCssProps = { - backgroundColor:1, - borderBottomColor:1, - borderLeftColor:1, - borderRightColor:1, - borderTopColor:1, - color:1, - outlineColor:1 -}; - -jQuery.fx.cssSides = ['Top', 'Right', 'Bottom', 'Left']; -jQuery.fx.cssSidesEnd = { - 'borderWidth': ['border', 'Width'], - 'borderColor': ['border', 'Color'], - 'margin': ['margin', ''], - 'padding': ['padding', ''] -}; - -/** - * Overwrite animation to use new FX function - */ -jQuery.fn.extend({ - - animate: function( prop, speed, easing, callback ) { - return this.queue(function(){ - var opt = jQuery.speed(speed, easing, callback); - var e = new jQuery.fxe( this, opt, prop ); - - }); - }, - pause: function(speed, callback) { - return this.queue(function(){ - var opt = jQuery.speed(speed, callback); - var e = new jQuery.pause( this, opt ); - }); - }, - stop : function(step) { - return this.each(function(){ - if (this.animationHandler) - jQuery.stopAnim(this, step); - - }); - }, - stopAll : function(step) { - return this.each(function(){ - if (this.animationHandler) - jQuery.stopAnim(this, step); - if ( this.queue && this.queue['fx'] ) - this.queue.fx = []; - }); - } -}); -/** - * Improved FXC function that aniamtes collection of properties per timer. Accepts inline styles and class names to animate - */ -jQuery.extend({ - pause: function(elem, options) - { - var z = this, values; - z.step = function() - { - if ( jQuery.isFunction( options.complete ) ) - options.complete.apply( elem ); - }; - z.timer=setInterval(function(){z.step();},options.duration); - elem.animationHandler = z; - }, - easing : { - linear: function(p, n, firstNum, delta, duration) { - return ((-Math.cos(p*Math.PI)/2) + 0.5) * delta + firstNum; - } - }, - fxe: function( elem, options, prop ){ - var z = this, values; - - // The styles - var y = elem.style; - var oldOverflow = jQuery.css(elem, "overflow"); - var oldDisplay= jQuery.css(elem, "display"); - var props = {}; - z.startTime = (new Date()).getTime(); - options.easing = options.easing && jQuery.easing[options.easing] ? options.easing : 'linear'; - - z.getValues = function(tp, vp) - { - if (jQuery.fx.cssProps[tp]) { - if (vp == 'show' || vp == 'hide' || vp == 'toggle') { - if ( !elem.orig ) elem.orig = {}; - var r = parseFloat( jQuery.curCSS(elem, tp) ); - elem.orig[tp] = r && r > -10000 ? r : (parseFloat( jQuery.css(elem,tp) )||0); - vp = vp == 'toggle' ? ( oldDisplay == 'none' ? 'show' : 'hide') : vp; - options[vp] = true; - props[tp] = vp == 'show' ? [0, elem.orig[tp]] : [elem.orig[tp], 0]; - if (tp != 'opacity') - y[tp] = props[tp][0] + (tp != 'zIndex' && tp != 'fontWeight' ? 'px':''); - else - jQuery.attr(y, "opacity", props[tp][0]); - } else { - props[tp] = [parseFloat( jQuery.curCSS(elem, tp) ), parseFloat(vp)||0]; - } - } else if (jQuery.fx.colorCssProps[tp]) - props[tp] = [jQuery.fx.parseColor(jQuery.curCSS(elem, tp)), jQuery.fx.parseColor(vp)]; - else if(/^margin$|padding$|border$|borderColor$|borderWidth$/i.test(tp)) { - var m = vp.replace(/\s+/g, ' ').replace(/rgb\s*\(\s*/g,'rgb(').replace(/\s*,\s*/g,',').replace(/\s*\)/g,')').match(/([^\s]+)/g); - switch(tp){ - case 'margin': - case 'padding': - case 'borderWidth': - case 'borderColor': - m[3] = m[3]||m[1]||m[0]; - m[2] = m[2]||m[0]; - m[1] = m[1]||m[0]; - for(var i = 0; i < jQuery.fx.cssSides.length; i++) { - var nmp = jQuery.fx.cssSidesEnd[tp][0] + jQuery.fx.cssSides[i] + jQuery.fx.cssSidesEnd[tp][1]; - props[nmp] = tp == 'borderColor' ? - [jQuery.fx.parseColor(jQuery.curCSS(elem, nmp)), jQuery.fx.parseColor(m[i])] - : [parseFloat( jQuery.curCSS(elem, nmp) ), parseFloat(m[i])]; - } - break; - case 'border': - for(var i = 0; i< m.length; i++) { - var floatVal = parseFloat(m[i]); - var sideEnd = !isNaN(floatVal) ? 'Width' : (!/transparent|none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset/i.test(m[i]) ? 'Color' : false); - if (sideEnd) { - for(var j = 0; j < jQuery.fx.cssSides.length; j++) { - nmp = 'border' + jQuery.fx.cssSides[j] + sideEnd; - props[nmp] = sideEnd == 'Color' ? - [jQuery.fx.parseColor(jQuery.curCSS(elem, nmp)), jQuery.fx.parseColor(m[i])] - : [parseFloat( jQuery.curCSS(elem, nmp) ), floatVal]; - } - } else { - y['borderStyle'] = m[i]; - } - } - break; - } - } else { - y[tp] = vp; - } - return false; - }; - - for(p in prop) { - if (p == 'style') { - var newStyles = jQuery.parseStyle(prop[p]); - for (np in newStyles) { - this.getValues(np, newStyles[np]); - } - } else if (p == 'className') { - if (document.styleSheets) - for (var i=0; i options.duration + z.startTime) { - clearInterval(z.timer); - z.timer = null; - for (p in props) { - if ( p == "opacity" ) - jQuery.attr(y, "opacity", props[p][1]); - else if (typeof props[p][1] == 'object') - y[p] = 'rgb(' + props[p][1].r +',' + props[p][1].g +',' + props[p][1].b +')'; - else - y[p] = props[p][1] + (p != 'zIndex' && p != 'fontWeight' ? 'px':''); - } - if ( options.hide || options.show ) - for ( var p in elem.orig ) - if (p == "opacity") - jQuery.attr(y, p, elem.orig[p]); - else - y[p] = ""; - y.display = options.hide ? 'none' : (oldDisplay !='none' ? oldDisplay : 'block'); - y.overflow = oldOverflow; - elem.animationHandler = null; - if ( jQuery.isFunction( options.complete ) ) - options.complete.apply( elem ); - } else { - var n = t - this.startTime; - var pr = n / options.duration; - for (p in props) { - if (typeof props[p][1] == 'object') { - y[p] = 'rgb(' - + parseInt(jQuery.easing[options.easing](pr, n, props[p][0].r, (props[p][1].r-props[p][0].r), options.duration)) - + ',' - + parseInt(jQuery.easing[options.easing](pr, n, props[p][0].g, (props[p][1].g-props[p][0].g), options.duration)) - + ',' - + parseInt(jQuery.easing[options.easing](pr, n, props[p][0].b, (props[p][1].b-props[p][0].b), options.duration)) - +')'; - } else { - var pValue = jQuery.easing[options.easing](pr, n, props[p][0], (props[p][1]-props[p][0]), options.duration); - if ( p == "opacity" ) - jQuery.attr(y, "opacity", pValue); - else - y[p] = pValue + (p != 'zIndex' && p != 'fontWeight' ? 'px':''); - } - } - - } - }; - z.timer=setInterval(function(){z.step();},13); - elem.animationHandler = z; - }, - stopAnim: function(elem, step) - { - if (step) - elem.animationHandler.startTime -= 100000000; - else { - window.clearInterval(elem.animationHandler.timer); - elem.animationHandler = null; - jQuery.dequeue(elem, "fx"); - } - } -} -); - -jQuery.parseStyle = function(styles) { - var newStyles = {}; - if (typeof styles == 'string') { - styles = styles.toLowerCase().split(';'); - for(var i=0; i< styles.length; i++){ - rule = styles[i].split(':'); - if (rule.length == 2) { - newStyles[jQuery.trim(rule[0].replace(/\-(\w)/g,function(m,c){return c.toUpperCase();}))] = jQuery.trim(rule[1]); - } - } - } - return newStyles; +/** + * Interface Elements for jQuery + * FX + * + * http://interface.eyecon.ro + * + * Copyright (c) 2006 Stefan Petre + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * + */ + +/** + * Validates elements that can be animated + */ +jQuery.fxCheckTag = function(e) +{ + if (/^tr$|^td$|^tbody$|^caption$|^thead$|^tfoot$|^col$|^colgroup$|^th$|^body$|^header$|^script$|^frame$|^frameset$|^option$|^optgroup$|^meta$/i.test(e.nodeName) ) + return false; + else + return true; +}; + +/** + * Destroy the wrapper used for some animations + */ +jQuery.fx.destroyWrapper = function(e, old) +{ + var c = e.firstChild; + var cs = c.style; + cs.position = old.position; + cs.marginTop = old.margins.t; + cs.marginLeft = old.margins.l; + cs.marginBottom = old.margins.b; + cs.marginRight = old.margins.r; + cs.top = old.top + 'px'; + cs.left = old.left + 'px'; + e.parentNode.insertBefore(c, e); + e.parentNode.removeChild(e); +}; + +/** + * Builds a wrapper used for some animations + */ +jQuery.fx.buildWrapper = function(e) +{ + if (!jQuery.fxCheckTag(e)) + return false; + var t = jQuery(e); + var es = e.style; + var restoreStyle = false; + + if (t.css('display') == 'none') { + oldVisibility = t.css('visibility'); + t.css('visibility', 'hidden').show(); + restoreStyle = true; + } + var oldStyle = {}; + oldStyle.position = t.css('position'); + oldStyle.sizes = jQuery.iUtil.getSize(e); + oldStyle.margins = jQuery.iUtil.getMargins(e); + + var oldFloat = e.currentStyle ? e.currentStyle.styleFloat : t.css('float'); + oldStyle.top = parseInt(t.css('top'))||0; + oldStyle.left = parseInt(t.css('left'))||0; + var wid = 'w_' + parseInt(Math.random() * 10000); + var wr = document.createElement(/^img$|^br$|^input$|^hr$|^select$|^textarea$|^object$|^iframe$|^button$|^form$|^table$|^ul$|^dl$|^ol$/i.test(e.nodeName) ? 'div' : e.nodeName); + jQuery.attr(wr,'id', wid); + var wrapEl = jQuery(wr).addClass('fxWrapper'); + var wrs = wr.style; + var top = 0; + var left = 0; + if (oldStyle.position == 'relative' || oldStyle.position == 'absolute'){ + top = oldStyle.top; + left = oldStyle.left; + } + + wrs.top = top + 'px'; + wrs.left = left + 'px'; + wrs.position = oldStyle.position != 'relative' && oldStyle.position != 'absolute' ? 'relative' : oldStyle.position; + wrs.height = oldStyle.sizes.hb + 'px'; + wrs.width = oldStyle.sizes.wb + 'px'; + wrs.marginTop = oldStyle.margins.t; + wrs.marginRight = oldStyle.margins.r; + wrs.marginBottom = oldStyle.margins.b; + wrs.marginLeft = oldStyle.margins.l; + wrs.overflow = 'hidden'; + if (jQuery.browser.msie) { + wrs.styleFloat = oldFloat; + } else { + wrs.cssFloat = oldFloat; + } + if (jQuery.browser == "msie") { + es.filter = "alpha(opacity=" + 0.999*100 + ")"; + } + es.opacity = 0.999; + //t.wrap(wr); + e.parentNode.insertBefore(wr, e); + wr.appendChild(e); + es.marginTop = '0px'; + es.marginRight = '0px'; + es.marginBottom = '0px'; + es.marginLeft = '0px'; + es.position = 'absolute'; + es.listStyle = 'none'; + es.top = '0px'; + es.left = '0px'; + if (restoreStyle) { + t.hide(); + es.visibility = oldVisibility; + } + return {oldStyle:oldStyle, wrapper:jQuery(wr)}; +}; + +/** + * named colors + */ +jQuery.fx.namedColors = { + aqua:[0,255,255], + azure:[240,255,255], + beige:[245,245,220], + black:[0,0,0], + blue:[0,0,255], + brown:[165,42,42], + cyan:[0,255,255], + darkblue:[0,0,139], + darkcyan:[0,139,139], + darkgrey:[169,169,169], + darkgreen:[0,100,0], + darkkhaki:[189,183,107], + darkmagenta:[139,0,139], + darkolivegreen:[85,107,47], + darkorange:[255,140,0], + darkorchid:[153,50,204], + darkred:[139,0,0], + darksalmon:[233,150,122], + darkviolet:[148,0,211], + fuchsia:[255,0,255], + gold:[255,215,0], + green:[0,128,0], + indigo:[75,0,130], + khaki:[240,230,140], + lightblue:[173,216,230], + lightcyan:[224,255,255], + lightgreen:[144,238,144], + lightgrey:[211,211,211], + lightpink:[255,182,193], + lightyellow:[255,255,224], + lime:[0,255,0], + magenta:[255,0,255], + maroon:[128,0,0], + navy:[0,0,128], + olive:[128,128,0], + orange:[255,165,0], + pink:[255,192,203], + purple:[128,0,128], + red:[255,0,0], + silver:[192,192,192], + white:[255,255,255], + yellow:[255,255,0] +}; + +/** + * parses a color to an object for reg, green and blue + */ +jQuery.fx.parseColor = function(color, notColor) +{ + if (jQuery.fx.namedColors[color]) + return { + r: jQuery.fx.namedColors[color][0], + g: jQuery.fx.namedColors[color][1], + b: jQuery.fx.namedColors[color][2] + }; + else if (result = /^rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)$/.exec(color)) + return { + r: parseInt(result[1]), + g: parseInt(result[2]), + b: parseInt(result[3]) + }; + else if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)$/.exec(color)) + return { + r: parseFloat(result[1])*2.55, + g: parseFloat(result[2])*2.55, + b: parseFloat(result[3])*2.55 + }; + else if (result = /^#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])$/.exec(color)) + return { + r: parseInt("0x"+ result[1] + result[1]), + g: parseInt("0x" + result[2] + result[2]), + b: parseInt("0x" + result[3] + result[3]) + }; + else if (result = /^#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})$/.exec(color)) + return { + r: parseInt("0x" + result[1]), + g: parseInt("0x" + result[2]), + b: parseInt("0x" + result[3]) + }; + else + return notColor == true ? false : {r: 255, g: 255, b: 255}; +}; +/** + * CSS rules that can be animated + */ +jQuery.fx.cssProps = { + borderBottomWidth:1, + borderLeftWidth:1, + borderRightWidth:1, + borderTopWidth:1, + bottom:1, + fontSize:1, + height:1, + left:1, + letterSpacing:1, + lineHeight:1, + marginBottom:1, + marginLeft:1, + marginRight:1, + marginTop:1, + maxHeight:1, + maxWidth:1, + minHeight:1, + minWidth:1, + opacity:1, + outlineOffset:1, + outlineWidth:1, + paddingBottom:1, + paddingLeft:1, + paddingRight:1, + paddingTop:1, + right:1, + textIndent:1, + top:1, + width:1, + zIndex:1 +}; +/** + * CSS color rules that can be animated + */ +jQuery.fx.colorCssProps = { + backgroundColor:1, + borderBottomColor:1, + borderLeftColor:1, + borderRightColor:1, + borderTopColor:1, + color:1, + outlineColor:1 +}; + +jQuery.fx.cssSides = ['Top', 'Right', 'Bottom', 'Left']; +jQuery.fx.cssSidesEnd = { + 'borderWidth': ['border', 'Width'], + 'borderColor': ['border', 'Color'], + 'margin': ['margin', ''], + 'padding': ['padding', ''] +}; + +/** + * Overwrite animation to use new FX function + */ +jQuery.fn.extend({ + + animate: function( prop, speed, easing, callback ) { + return this.queue(function(){ + var opt = jQuery.speed(speed, easing, callback); + var e = new jQuery.fxe( this, opt, prop ); + + }); + }, + pause: function(speed, callback) { + return this.queue(function(){ + var opt = jQuery.speed(speed, callback); + var e = new jQuery.pause( this, opt ); + }); + }, + stop : function(step) { + return this.each(function(){ + if (this.animationHandler) + jQuery.stopAnim(this, step); + + }); + }, + stopAll : function(step) { + return this.each(function(){ + if (this.animationHandler) + jQuery.stopAnim(this, step); + if ( this.queue && this.queue['fx'] ) + this.queue.fx = []; + }); + } +}); +/** + * Improved FXC function that aniamtes collection of properties per timer. Accepts inline styles and class names to animate + */ +jQuery.extend({ + pause: function(elem, options) + { + var z = this, values; + z.step = function() + { + if ( jQuery.isFunction( options.complete ) ) + options.complete.apply( elem ); + }; + z.timer=setInterval(function(){z.step();},options.duration); + elem.animationHandler = z; + }, + easing : { + linear: function(p, n, firstNum, delta, duration) { + return ((-Math.cos(p*Math.PI)/2) + 0.5) * delta + firstNum; + } + }, + fxe: function( elem, options, prop ){ + var z = this, values; + + // The styles + var y = elem.style; + var oldOverflow = jQuery.css(elem, "overflow"); + var oldDisplay= jQuery.css(elem, "display"); + var props = {}; + z.startTime = (new Date()).getTime(); + options.easing = options.easing && jQuery.easing[options.easing] ? options.easing : 'linear'; + + z.getValues = function(tp, vp) + { + if (jQuery.fx.cssProps[tp]) { + if (vp == 'show' || vp == 'hide' || vp == 'toggle') { + if ( !elem.orig ) elem.orig = {}; + var r = parseFloat( jQuery.curCSS(elem, tp) ); + elem.orig[tp] = r && r > -10000 ? r : (parseFloat( jQuery.css(elem,tp) )||0); + vp = vp == 'toggle' ? ( oldDisplay == 'none' ? 'show' : 'hide') : vp; + options[vp] = true; + props[tp] = vp == 'show' ? [0, elem.orig[tp]] : [elem.orig[tp], 0]; + if (tp != 'opacity') + y[tp] = props[tp][0] + (tp != 'zIndex' && tp != 'fontWeight' ? 'px':''); + else + jQuery.attr(y, "opacity", props[tp][0]); + } else { + props[tp] = [parseFloat( jQuery.curCSS(elem, tp) ), parseFloat(vp)||0]; + } + } else if (jQuery.fx.colorCssProps[tp]) + props[tp] = [jQuery.fx.parseColor(jQuery.curCSS(elem, tp)), jQuery.fx.parseColor(vp)]; + else if(/^margin$|padding$|border$|borderColor$|borderWidth$/i.test(tp)) { + var m = vp.replace(/\s+/g, ' ').replace(/rgb\s*\(\s*/g,'rgb(').replace(/\s*,\s*/g,',').replace(/\s*\)/g,')').match(/([^\s]+)/g); + switch(tp){ + case 'margin': + case 'padding': + case 'borderWidth': + case 'borderColor': + m[3] = m[3]||m[1]||m[0]; + m[2] = m[2]||m[0]; + m[1] = m[1]||m[0]; + for(var i = 0; i < jQuery.fx.cssSides.length; i++) { + var nmp = jQuery.fx.cssSidesEnd[tp][0] + jQuery.fx.cssSides[i] + jQuery.fx.cssSidesEnd[tp][1]; + props[nmp] = tp == 'borderColor' ? + [jQuery.fx.parseColor(jQuery.curCSS(elem, nmp)), jQuery.fx.parseColor(m[i])] + : [parseFloat( jQuery.curCSS(elem, nmp) ), parseFloat(m[i])]; + } + break; + case 'border': + for(var i = 0; i< m.length; i++) { + var floatVal = parseFloat(m[i]); + var sideEnd = !isNaN(floatVal) ? 'Width' : (!/transparent|none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset/i.test(m[i]) ? 'Color' : false); + if (sideEnd) { + for(var j = 0; j < jQuery.fx.cssSides.length; j++) { + nmp = 'border' + jQuery.fx.cssSides[j] + sideEnd; + props[nmp] = sideEnd == 'Color' ? + [jQuery.fx.parseColor(jQuery.curCSS(elem, nmp)), jQuery.fx.parseColor(m[i])] + : [parseFloat( jQuery.curCSS(elem, nmp) ), floatVal]; + } + } else { + y['borderStyle'] = m[i]; + } + } + break; + } + } else { + y[tp] = vp; + } + return false; + }; + + for(p in prop) { + if (p == 'style') { + var newStyles = jQuery.parseStyle(prop[p]); + for (np in newStyles) { + this.getValues(np, newStyles[np]); + } + } else if (p == 'className') { + if (document.styleSheets) + for (var i=0; i options.duration + z.startTime) { + clearInterval(z.timer); + z.timer = null; + for (p in props) { + if ( p == "opacity" ) + jQuery.attr(y, "opacity", props[p][1]); + else if (typeof props[p][1] == 'object') + y[p] = 'rgb(' + props[p][1].r +',' + props[p][1].g +',' + props[p][1].b +')'; + else + y[p] = props[p][1] + (p != 'zIndex' && p != 'fontWeight' ? 'px':''); + } + if ( options.hide || options.show ) + for ( var p in elem.orig ) + if (p == "opacity") + jQuery.attr(y, p, elem.orig[p]); + else + y[p] = ""; + y.display = options.hide ? 'none' : (oldDisplay !='none' ? oldDisplay : 'block'); + y.overflow = oldOverflow; + elem.animationHandler = null; + if ( jQuery.isFunction( options.complete ) ) + options.complete.apply( elem ); + } else { + var n = t - this.startTime; + var pr = n / options.duration; + for (p in props) { + if (typeof props[p][1] == 'object') { + y[p] = 'rgb(' + + parseInt(jQuery.easing[options.easing](pr, n, props[p][0].r, (props[p][1].r-props[p][0].r), options.duration)) + + ',' + + parseInt(jQuery.easing[options.easing](pr, n, props[p][0].g, (props[p][1].g-props[p][0].g), options.duration)) + + ',' + + parseInt(jQuery.easing[options.easing](pr, n, props[p][0].b, (props[p][1].b-props[p][0].b), options.duration)) + +')'; + } else { + var pValue = jQuery.easing[options.easing](pr, n, props[p][0], (props[p][1]-props[p][0]), options.duration); + if ( p == "opacity" ) + jQuery.attr(y, "opacity", pValue); + else + y[p] = pValue + (p != 'zIndex' && p != 'fontWeight' ? 'px':''); + } + } + + } + }; + z.timer=setInterval(function(){z.step();},13); + elem.animationHandler = z; + }, + stopAnim: function(elem, step) + { + if (step) + elem.animationHandler.startTime -= 100000000; + else { + window.clearInterval(elem.animationHandler.timer); + elem.animationHandler = null; + jQuery.dequeue(elem, "fx"); + } + } +} +); + +jQuery.parseStyle = function(styles) { + var newStyles = {}; + if (typeof styles == 'string') { + styles = styles.toLowerCase().split(';'); + for(var i=0; i< styles.length; i++){ + rule = styles[i].split(':'); + if (rule.length == 2) { + newStyles[jQuery.trim(rule[0].replace(/\-(\w)/g,function(m,c){return c.toUpperCase();}))] = jQuery.trim(rule[1]); + } + } + } + return newStyles; }; \ No newline at end of file