/**
 * LaPrème Carousel
 *
 * @copyright LaPrème Nijmegen
 * @author Leon van der Veen
 */
var lpCarousel = new lpClass({
	/**
	 * Options
	 */
	'defaultOptions': {
		'slideSpeed': 4000, // 4 sec
		'activeClass': 'active',
		'imageWidth': 200
	},
	
	/**
	 * Init
	 *
	 * @param string Images id
	 * @param string Controls id
	 * @param object Options
	 */
	'initialize': function(images_, controls_, options)
	{
		// Set options
		this.setOptions(options);
		
		// Set images and controls
		this.images = jQuery('#' + images_);
		this.controls = jQuery('#' + controls_);
		
		// Build slide array
		this.slide = [];
		var images = jQuery('#' + images_ + ' > img');
		var imagesCount = images.length;
		var controls = jQuery('#' + controls_ + ' > li');
		var controlsCount = controls.length;
		this.active = 0;
		var count = Math.min(imagesCount, controlsCount);
		if (count <= 1)
		{
			return;
		}
		for (var i = 0; i < count; ++i)
		{
			// Events
			jQuery(controls[i]).click(jQuery.proxy(function()
			{
				// Timer pauze
				this.t.timerPause = true;
				
				// Activate
				this.t.activate(this.i);
			}, {'t': this, 'i': i}));
			
			// Add to slide
			var item = {
				'image': jQuery(images[i]),
				'control': jQuery(controls[i])
			};
			this.slide.push(item);
			
			// Add extra image for last
			if (i == (count - 1))
			{
				jQuery(images[0]).clone().appendTo(this.images);
			}
		}
		
		// Fix active
		controls.removeClass(this.options.activeClass);
		
		// Activate active one
		this.activate(this.active);
		
		// Rotate timer
		this.timerPause = false;
		setTimeout(jQuery.proxy(this.onInterval, this), this.options.slideSpeed);
	},
	
	/**
	 * On interval
	 */
	'onInterval': function()
	{
		// Next timer
		if (this.timerPause)
		{
			this.timerPause = false;
			setTimeout(jQuery.proxy(this.onInterval, this), 2 * this.options.slideSpeed);
			return;
		}
		
		// Activate next
		var next = this.active + 1;
		if (next >= this.slide.length)
		{
			next = 0;
		}
		this.activate(next);
		
		// Next timer
		setTimeout(jQuery.proxy(this.onInterval, this), this.options.slideSpeed);
	},
	
	/**
	 * Activate
	 * 
	 * @param int Index
	 * @return This
	 */
	'activate': function(index)
	{
		// Came from last?
		if (this.active == (this.slide.length - 1) && index == 0)
		{
			// Fix control
			var slideToIndex = this.active + 1;
			this.slide[this.active].control.removeClass(this.options.activeClass);
			this.active = index;
			this.slide[this.active].control.addClass(this.options.activeClass);
			
			// Slide to image
			this.images.clearQueue().animate({
				'marginLeft': -(slideToIndex * this.options.imageWidth)
			}, 1000, jQuery.proxy(function()
			{
				this.images.css({
					'marginLeft': 0
				});
			}, this));
		}
		else
		{
			// Fix control
			this.slide[this.active].control.removeClass(this.options.activeClass);
			this.active = index;
			this.slide[this.active].control.addClass(this.options.activeClass);
			
			// Slide to image
			this.images.clearQueue().animate({
				'marginLeft': -(index * this.options.imageWidth)
			}, 1000);
		}
	}
}, []);

