﻿(function(){if(typeof Spry=="undefined"||!Spry.Utils||!Spry.$$){alert("SpryDOMEffects.js requires SpryDOMUtils.js");return}if(!Spry.Effect)Spry.Effect={};Spry.Effect.Animator=function(a){Spry.Effect.Animator.Notifier.call(this);this.animatorID=Spry.Effect.Animator.nextID++;this.dropFrames=true;this.fps=60;this.duration=500;this.timer=0;this.startTime=0;this.currentFrame=0;this.easeFunc=Spry.Effect.Animator.defaultEaseFunc;this.stopped=false;Spry.Effect.Animator.copyProps(this,a);this.interval=1e3/this.fps;this.numFrames=this.duration/1e3*this.fps;if(this.onComplete){var b=this;this.addObserver({onAnimationComplete:function(){b.onComplete()}})}};Spry.Effect.Animator.nextID=1;Spry.Effect.Animator.copyProps=function(b,a){if(a)for(prop in a)b[prop]=a[prop];return b};Spry.Effect.Animator.getElement=function(a){if(arguments.length>1){for(var b=0,c=[],d=arguments.length;b<d;b++)c.push(Spry.Effect.Animator.getElement(arguments[b]));return c}if(typeof a=="string")a=document.getElementById(a);return a};Spry.Effect.Animator.defaultEaseFunc=function(a,d,c,b){a/=b;return d+(2-a)*a*c};Spry.Effect.Animator.Notifier=function(){this.observers=[];this.suppressNotifications=0};Spry.Effect.Animator.Notifier.prototype.addObserver=function(a){if(!a)return;var c=this.observers.length;for(var b=0;b<c;b++)if(this.observers[b]==a)return;this.observers[c]=a};Spry.Effect.Animator.Notifier.prototype.removeObserver=function(b){if(!b)return;for(var a=0;a<this.observers.length;a++)if(this.observers[a]==b){this.observers.splice(a,1);break}};Spry.Effect.Animator.Notifier.prototype.notifyObservers=function(b,d){if(!b)return;if(!this.suppressNotifications){var e=this.observers.length;for(var c=0;c<e;c++){var a=this.observers[c];if(a)if(typeof a=="function")a(b,this,d);else if(a[b])a[b](this,d)}}};Spry.Effect.Animator.Notifier.prototype.enableNotifications=function(){if(--this.suppressNotifications<0){this.suppressNotifications=0;Spry.Debug.reportError("Unbalanced enableNotifications() call!\n")}};Spry.Effect.Animator.Notifier.prototype.disableNotifications=function(){++this.suppressNotifications};Spry.Effect.Animator.prototype=new Spry.Effect.Animator.Notifier;Spry.Effect.Animator.prototype.constructor=Spry.Effect.Animator;Spry.Effect.Animator.prototype.start=function(){this.stopped=false;this.currentFrame=0;this.startTime=(new Date).getTime();this.notifyObservers("onAnimationStart");var a=this;this.timer=setTimeout(function(){a.onStepAnimation()},this.interval)};Spry.Effect.Animator.prototype.stop=function(){if(this.timer)clearTimeout(this.timer);this.timer=0;this.stopped=true;this.notifyObservers("onAnimationStopped")};Spry.Effect.Animator.prototype.onStepAnimation=function(){var a={};if(this.dropFrames){a.duration=this.duration;a.elapsed=(new Date).getTime()-this.startTime;if(a.elapsed>a.duration)a.elapsed=a.duration}else{a.duration=this.numFrames;a.elapsed=++this.currentFrame}a.easingConst=this.easeFunc(a.elapsed,0,1,a.duration);this.notifyObservers("onPreDraw",a);this.draw(a.elapsed,a.duration,a.easingConst);this.notifyObservers("onPostDraw",a);if(!this.stopped)if(a.elapsed<a.duration){var b=this;this.timer=setTimeout(function(){b.onStepAnimation()},this.interval)}else{this.stop();this.notifyObservers("onAnimationComplete")}};Spry.Effect.Animator.prototype.draw=function(c,b,a){debug.log("elapsed: "+c+" -- duration: "+b+" -- easingConst: "+a)};Spry.Effect.CSSAnimator=function(a,b,c){this.animationSets=[];Spry.Effect.Animator.call(this,c);this.add(a,b)};Spry.Effect.CSSAnimator.prototype=new Spry.Effect.Animator;Spry.Effect.CSSAnimator.prototype.constructor=Spry.Effect.CSSAnimator;Spry.Effect.CSSAnimator.prototype.add=function(c,i){c=Spry.$$(c);if(c.length<1)return;var g={elements:c,cssProps:[]};this.animationSets.push(g);var d=Spry.Utils.styleStringToObject(i);for(var a in d){var b={},h=d[a];b.value=new Number(h.replace(/[^-\d\.]+/g,""));b.units=h.replace(/[-\d+\.]/g,"");d[a]=b}for(var e=0;e<c.length;e++){var b=g.cssProps[e]={};for(var a in d){var f=Spry.Effect.CSSAnimator.stylePropFuncs[a];if(!f)f=Spry.Effect.CSSAnimator.stylePropFuncs["default"];b[a]={};b[a].from=new Number(f.get(c[e],a).replace(/[^-\d\.]+/g,""));b[a].to=d[a].value;b[a].distance=b[a].to-b[a].from;b[a].units=d[a].units}}};Spry.Effect.CSSAnimator.prototype.start=function(){for(var c=0;c<this.animationSets.length;c++){var e=this.animationSets[c],d=e.elements,g=e.cssProps;for(var a=0;a<d.length;a++){var f=d[a],b=f.spryCSSAnimatorProps;if(!b)b=f.spryCSSAnimatorProps={};var h=g[a];for(var i in h)b[i]=this.animatorID}}return Spry.Effect.Animator.prototype.start.call(this)};Spry.Effect.CSSAnimator.prototype.stop=function(){for(var b=0;b<this.animationSets.length;b++){var e=this.animationSets[b],c=e.elements,g=e.cssProps;for(var a=0;a<c.length;a++){var h=c[a],i=g[a],d=h.spryCSSAnimatorProps;for(var f in i)if(d[f]==this.animatorID)delete d[f]}}return Spry.Effect.Animator.prototype.stop.call(this)};Spry.Effect.CSSAnimator.prototype.draw=function(m,k,i){for(var f=0;f<this.animationSets.length;f++){var h=this.animationSets[f],g=h.elements,j=h.cssProps;for(var d=0;d<g.length;d++){var e=g[d],l=e.spryCSSAnimatorProps,b=j[d];for(var a in b)if(l[a]==this.animatorID){var c=Spry.Effect.CSSAnimator.stylePropFuncs[a];if(!c)c=Spry.Effect.CSSAnimator.stylePropFuncs["default"];if(m>k)c.set(e,a,b[a].to+b[a].units);else c.set(e,a,b[a].from+b[a].distance*i+b[a].units)}}}};Spry.Effect.CSSAnimator.stylePropFuncs={};Spry.Effect.CSSAnimator.stylePropFuncs["default"]={"get":function(b,a){return b.style[a]},"set":function(b,a,c){b.style[a]=c}};Spry.Effect.CSSAnimator.stylePropFuncs["opacity"]={"get":function(a){var b=1;if(a.style.opacity)b=a.style.opacity;else if(a.style.filter){var c=a.style.filter.replace(/.*alpha\(opacity=(\d+)\).*/,"$1");if(c)b=parseInt(c)/100}return b+""},"set":function(a,c,b){a.style.opacity=""+b;a.style.filter="alpha(opacity="+b*100+")"}};Spry.$$.Results.defaultEaseFunc=function(a,d,c,b){a/=b;return d+(2-a)*a*c};Spry.$$.Results.animatePropertyTo=function(e,g,i){var a={interval:10,duration:1e3,onComplete:null,transition:Spry.$$.Results.defaultEaseFunc};Spry.Effect.Animator.copyProps(a,i);var b=[];for(var d=0;d<this.length;d++){var c=b[d]={};c.ele=this[d];c.from=c.ele[e];c.distance=g-c.from}var h=(new Date).getTime(),f=function(){var i=(new Date).getTime()-h;if(i>a.duration){for(var c=0;c<b.length;c++)b[c].ele[e]=g;if(a.onComplete)a.onComplete()}else{for(var c=0;c<b.length;c++){var d=b[c];d.ele[e]=a.transition(i,d.from,d.distance,a.duration)}setTimeout(f,a.interval)}};setTimeout(f,a.interval);return this};Spry.$$.Results.animateStyleTo=function(a,b){var c=new Spry.Effect.CSSAnimator(this,a,b);c.start();return this}})()
