/**
 * zudolab TabContents
 *
 * @version    1
 * @copyright    (c)2008 Takeshi Takatsudo (http://zudolab.net/)
 * @license    MIT (http://www.opensource.org/licenses/mit-license.php)
 */

(function($){

	TabContents = function(selector,m_over,interval)
	{
		this.tab_timer=null;
		this.interval=interval;

		this.selector = selector;
		this.elemSets = [];
		if (m_over) {
			this.m_over=true;
		} else {
			this.m_over=false;
		}
		
		/* exec setup when onload */
		var self = this;
		$(function(){ self.setup(); });
	}
	
	TabContents.prototype.setup = function()
	{
		this.prepareSets();
		if(!this.elemSets) return;
		this.preploadTabImgs();
		this.enable1stSelectedSet();
		this.setEvents();
		if (this.interval>0) {
			this.tab_timer=setInterval($.bind(this.nextTab,this),this.interval);
		}
	}
	TabContents.prototype.prepareSets = function()
	{
		var self = this;
		var $elems = $(self.selector);
		if(!$elems) return;
		$elems.each(function(){ 
			var anchor = this;
			var $anchor = $(anchor);
			var $img = $(this).find("img").eq(0);
			var img = ($img.length==1) ? $img.get(0) : null;
			if(img){
				var imgSrc = $img.attr("src");
				var srcOff = imgSrc;
				var srcOn = imgSrc.replace(/\/off\//,"/active/");
			}
			var selected = $anchor.hasClass("showThis") ? true : false;
			$anchor.removeClass("showThis");
			var $content = $($anchor.attr("href"));
			self.elemSets.push({
				anchor: anchor,
				$content: $content,
				selected: selected,
				img: img,
				srcOff: srcOff ? srcOff: null,
				srcOn: srcOn ? srcOn : null
			});
		});
	}
	TabContents.prototype.setEvents = function()
	{
		var self = this;
		for(var i=0,set; set=this.elemSets[i]; i++){
			if (self.m_over) {
				var THIS=this;
				$(set.anchor).mouseover(function(event){
					if (THIS.interval>0) clearInterval(THIS.tab_timer);
					self.changeTabTo(this);
					if (THIS.interval>0) THIS.tab_timer=setInterval($.bind(THIS.nextTab,THIS),THIS.interval);
					return false;
				});
			}

			var THIS=this;
			$(set.anchor).click(function(event){
				if (THIS.interval>0) clearInterval(THIS.tab_timer);
				self.changeTabTo(this);
				if (THIS.interval>0) THIS.tab_timer=setInterval($.bind(THIS.nextTab,THIS),THIS.interval);
				return false;
			});
		}
	}
	TabContents.prototype.changeTabTo = function(anchor)
	{
		var newSet = this.getElemSetFromAnchor(anchor);
		var lastSet = this.getLastSelectedElemSet();
		if(newSet==lastSet) return;
		this.enableSet(newSet);
		this.disableSet(lastSet);
	}
	TabContents.prototype.nextTab = function()
	{
		clearInterval(this.tab_timer);
		var selected=0;
		for (var i=0; i<this.elemSets.length;i++) {
			if (this.elemSets[i].selected) {
				selected=i;
				break;
			}
		}

		var len=this.elemSets.length;

		selected++;
		if (selected<len) {
			var lastSet = this.elemSets[selected-1];
			var newSet =  this.elemSets[selected];

			this.enableSet(newSet);
			this.disableSet(lastSet);
		} else {
			selected=0;
			var lastSet = this.elemSets[len-1];
			var newSet = this.elemSets[0];

			this.enableSet(newSet);
			this.disableSet(lastSet);
		}

		this.tab_timer=setInterval($.bind(this.nextTab,this),this.interval);
	}
	TabContents.prototype.disableSet = function(set)
	{
		$(set.anchor).css("cursor","pointer");
		if(set.img) set.img.src = set.srcOff;
		$(set.anchor).removeClass("on");
		set.$content.hide();
		set.selected = false;
	}
	TabContents.prototype.enableSet = function(set)
	{
		$(set.anchor).css("cursor","default");
		if(set.img) set.img.src = set.srcOn;
		$(set.anchor).addClass("on");
		set.$content.show();
		set.selected = true;
	}
	TabContents.prototype.enable1stSelectedSet = function()
	{
		for(var i=0,set; set=this.elemSets[i]; i++){
			if(set.selected){
				this.enableSet(set);
				return;
			}
		}
	}
	TabContents.prototype.preploadTabImgs = function()
	{
		for(var i=0,set; set=this.elemSets[i]; i++){
			if(!set.img) continue;
			if(set.selected){
				(new Image).src = set.srcOff;
			}else{
				(new Image).src = set.srcOn;
			}
		}
	}
	TabContents.prototype.getElemSetFromAnchor = function(anchor)
	{
		for(var i=0,set; set=this.elemSets[i]; i++){
			if(set.anchor==anchor) return set;
		}
	}
	TabContents.prototype.getLastSelectedElemSet = function()
	{
		for(var i=0,set; set=this.elemSets[i]; i++){
			if(set.selected) return set;
		}
		return false
	}
})(jQuery);
