/*
 * jQuery Nivo Slider v2.3
 * http://nivo.dev7studios.com
 *
 * Copyright 2010, Gilbert Pellegrom
 * Free to use and abuse under the MIT license.
 * http://www.opensource.org/licenses/mit-license.php
 */

(function (b)
{
	var a = function (j, q)
	{
		var g = b.extend(
		{
		}, b.fn.nivoSlider.defaults, q);
		var m =
		{
			currentSlide: 0,
			currentImage: "",
			totalSlides: 0,
			randAnim: "",
			running: false,
			paused: false,
			stop: false
		};
		var d = b(j);
		d.data("nivo:vars", m);
		d.css("position", "relative");
		d.addClass("nivoSlider");
		var e = d.children();
		e.each(function ()
		{
			var t = b(this);
			var s = "";
			if (!t.is("img"))
			{
				if (t.is("a"))
				{
					t.addClass("nivo-imageLink");
					s = t
				}
				t = t.find("img:first")
			}
			var r = t.width();
			if (r == 0)
			{
				r = t.attr("width")
			}
			var i = t.height();
			if (i == 0)
			{
				i = t.attr("height")
			}
			if (r > d.width())
			{
				d.width(r)
			}
			if (i > d.height())
			{
				d.height(i)
			}
			if (s != "")
			{
				s.css("display", "none")
			}
			t.css("display", "none");
			m.totalSlides++
		});
		if (g.startSlide > 0)
		{
			if (g.startSlide >= m.totalSlides)
			{
				g.startSlide = m.totalSlides - 1
			}
			m.currentSlide = g.startSlide
		}
		if (b(e[m.currentSlide]).is("img"))
		{
			m.currentImage = b(e[m.currentSlide])
		}
		else
		{
			m.currentImage = b(e[m.currentSlide]).find("img:first")
		}
		if (b(e[m.currentSlide]).is("a"))
		{
			b(e[m.currentSlide]).css("display", "block")
		}
		d.css("background", "url(" + m.currentImage.attr("src") + ") no-repeat");
		for (var k = 0; k < g.slices; k++)
		{
			var o = Math.round(d.width() / g.slices);
			if (k == g.slices - 1)
			{
				d.append(b('<div class="nivo-slice"></div>').css(
				{
					left: (o * k) + "px",
					width: (d.width() - (o * k)) + "px"
				}))
			}
			else
			{
				d.append(b('<div class="nivo-slice"></div>').css(
				{
					left: (o * k) + "px",
					width: o + "px"
				}))
			}
		}
		d.append(b('<div class="nivo-caption"><p></p></div>').css(
		{
			display: "none",
			opacity: g.captionOpacity
		}));
		if (m.currentImage.attr("title") != "")
		{
			var n = m.currentImage.attr("title");
			if (n.substr(0, 1) == "#")
			{
				n = b(n).html()
			}
			b(".nivo-caption p", d).html(n);
			b(".nivo-caption", d).fadeIn(g.animSpeed)
		}
		var c = 0;
		if (!g.manualAdvance && e.length > 1)
		{
			c = setInterval(function ()
			{
				p(d, e, g, false)
			}, g.pauseTime)
		}
		if (g.directionNav)
		{
			d.append('<div class="nivo-directionNav"><a class="nivo-prevNav">Prev</a><a class="nivo-nextNav">Next</a></div>');
			if (g.directionNavHide)
			{
				b(".nivo-directionNav", d).hide();
				d.hover(function ()
				{
					b(".nivo-directionNav", d).show()
				}, function ()
				{
					b(".nivo-directionNav", d).hide()
				})
			}
			b("a.nivo-prevNav", d).live("click", function ()
			{
				if (m.running)
				{
					return false
				}
				clearInterval(c);
				c = "";
				m.currentSlide -= 2;
				p(d, e, g, "prev")
			});
			b("a.nivo-nextNav", d).live("click", function ()
			{
				if (m.running)
				{
					return false
				}
				clearInterval(c);
				c = "";
				p(d, e, g, "next")
			})
		}
		if (g.controlNav)
		{
			var l = b('<div class="nivo-controlNav"></div>');
			d.append(l);
			for (var k = 0; k < e.length; k++)
			{
				if (g.controlNavThumbs)
				{
					var f = e.eq(k);
					if (!f.is("img"))
					{
						f = f.find("img:first")
					}
					if (g.controlNavThumbsFromRel)
					{
						l.append('<a class="nivo-control" rel="' + k + '"><img src="' + f.attr("rel") + '" alt="" /></a>')
					}
					else
					{
						l.append('<a class="nivo-control" rel="' + k + '"><img src="' + f.attr("src").replace(g.controlNavThumbsSearch, g.controlNavThumbsReplace) + '" alt="" /></a>')
					}
				}
				else
				{
					l.append('<a class="nivo-control" rel="' + k + '">' + (k + 1) + "</a>")
				}
			}
			b(".nivo-controlNav a:eq(" + m.currentSlide + ")", d).addClass("active");
			b(".nivo-controlNav a", d).live("click", function ()
			{
				if (m.running)
				{
					return false
				}
				if (b(this).hasClass("active"))
				{
					return false
				}
				clearInterval(c);
				c = "";
				d.css("background", "url(" + m.currentImage.attr("src") + ") no-repeat");
				m.currentSlide = b(this).attr("rel") - 1;
				p(d, e, g, "control")
			})
		}
		if (g.keyboardNav)
		{
			b(window).keypress(function (i)
			{
				if (i.keyCode == "37")
				{
					if (m.running)
					{
						return false
					}
					clearInterval(c);
					c = "";
					m.currentSlide -= 2;
					p(d, e, g, "prev")
				}
				if (i.keyCode == "39")
				{
					if (m.running)
					{
						return false
					}
					clearInterval(c);
					c = "";
					p(d, e, g, "next")
				}
			})
		}
		if (g.pauseOnHover)
		{
			d.hover(function ()
			{
				m.paused = true;
				clearInterval(c);
				c = ""
			}, function ()
			{
				m.paused = false;
				if (c == "" && !g.manualAdvance)
				{
					c = setInterval(function ()
					{
						p(d, e, g, false)
					}, g.pauseTime)
				}
			})
		}
		d.bind("nivo:animFinished", function ()
		{
			// XXX: This fixes the slider issue
			$('#slider').css("background", "none");

			m.running = false;
			b(e).each(function ()
			{
				if (b(this).is("a"))
				{
					b(this).css("display", "none")
				}
			});
			if (b(e[m.currentSlide]).is("a"))
			{
				b(e[m.currentSlide]).css("display", "block")
			}
			if (c == "" && !m.paused && !g.manualAdvance)
			{
				c = setInterval(function ()
				{
					p(d, e, g, false)
				}, g.pauseTime)
			}
			g.afterChange.call(this)
		});
		var p = function (r, s, u, x)
		{
			var y = r.data("nivo:vars");
			if (y && (y.currentSlide == y.totalSlides - 1))
			{
				u.lastSlide.call(this)
			}
			if ((!y || y.stop) && !x)
			{
				return false
			}
			u.beforeChange.call(this);
			if (!x)
			{
				r.css("background", "url(" + y.currentImage.attr("src") + ") no-repeat")
			}
			else
			{
				if (x == "prev")
				{
					r.css("background", "url(" + y.currentImage.attr("src") + ") no-repeat")
				}
				if (x == "next")
				{
					r.css("background", "url(" + y.currentImage.attr("src") + ") no-repeat")
				}
			}
			y.currentSlide++;
			if (y.currentSlide == y.totalSlides)
			{
				y.currentSlide = 0;
				u.slideshowEnd.call(this)
			}
			if (y.currentSlide < 0)
			{
				y.currentSlide = (y.totalSlides - 1)
			}
			if (b(s[y.currentSlide]).is("img"))
			{
				y.currentImage = b(s[y.currentSlide])
			}
			else
			{
				y.currentImage = b(s[y.currentSlide]).find("img:first")
			}
			if (u.controlNav)
			{
				b(".nivo-controlNav a", r).removeClass("active");
				b(".nivo-controlNav a:eq(" + y.currentSlide + ")", r).addClass("active")
			}
			if (y.currentImage.attr("title") != "")
			{
				var z = y.currentImage.attr("title");
				if (z.substr(0, 1) == "#")
				{
					z = b(z).html()
				}
				if (b(".nivo-caption", r).css("display") == "block")
				{
					b(".nivo-caption p", r).fadeOut(u.animSpeed, function ()
					{
						b(this).html(z);
						b(this).fadeIn(u.animSpeed)
					})
				}
				else
				{
					b(".nivo-caption p", r).html(z)
				}
				b(".nivo-caption", r).fadeIn(u.animSpeed)
			}
			else
			{
				b(".nivo-caption", r).fadeOut(u.animSpeed)
			}
			var w = 0;
			b(".nivo-slice", r).each(function ()
			{
				var i = Math.round(r.width() / u.slices);
				b(this).css(
				{
					height: "0px",
					opacity: "0",
					background: "url(" + y.currentImage.attr("src") + ") no-repeat -" + ((i + (w * i)) - i) + "px 0%"
				});
				w++
			});
			if (u.effect == "random")
			{
				var A = new Array("sliceDownRight", "sliceDownLeft", "sliceUpRight", "sliceUpLeft", "sliceUpDown", "sliceUpDownLeft", "fold", "fade");
				y.randAnim = A[Math.floor(Math.random() * (A.length + 1))];
				if (y.randAnim == undefined)
				{
					y.randAnim = "fade"
				}
			}
			if (u.effect.indexOf(",") != -1)
			{
				var A = u.effect.split(",");
				y.randAnim = b.trim(A[Math.floor(Math.random() * A.length)])
			}
			y.running = true;
			if (u.effect == "sliceDown" || u.effect == "sliceDownRight" || y.randAnim == "sliceDownRight" || u.effect == "sliceDownLeft" || y.randAnim == "sliceDownLeft")
			{
				var t = 0;
				var w = 0;
				var C = b(".nivo-slice", r);
				if (u.effect == "sliceDownLeft" || y.randAnim == "sliceDownLeft")
				{
					C = b(".nivo-slice", r)._reverse()
				}
				C.each(function ()
				{
					var i = b(this);
					i.css("top", "0px");
					if (w == u.slices - 1)
					{
						setTimeout(function ()
						{
							i.animate(
							{
								height: "100%",
								opacity: "1.0"
							}, u.animSpeed, "", function ()
							{
								r.trigger("nivo:animFinished")
							})
						}, (100 + t))
					}
					else
					{
						setTimeout(function ()
						{
							i.animate(
							{
								height: "100%",
								opacity: "1.0"
							}, u.animSpeed)
						}, (100 + t))
					}
					t += 50;
					w++
				})
			}
			else
			{
				if (u.effect == "sliceUp" || u.effect == "sliceUpRight" || y.randAnim == "sliceUpRight" || u.effect == "sliceUpLeft" || y.randAnim == "sliceUpLeft")
				{
					var t = 0;
					var w = 0;
					var C = b(".nivo-slice", r);
					if (u.effect == "sliceUpLeft" || y.randAnim == "sliceUpLeft")
					{
						C = b(".nivo-slice", r)._reverse()
					}
					C.each(function ()
					{
						var i = b(this);
						i.css("bottom", "0px");
						if (w == u.slices - 1)
						{
							setTimeout(function ()
							{
								i.animate(
								{
									height: "100%",
									opacity: "1.0"
								}, u.animSpeed, "", function ()
								{
									r.trigger("nivo:animFinished")
								})
							}, (100 + t))
						}
						else
						{
							setTimeout(function ()
							{
								i.animate(
								{
									height: "100%",
									opacity: "1.0"
								}, u.animSpeed)
							}, (100 + t))
						}
						t += 50;
						w++
					})
				}
				else
				{
					if (u.effect == "sliceUpDown" || u.effect == "sliceUpDownRight" || y.randAnim == "sliceUpDown" || u.effect == "sliceUpDownLeft" || y.randAnim == "sliceUpDownLeft")
					{
						var t = 0;
						var w = 0;
						var B = 0;
						var C = b(".nivo-slice", r);
						if (u.effect == "sliceUpDownLeft" || y.randAnim == "sliceUpDownLeft")
						{
							C = b(".nivo-slice", r)._reverse()
						}
						C.each(function ()
						{
							var i = b(this);
							if (w == 0)
							{
								i.css("top", "0px");
								w++
							}
							else
							{
								i.css("bottom", "0px");
								w = 0
							}
							if (B == u.slices - 1)
							{
								setTimeout(function ()
								{
									i.animate(
									{
										height: "100%",
										opacity: "1.0"
									}, u.animSpeed, "", function ()
									{
										r.trigger("nivo:animFinished")
									})
								}, (100 + t))
							}
							else
							{
								setTimeout(function ()
								{
									i.animate(
									{
										height: "100%",
										opacity: "1.0"
									}, u.animSpeed)
								}, (100 + t))
							}
							t += 50;
							B++
						})
					}
					else
					{
						if (u.effect == "fold" || y.randAnim == "fold")
						{
							var t = 0;
							var w = 0;
							b(".nivo-slice", r).each(function ()
							{
								var i = b(this);
								var v = i.width();
								i.css(
								{
									top: "0px",
									height: "100%",
									width: "0px"
								});
								if (w == u.slices - 1)
								{
									setTimeout(function ()
									{
										i.animate(
										{
											width: v,
											opacity: "1.0"
										}, u.animSpeed, "", function ()
										{
											r.trigger("nivo:animFinished")
										})
									}, (100 + t))
								}
								else
								{
									setTimeout(function ()
									{
										i.animate(
										{
											width: v,
											opacity: "1.0"
										}, u.animSpeed)
									}, (100 + t))
								}
								t += 50;
								w++
							})
						}
						else
						{
							if (u.effect == "fade" || y.randAnim == "fade")
							{
								var w = 0;
								b(".nivo-slice", r).each(function ()
								{
									b(this).css("height", "100%");
									if (w == u.slices - 1)
									{
										b(this).animate(
										{
											opacity: "1.0"
										}, (u.animSpeed * 2), "", function ()
										{
											r.trigger("nivo:animFinished")
										})
									}
									else
									{
										b(this).animate(
										{
											opacity: "1.0"
										}, (u.animSpeed * 2))
									}
									w++
								})
							}
						}
					}
				}
			}
		};
		var h = function (i)
		{
			if (this.console && typeof console.log != "undefined")
			{
				console.log(i)
			}
		};
		this.stop = function ()
		{
			if (!b(j).data("nivo:vars").stop)
			{
				b(j).data("nivo:vars").stop = true;
				h("Stop Slider")
			}
		};
		this.start = function ()
		{
			if (b(j).data("nivo:vars").stop)
			{
				b(j).data("nivo:vars").stop = false;
				h("Start Slider")
			}
		};
		g.afterLoad.call(this)
	};
	b.fn.nivoSlider = function (c)
	{
		return this.each(function ()
		{
			var d = b(this);
			if (d.data("nivoslider"))
			{
				return
			}
			var e = new a(this, c);
			d.data("nivoslider", e)
		})
	};
	b.fn.nivoSlider.defaults =
	{
		effect: "random",
		slices: 15,
		animSpeed: 500,
		pauseTime: 10000,
		startSlide: 0,
		directionNav: true,
		directionNavHide: true,
		controlNav: true,
		controlNavThumbs: false,
		controlNavThumbsFromRel: false,
		controlNavThumbsSearch: ".jpg",
		controlNavThumbsReplace: "_thumb.jpg",
		keyboardNav: true,
		pauseOnHover: true,
		manualAdvance: false,
		captionOpacity: 0.8,
		beforeChange: function ()
		{
		},
		afterChange: function ()
		{
		},
		slideshowEnd: function ()
		{
		},
		lastSlide: function ()
		{
		},
		afterLoad: function ()
		{
		}
	};
	b.fn._reverse = [].reverse
})(jQuery);
