/**
 * Miranda 0.2
 *
 * Miranda – a very light carousel plugin for jQuery
 *	http://lab.morgante.net/miranda
 * 
 * Copyright (c) 2009 Morgante Pell (http://morgante.net)
 * Licensed under the MIT license
 *
 */

(function($) {
	
	$.fn.carousel = function(options) {
		if($(this).data("carousel") != null) {
			return 'this';
		}
		
		var obj= {
		}
	
		obj.options= $.extend({}, $.fn.carousel.defaults, options);
		obj.element= $(this);
		obj.items= obj.element.children('li');
		
		obj.dimensions = {
			item: {
				height: obj.items.eq(0).outerHeight(),
				width: obj.items.eq(0).outerWidth()
			},
			pane: {
				height: obj.items.eq(0).outerHeight(),
				width: obj.items.eq(0).outerWidth() * obj.options.number
			}
		}
		
		obj.container= $('<div></div>');
		
		if(obj.options.containerID != null) {
			obj.container.attr('id', obj.options.containerID);
		}
		
		obj.container.css({
			overflow: 'hidden',
			position: 'relative',
			height: obj.dimensions.pane.height,
			width: obj.dimensions.pane.width
		});
				
		obj.element.wrap(obj.container);
		
		obj.element.css({
			position: 'absolute',
			left: 0,
			top: 0,
			width: 100000
		});
	
		index= obj.options.initial;
		
		if(obj.items.filter('.active').length > 0) {
			index= obj.items.index(obj.items.filter('.active'));
		}
	
		$(this).data("carousel", obj);
		
		$(this).activate(index);
		
		if(obj.options.tabs != null) {
			obj.options.tabs.click(function() {
				index= obj.options.tabs.index($(this));
				
				obj.options.tabs.parents().removeClass('active');
				$(this).parent().addClass('active');
				
				obj.element.activate(index);
				
				return false;
			});
		}
		
		if(obj.options.next != null) {
			obj.options.next.click(function() {
				obj.element.activate('+1');
				
				return false;
			});
		}
		
		if(obj.options.previous != null) {
			obj.options.previous.click(function() {
				obj.element.activate('-1');
				
				return false;
			});
		}
	
		return this;
	}
	
	$.fn.activate = function(index) {
		var obj= $(this).data("carousel");
		
		var current= obj.items.index(obj.items.filter('.active'));
					
		if(index == '+1') {
			index = current + obj.options.number;
		} else if(index == '-1') {
			index = current - obj.options.number;
		}
		
		if(current == -1) {
			first= true;
		} else {
			first= false;
		}
		
		index= index;
				
		if(index < 0) {
			index = 0;
		} else if(index > (obj.items.length - obj.options.number)) {
			index = obj.items.length - 1;
		}
		
		if(obj.options.previous != null) {
			if(index < obj.options.number) {
				obj.options.previous.addClass('disabled');
			} else {
				obj.options.previous.removeClass('disabled');
			}
		}
				
		if(obj.options.next != null) {
			if(index > (obj.items.length - obj.options.number)) {
				obj.options.next.addClass('disabled');
			} else {
				obj.options.next.removeClass('disabled');
			}
		}
		
		index= Math.floor(index / obj.options.number);
										
		obj.items.removeClass('active');
		obj.items.eq(index * obj.options.number).addClass('active');

		obj.element.stop();
		
		if(first) {
			obj.element.css({left: '-' + (obj.dimensions.pane.width * index) + 'px'});
		} else {
			obj.element.animate({left: '-' + (obj.dimensions.pane.width * index) + 'px'}, obj.options.time);
		}
		
		
		return this;
		
		// obj.index= obj.index + 1;
	}
	
	$.fn.carousel.defaults = {
	    number: 1,
		initial: 0,
		time: 500,
		containerID: null
	};
	
})(jQuery);