//	TitanWEB WCM v3.3 - RSS Reader JavaScript Library//	Usage: 	Uses AJAX to call and display an external RSS news feed on a TitanWEB WCM Psage//   Author: 	M. Dang, Kryos Systems//	Created:	November 2006	function AjaxInteraction(url, callback, postContent) {				var req = init();		req.onreadystatechange = processRequest;			function init() {			var xmlhttp ;			if (window.ActiveXObject) {				return new ActiveXObject("Microsoft.XMLHTTP");			} else if (window.XMLHttpRequest != null) {				xmlhttp = new XMLHttpRequest();				xmlhttp.overrideMimeType("text/xml");			} 						return xmlhttp;		}			function processRequest() {			if (req.readyState == 4) {				if (req.status == 200) {					if (callback) callback(req.responseXML);				} else {					//alert(req.status);					displayErrorMessage(strTWWCMErrorNA);				}			}		}		this.doGet = function() {			try {				req.open("GET", url, true);				req.send(null);			} catch (e) {				//alert("error calling doGet: " + e);				displayErrorMessage(strTWWCMErrorNA);			}		}			this.doPost = function() {			req.open("POST", url, true);			req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");			req.send(postContent);		}		}	function openRssAgent(url, titlesOnly, maxItems, newWindowLink, displayDate,title) {	/*******changes start********/		if(url.charAt(0)=="/"){		DrawLocalRSS(title, url, document.getElementById("rssHtmlOutput"), parseInt(maxItems), false,(titlesOnly=="true"),(newWindowLink=="true"),(displayDate=="false"));		}else{		/********changes end************/			var serviceUrl = urlpath_js + "/rssreader?openagent";			serviceUrl += "\&url=" + url;			serviceUrl += "\&titlesOnly=" + titlesOnly;			serviceUrl += "\&maxItems=" + maxItems;			serviceUrl += "\&newWindowLink=" + newWindowLink; 			serviceUrl += "\&displayDate=" + displayDate;					var ai = new AjaxInteraction(serviceUrl, updateRssData, null);			ai.doGet();			}	}	function updateRssData(xmlDoc) {			var rssHtmlOutput = document.getElementById("rssHtmlOutput"); 				// Check if RSS data was retrieved properly.  If not, display the appropriate		// error message.		var errorElement = xmlDoc.getElementsByTagName("titanWebError");		if (errorElement != null && errorElement.length > 0) {			displayErrorMessage(strTWWCMErrorNA, rssHtmlOutput);			return;		}				var stories = xmlDoc.getElementsByTagName("story");			// stories should never be empty if the ajax call is completed.  		// However, if stories is empty -- there is in all likelyhood, an xml handling error or agent error.		if (stories == null || stories.length == 0) {			displayErrorMessage(strTWWCMErrorNA, rssHtmlOutput);			return;		} 		for (i=0;i<stories.length;i++)		{			var newWindow = stories[i].getElementsByTagName("newWindow")[0].firstChild.nodeValue;			var storyHTML = "<p><a href=\""+stories[i].getElementsByTagName("link")[0].firstChild.nodeValue+ "\"";			if (newWindow.indexOf("true") >=0) storyHTML += " target=\"_blank\"";			storyHTML += ">";			storyHTML += "<strong>"+stories[i].getElementsByTagName("title")[0].firstChild.nodeValue +"</strong></a>";			var date = stories[i].getElementsByTagName("date");			if (date != null && date.length > 0) 				storyHTML += " - <i>" + date[0].firstChild.nodeValue +"</i>";			storyHTML += "<br>";			var abstractDesc = stories[i].getElementsByTagName("abstract");			if (abstractDesc != null && abstractDesc.length > 0) {				storyHTML += abstractDesc[0].firstChild.nodeValue;			}			storyHTML += "</p>";			rssHtmlOutput.innerHTML += storyHTML;		}	}		function displayErrorMessage(errorMessage, targetTag) {					var errorMessage = "<p>" + errorMessage + "</p>";		targetTag.innerHTML += errorMessage;		}//draws rssfunction DrawLocalRSS(title, url, container, maxItems, hideSubscribe,titlesOnly,newWindowLink,noDate){	if(!hideSubscribe){		var head = document.getElementsByTagName("head")[0];		var link = document.createElement("link");		link.setAttribute("rel","alternate");		link.setAttribute("type","application/rss+xml");		link.setAttribute("href",url);		link.setAttribute("title",new String(title));		head.appendChild(link);	}		container.className = "RSSDisplay";	var o = new AjaxInteraction(url, function(xmlDoc){		try{			var feed = xmlIntoObject(xmlDoc);				var items = feed.rss[0].channel[0].item;			while(container.childNodes.length>0)container.removeChild(container.childNodes[0]);			if(!items || items.length==0){				container.appendChild(document.createTextNode("No Items Found"));			}else{				var max = (maxItems) ? Math.min(maxItems,items.length) : items.length;				for(var i = 0 ; i < max ; i++){				var p = document.createElement("p");				var a = p.appendChild(document.createElement("a"));				a.href = items[i].guid[0]._text;				if(newWindowLink)a.target="_blank";				var strong = a.appendChild(document.createElement("strong"));				strong.appendChild(document.createTextNode(items[i].title[0]._text));				if(!titlesOnly){					if(!noDate && items[i]['pubDate']){						p.appendChild(document.createTextNode(" - "));						var italic = p.appendChild(document.createElement("i"));						italic.appendChild(document.createTextNode(items[i].pubDate[0]._text));					}					p.appendChild(document.createElement("br"));					p.appendChild(document.createTextNode(items[i].description[0]._text));				}				container.appendChild(p);				}							}		}catch(e){		}	});	o.doGet();}function xmlIntoObject(xmlDoc){	var recurser = new Object();	recurser.process = function(o,nodes){		for(var i = 0 ; i < nodes.length ; i++){			if(nodes[i].nodeType==3){				o._text += nodes[i].nodeValue;			}else if(nodes[i].nodeType==1){				var n = nodes[i].nodeName;				if(o[n]){					o[n].push(new Object());				}else{					o[n] = new Array(new Object());				}				o[n][o[n].length-1]._text = "";				o[n][o[n].length-1]._cdata = "";				 if(nodes[i].childNodes.length>0){					this.process(o[n][o[n].length-1], nodes[i].childNodes);				}			}else if(nodes[i].nodeType==4){				o._cdata += nodes[i].nodeValue;			}		}	};	var o = new Object();	recurser.process(o,xmlDoc.childNodes);	return o;}