/**
Script: Slideshow.KenBurns.js
	Slideshow.KenBurns - KenBurns extension for Slideshow, includes zooming and panning effects.

License:
	MIT-style license.

Copyright:
	Copyright (c) 2008 [Aeron Glemann](http://www.electricprism.com/aeron/).
	
Dependencies:
	Slideshow.
*/
Slideshow.KenBurns=new Class({Extends:Slideshow,options:{pan:[100,100],zoom:[50,50]},initialize:function(el,data,options){options.overlap=true;options.resize=true;["pan","zoom"].each(function(p){if($chk(this[p])){if($type(this[p])!="array"){this[p]=[this[p],this[p]];}this[p].map(function(n){return(n.toInt()||0).limit(0,100);});}},options);this.parent(el,data,options);},_show:function(fast){if(!this.image.retrieve("morph")){["a","b"].each(function(image){this[image].set("tween",{duration:this.options.duration,link:"cancel",onStart:this._start.bind(this),onComplete:this._complete.bind(this),property:"opacity"}).get("morph",{duration:this.options.delay+this.options.duration*2,link:"cancel",transition:$arguments(0)});},this);}this.image.set("styles",{bottom:"auto",left:"auto",right:"auto",top:"auto"});this.image.setProperties({width:this.image.getCoordinates().width+"px",height:this.image.getCoordinates().height+"px"});var props=["top left","top right","bottom left","bottom right"][this.counter%4].split(" ");props.each(function(prop){this.image.setStyle(prop,0);},this);dh=this.height/this.preloader.height;dw=this.width/this.preloader.width;delta=dw>dh?dw:dh;var values={};var zoom=$random.run(this.options.zoom)/100+1;var pan=Math.abs($random.run(this.options.pan)/100-1);["height","width"].each(function(prop,i){var e=Math.ceil(this.preloader[prop]*delta);var s=(e*zoom).toInt();values[prop]=[s,e];if(dw>dh||i){e=this[prop]-this.image[prop];s=(e*pan).toInt();values[props[i]]=[s,e];}},this);var paused=this.firstrun&&this.options.paused;if(fast||paused){this._center(this.image);this.image.get("morph").cancel();if(paused){this.image.get("tween").cancel().set(0).start(1);}else{this.image.get("tween").cancel().set(1);}}else{this.image.get("morph").start(values);this.image.get("tween").set(0).start(1);}}});
