// Written by Ahmad Azarinurazie (aien@pixl8.co.uk).
// Created on October 17th. 2008

// rel for use: initonload,samestate,differentstate

// This make sure that even if the file is loaded many times, it still works.
if (typeof(ASwitcher) == 'undefined') {
	
	ASwitcher = {
	
		aTempSwitcher : new Array(),
		aTempSwitcherStatus : new Array(),
		
		init : function() {
			var obj = null;
			var aTempSwitcher = null;
			
			// Loop through all arguments
			for (i=0; i<arguments.length; i++) {
				if (arguments[i] && document.getElementById(arguments[i])) {
					obj = document.getElementById(arguments[i]);
					
					if (obj) {
						if (obj.nodeName == "UL" || obj.nodeName == "OL") {
							for (var i=0; i<obj.childNodes.length; i++)
								if (obj.childNodes[i].nodeName == "LI")
									for (var j=0; j<obj.childNodes[i].childNodes.length; j++)
										if (obj.childNodes[i].childNodes[j].nodeName == "A") {
											obj.childNodes[i].childNodes[j].onclick = ASwitcher.switchGroup;
											
											sCommand = ASwitcher.getValue(obj.childNodes[i].childNodes[j].rel, "initonload:");
											if (sCommand == "true") {
												if (!aTempSwitcher) aTempSwitcher = [];
												
												// This is written for google map as google map cannot use display = none when rendering, so hide it using absolute position
												if (obj.childNodes[i].childNodes[j].className.indexOf("selected") == -1) {
												
													obj_target = ASwitcher.getValue(obj.childNodes[i].childNodes[j].href, "#");
													obj_target = document.getElementById(obj_target);
													
													if (obj_target.id == "map") {
														obj_target.style.position = "absolute";
														obj_target.style.top = "-9999px";
													}
													else {
														aTempSwitcher.push(obj.childNodes[i].childNodes[j]);
														aTempSwitcherStatus.push("hide");
													}
												}
												else {
													aTempSwitcher.push(obj.childNodes[i].childNodes[j]);
													aTempSwitcherStatus.push("show");
												}
											}
										}
						}
						else if (obj.nodeName == "DL") {
							for (var i=0; i<obj.childNodes.length; i++)
								if (obj.childNodes[i].nodeName == "DT")
									for (var j=0; j<obj.childNodes[i].childNodes.length; j++)
										if (obj.childNodes[i].childNodes[j].nodeName == "A") {
											obj.childNodes[i].childNodes[j].onclick = ASwitcher.switchSingle;
											
											sCommand = ASwitcher.getValue(obj.childNodes[i].childNodes[j].rel, "initonload:");
											if (sCommand == "true") {
												if (!aTempSwitcher) aTempSwitcher = [];
											
												// Init the target show/hide onLoad using the switcher state
												aTempSwitcher.push(obj.childNodes[i].childNodes[j]);
												
												if (obj.childNodes[i].childNodes[j].className.indexOf("selected") == -1) ASwitcherStatus.push("hide");
												else aTempSwitcherStatus.push("show");
											}
										}
						}
						else if (obj.nodeName == "A") {
							obj.onclick = this.switchSingle;
							
							sCommand = ASwitcher.getValue(obj.rel, "initonload:");
							if (sCommand == "true") {
								if (!aTempSwitcher) aTempSwitcher = [];
								
								// Init the target show/hide onLoad using the switcher state
								aTempSwitcher.push(obj);
								
								if (obj.className.indexOf("selected") == -1) aTempSwitcherStatus.push("hide");
								else aTempSwitcherStatus.push("show");
							}
						}
					}
				}
			}
			
			// Written for PCS Intranet
			aLinks = document.getElementsByTagName("A");
			
			for (var i=0;i<aLinks.length; i++) {
				if (AObject.checkClass(aLinks[i], "switcher")) aLinks[i].onclick = ASwitcher.switchSingle;
			} 
			
			if (aTempSwitcher) AEvent.add(window, "load", function() { for (var i=0;i<aTempSwitcher.length; i++) ASwitcher.switchClass(aTempSwitcher[i], aTempSwitcherStatus[i]); aTempSwitcher=null; });
		},
		
		getValue : function(str, var_name) {
			var value = null;
			var iPos;
			
			if (!str) return null;
			
			iPos = str.indexOf(var_name);
			
			if (iPos > -1) {
				iPos += var_name.length;
				
				value = str.substr(iPos);
				
				iPos = value.indexOf(";");
				if (iPos > -1) value = value.substr(0, iPos);
			}
			
			return value;
		},
		
		switchSingle : function(obj) {
			var aTarget;
			var oTarget;
			var sCommand;
			var i;
			
			if (!obj || !obj.href) obj = this;
			
			ASwitcher.switchClass(obj);
			
			sCommand = ASwitcher.getValue(obj.rel, "samestate:");
			if (sCommand) {
				aTarget = sCommand.split(",");
				for (i=0; i<aTarget.length; i++) {
					oTarget = document.getElementById(aTarget[i]);
					
					if (oTarget) {
						if (AObject.checkClass(obj, "selected")) AObject.addClass(oTarget, "selected");
						else AObject.removeClass(oTarget, "selected");
					}
				}
			}
			
			sCommand = ASwitcher.getValue(obj.rel, "differentstate:");
			if (sCommand) {
				aTarget = sCommand.split(",");
				for (i=0; i<aTarget.length; i++) {
					oTarget = document.getElementById(aTarget[i]);
					
					if (oTarget) {
						if (!AObject.checkClass(obj, "selected")) AObject.removeClass(oTarget, "selected");
						else AObject.addClass(oTarget, "selected");
					}
				}
			}
			
			sCommand = ASwitcher.getValue(obj.rel, "onafterselected:");
			if (sCommand && obj.className.indexOf("selected") > -1) {
				aTarget = sCommand.split(",");
				for (i=0; i<aTarget.length; i++) {
				
					eval(aTarget[i]);
				}
			}
			
			sCommand = ASwitcher.getValue(obj.rel, "onafternotselected:");
			if (sCommand && obj.className.indexOf("selected") == -1) {
				aTarget = sCommand.split(",");
				for (i=0; i<aTarget.length; i++) {
				
					eval(aTarget[i]);
				}
			}
			
			return false;
		},
		
		switchClass : function(obj, state) {
			var obj_target;
			var sCommand;
			
			if (!obj || !obj.href) obj = document.getElementById(obj);
			
			obj_target = ASwitcher.getValue(obj.href, "#");
			obj_target = document.getElementById(obj_target);
			
			if (!obj_target) return false; 
			
			// Change text from switchtext1 and switchtext2
			sCommand = ASwitcher.getValue(obj.rel, "switchtext1:");
			if (sCommand) {
				sCommand = ASwitcher.getValue(obj.rel, "switchtext2:");
				if (sCommand) {
					if (obj.innerHTML == sTarget) obj.innerHTML = sTarget2;
					else obj.innerHTML = sTarget;
				}
			}
			
			// state value is supplied
			if (state) {
				if (state == "hide") {
					//obj.className = obj.className.replace(/selected/g, "");
					//obj_target.className = obj_target.className + " hide";
					
					AObject.removeClass(obj, "selected");
					AObject.addClass(obj_target, "hide");
				}
				else if (state == "show") {
					//obj.className = obj.className + " selected";
					//obj_target.className = obj_target.className.replace(/hide/g, "");
					
					AObject.addClass(obj, "selected");
					AObject.removeClass(obj_target, "hide");
				}
			}
			// else just switch the class
			else {
				if (!AObject.checkClass(obj, "selected")) {
					//obj.className = obj.className + " selected";
					//obj_target.className = obj_target.className.replace(/hide/g, "");
					
					AObject.addClass(obj, "selected");
					AObject.removeClass(obj_target, "hide");
				}
				else {
					//obj.className = obj.className.replace(/selected/g, "");
					//obj_target.className = obj_target.className + " hide";
					
					AObject.removeClass(obj, "selected");
					AObject.addClass(obj_target, "hide");
				}
			}
		},
		
		switchGroup : function(obj) {
			var obj;
			var obj_target;
			var obj_list;
			
			if (!obj || !obj.href) obj = this;
			
			obj_list = this.parentNode.parentNode;
			
			if (!AObject.checkClass(obj, "selected")) {
				ASwitcher.switchClass(obj, "show");
			}
			/*else {
				ASwitcher.switchClass(obj, "hide");
			}*/
			
			obj_target = ASwitcher.getValue(obj.href, "#");
			obj_target = document.getElementById(obj_target);
			
			// For google map usage
			if (obj_target.id == "map") {
				obj_target.style.top = "0";
				obj_target.style.position = "relative";
			}
			
			sCommand = ASwitcher.getValue(obj.rel, "onafterselected:");
			if (sCommand && AObject.checkClass(obj, "selected")) {
				aTarget = sCommand.split(",");
				for (i=0; i<aTarget.length; i++) eval(aTarget[i]);
			}
			
			sCommand = ASwitcher.getValue(obj.rel, "onafternotselected:");
			if (sCommand && !AObject.checkClass(obj, "selected")) {
				aTarget = sCommand.split(",");
				for (i=0; i<aTarget.length; i++) eval(aTarget[i]);
			}
			
			if (obj_list.nodeName == "UL" || obj_list.nodeName == "OL") {
				for (i=0; i<obj_list.childNodes.length; i++) {
					if (obj_list.childNodes[i].nodeName == "LI") {
						for (j=0; j<obj_list.childNodes[i].childNodes.length; j++) {
							if (obj_list.childNodes[i].childNodes[j].nodeName == "A" && obj_list.childNodes[i].childNodes[j] != this) 
								ASwitcher.switchClass(obj_list.childNodes[i].childNodes[j], "hide");
						}
					}
				}
			}
			
			return false;
		}
	}
}

if (typeof(AEvent) == 'undefined') {
	AEvent = {
		add: function(obj, type, fn) {
			if (obj.addEventListener) obj.addEventListener( type, fn, false );
			else 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] );
			}
		}
	}
}

if (typeof(AObject) == 'undefined') {
	AObject = {
		removeClass: function(obj, sName) {
			var aClassName = obj.className.split(" ");
			var i;
			var sNewClassName = "";
			
			for (i=0; i<aClassName.length; i++) 
				if (aClassName[i] != sName) sNewClassName += " " + aClassName[i];
			
			obj.className = sNewClassName;
		},
		
		addClass: function(obj, sName) {
			var aClassName = obj.className.split(" ");
			var i;
			var sNewClassName = obj.className;
			var bExist = false;
			
			for (i=0; i<aClassName.length; i++) {
				if (aClassName[i] == sName) bExist = true;
			}
			
			if (!bExist) sNewClassName += " " + sName;
			else sNewClassName = sClassName;
			
			obj.className = sNewClassName;
		},
		
		checkClass: function(obj, sName) {
			var aClassName = obj.className.split(" ");
			var i;
			var sNewClassName = "";
			
			for (i=0; i<aClassName.length; i++) if (aClassName[i] == sName) return true;
			
			return false;
		},
		
		trimString: function(str) {
			while (str.substr(0,1) == " ") str = str.substr(1,str.length);
			while (str.substr(str.length-1,1) == " ") str = str.substr(0,str.length-1);
		}
	}
}