/*
 *	faded 0.3.2 - jQuery plugin
 *	written by Nathan Searles	
 *	http://nathansearles.com/faded/
 *
 *	Copyright (c) 2010 Nathan Searles (http://nathansearles.com/)
 *	Dual licensed under the MIT (MIT-LICENSE.txt)
 *	and GPL (GPL-LICENSE.txt) licenses.
 *
 *	Built for jQuery library
 *	http://jquery.com
 *	Compatible with jQuery 1.3.2+
 *
 */
if (typeof jQuery != "undefined") {
	jQuery(function ($) {
		$.fn.extend({
			faded: function (options) {
				var settings = $.extend({}, $.fn.faded.defaults, options);
				return this.each(

				function () {
					if ($.fn.jquery < "1.3.1") {
						return;
					}
					var $t = $(this);
					var $c = $t.children(":nth-child(1)");
					var o = $.metadata ? $.extend({}, settings, $t.metadata()) : settings;
					var total = $c.children().size();
					var next = 0,
						prev = 0,
						number = 0,
						currentitem = 0,
						restart = 0,
						restartinterval = 0;
					var loaded, active, imgSrc, clicked, current;
					if (o.random) {
						$.fn.reorder = function (callback) {
							function randOrd() {
								return (Math.round(Math.random()) - 0.5);
							}
							return ($(this).each(function () {
								var $this = $(this);
								var $children = $this.children();
								var childCount = $children.length;
								if (childCount > 1) {
									$children.hide();
									var indices = new Array();
									for (i = 0; i < childCount; i++) {
										indices[indices.length] = i;
									}
									indices = indices.sort(randOrd);
									$.each(indices, function (j, k) {
										var $child = $children.eq(k);
										var $clone = $child.clone(true);
										$clone.show().appendTo($this);
										if (callback !== undefined) {
											callback($child, $clone);
										}
										$child.remove();
									});
								}
							}));
						};
						$c.reorder();
					}

					function pause() {
						clearInterval(autoplay);
						clearTimeout(restart);
						restart = setTimeout(function () {
							autoplay = setInterval(function () {
								animate("next");
							}, o.autoplay);
						}, o.autorestart);
					}
					$c.css({
						position: "relative"
					});
					$c.children().css({
						position: "absolute",
						top: 0,
						left: 0,
						zIndex: 0,
						display: "none"
					});
					if (o.autoheight) {
						$c.animate({
							height: $c.children(":eq(0)").outerHeight()
						}, o.autoheight);
					}
					if (o.pagination) {
						if (o.autopagination) {
							$t.append("<ul class=" + o.pagination + "></ul>");
							$c.children().each(function () {
								$("." + o.pagination + "", $t).append("<li><a rel=" + number + " href=\"#\" >" + (number + 1) + "</a></li>");
								number++;
							});
						}
						$("." + o.pagination + " li a:eq(0)", $t).parent().addClass("current");
						$("." + o.pagination + " li a", $t).click(function () {
							current = $("." + o.pagination + " li.current a", $t).attr("rel");
							clicked = $(this).attr("rel");
							if (current != clicked) {
								animate("pagination", clicked, current);
							}
							if (o.autoplay) {
								pause();
							}
							return false;
						});
					}
					if (o.loading && $c.children()[0].tagName == "IMG") {
						$c.css({
							background: "url(" + o.loadingimg + ") no-repeat 50% 50%"
						});
						imgSrc = $("img:eq(0)", $c).attr("src") + "?" + (new Date()).getTime();
						$("img:eq(0)", $c).attr("src", imgSrc).load(function () {
							$(this).fadeIn(o.speed, function () {
								loaded = true;
							});
						});
					} else {
						$c.children(":eq(0)").fadeIn(o.speed, function () {
							loaded = true;
						});
					}
					if (o.bigtarget) {
						$c.css({
							"cursor": "pointer"
						});
						$c.click(function () {
							animate("next");
							if (o.autoplay) {
								if (o.autorestart) {
									pause();
								} else {
									clearInterval(autoplay);
								}
							}
							return false;
						});
					}
					if (o.autoplay) {
						autoplay = setInterval(function () {
							animate("next");
						}, o.autoplay);
						pause();
					}
					$("." + o.nextbtn, $t).click(function () {
						animate("next");
						if (o.autoplay) {
							if (o.autorestart) {
								pause();
							} else {
								clearInterval(autoplay);
							}
						}
						return false;
					});
					$("." + o.prevbtn, $t).click(function () {
						animate("prev");
						if (o.autoplay) {
							if (o.autorestart) {
								pause();
							} else {
								clearInterval(autoplay);
							}
						}
						return false;
					});

					function animate(dir, clicked, current) {
						if (!active && loaded) {
							active = true;
							switch (dir) {
							case "next":
								prev = next;
								next = currentitem * 1 + 1;
								if (total === next) {
									next = 0;
								}
								break;
							case "prev":
								prev = next;
								next = currentitem * 1 - 1;
								if (next === -1) {
									next = total - 1;
								}
								break;
							case "pagination":
								next = clicked;
								prev = current;
								break;
							}
							if (o.pagination) {
								$(".pagination li.current", $t).removeClass("current");
								$(".pagination li a:eq(" + next + ")", $t).parent().addClass("current");
							}
							if (o.crossfade) {
								$c.children(":eq(" + next + ")").css({
									zIndex: 10
								}).fadeIn(o.speed, function () {
									$c.children(":eq(" + prev + ")").css({
										display: "none",
										zIndex: 0
									});
									$(this).css({
										zIndex: 0
									});
									currentitem = next;
									active = false;
								});
							} else {
								$c.children(":eq(" + prev + ")").fadeOut(o.speed, function () {
									if (o.autoheight) {
										$c.animate({
											height: $c.children(":eq(" + next + ")").outerHeight()
										}, o.autoheight, function () {
											$c.children(":eq(" + next + ")").fadeIn(o.speed);
										});
									} else {
										$c.children(":eq(" + next + ")").fadeIn(o.speed);
									}
									currentitem = next;
									active = false;
								});
							}
						}
					}
				});
			}
		});
		$.fn.faded.defaults = {
			speed: 300,
			crossfade: false,
			bigtarget: false,
			loading: false,
			autoheight: false,
			pagination: "pagination",
			autopagination: false,
			nextbtn: "next",
			prevbtn: "prev",
			loadingimg: false,
			autoplay: false,
			autorestart: true,
			random: false
		};
	});
}

