/*
 * 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() {
			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 : 3000,
		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);
