function videoEmbed() { 
	var embed = $('related-article-embed');
	if (!embed) return;
	
	embed.parentNode.removeChild(embed);
	var contents = embed.getElementsByTagName('object');
	var other_contents = embed.getElementsByTagName('embed');
	if (contents.length == 0 && other_contents.length == 0) return;
	
	var article = document.getElementById("article");
	if (article == null) return false;

	var ptags = article.getElementsByTagName('p');
	if (ptags.length > article_embed_pos + 1) {
		var ptag = ptags[article_embed_pos + 1];
	} else {
		var ptag = ptags[ptags.length - 1].nextSibling;
	}
	ptag.parentNode.insertBefore(embed, ptag);
	return;
}

addLoadEvent(function() { 
	videoEmbed();
});


function articleAnchorTargets() {
	var article = document.getElementById("article");
	if (article == null) return false;
	var p = article.getElementsByTagName("p");
	for (i=0; i<p.length; i++) {
		var a = p[i].getElementsByTagName("a");
		var the_href = "";
		for (j=0; j<a.length; j++) { 
			the_href = a[j].getAttribute("href");
			if (the_href.indexOf("comcast.net") == -1)
			{
				a[j].setAttribute("target","_blank");
			}
		}
	}
}

addLoadEvent(function() {
	articleAnchorTargets();
});

var URItoMG = Class.create();
Object.extend(URItoMG.prototype, {
  initialize: function() {
    this.pcp = document.config.pathContext.substring(1,document.config.pathContext.length-1).split("/");
    this.articles = this.pcp[0];
	this.channel = this.pcp[1];
	if(this.channel.indexOf("-") != -1) {
		this.channel = this.pcp[1].substring(0,this.pcp[1].indexOf("-"));
		this.subchannels = this.pcp[1].substring(this.pcp[1].indexOf("-")+1).replace("-","/")+"/";
	} else {
		this.subchannels = "";
	}
	this.date = this.pcp[2].substring(0,4)+"/"+this.pcp[2].substring(4,6)+"/"+this.pcp[2].substring(6,8);
	this.slug = this.pcp[3];
  },
  buildMgUrl: function() { // example: "news/articles/world/2008/09/02/INTERNATIONAL-PAKISTAN-CHINA-DC.xml"
  	return "/" + this.channel + "/articles/" + this.subchannels + this.date + "/" + this.slug + ".xml";
  }
});

var MGtoArticleURL = Class.create();
Object.extend(MGtoArticleURL.prototype, {
  initialize: function(mg) {
  	this.path = mg.substring(mg.indexOf("/api/data")+10); // example: news/articles/national/2008/08/18/Baby.Death.Microwave.xml
    this.pcp = this.path.split("/");
	this.pcpLength = this.pcp.length;
    this.articles = this.pcp[1];
	this.channel = this.pcp[0];
	if(this.pcpLength > 6) {
		this.subchannels = "-" + this.pcp[2];
		if (this.pcpLength == 8) {
			this.subchannels += "-" + this.pcp[3];
		}
	} else {
		this.subchannels = "";
	}
	this.date = this.pcp[this.pcpLength-4] + this.pcp[this.pcpLength-3] + this.pcp[this.pcpLength-2];
	this.slug = this.pcp[this.pcpLength-1];
  },
  buildUrl: function() { // example: "news/articles/world/2008/09/02/INTERNATIONAL-PAKISTAN-CHINA-DC.xml"
  	return "/articles/" + this.channel + this.subchannels + "/" + this.date + "/" + this.slug.slice(0,-4) + "/";
  }
});

var RelatedArticles = {
	initialize: function(){
		var container = $('related-articles');
		if (container) {
			var url = this.getAjaxUrl();
			new Ajax.Request(url, {
				method: 'GET',
				encoding:'UTF-16',
				onSuccess: function(transport){
					
					/* For some reason IE is not treating the transport as an XML object even though the contentType is specified
					 * Check here for IE browser then manually create the XMLDOM active X object so we can parse
					 */
					
					var data;
					if (jQuery.browser.msie) {
						data = new ActiveXObject('Microsoft.XMLDOM');
						data.async = false;
						data.loadXML(transport.responseText);
					}
					else
						data = transport.responseXML;

					var results = data.getElementsByTagName("RESULT");
					if(results && results.length > 0) {
							
						var list = "<ul>";
						var count = 0;
						$A(results).each(function(result) {
							if(count < 4)	//limit number of displayed related articles to 5
							{
								var href = new MGtoArticleURL(result.getElementsByTagName("ID")[0].firstChild.nodeValue);
								var label = result.getElementsByTagName("TITLE")[0].firstChild.nodeValue;
								list += '<li><a href="'+href.buildUrl()+'" rel="default" title="'+label+'">'+label +'</a></li>';
							}
							count++;
						});
						list += "</ul>";
						var relatedStart = '<div class="related"><h2 class="media">Related Articles</h2>';
						var relatedEnd = '<i class="ul"></i><i class="ur"></i><i class="lr"></i><i class="ll"></i></div>';	
						container.innerHTML = relatedStart + list + relatedEnd;	
						container.appendChild(TrackingNode.build_comment('META', {
							module: ['relatedarticles']
						}));

						var links = container.getElementsByTagName('a');
						for (var i=0; i<links.length; i++) {
							links[i].appendChild(TrackingNode.build_comment('META', {
								linkType: ['basic']
							}));
						}
					}
				}
			});
		}
	},
	getAjaxUrl: function() {
		var relatedTypePath = "/apolloapi/FGetSimilarNewsFromId?SourceID=";
		var mgProxy = document.config.ssMgProxy;
		var mgDataPath = "/midgard/cachesvc/api/data";
		var pcp = new URItoMG;
		var mgArticlePath = pcp.buildMgUrl()
		return relatedTypePath + mgProxy + mgDataPath + mgArticlePath;
	}
}

addLoadEvent(function() {
	if (document.config.ssMgProxy) {
		RelatedArticles.initialize();
	}
});

var RelatedVideos = {
	initialize: function(max){
		var container = $('related-videos');
		if (container) {
			var url = this.getAjaxUrl(max);
			new Ajax.Request(url, {
				method: 'GET',
				onSuccess: function(transport){
					/* For some reason IE is not treating the transport as an XML object even though the contentType is specified
					 * Check here for IE browser then manually create the XMLDOM active X object so we can parse
					 */
					var data;
					if (jQuery.browser.msie) {
						data = new ActiveXObject('Microsoft.XMLDOM');
						data.async = false;
						data.loadXML(transport.responseText);
					}
					else
						data = transport.responseXML;
						
					var results;
					try{
						results = data.getElementsByTagName("results")[0].getElementsByTagName("content");
					}catch(e){
						//there are no related videos for this article
						if(e instanceof TypeError){
							// show latest videos
							document.getElementById('latestvideos').style.display = 'block';
							// hide related video div
							document.getElementById('related-videos').style.display = 'none';
							return;
						}
						else
							throw e;
					}
					
					if(results && results.length > 0) {
						var list = "<ul>"
						$A(results).each(function(result) {

							var label = result.getElementsByTagName("title")[0].firstChild.nodeValue;						
							var provider = result.getElementsByTagName("linkText")[0].firstChild.nodeValue;
							if(!provider || provider == "null" || provider.trim() == "More News")
								provider = "Associated Press";
							var thumbnailURL = result.getElementsByTagName("thumbnailURL")[0].firstChild.nodeValue;
							var thePlatformURL = result.getElementsByTagName("thePlatformURL")[0].firstChild.nodeValue;
							var fanURLre = /popup\.html/;
							var fanURL = fanURLre.test(thePlatformURL);
							if(fanURL) {
								var href = "http://www.comcast.net/data/fan/html/popup.html" + unescape(thePlatformURL.substring(thePlatformURL.indexOf("popup.html")+10)) + '&cid=fanlink&attr=' + document.config.dataPackageContext.split('/')[1] + 'article_related';
							} else {
								var href = unescape(thePlatformURL.substring(thePlatformURL));
							}

							list += '<li>';
							list += '<a href="'+href+'" rel="'
							if(fanURL) { list += 'fan '; }
							list += 'track" title="'+label+'"><img src="'+thumbnailURL+'" alt="'+label+'" /></a>';
							list += '<a href="'+href+'" rel="'
							if(fanURL) { list += 'fan '; }
							list += 'track" title="'+label+'">'+label.limit(35)+'</a>';
							list += '<p>'+provider+'</p>';
							list += '</li>';
							
						});
						list += "</ul>";
						var corners = "<i class='ul'></i><i class='ur'></i><i class='lr'></i><i class='ll'></i>";
						var relatedStart = '<h2 class="media video">Related Videos</h2><div class="capsule medium fixed-small clearfix">';
						var relatedEnd = '</div>';	
						container.innerHTML = relatedStart + list + corners + relatedEnd;
						container.appendChild(TrackingNode.build_comment('META', {
							module: ['relatedvideos']
						}));
						var links = container.getElementsByTagName('a');
						for (var i = 0; i < links.length; i++) {
							assign_handlers(links[i]);

							links[i].appendChild(TrackingNode.build_comment('META', {
								linkType: ['basic']
							}));
							var image = links[i].getElementsByTagName('img');
							if (image.length > 0) {
								links[i].appendChild(TrackingNode.build_comment('META', {
									linkText: [image[0].alt]
								}));
							}
						}
						
					}
					else{
						//there are no related videos
						$('related-videos').style.display = 'none';
						
						//show latest videos div so they will show if present
						$('latestvideos').style.display = 'block';
					}
				}
			});
		}
	},
	getAjaxUrl: function(max) {
		var max = max||6;
		var relatedTypePath = "/apolloapi/FGetSimilarVideoFromNewsId?resultsFormat=FAST&numResults="+max+"&SourceID=";
		var mgProxy = document.config.ssMgProxy;
		var mgDataPath = "/midgard/cachesvc/api/data";
		var pcp = new URItoMG;
		var mgArticlePath = pcp.buildMgUrl()
		return relatedTypePath + mgProxy + mgDataPath + mgArticlePath;
	}
}

addLoadEvent(function() {
	if (document.config.ssMgProxy) {
		RelatedVideos.initialize(5);
	}
});
