/*
 * @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.
	 */
	 
// --------------------------------------------------- Functions	 
	
	

	 
	 
	function _setOption(passedValue, defaultValue) {
		return passedValue ? passedValue : defaultValue;
	}
	
	function _SetPageClass() {	
		affectedContainer.className = fontSizeClassArray[currentIndex]; //apply new class to document
		Utils.CreateCookie(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 _disableLink(){
		var linkPlus = document.getElementById('storyTools_fontPlus');
		var linkMinus = document.getElementById('storyTools_fontMinus');
		
		if(currentIndex == 0){
			linkMinus.className = linkClassName + ' disable';
			linkPlus.className = linkClassName;
		}
		else if(currentIndex == 2){
			linkPlus.className = linkClassName + ' disable';
			linkMinus.className = linkClassName;
		}
		else {
			linkPlus.className = linkClassName;
			linkMinus.className = linkClassName;
		}
	}
	
	function _ButtonClickEvent(e, originalThis) {
		//var theTarget = e.target ? e.target : e.srcElement;
		
		var relValue = originalThis.getAttribute('rel');
		
		if (relValue === 'plus') {
			_IncreaseClassNameIndex();
			_SetPageClass();
			_disableLink();
		}
		else if (relValue === 'minus') {
			_DecreasClassNameIndex();
			_SetPageClass();
			_disableLink();
		}
		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.ReadCookie(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");
			}		
		}
		_disableLink()
	};

	// ------------------------------------------------------------------------- Constructor	
	this.Init(linkClassName);
	
	

}
