/*
 * A class to handle Transition events.
 */
var TransitionControllerEvents = {
		
};

function TransitionController()
{
	var _self = this;
	var _transitionsEnabled = true;
	
	//disable transitions globally
	_self.disableTransitions = function(options)
	{
		_transitionsEnabled = false;
	}
	_self.enableTransitions = function(options)
	{
		_transitionsEnabled = true;
	}
	_self.getTransitionsEnabled = function()
	{
		return _transitionsEnabled;
	}

	_self.init = function()
	{
		//scroll event
		$(window).bind('scrollHalt', onWindowScrollStop);
		$(window).bind('scroll', onScroll);
	}
	
	var waitForAnotherScrollTimer = 0;
	
	//Clear the timer that is waiting for another scroll on every scroll
	function onScroll()
	{
		if(waitForAnotherScrollTimer)
		{
			clearTimeout(waitForAnotherScrollTimer);
		}
	}
	
	function onWindowScrollStop() {
		var timer 		= 0,
			sections 	= $('.page');
		var onScrollPage = getSectionThatIsTheMostInView();
		if(onScrollPage.length == 0) return;
		if(window.location.toString().indexOf('id=') > -1) return;
		//set navigation in sidebar
		$('#sidebar .active').removeClass('active');
		$('#sidebar .' + onScrollPage.attr('id')).addClass('active');
		//This timer is cleared if a scroll happens, and should never fire
		waitForAnotherScrollTimer = setTimeout(function()
		{
			var page = getSectionThatIsTheMostInView();
			var sectionLbl = page.attr('id');
			if(!page) return;
			if(document.transitionsController && document.siteModel.currentSection != sectionLbl)
			{
				document.transitionsController.disableTransitions();
				if(document.siteModel.sectionOpenPage[sectionLbl])
				{
					var subpageLbl = '?subpage=';
					var location = "/#/" + sectionLbl + subpageLbl + document.siteModel.sectionOpenPage[sectionLbl];
					if(document.siteModel.sectionOpenDetailPageId[sectionLbl])
					{
						location + '&id=' + document.siteModel.sectionOpenDetailPageId[sectionLbl];
					}
					window.location = location;
				}
				else
				{
					window.location = "/#/" + sectionLbl;
				}
				setTimeout(function(){
					document.transitionsController.enableTransitions();
				}, 500);
			}
			
			if (sectionLbl != "careers") {
				resetCareers();
			}
			
		}, 500);
		
	}
	
	//new algorithm
	//of all that are visible
	//the top 2
	//whichever has more on screen
	
	function getSectionThatIsTheMostInView()
	{
		//algorithm:
		//of all that are visible
		//the top 2
		//whichever has more on screen
		var pagesOnScreen = $('.page').onScreen();
		var pageOnScreen = null;
		var win = $(window);
		if(pagesOnScreen.length > 1)
		{
			var lastHeightOnScreen = 0;
			for(var i = 0; i < 2; i++)
			{
				var page = pagesOnScreen.eq(i);
				var heightOnScreen = 0;
				if(page.viewportOffset().top > -1)
				{
					heightOnScreen = win.height() - page.viewportOffset().top
				}
				else
				{
					heightOnScreen = page.height() - Math.abs(page.viewportOffset().top);
				}
				if(page.height() < heightOnScreen)
				{
					heightOnScreen = page.height();
				}
				if(heightOnScreen > lastHeightOnScreen)
				{
					pageOnScreen = page;
				}
				lastHeightOnScreen = heightOnScreen;
			}
		}
		else
		{
			pageOnScreen = pagesOnScreen.eq(0);
		}
		return pageOnScreen;
	}
	
}




