// Custom AJAX routine that takes the Contact Lookup tool and redisplays it dynamically in any format needed
// Dean Huntley (c) 2008
// Kintera
/*
This contains the source code for data obtained from an RSS Feed.
*/
var sortval = '';

function RSSContentSearch (params) {
	this.getParams = function(params) {
		this.sectiontitle = params.title;
		this.sitepath = params.sitepath;
		this.itemsToDisplay = (params.itemsToDisplay != undefined) ? params.itemsToDisplay : 4;
		this.feed = params.feed;
		this.dataArea = params.dataArea;
		this.datekey = params.datekey;
		this.filter = (params.filter != undefined) ? params.filter : {};
		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.postdata = "__pagesize=2000&__ren_submit_type=3&__listname=/site/apps/kb/cs/contactsearch.asp&submit=submit&selectfieldname=state&searchoperator=1&fieldvalue=";
		this.usetemplate = (params.usetemplate != undefined) ? params.usetemplate : false;
		this.templatedata = '';
		if (params.templatedata) {
			for (var key in params.templatedata){
				this.templatedata += params.templatedata[key]; //store template in 1 long string
			}
		}
		if (this.usetemplate && this.templatedata == '') {
			alert('Error: params usetemplate set to true but no template data specified!\nusetemplate set to false');
			this.usetemplate = false;
		}
	}
	
	this.buildRSSList = function() {
		var self = this;
		$('#'+this.dataArea)[0].innerHTML = "<h3>Loading... <img src='" + this.sitepath + this.loadingImage + "' /></h3>";
		$.post(this.feed,self.postdata+self.filter["state"],function(data) {
			//find each 'item' in the file and parse it
			var rssdata = [];
			var count = 0;
			$(data).find('table.listren-listtbl tr:gt(2)').each(function(index, item) {
				var addrec = false;
				//name the current found item this for this particular loop run
				rssdata[index] = [];
				$(item).find('td').each(function(index2,tditem) {
					rssdata[index][index2] = tditem.innerHTML;
				});
			});
			//self.RSSData = rssdata;
			self.displayFilterData(rssdata);
  	    });
	}
	
	/* 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 displayany = false;
			var itemstart=-1, itemcount=-1;
			var datastore = $('#'+this.dataArea)[0];
			datastore.innerHTML = '<h3>'+this.sectiontitle+'</h3>';
			if (filter.length > 0) {
				var pstart = 0;
				var pend = (this.itemsToDisplay > filter.length) ? filter.length : this.itemsToDisplay;
		
				var i = 0;
				while (i<filter.length) {
					var addrec = false;					
					if (i>pend) break;
					datastore.appendChild(this.buildAddlContent(filter[i],i));
					displayany = true;
					i++;					
				}
				if (!displayany) {
					var html = document.createElement("span");
					html.innerHTML = "<p>No Records found!</p>";
					datastore.appendChild(html);
				}
			} else {
				var html = document.createElement("span");
				html.innerHTML = "<p>No RSS Records found!</p>";
				datastore.appendChild(html);
			}
		}
	
	/* builds content to be written */
	this.buildAddlContent = function(filter,count) {
		var htmlinner = this.templatedata;		
		var dataArticle = document.createElement("ul");
		dataArticle.className = "article-cl";
		var newfilter  = new Object(filter);
		var count = 1;
		for (var key in newfilter) {
			if (newfilter[key] != '') {
				var div = document.createElement("li");
				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 : 
						if (this.usetemplate) {
							//replace elements in template data
							var strcheck = new RegExp("\\["+(count++)+"\\]","g");
							htmlinner = htmlinner.replace(strcheck,newfilter[key].toString());
						} else {
							htmlinner = newfilter[key];
						}
						span.innerHTML = htmlinner;
						break;
				}
				div.appendChild(span);					
			}
		}
		dataArticle.appendChild(div);					
		
		return dataArticle;
	}


	this.init = function(params) {
			this.getParams(params);
			this.buildRSSList();
		}
	
	this.init(params);
}