/*

 *	faded 0.3.1 - jQuery plugin

 *	written by Nathan Searles	

 *	http://nathansearles.com/faded/

 *

 *	Copyright (c) 2009 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.sequentialloading&&$c.children()[0].tagName=="IMG") {

							$c.css({background:"url("+o.loadingimg+") no-repeat 50% 50%"});

							imgSrc = $("img:eq(0)",$c).attr("src");

							$("img:eq(0)",$c).attr("src", imgSrc).load(function() {

								$(this).fadeIn(o.speed,function(){

									loaded = true;

								});

							});

						} else {

							$c.find(":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,

			sequentialloading: false,

			autoheight: false,

			pagination: "pagination",

			autopagination: true,

			nextbtn: "next",

			prevbtn: "prev",

			loadingimg: false,

			autoplay: false,

			autorestart: false,

			random: false

		};

	});

}
