
Slideshow = {} 



$(window).resize(function() {
	
	$(Slideshow.slides).animate({left: $(Slideshow.viewPort).offset().left - $(Slideshow.currentSlide).position().left},0) 
});

Slideshow.init = function(slides, viewPort, options) {
	
	//document.getElementsByTagName('html').item(0).style.overflowX = "hidden";
	$(slides).parent().css({"overflowX": "hidden"});  
	
	
	if (options === undefined) options = {}
	options.transitionSpeed = (options.transitionSpeed === undefined) ? 1000 : options.transitionSpeed;
	options.intervalSpeed = (options.intervalSpeed === undefined) ? undefined : options.intervalSpeed;
	options.slideEase = (options.slideEase === undefined) ? "easeOutSine" : options.slideEase;
	options.previous = (options.previous === undefined) ? undefined : options.previous;
	options.next = (options.next === undefined) ? undefined : options.next;	
	options.spacing = (options.spacing === undefined) ? 0 : options.spacing;
	
	this.options = options;
	this.slides = slides;
	this.viewPort = viewPort;
	this.totalSlides = $(slides).children().size();
	this.startWidth = $(slides).width();
	
	//duplicate the slides and append them to the slides div
	this.slideGroup = $(this.slides).children()
	
	this.slideGroup.clone().appendTo($(this.slides));
	
	//set index to half of the number of slides so the show starts in the middle
	this.index = $(this.slides).children().size() / 2;
	
	this.applyStyles();
		
	this.start();
	
	$(".slideTabs a").click(Slideshow.changeTabs);
	$(".panels div").css({"display" : "none"});
	$(".panels div:first-child").css({"display" : "block"})

}

Slideshow.bindEvents = function() {
	
	if (Slideshow.options.next != undefined) {
		
		$(Slideshow.options.next).click(Slideshow.next)
		
	}
	
	if (Slideshow.options.previous != undefined) {
		
		$(Slideshow.options.previous).click(Slideshow.previous)
		
	}
	
	if (Slideshow.options.pause != undefined) {
		
		$(Slideshow.options.pause).click(Slideshow.pause)
		
	}
}

Slideshow.unbindEvents = function() {
	
	if (Slideshow.options.next != undefined) {
		
		$(Slideshow.options.next).unbind("click", Slideshow.next)
		
	}
	
	if (Slideshow.options.previous != undefined) {
		
		$(Slideshow.options.previous).unbind("click", Slideshow.previous)
		
	}
	
	if (Slideshow.options.pause != undefined) {
		
		$(Slideshow.options.pause).unbind("click", Slideshow.pause)
		
	}
}

Slideshow.start = function() {
	
	this.index = $(this.slides).children().size() / 2;
	
	this.currentSlide = $(this.slides).children().get(this.index);
	
	//a little hack to make offset() work with fade in and out
	$(this.slides).css({"visibility": "visible"}).fadeIn(0)
		
	//restart the timer
	this.timer = (this.options.intervalSpeed != undefined) ? setTimeout(this.next, this.options.intervalSpeed) : "";	
	
	$(this.slides).css({
				
		"left": $(this.viewPort).offset().left - $(this.currentSlide).position().left
		
	});
	
	
	
	
	//fade in the slides	
	$(this.slides).css({"visibility": "visible"}).fadeOut(0).fadeIn(this.options.transitionSpeed, function(){
		
		
		//fade in left/right buttons
		if (Slideshow.options.next != undefined) $(Slideshow.options.next).fadeTo(Slideshow.options.transitionSpeed, 1);
		if (Slideshow.options.previous != undefined) $(Slideshow.options.previous).fadeTo(Slideshow.options.transitionSpeed, 1);	
		
		Slideshow.bindEvents();	
				
	});		
		
	
}

Slideshow.applyStyles = function() {
	
	this.currentSlide = $(this.slides).children().get(this.index);
	var image = $(".image")
		
	$(this.viewPort).css({
		
		"height": $(this.viewPort).height(),
		"width": $(image).width(),
		"margin": "auto",
		"position": "relative" 
		
	})
	
	var w = 0;
			
	$('.slide').each(function() {
    	w += $(this).outerWidth(true);
	});
	
	var startX = $(this.viewPort).offset().left - ($(this.slides).width() / 2);
		
	$(this.slides).css({"width": w});
	$(this.slides).css({
		
		"position": "relative",
		"left": startX,
		"visibility": "hidden"
		
	});
	
	$(this.slides + " div").css({
	
		"float": "left",
		"position": "relative",
		
	});	

	
}

Slideshow.previous = function() {
	
	clearTimeout(Slideshow.timer)
	Slideshow.unbindEvents();
	
	//restart the timer
	if (Slideshow.index > 0) {
		
		Slideshow.index --;
		Slideshow.advance(Slideshow.index)
		Slideshow.timer = (Slideshow.options.intervalSpeed) ? setTimeout(Slideshow.next, Slideshow.options.intervalSpeed) : "";
				
	} else {
		
		Slideshow.timer = (Slideshow.options.intervalSpeed) ? setTimeout(Slideshow.next, Slideshow.options.intervalSpeed) : "";
	};
			
}

Slideshow.next = function() {	
	
	clearTimeout(Slideshow.timer);
	Slideshow.unbindEvents();
	
	//next slide
		
		//restart the timer
		Slideshow.timer = (Slideshow.options.intervalSpeed) ? setTimeout(Slideshow.next, Slideshow.options.intervalSpeed) : "";
		Slideshow.index ++;
		Slideshow.advance(Slideshow.index)
				
			
}

Slideshow.pause = function() {
	
	clearTimeout(Slideshow.timer);
	
}


Slideshow.advance = function(index) {
	
	
	
	this.currentSlide = $(this.slides).children().get(this.index);
	
	
		//move the slider
		$(Slideshow.slides).stop().animate({
			
			"left": $(Slideshow.viewPort).offset().left - $(Slideshow.currentSlide).position().left
			
		}, Slideshow.options.transitionSpeed, Slideshow.options.slideEase, Slideshow.endTransition)
		
	
	
	
}

Slideshow.endTransition = function() {
	
	Slideshow.bindEvents();
	

	
	if (Slideshow.index == $("#slideshow").children().size() - 1) {
	
		//duplicate the slides and append them to the slides div
		var newGroup = Slideshow.slideGroup.clone();
		
		newGroup.fadeTo(0,.01).appendTo($(Slideshow.slides)).fadeTo(Slideshow.options.transitionSpeed, 1)
		$(".slideTabs a").click(Slideshow.changeTabs);
		var w = 0;
		var i = 0;
		$(Slideshow.slides + ' div').each(function() {
			w += $(this).outerWidth(true);
			i ++;
		});
		
		$(Slideshow.slides).css({"width": w});
		
	}
	
	if (Slideshow.index == 0) {
		
		var newGroup = Slideshow.slideGroup.clone();
		
		
		newGroup.fadeTo(0,.01).prependTo($(Slideshow.slides)).fadeTo(1500, 1)
		$(".slideTabs a").click(Slideshow.changeTabs);
				
		var w = 0;
		var i = 0;
		$(Slideshow.slides + ' div').each(function() {
			w += $(this).outerWidth(true);
			i ++;
		});
		
		$(Slideshow.slides).css({"width": w});
		
		Slideshow.index = Slideshow.totalSlides;

		//move the slider
		$(Slideshow.slides).css({
			
			"left": $(Slideshow.viewPort).offset().left - $(Slideshow.currentSlide).position().left
			
		})
			
	
		
	}
	
}

Slideshow.changeTabs = function() {
		var index = $(this).parent().index();
		$(".slideTabs a").removeClass("selected");
		
		$(".slideTabs").each(function(){
			
			var currentButton = $(this).children().children().get(index);
			$(currentButton).addClass("selected");
			
		})
		
		$(".panels div").stop().fadeTo(Slideshow.options.transitionSpeed, 0, "easeOutSine", function(){
			
			$(".panels").each(function() {
			
			
				$($(this).children().get(index)).stop().fadeTo(Slideshow.options.transitionSpeed, 1, "easeInSine")
			
			
			})
			
		})
	
	}


