/* 
 * fontScaler - flexible font-sizing plugin  
 * Examples and documentation at: http://www.marcup.nl/projects/fontScaler 
 * Version 0.1 (20/08/2009) * Copyright (c) 2009 Marc Bruisten 
 * Licensed under the GPL License: http://www.gnu.org/licenses/gpl.txt 
 * Requires: jQuery v1.3+ 
 */
 
 (function($) {

	$.fn.fontScaler = function(options) {
		var defaultSettings = {
			increment: 'fixed'					// fixed || variable
		, fixed: {								// fixed increment options
			size1: 62.5
			, size2: 75
			, size3: 100
			, id1: 'fs_normal'
			, id2: 'fs_medium'
			, id3: 'fs_large'
			, title1: 'normal'
			, title2: 'medium'
			, title3: 'large'
			, character: 'A'
		}
		, variable: {								// variable increment options
			step: 10						// variable increment value in percentages
			, id1: 'fs_decrease'
			, id2: 'fs_increase'
			, title1: 'decrease'
			, title2: 'increase'
			, character1: '-'
			, character2: '+'
		}
		, store: false						// store user font-size in cookie
		, target: eval(document.body)
		, containerclass: "fontScaler"
		, fx: "normal"						// normal || smooth
		, fxspeed: 100
		};

		if (options && options.fixed)
			options.fixed = $.extend({}, defaultSettings.fixed, options.fixed);

		if (options && options.variable)
			options.variable = $.extend({}, defaultSettings.variable, options.variable);

		var x = 0;
		x = x + 1;
		var settings = new Array();
		settings[x] = $.extend({}, defaultSettings, options);

		// increment constructor

		function newfontScaler(i) {

			var fixed = settings[x].fixed;
			var variable = settings[x].variable;

			if (settings[x].increment == "fixed") {
				var fsid = fixed["id" + i];
				var fstitle = fixed["title" + i];
				var fscharacter = fixed.character;
			}
			if (settings[x].increment == "variable") {
				var fsid = variable["id" + i];
				var fstitle = variable["title" + i];
				var fscharacter = variable["character" + i];
			}

			if ((settings[x].increment == "variable" && variable["id" + i] != null) || (settings[x].increment == "fixed" && fixed["id" + i] != null)) {
				return $(document.createElement('a'))
				.attr('href', 'javascript:void(0)')
				.addClass('fontScaler')
				.attr('id', fsid)
				.attr('title', fstitle)
				.append($(document.createTextNode(fscharacter)))
				.bind("click", function(e) { changeFontSize(i, e) })
			}
		}

		var fontSizeLinks = $(document.createElement('div'))
		.attr('class', settings[x].containerclass)
		.append(
			newfontScaler(1), newfontScaler(2), newfontScaler(3)
		);

		$(this).prepend(fontSizeLinks);
		
		// reset size if cookie is found
		if($.cookie('fontsize') != null)
		{
			changeFontSize(3, event);
		}


		// fontScaler function

		function changeFontSize(i, e) {

			i = i * 1;
			
			var target = settings[x].target;

			if (settings[x].increment == "fixed") {
				if (settings[x].fx == "normal")
					$(target).css('font-size', settings[x].fixed["size" + i] + '%');

				if (settings[x].fx == "smooth") {
					$(target).animate({
						fontSize: settings[x].fixed["size" + i] + '%'
					}, settings[x].fxspeed);
				}
			}

			if (settings[x].increment == "variable") {
				
				var pressedbutton = $(e.target);
				if (pressedbutton.hasClass("disabled")) {
					return false;
				}
				var currentSize = $(target).css('font-size').split("px")[0] * 1;

				if (i == 1) {
					var newSize = currentSize - ((settings[x].variable["step"] / 100) * currentSize);
				}
				if (i == 2) {
					var newSize = currentSize + ((settings[x].variable["step"] / 100) * currentSize);
					pressedbutton.siblings().removeClass("disabled");
				}
				if (settings[x].fx == "normal" && newSize > 10)
					$(target).css('font-size', newSize);
				if (settings[x].fx == "smooth" && newSize > 10) {
					$(target).animate({
						fontSize: newSize
					}, settings[x].fxspeed);
				}
				else
					pressedbutton.toggleClass("disabled");
			}

			if (settings[x].store == true) {
				createCookie('fontsize', (i));
			}
		}

/*
		var cookievalue = readCookie('fontsize')
		if (cookievalue != null)
			changeFontSize(cookievalue * 1);
*/

		// cookie functions
		function createCookie(name, value, days) {
			if (days) {
				var date = new Date();
				date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
				var expires = "; expires=" + date.toGMTString();
			}
			else var expires = "";
			document.cookie = name + "=" + value + expires + "; path=/";
		}

		function readCookie(name) {
			var nameEQ = name + "=";
			var ca = document.cookie.split(';');
			for (var i = 0; i < ca.length; i++) {
				var c = ca[i];
				while (c.charAt(0) == ' ') c = c.substring(1, c.length);
				if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
			}
			return null;
		}

		function eraseCookie(name) {
			createCookie(name, "", -1);
		}

	};
})(jQuery);