/*
    TEXT RESIZER FOR LISA LIVE TEMPLATES V. 1.0
    REQUIRES JQUERY
    
    
    (Written for jQuery 1.2.3)
*/

// attaches a function on document ready
$(function() 
{
    TextResizer();
});

// handles text resizing functionality
function TextResizer() 
{
    var container = $("#header-controls .fontsize"); //change the selector into whatever your class or id is, if not default.
    if (container.length == 0) return false;

    container.append(generateMarkup());

    var aMakeSmaller = container.find("a.makeTextSmaller");
    var aMakeBigger = container.find("a.makeTextBigger");
    var liNormal = container.find("ul.selector li.liNormal");
    var liBigger = container.find("ul.selector li.liBigger");
    var liBiggest = container.find("ul.selector li.liBiggest");
    var liCollection = container.find("ul.selector li");
    var timer = null;
    var onDropdown = false;
    isDDon = false;


	// check initial settings from cookie and ajust controls accordingly
    var cookie = readCookie("lisa-fontsize");
    if (cookie) 
    {
    	setSize(cookie)

    	if (cookie == 2)
    	{
    		aMakeBigger.addClass("inactive");
    		selectLi(liBiggest);
    	}
    	else if (cookie == 0)
    	{
    		aMakeSmaller.addClass("inactive");
    		selectLi(liNormal);
    	}
    	else if (cookie == 1)
    	{
    		selectLi(liBigger);
    	}
    }

	// attach events onclick on makeSmaller link
    aMakeSmaller.click(function()
    {
    	if (getSize() == 1)
    	{
    		setSize(0);
    		$(this).addClass("inactive");
    		selectLi(liNormal);
    		if (isDDon) turnOffDD();
    	}
    	if (getSize() == 2)
    	{
    		setSize(1);
    		aMakeBigger.removeClass("inactive");
    		selectLi(liBigger);
    		if (isDDon) turnOffDD();
    	}

    	return false;
    });

	// attach events onclick on makebigger link
    aMakeBigger.click(function()
    {
    	if (!getSize())
    	{
    		setSize(1);
    		aMakeSmaller.removeClass("inactive");
    		selectLi(liBigger);
    		if (isDDon) turnOffDD();
    	}
    	else if (getSize() == 1)
    	{
    		setSize(2);
    		$(this).addClass("inactive");
    		selectLi(liBiggest);
    		if (isDDon) turnOffDD();
    	}

    	return false;
    });

	// attach events on click on dropdown menu
    liCollection.click(function()
    {
    	if ($(this).hasClass("active") && !isDDon)
    	{
    		toggleDD($(this), "on");

    		// handle dropdown menu events
    		ulDropdown = container.find("ul.dropdown");
    		var liSubcollection = container.find("ul.dropdown li");

    		liSubcollection.click(function()
    		{
    			if ($(this).hasClass("liNormal"))
    			{
    				setSize(0);
    				aMakeSmaller.addClass("inactive");
    				aMakeBigger.removeClass("inactive");
    				selectLi(liNormal);
    				if (isDDon) turnOffDD();
    			}
    			if ($(this).hasClass("liBigger"))
    			{
    				setSize(1);
    				aMakeSmaller.removeClass("inactive");
    				aMakeBigger.removeClass("inactive");
    				selectLi(liBigger);
    				if (isDDon) turnOffDD();
    			}
    			if ($(this).hasClass("liBiggest"))
    			{
    				setSize(2);
    				aMakeBigger.addClass("inactive");
    				aMakeSmaller.removeClass("inactive");
    				selectLi(liBiggest);
    				if (isDDon) turnOffDD();
    			}
    		});

			// turns off dropdown if you don't click anyhting on it, works together with liCollection.hover below
    		ulDropdown.hover(
    			function()
    			{
    				if (timer && isDDon) clearTimeout(timer);
    				onDropdown = true;
    			},
    			function()
    			{
    				if (isDDon) timer = setTimeout(function() { ulDropdown.fadeOut("normal", turnOffDD); }, 1000);
    				onDropdown = false;
    			}
    		);
    	}
    	else if ($(this).hasClass("active") && isDDon)
    	{
    		toggleDD($(this), "off");
    	}
    });

    // turns off dropdown if you don't click anyhting on it, works together with ulDropdown.hover above
    liCollection.hover(
		function()
		{
			if (timer && isDDon) clearTimeout(timer);
		},
		function()
		{
			if (isDDon && !onDropdown) timer = setTimeout(function() { ulDropdown.fadeOut("normal", turnOffDD); }, 1000);
		}
	);
}


/*********************************
	Helper functions
*********************************/

// turns dropdown on or off
function toggleDD(node, toggler)
{
	if (toggler == "on")
	{
		var newUl = node.parent().clone();
		$(newUl[0]).removeClass("selector").addClass("dropdown");
		$(newUl[0]).children().removeClass("active");
		$(newUl[0]).children().removeClass("hover");
		
		$(".text-resize ul.selector").after(newUl);
		isDDon = true;
	}
	else
	{
		turnOffDD();
	}
}

// turns dropdown off
function turnOffDD()
{
	$('.text-resize ul.dropdown').remove();
	isDDon = false;
}

// adds the active class to the correct li
function selectLi(liToSelect)
{
	$(".text-resize ul.selector li").each(function()
	{
		$(this).removeClass("active");
	});

	$(liToSelect).addClass("active");
}

// functions to set size class on body
function getSize()
{
	var body = $('body');
	
	if (body.hasClass('textsize1')) return 1;
	if (body.hasClass('textsize2')) return 2;
	
	return null;
}

function setSize(size)
{
	var body = $('body');

	if (size == 1) body.addClass('textsize1').removeClass('textsize2');
	else if (size == 2) body.addClass('textsize2').removeClass('textsize1');
	else body.removeClass('textsize2').removeClass('textsize1');

	createCookie("lisa-fontsize", size, 365);
}
// end functions to set size


// this function generates the markup needed for the text-resizer
function generateMarkup()
{
	// create container div
	var divContainer = document.createElement("div");
	$(divContainer).addClass("text-resize");

	// create link that makes text smaller
	var aMakeSmaller = document.createElement("a");
	$(aMakeSmaller).addClass("makeTextSmaller");
	$(aMakeSmaller).text("a-");

	// create link that makes text bigger
	var aMakeBigger = document.createElement("a");
	$(aMakeBigger).addClass("makeTextBigger");
	$(aMakeBigger).text("A+");

	// dummy container for dropdown and selector lists to maintain position
	var divPositioner = document.createElement("div");
	
	// create list of textsize values and attach actions on events as neccessary
	var ulList = document.createElement("ul");
	$(ulList).addClass("selector");
	
	var liNormal = document.createElement("li");
	$(liNormal).text("Venjulegt letur");
	$(liNormal).addClass("liNormal");
	$(liNormal).hover(
		function() { $(liNormal).addClass("hover"); },
		function() { $(liNormal).removeClass("hover"); }
	);
	
	var liBigger = document.createElement("li");
	$(liBigger).text("Stærra letur");
	$(liBigger).addClass("liBigger");
	$(liBigger).hover(
		function() { $(liBigger).addClass("hover"); },
		function() { $(liBigger).removeClass("hover"); }
	);
	
	var liBiggest = document.createElement("li");
	$(liBiggest).text("Stærsta letur");
	$(liBiggest).addClass("liBiggest");
	$(liBiggest).hover(
		function() { $(liBiggest).addClass("hover"); },
		function() { $(liBiggest).removeClass("hover"); }
	);

	ulList.appendChild(liNormal);
	ulList.appendChild(liBigger);
	ulList.appendChild(liBiggest);
	divPositioner.appendChild(ulList);

	// append all controls to container div
	$(divContainer).append(aMakeSmaller);
	$(divContainer).append(divPositioner);
	$(divContainer).append(aMakeBigger);
	
	return divContainer;
}


// 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 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;
}
//end cookie functions