//	Panel Swicther
//	August 2007, Richard Pearce.

var _global = this;		// a bit shoddy, but JS doesn't support functions with parmeters passed by ref.


function indexInArray(val,arr){
	for(var i=0;i<panels.panelGroupIDs.length;i++) if(panels.panelGroupIDs[i]==val) return i;
	
	// hardcoded array, to address later.
	//for(var i=0;i<arr.length;i++) if(arr[i]==val) return i;
	
	return -1;
}


var panels = {
	addEvent: function(elm, evType, fn, useCapture) {
		// addEvent cross-browser event handling for IE5+, NS6 and Mozilla
		// By Scott Andrew
		if (elm.addEventListener) {
			elm.addEventListener(evType, fn, useCapture); 
			return true;
		} else if (elm.attachEvent) {
			var r = elm.attachEvent('on' + evType, fn);
			return r;
		} else {
			elm['on' + evType] = fn;
		}
	},
	
	panelGroup: function(){
		this.currentPanel = "";			//	stores the id of the initial/current panel
		this.hideAllOnLoad = 0;			//	integer: 1=hide all.
		this.allowCurrentToClose = 0;		//	integer: 1=allow the current panel to close.
	},
	
	toggle: function(panelGroup, panelToToggle){
		var prevCurrentPanel = _global[panelGroup].currentPanel;
		
		// deal with current panel if applicable
		if (prevCurrentPanel != ""){
			if (((prevCurrentPanel == panelToToggle)&&(_global[panelGroup].allowCurrentToClose))||(prevCurrentPanel != panelToToggle)){
				document.getElementById(_global[panelGroup].currentPanel).style.display = "none";
				_global[panelGroup].currentPanel = "";
			}
		}
		// turn new panel on
		if (prevCurrentPanel != panelToToggle){
			document.getElementById(panelToToggle).style.display = "block";
			_global[panelGroup].currentPanel = panelToToggle;
		}

	},
	
	showPanel: function(panelGroup, panelToToggle){
		document.getElementById(panelToToggle).style.display = "block";
		_global[panelGroup].currentPanel = panelToToggle;
	},
	
	hidePanel: function(panelGroup, panelToToggle){
		if(_global[panelGroup].currentPanel == panelToToggle){
			_global[panelGroup].currentPanel = "";
		}
		document.getElementById(panelToToggle).style.display = "none";
	},
	
	init: function() {
		if (!document.getElementsByTagName || !document.getElementById){
			return;
		}
		
	//	rebuild links
		var switchLinks = document.getElementsByTagName("a");
		var thisLink = 0;
		while (thisLink <= switchLinks.length-1){
			if(switchLinks[thisLink].className == "switch"){
			//	if a new group, add to array of panel groups (panels.panelGroupIDs)
				var panelName = switchLinks[thisLink].title;
				var valueCheck = indexInArray(panelName,panels.panelGroupIDs);
				if (valueCheck == -1){
				//	add new group to array
					panels.panelGroupIDs[panels.panelGroupIDs.length] = panelName;
				}
				
			//	rewrite switch links
			//	not using event listeners for this as current addEvent function cannot accept passed parameters
				var hashLocation = switchLinks[thisLink].href.indexOf("#");
				if (hashLocation>-1){
					var elementName = switchLinks[thisLink].href.substring(hashLocation+1,switchLinks[thisLink].href.length);
				//	check that destination element exists
					if(document.getElementById(elementName)){
						//alert("modifying link for " + elementName);
						switchLinks[thisLink].href="javascript:panels.toggle('" + panelName + "','" + elementName + "');";
						switchLinks[thisLink].title="";
					}else{
						alert("Create a container for:\n\t" + elementName + "\n\nSyntax Correction Required");
						return;
					}
				}
				
			//	ensure only correct panel is initially displayed
			//	indicated by panelGroup.currentPanel
				if(elementName == _global[panelName].currentPanel && _global[panelName].hideAllOnLoad!=1){
					panels.showPanel(panelName,elementName);
				}else{
					panels.hidePanel(panelName,elementName);
				}
			}
			thisLink++;
		}

	//	set default styles (turn on or off panels as required)
		for (panelGroup in panels.panelGroupIDs){
			//alert(panels.panelGroupIDs[panelGroup]);
		}
	},
	
	panelGroupIDs: []
	
}

panels.addEvent(window,"load",panels.init,false);