/*
 * @author Mark White & Pat Sanden
 *
 * Requires (in dependancy order)
 * --------
 * - /js/lib/fairfax/utils.js
 *
 */

function FontSizeChanger (options)
{	
	
	if (options === undefined)
	{
		options = {};	
	}


// ----------------------------------------------------------------------------------------------------- Private

// ------------------------------------------------------------------------- Variables

	// Get a reference to this object since inner functions are annonymous
	var that = this;

	var cookieName =         _setOption(options.cookieName,          'textSize'                                 );
	
	var fontSizeClassArray = _setOption(options.fontSizeClassArray, ['small-font', 'medium-font', 'large-font'] );
	var currentIndex = 0;
	
	var linkClassName =      _setOption(options.linkClassName,       'font-changer-link'                        );
	
	
	var affectedContainer =  _setOption(options.affectedContainer,   document.documentElement                   );

// ------------------------------------------------------------------------- Functions

	/*
	 * Initilises object variables with the passed value if
	 * specified, otherwise the default.
	 */
	function _setOption(passedValue, defaultValue)
	{
		return passedValue ? passedValue : defaultValue;
	}
	
	/*
	 *
	 */
	function _SetPageClass()
	{	
		affectedContainer.className = fontSizeClassArray[currentIndex]; //apply new class to document
		Utils.SetCookie(cookieName, currentIndex, 30); //remember new class added to document for 30 days
	}
	
	/*
	 *
	 */
	function _SetIndex(index)
	{
		currentIndex = index;
		_CheckIndexBounds();
	}
	
	/*
	 *
	 */
	function _IncreaseClassNameIndex()
	{
		currentIndex++;
		_CheckIndexBounds();
	}
	
	/*
	 *
	 */
	function _DecreasClassNameIndex()
	{
		currentIndex--;
		_CheckIndexBounds();
	}
	
	/*
	 *
	 */
	function _CheckIndexBounds()
	{
		if (currentIndex >= fontSizeClassArray.length)
		{
			currentIndex = fontSizeClassArray.length - 1;
		}
		
		if (currentIndex < 0)
		{
			currentIndex = 0;
		}
	}
	
	/*
	 *
	 */
	function _ButtonClickEvent(e, originalThis)
	{
		//var theTarget = e.target ? e.target : e.srcElement;
		var relValue = originalThis.getAttribute('rel');
		
		if (relValue === 'plus')
		{
			_IncreaseClassNameIndex();
			_SetPageClass();
		}
		else if (relValue === 'minus')
		{
			_DecreasClassNameIndex();
			_SetPageClass();
		}
		else if (!isNaN(parseInt(relValue, 10)))
		{
			_SetIndex(parseInt(relValue, 10));
			_SetPageClass();
		}
					
		return false;
	}
	
// ----------------------------------------------------------------------------------------------------- Public

// ------------------------------------------------------------------------- Functions


	this.Init = function (targetClass)
	{
		var allLinks = document.getElementsByTagName("a");	
				
		var persistentIndex = Utils.GetCookie(cookieName);	
				
		if (persistentIndex && !isNaN(parseInt(persistentIndex, 10)))
		{
			_SetIndex(persistentIndex);
			_SetPageClass(); //apply persisted class to document
		}
			
		for (var i = 0; i < allLinks.length; i++)
		{
			var currentLink = allLinks[i];
			
			if (Utils.HasClassName(currentLink, targetClass))
			{
				currentLink.onclick = Utils.BindAsEventListenerWithOriginalThis(this, _ButtonClickEvent, "blah", "so", "me");
			}		
		}
		
	};

	// ------------------------------------------------------------------------- Constructor	
	this.Init(linkClassName);
	
	

}