//Useful Resources: http://codepunk.hardwar.org.uk/css2js.htm

/* Generic */
// http://www.faqts.com/knowledge_base/view.phtml/aid/5756/fid/128
// insertAdjacentHTML(), insertAdjacentText() and insertAdjacentElement
// for Netscape 6/Mozilla by Thor Larholm me@jscript.dk
// Usage: include this code segment at the beginning of your document
// before any other Javascript contents.

if(typeof HTMLElement!="undefined" && !
HTMLElement.prototype.insertAdjacentElement){
	HTMLElement.prototype.insertAdjacentElement = function
(where,parsedNode)
	{
		switch (where){
		case 'beforeBegin':
			this.parentNode.insertBefore(parsedNode,this)
			break;
		case 'afterBegin':
			this.insertBefore(parsedNode,this.firstChild);
			break;
		case 'beforeEnd':
			this.appendChild(parsedNode);
			break;
		case 'afterEnd':
			if (this.nextSibling) 
this.parentNode.insertBefore(parsedNode,this.nextSibling);
			else this.parentNode.appendChild(parsedNode);
			break;
		}
	}

	HTMLElement.prototype.insertAdjacentHTML = function
(where,htmlStr)
	{
		var r = this.ownerDocument.createRange();
		r.setStartBefore(this);
		var parsedHTML = r.createContextualFragment(htmlStr);
		this.insertAdjacentElement(where,parsedHTML)
	}


	HTMLElement.prototype.insertAdjacentText = function
(where,txtStr)
	{
		var parsedText = document.createTextNode(txtStr)
		this.insertAdjacentElement(where,parsedText)
	}
}

//Check for opera
var isOpera = false;

if (navigator.userAgent.indexOf("Opera") != -1){
    isOpera = true;
}
function get_itm(id){
  if (document.getElementById) {
	itm = document.getElementById(id);
  } else if (document.all){
	itm = document.all[id];
  } else if (document.layers){
	itm = document.layers[id];
  }
  else{
    itm = false;
  }
  return itm;
}

// Convert location.search into an array of values
// indexed by name.
function getSearchAsArray() {
	var input = unescape(location.search.substr(1))
	var results = new Array;
	if (input) {
		var srchArray = input.split("&")
		var tempArray = new Array()
		for (var i = 0; i < srchArray.length; i++) {
			tempArray = srchArray[i].split("=")
			results[tempArray[0]] = tempArray[1]
		}
	}
	return results
}

/* Preloading */
var preload_array = new Array;

var preimg = new Array;
preimg[0] = "images/print_icon_invert.gif";
preimg[1] = "images/email_icon_invert.gif";
preimg[2] = "images/bookmark_icon_invert.gif";
preimg[3] = "images/widgets/fontPlus_over.gif";
preimg[4] = "images/widgets/fontMinus_over.gif";
preimg[5] = "images/widgets/fontReset_over.gif";

preload_img(preimg);

function preload_img(files){
    for (var i =0; i <= files.length-1; i++){
        var len = preload_array.length;
        preload_array[len] = document.createElement('img');
        preload_array[len].src = files[i];
    }
    
}

/* CSS */

function switchCSS(scheme){
     css = get_itm("stylesheet");
     css.href = "css/"+ scheme + ".css";
     createCookie("stylesheet_pref",scheme,90);
     return false;
}

function loadStyle(){
    var stylesheet_pref = readCookie("stylesheet_pref");
    if (stylesheet_pref == null){
        stylesheet_pref = "blue";
    }
    document.write('<link href="css/'+ stylesheet_pref +'.css" rel="stylesheet" type="text/css" id="stylesheet" title="Current/Default Style" media="screen" />');
}

function genericCSS(){
    if(!document.all || isOpera){
        document.write('<link href="css/generic.css" rel="stylesheet" type="text/css" media="screen" />');
    }
}

/* Cookies */
//http://www.quirksmode.org/index.html?/js/cookies.html
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 var 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;
}

function eraseCookie(name)
{
	createCookie(name,"",-1);
}

/* Popup Menu (for IE) */

function initialise_popup(){
    var popupli = get_itm('popupmenu').getElementsByTagName("li");
    for (var i = 0; i <= popupli.length-1; i++){
        if (document.all && !isOpera){
            popupli[i].onmouseover = function(){
                show_popup(this);
            }
            popupli[i].onmouseout = function(){
                hide_popup(this);
            }
        }
        var popupliul = popupli[i].getElementsByTagName("ul");
        if (popupliul.length != 0){
            if (popupli[i].parentNode == get_itm('popupmenu')){
                var img = document.createElement("img");
                img.src = "images/bt.gif";
                img.style.margin = "0 0 0 2px";
                popupliul[0].insertAdjacentElement("beforeBegin",img);
            }
            else{
                popupli[i].style.backgroundImage = "url(images/bt.gif)";
                popupli[i].style.backgroundPosition = "center right";
                popupli[i].style.backgroundRepeat = "no-repeat";
            }
        }
    }
}

function show_popup(itm){
    if (document.all && !isOpera){
        itm.style.overflow = "visible";
        var list = itm.getElementsByTagName("ul");
        for (var i = 0; i <= list.length-1; i++){
            if (list[i].parentNode != itm){
                continue;
            }
            list[i].style.display = "inline";
            list[i].style.position = "absolute";
            list[i].style.left = "-1px";
        }
    }
}

function hide_popup(itm){
    if (document.all && !isOpera){
        var list = itm.getElementsByTagName("ul");
        for (var i = 0; i <= list.length-1; i++){
            if (list[i].parentNode != itm){
                continue;
            }
            list[i].style.display = "none";
        }
    }
}

/* Misc Widgets */

function bookmarkPage(){
 	if (document.all && (parseInt(navigator.appVersion) >= 4) && !isOpera){
   		window.external.AddFavorite(document.URL,document.title);
	}
	else{
	    if (isOpera){
	        alert("Please use the keyboard shortcut CTRL + T to bookmark the page.");
	    }
	    else{
            alert("Please use the keyboard shortcut CTRL + D to bookmark the page.");
        }
    }
}

function emailPage(){
    var address = "mailto:?Subject=" + escape ("Math Maze - Be Maze-Merised") + "&Body=" + escape(self.location);
    self.location = address;
}
/* Fonts */
var defaultSize = 11;
var h3Default = 16;
var h4Default = 14;
var h5Default = 12;
var h6Default = 11;
var increment = 0;

function doFontSizeAdjust(increment){
    createCookie("fontSize_increment",increment,90);
    
    var div = document.getElementsByTagName('div');
    var p = document.getElementsByTagName('p');
    var li = document.getElementsByTagName('li');
    var newSize = defaultSize + increment;
    
    for(var i = 0; i < div.length; i++){
        var newSize = defaultSize + increment;
        if (div[i].id == "loading_box" || div[i].id.indexOf("hangman") != -1){
            continue;
        }
        if (div[i].id == "copyright" || div[i].id == "nav_anchor"){
            var newSize = 9 + increment;
        }
        div[i].style.fontSize = newSize + "px";
    }
    for(var i = 0; i < p.length; i++){
        var newSize = defaultSize + increment;
        if (p[i].parentNode.className == "floating_box_right" || p[i].parentNode.className == "floating_box_left"){
            var newSize = 10 + increment;
        }
        p[i].style.fontSize = newSize + "px";
    }
    for(var i = 0; i < li.length; i++){
        var newSize = defaultSize + increment;
        li[i].style.fontSize = newSize + "px";
    }
    
    var h3 = document.getElementsByTagName('h3');
    var h4 = document.getElementsByTagName('h4');
    var h5 = document.getElementsByTagName('h5');
    var h6 = document.getElementsByTagName('h6');
    
    for(var i = 0; i < h3.length; i++){
        var newSize = h3Default + increment;
        h3[i].style.fontSize = newSize + "px";
    }
    for(var i = 0; i < h4.length; i++){
        var newSize = h4Default + increment;
        if (h4[i].parentNode.className == "floating_box_right" || h4[i].parentNode.className == "floating_box_left"){
            var newSize = 11 + increment;
        }
        h4[i].style.fontSize = newSize + "px";
    }
    for(var i = 0; i < h5.length; i++){
        var newSize = h5Default + increment;
        h5[i].style.fontSize = newSize + "px";
    }
    for(var i = 0; i < h6.length; i++){
        var newSize = h6Default + increment;
        h6[i].style.fontSize = newSize + "px";
    }

}

function fontSizePlus(){
    if (increment > 3){
        alert("Error, you cannot increase the font size any further!");
        return;
    }
    increment++;
    doFontSizeAdjust(increment);
}
function fontSizeMinus(){
    if (increment < 1){
        alert("Error, you cannot decrease the font size any further!");
        return;
    }
    increment--;
    doFontSizeAdjust(increment);
}

function resetFontSize(){
    increment = 0;
    doFontSizeAdjust(increment);
}
function loadFontSize(){
    var cookieData = readCookie("fontSize_increment");
    if (cookieData != null && parseInt(cookieData) != 0){
        doFontSizeAdjust(parseInt(cookieData));
        increment = parseInt(cookieData);
    }
}
/* "Loading" */
function show_loading(){
    get_itm("loading_box").style.display = "block";
}
function hide_loading(){
    get_itm("loading_box").style.display = "none";
}

/* Time */
function doDate(){
    //http://www.webdevelopersnotes.com/tips/html/getting_current_time_using_javascript.php3
    var d_names = new Array("Sunday", "Monday", "Tuesday",
    "Wednesday", "Thursday", "Friday", "Saturday");
    
    var m_names = new Array("January", "February", "March", 
    "April", "May", "June", "July", "August", "September", 
    "October", "November", "December");
    
    var d = new Date();
    var curr_day = d.getDay();
    var curr_date = d.getDate();
    var sup = "";
    if (curr_date == 1 || curr_date == 21 || curr_date ==31)
       {
       sup = "st";
       }
    else if (curr_date == 2 || curr_date == 22)
       {
       sup = "nd";
       }
    else if (curr_date == 3 || curr_date == 23)
       {
       sup = "rd";
       }
    else
       {
       sup = "th";
       }
    var curr_month = d.getMonth();
    var curr_year = d.getFullYear();
    
    document.write(d_names[curr_day] + ", " + curr_date + "<sup>"
    + sup + "</sup> " + m_names[curr_month] + " " + curr_year);
}
