var jTourNav;
var jTourActiveAnim = false;

jQuery.fn.jTour = function(){
	jTourNav = $(this);													/* sets a global variable to identify the jTourNav and href/id linking */
	initMarkup($(this));												/* setup jTour wrappers */
	activateTab($(this).find('a:eq(0)'));								/* active first tab */
	$(this).find('a').click(tabClick);									/* jTour click event handler */
	$('.jTourNext a').click(function(){
		if($(jTourNav).find('.active').is('li:last-child')){
			$(jTourNav).find('a:eq(0)').trigger('click');
			return(false);
		} else {
			$(jTourNav).find('.active').next().find('a').trigger('click');	/* jTour next functionality */
			return(false);
		}
	});
	$('.jTourPrev a').click(function(){
		if($(jTourNav).find('.active').is('li:first-child')){
			$(jTourNav).find('li:last a').trigger('click');
			return(false);
		} else {
			$(jTourNav).find('.active').prev().find('a').trigger('click');	/* jTour previous functionality */
			return(false);
		}
	});
};

function tabClick() {
	if (jTourActiveAnim == false) {
		jTourActiveAnim = true;
		var fragA = $(jTourNav).find('.active a').attr('href');
		var fragB = $(this).attr('href');
		
		fragA = substringAtPound(fragA);
		fragB = substringAtPound(fragB);
		
		activateTab($(this));
		slide(fragA, fragB, 150);
	}
	return(false);
};

/*	initMarkup(elem)
	This function wraps page fragments in jTour markup and creates prev/next links. */
function initMarkup(elem){
	$(elem).after('<div class=\"jTourView\"><div class=\"jTourContainer\"></div></div>');
	$('a', elem).each(function(x){
		var aHref = substringAtPound($(this).attr('href'));
		$(aHref).appendTo('.jTourContainer');
		$(this).parents('li').addClass('jTourTab'+x);
	});
	jQuery('.jTourView').before('<div class=\"jTourPrev jTourButton\"><a href=\"#\"><span>'+previousLabel+'</span></a></div><div class=\"jTourNext  jTourButton\"><a href=\"#\"><span>'+nextLabel+'</span><span class="nextSection"></span></a></div>');
};

/*	activateTab(elem)
	This function applies a class of .active to elem and removes it from all siblings. */
function activateTab(elem){
	$(elem).parent().siblings().removeClass('active').addClass('inactive');
	$(elem).parent().removeClass('inactive').addClass('active');
	$($(elem).attr('href')).siblings().removeClass('active').addClass('inactive');
	$($(elem).attr('href')).removeClass('inactive').addClass('active');
	updateNextButton(elem);
	updatePrevButton(elem);
};

function updateNextButton(elem){
	var nextItem = elem.parents('li').next('li');
	if(nextItem.text() == ''){
		nextItem = $('#jTourNav li:eq(0)');
		$('.jTourNext').addClass('jTourDisabled');
	} else {
		$('.jTourNext').removeClass('jTourDisabled');
	}
	$('.jTourNext a .nextSection').html();
	$('.jTourNext a .nextSection').html(nextItem.text());
};

function updatePrevButton(elem){
	var prevItem = elem.parents('li').prev('li');
	if(prevItem.text() == ''){
		prevItem = $('#jTourNav li:last-child');
		$('.jTourPrev').addClass('jTourDisabled');
	} else {
		$('.jTourPrev').removeClass('jTourDisabled');
	}
};

function slide(fragA, fragB, slideDuration){
	var posAx = $(fragA).getX();
	var posBx = $(fragB).getX();
	var containerOffsetX = parseInt($(fragA).parent().css('left'));
	var paneOffsetX = posAx - posBx;
	var slideX = containerOffsetX + paneOffsetX;
	
	$(fragA).parent().animate({left: slideX}, slideDuration, function() {
		$(fragA).parent().css('left', slideX);
		setTimeout('jTourActiveAnim = false', 10);
	});
};

function substringAtPound(str){
	var poundIndex = str.indexOf('#');
	return(str.substr(poundIndex));
};

jQuery.fn.getX = function(){
	obj = jQuery(this).get(0);
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return curleft;
};