// ================================================================================================

/**
 * @author SDPsM (http://alest.cc)
 * @requires jQuery
 */

// ================================================================================================
if (typeof sdpsmCache == 'undefined')
	var sdpsmCache = {};

// ================================================================================================

function sdpsmTab(/* Array */params) {

	do {
		this.unique_id = 'sdpsmTab_' + Math.round(Math.random() * 7777777);
	} while (typeof sdpsmCache[this.unique_id] == undefined);
	sdpsmCache[this.unique_id] = this;

	this.params = {
		title :'',
		href :'#',
		html :'',
		index :0,
		parent :false,
		is_selected :false,
		speedActive :277,
		speedPassive :277,
		speedSelected :277,
		widthActive :133,
		widthPassive :133,
		widthSelected :133
	};

	for ( var key in this.params) {
		this.params[key] = params[key] || this.params[key];
	}

	this.obj = $('<div>').addClass('l-tab');

	this.objCatcher = $('<div>')
			.css( {
				display :'block',
				background :'url(/root/null.gif)',
				// marginLeft : 150,
				position :'absolute',
				width :133,
				height :42,
				zIndex :777
			})
			.addClass('b-tab')
			.html(
					'<a href="' + this.params.href + '" style="display:block;width:133px;height:47px" class="b-tabber-a"></a>')
			.appendTo(this.obj);

	this.objActive = $('<div>').addClass('b-tab').addClass('b-tab-active').css(
			{
				display :'none',
				position :'absolute',
				width :0,
				zIndex :33
			}).html('<span>' + this.params.title + '</span>')
			.appendTo(this.obj);
	/*
	 * this.objSelected = $('<div>').addClass('b-tab').addClass('b-tab-selected')
	 * .html('<a href="' + this.params.href + '">' + this.params.title + '</a>').css({
	 * display : 'none', position : 'absolute', width : 0, zIndex : 33
	 * }).appendTo(this.obj);
	 */
	this.objPassive = $('<div>').addClass('b-tab').addClass('b-tab-passive')
			.css( {
				display :'none',
				position :'absolute',
				width :0,
				zIndex :33
			}).html('<span>' + this.params.title + '</span>')
			.appendTo(this.obj);

	this.objCatcher.get(0).unique_id = this.unique_id;
	this.objActive.get(0).unique_id = this.unique_id;
	this.objPassive.get(0).unique_id = this.unique_id;
	// this.objSelected.get(0).unique_id = this.unique_id;

	// this.obj.empty();
	// this.obj.prepend(this.objCatcher);
	// alert(this.obj.html());
	this.status = false;
	this.switchStatus();
}

// ================================================================================================

sdpsmTab.prototype.switchStatus = function(/* String */status) {
	status = status || this.status || 'passive';

	if (status == 'passive' && this.params.is_selected) {
		status = 'selected';
	} else if (status == 'selected' && !this.params.is_selected) {
		status = 'passive';
	}

	switch (status) {
	case 'selected':
		this.objPassive.addClass('b-tab-selected').removeClass('b-tab-passive');
		status = 'passive';
		break;
	case 'passive':
		this.objPassive.addClass('b-tab-passive').removeClass('b-tab-selected');
		break;
	}

	if (this.status == status)
		return false;

	// $('.l-view').prepend('<br />' + this.status + " &rarr; " + status);

	switch (this.status) {
	case 'active': // -->
		switch (status) {
		case 'passive':
			this.objPassive.css( {
				position :'absolute',
				zIndex :77
			});
			this.objActive.css( {
				// position : 'relative',
				zIndex :33,
				display :'block'
			});
			this.objPassive.stop();
			this.objPassive.animate( {
				width :this.params.widthPassive
			}, this.params.speedPassive, 'linear', function() {
				sdpsmCache[this.unique_id].objPassive.css( {
					// position : 'relative',
						zIndex :33
					});
				sdpsmCache[this.unique_id].objActive.css( {
					display :'none'
				});
			});
			break;
		/*
		 * case 'selected' : this.objSelected.css({ position : 'absolute' }); if
		 * (parseInt(this.objSelected.css('width')) > this.params.widthSelected) {
		 * this.objSelected.css({ width : this.params.widthSelected }); }
		 * this.objActive.css({ position : 'relative', display : 'block' });
		 * this.objSelected.stop(); this.objSelected.animate({ width :
		 * this.params.widthSelected }, this.params.speedSelected, 'linear',
		 * function() { sdpsmCache[this.unique_id].objSelected.css({ position :
		 * 'relative' }); sdpsmCache[this.unique_id].objActive.css({ display :
		 * 'none' }); }); break;
		 */
		}
		break;

	case 'passive': // <--
		switch (status) {
		case 'active':
			this.objPassive.css( {
				zIndex :77
			});
			if (parseInt(this.objPassive.css('width')) > this.params.widthPassive) {
				this.objPassive.css( {
					width :this.params.widthPassive
				});
			}

			this.objActive.css( {
				// position : 'relative',
				display :'block',
				zIndex :33,
				width :this.params.widthActive
			});

			this.objPassive.stop();
			this.objPassive.animate( {
				width :0
			}, this.params.speedPassive, 'linear', function() {
				sdpsmCache[this.unique_id].objPassive.css( {
					display :'none'
				});
				sdpsmCache[this.unique_id].objActive.css( {
					// position : 'relative',
						zIndex :33
					});
			});
			break;
		/*
		 * case 'selected' : this.objPassive.css({ position : 'absolute' }); if
		 * (parseInt(this.objPassive.css('width')) > this.params.widthPassive) {
		 * this.objPassive.css({ width : this.params.widthPassive }); }
		 * this.objSelected.css({ position : 'relative', display : 'block',
		 * width : this.params.widthSelected });
		 * 
		 * this.objPassive.stop(); this.objPassive.animate({ width : 0 },
		 * this.params.speedPassive, 'linear', function() {
		 * sdpsmCache[this.unique_id].objPassive.css({ display : 'none', width :
		 * 0 }); sdpsmCache[this.unique_id].objSelected.css({ position :
		 * 'relative' }); }); break;
		 */
		}
		break;
	/*
	 * case 'selected' : switch (status) { case 'active' : // <--
	 * this.objSelected.css({ position : 'absolute' }); if
	 * (parseInt(this.objSelected.css('width')) > this.params.widthSelected) {
	 * this.objSelected.css({ width : this.params.widthSelected }); }
	 * this.objActive.css({ position : 'relative', display : 'block', width :
	 * this.params.widthActive });
	 * 
	 * this.objSelected.stop(); this.objSelected.animate({ width : 0 },
	 * this.params.speedSelected, 'linear', function() {
	 * sdpsmCache[this.unique_id].objSelected.css({ display : 'none' }); });
	 * break; case 'passive' : // <-- this.objPassive.css({ position :
	 * 'absolute' }); if (parseInt(this.objPassive.css('width')) >
	 * this.params.widthPassive) { this.objPassive.css({ width :
	 * this.params.widthPassive }); } this.objSelected.css({ position :
	 * 'relative', display : 'block', width : this.params.widthSelected });
	 * 
	 * this.objPassive.stop(); this.objPassive.animate({ width :
	 * this.params.widthPassive }, this.params.speedPassive, 'linear',
	 * function() { sdpsmCache[this.unique_id].objSelected.css({ display :
	 * 'none' }); sdpsmCache[this.unique_id].objPassive.css({ position :
	 * 'relative', display : 'block' }); }); break; } break;
	 */
	default:
		switch (status) {
		case 'passive':
			this.objPassive.css( {
				// position : 'relative',
				zIndex :33,
				display :'block',
				width :this.params.widthPassive
			});
			break;
		case 'active':
			this.objActive.css( {
				// position : 'relative',
				zIndex :33,
				display :'block',
				width :this.params.widthActive
			});
			break;
		/*
		 * case 'selected' : this.objSelected.css({ // position : 'relative',
		 * zIndex : 33, display : 'block', width : this.params.widthSelected });
		 * break;
		 */
		}
		break;
	}
	this.status = status;

	return false;
}

// ================================================================================================

function sdpsmTabber(/* String */id) {
	this.obj = $(id);
	if (!this.obj.length)
		return false;

	do {
		this.unique_id = 'sdpsmTabber_' + Math.round(Math.random() * 7777777);
	} while (typeof sdpsmCache[this.unique_id] == undefined);
	sdpsmCache[this.unique_id] = this;

	this.tabs = [];
	this.selectedTab = -1;
	/*
	 * this.obj.html('<div class="b-view-border-top"></div>' + '<div
	 * class="b-view-border-bottom"></div>' + '<div
	 * class="b-view-border-left"></div>' + '<div class="b-view-border-right"></div>');
	 */
	this.obj.get(0).unique_id = this.unique_id;

	/*
	 * this.objView = $('<div>').addClass('l-view').addClass('fl').appendTo(
	 * this.obj);
	 */
	this.objView = $('#bTaberView');

	/*
	 * this.objNavigator = $('<div>').addClass('l-tabs').addClass('fl').appendTo(
	 * this.obj);
	 */
	this.objNavigator = $('#bTaberTabs').empty();
	if (!this.objNavigator.length)
		return false;

	this.timer = false;
	this.objView.get(0).unique_id = this.unique_id;

	this.startTimer();

	return false;
}

// ================================================================================================

sdpsmTabber.prototype.nextTab = function() {
	this.showTab(++this.selectedTab);
}

// ================================================================================================

sdpsmTabber.prototype.resetTabs = function() {
	this.stopTimer();
}

// ================================================================================================

sdpsmTabber.prototype.startTimer = function() {
	this.timer = window.setInterval(
			'sdpsmCache.' + this.unique_id + '.nextTab();', 5000);

}

// ================================================================================================

sdpsmTabber.prototype.stopTimer = function() {
	if (this.timer) {
		window.clearInterval(this.timer);
	}
}

// ================================================================================================

sdpsmTabber.prototype.addTab = function(/* Array */params) {
	params['parent'] = this;
	params['index'] = this.tabs.length;
	var tab = new sdpsmTab(params);
	this.tabs.push(tab);
	this.updateTabs();
}

// ================================================================================================

sdpsmTabber.prototype.removeTab = function(/* Integer */num) {
	this.tabs[num].destruct();
	this.tabs = this.tabs.splice(num, 1);
	for ( var i = num; i < this.tabs.length; i++) {
		this.tabs[i].params.index = i;
	}
}

// ================================================================================================

sdpsmTabber.prototype.showTab = function(/* Integer */num) {

	this.selectedTab = num % this.tabs.length;
	this.tabs[this.selectedTab].params.is_selected = true;

	for ( var i = 0; i < this.tabs.length; i++) {
		if (i != this.selectedTab) {
			this.tabs[i].params.is_selected = false;
		}
		this.tabs[i].switchStatus();
	}

	this.objView.stop();
	this.objView
			.animate(
					{
						opacity :0
					},
					100,
					"linear",
					function() {
						sdpsmCache[this.unique_id].objView
								.html(sdpsmCache[this.unique_id].tabs[sdpsmCache[this.unique_id].selectedTab].params.html);
						sdpsmCache[this.unique_id].objView.animate( {
							opacity :1
						}, 100);
					});

	// this.objView.html(this.tabs[this.selectedTab].params.html);
}

// ================================================================================================

sdpsmTabber.prototype.updateTabs = function() {
	this.objNavigator.empty();
	for ( var i = 0; i < this.tabs.length; i++) {
		this.objNavigator.append(this.tabs[i].obj);
		this.tabs[i].objCatcher.mouseover( function(e) {
			/*
			 * if (e.target.className != 'b-tabber-a') return false;
			 */

			sdpsmCache[this.unique_id].switchStatus('active');
			sdpsmCache[this.unique_id].params.parent
					.showTab(sdpsmCache[this.unique_id].params.index);
			sdpsmCache[this.unique_id].params.parent.resetTabs();
		});
		this.tabs[i].objCatcher.mouseout( function(e) {
			var me = $(this);
			var offset = me.offset();
			/*
			 * sdpsmCache[this.unique_id].params.parent.objView .html(offset.top + "
			 * &rarr; " + e.pageY + "&larr;" + (offset.top + me.height()) + "<br />" +
			 * offset.left + " &rarr; " + e.pageX + "&larr;" + (offset.left +
			 * me.width()));
			 */
			if (offset.top < e.pageY && offset.top + me.height() > e.pageY
					&& offset.left < e.pageX
					&& offset.left + me.width() > e.pageX) {
				return false;
			}
			sdpsmCache[this.unique_id].switchStatus('passive');
			sdpsmCache[this.unique_id].params.parent.startTimer();
		});
	}

	this.objNavigator
			.append('');
	return false;
}

// ================================================================================================

$( function() {
	var sdpsmTabberObj = new sdpsmTabber('#bTaber');
	sdpsmTabberObj
			.addTab( {
				title :'Actyon',
				html :'<img src="/root/big-banner/actyon.jpg" width="787" height="314" alt="" />',
				href :'/cars/actyon.php'
			});
	sdpsmTabberObj
			.addTab( {
				title :'Sports',
				html :'<img src="/root/big-banner/actyonsports.jpg" width="787" height="314" alt="" />',
				href :'/cars/actyon-sports.php'
			});
	sdpsmTabberObj
			.addTab( {
				title :'Rexton II',
				html :'<img src="/root/big-banner/rexton2.jpg" width="787" height="314" alt="" />',
				href :'/cars/rexton-ii.php'
			});
	sdpsmTabberObj
			.addTab( {
				title :'Korando',
				html :'<img src="/root/big-banner/korando.jpg" width="787" height="314" alt="" />',
				href :'/cars/korando.php'
			});
	sdpsmTabberObj
			.addTab( {
				title :'New Kyron',
				html :'<img src="/root/big-banner/kyron.jpg" width="787" height="314" alt="" />',
				href :'/cars/new-kyron.php'
			});
	sdpsmTabberObj
			.addTab( {
				title :'Rodius',
				html :'<img src="/root/big-banner/rodius.jpg" width="787" height="314" alt="" />',
				href :'/cars/rodius.php'
			});
	sdpsmTabberObj.showTab(Math.round(Math.random()
			* (sdpsmTabberObj.tabs.length - 1)));
});

