/**
* Google calendar upcoming events module
* @author allon
* @version $Revision: 1.4.3 $
**/
var RSSRequestObject = false; // XMLHttpRequest Object
var is24Hour = true; //24 or 12 hour time
if (window.XMLHttpRequest) { // FF, Safari, Opera
RSSRequestObject = new XMLHttpRequest();
if (RSSRequestObject.overrideMimeType) {
RSSRequestObject.overrideMimeType('text/xml');
}
}
else if (window.ActiveXObject){ // IE
try {
RSSRequestObject = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
RSSRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
RSSRequest();
/*
* Main AJAX RSS reader request
*/
function RSSRequest() {
document.getElementById("upcoming_events_content").innerHTML = checkingtext;
// Prepare the request
RSSRequestObject.open("GET", Backend );
// Set the onreadystatechange function
RSSRequestObject.onreadystatechange = ReqChange;
// Send
RSSRequestObject.send(null);
}
/*
* onreadystatechange function
*/
function ReqChange() {
// If data received correctly
if (RSSRequestObject.readyState == 4) {
var xmlDoc;
//Just to check if it is a different navigator from internet explorer
if (document.implementation && document.implementation.createDocument){
xmlDoc = RSSRequestObject.responseXML;
//In case to be the internet explorer
} else if (window.ActiveXObject){
//Create a xml tag in run time
var testandoAppend = document.createElement('xml');
//Put the requester.responseText in the innerHTML of the xml tag
testandoAppend.setAttribute('innerHTML',RSSRequestObject.responseText);
//Set the xml tag's id to _formjAjaxRetornoXML
testandoAppend.setAttribute('id','_formjAjaxRetornoXML');
//Add the created tag to the page context
document.body.appendChild(testandoAppend);
//Just for check put the xmlhttp.responseXML in the innerHTML of the tag
document.getElementById('_formjAjaxRetornoXML').innerHTML = RSSRequestObject.responseText;
//Now we can get the xml tag and put it on a var
xmlDoc = document.getElementById('_formjAjaxRetornoXML');
//So we have a valid xml we can remove the xml tag
document.body.removeChild(document.getElementById('_formjAjaxRetornoXML'));
}
var node = xmlDoc.documentElement;
// if data is valid
if (node.getElementsByTagName('error').length==0) {
// Parsing Feeds
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 = '
' + title + '
';
var timezone='';
try {
timezone = node.getElementsByTagName('timezone').item(0).getAttribute("value");
} catch (e) {
try {
timezone = node.getElementsByTagNameNS('*', 'timezone').item(0).getAttribute("value");
} catch (e) {
var timezone = '';
}
}
// Browse events
var items = node.getElementsByTagName('entry');
var itemTimePrev = new Date();
itemTimePrev.setTime(0000);
if (items.length == 0) {
content += ''+noEventsText+'
';
} else {
for (var n=0; n < items.length; n++) {
var itemTitle=busyText;
if(items[n].getElementsByTagName('title').length>0) {
itemTitle = items[n].getElementsByTagName('title').item(0).firstChild.data;
} else {
if(items[n].getElementsByTagNameNS('*', 'title').length>0) {
itemTitle = items[n].getElementsByTagNameNS('*', 'title').item(0).firstChild.data;
}
}
//Here's a little love for our friend IE - he hates standards, like XML namespace.
try {
var itemTimeXML = items[n].getElementsByTagName('when')[0].getAttribute("startTime");
} catch (e) {
try {
var itemTimeXML = items[n].getElementsByTagName('gd:when')[0].getAttribute("startTime");
} catch (e) {
try {
var itemTimeXML = items[n].getElementsByTagNameNS('*', 'when')[0].getAttribute("startTime");
} catch (e) {
var itemTimeXML = '';
}
}
}
var isAllDay = false; //init isAllDay variable
var dateFound = true;
if (itemTimeXML.length <= 10) isAllDay = true; //just the date is only 10 digits = all day event
var itemTime = new Date();
if (itemTimeXML.length != 0) {
if(!isAllDay){
itemTime=new Date(itemTimeXML.substr(0,4),
(itemTimeXML.substr(5,2)-1),
itemTimeXML.substr(8,2),
itemTimeXML.substr(11,2),
itemTimeXML.substr(14,2));
} else {
itemTime=new Date(itemTimeXML.substr(0,4),
(itemTimeXML.substr(5,2)-1),
itemTimeXML.substr(8,2));
}
} else dateFound = false;
try {
var itemLink = items[n].getElementsByTagName('link')[0].getAttribute("href");
} catch (e) {
var itemLink = "";
}
var itemContent = ' - ';
try {
itemContent += items[n].getElementsByTagName('content').item(0).firstChild.data;
} catch (e) {
try {
itemContent += items[n].getElementsByTagNameNS('*', 'content').item(0).firstChild.data;
} catch (e) {
var itemContent = '';
}
}
content+='';
try {
if(!isAllDay) content+= dateFormat(itemTime, df);
else content+= dateFormat(itemTime, dff);
} catch (e) {
content+=itemTimeXML;
}
content+='
';
var link = 'href="'+backLink.replace('{eventPlace}',itemLink.substring(itemLink.indexOf('eid=')+4,itemLink.length)).replace('{ctzPlace}',timezone)+'"';
if(openInNewWindow==1)
link='href="'+itemLink+'" target="_blank"';
content += ''+itemTitle+'';
content+='
';
itemTimePrev.setTime(itemTime); //Save the last timestamp for next iteration comparison
}
}
// Display the result
document.getElementById("upcoming_events_content").innerHTML = content;
} else {
// Tell the reader that there was error requesting data
var x=node.getElementsByTagName('error');
for (i=0;i"+x[i].childNodes[0].nodeValue+"";
}
}
}
}