
// declare listings variables
var listingXmlDoc;
var listingXmlDocContainer;
var listingXmlDocDivContainer = 'fourHDListingsContainerContent'; //insert your div id here
var listingArray = new Array();
var listingMax = 99; //maximum items to list, use 99 to ignore the limit
var listingFeedLinkUrl = "http://www.channel4.com/services/listings/C4";  //http://test.channel4.com/services/listings/C4

var listingShowFromDate = new Date();
listingShowFromDate.setHours(18);
listingShowFromDate.setMinutes(00); 
var listingShowToDate = new Date();
listingShowToDate.setHours(23);
listingShowToDate.setMinutes(01); 

var listingUpdaterTime = 0; //seconds
var listingUpdaterDecay = 0; //seconds
var listingUpdaterInt;
var listingUpdaterIntCounter = 0;

// all variables from the listing nodes will be replaced, when they are inserted like %nodeName%
var listingItemHtmlObject = '<div id="listingItemContainer">';

listingItemHtmlObject += 	'	<div class="listingItemContainerProgrammeTitle">';
listingItemHtmlObject += 	'		<div class="bill_time"><a href="http://www.channel4.com%programme_link%" title="%programme_title%">%bill_time%</a></div> <div class="bill_title"><a href="http://www.channel4.com%programme_link%" title="%programme_title%">%programme_title%</a></div>';
listingItemHtmlObject += 	'	</div>';
listingItemHtmlObject += 	'</div>';

// load xml listings doc
function listingXmlDocLoad()
{
	//var url = '/proxy?url=' + encodeURIComponent('http://www.google.com/search?q=Prototype');
	// notice the use of a proxy to circumvent the Same Origin Policy.
	
	new Ajax.Request(listingFeedLinkUrl, {
		method: 'get',
		// Jackanory!
		onSuccess: function(transport) {
		
			// code for IE, dry etc
			if (window.ActiveXObject)
			{
				listingXmlDoc = new ActiveXObject("Microsoft.XMLDOM");
				listingXmlDoc.async=false;
				listingXmlDoc.loadXML(transport.responseText);
			}
			// code for Mozilla, Firefox, Safari, Opera, etc.
			else if (DOMParser)
			{
				var parser = new DOMParser();
				listingXmlDoc = parser.parseFromString(transport.responseText,"text/xml");
			}
			else
			{
				alert('Your browser cannot handle this script');
			}
			
			listingXmlDocParse();
			
		},
		// Handle 404
		on404: function(t) {
			alert('Error 404: location "' + t.statusText + '" was not found.');
		},
		// Handle other errors
		onFailure: function(t) {
			alert('Error ' + t.status + ' -- ' + t.statusText);
		}
	}); 
}

// parse xml listings doc
function listingXmlDocParse()
{
	
	var rootNode;
	listingArray = new Array();
	
	for(var i=0; i<listingXmlDoc.childNodes.length; i++){
		if(listingXmlDoc.childNodes[i].nodeName == "resp"){
			rootNode = listingXmlDoc.childNodes[i]
		} 
	}
	
	if(rootNode.childNodes.length > 0){
		for(var i=0; i<rootNode.childNodes.length; i++){
			if(rootNode.childNodes[i].nodeName == "listings"){
				var listingsNode = rootNode.childNodes[i]
				
				for(var j=0; j<listingsNode.childNodes.length; j++){
				
					var listingNode = listingsNode.childNodes[j]
					
					var listNode = new Object();
					
					for(var k=0; k<listingNode.childNodes.length; k++){
					
						var node = listingNode.childNodes[k]
						var varName = node.nodeName;
						
						if(node.firstChild != null){
							var varValue = node.firstChild.nodeValue;
						}else{
							var varValue = "";
						}
						
						listNode[varName] = varValue
					}
					
					var listingTime = new Date();
					listingTime.setHours(listNode.bill_time.split(':')[0]);
					listingTime.setMinutes(listNode.bill_time.split(':')[1]); 
					
					if( ( listingTime.getTime() >= listingShowFromDate.getTime() && listingTime.getTime() <= listingShowToDate.getTime() ) && listingArray.length < listingMax){
						listingArray.push(listNode)
					}
				}
				
			}
		}
	}else{
		
		alert('no data found');
		
	}
	
	listingXmlDocDisplay()
}

function listingXmlDocDisplay()
{
	// output header
	//var HtmlString = "<div>"+listingMax+";"+listingArray.length+" Upcoming Channel4 Listings (updated:"+(listingUpdaterIntCounter+1)+" times)</div>";
	var HtmlString = "";
	
	for(var i=0; i<listingArray.length; i++){
		var firstShowTitle = listingArray[i].programme_title
		var firstShowTime = listingArray[i].bill_time
		var HtmlObject = listingItemHtmlObject;
		for(var obj in listingArray[i]){
			HtmlObject = HtmlObject.split('%'+obj+'%').join(listingArray[i][obj])
		}
		HtmlString += HtmlObject;
	}
	// put html output in container
	listingXmlDocContainer.innerHTML = HtmlString;
	
	// auto update
	if(listingUpdaterTime > 0){
		listingUpdaterInt = setTimeout("listingXmlDocInit()",(listingUpdaterTime*1000)+((listingUpdaterDecay*1000)*listingUpdaterIntCounter))
	}
	listingUpdaterIntCounter++
		
}
function listingXmlDocInit()
{
	if(document.getElementById(listingXmlDocDivContainer)){
		listingXmlDocContainer = document.getElementById(listingXmlDocDivContainer)
		listingXmlDocLoad()
	}else{
		alert('no output container found');
	}
}

function addEvent(obj, type, fn){
	if(obj.addEventListener){
		obj.addEventListener(type, fn, false);
	}
	else if(obj.attachEvent){
		obj["e" + type + fn] = fn;
		obj[type + fn] = function(){
				obj["e" + type + fn](window.event);
			}
		obj.attachEvent("on" +type, obj[type+fn]);
	}
}

addEvent(window, "load", listingXmlDocInit);
