/*********************************
// Version 1.0
// last edited 8/11 by DSJ
*********************************/



/*********************************
Global variables
*********************************/
var prefsLoaded = false;
var str_current_layout = 'fixed';
var str_current_fontsize = '100%';
var int_stylerule_count = 0;



/*********************************
Adapted scripts
*********************************/

/*	
	dynamicCSS.js v1.0 <http://www.bobbyvandersluis.com/articles/dynamicCSS.php>
	Copyright 2005 Bobby van der Sluis
	This software is licensed under the CC-GNU LGPL <http://creativecommons.org/licenses/LGPL/2.1/>
*/
function createStyleRule(selector, declaration) {

	if (!document.getElementsByTagName || !(document.createElement || document.createElementNS)) return;
	var agt = navigator.userAgent.toLowerCase();
	var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
	var is_iewin = (is_ie && (agt.indexOf("win") != -1));
	var is_iemac = (is_ie && (agt.indexOf("mac") != -1));
	if (is_iemac) return; // script doesn't work properly in IE/Mac
	var head = document.getElementsByTagName("head")[0]; 
	var style = (typeof document.createElementNS != "undefined") ?  document.createElementNS("http://www.w3.org/1999/xhtml", "style") : document.createElement("style");
	if (!is_iewin) {
		var styleRule = document.createTextNode(selector + " {" + declaration + "}");
		style.appendChild(styleRule); // bugs in IE/Win
	}
	style.setAttribute("type", "text/css");
	style.setAttribute("media", "screen"); 
	head.appendChild(style);
	if (is_iewin && document.styleSheets && document.styleSheets.length > 0) {
		var lastStyle = document.styleSheets[document.styleSheets.length - 1];
		if (typeof lastStyle.addRule == "object") { // bugs in IE/Mac and Safari
			lastStyle.addRule(selector, declaration);
		}
	}
	int_stylerule_count = int_stylerule_count + 1;
}


/*	
	Save layout and font size to cookies
*/
function saveSettings()
{
  createCookie("layout", str_current_layout, 365);
  createCookie("fontsize", str_current_fontsize, 365);
   // credit: adapted from http://arstechnica.com/Templates/ArsTechnica/uiTools.js
}


//Style Sheet Switcher version 1.0 Nov 9th, 2005
//Author: Dynamic Drive: http://www.dynamicdrive.com
//Usage terms: http://www.dynamicdrive.com/notice.htm
function setStylesheet(title) {
	var i, cacheobj
	for(i=0; (cacheobj=document.getElementsByTagName("link")[i]); i++) {
		if(cacheobj.getAttribute("rel").indexOf("style") != -1 && cacheobj.getAttribute("title")) {
		cacheobj.disabled = true
		if(cacheobj.getAttribute("title") == title)
			cacheobj.disabled = false //enable chosen style sheet
		}
	}
}


/*	
	Save layout and font size to cookies
*/
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=/";
  // credit: http://www.alistapart.com/d/alternate/styleswitcher.js
}


/*	
	Cookie management
*/
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;
  // credit: http://www.alistapart.com/d/alternate/styleswitcher.js
}



/*********************************
Custom scripts
*********************************/


/*
Browser neutral object 
*/
function crossObject(str_element) {
    var obj_element = (document.getElementById) ? document.getElementById(str_element) : document.all(str_element);
    return obj_element;
}


/*
Change font size and save state
*/
function set_fontsize(str_fontsize) {
	// set size
    obj_container = crossObject('container');
    obj_container.style.fontSize = str_fontsize;
	// save for cookie
    str_current_fontsize = str_fontsize;
	// reset underlining of 'A's in toolbar
	crossObject('sizexsmall').style.textDecoration = "none";
    crossObject('sizesmall').style.textDecoration = "none";
    crossObject('sizemedium').style.textDecoration = "none";
    crossObject('sizelarge').style.textDecoration = "none";
    crossObject('sizexlarge').style.textDecoration = "none";

    if (str_fontsize == '80%') {
        crossObject('sizexsmall').style.textDecoration = "underline";
    }
    else if (str_fontsize == '90%') {
        crossObject('sizesmall').style.textDecoration = "underline";
    }
    else if (str_fontsize == '100%') {
        crossObject('sizemedium').style.textDecoration = "underline";
    }
    else if (str_fontsize == '110%') {
        crossObject('sizelarge').style.textDecoration = "underline";
    }
    else if (str_fontsize == '120%') {
        crossObject('sizexlarge').style.textDecoration = "underline";
    }
    return false;
}


/*
Set style and save style to cookie
*/
function set_layout(str_layout) {
	if (str_layout == 'fixed') {
		setStylesheet('screen-fixed');
	}
    else {
		setStylesheet('screen-fluid');
	}
    str_current_layout = str_layout;
	return false;
}


/*
Set style and change print/screen icon in toolbar if changing between print and screen
Does not save style to cookie
*/
function change_style(str_style, bol_save_state) {
	if (str_style == 'print') {
		setStylesheet('for-print');
	
        obj_screen = crossObject('screenstyle');
        obj_screen.style.display = 'inline';
		
        obj_print = crossObject('printerstyle');
        obj_print.style.display = 'none';

	}
	else {
		// fall back on save style
		setStylesheet('screen-'+str_current_layout);
	
        obj_screen = crossObject('screenstyle');
        obj_screen.style.display = 'none';
		
        obj_print = crossObject('printerstyle');
        obj_print.style.display = 'inline';
	}
	return false;
}


/*
Initial function called onload.  Read cookies, set display state (fixed/fluid, and font size) based on result.
Round corners and add menu for left hand navigation
*/
function setUserOptions(){

	// Read cookies, set display state (fixed/fluid, and font size) based on result.
	if(!prefsLoaded){
		cookie = readCookie("layout");
		str_current_layout = cookie ? cookie : 'fixed';
		
		var str_override_fixed_style = typeof bol_override_fixed_style;
		if (str_override_fixed_style == 'undefined') {
			setStylesheet('screen-'+str_current_layout);
		}
		else {
			if (bol_override_fixed_style == true) {
				setStylesheet('screen-fluid');
			}
			else {
				setStylesheet('screen-'+str_current_layout);
			}
		}
		cookie = readCookie("fontsize");
		str_current_fontsize = cookie ? cookie : '100%';
		set_fontsize(str_current_fontsize);
	
		prefsLoaded = true;
	} 
	// Round corners and add menu for left hand navigation
	Nifty("div#header");
	Nifty("div#toolbar");
	Nifty("div#sidenav");
	Nifty("div#pagenav");
	//prepareLinksIn('current_menu');
	compactMenu('current_menu',true,oPl);
	compactMenu('other_menu',true,oPl); 
	// dsj - edit
	if (typeof str_highlight_page != 'undefined') {
		selfLink('current_menu','thisPage',true, str_highlight_page);
	}
	else {
		selfLink('current_menu','thisPage',true);
	}
	//selfLink('current_menu','thisPage',true, 'template.html');
	//selfLink('current_menu','thisPage',true, 'template.html');
	
	
	// Set container back to visible
	createStyleRule("#container", "visibility:visible;");
	// credit: adapted from http://arstechnica.com/Templates/ArsTechnica/uiTools.js
}


/* 
Handle error conditions.  Most Javascript on the page is used for formatting.  
One special case is the createStyleRule function, used to hide some jumpy content.  The problem is, however, if any
function throws an error, the page will stay invisible.  
Solution: Check to see if the page has been set to visible (int_stylerule_count < 2).  If not, turn it back on.
Errors will still be logged by the browser.
*/
function citesErrorHandler() {
	if (int_stylerule_count < 2) {
		createStyleRule("#container", "visibility:visible;");
	}
}



/*********************************
Window event handling
*********************************/


/* 
Hide all elements until the nifty script has run.  This prevents the page from jumping as the height of the 
header is dynamically determined.
*/
createStyleRule("#container", "visibility:hidden;");
window.onload = setUserOptions;
window.onunload = saveSettings;
window.onerror = citesErrorHandler;