var RSSRequestObject = false; // XMLHttpRequest Object
var Backend = 'scripts/eventrss.php'; // Backend url
var GCalFeed = 'http://www.google.com/calendar/feeds/irhc%40nyuirhc.org/public/full';
var is24Hour = false; //24 or 12 hour time
var timeLimit = 1; //How many months timeframe limit
var maxResults = 5; //Limit the results
window.setInterval("update_timer()", 1200000);

if (window.XMLHttpRequest) // try to create XMLHttpRequest
	RSSRequestObject = new XMLHttpRequest();
	RequestMethod = "XMLHttpRequest";

if (window.ActiveXObject)	// if ActiveXObject use the Microsoft.XMLHTTP
	RSSRequestObject = new ActiveXObject("Microsoft.XMLHTTP");

function kickStart() {
    RSSRequest(GCalFeed);
}

function AddOnload(myfunc) //Load before page loads if Mozilla/Firefox. If IE just do it the same old slow way. Thanks Microsoft.
{
	if(window.addEventListener)
		window.addEventListener('load', myfunc, false);
	else if(window.attachEvent)
		window.attachEvent('onload', myfunc);
}    

AddOnload(kickStart);




/*
* onreadystatechange function
*/
function ReqChange() {

	// If data received correctly
	if (RSSRequestObject.readyState==4) {
	
		// if data is valid
		if (RSSRequestObject.responseText.indexOf('invalid') == -1) 
		{ 	
			// Parsing Feeds
			var node = RSSRequestObject.responseXML.documentElement; //Line 44
            		var content = '';
            
			// Get the calendar title - uncomment next two lines if you want it to show up
			//var title = node.getElementsByTagName('title').item(0).firstChild.data;
			//var content = '<div class="channeltitle">' + title + '</div>';
            
			// Browse events
			var items = node.getElementsByTagName('entry'); 
            		var itemTimePrev = new Date();
            		itemTimePrev.setTime(Date.UTC());
			
			if (items.length == 0) {
				content += '<div class=error>No events</div>';
			} else {
				//content += '<ul>';
				
				for (var n=0; n <= items.length-1; n++)
				{
					var itemTitle = items[n].getElementsByTagName('title').item(0).firstChild.data;
                    
                    			//Here's a little love for our friend IE - he hates standards, like XML namespace. Thanks for making a shitty product Microsoft!
                    			try { 
						var itemTimeXML = items[n].getElementsByTagName('when')[0].getAttribute("startTime");  
                        		} 
					
					catch (e) { var itemTimeXML = items[n].getElementsByTagName('gd:when')[0].getAttribute("startTime");}
                    
                    			//var itemTimeXML = items[n].getElementsByTagName('when')[0].getAttribute("startTime");
                    			var isAllDay = false; //init isAllDay variable
                    
                    			if (itemTimeXML.length <= 10){isAllDay = true;} //just the date is only 10 digits = all day event
                    
                    			var itemTime = new Date();
                    			itemTime.setTime(Date.UTC(itemTimeXML.substr(0,4),(itemTimeXML.substr(5,2)-1),itemTimeXML.substr(8,2),itemTimeXML.substr(11,2),itemTimeXML.substr(14,2)));
					var itemLink = items[n].getElementsByTagName('link')[0].getAttribute("href");
					
					try { 
						var itemContent = ' - ';
                        			itemContent += items[n].getElementsByTagName('content').item(0).firstChild.data;  
                        		} 
					
					catch (e) { var itemContent = '';}
                    
                    			if ((itemTime.getUTCDate()==itemTimePrev.getUTCDate())&&(itemTime.getUTCMonth()==itemTimePrev.getUTCMonth())){ //Print multiple single-day events under one heading
                    				content += '';}
                    			else {
                    				content += '<p class="text"><strong>' + getAbbreviatedDayName(itemTime) + ' ' + getMonthName(itemTime) + ' ' + itemTime.getUTCDate() + ', ' + itemTime.getUTCFullYear() + '</strong>';}
                    
                    			//content += '<br>'; 
                    
                    			content += '<br><a href='+itemLink+' target="_blank">'+itemTitle+'</a>';

                    			if (!isAllDay) { content+= '<strong> @ ' + getTimeFormatted(itemTime) + '</strong>'; }
                    
                    			//content += ' <a href="' +itemLink + '">'  + itemTitle + '</a>' + itemContent + '</li></ul>';
                    			itemTimePrev.setTime(itemTime); //Save the last timestamp for next iteration comparison
				}
				
				content += '<br> ';
			}
			
			// Display the result
			document.getElementById("gcalajax").innerHTML = content;

			// Tell the reader the everything is done
			//document.getElementById("status").innerHTML = "Done.";
			
		}
		else {
			// Tell the reader that there was error requesting data
			document.getElementById("status").innerHTML = "<div class=error>Error requesting data.<div>";
		}
		
		Hide('status');
	}
	
}

/*
* Time Format - Month
*/
function getMonthName(dateObject) {
    var m_names = new Array("Jan", "Feb", "Mar", 
    "Apr", "May", "Jun", "Jul", "Aug", "Sep", 
    "Oct", "Nov", "Dec");
    return(m_names[dateObject.getUTCMonth()]);
}

/*
* Time Format - Hour
*/
function getTimeFormatted(dateObject) {
    var hours = dateObject.getUTCHours();
    var minutes = dateObject.getUTCMinutes();
    var formattedTime = null;
    if (is24Hour) {
        if (minutes < 10){minutes = "0" + minutes;}
        formattedTime = hours + ':' + minutes;
        return (formattedTime);
    }
    else {
        var ampm = "am";
        if (hours > 12){
            hours = hours - 12;
            ampm = "pm";}
        if (hours == 12){ampm = 'pm';}
        if (hours == 0) {hours = 12;}
        if (minutes < 10){minutes = "0" + minutes;}
        formattedTime = hours + ':' + minutes + ampm;
        return (formattedTime);
    }
}

/*
* Time Format - Day
*/
function getAbbreviatedDayName(dateObject) {
	var d_names = new Array("Sun", "Mon", "Tue", 
	"Wed", "Thu", "Fri", "Sat");
    	return(d_names[dateObject.getUTCDay()]);
}



/*
* Main AJAX RSS reader request
*/
function RSSRequest(gcal_path) {
    Backend = Backend + "?gcal_feed=" + escape(gcal_path) + "&timeLimit=" + timeLimit + "&maxResults=" + maxResults;
	// change the status to requesting data
	document.getElementById("status").innerHTML = "Calendar loading ...";
	
	// Prepare the request
    
	RSSRequestObject.open("GET", Backend , true);
	// Set the onreadystatechange function
	RSSRequestObject.onreadystatechange = ReqChange;
	// Send
	RSSRequestObject.send(null); 
}

/*
* Timer
*/
function update_timer() {
	RSSRequest();
}

function Hide(id){
	var el = GetObject(id);
	if(el.style.display=="none")
		el.style.display='';
	else
		el.style.display='none'; 
}

function GetObject(id){
	var el = document.getElementById(id);
	return(el);
}
