/*------------------------------------------------------------------------------

BusinessWeek
HTML Slide Show Scripts
Version: 1.0
Copyright (c) The McGraw-Hill Companies Inc. All Rights Reserved

------------------------------------------------------------------------------*/

/*- Run On Load --------------------------------------------------------------*/

// window.onload listener to share event with multiple functions
// Based on runOnLoad function from 
// "JavaScript: The Definitive Guide", 5th ed, p.434, example 17-7

runOnLoad.functionsQueue = new Array();
runOnLoad.isLoaded = false;

function runOnLoad(functionCall) {
	if (runOnLoad.isLoaded) functionCall();
	else runOnLoad.functionsQueue.push(functionCall);
}

runOnLoad.run = function() {
	if (runOnLoad.isLoaded) return;
	for (var i = 0; i < runOnLoad.functionsQueue.length; i++) {	
		//
		// runOnLoad.functionsQueue[i]();
		//
		try { runOnLoad.functionsQueue[i](); }		
		catch(functionError) { 
			if (functionError instanceof Error) {
				alert(functionError.name + ": " + functionError.message);
			}
		}
	}
	runOnLoad.isLoaded = true;
	delete runOnLoad.functionsQueue;
	delete runOnLoad.run;
};

if (window.addEventListener) {
	window.addEventListener("load", runOnLoad.run, false);
} else if (window.attachEvent) {
	window.attachEvent("onload", runOnLoad.run)
} else {
	window.onload = runOnLoad.run;
}

//
//
// REGISTER FUNCTIONS WITH runOnLoad HERE
runOnLoad(initRelatedItems);
runOnLoad(initThumbnailStates);
runOnLoad(initContentTargets);
// runOnLoad(storeChannel);
// runOnLoad(storePageName);
//
//

/*- Campaign Passer ----------------------------------------------------------*/

// legacy function

function gotoPage(url) {
	top.content.location = url + top.location.search;
}

/*- Channel Value ------------------------------------------------------------*/
//
// retrieve channel value from slide content,
// store in thumbnails frame for later use by closing slide
//
/*
function storeChannel() {
	if (!document.getElementsByTagName) return false;
	if (parent.frames.length == 0) return false;
	if (parent.frames[1].channel == undefined) {
		var metas = document.getElementsByTagName("meta");
		for (var i = 0; i < metas.length; i++) {	
			if (metas[i].name == "channel") {
				parent.frames[1].channel = metas[i].content;			
				break;
			}
		}
	}
}
*/

function getChannel() {
	// if (parent.frames.length == 0) return false;
	// return parent.frames[1].channel;
	return false;
}

/*- Page Name Value ----------------------------------------------------------*/
//
// retrieve page name value from slide content,
// store in thumbnails frame for later use by closing slide
//
/*
function storePageName() {
	if (!document.getElementsByTagName) return false;
	if (parent.frames.length == 0) return false;
	if (parent.frames[1].pageName == undefined) {
		parent.frames[1].pageName = parent.frames[0].s_pageName;
	}
}
*/

function getPageName() {
	// if (parent.frames.length == 0) return false;
	// return parent.frames[1].pageName;
	return false;
}

/*- Other Resources ----------------------------------------------------------*/

var needRelatedItems;

function initRelatedItems() {
	if (!document.getElementById) return false;
	if (!document.getElementsByTagName) return false;
	if (!document.getElementById("closing")) return false;	
	if (!document.getElementById("otherResources")) return false;
	if (document.getElementById("otherResources").childNodes.length == 0) { 
		needRelatedItems = true;
	}
}

function addRelatedItems(input) {
	if (needRelatedItems) {
		var sourceXML = parseXML(input);
		//
		var otherResources = document.getElementById("otherResources");
		//
		var strap = document.createElement("p");
		strap.className = "strap";
		var strapText = document.createTextNode("Also on BW");
		strap.appendChild(strapText);
		otherResources.appendChild(strap);
		//
		var relatedItems = document.createElement("ul");
		relatedItems.className = "feedLinks";
		//
		var itemsArray = sourceXML.getElementsByTagName("item");
		for (var i = 0; i < 10; i++) {	
			var title = itemsArray[i].getElementsByTagName("title")[0].firstChild.nodeValue;
			var link = itemsArray[i].getElementsByTagName("link")[0].firstChild.nodeValue.split("?")[0];
			var newRelatedItem = document.createElement("li");
			var newLink = document.createElement("a");
			newLink.setAttribute("target", "businessweek");
			newLink.setAttribute("href", link);
			var linkText = document.createTextNode(title);
			newLink.appendChild(linkText);			
			newRelatedItem.appendChild(newLink);
			relatedItems.appendChild(newRelatedItem);
		}
		otherResources.appendChild(relatedItems);
	}
}

/*- Generic XML Parser -------------------------------------------------------*/

// takes serialized XML string and returns XML object

function parseXML(text) {
	if(typeof DOMParser != "undefined") {
		return (new DOMParser()).parseFromString(text, "application/xml");
	} else if (typeof ActiveXObject != "undefined") {		
		var doc = new ActiveXObject("Microsoft.XMLDOM");
		doc.async = "false";
		doc.loadXML(text);
		return doc;
	} else {
		var url = "data:text/xml;charset=utf-8," + encodeURIComponent(text);
		var request = new XMLHttpRequest();
		request.open("GET", url, false);
		request.send(null);
		return request.responseXML;
	}
}

/*- Adjust Thumbnails --------------------------------------------------------*/

var thumbnailLinks;
var thumbnailTable;

function initThumbnailStates() {
	if (!document.getElementById) return false;
	if (!document.getElementsByTagName) return false;
	if (!document.getElementById("thumbnails")) return false;	
	thumbnailTable = document.getElementsByTagName("table")[0];
	thumbnailLinks = thumbnailTable.getElementsByTagName("a");
	//
	thumbnailLinks[0].className = "current";
	//
	for (var i = 0; i < thumbnailLinks.length; i++) {
		thumbnailLinks[i].onclick = function() {
			updateThumbnailStates(this);
		}
	}
	initClosingLink();
}

function updateThumbnailStates(link) {	
	//
	if (thumbnailLinks == undefined) {
		thumbnailLinks = parent.frames[1].thumbnailLinks;
	}
	//
	if(typeof(link) == "number") {
		link = thumbnailLinks[link - 1];
	}
	//
	for (var i = 0; i < thumbnailLinks.length; i++) {
		if (link == thumbnailLinks[i]) {
			thumbnailLinks[i].className = "current";
		} else {
			thumbnailLinks[i].className = "";
		}
	}
}

function initClosingLink() {
	var moreLinkCell = document.createElement("td");
	moreLinkCell.className = "moreLink";
	var moreLink = document.createElement("a");
	moreLink.setAttribute("href", "source/closing.html");
	moreLink.setAttribute("target", "content");
	var moreLinkText = document.createTextNode("more");
	moreLinkCell.appendChild(moreLink);
	moreLink.appendChild(moreLinkText);
	thumbnailTable.getElementsByTagName("tr")[0].appendChild(moreLinkCell);
	//
	moreLink.onclick = function() {		
		updateThumbnailStates(null);
	}
}

/*- Content HREF Targets -----------------------------------------------------*/

// add "businessweek" target to all links in "content" div of slides

function initContentTargets() {
	if (!document.getElementById) return false;
	if (!document.getElementsByTagName) return false;
	if (!document.getElementById("slide")) return false;
	//
	var content = document.getElementById("content");
	var contentLinks = content.getElementsByTagName("a");
	//
	for (var i = 0; i < contentLinks.length; i++) {
		contentLinks[i].setAttribute("target", "businessweek");
	}
		
	// also fix main BW logo target while we're at it...
	var header = document.getElementById("header");
	header.getElementsByTagName("a")[0].target = "_parent";
}
