// Adds a new class to an object, preserving existing classes
function AddClass(obj,cName){ KillClass(obj,cName); return obj && (obj.className+=(obj.className.length>0?' ':'')+cName); }
//***Removes a particular class from an object, preserving other existing classes.
function KillClass(obj,cName){ return obj && (obj.className=obj.className.replace(new RegExp("^"+cName+"\\b\\s*|\\s*\\b"+cName+"\\b",'g'),'')); }
// Returns true if the object has the class assigned, false otherwise.
function HasClass(obj,cName){ return (!obj || !obj.className)?false:(new RegExp("\\b"+cName+"\\b")).test(obj.className) }

//***Cross browser attach event function. For 'evt' pass a string value with the leading "on" omitted
//***e.g. AttachEvent(window,'load',MyFunctionNameWithoutParenthesis,false);
function AttachEvent(obj,evt,fnc,useCapture){
	if (!useCapture) useCapture=false;
	if (obj.addEventListener){
		obj.addEventListener(evt,fnc,useCapture);
		return true;
	} else if (obj.attachEvent) return obj.attachEvent("on"+evt,fnc);
	else{
		MyAttachEvent(obj,evt,fnc);
		obj['on'+evt]=function(){ MyFireEvent(obj,evt) };
	}
} 
//The following are for browsers like NS4 or IE5Mac which don't support either
//attachEvent or addEventListener
function MyAttachEvent(obj,evt,fnc){
	if (!obj.myEvents) obj.myEvents={};
	if (!obj.myEvents[evt]) obj.myEvents[evt]=[];
	var evts = obj.myEvents[evt];
	evts[evts.length]=fnc;
}
function MyFireEvent(obj,evt){
	if (!obj || !obj.myEvents || !obj.myEvents[evt]) return;
	var evts = obj.myEvents[evt];
	for (var i=0,len=evts.length;i<len;i++) evts[i]();
}



// arguments: class name, node (optional, can be obtained by getElementById, default is 'document'), tagName (optional)
// http://www.dustindiaz.com/getelementsbyclass/
function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}



function toggleElements(Mid, Iid ) {
			 var e = document.getElementById( Mid );
				var c = document.getElementById( Iid );
		if ( e.style.visibility == 'visible' ||  e.style.display == 'block' ) {
		  e.style.visibility = 'hidden';
		  e.style.display    = 'none';
		  c.style.visibility = 'visible';
		  c.style.display    = 'block';
		} else {
		  e.style.visibility = 'visible';
		  e.style.display    = 'block';
		  c.style.visibility = 'hidden';
		  c.style.display    = 'none';
		}	
		
 }




// metric/imperial switching links
AttachEvent(window,'load',function(){ 
	var swtichlinkClassname = 'switchMsrmnt', option1 = 'metric', option2 = 'imperial';
	
	var switchlinks = getElementsByClass(swtichlinkClassname);
	if(switchlinks.length == 0) { return; }
	
	for(i = 0; i < switchlinks.length; i++) {	
		switchlinks[i].style.display ='block'; // switching links are hidden when js is off
		switchlinks[i].onclick = function() {					
			toggleElements(option1, option2);			
		}		
	}	
});


// top right drop-down menu
AttachEvent(window,'load',function(){ 
		
	var s = document.getElementById('url');	
	var btn = document.getElementById('networksubmit');
	if(!btn || !s) { return; }

	btn.onclick = function() {
		if(s.options[s.selectedIndex].value != '') {
			window.open(s.options[s.selectedIndex].value,"win");
		}
		return false;
	}
});




// tour popups
AttachEvent(window,'load',function(){ 
	var tourClassname = 'tour', url = '/tour.html';
	
	var tourlinks = getElementsByClass(tourClassname);
	if(tourlinks.length == 0) { return; }
	
	for(i = 0; i < tourlinks.length; i++) {	
		tourlinks[i].onclick = function() {		
			window.open(url,"remotewin","width=566,height=416,scrollbars=no");
			return false;
		}		
	}	
});


//*** Tabtastic 1.0.4 -- see http://phrogz.net/JS/Tabstatic/index.html
//*** This code is copyright 2002-2003 by Gavin Kistner and Refinery; www.refinery.com
//*** It is covered under the license viewable at http://phrogz.net/JS/_ReuseLicense.txt
AttachEvent(window,'load',function(){
	var tocTag='ul',tocClass='tabset_tabs',tabTag='a',contentClass='tabset_content';

	function FindEl(tagName,evt){
		if (!evt && window.event) evt=event;
		if (!evt) return DebugOut("Can't find an event to handle in DLTabSet::SetTab",0);
		var el=evt.currentTarget || evt.srcElement;
		while (el && (!el.tagName || el.tagName.toLowerCase()!=tagName)) el=el.parentNode;
		return el;
	}

	function SetTabActive(tab){
		if (tab.tabTOC.activeTab){ 
			if (tab.tabTOC.activeTab==tab) return;
			KillClass(tab.tabTOC.activeTab,'active');
			if (tab.tabTOC.activeTab.tabContent) KillClass(tab.tabTOC.activeTab.tabContent,'tabset_content_active');
			if (tab.tabTOC.activeTab.prevTab) KillClass(tab.tabTOC.activeTab.previousTab,'preActive');
			if (tab.tabTOC.activeTab.nextTab) KillClass(tab.tabTOC.activeTab.nextTab,'postActive');
		}
		AddClass(tab.tabTOC.activeTab=tab,'active'); 
		if (tab.tabContent) AddClass(tab.tabContent,'tabset_content_active');	
		if (tab.prevTab) AddClass(tab.prevTab,'preActive');
		if (tab.nextTab) AddClass(tab.nextTab,'postActive');
	}
	function SetTabFromAnchor(evt){
		SetTabActive(FindEl('a',evt).semanticTab);
		document.FreeProfileForm.dietchoice.value = FindEl('a',evt).semanticTab.href.replace(/.*#tab/,''); // updating a hidden input in FDP form
	}
	
	function Init(){
		window.everyTabThereIsById = {};
		
		var anchorMatch = /#d([a-z][\w.:-]*)$/i,match;
		var activeTabs = [];
		
		var tocs = document.getElementsByTagName(tocTag); // ULs
		
		
		for (var i=0,len=tocs.length;i<len;i++){
			var toc = tocs[i];
			if (!HasClass(toc,tocClass)) continue;  // 'tabset_tabs'

			var lastTab;
			var firstTab;
			
			var tabs = toc.getElementsByTagName(tabTag);  // a
			for (var j=0,len2=tabs.length;j<len2;j++){
				var tab = tabs[j];
				if (!tab.href || !(match=anchorMatch.exec(tab.href))) continue;
				if (lastTab){
					tab.prevTab=lastTab;
					lastTab.nextTab=tab;
				}
				if(!firstTab) {
					firstTab = tab;
				}
				tab.tabTOC=toc; // toc UL
				everyTabThereIsById[tab.tabID=match[1]]=tab; // building array of all anchors
				
				tab.tabContent = document.getElementById(tab.tabID);  // respective content 
				
				if (HasClass(tab,'active')) activeTabs[activeTabs.length]=tab;  // if anchor has 'active' class, push it to the array
				
				lastTab=tab;
			}
			// AddClass(toc.getElementsByTagName('li')[0],'firstchild'); // assign class to the first LI
		}

		// if there are no active links
		if(activeTabs.length == 0) {			
			activeTabs[0] = firstTab;	
		}

		// loop through active links and show respective content
		for (var i=0,len=activeTabs.length;i<len;i++){
			SetTabActive(activeTabs[i]);
		}

		// loop through all the links, anf if link is in the array, assign onclick behaviour to it
		for (var i=0,len=document.links.length;i<len;i++){
			var a = document.links[i];
			if (!(match=anchorMatch.exec(a.href))) continue;
			if (a.semanticTab = everyTabThereIsById[match[1]]) AttachEvent(a,'click',SetTabFromAnchor,false);
		}
		
		if ((match=anchorMatch.exec(location.href)) && (a=everyTabThereIsById[match[1]])) SetTabActive(a);
		
	}
	Init();
},false);
