/**
* Assign the view handler
*/

viewHandler = Home;

/**
* Creates a new object with methods used by the Home page
*
* @author				Matt Gifford
* @copyright			2008 Timeshifting Interactive Limited
*/
function Home()
	{
	// Step 1. Define Properties

	var _instance = this;
	var _newsContentHeight = 0;
	var _newsContentRange = 0;
	var _newsScrollbarGrabberSize = 0;
	var _newsScrollbarGrabberRange = 0;
	_grabberBeingDragged = false;		// global


	// Step 2. Define Public Methods

	/**
	* Sets up the initial page state and event handlers
	*/
	this.init = function()
		{
		// Call generic page init method
		this.base.init.call(this);

		// Initialize principles box
		this.initPrinciples();

		// Initialize news box
		this.initNews();
		}
	


	/**
	* Adds event handlers to display information breakout boxes
	*/
	this.initPrinciples = function()
		{
		var headings = document.getElementById('homePrinciples').getElementsByTagName('h3');
		for (var x = 0; x < headings.length; x++)
			{
			var anchor = headings[x].getElementsByTagName('a')[0];
			anchor.onmouseover = __eventHandlerUpdatePrincipleBox;
			}
		}

	/**
	* Initializes the news scrolling
	*/
	this.initNews = function()
		{
		// Calculate content size and range
		_newsContentHeight = parseInt(document.getElementById('newsContent').offsetHeight);
		_newsContentRange = (_newsContentHeight - 151) < 0 ? 0 : (_newsContentHeight - 151);

		// Calculate the grabber size and range
		var pages = _newsContentHeight / 151;
		pages = (pages < 1 ? 1 : pages);
		_newsScrollbarGrabberSize = 31;
		_newsScrollbarGrabberRange = 151 - _newsScrollbarGrabberSize;

		// Add event handlers for scrolling
		document.onmousemove = __eventHandlerScrollBarGrabberMove;
		document.onmouseup = __eventHandlerScrollBarGrabberUp;
		document.getElementById('newsGrabber').onmousedown = __eventHandlerScrollBarGrabberDown;


		// Set the grabber size and position
		document.getElementById('newsGrabber').style.top = '0px';
		document.getElementById('newsGrabber').style.height = _newsScrollbarGrabberSize + 'px';
		xhtml.grabberY = 0;
		xhtml.previousMouseY = 0;

		// Set the current location
		document.getElementById('newsContent').style.top = '0px';
		}


	/**
	* Updates the location of the scrollbar grabber and news content
	*/
	this.newsScroll = function()
		{
		if (_newsScrollbarGrabberRange == 0)
			{
			return;
			}

		// Range check grabber
		if (xhtml.grabberY < 0)
			{
			xhtml.grabberY = 0;
			}
		if (_newsScrollbarGrabberRange < xhtml.grabberY)
			{
			xhtml.grabberY = _newsScrollbarGrabberRange;
			}

		// Move the grabber
		document.getElementById('newsGrabber').style.top = xhtml.grabberY + 'px';

		// Move the content
		document.getElementById('newsContent').style.top = (parseInt((xhtml.grabberY / _newsScrollbarGrabberRange) * _newsContentRange) * -1) + 'px';
		}



	// Step 3. Define Private Methods

	/**
	* Event Handler: Displays the detail box for this heading
	*/
	function __eventHandlerUpdatePrincipleBox()
		{
		// Hide all currently displayed boxes
		var anchors = document.getElementById('homePrinciples').getElementsByTagName('a');
		for (var x = 0; x < anchors.length; x++)
			{
			anchors[x].className = anchors[x].className.replace(/\bactive\b/g, '');
			}
		var divs = document.getElementById('homePrinciples').getElementsByTagName('div');
		for (var x = 0; x < divs.length; x++)
			{
			divs[x].className = 'hidden';
			}
		
		// Make this heading and detail box active
		this.parentNode.parentNode.getElementsByTagName('div')[0].className = '';
		this.className = 'active';
		}


	/**
	* Starts the drag of the grabber
	*
	* @param		event		The browser event object
	*/
	function __eventHandlerScrollBarGrabberDown(event)
		{
		if (_grabberBeingDragged == true)
			{
			return;
			}
		else
			{
			_grabberBeingDragged = true;
			}

		// Get the event object if necessary
		event = !!event ? event : window.event;

		// Get the mouse location
		if(xhtml.isTrident == true)
			{
			xhtml.previousMouseY = window.event.clientY;
			}
		else
			{
			xhtml.previousMouseY = event.pageY;
			}

		// update the div position
		document.getElementById('newsGrabber').style.top = parseInt(xhtml.grabberY) + 'px';
		}



	/**
	* Starts the drag of the grabber
	*
	* @param		event		The browser event object
	*/
	function __eventHandlerScrollBarGrabberMove(event)
		{
		if (_grabberBeingDragged == false)
			{
			return;
			}

		// Get the event object if necessary
		event = !!event ? event : window.event;

		// Get the mouse location
		if(xhtml.isTrident == true)
			{
			var mouseY = window.event.clientY;
			}
		else
			{
			var mouseY = event.pageY;
			}

		// calculate offset and update div location vars
		xhtml.grabberY = (((mouseY * 1) - (xhtml.previousMouseY * 1)) * 1) + (xhtml.grabberY * 1);

		// update the stored mouse location
		xhtml.previousMouseY = mouseY;

		// move the grabber and the container
		xhtml.newsScroll();
		}


	/**
	* End the drag of the grabber
	*/
	function __eventHandlerScrollBarGrabberUp()
		{
		_grabberBeingDragged = false;
		}
	}

