/**
 * Text Resize
 *
 * Resize text of any element within a page, extensible and sexy
 * @author: Tim Connell, inspired by multiple plugins
 * @example: $("#resizable-area").textResize($("#content-tools"), {min: 0.83em, default: 1em, max: 2em});
 *
 */

(function($) {
	$.extend($.fn, {
		textResize : function(linkWrapper, options) {
			// Settings
			defaults = {
				min: "1",
				def: parseInt(this.css("font-size")),
				max: "2",
				minCaption: "Decrease Text Size",
				defCaption: "Reset Text Size",
				maxCaption: "Increase Text Size",
				steps: 3
			};
			var settings = $.extend(defaults, options),
				resizableArea = this,
				increments = parseInt((settings.max * settings.def) / (settings.steps + 1));

	
			// Create link elements
			var 
				linkItem = $('<li id="text-resize"></li>');
				minLink = $('<a href="#" title="Decrease Text Size" id="text-decrease">' + settings.minCaption + '</a>'),
				defLink = $('<a href="#" title="Reset Text Size" id="text-reset">' + settings.defCaption + '</a>'),
				maxLink = $('<a href="#" title="Increase Text Size" id="text-increase">' + settings.maxCaption + '</a>');
				
			linkItem
				.append(minLink)
				.append(defLink)
				.append(maxLink);
			linkWrapper.append(linkItem);
						
			// Have we got a cookie? Nom nom
			if ($.cookie != undefined) {
				savedFontSize = $.cookie('fontSize');
				if (savedFontSize != null) {
					resizableArea.css('font-size', parseInt(savedFontSize));
				}
			}
			
			$(resizableArea).textResizeCheckControls(settings, minLink, defLink, maxLink);			
			
			// Increase Font Size
			maxLink.click(function(){
				var currentFontSize = parseInt(resizableArea.css("font-size"));
				var newFontSize = currentFontSize + increments;

				if (currentFontSize < (settings.def * settings.max)) {
					resizableArea.css('font-size', parseInt(newFontSize));
					// Set Cookie
					$(document).textResizeSetCookie(newFontSize);
				}
				$(resizableArea).textResizeCheckControls(settings, minLink, defLink, maxLink);
				return false;
			});
			
			
			// Decrease Font Size
			minLink.click(function(){
				var currentFontSize = parseInt(resizableArea.css("font-size"));
				var newFontSize = currentFontSize - increments;

				if (currentFontSize > (settings.def * settings.min)) {
					resizableArea.css('font-size', parseInt(newFontSize));
					// Set Cookie
					$(document).textResizeSetCookie(newFontSize);
					// Call check to disable as appropriate
					$(resizableArea).textResizeCheckControls(settings, minLink, defLink, maxLink);
				}
				return false;
			});
			
			
			// Reset Font Size
			defLink.click(function(){
				$(resizableArea).css('font-size', settings.def);
				// Set Cookie
				$(document).textResizeSetCookie(settings.def);
				$(resizableArea).textResizeCheckControls(settings, minLink, defLink, maxLink);
			});
		},
		textResizeSetCookie : function(fontSize) {
			if ($.cookie != undefined) {
				$.cookie('fontSize', fontSize);
			}
		},
		textResizeCheckControls : function(settings, minLink, defLink, maxLink) {
			resizeableArea = this;
			currentFontSize = parseInt(resizeableArea.css("font-size"));
			
			minLink.removeClass("link-disabled");
			defLink.removeClass("link-disabled");
			maxLink.removeClass("link-disabled");
			
			if (currentFontSize <= (settings.def * settings.min)) {
				minLink.addClass("link-disabled");
			}
			if (currentFontSize == (settings.def)) {
				defLink.addClass("link-disabled");
			}
			if (currentFontSize >= (settings.def * settings.max)) {
				maxLink.addClass("link-disabled");
			}
		}
	})
})(jQuery);