/*===========================================
				TextResize
	Written by	:	Ben Daley
	For			:	Netbyte Internet Ltd
	Date		:	15/06/2007
	Version		:	1.0
	
	_________________USAGE_________________
	
	TextResize.create();
	
	Makes:
	<div id='TextResizeContainer'>
		<a id="txtSmaller" />
		<a id="txtMedium" class="user-text-size" />
		<a id="txtLarger" />
	</div>
	
	------------------------------------------
	
	TextResize.create(optionalArgumentsObj);
	
	Pass an anonymous arguments object.
	Note that size properties are in 'ems'
	EG.
	{container:"header", sml: .8, med: 1.2, lrg: 1.6}

===========================================*/

var TextResize = {
	container: null,
	size: 100,
	emdeddedStyle: null,
	smlSize: 62.5,
	medSize: 100,
	lrgSize: 120,

	// Constructor, pass an HTML container element for where to build the UI
	create: function()
	{
		if(!arguments.length || arguments[0]['container'])
		{
			var d = document.createElement('div')
			d.setAttribute('id', 'TextResizeContainer');
			var b = document.getElementsByTagName('body')[0];
			this.container = b.appendChild(d);
		}
		if(arguments.length)
		{
			var a = arguments[0];
			if(a['container']){this.container = document.getElementById(a['container']);};
			if(a['sml']){this.smlSize = a['sml'];};
			if(a['med']){this.medSize = a['med'];};
			if(a['lrg']){this.lrgSize = a['lrg'];};
		}
		
		
		
		var sml, med, lrg, n, label;
		
		if(document.cookie)
		{
			this.size = this.utils.getCookie('userTextSize');
		}else
		{
			this.size = this.medSize;
		}
		
		n = this.container;

		var s = document.createTextNode('A');
		var m = document.createTextNode('A');
		var l = document.createTextNode('A');
		
		sml = document.createElement('a');
		sml.setAttribute('id', 'txtSmaller');
		sml.setAttribute('href', 'javascript:TextResize.setSize(' + this.smlSize + ')');
		sml.setAttribute('title', 'Small font size');
		sml.appendChild(s);
		
		med = document.createElement('a');
		med.setAttribute('id', 'txtMedium');
		med.setAttribute('href', 'javascript:TextResize.setSize(' + this.medSize + ')');
		med.setAttribute('class', 'user-text-size');
		med.setAttribute('title', 'Normal font size');
		med.appendChild(m);
		
		lrg = document.createElement('a');
		lrg.setAttribute('id', 'txtLarger');
		lrg.setAttribute('href', 'javascript:TextResize.setSize(' + this.lrgSize + ')');
		lrg.setAttribute('title', 'Large font size');
		lrg.appendChild(l);
		
		label = document.createElement('span');
		label.setAttribute('id', 'trResize');
		var labeltxt = document.createTextNode('Text size:');
		label.appendChild(labeltxt);

		n.appendChild(sml);
		n.appendChild(med);
		n.appendChild(lrg);
		n.appendChild(label);
		
		this.updateSelection();
		this.writeCSS();
	},
	
	setSize: function(newSize)
	{
		this.writeCSS(newSize);
		this.persistSettings();
		this.updateSelection();
	},
	
	updateSelection: function()
	{
		var s = this.size;
		var links = this.container.getElementsByTagName('a');
		var ref, start, end;
		
		// Deselect the previous selection
		for(var i=0; i<links.length; i++)
		{
			ref = links[i];
			if(ref.className == 'user-text-size')
			{
				ref.className = '';
			}
		}
		// add the new selection
		for(var i=0; i<links.length; i++)
		{
			ref = String(links[i]);
			start = ref.indexOf('(');
			end = ref.indexOf(')');
			
			ref = Number(ref.substring(start+1, end));
			
			if(ref == s)
			{
				links[i].className = 'user-text-size';
				return;
			}
		}
	},
	
	writeCSS: function()
	{
		var css;
		var s;
		var h = document.getElementsByTagName('head')[0];
		
		if(!this.embeddedStyle || arguments.length == 0)
		{
			s = this.size;
		}else
		{
			h.removeChild(this.embeddedStyle);
			this.embeddedStyle = null;
			s = arguments[0];
			this.size = s;
		}
		
		css = document.createElement('style');
		css.setAttribute('type', 'text/css');
		css.setAttribute('media', 'screen');
		var rule = new String('body {' + 'font-size: ' + s + '%;' + '}');
		try
		{
			// good browsers
			var ruleNode = document.createTextNode(rule);
			css.appendChild(ruleNode);
		}
		catch(e)
		{
			// IE
			css.styleSheet.cssText = rule;
		}
		this.embeddedStyle = h.appendChild(css);
	},
	
	persistSettings: function()
	{
		var cd = new Date();
		var numDays = 28;
		cd.setTime(cd.getTime() + numDays * 24 * 60 * 60 * 1000);
		try
		{
			document.cookie = 'userTextSize=' + this.size + ';expires=' + cd.toGMTString();
		}
		catch(e)
		{
			alert('Please enable cookies in your browsers privacy settings.');
		}
	},
	
	// Utilities
	utils: 
	{
		getCookie: function(n)
		{
			var cd = new String(document.cookie);
			var cs = cd.indexOf(n) + n.length;
			var ce = cd.indexOf(';', cs);
			
			if(ce == -1)
			{
				ce = cd.length;
			}
			
			if(cd.indexOf(n) != -1)
			{
				return(cd.substring(cs+1, ce));
			}
			return(false);
		}
	}
};