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

BusinessWeek
v2 HTML Slide Show Scripts
Copyright (c) by The McGraw-Hill Companies Inc. All Rights Reserved

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

/*- jQuery Document Ready ----------------------------------------------------*/

// Register functions with jQuery document ready event here

$(document).ready(function(){
	setGatewaySWF();
	initSlideShowDirectory();
	adjustNavCount();
});

/*- SWF Data Gateway ---------------------------------------------------------*/

var gatewaySWF;
var gatewayIsLoaded = false;
var gatewayCheckInterval;
var gatewayQueue = new Array();

function setGatewaySWF() {
	gatewaySWF = $('#gatewaySWF');
	gatewaySWF = gatewaySWF[0];
	gatewayCheckInterval = setInterval(gatewayCheck, 10);
}

function gatewayCheck() {
	if (gatewayIsLoaded) {		
		clearInterval(gatewayCheckInterval);	
		//
		// go through array to see if any requests were waiting...
		if (gatewayQueue.length != 0) {
			for (var i = 0; i < gatewayQueue.length; i++) {
				var storedRequest = gatewayQueue.shift();
				gatewayRequest(storedRequest.source, storedRequest.handler);
			}
		}
	}
}

function gatewayRequest(dataSource, dataHandler) {
	if (gatewayIsLoaded) {	
		gatewaySWF.getData(dataSource, dataHandler);
	} else {
		var request = new Object();
		request.source = dataSource;
		request.handler = dataHandler;
		gatewayQueue.push(request);
	}
}

function setGatewayStatus(status) {
	gatewayIsLoaded = status;
}

/*- 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;
	}
}

/*- "More Slide Shows" page --------------------------------------------------*/

function initSlideShowDirectory() {
	var moreSlideShows = document.getElementById("moreSlideShows");
	if (!moreSlideShows) return false;

	// OLD
	// var dataSource = "http://search.businessweek.com/Search?searchTerm=mediatype%3Aslideshow&collection=www&sortBy=pub_date+desc&skin=rss&x=0&y=0";	
	// var dataSource = "http://search.businessweek.com/AdvancedSearch?Media+Type=slideshow&skin=rss&searchType=advanced&resultsPerPage=12&sortBy=pub_date";
	
	// NEW
	// var dataSource = "http://search.businessweek.com/AdvancedSearch?mediatype=slideshow&skin=rss&searchType=advanced&resultsPerPage=12&sortBy=pub_date";

	// TEMP DATA SOURCES
	// var dataSource = "sample.xml"
	var dataSource = "http://images.businessweek.com/ss/feed.xml";

	gatewayRequest(dataSource, "buildSlideShowDirectory");
} 	

function buildSlideShowDirectory(data) {	
	if (data) {
		var sourceXML = parseXML(data);
		var items = $(sourceXML).find('item');
		$('#loadingMsg').remove();
		var listing = $('#column1').append('<div class="listing module"></div>');
		for (var i = 0; i < items.length; i++) {	
			if (i % 4 == 0) {
				var row = $('.listing.module').append('<div class="row"></div>');
			}
			var ssURL = $(items[i]).find('guid').text();
			var imageURL = ssURL.split("index.htm")[0] + "launch.jpg";
			var ssTitle = $(items[i]).find('title').text();
			ssTitle = ssTitle.split(" - BusinessWeek")[0];
			var thumbnail = ''
				+ '<div class="thumbnail">'
				+ '<a href="' + ssURL+ '">'
				+ '<img src="' + imageURL + '" alt="" width="110" height="100" /></a>'
				+ '<p><a href="' + ssURL + '">' + ssTitle + '</a></p>'
				+ '</div>';		
			$(row).append(thumbnail);
		}
	}
}

/*- Adjust Nav Count ---------------------------------------------------------*/

function adjustNavCount() {
	var slideCount = $('#slideNav .count').text();
	slideCount = slideCount.split(" of ");
	var currentSlide = Number(slideCount[0]);
	var totalSlides = Number(slideCount[1]);
	if (currentSlide == totalSlides) {
		$('.nextBtn').attr("href", "more.htm");
	} else if (currentSlide == 1) {
		$('.previousBtn').attr("href", "more.htm");
	}
	currentSlide = String(currentSlide);
	totalSlides = String(totalSlides + 1);
	$('#slideNav .count').text(currentSlide + ' of ' + totalSlides);
	$('#slideNav .count').addClass('active');
}


