Equens.NewsToggle = function(node, jsClass) {
	this.rootNode = node;
	this.jsClass = jsClass;
	this.items = new Array();
	this.head = null;
	this.currentItemIndex = 0;
	this.maxItemIndex = 0;
	this.timer =  null;
	this.timerSec = 5000;
	this.animating = false;
	this.init();
}

Equens.NewsToggle.prototype.init = function() {
	var rootNode = this.rootNode;
	$(rootNode).addClass(this.jsClass);
	this.boxContent = $(".content", rootNode);
	this.scrollBox = $(".scroll", rootNode);
	this.previousButton = document.createElement("a");
	this.previousButton.className = "previous";
	this.previousButton.innerHTML = "<span>Previous</span>";
	this.previousButton.href = "";
	$(this.previousButton).bind("click", {newsToggle: this}, function(e){e.data.newsToggle.loadItem(true); return false;});
	$(rootNode).append(this.previousButton);
	this.nextButton = document.createElement("a");
	this.nextButton.className = "next";
	this.nextButton.href = "";
	this.nextButton.innerHTML = "<span>Next</span>";
	$(this.nextButton).bind("click", {newsToggle: this}, function(e){e.data.newsToggle.loadItem(); return false;});
	$(rootNode).append(this.nextButton);
	$(this.boxContent).bind("mouseover", {newsToggle: this}, function(e){e.data.newsToggle.onMouseOver(); return false;});
	$(this.boxContent).bind("mouseout", {newsToggle: this}, function(e){e.data.newsToggle.onMouseOut(); return false;});
	
	
	var headers = $("h2", rootNode);
	var lists = $("ul", rootNode);
	var len = lists.length;
	var tmpItems = new Array();
	var len = lists.length;
	var hasDates = false;
	for (var i = len; i--;) {
		var listItems = $("li", lists[i]);
		var listlen = listItems.length;
		for (var j = listlen; j--;) {
			var itemDateSpan = $("span", listItems[j]).get(0);
			if (itemDateSpan) {hasDates = true};
			var itemDate = itemDateSpan ? itemDateSpan.innerHTML : null;
			var itemAnchor = $("a", listItems[j]);
			var itemTitle = headers[i].innerHTML;
			var newsToggleItem = new Equens.NewsToggleItem(itemDate,itemAnchor,itemTitle);
			this.items.push(newsToggleItem);
		}
	}
	$(this.scrollBox).empty();
	if (hasDates) {this.items.sort(this.sortDate)};
	
	this.headers = document.createElement("div");
	this.headers.className = "headers";
	this.head = document.createElement("h2");
	$(this.headers).append(this.head);
	$(this.scrollBox).append(this.headers);
	
	var len = this.items.length;
	var startlen = len;
	var listNode = document.createElement("ul");
	for (var i = len; i--;) {
		var listItemNode = document.createElement("li");
		if (i != startlen-1) {
			$(listItemNode).css("opacity","0");
		}
		else {
			this.head.innerHTML = this.items[i].itemTitle;
		}
		$(listItemNode).append(this.items[i].itemAnchor);
		$(listNode).append(listItemNode);
		this.items[i].itemNode = listItemNode;
	}
	this.maxItemIndex = this.currentItemIndex = this.items.length-1;
	$(this.scrollBox).append(listNode);
	var _this = this;
	this.timer = setTimeout(function(){_this.runTimer()},this.timerSec);
}

Equens.NewsToggle.prototype.replaceHead = function(text, previous) {
	var newhead = document.createElement("h2");
	newhead.innerHTML = text;
	$(this.headers).append(newhead);
	$(newhead).css("opacity","0");
	var width = $(this.headers).innerWidth();
	var headLeft = previous ? width + "px" : "-"+width+"px";
	var newheadLeft = previous ? "-"+width+"px" : width + "px";
	$(newhead).css("margin-left",newheadLeft);
	$(newhead).animate({marginLeft: "0", opacity: 1}, 1000 );
	$(this.head).animate({marginLeft: headLeft, opacity: 0}, 1000, function(){$(this).remove()} );
	this.head = newhead;
}

Equens.NewsToggle.prototype.runTimer = function(e) {
	this.loadItem();
	var _this = this;
	this.timer = setTimeout(function(e){_this.runTimer()},this.timerSec);
}

Equens.NewsToggle.prototype.loadItem = function(previous) {
	if (!this.animating){
		clearTimeout(this.timer);
		var _this = this;
		this.animating = true;
		var currentItem = this.items[this.currentItemIndex].itemNode;
		var width = $(currentItem).innerWidth();
		var itemLeft = previous ? width + "px" : "-"+width+"px";
		var newitemLeft = previous ? "-"+width+"px" : width + "px";
		var newItemIndex = previous ? (this.currentItemIndex == this.maxItemIndex ? 0 : this.currentItemIndex + 1) : (this.currentItemIndex == 0 ? this.maxItemIndex : this.currentItemIndex - 1);
		var nextItem = this.items[newItemIndex].itemNode;
		$(nextItem).css("margin-left",newitemLeft);
		$(currentItem).animate({marginLeft: itemLeft, opacity: 0}, 1000 );
		$(nextItem).animate({marginLeft: "0", opacity: 1}, 1000, function(){_this.animating = false} );
		this.currentItemIndex = newItemIndex;
		if (this.head.innerHTML != this.items[this.currentItemIndex].itemTitle) {
			this.replaceHead(this.items[this.currentItemIndex].itemTitle, previous);
		}
	}
}

Equens.NewsToggle.prototype.onMouseOver = function() {
	clearTimeout(this.timer);
}
Equens.NewsToggle.prototype.onMouseOut = function() {
	var _this = this;
	this.timer = setTimeout(function(e){_this.runTimer()},this.timerSec);
}

Equens.NewsToggle.prototype.sortDate = function(a,b) {
	return a.itemDate - b.itemDate;
}

Equens.NewsToggleItem = function(itemDate,itemAnchor,itemTitle) {
	this.itemDate = itemDate;
	this.itemAnchor = itemAnchor;
	this.itemTitle = itemTitle;
	this.itemNode = null;
}