jQuery(function($) {
	$.fn.extend({
		loopedSlider: function(options) {
			var settings = $.extend({}, $.fn.loopedSlider.defaults, options);
		
			return this.each(
				function() {
					var $t = $(this);
					var o = $.metadata ? $.extend({}, settings, $t.metadata()) : settings;
					
					var distance = 0;
					var times = 1;
					var slides = $(o.slides,$t).children().size();
					var width = $(o.slides,$t).children().outerWidth();
					var position = 0;
					var active = false;
					var number = 0;
					var interval = 0;
					var restart = 0;
					var pagination = $("."+o.pagination+" li a",$t);
	
					if(o.addPagination && !$(pagination).length){
						var buttons = slides;
						$($t).append("<ul class="+o.pagination+">");
						$(o.slides,$t).children().each(function(){
							if (number<buttons) {
								$("."+o.pagination,$t).append("<li><a rel="+(number+1)+" href=\"#\" >"+(number+1)+"</a></li>");
								number = number+1;
							} else {
								number = 0;
								return false;
							}
							$("."+o.pagination+" li a:eq(0)",$t).parent().addClass("active");
						});
						pagination = $("."+o.pagination+" li a",$t);
					} else {
						$(pagination,$t).each(function(){
							number=number+1;
							$(this).attr("rel",number);
							$(pagination.eq(0),$t).parent().addClass("active");
						});
					}
	
					if (slides===1) {
						$(o.slides,$t).children().css({position:"absolute",left:position,display:"block"});
						return;
					}
	
					$(o.slides,$t).css({width:(slides*width)});
	
					$(o.slides,$t).children().each(function(){
						$(this).css({position:"absolute",left:position,display:"block"});
						position=position+width;
					});
	
					$(o.slides,$t).children(":eq("+(slides-1)+")").css({position:"absolute",left:-width});
	
					if (slides>3) {
						$(o.slides,$t).children(":eq("+(slides-1)+")").css({position:"absolute",left:-width});
					}
	
					if(o.autoHeight){autoHeight(times);}
	
					$(".next",$t).click(function(){
						if(active===false) {
							animate("next",true);
							if(o.autoStart){
								if (o.restart) {autoStart();}
								else {stopanimation();}
							}
						} return false;
					});
	
					$(".previous",$t).click(function(){
						if(active===false) {	
							animate("prev",true);
							if(o.autoStart){
								if (o.restart) {autoStart();}
								else {stopanimation();}
							}
						} return false;
					});
	
					if (o.containerClick) {
						$(o.container,$t).click(function(){
							if(active===false) {
								animate("next",true);
								if(o.autoStart){
									if (o.restart) {autoStart();}
									else {stopanimation();}
								}
							} return false;
						});
					}
					
					$(o.container,$t).mouseover(function(){
						stopanimation();
					});
					
					/*changes By IN*/
					$(o.container,$t).mouseout(function(){
						runanimation();
						function autoStart() {
							if (o.restart) {
								stopanimation();
								clearInterval(interval);
								clearTimeout(restart);
								restart = setTimeout(function() {
									interval = setInterval(	function(){
										animate("next",true);
									},o.autoStart);
								},o.restart);
							} else {
								runanimation();
							}
						}
					});
					/*changes By IN end*/
	
					$(pagination,$t).click(function(){
						if ($(this).parent().hasClass("active")) {return false;}
						else {
							times = $(this).attr("rel");
							$(pagination,$t).parent().siblings().removeClass("active");
							$(this).parent().addClass("active");
							animate("fade",times);
							if(o.autoStart){
								if (o.restart) {autoStart();}
								else {stopanimation();}
							}
						} return false;
					});
	
					function runanimation() {
						sliderIntervalID = setTimeout(function(){
							if(active===false) {animate("next",true);}
							runanimation();
						},o.autoStart);
					}
	
					function stopanimation() {
						clearTimeout(sliderIntervalID);
					}
					
					function autoStart() {
						if (o.restart) {
							stopanimation();
							clearInterval(interval);
							clearTimeout(restart);
							restart = setTimeout(function() {
								interval = setInterval(	function(){
									animate("next",true);
								},o.autoStart);
							},o.restart);
						} else {
							runanimation();
						}
					}
	
					if (o.autoStart) {
						runanimation();
					}
	
					function current(times) {
						if(times===slides+1){times = 1;}
						if(times===0){times = slides;}
						$(pagination,$t).parent().siblings().removeClass("active");
						$(pagination+"[rel='" + (times) + "']",$t).parent().addClass("active");
					}
	
					function autoHeight(times) {
						if(times===slides+1){times=1;}
						if(times===0){times=slides;}	
						var getHeight = $(o.slides,$t).children(":eq("+(times-1)+")",$t).outerHeight();
						$(o.container,$t).animate({height: getHeight},o.autoHeight);					
					}
	
					function animate(dir,clicked){	
						active = true;	
						switch(dir){
							case "next":
								times = times+1;
								distance = (-(times*width-width));
								distance2 = times*width-width;
								current(times);
								if(o.autoHeight){autoHeight(times);}
								
								$(o.slides,$t).children().fadeOut(o.fadespeed, function(){
									$(o.slides,$t).css({left: distance});
									$(o.slides,$t).children(":eq("+(slides-1)+")").css({left:slides*width-width});
									
									if (times===slides+1) {
										//$(o.slides,$t).children(":eq(0)").css({left:distance2});
										times = 1;
										//$(o.slides,$t).css({left: distance2});
										$(o.slides,$t).css({left:0},function(){
											$(o.slides,$t).animate({left:distance});
										});							
										$(o.slides,$t).children(":eq(0)").css({left:distance2});
										$(o.slides,$t).children(":eq("+(slides-1)+")").css({ position:"absolute",left:-width});
										
									}
									
									if(times===slides){$(o.slides,$t).children(":eq(0)").css({left:distance2+width});}
									if(times===1){$(o.slides,$t).children(":eq("+(slides-1)+")").css({ position:"absolute",left:-width});}
									$(o.slides,$t).children().fadeIn(o.fadespeed);
									active = false;
								});	
								
								 
								break; 
							case "prev":
								times = times-1;
								distance = (-(times*width-width));
								current(times);
								if(o.autoHeight){autoHeight(times);}
								if (slides<3){
									if(times===0){
										$(o.slides,$t).children(":eq("+(slides-1)+")").css({position:"absolute",left:(-width)});
									}
									else if(times===1){
										$(o.slides,$t).children(":eq(0)").css({position:"absolute",left:0});
									}
								}
								$(o.slides,$t).animate({left: distance}, o.slidespeed,function(){
									if (times===0) {
										times = slides;
										$(o.slides,$t).children(":eq("+(slides-1)+")").css({position:"absolute",left:(slides*width-width)});
										$(o.slides,$t).css({left: -(slides*width-width)});
										$(o.slides,$t).children(":eq(0)").css({left:(slides*width)});
									}
									
									if (times===2 ){
										$(o.slides,$t).children(":eq(0)").css({position:"absolute",left:0});
									}
									else if (times===1){
										$(o.slides,$t).children(":eq("+ (slides-1) +")").css({position:"absolute",left:-width});
									}
									
									active = false;
								});
								break;
							case "fade":
								times = [times]*1;
								distance = (-(times*width-width));
								current(times);
								if(o.autoHeight){autoHeight(times);}
								$(o.slides,$t).children().fadeOut(o.fadespeed, function(){
									$(o.slides,$t).css({left: distance});
									$(o.slides,$t).children(":eq("+(slides-1)+")").css({left:slides*width-width});
									$(o.slides,$t).children(":eq(0)").css({left:0});
									if(times===slides){$(o.slides,$t).children(":eq(0)").css({left:(slides*width)});}
									if(times===1){$(o.slides,$t).children(":eq("+(slides-1)+")").css({ position:"absolute",left:-width});}
									$(o.slides,$t).children().fadeIn(o.fadespeed);
									active = false;
								});
								break; 
							default:
								break;
						}					
					}
				}
			);
		}
	});
	$.fn.loopedSlider.defaults = {
		container: ".slidescontainer", //Class/id of main container. You can use "#container" for an id.
		slides: ".slides", //Class/id of slide container. You can use "#slides" for an id.
		pagination: "pagination", //Class name of parent ul for numbered links. Don't add a "." here.
		containerClick: true, //Click slider to goto next slide? true/false
		containerover: true,
		containerout: true,
		autoStart: 0, //Set to positive number for true. This number will be the time between transitions.
		restart: 0, //Set to positive number for true. Sets time until autoStart is restarted.
		slidespeed: 300, //Speed of slide animation, 1000 = 1second.
		fadespeed: 500, //Speed of fade animation, 1000 = 1second.
		autoHeight: 0, //Set to positive number for true. This number will be the speed of the animation.
		addPagination: false //Add pagination links based on content? true/false
	};
});
