 /* *********************************************************************
 $Id: global.js,v 1.1 2007/05/29 07:19:44 beng Exp $

 Copyright (c) 2000-2007 MassMedia Studios Pty Ltd.
 68-72 Wentworth Ave, Surry Hills, NSW 2010, Australia.
 All rights reserved.

 This software is the confidential and proprietary information of 
 MassMedia Studios Pty Ltd. ("Confidential Information").  You shall not
 disclose such Confidential Information and shall use it only in
 accordance with the terms of the license agreement you entered into
 with MassMedia Studios Pty Ltd.
 ------------------------------------------------------------------------
 Author:				Ben Gillies -> ben.gillies at massmedia.com.au
 Created:				4 May 2007
 ------------------------------------------------------------------------
 Comments:	
 
 
 ********************************************************************** */
		var focusedElement = "";
		var darkThemeClassName = "darkTheme";
		var lightThemeClassName = "lightTheme"; // not actually in css.
		var defaultSearchStr = "Type Keywords Here";
		var themeCookie = "artsnsw_theme";
		
		function dom_browser() {
			// browser identification based on dom capabilities
			this.myNav = this.navigator;
			this.version = this.navigator.appVersion;
			this.name = this.navigator.appName;
			this.userAgt = this.navigator.userAgent;
			this.ns4 = (document.layers) ? true : false;
			this.ns6 = (this.navigator.userAgent.indexOf("Netscape6") != -1) ? true : false;
			this.dom = (document.getElementById) ? true : false;
			this.ie4 = (document.all) ? true : false;
			this.mac = (this.version.indexOf("Mac") != -1) ? true : false;
			this.ie = (this.version.indexOf("MSIE") != -1) ? true : false;
			this.windows = (this.version.indexOf("Windows") != -1) ? true : false;
			this.hasPlugins = (this.navigator.plugins) ? true : false;
			this.ie6 = (this.version.indexOf("MSIE") != -1 && this.version.indexOf("6") != -1) ? true : false; 
		
			this.ie55 = (this.version.indexOf("MSIE 5.5") != -1) ? true : false;
			this.ie5 = (this.version.indexOf("MSIE 5.01") != -1) ? true : false;
			this.ns = (this.userAgt.indexOf("Netscape") != -1) ? true : false;
			this.ff = (this.userAgt.indexOf("Firefox") != -1) ? true : false;
			this.safari = (this.userAgt.indexOf("Safari") != -1) ? true : false;
		}
		
		dom_browser();

		function trim(str) {
		// removes white spaces from beginning and end of given string, str.
			return str.replace(/^\s*|\s*$/g,"");	
		}
		
		function addClassName(myElement, myClass) {
			var currentClassName = trim(myElement.className);
			var myReg = new RegExp("(^" + myClass + "$)|( " + myClass + "$)|(^" + myClass + " )|( " + myClass + " )", "g");
			if (!myReg.test(currentClassName)) {
				// not currently set on element, so add class..
				if (currentClassName != "") {
					myElement.className += " " + myClass;
				} else {
					myElement.className = myClass;
				}
			}
		}
		function removeClassName(myElement, myClass) {
			var currentClassName = trim(myElement.className);
			var myReg = new RegExp("(^" + myClass + "$)|( " + myClass + "$)|(^" + myClass + " )|( " + myClass + " )", "g");
			myElement.className = currentClassName.replace(myReg, "");
		}
		function switchClassName(myElement, removeClass, addClass) {
			removeClassName(myElement, removeClass);
			addClassName(myElement, addClass);
		}
		
		function setSearchContent(myField, isFocus) {
			if (isFocus) {
				if (myField.value == defaultSearchStr) {
					myField.value = "";
				}
			} else {
				if (trim(myField.value) == "") {
					myField.value = defaultSearchStr;
				}
			}
		}
		function getFocusClass(myField) {
			// get focus class name for element type..
			var myClass = "";
			if (myField.type == "text") {
				myClass = "inputOnFocus";
			} if (myField.type == "button" || myField.type == "submit") {
				myClass = "btnOnFocus"
			}
			return myClass;
		}
		function setOnFocusState(event) {
			var myClass = getFocusClass(this);
			// add focus class..
			focusedElement = this.id;
			addClassName(this, myClass); // nb. will only add if not already added.
		}
		function setOnBlurState(event) {
			var myClass = getFocusClass(this);
			// remove focus class..
			focusedElement = "";
			removeClassName(this, myClass);
		}

		function setSearchOnFocusState(event) {
			var myClass = getFocusClass(this);
			// add focus class..
			setSearchContent(this, true);
			addClassName(this, myClass); // nb. will only add if not already added.
			focusedElement = this.id;
			this.focus();
		}
		function setSearchOnBlurState(event) {
			var myClass = getFocusClass(this);
			// remove focus class..
			removeClassName(this, myClass);
			focusedElement = "";
			setSearchContent(this, false);
		}

		function setOnMouseOverState(event) {
			var myClass = getFocusClass(this);
			// add focus class..
			addClassName(this, myClass); // nb. will only add if not already added.
		}
		function setOnMouseOutState(event) {
			// should really check if element is not current the focus before doing this but hey..
			if (focusedElement != this.id) {
				var myClass = getFocusClass(this);
				// remove focus class..
				removeClassName(this, myClass);
			}
		}
		
		function setNavOnFocusState(event) {
			var myClass = "over";
			// add focus class..
			addClassName(this.parentNode, myClass); // nb. will only add if not already added.
		}
		function setNavOnBlurState(event) {
			var myClass = "over";
			// remove focus class..
			removeClassName(this.parentNode, myClass);
		}


		function setFormElements() {
			for (var i=0; i < document.forms.length; i++) {
				for (var j=0; j < document.forms[i].elements.length; j++) {
					document.forms[i].elements[j].onmouseover = setOnMouseOverState;
					document.forms[i].elements[j].onmouseout = setOnMouseOutState;
					if (document.forms[i].elements[j].id == "search") {
						document.forms[i].elements[j].onblur = setSearchOnBlurState;
						document.forms[i].elements[j].onfocus = setSearchOnFocusState;
					} else {
						document.forms[i].elements[j].onblur = setOnBlurState;
						document.forms[i].elements[j].onfocus = setOnFocusState;
					}
				}
			}
		}
		
		function setHavElements() {
			var myNavUL = document.getElementById("mainNav");
			if (myNavUL != null && typeof(myNavUL) != "undefined") {
				if (this.ie && this.windows) {
					myNavUL = myNavUL.childNodes[0];
				} else {
					myNavUL = myNavUL.childNodes[1];
				}
				if (myNavUL != null && typeof(myNavUL) != "undefined") {
					for (var i=0; i < myNavUL.childNodes.length; i++) {
						if (myNavUL.childNodes[i] != null && typeof(myNavUL.childNodes[i]) != "undefined") {
							if (myNavUL.childNodes[i].childNodes[0] != null && myNavUL.childNodes[i].childNodes[0].nodeType == 1) {
								myNavUL.childNodes[i].childNodes[0].onblur = setNavOnBlurState;
								myNavUL.childNodes[i].childNodes[0].onfocus = setNavOnFocusState;
							}
						}
					}
				}
			}
		}
		
		function switchTheme() {
			var myBody = document.getElementById("Body"); // easier cross browser... bit lazy here.... :)
			if (myBody.className.indexOf(darkThemeClassName) != -1) {
				removeClassName(myBody, darkThemeClassName);
				setCookie(themeCookie, lightThemeClassName);
			} else {
				addClassName(myBody, darkThemeClassName);
				setCookie(themeCookie, darkThemeClassName);
			}
		}
		
		function setFontSize(myLevel) {
			var myBody = document.getElementById("Body");
			switch (myLevel) {
				case 1:				myBody.style.fontSize = "0.7em";
									break;
				case 2:				myBody.style.fontSize = "0.8em";
									break;
				case 3:				myBody.style.fontSize = "1.0em";
									break;
				default:			myBody.style.fontSize = "0.7em";
									break;
			}
		}
		
		function printPage() {
			var myBody = document.getElementById("Body");
			var switched = false;
			if (myBody.className.indexOf(darkThemeClassName) != -1) {
				switchTheme();
				switched = true;
			}
			window.print();
			if (switched) {
				switchTheme();
			}
		}
		
		function setCookie(c_name,value,expiredays) {
			var exdate=new Date();
			exdate.setDate(exdate.getDate()+expiredays);
			document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
		}
		
		function getCookie(c_name) {
			if (document.cookie.length>0) {
				c_start=document.cookie.indexOf(c_name + "=");
				if (c_start!=-1) { 
					c_start=c_start + c_name.length+1;
					c_end=document.cookie.indexOf(";",c_start)
					if (c_end==-1) {
						c_end=document.cookie.length
					}
					return unescape(document.cookie.substring(c_start,c_end))
				} 
			}
			return ""
		}
		
		function checkTheme() {
			var currentTheme = getCookie(themeCookie);
			var myBody = document.getElementById("Body");
			if (myBody != null && typeof(myBody) != "undefined") {
				if (currentTheme != null && currentTheme != "") {
					if (currentTheme == darkThemeClassName) {
						addClassName(myBody, darkThemeClassName);
					} else {
						removeClassName(myBody, darkThemeClassName);
					}
				} else {
					addClassName(myBody, darkThemeClassName);
					setCookie(themeCookie, darkThemeClassName, 365);
				}
			}
		}
		
		function init() {
			checkTheme();
			setFormElements();
			setHavElements();
		}
		
		window.onload = init;
		