/*

FamilyLife Article Listing - Source code
Version: beta

This contains the source code for the Broadcast Listing and Search. 
Pulling from Kintera Sphere RSS feeds

Requires:
	Google AJAX Feed API
	http://code.google.com/apis/ajaxfeeds/

*/
/* init vars */
var sitepath = $('fltsummary').getAttribute('sitepath');
var defaultTitle = $('fltsummary').getAttribute('pagetitle');
var searchsort = $('fltsummary').getAttribute('sort');
var initialDisplay = $('fltsummary').getAttribute('initialDisplay') ? $('fltsummary').getAttribute('initialDisplay') : "no";
var itemsPerPage = 10; /* on filter limit number of items per page */
var errorcount = 10;
var initialDateSearch = new Date();
initialDateSearch.setDate(initialDateSearch.getDate()-$('fltsummary').getAttribute('dateval'));
var initialDaysApart = 30;
var statusobj = [];
var xhrs = [];

var filterBroadcast = new Array();
var filterBroadcastFLTW = new Array();
var filterBroadcastRFL = new Array();
var filterBroadcastArc = new Array();
var filterBroadcastFLTWArc = new Array();
var filterBroadcastRFLArc = new Array();

/* add enter event to guest and keyword input fields */
Event.observe('fltsummaryguests', 'keydown', this.fltsummaryonKeyPress.bindAsEventListener(this));
Event.observe('fltsummarykeywords', 'keydown', this.fltsummaryonKeyPress.bindAsEventListener(this));

Event.observe('fltwsummaryguests', 'keydown', this.fltwsummaryonKeyPress.bindAsEventListener(this));
Event.observe('fltwsummarykeywords', 'keydown', this.fltwsummaryonKeyPress.bindAsEventListener(this));

Event.observe('rflsummaryguests', 'keydown', this.rflsummaryonKeyPress.bindAsEventListener(this));	
Event.observe('rflsummarykeywords', 'keydown', this.rflsummaryonKeyPress.bindAsEventListener(this));	

/*global array foy autocomplete guest list */
var FLTGuestList = new Array();
var FLTWGuestList = new Array();
var RFLGuestList = new Array();

/* initial loading */
this.createLoading = function() {
	$('fltsummary').innerHTML='<div id="bloading-outer"><div id="bloading" class="shadow">Retrieving FamilyLife Today Broadcasts... <img src="'+sitepath+'/loading.gif" /></div></div>';
	$('fltwsummary').innerHTML='<div id="bloading-outer"><div id="bloading" class="shadow">Retrieving FamilyLife This Week Broadcasts... <img src="'+sitepath+'/loading.gif" /></div></div>';
	$('rflsummary').innerHTML='<div id="bloading-outer"><div id="bloading" class="shadow">Retrieving Real FamilyLife Broadcasts... <img src="'+sitepath+'/loading.gif" /></div></div>';
}

/*
	-------------------------------------------------

	Data is gathered by google in the next 3 routines
	
	-------------------------------------------------

*/
/* dynamic rss ajax call - based on rss feed */
function AjaxRequest()
      {
	  this.count = 0;
	  this.rss = "";
      this.Method = "GET";//OR "POST" 
      this.Async = true; //OR false (asynchronous or synchronous call) 
      this.init = function() {
		  this.request = new getXMLHttp();
		  if (this.request) {
			this.request.onreadystatechange=this.handleResponse;
			this.request.open(this.Method, this.rss , this.Async);
			this.request.send(null);
		}
	  }
	  var self = this;
  	  this.handleResponse = function() {
			if (self.request.readyState == 1) { /* Not Loaded yet */ }
			if (self.request.readyState == 4) { 
				if (self.request.status == 200) { // Loaded
						var xmldoc = self.request.responseXML;
						var root_node = xmldoc.getElementsByTagName("item");
						var filter = parseRSSBroadcast(root_node);
						xhrs[self.count]=filter;
					    statusobj.splice(this.count,1); /* remove status */
						delete self.request;
				} else {
					alert('There was a problem with the request. '+self.request.status);
				}
			}
	   }
}
/* dynamic rss google call - based on passed rss feed */
function AjaxRequestGoogle() {
		this.count = 0;
		this.rss = "";
		this.google = google;
		/* Setting up google feeds */
		this.init = function() {
			this.google.load("feeds", "1");
			var feed = new this.google.feeds.Feed(this.rss);
			feed.setNumEntries(3000);
			feed.setResultFormat(this.google.feeds.Feed.XML_FORMAT);
			feed.load(this.handleresponse);
		}
		var self = this;
		this.handleresponse = function(result) {
			if (!result.error) {
				var root_node = result.xmlDocument.getElementsByTagName("item");
				var filter = parseRSSBroadcast(root_node);
				xhrs[self.count]=filter;
				statusobj.splice(this.count,1); /* remove status */
			} else {
				setTimeout('BroadcastReload('+self.count+');', 500);
			}
		}
}
/* if google fails - retry */
function BroadcastReload(divcnt) {
	var obj = new AjaxRequestGoogle();
	obj.count=divcnt;
	switch (divcnt) {
		case 0: obj.rss = $('fltsummary').getAttribute('rss');break;
		case 1: obj.rss = $('fltwsummary').getAttribute('rss');break;
		case 2: obj.rss = $('rflsummary').getAttribute('rss');break;
	}
	obj.init();
}

/* 
	------------------------------------------------------------------

	Next routines use xmlhttprequest to open the files and store data

	------------------------------------------------------------------
*/
/* when achive is checked - the FamilyLife Today XML file is opened and stored */
this.getBroadcastData2 = function() {
	if ($("fltsummaryarc").checked) {
		$('fltsummaryarcmsg').innerHTML='<div id="bloading-outer"><div id="bloading" class="shadow">Adding Archive to FamilyLife Today Broadcasts... <img src="'+sitepath+'/loading.gif" /><br />When Finished entire broadcast list will be searchable.</div></div>';
		
		var obj = new AjaxRequest();
		statusobj.push(obj);
		obj.count=1;
		obj.rss = $('fltsummary').getAttribute('archive');
		obj.init();

		checkArchiveStatus(1);

	} else {
		filterBroadcastArc.length = 0;
		searchBroadcastsFLT();
	}
}
/* when achive is checked - the FamilyLife This Week XML file is opened and stored */
this.getBroadcastData2FLTW = function() {
	if ($("fltwsummaryarc").checked) {
		$('fltwsummaryarcmsg').innerHTML='<div id="bloading-outer"><div id="bloading" class="shadow">Adding Archive to FamilyLife This Week Broadcasts... <img src="'+sitepath+'/loading.gif" /><br />When Finished entire broadcast list will be searchable.</div></div>';
		var obj = new AjaxRequest();
		obj.count=2;		
		statusobj.push(obj);
		obj.rss = $('fltwsummary').getAttribute('archive');
		obj.init();

		checkArchiveStatus(2);
	} else {
		filterBroadcastFLTWArc.length = 0;
		searchBroadcastsFLTW();
	}
}
/* when achive is checked - the Real FamilyLife XML file is opened and stored */
this.getBroadcastData2RFL = function() {
	if ($("rflsummaryarc").checked) {
		$('rflsummaryarcmsg').innerHTML='<div id="bloading-outer"><div id="bloading" class="shadow">Adding Archive to Real FamilyLife Broadcasts... <img src="'+sitepath+'/loading.gif" /><br />When Finished entire broadcast list will be searchable.</div></div>';
		var obj = new AjaxRequest();
		obj.count=3;
		statusobj.push(obj);
		obj.rss = $('rflsummary').getAttribute('archive');
		obj.init();

		checkArchiveStatus(3);
	} else {
		filterBroadcastRFLArc.length = 0;
		searchBroadcastsRFL();
	}
}

/* 
	-----------------------------------------
	initial display from google rss feed
	Displays 30 days of broadcasts from today
	-----------------------------------------
*/
/* standard functions below */
function getBroadcasts(filter, filterGuest, div) {
	var currentDate = initialDateSearch;
	var reccount = 0, guestItemContent = "";
	$(div).innerHTML='Building List of Broadcasts... <img src="'+sitepath+'/loading.gif" />';	
	var prevgroup='';
	var filterItemContent='<div id="'+div+'title" class="searchsummary" style="height:40px"></div><div style="height: 18px">&nbsp;</div>';

	if ((searchsort) && (filter.length > 0)) {
		var dateRE = /^(\d{2})[\/\- ](\d{2})[\/\- ](\d{4})/;
		filter.sort(function (a, b){
					a = a['date'];
					b = b['date'];
					if (searchsort == "d") {
						if (a>b) return -1;
						if (a <b) return 1;
					} else {
						if (a>b) return 1;
						if (a <b) return -1;
					}
					return 0; } );
	}
	
	for (i=0;i<filter.length;i++) {
		/* get number of days between currentdate and rec date */
		//if (reccount <= initialDaysApart) { /* get only 30 days worth */
			var daysApart = Math.round((currentDate - filter[i].date)/86400000); 
			if (daysApart >= 0 && daysApart <= initialDaysApart) {
				filterItemContent += buildContent(prevgroup, filter[i]);
				if (prevgroup != filter[i].group && filter[i].group != null) {
					prevgroup = filter[i].group;
				}
			}
		//}
		var guests = filter[i].guests.replace("<strong>Guests Include:</strong> ","");
		var filterg = guests.split(",");
		if (filterg.length > 0) {
			for (s=0;s<filterg.length;s++) {
				/* check to see if guest in array already */
				if (filterGuest.indexOf(trim(filterg[s])) == -1) {
					filterGuest.push(trim(filterg[s]));
				}
			}
		} else {
			/* check to see if guest in array already */
			if (filterGuest.indexOf(trim(guests)) == -1) {
				filterGuest.push(trim(guests));
			}
		}
		//reccount++;
	}

	/* rebuild guest list */
	var prevguest = '';
	/* sort guest array */
	filterGuest.sort(function (a, b){
				if (a>b) return 1;
				if (a <b) return -1;
				return 0; } );
	
	$(div).innerHTML=writeOutput(filterItemContent + guestItemContent);
	switch (div) {
		case 'fltsummary' : $(div+"title").innerHTML = defaultTitle;
			$('tabberid0').innerHTML = "FamilyLife Today";
			break;
		case 'fltwsummary' : $(div+"title").innerHTML = defaultTitle;
			$('tabberid1').innerHTML = "FamilyLife This Week";
			break;
		case 'rflsummary' : $(div+"title").innerHTML = defaultTitle;
			$('tabberid2').innerHTML = "Real FamilyLife";
			break;
	}
}

/* standard functions below */
function getGuests(filter, filterGuest) {
	for (i=0;i<filter.length;i++) {
		var guests = filter[i].guests.replace("<strong>Guests Include:</strong> ","");
		var filterg = guests.split(",");
		if (filterg.length > 0) {
			for (s=0;s<filterg.length;s++) {
				/* check to see if guest in array already */
				if (filterGuest.indexOf(trim(filterg[s])) == -1) {
					filterGuest.push(trim(filterg[s]));
				}
			}
		} else {
			/* check to see if guest in array already */
			if (filterGuest.indexOf(trim(guests)) == -1) {
				filterGuest.push(trim(guests));
			}
		}
	}

	/* sort guest array */
	filterGuest.sort(function (a, b){
				if (a>b) return 1;
				if (a <b) return -1;
				return 0; } );
	
}

/* 
	------------------------------------------------------
	Search is clicked on the page
	Search routines are called based on the tab you are in
	
	Functions below are how the data is filtered and 
	displayed after search is clicked
	------------------------------------------------------

*/
this.searchBroadcastsFLT = function() {
	var returndata = filterBroadcasts(filterBroadcast, filterBroadcastArc, FLTGuestList, 'fltsummary');
	FLTSearch = returndata[0];
	FLTGuestList = returndata[1];
	displayFilterData(FLTSearch, 'FLTSearch', 'fltsummary', 1);

}
this.searchBroadcastsFLTW = function() {
	var returndata = filterBroadcasts(filterBroadcastFLTW, filterBroadcastFLTWArc, FLTWGuestList, 'fltwsummary');
	FLTWSearch = returndata[0];
	FLTWGuestList = returndata[1];
	displayFilterData(FLTWSearch, 'FLTWSearch', 'fltwsummary', 1);
}
this.searchBroadcastsRFL = function() {
	var returndata = filterBroadcasts(filterBroadcastRFL, filterBroadcastRFLArc, RFLGuestList, 'rflsummary');
	RFLSearch = returndata[0];
	RFLGuestList = returndata[1];
	displayFilterData(RFLSearch, 'RFLSearch', 'rflsummary', 1);
}

/*


/* standard functions below */
/* passed are the google filter array, the archive filter array and the div of where the input field values are retrieved */
function filterBroadcasts(currfilter, arcfilter, filterGuest, div) {

	var filter = currfilter.concat(arcfilter); /* add current year array onto archive array */
	filterGuest = []; /* clear guestfilter array since we will be rebuilding it */
	var currentDate = new Date();
	$(div).innerHTML='Building List of Broadcasts... <img src="'+sitepath+'/loading.gif" />';		
	var newfilter = new Array(), j=0, pagecnt=1;
	/* setup object names */
	var objectm = div+'month';
	var objectd = div+'day';
	var objecty = div+'year';
	var objectg = div+'guests';
	var objectk = div+'keywords';
	/* get values */
	var passmonth = ($(objectm).selectedIndex > 0) ? $(objectm).value : 0;	
	var passday = ($(objectd).selectedIndex > 0) ? $(objectd).value : 0;	
	var passyear = ($(objecty).selectedIndex > 0) ? $(objecty).value : 0;	
	var passguest = ($(objectg).value != '') ? $(objectg).value : "";		
	var passkeyword = ($(objectk).value != '') ? $(objectk).value : "";	

	for (i=0;i<filter.length;i++) {
		cont=true;
		if (passmonth != 0 && passmonth != (filter[i].date.getMonth()+1)) cont=false;
		if (passday != 0 && passday != filter[i].date.getDate()) cont=false;
		if (passyear != 0 && passyear != (filter[i].date.getFullYear())) cont=false;
		if (passguest != "" && filter[i].guests.toLowerCase().indexOf(passguest.toLowerCase()) == -1) cont=false;
		if (passkeyword != "" &&
			(filter[i].group.toLowerCase().indexOf(passkeyword.toLowerCase()) == -1) && 
			(filter[i].title.toLowerCase().indexOf(passkeyword.toLowerCase()) == -1) &&
			(filter[i].description.toLowerCase().indexOf(passkeyword.toLowerCase()) == -1)) cont=false;
		if (cont) {
			newfilter[j] = new Array();
			newfilter[j].linkurl = filter[i].linkurl;
			newfilter[j].title = filter[i].title;
			newfilter[j].date = new Date(filter[i].date);
			newfilter[j].description = filter[i].description;
			newfilter[j].guests = filter[i].guests;
			newfilter[j].group = filter[i].group;
			newfilter[j].groupday = filter[i].groupday;
			newfilter[j].groupdaycount = filter[i].groupdaycount;
			newfilter[j].pagecount = pagecnt;
			if ((j+1)/pagecnt==itemsPerPage) pagecnt++; /* add 1 to page count every 10 records */

			/* add highlighting */
			if (passguest != "") {
				newfilter[j].guests = this.doHighlight(newfilter[j].guests, passguest,'','');
			}
			if (passkeyword != "") {
				newfilter[j].group = this.doHighlight(newfilter[j].group, passkeyword,'','');
				newfilter[j].title = this.doHighlight(newfilter[j].title, passkeyword,'','');
				newfilter[j].description = this.doHighlight(newfilter[j].description, passkeyword,'','');
			}
			j++;
		}
		var guests = filter[i].guests.replace("<strong>Guests Include:</strong> ","");
		var filterg = guests.split(",");
		if (filterg.length > 0) {
			for (s=0;s<filterg.length;s++) {
				/* check to see if guest in array already */
				if (filterGuest.indexOf(trim(filterg[s])) == -1) {
					filterGuest.push(trim(filterg[s]));
				}
			}
		} else {
			/* check to see if guest in array already */
			if (filterGuest.indexOf(trim(guests)) == -1) {
				filterGuest.push(trim(guests));
			}
		}
	}
	var newfilterdata = new Array(newfilter, filterGuest);
	return newfilterdata;
}

/* name of highlevel filter array passed, the actual name, div the data will return to and the pagecount to display */
function displayFilterData(filter, filtername, div, pagecnt) {
	var prevgroup='', filterItemContent='', itemstart=-1, itemcount=-1;
	var prevbtn = "<img src='"+sitepath+"/arrow_gray_left.gif'> prev";
	var nextbtn = "next <img src='"+sitepath+"/arrow_gray.gif'>";
	var firstbtn = "<img src='"+sitepath+"/arrow_gray_left.gif'><img src='"+sitepath+"/arrow_gray_left.gif'>&nbsp;first";
	var lastbtn = "last&nbsp;<img src='"+sitepath+"/arrow_gray.gif'><img src='"+sitepath+"/arrow_gray.gif'>";
	
	filterItemContent += '<div id="'+div+'title" class="searchsummary"></div>';
	filterItemContent += '<div id="'+div+'moredata" class="moredata">';
	filterItemContent += '<table cellpadding=0 cellspacing=0 class="'+div+'moredatalr" width="100%"><tr>';
	filterItemContent += '<td id="'+div+'morecount" class="morecount" align="left"></td>';
	filterItemContent += '<td id="'+div+'moredatafirst" class="moredatafirst" align="right"></td>';
	filterItemContent += '<td id="'+div+'moredatal" class="moredatal" align="right"></td>';
	filterItemContent += '<td id="'+div+'moredatar" class="moredatar" align="right"></td>';
	filterItemContent += '<td id="'+div+'moredatalast" class="moredatalast" align="right"></td>';
	filterItemContent += '</tr></table></div>';
	if (filter.length > 0) {
		if (pagecnt > 1) {
			prevbtn = '<a href="javascript:displayFilterData('+filtername+', \''+filtername+'\', \''+div+'\', '+(pagecnt-1)+')"><img src="'+sitepath+'/arrow_blue_left.gif"/> prev </a>'
			firstbtn = '<a href="javascript:displayFilterData('+filtername+', \''+filtername+'\', \''+div+'\', 1)"><img src="'+sitepath+'/arrow_blue_left.gif"/><img src="'+sitepath+'/arrow_blue_left.gif"/>&nbsp;first</a>'
		}
		if ((filter.length/10) > pagecnt && filter[(filter.length-1)].pagecount > pagecnt) {
			nextbtn = '<a href="javascript:displayFilterData('+filtername+', \''+filtername+'\', \''+div+'\', '+(pagecnt+1)+')"> next <img src="'+sitepath+'/arrow_blue.gif"/> </a>'
			lastbtn = '<a href="javascript:displayFilterData('+filtername+', \''+filtername+'\', \''+div+'\', '+filter[(filter.length-1)].pagecount+')">last</a>&nbsp;<img src="'+sitepath+'/arrow_blue.gif"/><img src="'+sitepath+'/arrow_blue.gif"/>'			
		}
		filterItemContent += '<br /><div id="summarydata">';		
		for (i=0;i<filter.length;i++) {
			if(filter[i].pagecount>pagecnt) {
				break;
			}
			if(filter[i].pagecount==pagecnt) {
				if (itemstart==-1) itemstart=i;
				filterItemContent += buildContent(prevgroup, filter[i]);
				if (prevgroup != filter[i].group && filter[i].group != null) {
					prevgroup = filter[i].group;
				}
				itemcount = i;
			}
		}
		filterItemContent += '</div>';		
		filterItemContent += '<div id="'+div+'moredatab" class="moredata"></div>';
	} else {
		filterItemContent += "<p><h4>No broadcasts found matching specified filter criteria!</h4></p>"
	}
	$(div).innerHTML=writeOutput(filterItemContent);
	$(div+"moredatafirst").innerHTML = firstbtn;
	$(div+"moredatalast").innerHTML = lastbtn;
	$(div+"moredatal").innerHTML = prevbtn;
	$(div+"moredatar").innerHTML = nextbtn;
	var enditemcount = (itemcount>=0) ? (itemcount+1) : 0
	$(div+'morecount').innerHTML = (itemstart+1) + " to " + enditemcount + " of " + filter.length;
	var searchcriteria = "";
	if (($(div+'month').value != "") || ($(div+'day').value != "") || ($(div+'year').value != "")) {
		searchcriteria += "Date: <span class='searchsummarydata'>"
		searchcriteria +=  ($(div+'month').value != "") ? $(div+'month').value : "--";
		searchcriteria += "/";
		searchcriteria +=  ($(div+'day').value != "") ? $(div+'day').value : "--";
		searchcriteria += "/";				
		searchcriteria +=  ($(div+'year').value != "") ? $(div+'year').value : "----";
		searchcriteria += "</span>";				
	}
	if ($(div+'guests').value != "")
		searchcriteria += " Guests: <span class='searchsummarydata'>" + $(div+'guests').value + "</span>";
	if ($(div+'keywords').value != "")
		searchcriteria += " Keywords: <span class='searchsummarydata'>" + $(div+'keywords').value + "</span>";
	if (searchcriteria =="") searchcriteria = "All";
	$(div+"title").innerHTML = "<span class='searchsummarytitle'>Search Criteria:</span>"+searchcriteria;
	if ($(div+'moredatab')) $(div+'moredatab').innerHTML = $(div+'moredata').innerHTML;
	if (div == "fltsummary") $('tabberid0').innerHTML = "FamilyLife Today (" + filter.length + ")";
	if (div == "fltwsummary") $('tabberid1').innerHTML = "FamilyLife This Week (" + filter.length + ")";
	if (div == "rflsummary") $('tabberid2').innerHTML = "Real FamilyLife (" + filter.length + ")";
}

/* builds content to be written */
function buildContent(prevgroup, filter) {
	var content = "";
	if (prevgroup != filter.group && filter.group != null) {
		content += "<br /><h1>"+filter.group+"</h1><br />";
	}
	content += "<a class='btitle' href='"+filter.linkurl+"'>"+filter.title+"</a>&nbsp;<span class='bdate'>"+formatdate(filter.date)+"</span>&nbsp;<span class='bdays'>"+filter.groupday+"</span><br />";
	content += "<div class='bsummary'>"+filter.description+"</div>";
	content += "<div class='bguests'>"+filter.guests+"</div>";
	return content;
}

/* write's output data */
function writeOutput(content) {
	content = "<div id='broadcastResults'><p>"+content+"</p></div>";
	//content += "<div id='broadcastItemResults' style='disply:none;position:absolute;border: 1px solid #ccc; top:50px;left:50px;width:600px;height:300px;overflow:auto;z-index:-999999'></div>";
	return content;
}

function parseRSSBroadcast( XMLNode ) {
	var XMLItem = new Array();
	
	for (i=0; XMLNode.length>i; i++)
	{
		var dayval = '', daylen = 0;
		XMLItem[i] = new Array();
		
		for (k=0; XMLNode[i].childNodes.length>k; k++)
		{
			if(XMLNode[i].childNodes[k].firstChild != null) {
				 switch(XMLNode[i].childNodes[k].tagName) {
					 case "link" : XMLItem[i]["linkurl"] = XMLNode[i].childNodes[k].firstChild.data;
									break;
					 case "description" : XMLItem[i]["description"] = XMLNode[i].childNodes[k].firstChild.data;
									break;
					 case "title" :  XMLItem[i]["title"] = XMLNode[i].childNodes[k].firstChild.data;
									XMLItem[i].title = XMLItem[i].title.replace(/\\\"/gi,'"');	/* replace additional rss tags */
									break;
					 case "pubDate" : XMLItem[i]["date"] = new Date(XMLNode[i].childNodes[k].firstChild.data);
									break;
					 case "k:subtitle" :
					 case "subtitle" : XMLItem[i]["group"] = XMLNode[i].childNodes[k].firstChild.data;
									XMLItem[i].group = XMLNode[i].childNodes[k].firstChild.data.replace(/\(Day \d+? of \d+?\)/g,""); /* remove day # of # */
					                XMLItem[i].group = XMLItem[i].group.replace(/\\\"/gi,'"');
									XMLItem[i].group= XMLItem[i].group.replace("<strong> Series Title:</strong>",""); /* remove html */
									dayval = XMLNode[i].childNodes[k].firstChild.data.search(/\(Day \d+? of \d+?\)/);
									daylen = dayval.length;
									XMLItem[i]["groupday"] = ( dayval > 0) ? XMLNode[i].childNodes[k].firstChild.data.match(/\(Day \d+? of \d+?\)/g):'';
									XMLItem[i]["groupdaycount"] = (dayval > 0) ? XMLNode[i].childNodes[k].firstChild.data.substr(dayval, daylen).match(/\d+?/) : 1;
									break;
					 case "k:byline" :
					 case "byline" : XMLItem[i]["guests"] = XMLNode[i].childNodes[k].firstChild.data;
									break;
					
				}
			} else {
				 switch(XMLNode[i].childNodes[k].tagName) {
					 case "link" : XMLItem[i]["linkurl"] = "";
									break;
					 case "description" : XMLItem[i]["description"] = "";
									break;
					 case "title" :  XMLItem[i]["title"] = "";
									break;
					 case "pubDate" : XMLItem[i]["date"] = new Date();
									break;
					 case "k:subtitle" :
					 case "subtitle" : XMLItem[i]['group'] = "";
									XMLItem[i]['groupday'] = "";
									XMLItem[i]['groupdaycount'] = 1;
									break;
					 case "k:byline" :
					 case "byline" : XMLItem[i]["guests"] = "";
									break;
				 }
			}
		 }
	}
	
	return XMLItem;
}

function formatdate(d) {
	return (d.getMonth()+1)+'/'+d.getDate()+'/'+d.getFullYear();
}

function doHighlight(bodyText, searchTerm, highlightStartTag, highlightEndTag) 
{
  // the highlightStartTag and highlightEndTag parameters are optional
  if ((!highlightStartTag) || (!highlightEndTag)) {highlightStartTag = "<font style='color:blue; background-color:yellow;'>";highlightEndTag = "</font>";}
  
  // find all occurences of the search term in the given text and add some "highlight" tags to them (we're not using a
  // regular expression search, because we want to filter out matches that occur within HTML tags and script blocks, so
  // we have to do a little extra validation)
  var newText = "",i = -1,lcSearchTerm = searchTerm.toLowerCase(),lcBodyText = bodyText.toLowerCase();
  while (bodyText.length > 0) {
    i = lcBodyText.indexOf(lcSearchTerm, i+1);
    if (i < 0) {
      newText += bodyText;
      bodyText = "";
    } else {
      // skip anything inside an HTML tag
      if (bodyText.lastIndexOf(">", i) >= bodyText.lastIndexOf("<", i)) {
        // skip anything inside a <script> block
        if (lcBodyText.lastIndexOf("/script>", i) >= lcBodyText.lastIndexOf("<script", i)) {
          newText += bodyText.substring(0, i) + highlightStartTag + bodyText.substr(i, searchTerm.length) + highlightEndTag;
          bodyText = bodyText.substr(i + searchTerm.length);
          lcBodyText = bodyText.toLowerCase();
          i = -1;
        }
      }
    }
  }
  
  return newText;
}
/*
	-------------------------------------------------------------------------------------
	onKeyPress functions for when someone presses enter after entering a guest or keyword
	-------------------------------------------------------------------------------------
*/
function fltsummaryonKeyPress(event) {switch(event.keyCode) {case Event.KEY_RETURN:searchBroadcastsFLT();Event.stop(event);}}
function fltwsummaryonKeyPress(event) {switch(event.keyCode) {case Event.KEY_RETURN:searchBroadcastsFLTW();Event.stop(event);}}
function rflsummaryonKeyPress(event) {switch(event.keyCode) {case Event.KEY_RETURN:searchBroadcastsRFL();Event.stop(event);}}
/*
	---------------
	reset functions
	---------------
*/
/* reset function to clear all fields on search and redisplay all records */
function resetBroadcastsFLT(){
	$('fltsummarymonth').selectedIndex=0;
	$('fltsummaryday').selectedIndex=0;
	$('fltsummaryyear').selectedIndex=0;
	$('fltsummaryguests').value="";
	$('fltsummarykeywords').value="";
	searchBroadcastsFLT();
}
/* reset function to clear all fields on search and redisplay all records */
function resetBroadcastsFLTW(){
	$('fltwsummarymonth').selectedIndex=0;
	$('fltwsummaryday').selectedIndex=0;
	$('fltwsummaryyear').selectedIndex=0;
	$('fltwsummaryguests').value="";
	$('fltwsummarykeywords').value="";
	searchBroadcastsFLTW();
}
/* reset function to clear all fields on search and redisplay all records */
function resetBroadcastsRFL(){
	$('rflsummarymonth').selectedIndex=0;
	$('rflsummaryday').selectedIndex=0;
	$('rflsummaryyear').selectedIndex=0;
	$('rflsummaryguests').value="";
	$('rflsummarykeywords').value="";
	searchBroadcastsRFL();
}

function getUrlVal( name ){
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+name+"=([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec( window.location.href );
	if( results == null )
		return "";
	else
		return results[1];
}

function buildBroadcastList() {
	xhrs = [];
	
	/* create loading image */
	createLoading(); /* show loading image and init vars */

	var divcnt = 0;
	do {
		var obj = new AjaxRequestGoogle();
		statusobj.push(obj);
		switch (divcnt) {
			case 0: obj.rss = $('fltsummary').getAttribute('rss');break;
			case 1: obj.rss = $('fltwsummary').getAttribute('rss');break;
			case 2: obj.rss = $('rflsummary').getAttribute('rss');break;
		}
		obj.count = divcnt;
		obj.init();
		divcnt++;
	}
	while (divcnt<3)
	checkStatus();
}

function checkStatus() {
	if (statusobj.length>0) {
		setTimeout("checkStatus()", 200); /* check status every 2 seconds */
	} else {
		$('fltsummary').innerHTML = "Enter your search criteria";
		$('fltwsummary').innerHTML = "Enter your search criteria";
		$('rflsummary').innerHTML = "Enter your search criteria";			
		filterBroadcast = xhrs[0];
		filterBroadcastFLTW = xhrs[1];		
		filterBroadcastRFL = xhrs[2];		
		if (getUrlVal("leftsearch") != "true") {
			if (initialDisplay == "yes") {
				getBroadcasts(filterBroadcast, FLTGuestList, 'fltsummary');
				getBroadcasts(filterBroadcastFLTW, FLTWGuestList, 'fltwsummary');
				getBroadcasts(filterBroadcastRFL, RFLGuestList, 'rflsummary');			
			} else {
				getGuests(filterBroadcast, FLTGuestList);
				getGuests(filterBroadcastFLTW, FLTWGuestList);
				getGuests(filterBroadcastRFL, RFLGuestList);
			}
		} else {
			searchBroadcastsFLT();
			searchBroadcastsFLTW();
			searchBroadcastsRFL();
			if (unescape(getUrlVal("archive")) == "true"){
				getBroadcastData2();
				getBroadcastData2FLTW();
				getBroadcastData2RFL();
			}
		}
		new Autocompleter.Local('fltsummaryguests', 'fltguestlist', FLTGuestList, {fullSearch: false, partialSearch: true, partialChars: 0});					
		new Autocompleter.Local('fltwsummaryguests', 'fltwguestlist', FLTWGuestList, {fullSearch: false, partialSearch: true, partialChars: 0});					
		new Autocompleter.Local('rflsummaryguests', 'rflguestlist', RFLGuestList, {fullSearch: false, partialSearch: true, partialChars: 0});					
		}
}
function checkArchiveStatus(count) {
	if (statusobj.length>0) {
		setTimeout("checkArchiveStatus("+count+")", 200); /* check status every 2 seconds */
	} else {
		switch (count) {
			case 1: 
				filterBroadcastArc = xhrs[1];
				searchBroadcastsFLT();
				$('fltsummaryarcmsg').innerHTML=''; /* clear popup */
				new Autocompleter.Local('fltsummaryguests', 'fltguestlist', FLTGuestList, {fullSearch: false, partialSearch: true, partialChars: 0});
				break;
			case 2: 
				filterBroadcastFLTWArc = xhrs[2];
				searchBroadcastsFLTW();
				$('fltwsummaryarcmsg').innerHTML=''; /* clear popup */
		new Autocompleter.Local('fltwsummaryguests', 'fltwguestlist', FLTWGuestList, {fullSearch: false, partialSearch: true, partialChars: 0});
				break;
			case 3: 
				filterBroadcastRFLArc = xhrs[3];
				searchBroadcastsRFL();
				$('rflsummaryarcmsg').innerHTML=''; /* clear popup */
				new Autocompleter.Local('rflsummaryguests', 'rflguestlist', RFLGuestList, {fullSearch: false, partialSearch: true, partialChars: 0});
				break;
		}
	}
}

google.load("feeds", "1"); /* initialize google feed */

window.onload = function() {
	/* Check url parms and set default search vals*/
	if (getUrlVal("leftsearch") == "true") {
		var i=3, divid="";
		do {
			switch (i) {
				case 3:divid="flt";break;
				case 2:divid="fltw";break;
				case 1:divid="rfl";break;
			}
			$(divid+'summarymonth').selectedIndex = getUrlVal("searchmonth");
			$(divid+'summaryday').selectedIndex = getUrlVal("searchday");
			if (getUrlVal("searchyear") != "") {
				for (x=0;x<$(divid+'summaryyear').length;x++) {
					if ($(divid+'summaryyear').options[x].value == getUrlVal("searchyear")) {
						$(divid+'summaryyear').selectedIndex = x;
						break;
					}
				}
			}
			$(divid+'summaryguests').value = unescape(getUrlVal("searchguests"));
			$(divid+'summarykeywords').value = unescape(getUrlVal("searchkeywords"));
			if (unescape(getUrlVal("archive")) == "true"){
				$(divid+'summaryarc').checked = true;
			}
			i--;
		} while (i>0)
	}
	buildBroadcastList();
}



