var RSSRequestObject = false; // XMLHttpRequest Object
var Backend = '/ajaxrss/gcal.php';
//window.setInterval("update_timer()", 1200000); // update the data every 20 mins


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

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


/*
* 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; 

      // Get the calendar title
      var title = node.getElementsByTagName('title').item(0).firstChild.data;

      content = '<div class="channeltitle">'+title+'</div>';

      var today = new Date();
      var eventDate = new Date();
      var events = new Array();
      var itemPubDateString = '';

      // Browse events
      var items = node.getElementsByTagName('entry');
      if (items.length == 0) {
	content += '<ul><li><div class=error>No events</div></li></ul>';
      } else {
	for (var n=items.length-1; n >= 0; n--) {
	  try 
	    { 
	      var atomdate = items[n].getElementsByTagName('summary').item(0).firstChild.data;
	      var matches = atomdate.match('([A-Za-z]+\\ [0-9]+\\,\\ [0-9]+)');
	      if (matches)
		var itemPubDateString = matches[1];
	      else var itemPubDateString = '';

	      var eventDate = new Date(itemPubDateString);
	      
	      if (eventDate < today) continue;
	      var edate = eventDate.getFullYear().toString() + pad(eventDate.getMonth(),2).toString() + pad(eventDate.getDate(),2).toString();
	      events[edate] = items[n];
	    } 
	  catch (e) 
	  { 
	    var itemPubDateString = '';
	    var eventDate = '';
	  }
	}
	content += '<ul>';
	// sort the array by key
	var keys = new Array();
	for(k in events) {
	  keys.push(k);
	}
	keys.sort( function (a, b){return (a > b) - (a < b);} );

	var n = 0;
	try {
	  for (var i = 0; i < keys.length; i++) {
	    eventdate = keys[i]; 
	    if (isNaN(Number(eventdate))) continue;
	    var itemTitle = events[eventdate].getElementsByTagName('title').item(0).firstChild.data;
	    var Summary = events[eventdate].getElementsByTagName('summary').item(0).firstChild.data;
	    var itemDesc = events[eventdate].getElementsByTagName('content').item(0).firstChild.data;
	    var atomdate = events[eventdate].getElementsByTagName('summary').item(0).firstChild.data;
	    var matches = atomdate.match('When: ([a-zA-Z]+ [a-zA-Z]+ [0-9]+, [0-9]+)');
	    if (matches) 
	      var dateString = matches[1];
	    else 
	      var dateString = '';
	  
	    content += '<li><div style="padding-top:10px;color:#4f363d">'+dateString+'<br>';

	    // if there is a event description
	    var matches = itemDesc.match('Event Description: (.*)$');
	    if (matches) {
	      var toggle = "javascript:HideShow('desc"+n+"');";
	      content += '<a href="'+toggle+'"><strong>'+itemTitle+'</strong></a></div>';
	      var itemDesc  = matches[1];
	      content += '<div id="desc'+n+'" style="display:none;background-color:#4f363d;color:white;width:190px;padding:10px 2px">';
	      content += itemDesc+'</div>';
	    }
	    else 
	      content += '<strong>'+itemTitle+'</strong></div>';

	    content += '</li>';
	    n++;
	  }
	  content += '</ul>';
	}
	catch (e) {
	  content += '</ul>';
	  alert("error" + e + ":" + eventdate);
	}

      }
      // Display the result
      document.getElementById("ajaxreader").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>";
    }
		
    HideShow('status');
  }
	
}

/*
* Main AJAX RSS reader request
*/
function RSSRequest() {

	// change the status to requesting data
	HideShow('status');
	document.getElementById("status").innerHTML = "Searching for current events ...";

	// 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 HideShow(id){
  var el = GetObject(id);
  if (el) {
    if(el.style.display=="none")
      el.style.display='';
    else
      el.style.display='none';
  }
}

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

function pad(number,length) {
    var str = '' + number;
    while (str.length < length)
        str = '0' + str;
    return str;
}



