
/*!
 * jCarousel - Riding carousels with jQuery
 *   http://sorgalla.com/jcarousel/
 *
 * Copyright (c) 2006 Jan Sorgalla (http://sorgalla.com)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * Built on top of the jQuery library
 *   http://jquery.com
 *
 * Inspired by the "Carousel Component" by Bill Scott
 *   http://billwscott.com/carousel/
 */
(function ($) {
	$.fn.jcarousel = function (o) {
		if (typeof o == "string") {
			var instance = $(this).data("jcarousel"), args = Array.prototype.slice.call(arguments, 1);
			return instance[o].apply(instance, args);
		} else {
			return this.each(function () {
				$(this).data("jcarousel", new $jc(this, o));
			});
		}
	};
	var defaults = {vertical:false, start:1, offset:1, size:null, scroll:3, visible:null, animation:"normal", easing:"swing", auto:0, wrap:null, initCallback:null, reloadCallback:null, itemLoadCallback:null, itemFirstInCallback:null, itemFirstOutCallback:null, itemLastInCallback:null, itemLastOutCallback:null, itemVisibleInCallback:null, itemVisibleOutCallback:null, buttonNextHTML:"<div></div>", buttonPrevHTML:"<div></div>", buttonNextEvent:"click", buttonPrevEvent:"click", buttonNextCallback:null, buttonPrevCallback:null};
	$.jcarousel = function (e, o) {
		this.options = $.extend({}, defaults, o || {});
		this.locked = false;
		this.container = null;
		this.clip = null;
		this.list = null;
		this.buttonNext = null;
		this.buttonPrev = null;
		this.wh = !this.options.vertical ? "width" : "height";
		this.lt = !this.options.vertical ? "left" : "top";
		var skin = "", split = e.className.split(" ");
		for (var i = 0; i < split.length; i++) {
			if (split[i].indexOf("jcarousel-skin") != -1) {
				$(e).removeClass(split[i]);
				skin = split[i];
				break;
			}
		}
		if (e.nodeName == "UL" || e.nodeName == "OL") {
			this.list = $(e);
			this.container = this.list.parent();
			if (this.container.hasClass("jcarousel-clip")) {
				if (!this.container.parent().hasClass("jcarousel-container")) {
					this.container = this.container.wrap("<div></div>");
				}
				this.container = this.container.parent();
			} else {
				if (!this.container.hasClass("jcarousel-container")) {
					this.container = this.list.wrap("<div></div>").parent();
				}
			}
		} else {
			this.container = $(e);
			this.list = this.container.find("ul,ol").eq(0);
		}
		if (skin != "" && this.container.parent()[0].className.indexOf("jcarousel-skin") == -1) {
			this.container.wrap("<div class=\" " + skin + "\"></div>");
		}
		this.clip = this.list.parent();
		if (!this.clip.length || !this.clip.hasClass("jcarousel-clip")) {
			this.clip = this.list.wrap("<div></div>").parent();
		}
		this.buttonNext = $(".jcarousel-next", this.container);
		if (this.buttonNext.size() == 0 && this.options.buttonNextHTML != null) {
			this.buttonNext = this.clip.after(this.options.buttonNextHTML).next();
		}
		this.buttonNext.addClass(this.className("jcarousel-next"));
		this.buttonPrev = $(".jcarousel-prev", this.container);
		if (this.buttonPrev.size() == 0 && this.options.buttonPrevHTML != null) {
			this.buttonPrev = this.clip.after(this.options.buttonPrevHTML).next();
		}
		this.buttonPrev.addClass(this.className("jcarousel-prev"));
		this.clip.addClass(this.className("jcarousel-clip")).css({overflow:"hidden", position:"relative"});
		this.list.addClass(this.className("jcarousel-list")).css({overflow:"hidden", position:"relative", top:0, left:0, margin:0, padding:0});
		this.container.addClass(this.className("jcarousel-container")).css({position:"relative"});
		var di = this.options.visible != null ? Math.ceil(this.clipping() / this.options.visible) : null;
		var li = this.list.children("li");
		var self = this;
		if (li.size() > 0) {
			var wh = 0, i = this.options.offset;
			li.each(function () {
				self.format(this, i++);
				wh += self.dimension(this, di);
			});
			this.list.css(this.wh, wh + "px");
			if (!o || o.size === undefined) {
				this.options.size = li.size();
			}
		}
		this.container.css("display", "block");
		this.buttonNext.css("display", "block");
		this.buttonPrev.css("display", "block");
		this.funcNext = function () {
			self.next();
		};
		this.funcPrev = function () {
			self.prev();
		};
		this.funcResize = function () {
			self.reload();
		};
		if (this.options.initCallback != null) {
			this.options.initCallback(this, "init");
		}
		if ($.browser.safari) {
			this.buttons(false, false);
			$(window).bind("load.jcarousel", function () {
				self.setup();
			});
		} else {
			this.setup();
		}
	};
	var $jc = $.jcarousel;
	$jc.fn = $jc.prototype = {jcarousel:"0.2.4"};
	$jc.fn.extend = $jc.extend = $.extend;
	$jc.fn.extend({setup:function () {
		this.first = null;
		this.last = null;
		this.prevFirst = null;
		this.prevLast = null;
		this.animating = false;
		this.timer = null;
		this.tail = null;
		this.inTail = false;
		if (this.locked) {
			return;
		}
		this.list.css(this.lt, this.pos(this.options.offset) + "px");
		var p = this.pos(this.options.start);
		this.prevFirst = this.prevLast = null;
		this.animate(p, false);
		$(window).unbind("resize.jcarousel", this.funcResize).bind("resize.jcarousel", this.funcResize);
	}, reset:function () {
		this.list.empty();
		this.list.css(this.lt, "0px");
		this.list.css(this.wh, "10px");
		if (this.options.initCallback != null) {
			this.options.initCallback(this, "reset");
		}
		this.setup();
	}, reload:function () {
		if (this.tail != null && this.inTail) {
			this.list.css(this.lt, $jc.intval(this.list.css(this.lt)) + this.tail);
		}
		this.tail = null;
		this.inTail = false;
		if (this.options.reloadCallback != null) {
			this.options.reloadCallback(this);
		}
		if (this.options.visible != null) {
			var self = this;
			var di = Math.ceil(this.clipping() / this.options.visible), wh = 0, lt = 0;
			$("li", this.list).each(function (i) {
				wh += self.dimension(this, di);
				if (i + 1 < self.first) {
					lt = wh;
				}
			});
			this.list.css(this.wh, wh + "px");
			this.list.css(this.lt, -lt + "px");
		}
		this.scroll(this.first, false);
	}, lock:function () {
		this.locked = true;
		this.buttons();
	}, unlock:function () {
		this.locked = false;
		this.buttons();
	}, size:function (s) {
		if (s != undefined) {
			this.options.size = s;
			if (!this.locked) {
				this.buttons();
			}
		}
		return this.options.size;
	}, has:function (i, i2) {
		if (i2 == undefined || !i2) {
			i2 = i;
		}
		if (this.options.size !== null && i2 > this.options.size) {
			i2 = this.options.size;
		}
		for (var j = i; j <= i2; j++) {
			var e = this.get(j);
			if (!e.length || e.hasClass("jcarousel-item-placeholder")) {
				return false;
			}
		}
		return true;
	}, get:function (i) {
		return $(".jcarousel-item-" + i, this.list);
	}, add:function (i, s) {
		var e = this.get(i), old = 0, add = 0;
		if (e.length == 0) {
			var c, e = this.create(i), j = $jc.intval(i);
			while (c = this.get(--j)) {
				if (j <= 0 || c.length) {
					j <= 0 ? this.list.prepend(e) : c.after(e);
					break;
				}
			}
		} else {
			old = this.dimension(e);
		}
		e.removeClass(this.className("jcarousel-item-placeholder"));
		typeof s == "string" ? e.html(s) : e.empty().append(s);
		var di = this.options.visible != null ? Math.ceil(this.clipping() / this.options.visible) : null;
		var wh = this.dimension(e, di) - old;
		if (i > 0 && i < this.first) {
			this.list.css(this.lt, $jc.intval(this.list.css(this.lt)) - wh + "px");
		}
		this.list.css(this.wh, $jc.intval(this.list.css(this.wh)) + wh + "px");
		return e;
	}, remove:function (i) {
		var e = this.get(i);
		if (!e.length || (i >= this.first && i <= this.last)) {
			return;
		}
		var d = this.dimension(e);
		if (i < this.first) {
			this.list.css(this.lt, $jc.intval(this.list.css(this.lt)) + d + "px");
		}
		e.remove();
		this.list.css(this.wh, $jc.intval(this.list.css(this.wh)) - d + "px");
	}, next:function () {
		this.stopAuto();
		if (this.tail != null && !this.inTail) {
			this.scrollTail(false);
		} else {
			this.scroll(((this.options.wrap == "both" || this.options.wrap == "last") && this.options.size != null && this.last == this.options.size) ? 1 : this.first + this.options.scroll);
		}
	}, prev:function () {
		this.stopAuto();
		if (this.tail != null && this.inTail) {
			this.scrollTail(true);
		} else {
			this.scroll(((this.options.wrap == "both" || this.options.wrap == "first") && this.options.size != null && this.first == 1) ? this.options.size : this.first - this.options.scroll);
		}
	}, scrollTail:function (b) {
		if (this.locked || this.animating || !this.tail) {
			return;
		}
		var pos = $jc.intval(this.list.css(this.lt));
		!b ? pos -= this.tail : pos += this.tail;
		this.inTail = !b;
		this.prevFirst = this.first;
		this.prevLast = this.last;
		this.animate(pos);
	}, scroll:function (i, a) {
		if (this.locked || this.animating) {
			return;
		}
		this.animate(this.pos(i), a);
	}, pos:function (i) {
		var pos = $jc.intval(this.list.css(this.lt));
		if (this.locked || this.animating) {
			return pos;
		}
		if (this.options.wrap != "circular") {
			i = i < 1 ? 1 : (this.options.size && i > this.options.size ? this.options.size : i);
		}
		var back = this.first > i;
		var f = this.options.wrap != "circular" && this.first <= 1 ? 1 : this.first;
		var c = back ? this.get(f) : this.get(this.last);
		var j = back ? f : f - 1;
		var e = null, l = 0, p = false, d = 0, g;
		while (back ? --j >= i : ++j < i) {
			e = this.get(j);
			p = !e.length;
			if (e.length == 0) {
				e = this.create(j).addClass(this.className("jcarousel-item-placeholder"));
				c[back ? "before" : "after"](e);
				if (this.first != null && this.options.wrap == "circular" && this.options.size !== null && (j <= 0 || j > this.options.size)) {
					g = this.get(this.index(j));
					if (g.length) {
						this.add(j, g.children().clone(true));
					}
				}
			}
			c = e;
			d = this.dimension(e);
			if (p) {
				l += d;
			}
			if (this.first != null && (this.options.wrap == "circular" || (j >= 1 && (this.options.size == null || j <= this.options.size)))) {
				pos = back ? pos + d : pos - d;
			}
		}
		var clipping = this.clipping();
		var cache = [];
		var visible = 0, j = i, v = 0;
		var c = this.get(i - 1);
		while (++visible) {
			e = this.get(j);
			p = !e.length;
			if (e.length == 0) {
				e = this.create(j).addClass(this.className("jcarousel-item-placeholder"));
				c.length == 0 ? this.list.prepend(e) : c[back ? "before" : "after"](e);
				if (this.first != null && this.options.wrap == "circular" && this.options.size !== null && (j <= 0 || j > this.options.size)) {
					g = this.get(this.index(j));
					if (g.length) {
						this.add(j, g.find(">*").clone(true));
					}
				}
			}
			c = e;
			var d = this.dimension(e);
			if (d == 0) {
				alert("jCarousel: No width/height set for items. This will cause an infinite loop. Aborting...");
				return 0;
			}
			if (this.options.wrap != "circular" && this.options.size !== null && j > this.options.size) {
				cache.push(e);
			} else {
				if (p) {
					l += d;
				}
			}
			v += d;
			if (v >= clipping) {
				break;
			}
			j++;
		}
		for (var x = 0; x < cache.length; x++) {
			cache[x].remove();
		}
		if (l > 0) {
			this.list.css(this.wh, this.dimension(this.list) + l + "px");
			if (back) {
				pos -= l;
				this.list.css(this.lt, $jc.intval(this.list.css(this.lt)) - l + "px");
			}
		}
		var last = i + visible - 1;
		if (this.options.wrap != "circular" && this.options.size && last > this.options.size) {
			last = this.options.size;
		}
		if (j > last) {
			visible = 0, j = last, v = 0;
			while (++visible) {
				var e = this.get(j--);
				if (!e.length) {
					break;
				}
				v += this.dimension(e);
				if (v >= clipping) {
					break;
				}
			}
		}
		var first = last - visible + 1;
		if (this.options.wrap != "circular" && first < 1) {
			first = 1;
		}
		if (this.inTail && back) {
			pos += this.tail;
			this.inTail = false;
		}
		this.tail = null;
		if (this.options.wrap != "circular" && last == this.options.size && (last - visible + 1) >= 1) {
			var m = $jc.margin(this.get(last), !this.options.vertical ? "marginRight" : "marginBottom");
			if ((v - m) > clipping) {
				this.tail = v - clipping - m;
			}
		}
		while (i-- > first) {
			pos += this.dimension(this.get(i));
		}
		this.prevFirst = this.first;
		this.prevLast = this.last;
		this.first = first;
		this.last = last;
		return pos;
	}, animate:function (p, a) {
		if (this.locked || this.animating) {
			return;
		}
		this.animating = true;
		var self = this;
		var scrolled = function () {
			self.animating = false;
			if (p == 0) {
				self.list.css(self.lt, 0);
			}
			if (self.options.wrap == "circular" || self.options.wrap == "both" || self.options.wrap == "last" || self.options.size == null || self.last < self.options.size) {
				self.startAuto();
			}
			self.buttons();
			self.notify("onAfterAnimation");
		};
		this.notify("onBeforeAnimation");
		if (!this.options.animation || a == false) {
			this.list.css(this.lt, p + "px");
			scrolled();
		} else {
			var o = !this.options.vertical ? {"left":p} : {"top":p};
			this.list.animate(o, this.options.animation, this.options.easing, scrolled);
		}
	}, startAuto:function (s) {
		if (s != undefined) {
			this.options.auto = s;
		}
		if (this.options.auto == 0) {
			return this.stopAuto();
		}
		if (this.timer != null) {
			return;
		}
		var self = this;
		this.timer = setTimeout(function () {
			self.next();
		}, this.options.auto * 1000);
	}, stopAuto:function () {
		if (this.timer == null) {
			return;
		}
		clearTimeout(this.timer);
		this.timer = null;
	}, buttons:function (n, p) {
		if (n == undefined || n == null) {
			var n = !this.locked && this.options.size !== 0 && ((this.options.wrap && this.options.wrap != "first") || this.options.size == null || this.last < this.options.size);
			if (!this.locked && (!this.options.wrap || this.options.wrap == "first") && this.options.size != null && this.last >= this.options.size) {
				n = this.tail != null && !this.inTail;
			}
		}
		if (p == undefined || p == null) {
			var p = !this.locked && this.options.size !== 0 && ((this.options.wrap && this.options.wrap != "last") || this.first > 1);
			if (!this.locked && (!this.options.wrap || this.options.wrap == "last") && this.options.size != null && this.first == 1) {
				p = this.tail != null && this.inTail;
			}
		}
		var self = this;
		this.buttonNext[n ? "bind" : "unbind"](this.options.buttonNextEvent + ".jcarousel", this.funcNext)[n ? "removeClass" : "addClass"](this.className("jcarousel-next-disabled")).attr("disabled", n ? false : true);
		this.buttonPrev[p ? "bind" : "unbind"](this.options.buttonPrevEvent + ".jcarousel", this.funcPrev)[p ? "removeClass" : "addClass"](this.className("jcarousel-prev-disabled")).attr("disabled", p ? false : true);
		if (this.buttonNext.length > 0 && (this.buttonNext[0].jcarouselstate == undefined || this.buttonNext[0].jcarouselstate != n) && this.options.buttonNextCallback != null) {
			this.buttonNext.each(function () {
				self.options.buttonNextCallback(self, this, n);
			});
			this.buttonNext[0].jcarouselstate = n;
		}
		if (this.buttonPrev.length > 0 && (this.buttonPrev[0].jcarouselstate == undefined || this.buttonPrev[0].jcarouselstate != p) && this.options.buttonPrevCallback != null) {
			this.buttonPrev.each(function () {
				self.options.buttonPrevCallback(self, this, p);
			});
			this.buttonPrev[0].jcarouselstate = p;
		}
	}, notify:function (evt) {
		var state = this.prevFirst == null ? "init" : (this.prevFirst < this.first ? "next" : "prev");
		this.callback("itemLoadCallback", evt, state);
		if (this.prevFirst !== this.first) {
			this.callback("itemFirstInCallback", evt, state, this.first);
			this.callback("itemFirstOutCallback", evt, state, this.prevFirst);
		}
		if (this.prevLast !== this.last) {
			this.callback("itemLastInCallback", evt, state, this.last);
			this.callback("itemLastOutCallback", evt, state, this.prevLast);
		}
		this.callback("itemVisibleInCallback", evt, state, this.first, this.last, this.prevFirst, this.prevLast);
		this.callback("itemVisibleOutCallback", evt, state, this.prevFirst, this.prevLast, this.first, this.last);
	}, callback:function (cb, evt, state, i1, i2, i3, i4) {
		if (this.options[cb] == undefined || (typeof this.options[cb] != "object" && evt != "onAfterAnimation")) {
			return;
		}
		var callback = typeof this.options[cb] == "object" ? this.options[cb][evt] : this.options[cb];
		if (!$.isFunction(callback)) {
			return;
		}
		var self = this;
		if (i1 === undefined) {
			callback(self, state, evt);
		} else {
			if (i2 === undefined) {
				this.get(i1).each(function () {
					callback(self, this, i1, state, evt);
				});
			} else {
				for (var i = i1; i <= i2; i++) {
					if (i !== null && !(i >= i3 && i <= i4)) {
						this.get(i).each(function () {
							callback(self, this, i, state, evt);
						});
					}
				}
			}
		}
	}, create:function (i) {
		return this.format("<li></li>", i);
	}, format:function (e, i) {
		var $e = $(e).addClass(this.className("jcarousel-item")).addClass(this.className("jcarousel-item-" + i)).css({"float":"left", "list-style":"none"});
		$e.attr("jcarouselindex", i);
		return $e;
	}, className:function (c) {
		return c + " " + c + (!this.options.vertical ? "-horizontal" : "-vertical");
	}, dimension:function (e, d) {
		var el = e.jquery != undefined ? e[0] : e;
		var old = !this.options.vertical ? el.offsetWidth + $jc.margin(el, "marginLeft") + $jc.margin(el, "marginRight") : el.offsetHeight + $jc.margin(el, "marginTop") + $jc.margin(el, "marginBottom");
		if (d == undefined || old == d) {
			return old;
		}
		var w = !this.options.vertical ? d - $jc.margin(el, "marginLeft") - $jc.margin(el, "marginRight") : d - $jc.margin(el, "marginTop") - $jc.margin(el, "marginBottom");
		$(el).css(this.wh, w + "px");
		return this.dimension(el);
	}, clipping:function () {
		return !this.options.vertical ? this.clip[0].offsetWidth - $jc.intval(this.clip.css("borderLeftWidth")) - $jc.intval(this.clip.css("borderRightWidth")) : this.clip[0].offsetHeight - $jc.intval(this.clip.css("borderTopWidth")) - $jc.intval(this.clip.css("borderBottomWidth"));
	}, index:function (i, s) {
		if (s == undefined) {
			s = this.options.size;
		}
		return Math.round((((i - 1) / s) - Math.floor((i - 1) / s)) * s) + 1;
	}});
	$jc.extend({defaults:function (d) {
		return $.extend(defaults, d || {});
	}, margin:function (e, p) {
		if (!e) {
			return 0;
		}
		var el = e.jquery != undefined ? e[0] : e;
		if (p == "marginRight" && $.browser.safari) {
			var old = {"display":"block", "float":"none", "width":"auto"}, oWidth, oWidth2;
			$.swap(el, old, function () {
				oWidth = el.offsetWidth;
			});
			old["marginRight"] = 0;
			$.swap(el, old, function () {
				oWidth2 = el.offsetWidth;
			});
			return oWidth2 - oWidth;
		}
		return $jc.intval($.css(el, p));
	}, intval:function (v) {
		v = parseInt(v);
		return isNaN(v) ? 0 : v;
	}});
})(jQuery);
/*   3/30/2011
		PikaChoose
	Jquery plugin for photo galleries
    Copyright (C) 2011 Jeremy Fry

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
(function ($) {
	var defaults = {autoPlay:true, speed:5000, text:{play:"", stop:"", previous:"Previous", next:"Next"}, transition:[1], showCaption:false, IESafe:false, showTooltips:false, carousel:false, carouselVertical:false, animationFinished:null, buildFinished:null, startOn:0, thumbOpacity:0.4};
	$.fn.PikaChoose = function (o) {
		return this.each(function () {
			$(this).data("pikachoose", new $pc(this, o));
		});
	};
	$.PikaChoose = function (e, o) {
		this.options = $.extend({}, defaults, o || {});
		this.list = null;
		this.image = null;
		this.anchor = null;
		this.caption = null;
		this.imgNav = null;
		this.imgPlay = null;
		this.imgPrev = null;
		this.imgNext = null;
		this.textNext = null;
		this.textPrev = null;
		this.previous = null;
		this.next = null;
		this.aniWrap = null;
		this.aniDiv = null;
		this.aniImg = null;
		this.thumbs = null;
		this.transition = null;
		this.active = null;
		this.tooltip = null;
		this.animating = false;
		this.stillOut = null;
		this.counter = null;
		if (typeof (this.options.data) != "undefined") {
			e = $("<ul></ul>").appendTo(e);
			$.each(this.options.data, function () {
				var tmp = $("<li><a href='" + this.link + "'><img src='" + this.image + "'></a></li>").appendTo(e);
				if (typeof (this.title) != "undefined") {
					tmp.find("a").attr("title", this.title);
				}
				if (typeof (this.caption) != "undefined") {
					tmp.append("<span>" + this.caption + "</span>");
				}
				if (typeof (this.thumbnail) != "undefined") {
					tmp.find("a").attr("ref", this.thumbnail);
				}
			});
		}
		if (e.nodeName == "UL" || e.nodeName == "OL" || e instanceof jQuery) {
			this.list = $(e);
			this.build();
			this.bindEvents();
		} else {
			return;
		}
		var y = 0;
		var x = 0;
		for (var t = 0; t < 25; t++) {
			var a = "<div col=\"" + y + "\" row=\"" + x + "\"></div>";
			this.aniDiv.append(a);
			y++;
			if (y == 5) {
				x++;
				y = 0;
			}
		}
	};
	var $pc = $.PikaChoose;
	$pc.fn = $pc.prototype = {pikachoose:"4.2.3"};
	$.fn.pikachoose = $.fn.PikaChoose;
	$pc.fn.extend = $pc.extend = $.extend;
	$pc.fn.extend({build:function () {
		this.step = 0;
		this.wrap = $("<div class='pika-stage'></div>").insertBefore(this.list);
		this.image = $("<img>").appendTo(this.wrap);
		this.anchor = this.image.wrap("<a>").parent();
		this.imgNav = $("<div class='pika-imgnav'></div>").insertAfter(this.anchor);
		this.imgPlay = $("<a></a>").appendTo(this.imgNav);
		this.counter = $("").appendTo(this.imgNav);
		if (this.options.autoPlay) {
			this.imgPlay.addClass("play");
		} else {
			this.imgPlay.addClass("play");
		}
		this.imgPrev = $("<a class='previous'></a>").insertAfter(this.imgPlay);
		this.imgNext = $("<a class='next'></a>").insertAfter(this.imgPrev);
		//this.textPrev = $("<a class='previous'>" + this.options.text.previous + "</a>").appendTo(this.textNav);
		//this.textNext = $("<a class='next'>" + this.options.text.next + "</a>").appendTo(this.textNav);
		this.caption = $("<div class='caption'></div>").insertAfter(this.imgNav).hide();
		this.tooltip = $("<div class='pika-tooltip'></div>").insertAfter(this.list).hide();
		this.aniWrap = $("<div class='pika-aniwrap'></div>").insertAfter(this.caption);
		this.aniImg = $("<img>").appendTo(this.aniWrap).hide();
		this.aniDiv = $("<div class='pika-ani'></div>").appendTo(this.aniWrap);
		

		this.list.addClass("pika-thumbs");
		this.list.children("li").wrapInner("<div class='clip' />");
		this.thumbs = this.list.find("img");
		this.active = this.thumbs.eq(this.options.startOn);
		this.finishAnimating({"source":this.active.attr("ref") || this.active.attr("src"), "caption":this.active.parents("li:first").find("span:first").html(), "clickThrough":this.active.parent().attr("href") || "", "clickThroughTitle":this.active.parent().attr("title") || ""});
		var self = this;
		this.thumbs.each(function () {
			self.createThumb($(this), self);
		});
		if (this.options.carousel) {
			this.list.jcarousel({vertical:this.options.carouselVertical, initCallback:function (carousel) {
				jQuery(carousel.list).find("img").click(function () {
					var clicked = parseInt(jQuery(this).parents(".jcarousel-item").attr("jcarouselindex"));
					var last = (jQuery(this).parents("ul").find("li:last").index() == clicked - 1) ? true : false;
					if (!last) {
						clicked = (clicked - 2 <= 0) ? 0 : clicked - 2;
					}
					clicked++;
					carousel.scroll(clicked);
				});
			}});
		}
		if (typeof (this.options.buildFinished) == "function") {
			this.options.buildFinished(this);
		}
	}, createThumb:function (ele) {
		var self = ele;
		var that = this;
		self.hide();
		$.data(ele[0], "clickThrough", self.parent("a").attr("href") || "");
		$.data(ele[0], "clickThroughTitle", self.parent("a").attr("title") || "");
		if (self.parent("a").length > 0) {
			self.unwrap();
		}
		$.data(ele[0], "caption", self.next("span").html() || "");
		self.next("span").remove();
		$.data(ele[0], "source", self.attr("ref") || self.attr("src"));
		$.data(ele[0], "order", self.closest("ul").find("li").index(self.parents("li")));
		var data = $.data(ele[0]);
		$("<img />").bind("load", {data:data}, function () {
			if (typeof (that.options.buildThumbStart) == "function") {
				that.options.buildThumbStart(that);
			}
			var img = $(this);
			var w = img.width();
			var h = img.height();
			if (w === 0) {
				w = img.attr("width");
			}
			if (h === 0) {
				h = img.attr("height");
			}
			var rw = parseInt(self.parents(".clip").css("width").slice(0, -2)) / w;
			var rh = parseInt(self.parents(".clip").css("height").slice(0, -2)) / h;
			var ratio;
			if (rw < rh) {
				ratio = rh;
				var left = ((w * ratio - parseInt(self.parents(".clip").css("width").slice(0, -2))) / 2) * -1;
				left = Math.round(left);
				self.css({left:left});
			} else {
				ratio = rw;
				self.css({top:0});
			}
			var width = Math.round(w * ratio);
			var height = Math.round(h * ratio);
			self.css("position", "relative");
			var imgcss = {width:width + "px", height:height + "px"};
			self.css(imgcss);
			self.hover(function (e) {
				clearTimeout(that.stillOut);
				$(this).stop(true, true).fadeTo(250, 1);
				if (!that.options.showTooltips) {
					return;
				}
				that.tooltip.show().stop(true, true).html(data.caption).animate({top:$(this).parent().position().top, left:$(this).parent().position().left, opacity:1}, "fast");
			}, function (e) {
				if (!$(this).hasClass("active")) {
					$(this).stop(true, true).fadeTo(250, that.options.thumbOpacity);
					that.stillOut = setTimeout(that.hideTooltip, 700);
				}
			});
			if (data.order == that.options.startOn) {
				self.fadeTo(250, 1);
				self.addClass("active");
			} else {
				self.fadeTo(250, that.options.thumbOpacity);
			}
			if (typeof (that.options.buildThumbFinish) == "function") {
				that.options.buildThumbFinish(that);
			}
		}).attr("src", self.attr("src"));
	}, bindEvents:function () {
		this.thumbs.bind("click", {self:this}, this.imgClick);
		this.imgNext.bind("click", {self:this}, this.nextClick);
		this.textNext.bind("click", {self:this}, this.playClick);
		this.imgPrev.bind("click", {self:this}, this.prevClick);
		this.textPrev.bind("click", {self:this}, this.playClick);
		this.imgPlay.bind("click", {self:this}, this.playClick);
		this.wrap.bind("mouseenter", {self:this}, function (e) {
			e.data.self.imgNav.stop(true, true).fadeIn("slow");
		});
		this.wrap.bind("mouseleave", {self:this}, function (e) {
			e.data.self.imgNav.stop(true, true).fadeOut("slow");
		});
		this.tooltip.bind("mouseenter", {self:this}, function (e) {
			clearTimeout(e.data.self.stillOut);
		});
		this.tooltip.bind("mouseleave", {self:this}, function (e) {
			e.data.self.stillOut = setTimeout(e.data.self.hideTooltip, 700);
		});
	}, hideTooltip:function (e) {
		$(".pika-tooltip").animate({opacity:0.01});
	}, imgClick:function (e, x) {
//	alert(e);
		var self = e.data.self;
		var data = $.data(this);
		if (self.animating) {
			return;
		}
		self.caption.fadeOut("slow");
		if (typeof (x) == "undefined" || x.how != "auto") {
			if (self.options.autoPlay) {
				self.imgPlay.trigger("click");
			}
		}
		self.animating = true;
		self.active.fadeTo(300, self.options.thumbOpacity).removeClass("active");
		self.active = $(this);
		self.active.addClass("active").fadeTo(200, 1);
		$("<img />").bind("load", {self:self, data:data}, function () {
			self.aniDiv.css({height:self.image.height(), width:self.image.width()}).fadeIn("fast");
			self.aniDiv.children("div").css({"width":"20%", "height":"20%", "float":"left"});
			var n = 0;
			if (self.options.transition[0] == -1) {
				n = Math.floor(Math.random() * 7) + 1;
			} else {
				n = self.options.transition[self.step];
				self.step++;
				if (self.step >= self.options.transition.length) {
					self.step = 0;
				}
			}
			if (self.options.IESafe && $.browser.msie) {
				n = 1;
			}
			self.doAnimation(n, data);
		}).attr("src", $.data(this).source);
	}, doAnimation:function (n, data) {
		var self = this;
		self.image.stop(true, true);
		var aWidth = self.aniDiv.children("div").eq(0).width();
		var aHeight = self.aniDiv.children("div").eq(0).height();
		var img = new Image();
		$(img).attr("src", data.source);
		if (img.height != self.image.height() || img.width != self.image.width()) {
			if (n != 0 && n != 1 && n != 7) {
				n = 1;
			}
		}
		self.aniDiv.css({height:img.height, width:img.width});
		self.aniDiv.children().each(function () {
			var div = $(this);
			var xOffset = Math.floor(div.parent().width() / 5) * div.attr("col");
			var yOffset = Math.floor(div.parent().height() / 5) * div.attr("row");
			div.css({"background":"url(" + data.source + ") -" + xOffset + "px -" + yOffset + "px", "width":"0px", "height":"0px", "position":"absolute", "top":yOffset + "px", "left":xOffset + "px", "float":"none"});
		});
		self.aniDiv.hide();
		self.aniImg.hide();
		switch (n) {
		  case 0:
			self.image.stop(true, true).fadeOut("slow", function () {
				self.image.attr("src", data.source).fadeIn("slow", function () {
					self.finishAnimating(data);
				});
			});
			break;
		  case 1:
			self.aniDiv.hide();
			self.aniImg.height(self.image.height()).hide().attr("src", data.source);
			self.image.fadeOut("slow");
			self.aniImg.fadeIn("slow", function () {
				self.finishAnimating(data);
			});
			break;
		  case 2:
			self.aniDiv.show().children().hide().each(function (index) {
				var delay = index * 30;
				$(this).css({opacity:0.1}).show().delay(delay).animate({opacity:1, "width":aWidth, "height":aHeight}, 200, "linear", function () {
					if (self.aniDiv.find("div").index(this) == 24) {
						self.finishAnimating(data);
					}
				});
			});
			break;
		  case 3:
			self.aniDiv.show().children("div:lt(5)").hide().each(function (index) {
				var delay = $(this).attr("col") * 100;
				$(this).css({opacity:0.1, "width":aWidth}).show().delay(delay).animate({opacity:1, "height":self.image.height()}, 700, "linear", function () {
					if (self.aniDiv.find(" div").index(this) == 4) {
						self.finishAnimating(data);
					}
				});
			});
			break;
		  case 4:
			self.aniDiv.show().children().hide().each(function (index) {
				var delay = $(this).attr("col") * 10;
				aHeight = self.gapper($(this), aHeight);
				$(this).css({opacity:0.1, "height":aHeight}).show().delay(delay).animate({opacity:1, "width":aWidth}, 800, "linear", function () {
					if (self.aniDiv.find(" div").index(this) == 24) {
						self.finishAnimating(data);
					}
				});
			});
			break;
		  case 5:
			self.aniDiv.show().children().show().each(function (index) {
				var delay = index * Math.floor(Math.random() * 5) * 10;
				aHeight = self.gapper($(this), aHeight);
				if ($(".animation div").index(this) == 24) {
					delay = 800;
				}
				$(this).css({"height":aHeight, "width":aWidth, "opacity":0.01}).delay(delay).animate({"opacity":1}, 800, function () {
					if (self.aniDiv.find(" div").index(this) == 24) {
						self.finishAnimating(data);
					}
				});
			});
			break;
		  case 6:
			self.aniDiv.height(self.image.height()).hide().css({"background":"url(" + data.source + ") top left no-repeat"});
			self.aniDiv.children("div").hide();
			self.aniDiv.css({width:0}).show().animate({width:self.image.width()}, "slow", function () {
				self.finishAnimating(data);
				self.aniDiv.css({"background":"transparent"});
			});
			break;
		  case 7:
			self.wrap.css({overflow:"hidden"});
			self.aniImg.height(self.image.height()).hide().attr("src", data.source);
			self.aniDiv.children("div").hide();
			self.image.css({position:"relative"}).animate({left:"-" + self.wrap.outerWidth() + "px"});
			self.aniImg.show();
			self.aniWrap.css({left:self.wrap.outerWidth()}).show().animate({left:"0px"}, "slow", function () {
				self.finishAnimating(data);
			});
			break;
		}
	}, finishAnimating:function (data) {
		this.animating = false;
		this.image.attr("src", data.source);
		this.image.css({left:"0"}).show();
		var self = this;
		$("<img />").bind("load", function () {
			self.aniImg.hide();
			self.aniDiv.hide();
		}).attr("src", data.source);
		var cur = this.list.find("img").index(this.active);
		cur++;
		var total = this.list.find("img").length;
		this.counter.html(cur + "/" + total);
		this.anchor.attr("href", data.clickThrough);
		this.anchor.attr("title", data.clickThroughTitle);
		if (this.options.showCaption && data.caption != "" && data.caption != null) {
			this.caption.html(data.caption).stop(true, true).fadeIn("slow");
		}
		if (this.options.autoPlay == true) {
			var self = this;
			this.image.delay(this.options.speed).fadeIn(0, function () {
				if (self.options.autoPlay) {
					self.nextClick();
				}
			});
		}
		if (typeof (this.options.animationFinished) == "function") {
			this.options.animationFinished(this);
		}
	}, gapper:function (ele, aHeight) {
		if (ele.attr("row") == 9 && ele.attr("col") == 0) {
			var gap = ani_divs.height() - (aHeight * 9);
			return gap;
		}
		return aHeight;
	}, nextClick:function (e) {
		var how = "natural";
		try {
			var self = e.data.self;
			if (typeof (e.data.self.options.next) == "function") {
				e.data.self.options.next(this);
			}
		}
		catch (err) {
			var self = this;
			how = "auto";
			//alert(err);
		}
		var next = self.active.parents("li:first").next().find("img");
		if (next.length == 0) {
			next = self.list.find("img").eq(0);
		}
		next.trigger("click", {how:how});
	}, prevClick:function (e) {
		if (typeof (e.data.self.options.previous) == "function") {
			e.data.self.options.previous(this);
		}
		var self = e.data.self;
		var prev = self.active.parents("li:first").prev().find("img");
		if (prev.length == 0) {
			prev = self.list.find("img:last");
		}
		prev.trigger("click");
	}, playClick:function (e) {
		var self = e.data.self;
		self.options.autoPlay = !self.options.autoPlay;
		self.imgPlay.toggleClass("play").toggleClass("pause");
		if (self.options.autoPlay) {
			self.nextClick();
		}
	}});
})(jQuery);


