﻿//MooTools More, <http://mootools.net/more>. Copyright (c) 2006-2009 Aaron Newton <http://clientcide.com/>, Valerio Proietti <http://mad4milk.net> & the MooTools team <http://mootools.net/developers>, MIT Style License.

MooTools.More = { version: "1.2.5.1", build: "254884f2b83651bf95260eed5c6cceb838e22d8e" }; Fx.Scroll = new Class({ Extends: Fx, options: { offset: { x: 0, y: 0 }, wheelStops: true }, initialize: function (b, a) {
	this.element = this.subject = document.id(b);
	this.parent(a); var d = this.cancel.bind(this, false); if ($type(this.element) != "element") { this.element = document.id(this.element.getDocument().body); } var c = this.element;
	if (this.options.wheelStops) {
		this.addEvent("start", function () { c.addEvent("mousewheel", d); }, true); this.addEvent("complete", function () {
			c.removeEvent("mousewheel", d);
		}, true);
	} 
}, set: function () {
	var a = Array.flatten(arguments); if (Browser.Engine.gecko) { a = [Math.round(a[0]), Math.round(a[1])]; } this.element.scrollTo(a[0] + this.options.offset.x, a[1] + this.options.offset.y);
}, compute: function (c, b, a) { return [0, 1].map(function (d) { return Fx.compute(c[d], b[d], a); }); }, start: function (c, g) {
	if (!this.check(c, g)) { return this; } var e = this.element.getScrollSize(), b = this.element.getScroll(), d = { x: c, y: g };
	for (var f in d) { var a = e[f]; if ($chk(d[f])) { d[f] = ($type(d[f]) == "number") ? d[f] : a; } else { d[f] = b[f]; } d[f] += this.options.offset[f]; } return this.parent([b.x, b.y], [d.x, d.y]);
}, toTop: function () { return this.start(false, 0); }, toLeft: function () { return this.start(0, false); }, toRight: function () { return this.start("right", false); }, toBottom: function () {
	return this.start(false, "bottom");
}, toElement: function (b) { var a = document.id(b).getPosition(this.element); return this.start(a.x, a.y); }, scrollIntoView: function (c, e, d) {
	e = e ? $splat(e) : ["x", "y"];
	var h = {}; c = document.id(c); var f = c.getPosition(this.element); var i = c.getSize(); var g = this.element.getScroll(); var a = this.element.getSize(); var b = { x: f.x + i.x, y: f.y + i.y };
	["x", "y"].each(function (j) {
		if (e.contains(j)) { if (b[j] > g[j] + a[j]) { h[j] = b[j] - a[j]; } if (f[j] < g[j]) { h[j] = f[j]; } } if (h[j] == null) { h[j] = g[j]; } if (d && d[j]) {
			h[j] = h[j] + d[j];
		} 
	}, this); if (h.x != g.x || h.y != g.y) { this.start(h.x, h.y); } return this;
}, scrollToCenter: function (c, e, d) {
	e = e ? $splat(e) : ["x", "y"]; c = $(c); var h = {}, f = c.getPosition(this.element), i = c.getSize(), g = this.element.getScroll(), a = this.element.getSize(), b = { x: f.x + i.x, y: f.y + i.y };
	["x", "y"].each(function (j) { if (e.contains(j)) { h[j] = f[j] - (a[j] - i[j]) / 2; } if (h[j] == null) { h[j] = g[j]; } if (d && d[j]) { h[j] = h[j] + d[j]; } }, this); if (h.x != g.x || h.y != g.y) {
		this.start(h.x, h.y);
	} return this;
} 
}); var Asset = { javascript: function (f, d) {
	d = $extend({ onload: $empty, document: document, check: $lambda(true) }, d); if (d.onLoad) {
		d.onload = d.onLoad;
		delete d.onLoad;
	} var b = new Element("script", { src: f, type: "text/javascript" }); var e = d.onload.bind(b), a = d.check, g = d.document; delete d.onload; delete d.check;
	delete d.document; b.addEvents({ load: e, readystatechange: function () { if (["loaded", "complete"].contains(this.readyState)) { e(); } } }).set(d); if (Browser.Engine.webkit419) {
		var c = (function () {
			if (!$try(a)) {
				return;
			} $clear(c); e();
		}).periodical(50);
	} return b.inject(g.head);
}, css: function (b, a) {
	a = a || {}; var c = a.onload || a.onLoad; if (c) {
		a.events = a.events || {}; a.events.load = c;
		delete a.onload; delete a.onLoad;
	} return new Element("link", $merge({ rel: "stylesheet", media: "screen", type: "text/css", href: b }, a)).inject(document.head);
}, image: function (c, b) {
	b = $merge({ onload: $empty, onabort: $empty, onerror: $empty }, b);
	var d = new Image(); var a = document.id(d) || new Element("img"); ["load", "abort", "error"].each(function (e) {
		var g = "on" + e; var f = e.capitalize(); if (b["on" + f]) {
			b[g] = b["on" + f];
			delete b["on" + f];
		} var h = b[g]; delete b[g]; d[g] = function () {
			if (!d) { return; } if (!a.parentNode) { a.width = d.width; a.height = d.height; } d = d.onload = d.onabort = d.onerror = null;
			h.delay(1, a, a); a.fireEvent(e, a, 1);
		};
	}); d.src = a.src = c; if (d && d.complete) { d.onload.delay(1); } return a.set(b);
}, images: function (d, c) {
	c = $merge({ onComplete: $empty, onProgress: $empty, onError: $empty, properties: {} }, c);
	d = $splat(d); var a = []; var b = 0; return new Elements(d.map(function (f, e) {
		return Asset.image(f, $extend(c.properties, { onload: function () {
			c.onProgress.call(this, b, e);
			b++; if (b == d.length) { c.onComplete(); } 
		}, onerror: function () { c.onError.call(this, b, e); b++; if (b == d.length) { c.onComplete(); } } 
		}));
	}));
} 
};
