﻿function gcidStrip(oldString)
{
	return oldString.split('?')[0] + '?gcid=' + GCID + ((oldString.match(/[\?\&]/gi))?('&'+oldString.split('?')[1]):'');
}

function replaceAmps (stringVal)
{
	searchStr = new RegExp('&amp','gi')
	stringV
}

function elementMaker ()
{
	element = document.createElement(arguments[0]);
	for(var abc=1;abc<arguments.length;abc++)
	{
		firstEqualsSign = arguments[abc].indexOf('=')
		paramName = arguments[abc].substring(0,firstEqualsSign)
		paramValue = arguments[abc].substring(firstEqualsSign+1,arguments[abc].length)
		
		element.setAttribute(paramName,paramValue)
	}
	return element
}

var xmlreqs = new Array();

function CXMLReq(freed) {
	this.freed = freed;
	this.xmlhttp = false;
	this.whichFeed = 0;
	if (window.XMLHttpRequest) {
		this.xmlhttp = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
}

function xmlreqGET(whichFeed) {
	var pos = -1;
	for (var i=0; i<xmlreqs.length; i++) {
		if (xmlreqs[i].freed == 1) { pos = i; break; }
	}
	if (pos == -1) { pos = xmlreqs.length; xmlreqs[pos] = new CXMLReq(1); }
	if (xmlreqs[pos].xmlhttp) {
		xmlreqs[pos].freed = 0;
		xmlreqs[pos].whichFeed = whichFeed;
		xmlreqs[pos].xmlhttp.open("GET",xmlFeedLocs[whichFeed],true);
		xmlreqs[pos].xmlhttp.onreadystatechange = function() {
			if (typeof(xmlhttpChange) != 'undefined') { xmlhttpChange(pos); }
		}
		if (window.XMLHttpRequest) {
			xmlreqs[pos].xmlhttp.send(null);
		} else if (window.ActiveXObject) {
			xmlreqs[pos].xmlhttp.send();
		}
	}
}

function xmlhttpChange(pos) {
	if (typeof(xmlreqs[pos]) != 'undefined' && xmlreqs[pos].freed == 0 && xmlreqs[pos].xmlhttp.readyState == 4) {
		if (xmlreqs[pos].xmlhttp.status == 200 || xmlreqs[pos].xmlhttp.status == 304) {
			processFeed(xmlreqs[pos].whichFeed,xmlreqs[pos].xmlhttp.responseXML);
		} else {
			bustedFeed(xmlreqs[pos].whichFeed);
		}
		xmlreqs[pos].freed = 1;
	}
}

cleanWhitespace = function(node) {
     var notWhitespace = /\S/;
     for (var i=0; i < node.childNodes.length; i++) {
         var childNode = node.childNodes[i];
         if ((childNode.nodeType ==
3)&&(!notWhitespace.test(childNode.nodeValue))) {
             // that is, if it's a whitespace text node
             node.removeChild(node.childNodes[i]);
             i--;
         }
         if (childNode.nodeType == 1) {
             // elements can have text child nodes of their own
             cleanWhitespace(childNode);
         }
     }
}

function processFeed(whichFeed,responseXML)
{	
	
	cleanWhitespace(responseXML);
	browserDocNode = 0;
	if(window.ActiveXObject)
	{browserDocNode = 1}
	var motherUL = elementMaker("UL","class=dealsContent");
	
	setLength = (responseXML.childNodes[browserDocNode].childNodes[0].childNodes.length-8>4)?4:responseXML.childNodes[browserDocNode].childNodes[0].childNodes.length-8;
	
	for(var y=0;y<setLength;y++)
	{		
			var dealTitle = responseXML.childNodes[browserDocNode].childNodes[0].childNodes[8+y].childNodes[0].childNodes[0].nodeValue;
			
			if (dealTitle.length >= 50){
				dealTitle = dealTitle.substring(0,47)+'...';
			}
			
			var dealURL =  responseXML.childNodes[browserDocNode].childNodes[0].childNodes[8+y].childNodes[1].childNodes[0].nodeValue;
			var dealURL = gcidStrip(dealURL);
			var dealLI = elementMaker("LI","class=rssLine");
			var dealA = elementMaker("A","href="+dealURL);
			dealA.innerHTML = dealTitle;
			dealLI.appendChild(dealA);
			motherUL.appendChild(dealLI);
			
	}
	contentChildToReplace = document.getElementById("Top" + xmlFeedTitles[whichFeed] + "_DealsContent");
	newChild = document.getElementById("Top" + xmlFeedTitles[whichFeed] + "_DealsWrapper").replaceChild(motherUL,contentChildToReplace)
	
}

function bustedFeed(whichFeed)
{
	failureDiv = elementMaker("div","Top" + xmlFeedTitles[whichFeed]+ "_DealsContent")
	failureDiv.innerHTML = "Sorry, deals failed to load."
	contentChildToReplace = document.getElementById("Top" + xmlFeedTitles[whichFeed] + "_DealsContent");
	newChild = document.getElementById("Top" + xmlFeedTitles[whichFeed] + "_DealsWrapper").replaceChild(failureDiv,contentChildToReplace)
}

function orbitFeeds()
{
	xmlFeeds = new Array('vacationpackages','hotels')
	xmlFeedTitles = new Array('Top Orbitz Vacation Packages','Top Orbitz Hotels')
	xmlFeedLocs = new Array()
	xmlFeedLocs[0] = "http://www.washingtonpost.com/wp-srv/traveldeals/rss/topdeals/orbit/topdeals-vacationpackages.rss.xml"
	xmlFeedLocs[1] = "http://www.washingtonpost.com/wp-srv/traveldeals/rss/topdeals/orbit/topdeals-hotels.rss.xml"
	var xmlHttp = new Array()
	GCID = 'C11287x561'

	for(var x=0;x<xmlFeeds.length;x++)
	{	
	
		feedname = xmlFeedTitles[x];    
	    headerDiv = elementMaker("h3","id=Top" + feedname + "_DealsHeader","class=dealsHeader")
	    headerDiv.innerHTML = feedname
	 	contentDiv = elementMaker("div","id=Top" + feedname + "_DealsContent","class=dealsContent")
	 	contentDiv.innerHTML = feedname + " Deals Loading..."
	    wrapperDiv = elementMaker("div","id=Top" + feedname + "_DealsWrapper","class=dealsWrapper")
	    wrapperDiv.appendChild(headerDiv)
	    wrapperDiv.appendChild(contentDiv)	
	    document.getElementById('orbitTopDealsWrapper').appendChild(wrapperDiv)
		xmlreqGET(x)
	}
}