/*
Take RSS Feed and display all tags in <li> format
*/

function RSSDisplay(params) {
	this.RSSData = [];
	this.xhrs = [];
	
	this.getParams = function() {
		this.sitepath = params.sitepath;
		this.itemsToDisplay = (params.itemsToDisplay != undefined) ? params.itemsToDisplay : 4;
		this.feed = params.feed;
		this.dataArea = params.dataArea;
		if (params.datekey)
			this.datekey = params.datekey;
		else {
			alert("Please identify the datekey in the parameter list!");
		}
		this.uniqueid = params.uniqueid;
		this.loadingImage = params.loadingImage;
		this.linktitletag = (params.linktitletag != undefined) ? params.linktitletag : "title";
		this.linkurltag = (params.linkurltag != undefined) ? params.linkurltag : "";
		this.showlabels = (params.showlabels != undefined) ? params.showlabels : false;
		this.labeltags = (params.labeltags != undefined) ? params.labeltags : {};
		this.labeltypes = (params.labeltypes != undefined) ? params.labeltypes : {};
		this.showsort = (params.showsort != undefined) ? params.showsort : false;
		this.labelsort = (params.labelsort != undefined) ? params.labelsort : {};
	}
	
	this.buildRSSList = function() {
		$(this.dataArea).innerHTML = "Loading... <img src='" + this.sitepath + this.loadingImage + "' />";
		var obj = new AjaxRequest();
		obj.rss = this.feed;
		obj.count = this.uniqueid;
		obj.init();
	
		this.checkStatus();
	}
	
	this.checkStatus = function() {
		var self = this;
		if (statusobj[self.uniqueid] == "running") {
			setTimeout(function(){self.checkStatus()}, 200); /* check status every 2 seconds */
		} else {
			this.RSSData = xhrs[this.uniqueid];
			this.RSSData = this.fixFilterData(this.RSSData);
			this.displayFilterData(this.RSSData);
		}
	}
	
	/* fix filter data - make sure all recs have same fields */
	this.fixFilterData = function(filter) {
			var self = this;
			
			//this added specifically for Josh McDowell since sort is on a field that is not in all items of the xml feed
			//needed to add the field so sort worked properly
			for (x=0;x<filter.length;x++) {
				if (filter[x].allnodes["ore:AudienceType"] == undefined) {
					filter[x].allnodes["ore:AudienceType"] = '';
				}
		        filter[x].allnodes["Date"] = new Date(filter[x].allnodes[this.datekey]);
			}
			return filter;
		}
	/* name of highlevel filter array passed, the actual name, div the data will return to and the pagecount to display */
	this.displayFilterData = function(filter) {
			var self = this;
			
			var prevgroup='', filterItemContent='', itemstart=-1, itemcount=-1;
			var datastore = $(this.dataArea);
			datastore.innerHTML = '';
			if (filter.length > 0) {
				if (this.showsort) {
					//sort title
					var span = document.createElement("span");
					span.className = "article-sort-title";
					span.innerHTML = "Sort: ";
					datastore.appendChild(span);
					//sort dropdown
					var sel = document.createElement("select");
					sel.className = "article-sort";
					sel.onchange = function() {
						self.filterSort(this.options[this.selectedIndex].value);
					}
					for (var key in this.labelsort) {
						this.sortval = (this.sortval != undefined) ? this.sortval : key;
						var optx = document.createElement("option");
						optx.value = key+this.labelsort[key].match(/\[\w\]/);
						optx.innerHTML = this.labelsort[key].replace(/\[\w\]/g,"");
						optx.selected = (key == this.sortval) ? 'selected' : '';
						sel.appendChild(optx);
					}
					datastore.appendChild(sel);
				}
				var pstart = 0;
				var pend = (this.itemsToDisplay > filter.length) ? filter.length : this.itemsToDisplay;
		
				filterItemContent += '<br />';		
				for (i=pstart;i<pend;i++) {
					datastore.appendChild(this.buildAddlContent(filter[i]));
				}
			} else {
				filterItemContent += "<p><h4>No RSS Feed Data found!</h4></p>"
			}
            
            // Move the description to the end of each event
            var rssDisplay = document.getElementById('rssDisplay');
            var descriptions  = new Array();
            var tags = rssDisplay.getElementsByTagName('li');
            var tcl = " ore-EventDescription ";
            for(i=0,j=0; i<tags.length; i++) {
              var test = " " + tags[i].className + " ";
              if (test.indexOf(tcl) != -1)
              descriptions[j++] = tags[i];
            }
            for (var i = 0; i < descriptions.length; i++) {
              descriptions[i].parentNode.appendChild(descriptions[i]);
            }
		}
	
	/* builds content to be written */
	this.buildAddlContent = function(filter) {
			var dataArticle = document.createElement("ul");
			dataArticle.className = "article-all";
			var newfilter  = new Object(filter.allnodes);
			for (var key in newfilter) {
				if (newfilter[key] != '') {
					var div = document.createElement("li");
					div.className = key.replace(":","-");
					if (this.showlabels) {
						var label = document.createElement("label");
						label.innerHTML = ((this.labeltags[key] != undefined) ? this.labeltags[key] : key);
						div.appendChild(label);
					}
					if (key == this.linktitletag && newfilter[this.linkurltag]) {
						var self = this;
						var dataHref = document.createElement("a");
						dataHref.innerHTML = newfilter[key];
						dataHref.href = newfilter[this.linkurltag];
						dataHref.target = "_new";
						div.appendChild(dataHref);
					} else {
						var span = document.createElement("span");
						switch (this.labeltypes[key]) {
							case "map" : 
								span.innerHTML = newfilter[key]+"&nbsp;<a href='http://maps.google.com/maps?q="+newfilter[key]+"' target='_new'>map</a>";
								break;
							case "email" : 
								var href = document.createElement("a");
								href.href = "mailto:"+newfilter[key];
								href.innerHTML = newfilter[key];
								span.appendChild(href);
								break;
							default : 
								span.innerHTML = newfilter[key];
								break;
						}
						div.appendChild(span);					
					}
					dataArticle.appendChild(div);
				}
			}
			return dataArticle;
		}

	this.filterSort = function(sortval) {
			var self = this;
			filter = this.RSSData.slice(0);
			
			var sortdir = (sortval.search(/\[\w\]/) > 0) ? (sortval.substr(sortval.search(/\[\w\]/)+1,1)) : 'a';
			this.sortval = sortval.replace(/\[\w\]/g,"");
			
			//use datekey to determine if the Date var should be used to sort rather than the text vers of the date
			if (this.sortval == this.datekey) this.sortval = "Date";
			
			/* sort descending - put all articles in title order */
			if (sortdir == 'd') {
				filter.sort(function (a, b){
							a = a['allnodes'][self.sortval];
							b = b['allnodes'][self.sortval];
							if (a>b) return -1;
							if (a <b) return 1;
							return 0; } );
			} else {
				filter.sort(function (a, b){
							a = a['allnodes'][self.sortval];
							b = b['allnodes'][self.sortval];
							if (a>b) return 1;
							if (a <b) return -1;
							return 0; } );
			}
			
			this.displayFilterData(filter);
		}
	
	/* write's output data */
	this.writeOutput = function() {
			var content = this.filterItemContent;
			this.content = "<div id='rssResults'><p>"+content+"</p></div>";
			return content;
		}

	this.init = function(params) {
			this.getParams(params);
			this.buildRSSList();
		}
	
	this.init(params);
}

google.load("feeds", "1"); /* initialize google feed */
