// JavaScript Document
// Heinle's function for retrieving a cookie.
function getCookie(name){
	var cname = name + "=";
	var dc = document.cookie;
	if (dc.length > 0) {
		begin = dc.indexOf(cname);
		if (begin != -1) {
			begin += cname.length;
			end = dc.indexOf(";", begin);
			if (end == -1) end = dc.length;
			return unescape(dc.substring(begin, end));
		}
	}
	return null;
}

// An adaptation of Dorcht's function for setting a cookie.
function setCookie(name, value, expires, path, domain, secure) {
	document.cookie = name + "=" + escape(value) +
		((expires == null) ? "" : "; expires=" + expires.toGMTString()) +
		((path == null) ? "" : "; path=" + path) +
		((domain == null) ? "" : "; domain=" + domain) +
		((secure == null) ? "" : "; secure");
}

// An adaptation of Dorcht's function for deleting a cookie.
function delCookie (name,path,domain) {
	if (getCookie(name)) {
		document.cookie = name + "=" +
			((path == null) ? "" : "; path=" + path) +
			((domain == null) ? "" : "; domain=" + domain) +
			"; expires=Thu, 01-Jan-70 00:00:01 GMT";
	}
}

// Save styles at first run
var currSize = 0;
var tags = new Array ( "p", "li", "h1", "h2", "h3", "h4", "h5", "h6", "a", "span", "td", "div" );

function cascadedstyle(el, cssproperty, csspropertyNS){
//	if (!el) return 0;
	if (el.currentStyle) //if IE5+
		return el.currentStyle[cssproperty];
	else if (window.getComputedStyle){ //if NS6+
		var elstyle=window.getComputedStyle(el, "");
		return elstyle.getPropertyValue(csspropertyNS);
	}
}

function saveStyles () {
	var i = 0;
	var j = 0;
	var fs = 0;
	for (i = 0; i < tags.length; i++) {
		var arrElements = document.getElementsByTagName(tags[i]);
		for (j = 0; j < arrElements.length; j++) {
			var element = arrElements[j];
			fs = parseInt(cascadedstyle(element, 'fontSize', 'font-size'));
			lh = parseInt(cascadedstyle(element, 'lineHeight', 'line-height'));
			element.setAttribute('fs', fs);
			element.setAttribute('lh', !isNaN(lh) ? lh : Math.round(fs * 1.2));
		}
	}
	
	document.getElementById('specialLinks').setAttribute('fixedsize', 'fixedsize');
	var elements = document.getElementById('specialLinks').getElementsByTagName('*');
	for (var i = 0; i < elements.length; i++) {
		elements[i].setAttribute('fixedsize', 'fixedsize');
	}
}

//- change font sizes
function setSize(size) {
	if (size < -9) size = -9;
	ratio = 1 + (size / 10);
	
	var fs = 0;
	var lh = 0;
	for (i = 0; i < tags.length; i++) {
		var arrElements = document.getElementsByTagName(tags[i]);
		for (j = 0; j < arrElements.length; j++) {
			var element = arrElements[j];
			//alert(element.getAttribute('fixedsize'));
			if (element.getAttribute('fixedsize') != 'fixedsize') {
				fs = parseInt(element.getAttribute('fs')) * ratio;
				lh = parseInt(element.getAttribute('lh')) * ratio;
				element.style.fontSize = fs + 'px';
				element.style.lineHeight = lh + 'px';
			}
		}
	}
	
	currSize = size;
	setCookie('fontSize', currSize);
}

// - save colors
var colorChangers = new Array('one', 'two', 'three', 'four', 'five');

function saveColors() {
	for (i = 0; i < colorChangers.length; i++) {
		var element = document.getElementById('color-' + colorChangers[i])
		var fg = cascadedstyle(element, 'color', 'color');
		var bg = cascadedstyle(element, 'backgroundColor', 'background-color');
		element.setAttribute('fg', fg);
		element.setAttribute('bg', bg);
	}
}

// - change Colors
var divs = new Array('graybox', 'center', 'footer', 'lupabox', 'topnav');

function setColor(id) {
	var element = document.getElementById(id);
	var fg = element.getAttribute('fg');
	var bg = element.getAttribute('bg');
	
	document.body.style.backgroundColor = bg;

	for (var i = 0; i < divs.length; i++) {
		if (document.getElementById(divs[i]) == null) continue;
		
		document.getElementById(divs[i]).style.color = fg;
		document.getElementById(divs[i]).style.backgroundColor = bg;
		document.getElementById(divs[i]).style.backgroundImage = 'none';

		for (var j = 0; j < tags.length; j++) {
			var elements = document.getElementById(divs[i]).getElementsByTagName(tags[j]);
			for (var k = 0; k < elements.length; k++) {
				elements[k].style.color = fg;
				elements[k].style.backgroundColor = bg;
				elements[k].style.backgroundImage = 'none';
			}
		}
	}

	var elements = document.getElementsByTagName('div');
	for (var k = 0; k < elements.length; k++) {
		elements[k].style.color = fg;
	}

	setCookie('color', id);
}

window.onload = function() 
{
	saveStyles();
	saveColors();
	
	if (getCookie('fontSize')) setSize(parseInt(getCookie('fontSize')));
	if (getCookie('color')) setColor(getCookie('color'));
	
	document.getElementById('text-smaller').onclick = function() { setSize(currSize-1); return false; };
	document.getElementById('text-normal').onclick = function() { setSize(0); return false; };
	document.getElementById('text-larger').onclick = function() { setSize(currSize+1); return false; };

	for (i = 0; i < colorChangers.length; i++) {
		var element = document.getElementById('color-' + colorChangers[i]);
		element.onclick = function() { setColor(this.id); return false; };
	}
	
	document.getElementById('default-color').onclick = function() { 
		setCookie('color', '');
		location.reload(true);
		return false;
	};
}