﻿/**
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/).
*/

Slideshow.KenBurns = new Class({ Extends: Slideshow, options: { pan: [100, 100], zoom: [50, 50] }, initialize: function(B, C, A) { A.overlap = true; A.resize = true; ["pan", "zoom"].each(function(D) { if ($chk(this[D])) { if ($type(this[D]) != "array") { this[D] = [this[D], this[D]] } this[D].map(function(E) { return (E.toInt() || 0).limit(0, 100) }) } }, A); this.parent(B, C, A) }, _show: function(B) { if (!this.image.retrieve("morph")) { ["a", "b"].each(function(G) { this[G].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" }); var D = ["top left", "top right", "bottom left", "bottom right"][this.counter % 4].split(" "); D.each(function(G) { this.image.setStyle(G, 0) }, this); dh = this.height / this.preloader.height; dw = this.width / this.preloader.width; delta = (dw > dh) ? dw : dh; var A = {}; var E = ($random.run(this.options.zoom) / 100) + 1; var F = Math.abs(($random.run(this.options.pan) / 100) - 1); ["height", "width"].each(function(J, G) { var I = Math.ceil(this.preloader[J] * delta); var H = (I * E).toInt(); A[J] = [H, I]; if (dw > dh || G) { I = (this[J] - this.image[J]); H = (I * F).toInt(); A[D[G]] = [H, I] } }, this); var C = (this.firstrun && this.options.paused); if (B || C) { this._center(this.image); this.image.get("morph").cancel(); if (C) { this.image.get("tween").cancel().set(0).start(1) } else { this.image.get("tween").cancel().set(1) } } else { this.image.get("morph").start(A); this.image.get("tween").set(0).start(1) } } });