/**
Script: Slideshow.js
	Slideshow - A javascript class for Mootools to stream and animate the presentation of images on your website.

License:
	MIT-style license.

Copyright:
	Copyright (c) 2008 [Aeron Glemann](http://www.electricprism.com/aeron/).

Dependencies:
	Mootools 1.2 Core: Fx.Morph, Fx.Tween, Selectors, Element.Dimensions.
	Mootools 1.2 More: Assets.
*/

Slideshow = new Class({
	Implements: [Chain, Events, Options],
	options: {
		captions: false,
		center: true,
		classes: [],
		controller: false,
		delay: 2000,
		duration: 750,
		fast: false,
		height: false,
		href: "",
		hu: "",
		linked: false,
		loader: {
			animate: ["css/loader-#.png", 12]
		},
		loop: true,
		match: /\?slide=(\d+)$/,
		overlap: true,
		paused: false,
		properties: ["href", "rel", "rev", "title"],
		random: false,
		replace: [/(\.[^\.]+)$/, "t$1"],
		resize: "width",
		slide: 0,
		thumbnails: false,
		titles: true,
		transition: function (A) {
			return - (Math.cos(Math.PI * A) - 1) / 2
		},
		width: false
	},
	initialize: function (C, F, L) {
		this.setOptions(L);
		this.slideshow = $(C);
		if (!this.slideshow) {
			return
		}
		this.slideshow.set("styles", {
			display: "block",
			position: "relative",
			"z-index": 0
		});
		var H = window.location.href.match(this.options.match);
		this.slide = (this.options.match && H) ? H[1].toInt() : this.options.slide;
		this.counter = this.delay = this.transition = 0;
		this.direction = "left";
		this.paused = false;
		if (!this.options.overlap) {
			this.options.duration *= 2
		}
		var G = this.slideshow.getElement("a") || new Element("a");
		if (!this.options.href) {
			this.options.href = G.get("href") || ""
		}
		if (this.options.hu.length && !this.options.hu.test(/\/$/)) {
			this.options.hu += "/"
		}
		if (this.options.fast === true) {
			this.options.fast = 2
		}
		var K = ["slideshow", "first", "prev", "play", "pause", "next", "last", "images", "captions", "controller", "thumbnails", "hidden", "visible", "inactive", "active", "loader"];
		var J = K.map(function (N, M) {
			return this.options.classes[M] || N
		},
		this);
		this.classes = J.associate(K);
		this.classes.get = function () {
			var O = "." + this.slideshow;
			for (var N = 0, M = arguments.length; N < M; N++) {
				O += ("-" + this[arguments[N]])
			}
			return O
		}.bind(this.classes);
		if (!F) {
			this.options.hu = "";
			F = {};
			var D = this.slideshow.getElements(this.classes.get("thumbnails") + " img");
			this.slideshow.getElements(this.classes.get("images") + " img").each(function (O, Q) {
				var S = O.get("src");
				var N = $pick(O.get("alt"), O.get("title"), "");
				var R = O.getParent();
				var P = (R.get("tag") == "a") ? R.getProperties: {};
				var M = O.getParent().get("href") || "";
				var T = (D[Q]) ? D[Q].get("src") : "";
				F[S] = {
					caption: N,
					href: M,
					thumbnail: T
				}
			})
		}
		var E = this.load(F);
		if (!E) {
			return
		}
		this.events = $H({
			keydown: [],
			keyup: [],
			mousemove: []
		});
		var B = function (M) {
			switch (M.key) {
			case "left":
				this.prev(M.shift);
				break;
			case "right":
				this.next(M.shift);
				break;
			case "p":
				this.pause();
				break
			}
		}.bind(this);
		this.events.keyup.push(B);
		document.addEvent("keyup", B);
		var C = this.slideshow.getElement(this.classes.get("images"));
		var I = (C) ? C.empty() : new Element("div", {
			"class": this.classes.get("images").substr(1)
		}).inject(this.slideshow);
		var A = I.getSize();
		this.height = this.options.height || A.y;
		this.width = this.options.width || A.x;
		I.set({
			styles: {
				display: "block",
				height: this.height,
				overflow: "hidden",
				position: "relative",
				width: this.width
			}
		});
		this.slideshow.store("images", I);
		this.a = this.image = this.slideshow.getElement("img") || new Element("img");
		if (Browser.Engine.trident && Browser.Engine.version > 4) {
			this.a.style.msInterpolationMode = "bicubic"
		}
		this.a.set("styles", {
			display: "none",
			position: "absolute",
			zIndex: 1
		});
		this.b = this.a.clone();
		[this.a, this.b].each(function (M) {
			G.clone().cloneEvents(G).grab(M).inject(I)
		});
		if (this.options.captions) {
			this._captions()
		}
		if (this.options.controller) {
			this._controller()
		}
		if (this.options.loader) {
			this._loader()
		}
		if (this.options.thumbnails) {
			this._thumbnails()
		}
		this._preload()
	},
	go: function (B, A) {
		if ((this.slide - 1 + this.data.images.length) % this.data.images.length == B || $time() < this.transition) {
			return
		}
		$clear(this.timer);
		this.delay = 0;
		this.direction = (A) ? A: ((B < this.slide) ? "right": "left");
		this.slide = B;
		if (this.preloader) {
			this.preloader = this.preloader.destroy()
		}
		this._preload(this.options.fast == 2 || (this.options.fast == 1 && this.paused))
	},
	first: function () {
		this.prev(true)
	},
	prev: function (A) {
		var B = 0;
		if (!A) {
			if (this.options.random) {
				if (this.showed.i < 2) {
					return
				}
				this.showed.i -= 2;
				B = this.showed.array[this.showed.i]
			} else {
				B = (this.slide - 2 + this.data.images.length) % this.data.images.length
			}
		}
		this.go(B, "right")
	},
	pause: function (A) {
		if ($chk(A)) {
			this.paused = (A) ? false: true
		}
		if (this.paused) {
			this.paused = false;
			this.delay = this.transition = 0;
			this.timer = this._preload.delay(100, this);
			[this.a, this.b].each(function (B) { ["morph", "tween"].each(function (C) {
					if (this.retrieve(C)) {
						this.get(C).resume()
					}
				},
				B)
			});
			if (this.options.controller) {
				this.slideshow.getElement("." + this.classes.pause).removeClass(this.classes.play)
			}
		} else {
			this.paused = true;
			this.delay = Number.MAX_VALUE;
			this.transition = 0;
			$clear(this.timer);
			[this.a, this.b].each(function (B) { ["morph", "tween"].each(function (C) {
					if (this.retrieve(C)) {
						this.get(C).pause()
					}
				},
				B)
			});
			if (this.options.controller) {
				this.slideshow.getElement("." + this.classes.pause).addClass(this.classes.play)
			}
		}
	},
	next: function (A) {
		var B = (A) ? this.data.images.length - 1 : this.slide;
		this.go(B, "left")
	},
	last: function () {
		this.next(true)
	},
	load: function (C) {
		this.firstrun = true;
		this.showed = {
			array: [],
			i: 0
		};
		if ($type(C) == "array") {
			this.options.captions = false;
			C = new Array(C.length).associate(C.map(function (H, G) {
				return H + "?" + G
			}))
		}
		this.data = {
			images: [],
			captions: [],
			hrefs: [],
			thumbnails: []
		};
		for (var E in C) {
			var D = C[E] || {};
			var B = (D.caption) ? D.caption.trim() : "";
			var A = (D.href) ? D.href.trim() : ((this.options.linked) ? this.options.hu + E: this.options.href);
			var F = (D.thumbnail) ? D.thumbnail.trim() : E.replace(this.options.replace[0], this.options.replace[1]);
			this.data.images.push(E);
			this.data.captions.push(B);
			this.data.hrefs.push(A);
			this.data.thumbnails.push(F)
		}
		if (this.options.random) {
			this.slide = $random(0, this.data.images.length - 1)
		}
		if (this.options.thumbnails && this.slideshow.retrieve("thumbnails")) {
			this._thumbnails()
		}
		if (this.slideshow.retrieve("images")) { [this.a, this.b].each(function (G) { ["morph", "tween"].each(function (H) {
					if (this.retrieve(H)) {
						this.get(H).cancel()
					}
				},
				G)
			});
			this.slide = this.transition = 0;
			this.go(0)
		}
		return this.data.images.length
	},
	destroy: function (A) {
		this.events.each(function (C, B) {
			C.each(function (D) {
				document.removeEvent(B, D)
			})
		});
		this.pause(1);
		if (this.options.loader) {
			$clear(this.slideshow.retrieve("loader").retrieve("timer"))
		}
		if (this.options.thumbnails) {
			$clear(this.slideshow.retrieve("thumbnails").retrieve("timer"))
		}
		this.slideshow.uid = Native.UID++;
		if (A) {
			this.slideshow[A]()
		}
	},
	_preload: function (A) {
		if (!this.preloader) {
			this.preloader = new Asset.image(this.options.hu + this.data.images[this.slide], {
				onload: function () {
					this.store("loaded", true)
				}
			})
		}
		if (this.preloader.retrieve("loaded") && $time() > this.delay && $time() > this.transition) {
			if (this.stopped) {
				if (this.options.captions) {
					this.slideshow.retrieve("captions").get("morph").cancel().start(this.classes.get("captions", "hidden"))
				}
				this.pause(1);
				if (this.end) {
					this.fireEvent("end")
				}
				this.stopped = this.end = false;
				return
			}
			this.image = (this.counter % 2) ? this.b: this.a;
			this.image.set("styles", {
				display: "block",
				height: "auto",
				visibility: "hidden",
				width: "auto",
				zIndex: this.counter
			});
			["src", "height", "width"].each(function (D) {
				this.image.set(D, this.preloader.get(D))
			},
			this);
			this._resize(this.image);
			this._center(this.image);
			var B = this.image.getParent();
			if (this.data.hrefs[this.slide]) {
				B.set("href", this.data.hrefs[this.slide])
			} else {
				B.erase("href")
			}
			var C = (this.data.captions[this.slide]) ? this.data.captions[this.slide].replace(/<.+?>/gm, "").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "'") : "";
			this.image.set("alt", C);
			if (this.options.titles) {
				B.set("title", C)
			}
			if (this.options.loader) {
				this.slideshow.retrieve("loader").fireEvent("hide")
			}
			if (this.options.captions) {
				this.slideshow.retrieve("captions").fireEvent("update", A)
			}
			if (this.options.thumbnails) {
				this.slideshow.retrieve("thumbnails").fireEvent("update", A)
			}
			this._show(A);
			this._loaded()
		} else {
			if ($time() > this.delay && this.options.loader) {
				this.slideshow.retrieve("loader").fireEvent("show")
			}
			this.timer = (this.paused && this.preloader.retrieve("loaded")) ? null: this._preload.delay(100, this, A)
		}
	},
	_show: function (B) {
		if (!this.image.retrieve("morph")) {
			var C = (this.options.overlap) ? {
				duration: this.options.duration,
				link: "cancel"
			}: {
				duration: this.options.duration / 2,
				link: "chain"
			};
			$$(this.a, this.b).set("morph", $merge(C, {
				onStart: this._start.bind(this),
				onComplete: this._complete.bind(this),
				transition: this.options.transition
			}))
		}
		var E = this.classes.get("images", ((this.direction == "left") ? "next": "prev"));
		var F = this.classes.get("images", "visible");
		var A = (this.counter % 2) ? this.a: this.b;
		if (B) {
			A.get("morph").cancel().set(E);
			this.image.get("morph").cancel().set(F)
		} else {
			if (this.options.overlap) {
				A.get("morph").set(F);
				this.image.get("morph").set(E).start(F)
			} else {
				var D = function (G, H) {
					this.image.get("morph").set(G).start(H)
				}.pass([E, F], this);
				E = this.classes.get("images", ((this.direction == "left") ? "prev": "next"));
				A.get("morph").set(F).start(E).chain(D)
			}
		}
	},
	_loaded: function () {
		this.counter++;
		this.delay = (this.paused) ? Number.MAX_VALUE: $time() + this.options.duration + this.options.delay;
		this.direction = "left";
		this.transition = (this.options.fast == 2 || (this.options.fast == 1 && this.paused)) ? 0 : $time() + this.options.duration;
		if (this.slide + 1 == this.data.images.length && !this.options.loop && !this.options.random) {
			this.stopped = this.end = true
		}
		if (this.options.random) {
			this.showed.i++;
			if (this.showed.i >= this.showed.array.length) {
				var A = this.slide;
				if (this.showed.array.getLast() != A) {
					this.showed.array.push(A)
				}
				while (this.slide == A) {
					this.slide = $random(0, this.data.images.length - 1)
				}
			} else {
				this.slide = this.showed.array[this.showed.i]
			}
		} else {
			this.slide = (this.slide + 1) % this.data.images.length
		}
		if (this.image.getStyle("visibility") != "visible") { (function () {
				this.image.setStyle("visibility", "visible")
			}).delay(1, this)
		}
		if (this.preloader) {
			this.preloader = this.preloader.destroy()
		}
		this._preload()
	},
	_center: function (A) {
		if (this.options.center) {
			var B = A.getSize();
			A.set("styles", {
				left: (B.x - this.width) / -2,
				top: (B.y - this.height) / -2
			})
		}

	},
	_resize: function (B) {
		if (this.options.resize) {
			var D = this.preloader.get("height"),
			A = this.preloader.get("width");
			var E = this.height / D,
			C = this.width / A,
			F;
			if (this.options.resize == "length") {
				F = (E > C) ? C: E
			} else {
				F = (E > C) ? E: C
			}
			B.set("styles", {
				height: Math.ceil(D * F),
				width: Math.ceil(A * F)
			})
		}
	},
	_start: function () {
		this.fireEvent("start")
	},
	_complete: function () {
		if (this.firstrun && this.options.paused) {
			this.firstrun = false;
			this.pause(1)
		}
		this.fireEvent("complete")
	},
	_captions: function () {
		if (this.options.captions === true) {
			this.options.captions = {}
		}
		var B = this.slideshow.getElement(this.classes.get("captions"));
		var A = (B) ? B.empty() : new Element("div", {
			"class": this.classes.get("captions").substr(1)
		}).inject(this.slideshow);
		A.set({
			events: {
				update: function (D) {
					var C = this.slideshow.retrieve("captions");
					var F = (this.data.captions[this.slide] === "");
					if (D) {
						var G = (F) ? "hidden": "visible";
						C.set("html", this.data.captions[this.slide]).get("morph").cancel().set(this.classes.get("captions", G))
					} else {
						var E = (F) ? $empty: function (H) {
							this.slideshow.retrieve("captions").set("html", this.data.captions[H]).morph(this.classes.get("captions", "visible"))
						}.pass(this.slide, this);
						C.get("morph").cancel().start(this.classes.get("captions", "hidden")).chain(E)
					}
				}.bind(this)
			},
			morph: $merge(this.options.captions, {
				link: "chain"
			})
		});
		this.slideshow.store("captions", A)
	},
	_controller: function () {
		if (this.options.controller === true) {
			this.options.controller = {}
		}
		var E = this.slideshow.getElement(this.classes.get("controller"));
		var A = (E) ? E.empty() : new Element("div", {
			"class": this.classes.get("controller").substr(1)
		}).inject(this.slideshow);
		var C = new Element("ul").inject(A);
		$H({
			first: "Shift + Leftwards Arrow",
			prev: "Leftwards Arrow",
			pause: "P",
			next: "Rightwards Arrow",
			last: "Shift + Rightwards Arrow"
		}).each(function (J, I) {
			var G = new Element("li", {
				"class": (I == "pause" && this.options.paused) ? this.classes.play + " " + this.classes[I] : this.classes[I]
			}).inject(C);
			var H = this.slideshow.retrieve(I, new Element("a", {
				title: ((I == "pause") ? this.classes.play.capitalize() + " / ": "") + this.classes[I].capitalize() + " [" + J + "]"
			}).inject(G));
			H.set("events", {
				click: function (K) {
					this[K]()
				}.pass(I, this),
				mouseenter: function (K) {
					this.addClass(K)
				}.pass(this.classes.active, H),
				mouseleave: function (K) {
					this.removeClass(K)
				}.pass(this.classes.active, H)
			})
		},
		this);
		A.set({
			events: {
				hide: function (G) {
					if (!this.retrieve("hidden")) {
						this.store("hidden", true).morph(G)
					}
				}.pass(this.classes.get("controller", "hidden"), A),
				show: function (G) {
					if (this.retrieve("hidden")) {
						this.store("hidden", false).morph(G)
					}
				}.pass(this.classes.get("controller", "visible"), A)
			},
			morph: $merge(this.options.controller, {
				link: "cancel"
			})
		}).store("hidden", false);
		var B = function (H) {
			if (["left", "right", "p"].contains(H.key)) {
				var G = this.slideshow.retrieve("controller");
				if (G.retrieve("hidden")) {
					G.get("morph").set(this.classes.get("controller", "visible"))
				}
				switch (H.key) {
				case "left":
					this.slideshow.retrieve((H.shift) ? "first": "prev").fireEvent("mouseenter");
					break;
				case "right":
					this.slideshow.retrieve((H.shift) ? "last": "next").fireEvent("mouseenter");
					break;
				default:
					this.slideshow.retrieve("pause").fireEvent("mouseenter");
					break
				}
			}
		}.bind(this);
		this.events.keydown.push(B);
		var F = function (H) {
			if (["left", "right", "p"].contains(H.key)) {
				var G = this.slideshow.retrieve("controller");
				if (G.retrieve("hidden")) {
					G.store("hidden", false).fireEvent("hide")
				}
				switch (H.key) {
				case "left":
					this.slideshow.retrieve((H.shift) ? "first": "prev").fireEvent("mouseleave");
					break;
				case "right":
					this.slideshow.retrieve((H.shift) ? "last": "next").fireEvent("mouseleave");
					break;
				default:
					this.slideshow.retrieve("pause").fireEvent("mouseleave");
					break
				}
			}
		}.bind(this);
		this.events.keyup.push(F);
		var D = function (H) {
			var G = this.slideshow.retrieve("images").getCoordinates();
			if (H.page.x > G.left && H.page.x < G.right && H.page.y > G.top && H.page.y < G.bottom) {
				this.slideshow.retrieve("controller").fireEvent("show")
			} else {
				this.slideshow.retrieve("controller").fireEvent("hide")
			}
		}.bind(this);
		this.events.mousemove.push(D);
		document.addEvents({
			keydown: B,
			keyup: F,
			mousemove: D
		});
		this.slideshow.retrieve("controller", A).fireEvent("hide")
	},
	_loader: function () {
		if (this.options.loader === true) {
			this.options.loader = {}
		}
		var A = new Element("div", {
			"class": this.classes.get("loader").substr(1),
			morph: $merge(this.options.loader, {
				link: "cancel"
			})
		}).store("hidden", false).store("i", 1).inject(this.slideshow.retrieve("images"));
		if (this.options.loader.animate) {
			for (var B = 0; B < this.options.loader.animate[1]; B++) {
				img = new Asset.image(this.options.loader.animate[0].replace(/#/, B))
			}
			if (Browser.Engine.trident4 && this.options.loader.animate[0].contains("png")) {
				A.setStyle("backgroundImage", "none")
			}
		}
		A.set("events", {
			animate: function () {
				var C = this.slideshow.retrieve("loader");
				var E = (C.retrieve("i").toInt() + 1) % this.options.loader.animate[1];
				C.store("i", E);
				var D = this.options.loader.animate[0].replace(/#/, E);
				if (Browser.Engine.trident4 && this.options.loader.animate[0].contains("png")) {
					C.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + D + '", sizingMethod="scale")'
				} else {
					C.setStyle("backgroundImage", "url(" + D + ")")
				}
			}.bind(this),
			hide: function () {
				var C = this.slideshow.retrieve("loader");
				if (!C.retrieve("hidden")) {
					C.store("hidden", true).morph(this.classes.get("loader", "hidden"));
					if (this.options.loader.animate) {
						$clear(C.retrieve("timer"))
					}
				}
			}.bind(this),
			show: function () {
				var C = this.slideshow.retrieve("loader");
				if (C.retrieve("hidden")) {
					C.store("hidden", false).morph(this.classes.get("loader", "visible"));
					if (this.options.loader.animate) {
						C.store("timer", function () {
							this.fireEvent("animate")
						}.periodical(50, C))
					}
				}
			}.bind(this)
		});
		this.slideshow.retrieve("loader", A).fireEvent("hide")
	},
	_thumbnails: function () {
		if (this.options.thumbnails === true) {
			this.options.thumbnails = {}
		}
		var C = this.slideshow.getElement(this.classes.get("thumbnails"));
		var E = (C) ? C.empty() : new Element("div", {
			"class": this.classes.get("thumbnails").substr(1)
		}).inject(this.slideshow);
		E.setStyle("overflow", "hidden");
		var A = new Element("ul", {
			tween: {
				link: "cancel"
			}
		}).inject(E);
		this.data.thumbnails.each(function (J, I) {
			var F = new Element("li").inject(A);
			var G = new Element("a", {
				events: {
					click: function (K) {
						this.go(K);
						return false
					}.pass(I, this),
					loaded: function () {
						this.data.thumbnails.pop();
						if (!this.data.thumbnails.length) {
							var O = E.getCoordinates();
							var M = E.retrieve("props");
							var K = 0,
							N = M[1],
							L = M[2];
							E.getElements("li").each(function (P) {
								var P = P.getCoordinates();
								if (P[N] > K) {
									K = P[N]
								}
							},
							this);
							E.store("limit", O[L] + O[M[0]] - K)
						}
					}.bind(this)
				},
				href: this.options.hu + this.data.images[I],
				morph: $merge(this.options.thumbnails, {
					link: "cancel"
				})
			}).inject(F);
			if (this.data.captions[I] && this.options.titles) {
				G.set("title", this.data.captions[I].replace(/<.+?>/gm, "").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "'"))
			}
			var H = new Asset.image(this.options.hu + J, {
				onload: function () {
					this.fireEvent("loaded")
				}.bind(G)
			}).inject(G)
		},
		this);
		E.set("events", {
			scroll: function (H, K) {
				var F = this.getCoordinates();
				var L = this.getElement("ul").getPosition();
				var N = this.retrieve("props");
				var I = N[3],
				R,
				O = N[0],
				T = N[2],
				P;
				var S = this.getElement("ul").get("tween", {
					property: O
				});
				if ($chk(H)) {
					var Q = this.getElements("li")[H].getCoordinates();
					R = F[O] + (F[T] / 2) - (Q[T] / 2) - Q[O];
					P = (L[I] - F[O] + R).limit(this.retrieve("limit"), 0);
					if (K) {
						S.set(P)
					} else {
						S.start(P)
					}
				} else {
					var G = F[N[2]] / 3,
					M = this.retrieve("page"),
					J = -0.2;
					if (M[I] < (F[O] + G)) {
						R = (M[I] - F[O] - G) * J
					} else {
						if (M[I] > (F[O] + F[T] - G)) {
							R = (M[I] - F[O] - F[T] + G) * J
						}
					}
					if (R) {
						P = (L[I] - F[O] + R).limit(this.retrieve("limit"), 0);
						S.set(P)
					}
				}
			}.bind(E),
			update: function (F) {
				var G = this.slideshow.retrieve("thumbnails");
				G.getElements("a").each(function (H, I) {
					if (I == this.slide) {
						if (!H.retrieve("active", false)) {
							H.store("active", true);
							var K = this.classes.get("thumbnails", "active");
							if (F) {
								H.get("morph").set(K)
							} else {
								H.morph(K)
							}
						}
					} else {
						if (H.retrieve("active", true)) {
							H.store("active", false);
							var J = this.classes.get("thumbnails", "inactive");
							if (F) {
								H.get("morph").set(J)
							} else {
								H.morph(J)
							}
						}
					}
				},
				this);
				if (!G.retrieve("mouseover")) {
					G.fireEvent("scroll", [this.slide, F])
				}
			}.bind(this)
		});
		var D = E.getCoordinates();
		E.store("props", (D.height > D.width) ? ["top", "bottom", "height", "y"] : ["left", "right", "width", "x"]);
		var B = function (F) {
			var G = this.getCoordinates();
			if (F.page.x > G.left && F.page.x < G.right && F.page.y > G.top && F.page.y < G.bottom) {
				this.store("page", F.page);
				if (!this.retrieve("mouseover")) {
					this.store("mouseover", true);
					this.store("timer", function () {
						this.fireEvent("scroll")
					}.periodical(50, this))
				}
			} else {
				if (this.retrieve("mouseover")) {
					this.store("mouseover", false);
					$clear(this.retrieve("timer"))
				}
			}
		}.bind(E);
		this.events.mousemove.push(B);
		document.addEvent("mousemove", B);
		this.slideshow.store("thumbnails", E)
	}
});