/*

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/

*/
/* initial loading */
this.createLoading = function() {
	if ($('FLTodayFeatureTop')) sitepath = $('FLTodayFeatureTop').getAttribute('sitepath');
	if ($('FLThisWeekFeature')) sitepath = $('FLThisWeekFeature').getAttribute('sitepath');
	if ($('RealFLFeature')) sitepath = $('RealFLFeature').getAttribute('sitepath');
	if ($('FLUpcomingGuests')) sitepath = $('FLUpcomingGuests').getAttribute('sitepath');

	if ($('FLTodayFeatureTop')) $('FLTodayFeatureTop').innerHTML='<img src="'+sitepath+'/loading.gif" />';
	if ($('FLThisWeekFeature')) $('FLThisWeekFeature').innerHTML='<img src="'+sitepath+'/loading.gif" />';
	if ($('RealFLFeature')) $('RealFLFeature').innerHTML='<img src="'+sitepath+'/loading.gif" />';
	if ($('FLUpcomingGuests')) $('FLUpcomingGuests').innerHTML='<img src="'+sitepath+'/loading.gif" />';
}

/*
	-------------------------------------------------

	Data is gathered by google 
	
	-------------------------------------------------

*/
/* call google and get rss feed */
this.getTodaysFeatureData = function() { 
		/* Setting up google feeds */
		var cdate = new Date();
		var rss = $('FLTodayFeatureTop').getAttribute('rss');
		google.load("feeds", "1");
		google.setOnLoadCallback( function() {
			var feed = new google.feeds.Feed(rss + "&" + cdate.getDate());
			feed.setNumEntries(3000);
			feed.setResultFormat(google.feeds.Feed.XML_FORMAT);
			feed.load(function(result) {
				if (!result.error) {
					var root_node = result.xmlDocument.getElementsByTagName("item");
					filterBroadcast = parseRSSBroadcast(root_node);
					filterBroadcast.current = 0;
					getTodaysFeatureTop(filterBroadcast, 'FLTodayFeatureTop');
					getTodaysFeatureTop(filterBroadcast, 'FLTodayFeature');
					if(!root_node.length) {
						setTimeout('BroadcastReload();', 3000);
					}
				} else {
					alert(result.error.message + ": " + rss);
					setTimeout('BroadcastReload();', 3000);
				}
			});
		});
}
/* call google and get rss feed */
this.getThisWeekFeatureData = function() { 
		/* Setting up google feeds */
		var cdate = new Date();
		var rss = $('FLThisWeekFeature').getAttribute('rss');
		google.load("feeds", "1");
		google.setOnLoadCallback( function() {
			var feed = new google.feeds.Feed(rss + "&" + cdate.getDate());
			feed.setNumEntries(3000);
			feed.setResultFormat(google.feeds.Feed.XML_FORMAT);
			feed.load(function(result) {
				if (!result.error) {
					var root_node = result.xmlDocument.getElementsByTagName("item");
					filterBroadcastFLTW = parseRSSBroadcast(root_node);
					filterBroadcastFLTW.current = 0;
					getThisWeeksFeature(filterBroadcastFLTW, 'FLThisWeekFeature');
					if(!root_node.length) {
						setTimeout('BroadcastReload();', 3000);
					}
				} else {
					alert(result.error.message + ": " + rss);
					setTimeout('BroadcastReload();', 3000);
				}
			});
		});
}
/* call google and get rss feed */
this.getRealFeatureData = function() { 
		/* Setting up google feeds */
		var cdate = new Date();
		var rss = $('RealFLFeature').getAttribute('rss');
		google.load("feeds", "1");
		google.setOnLoadCallback( function() {
			var feed = new google.feeds.Feed(rss + "&" + cdate.getDate());
			feed.setNumEntries(3000);
			feed.setResultFormat(google.feeds.Feed.XML_FORMAT);
			feed.load(function(result) {
				if (!result.error) {
					var root_node = result.xmlDocument.getElementsByTagName("item");
					filterBroadcastRFL = parseRSSBroadcast(root_node);
					filterBroadcastRFL.current = 0;
					getTodaysFeatureTop(filterBroadcastRFL, 'RealFLFeature');
					if(!root_node.length) {
						setTimeout('BroadcastReload();', 3000);
					}
				} else {
					alert(result.error.message + ": " + rss);
					setTimeout('BroadcastReload();', 3000);
				}
			});
		});
}

/* call google and get rss feed */
this.getGuestsFeatureData = function() { 
		/* Setting up google feeds */
		var cdate = new Date();
		var rss = $('FLUpcomingGuests').getAttribute('rss');
		google.load("feeds", "1");
		google.setOnLoadCallback( function() {
			var feed = new google.feeds.Feed(rss + "&" + cdate.getDate());
			feed.setNumEntries(3000);
			feed.setResultFormat(google.feeds.Feed.XML_FORMAT);
			feed.load(function(result) {
				if (!result.error) {
					var root_node = result.xmlDocument.getElementsByTagName("item");
					filterBroadcastRFL = parseRSSBroadcast(root_node);
					filterBroadcastRFL.current = 0;
					getGuestsFeature(filterBroadcastRFL, 'FLUpcomingGuests');
					if(!root_node.length) {
						setTimeout('BroadcastReload();', 3000);
					}
				} else {
					alert(result.error.message + ": " + rss);
					setTimeout('BroadcastReload();', 3000);
				}
			});
		});
}


this.getTodaysFeatureData2 = function() {
	var rss = $('FLTodayFeatureTop').getAttribute('rss');

	var http_request = new getXMLHttp();

	http_request.onreadystatechange = function() {
		if (http_request.readyState == 1) { // Not Loaded yet
			//$('FilterList').innerHTML = '<img src='+sitepath+'"/loading.gif" style="margin: 100px 190px;"/>';
		}
		if (http_request.readyState == 4) { 
			if (http_request.status == 200) { // Loaded
					var xmldoc = http_request.responseXML;
					var root_node = xmldoc.getElementsByTagName("item");
					filterBroadcast = parseRSSBroadcast(root_node);
					filterBroadcast.current = 0;
					getTodaysFeatureTop(filterBroadcast, 'FLTodayFeatureTop');
					//getTodaysFeatureTop(filterBroadcast, 'FLTodayFeature');
					delete http_request;
			} else {
				alert('There was a problem with the request.');
			}
		}
	};

	http_request.open('GET', rss, true);
	http_request.send(null);
}


this.getThisWeekFeatureData2 = function() {
	var rss = $('FLThisWeekFeature').getAttribute('rss');

	var http_request = new getXMLHttp();

	http_request.onreadystatechange = function() {
		if (http_request.readyState == 1) { // Not Loaded yet
			//$('FilterList').innerHTML = '<img src='+sitepath+'"/loading.gif" style="margin: 100px 190px;"/>';
		}
		if (http_request.readyState == 4) { 
			if (http_request.status == 200) { // Loaded
					var xmldoc = http_request.responseXML;
					var root_node = xmldoc.getElementsByTagName("item");
					filterBroadcastFLTW = parseRSSBroadcast(root_node);
					filterBroadcastFLTW.current = 0;
					getThisWeeksFeature(filterBroadcastFLTW, 'FLThisWeekFeature');
					delete http_request;
			} else {
				alert('There was a problem with the request.');
			}
		}
	};

	http_request.open('GET', rss, true);
	http_request.send(null);
}

this.getRealFeatureData2 = function() {
	var rss = $('RealFLFeature').getAttribute('rss');

	var http_request = new getXMLHttp();

	http_request.onreadystatechange = function() {
		if (http_request.readyState == 1) { // Not Loaded yet
			//$('FilterList').innerHTML = '<img src='+sitepath+'"/loading.gif" style="margin: 100px 190px;"/>';
		}
		if (http_request.readyState == 4) { 
			if (http_request.status == 200) { // Loaded
					var xmldoc = http_request.responseXML;
					var root_node = xmldoc.getElementsByTagName("item");
					filterBroadcastRFL = parseRSSBroadcast(root_node);
					filterBroadcastRFL.current = 0;
					getTodaysFeatureTop(filterBroadcastRFL, 'RealFLFeature');
					delete http_request;
			} else {
				alert('There was a problem with the request.');
			}
		}
	};

	http_request.open('GET', rss, true);
	http_request.send(null);
}
this.getGuestsFeatureData2 = function() {
	var rss = $('FLUpcomingGuests').getAttribute('rss');

	var http_request = new getXMLHttp();

	http_request.onreadystatechange = function() {
		if (http_request.readyState == 1) { // Not Loaded yet
			//$('FilterList').innerHTML = '<img src='+sitepath+'"/loading.gif" style="margin: 100px 190px;"/>';
		}
		if (http_request.readyState == 4) { 
			if (http_request.status == 200) { // Loaded
					var xmldoc = http_request.responseXML;
					var root_node = xmldoc.getElementsByTagName("item");
					filterBroadcastRFL = parseRSSBroadcast(root_node);
					filterBroadcastRFL.current = 0;
					getGuestsFeature(filterBroadcastRFL, 'FLUpcomingGuests');
					delete http_request;
			} else {
				alert('There was a problem with the request.');
			}
		}
	};

	http_request.open('GET', rss, true);
	http_request.send(null);
}
/* 
	-----------------------------------------
	initial display from google rss feed
	Displays 30 days of broadcasts from today
	-----------------------------------------
*/
/* standard functions below */
function getTodaysFeatureTop(filter, div) {
	var currentDate = new Date();

	/* sort by date */
	filter.sort(function (a, b){
				a = a['date'];
				b = b['date'];
				if (a>b) return 1;
				if (a <b) return -1;
				return 0; } );

	var filterItemContent='';

	for (i=0;i<filter.length;i++) {
		/* compare todays date to record date */
		if (formatdatec(currentDate) == formatdatec(filter[i].date)) {
			filterItemContent += buildContent(filter[i]);
			break;
		}
	}

	$(div).innerHTML=writeOutput(filterItemContent);
}

function getThisWeeksFeature(filter, div) {
	var currentDate = new Date();

	/* sort by date */
	filter.sort(function (a, b){
				a = a['date'];
				b = b['date'];
				if (a>b) return 1;
				if (a <b) return -1;
				return 0; } );

	var filterItemContent='';

	for (i=0;i<filter.length;i++) {
		/* get number of days between currentdate and rec date */
		if ((filter[i].date.getWeek()) == (currentDate.getWeek()) && filter[i].date.getFullYear() == currentDate.getFullYear()) {
			filterItemContent += buildContent(filter[i]);
			break;
		}
	}

	$(div).innerHTML=writeOutput(filterItemContent);
}

function getGuestsFeature(filter, div) {
	var currentDate = new Date();
	var reclimit = 3;
	/* sort by date */
	filter.sort(function (a, b){
				a = a['date'];
				b = b['date'];
				if (a>b) return 1;
				if (a <b) return -1;
				return 0; } );

	var filterItemContent='';

	for (i=0;i<filter.length;i++) {
		/* start from today and get # of records based on reclimit */
		if ((formatdatec(filter[i].date) >= formatdatec(currentDate)+1) && reclimit > 0 && (trim(filter[i].guests) != "")) {
			filterItemContent += buildContentGuests(filter[i]);
			reclimit--;
		}
		if (reclimit == 0) break;
	}

	$(div).innerHTML=writeOutput(filterItemContent);
}

/* builds content to be written */
function buildContent(filter) {
	var content = "";
	content += "<div id='icl_container'><ul><li class='icl_title'><a href='"+filter.linkurl+"'>"+filter.title+"</a></li><li class='icl_date'>"+trim(formatdate(filter.date))+"</li><li class='icl_date'>"+filter.groupday+"</li>";
	content += "<li class='icl_summary'>"+filter.description+"</li>";
	content += "<li class='icl_author'>"+filter.guests+"</li></ul></div>";
	return content;
}
/* builds content to be written */
function buildContentGuests(filter) {
	var content = "";
	content += "<div id='icl_container'><ul><li class='icl_author'>"+filter.guests+"</li>";
	content += "<li class='icl_title'><a href='"+filter.linkurl+"'>"+filter.title+"</a></li><li class='icl_date'>"+trim(formatdate(filter.date))+"</li><li class='icl_date'>"+filter.groupday+"</li>";
	content += "<li class='icl_summary'>"+filter.description+"</li></ul></div>";
	return content;
}

/* write's output data */
function writeOutput(content) {
	var filter = "";
	//filterDiv = "<!-- Inline Content Listing Begin -->"
	//filterDiv += '<div id="icl_container">'
	//filterDiv += '<ul>'

	filterDiv = "<p>"+content+"</p>";
	return filterDiv;
}

/* getweek function */
Date.prototype.getWeek = function() {
	var onejan = new Date(this.getFullYear(),0,1);
	/* normally - Sun-sat --> changed it to sat thru fri by adding a day*/
	return Math.ceil( ( ( ((this - onejan) / 86400000 ) + onejan.getDay()) + 2 )/7);
} 
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("<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;
}
String.prototype.pad = function(l, s, t){
    return s || (s = " "), (l -= this.length) > 0 ? (s = new Array(Math.ceil(l / s.length)
        + 1).join(s)).substr(0, t = !t ? l : t == 1 ? 0 : Math.ceil(l / 2))
        + this + s.substr(0, l - t) : this;
};
function formatdate(d) {
	return (d.getMonth()+1)+'/'+d.getDate()+'/'+d.getFullYear();
}
function formatdatec(d) {
	var mm = (d.getMonth()+1).toString().pad(2, "0", 2);
	var dd = (d.getDate()+1).toString().pad(2, "0", 2);
	return (d.getFullYear().toString()+mm+dd);
}

function BroadcastReload() {
	window.onbeforeunload = function () {
		}
	document.location = document.location;
}

	/* create loading image */
	createLoading(); /* show loading image and init vars */
	if ($('FLTodayFeatureTop')) getTodaysFeatureData2();
	if ($('FLUpcomingGuests')) getGuestsFeatureData2();
	if ($('FLThisWeekFeature')) getThisWeekFeatureData2();
	if ($('RealFLFeature')) getRealFeatureData2();
