
function Carousel(obj) {

	this.me = this;
	this._containerstr = "div.image-carousel";
	this._containerinnerstr = "div.carousel-inner";
	this._previousstr = "previous";
	this._nextstr = "next";
	this._disabledclass = "disabled";
	this._prev = {};
	this._next = {};
	this._items = {};
	this._scroller = {};
	this._itemscount = 0;
	this._itemwidth = 0;
	this._scrollwidth = 0;
	this._list = {};
	this._items = {};
	this._intervals = [];
	this._currentinterval = 0;
	this._animationduration = 500;

	this.init = function(obj) {
		
		me = obj.scroller;
		
		this._container = jQuery(this._containerstr);
		this._scroller = this._container.find(this._containerinnerstr);
		this._list = this._scroller.find("ol");
		this._items = this._list.children("li");
		this._itemwidth = obj.itemwidth;
		this._scrollwidth = this._items.length * this. _itemwidth;
		this._itemscount = this._items.length-1;
		for(var i=0;i<this._items.length;i++) {
			this._intervals.push(i*this._itemwidth);
		}
		
		this._list.css("width", this._scrollwidth);
		this._list.css("margin-left",this._intervals[this._currentinterval]);
		
		this.initButtons();
		this._previous = this._container.find("li#"+this._previousstr+" a")
		this._next = this._container.find("li#"+this._nextstr+" a")
		this.activateButtons();
		this.goToInterval(0);

	};

	this.initButtons = function() {
		var html = "<div class=\"carousel-navigation\">"
		html += "<ul>";
		html += "<li id=\"previous\"><a href=\"#\">Previous</a></li>";
		html += "<li id=\"next\"><a href=\"#\">Next</a></li>";
		html += "</ul>";
		html += "</div>";
		jQuery(this._container).prepend(html);
	};
	
	this.next = function() {
		//alert("next")
		this._currentinterval++
		this.goToInterval(this._currentinterval);
	};
	
	this.previous = function() {
		//alert("previous")
		this._currentinterval--;
		this.goToInterval(this._currentinterval);
	};

	this.activateButtons = function() {
		//alert("activating");
		if (this._currentinterval != 0) {
			this._previous.removeClass(this._disabledclass)
			this._previous.click(function(){
				me.previous();
				return false;
			});
		} else {
			this._previous.addClass(this._disabledclass)
			this._previous.click(function(){
				return false;
			});
		}
		if (this._currentinterval != this._itemscount) {
			this._next.removeClass(this._disabledclass)
			this._next.click(function(){
				me.next();
				return false;
			});
		} else {
			this._next.addClass(this._disabledclass)
			this._next.click(function(){
				return false;
			});
		}
		//alert(this._currentinterval + " of " + this._itemscount)
	};
	
	this.unbindButtons = function() {
		this._previous.unbind("click");
		this._next.unbind("click");
	};

	this.deactivateButtons = function() {
		this.unbindButtons();
	};

}

Carousel.prototype.goToInterval = function(obj,index) {
	//alert("go to interval:" + index + "("+obj._intervals[index]+")");
	obj.deactivateButtons()
	var params = {
		marginLeft: -obj._intervals[index]
	}
	var options = {
		duration: obj._animationduration,
		easing: "swing",
		callback: obj.activateButtons()
	}
	//alert(obj._list[0]);
	obj._list.animate(params, options);
};