(function($) {

$.fn.SlideShow = function(config) {
	var self = this;
	
	config.overlay	= config.overlay|| 'banner_overlay';
	config.slides	= config.slides	|| 'banner_slides';
	config.slide	= config.slide	|| 'banner_slide';
	
	this.$overlay	= $('.'+config.overlay, this);
	this.$slides	= $('.'+config.slides,	this);
	this.$slide		= $('.'+config.slide,	this);
	this.$image		= $('img:first',		this.$slide);
	
	this.objects	= config.objects|| new Array();
	this.url		= config.url	|| '#';
	this.speed		= config.speed	|| 300;
	
	this.curr 		= 0;
	this.tmp_speed	= this.speed;
	this.change		= false;
	this.interval	= null;
	this.count		= $('a', this.$slides).size(); 
	
	if(this.objects.length == 0) return;
	
	this.$image.load(function(){
		$(this).show().next().hide();
	});
	
	this.$image.next().load(function() {
		$(this).fadeIn(self.speed).prev().fadeOut(self.speed, function(){
			self.$image.attr('src', $(this).next().attr('src'));
			self.change = false;
		});
		
		var slide = self.objects[self.curr];
		
		$('.banner_title',	self.$overlay).text(slide.Apartment.name);
		$('.details_button',self.$overlay).attr('href','/'+self.url+'/'+slide.Apartment.id);
		
		$('a', self.$slides).removeClass('active');
		$('a:eq('+(self.curr+1)+')', self.$slides).addClass('active');
	});
	
	$('a', this.$slides).each(function(i){
		if (i > 0 && i < self.count) {
			$(this).click(function(){
				self.speed = self.tmp_speed;
				self.setSlide(i-1);
			});
		}		
	});
		
	this.setSlide = function(num) {
		if (this.change) return;
		
		num = num || 0;
		if (num >= this.objects.length || num < 0 || num >= this.count) num = 0;	
		
		var slide= this.objects[num];
		if (this.$image.next().attr('src') == slide.Image.src) return;
		
		this.curr 	= num;
		this.change = true;
		this.$image.next().attr('src', slide.Image.src);	
		
		$('.previous_slide',this.$slides).unbind('click').click(function(){ self.speed = self.tmp_speed; self.setSlide(num - 1); });
		$('.next_slide',	this.$slides).unbind('click').click(function(){ self.speed = self.tmp_speed; self.setSlide(num + 1); });
		
		clearInterval(this.interval);
		this.interval = setInterval(function(){ 
			if(self.change) return;
			var curr = parseInt($('.active', self.$slides).text()) || 0;
			self.speed = 2000;
			self.setSlide(curr);
		}, 6000);
	}
	
	this.setSlide();
	
	return this;
}

})(jQuery);


