/*-------------------------------------------------------------------
Accessibility Toolbar
---------------------------------------------------------------------*/

//Start config-----------------------------------------------------------------------------------------------
var atb_content 					= "accessToolbarContainer";	//ID of page element containing toolbar
var atb_debug_element_id			= "debug"; 			//Element to display begugging info. If it does not exist it will be created dynamically 

//fontSize config
var atb_fontsize_debug 				= false;			//Display debugging information on setting font size
var atb_fontsize_applyto 			= "docbody";		//ID of page element holding content
var atb_fontsize_cookiename 		= "fontSize_cms";		//Cookie name under which to store font size
var atb_fontsize_cookielifetime 	= 365;				//Lifetime (days) of above cookie
var atb_fontsize_default 			= 1.0;				//Default font size in em
var atb_fontsize_max 				= 1.6;				//Maximum size allowed in em
var atb_fontsize_min 				= 0.8;				//Minimim size allowed in em

//PageStyle config
var atb_pagestyle_cookiename 		= "pageStyle_cms";		//Cookie name under which to store page style
var atb_pagestyle_cookielifetime 	= 365;				//Lifetime (days) of above cookie
var atb_pagestyle_linkprefix		= "lnkPageStyle_"	//Switcher link ID prefix
var atb_pagestyle_link_activeclass	= "hlite"			//CSS class to be applied to the active style sheet link
//End config-------------------------------------------------------------------------------------------------



/*-------------------------------------------------------------------
Cookie functions
Code by Paul Sowden. 
http://www.alistapart.com/stories/alternate/
---------------------------------------------------------------------*/
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;
}

/*-------------------------------------------------------------------
Event Handling
---------------------------------------------------------------------*/
function addLoadHandler(h){
	if(h) {
		if(!document.loadHandlers) {
			document.loadHandlers = new Array();
			document.loadHandlers[0] = h;
			document.lastLoadHandler = 0;
		}
		else {
			document.lastLoadHandler++;
			document.loadHandlers[document.lastLoadHandler] = h;
		}
	}
}

function initLoadEvents() {
	var l=document.lastLoadHandler;
	document.lastLoadHandler = -1;
	for(var i=0; i<=l; i++) {
		var h = document.loadHandlers[i];
		if(typeof(h)!='function') {
			var bPar = (h.indexOf('(')==-1);
			eval(h+(bPar ? '();' : ';'));
		}
		else {
			h();
		}
	}
}

/*-------------------------------------------------------------------
Font Resize Functions
---------------------------------------------------------------------*/

function fontResizeBy(amount) {
	var cookie = readCookie(atb_fontsize_cookiename);
	var cursize, newsize;
	
	if(cookie) { cursize = parseFloat(cookie); }
	else { cursize = atb_fontsize_default; }
		
	cursize = Math.round(cursize * 10) / 10; //round to 1dp
	
	newsize = cursize+amount;
	newsize = fontCheckSize(newsize);		//check size is allowed	
	newsize = Math.round(newsize * 10) / 10; //round to 1dp
		
	createCookie(atb_fontsize_cookiename, newsize, atb_fontsize_cookielifetime);		//Save newsize to cookie
	document.getElementById(atb_fontsize_applyto).style.fontSize = newsize + "em";		//Apply newsize to document
	
	if (atb_fontsize_debug) {
		debug("Debug: [cookie=" +cookie+ "]; [cursize=" +cursize+ "]; [newsize=" +newsize+ "]<br>", false);
	}
}

function fontResizeTo() {
	var args = fontResizeTo.arguments;
	var newsize = atb_fontsize_default;
	if (args.length > 0) { newsize = args[0]; }
	
	newsize = fontCheckSize(newsize);		//check size is allowed
	newsize = Math.round(newsize * 10) / 10; //round to 1dp
	
	createCookie(atb_fontsize_cookiename, newsize, atb_fontsize_cookielifetime);		//Save newsize to cookie
	document.getElementById(atb_fontsize_applyto).style.fontSize = newsize + "em";		//Apply newsize to document
	
	if (atb_fontsize_debug) {
		debug("Debug: [newsize=" +newsize+ "]<br>", false);
	}
}

function fontCheckSize(size) {
	if (size > atb_fontsize_max) { 
		return atb_fontsize_max;
	}
	else if (size < atb_fontsize_min) { 
		return atb_fontsize_min;
	}
	else {
		return size	
	}
}

/*-------------------------------------------------------------------
Style Switcher Functions
Code by Paul Sowden. 
http://www.alistapart.com/stories/alternate/
---------------------------------------------------------------------*/

function setActiveStyleSheet(title) {
	var i, a, main;
	for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
		if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
			a.disabled = true;
			if (document.getElementById(atb_pagestyle_linkprefix + a.getAttribute("title"))) {
				document.getElementById(atb_pagestyle_linkprefix + a.getAttribute("title")).className = null;
			}
			if(a.getAttribute("title") == title) {
				a.disabled = false;
				if (document.getElementById(atb_pagestyle_linkprefix + a.getAttribute("title"))) {
					document.getElementById(atb_pagestyle_linkprefix + a.getAttribute("title")).className = atb_pagestyle_link_activeclass;
				}
				createCookie(atb_pagestyle_cookiename, title, atb_pagestyle_cookielifetime);
			}
		}
	}
}

function getActiveStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && !a.disabled) return a.getAttribute("title");
  }
  return null;
}

function getPreferredStyleSheet() {
  var i, a;
  for(i=0; (a = document.getElementsByTagName("link")[i]); i++) {
    if(a.getAttribute("rel").indexOf("style") != -1
       && a.getAttribute("rel").indexOf("alt") == -1
       && a.getAttribute("title")
       ) return a.getAttribute("title");
  }
  return null;
}

/*-------------------------------------------------------------------
Debugging
---------------------------------------------------------------------*/
function debug(msg, append) {
	if (!document.getElementById(atb_debug_element_id)) {
		var div = document.getElementById(atb_content);
		var newnode = document.createElement("p");
		newnode.id = atb_debug_element_id;
		newnode.innerHTML = msg;
		div.appendChild(newnode);
	}
	else {
		if (append) {
			document.getElementById(atb_debug_element_id).innerHTML += msg;
		}
		else {
			document.getElementById(atb_debug_element_id).innerHTML = msg;
		}
	}
}

/*-------------------------------------------------------------------
Code entry point
---------------------------------------------------------------------*/

addLoadHandler(
	function(e) {
		var cookie = readCookie(atb_pagestyle_cookiename);
		var title = cookie ? cookie : getPreferredStyleSheet();
		setActiveStyleSheet(title);
	}
);

addLoadHandler(fontResizeBy(0));

addLoadHandler(
	function(e) {
		document.getElementById(atb_content).style.display = "block";
	}
);

addLoadHandler(window.onload);
window.onload = initLoadEvents;
