String.prototype.trim = function() {
        return this.replace(/^\s+|\s+$/g,'');
}

function addClass(target, classValue) {
	var pattern = new RegExp("(^| )" + classValue + "( |$)");
	if (!pattern.test(target.className)) {
		if (target.className == "") {
			target.className = classValue;
		} else {
			target.className += " " + classValue;
		}
	}
	return true;
}

function removeClass(target, classValue) {
	var removedClass = target.className;
	var pattern = new RegExp("(^| )" + classValue + "( |$)");
	removedClass = removedClass.replace(pattern, "$1");
	removedClass = removedClass.replace(/ $/, "");
	target.className = removedClass;
	return true;
}


function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            if (oldonload) {
                oldonload();
            }
            func();
        };
    }
}

function getCookie(name) {
	var cookies = document.cookie.split(";");
	for (var i=0; i<cookies.length; i++) {
		var cookieCrumbs = cookies[i].split("=");
		var cookieName = cookieCrumbs[0].trim();
		var cookieValue = cookieCrumbs[1];
		if (cookieName == name) {
			return cookieValue;
		}
	}
	return false;
}

function getElementsByClassName(container,name,element) {
	var results = [];
	var elements = container.getElementsByTagName(element);
	for (var i=0; i<elements.length; i++ ) {
		if (elements[i].className.indexOf(name) != -1) {
			results[results.length] = elements[i];
		}
	}
	elements = null;
	return results;
}

var subnav = new function() {

	var introtext = "Browse the Teachers' Shop by ";
	var names = [];
	names["subjects"] = "subject";
	names["age"] = "age/key stage";
	names["features"] = "product feature";
	var outrotext = ". Click the expand button to show more.";

	var container,links,panels,active_panel,instruction;

	this.init = function() {
		container = document.getElementById("subnav");
		subtabs = document.getElementById("subnavtabs");
		if (subtabs) {
			links = subtabs.getElementsByTagName("a");
			for (var i=0; i<links.length; i++) {
				links[i].panel = links[i].getAttribute("href").split("#")[1];
				links[i].onclick = function() {
					if (active_panel == this.panel) {
						toggleButton(document.getElementById(this.panel).button);
					} else {
						expandButton(document.getElementById(this.panel).button);
					}
					active_panel = this.panel;
					showPanel();
					return false;
				};
			}
			panels = getElementsByClassName(container,"panel","div");
			active_panel = getCookie("panel") ? getCookie("panel") : links[0].panel;
			setupButtons();
			showPanel();
		}
	};

	var showPanel = function() {
		for (var i=0; i<panels.length; i++) {
			if (panels[i].getAttribute("id") == active_panel ) {
				panels[i].className = "panel open";
			} else {
				panels[i].className = "panel closed";
			}
		}
		for (var i=0; i<links.length; i++) {
			if (links[i].panel == active_panel) {
				links[i].className = "here";
			} else {
				links[i].className = "";
			}
		}
		document.cookie = "panel="+active_panel+"; path=/";
	};

	var setupButtons = function() {
		for (var i=0; i<panels.length; i++) {
                        var button = getElementsByClassName(panels[i], "toggle", "img")[0];
			button.panel = panels[i];
			button.onclick = function() {
				toggleButton(this);
			};
			panels[i].button = button;
                        if (button.getAttribute("alt") == "collapse -") {
        			button.state = "expanded";
                        } else {
        			button.state = "collapsed";
                        }
		}
	};

	var toggleButton = function(button) {
		if (button.state == "expanded") {
			collapseButton(button);
		} else {
			expandButton(button);
		}
	};

	var expandButton = function(button) {
		button.setAttribute("alt","collapse -");
		button.setAttribute("src","http://www.liverpool.nsw.gov.au/LCC/INTERNET/RESOURCES/IMAGES/collapse.gif");
		button.state = "expanded";
		expandPanel(button.panel);
	};
	var collapseButton = function(button) {
		button.setAttribute("alt","expand +");
		button.setAttribute("src","http://www.liverpool.nsw.gov.au/LCC/INTERNET/RESOURCES/IMAGES/expand.gif");
		button.state = "collapsed";
		collapsePanel(button.panel);
	};
	var expandPanel = function(panel) {
		var cols = getElementsByClassName(panel,"col","div");
		for (var i=0; i<cols.length; i++) {
			cols[i].style.display = "block";
		}
		instruction = getElementsByClassName(panel,"instruction","p")[0];
                instruction.style.display = "none";
	};
	var collapsePanel = function(panel) {
		var cols = getElementsByClassName(panel,"col","div");
		for (var i=0; i<cols.length; i++) {
			cols[i].style.display = "none";
		}
		instruction = getElementsByClassName(panel,"instruction","p")[0];
                instruction.style.display = "block";
	};

};




wraphandler = {
  init: function() {
    if (!document.getElementById) return;
    // set up the appropriate wrapper
    wraphandler.setWrapper();
    // and make sure it gets set up again if youresize the window
    wraphandler.addEvent(window,"resize",wraphandler.setWrapper);
  },

  setWrapper: function() {
    // width stuff from ppk's evolt.org/article/document_body_doctype_switching_and_more/17/30655/index.html
    var theWidth = 0;
    if (window.innerWidth) {
	theWidth = window.innerWidth
    } else if (document.documentElement && document.documentElement.clientWidth) {
	theWidth = document.documentElement.clientWidth
    } else if (document.body) {
	theWidth = document.body.clientWidth
    }
    var contentDiv = document.getElementById('content');
    if (contentDiv) {
		if (theWidth != 0) {
		  if (theWidth < 760) {
			addClass(contentDiv, 'small_win');
			removeClass(contentDiv, 'med_win');
			removeClass(contentDiv, 'big_win');
		  } else if (theWidth > 1200) {
			addClass(contentDiv, 'big_win');
			removeClass(contentDiv, 'small_win');
			removeClass(contentDiv, 'med_win');
		  } else {
			addClass(contentDiv, 'med_win');
			removeClass(contentDiv, 'small_win');
			removeClass(contentDiv, 'big_win');
		  }
		}
	}
  },

// addEvent stuff from John Resig's ejohn.org/projects/flexible-javascript-events
  addEvent: function( obj, type, fn ) {
    if ( obj.attachEvent ) {
      obj['e'+type+fn] = fn;
      obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
      obj.attachEvent( 'on'+type, obj[type+fn] );
    } else {
      obj.addEventListener( type, fn, false );
    }
  }
}

wraphandler.addEvent(window,"load",wraphandler.init);

addLoadEvent(subnav.init);
addLoadEvent(initPopups);
