$(document).ready(function(){
	// Inject icons for different content type links
	applyIconSelector(".homepage #top-column2");	
	applyIconSelector("body:not(.homepage) #main-top");
	applyIconSelector("#bottom-inner .subchannel", false);
	
	$("div[id^='ad-']").openAdPositions();
	
	// links with rel="external" open in a new window
	$("a[rel*=external]").click(function(){
        window.open($(this).attr('href'));
        return false;
    });
	updateTabBox();
	
});

function applyIconSelector(selector, addText) {
	addText = typeof(addText) != 'undefined' ? addText : true;

	$(selector + " a[href^='http://images\.businessweek\.com/ss/']").not('h1 a').addIcon('slideshow', (addText) ? "Slideshow" : "");
	$(selector + " a[href^='http://feedroom\.businessweek\.com/']").not('h1 a').addIcon('video', (addText) ? "Video" : "");
	$(selector + " a[href^='http://bx\.businessweek\.com/']").not('h1 a').addIcon('bx', (addText) ? "Topic" : "");
}

// GLOBAL AD RANDOM NUMBER VARIABLE FOR USE IN AD CODE
var adOrdRandom = ('1' + ('' + Math.random()).substring(2, 11));

$.fn.addIcon = function(type, text) {
	return this.each(function(){
		var self = this;
		$(self).after('<span class="icon"><img class="' + type + '" src="'+ getCdnBase() + '/images/icons/' + type + '.gif" />' + text + '</span>');
	});
};

$.fn.openAdPositions = function() {
	return this.each(function(i,o){
		var self = this;
		var imagesArray = $(self).find("img");
		if (imagesArray.length == 0) {
			$(self).css("display", "block");
			$(self).addClass("active");
			return;
		}
		else {
			$(imagesArray).each(function(i,imageObject){
				var imageSource = $(imageObject).attr("src");
		        if (!imageSource || (imageSource.indexOf("bw-no-show-ad") < 0 && imageSource.indexOf("817-grey") < 0)) {
		             $(imageObject).parents("div[id^='ad-']").css("display", "block");
		             $(imageObject).parents("div[id^='ad-']").addClass("active");
		        }
			});
		}
	});
};


var assembleLinks = function(size, module, section, module_index, el, isDebugOn) {
	return function(link_index, link_el) {
		var moduleIdIndexAppender = "";
		if (size > 1) {
			moduleIdIndexAppender = ":" + module_index;
		} 
		linkPosition = link_index + 1;
		
		var moduleId = module && module.length > 0 ? (section + ':' + module) : section;
		var link = $(this);
		trackingAttr = "name";
		oldWtParam = link.attr("bx:om");
		trackingString = "&lid=" + moduleId + moduleIdIndexAppender + "&lpos=" + linkPosition +  (oldWtParam? "/" + oldWtParam : "");
		link.attr(trackingAttr, trackingString);
		
		if (isDebugOn) {
			var linkTipContent = "<p class=\"toolTipContent\">Link HREF: <strong>" +  link.attr("href") + "</strong></p>";
			linkTipContent += '<p class="toolTipContent">Module Name: <strong>' +  moduleId + moduleIdIndexAppender + '</strong></p>';
			linkTipContent += '<p class="toolTipContent">Link Position: <strong>' +  linkPosition + '</strong></p>';
			link.qtip({content: linkTipContent , style: {name: 'green'}, position: {target: 'mouse'}});
		}
	}
};

var getDivElements = function(size, module, section, el, isDebugOn) {
	return function(i, el) {
		var linkCount = 0;
		var links = this.nodeName.toLowerCase() == 'a' ? $(this) : $(this).find('a:not(.ajax)');
		var linksSize = $(links).size();
		$(links).each(
			assembleLinks(size, module, section, i+1, el, isDebugOn)
		);
		
		if (isDebugOn) {
			var moduleIdIndexAppender = "";
			if (size > 1) {
				moduleIdIndexAppender = ":" + (i + 1);
			}
			$(el).css('border', '1px solid green').prepend('<p class="omdebug">Mod Name: <strong>' + section + moduleIdIndexAppender + '</strong></p><p class="omdebug">Total # of Links: <strong>' + linksSize + '</strong></p>');
		}
	}
};
	


$.fn.createOmnitureLinkAttr = function(section, module, options) {
	options = $.extend({
		// turn on Omniture debugging mode by appending ?omdebug to the href
		omnitureDebugMode: (/maps$/i).test(window.location.href)
    }, options);
	
	var self = this;
	var debugOn = false;
	
	if (options.omnitureDebugMode) {
		debugOn = true;
	}
	
	var size = this.size();
	this.each(
		getDivElements(size, module, section, this, debugOn)
	);	
};

function renderAdPosition(type, size, options, tile, site, url, templateId) {
	var jsScriptSrc = createAdUrl("http://ad.doubleclick.net/adj/", site, url, templateId, type, size, options, tile, adOrdRandom);
	var linkHref = createAdUrl("http://ad.doubleclick.net/jump/", site, url, templateId, type, size, options, tile, adOrdRandom);
	var imgSrc = createAdUrl("http://ad.doubleclick.net/ad/", site, url, templateId, type, size, options, tile, adOrdRandom);
	return '<scr' + 'ipt src="' + jsScriptSrc + '" type="text/javascript"><\/scr' + 'ipt>\n';
}

function createAdUrl(baseUrl, site, url, templateId, type, size, options, tile, randomNum) {
	var thisOptions = (options != "") ? options + ";" : "";
	return baseUrl + site + ";url=" + url + ";page=" + templateId + ";" + templateId + "=" + type + ";sz=" + size + ";" + thisOptions + "tile=" + tile + ";ord=" + randomNum + "?";
}

/*- "Most Popular" Module Tab Switching --------------------------------------*/

function updateTabBox() {
	if (!document.getElementById) return false;
	if (!document.getElementsByTagName) return false;
	//
	var divArray = document.getElementsByTagName("div");
	for (var i = 0; i < divArray.length; i++) {
		var divClass = divArray[i].className;
		if (divClass != null && divClass.indexOf("tabBox") != -1) {
			var tabs = divArray[i].getElementsByTagName("ul")[0].getElementsByTagName("li");
			for (var j = 0; j < tabs.length; j++) {
				var tabLink = tabs[j].getElementsByTagName("a")[0];
				tabLink.onclick = function() {
					var tabClass = this.parentNode.className;
					var tabBoxID = this.parentNode.parentNode.parentNode.getAttribute("id");
					var tabBox = document.getElementById(tabBoxID)		
					tabBox.className = "module tabBox " + tabClass;
					return false;
				};
			}
		}
	}
}


