
var xmlSource;
var processor; 
var transform;

function loadCalendarEvents(xmlfile, xslfile, id) {
	loadXML(xmlfile,xslfile,id);
}
function loadCommingEvents(xmlfile, xslfile, id) {
	loadXML(xmlfile,xslfile,id);
}
function loadXML(xmlfile,xslfile,id) {
	if (window.ActiveXObject) {
		var xsl = new ActiveXObject("MSXML2.FreeThreadedDOMDocument");
		xsl.async = false;
		xsl.load(xslfile);
		var template = new ActiveXObject("MSXML2.XSLTemplate");
		template.stylesheet = xsl;
		processor = template.createProcessor();
		loadTransform(xmlfile, id);
	} else if (document.implementation && document.implementation.createDocument) {
		//Create an XSLT processor instance
		processor = new XSLTProcessor();
		//Create an empty XML document for the XSLT transform
		transform = document.implementation.createDocument("", "", null);
		//Load the XSLT
		transform.async=false;
		transform.load(xslfile);
		transform.onload = loadTransform(xmlfile, id);
	}
}

//Triggered once the XSLT document is loaded
function loadTransform(xml, id){
	if (window.ActiveXObject) {
		xmlSource=new ActiveXObject("Microsoft.XMLDOM");
		xmlSource.async=false;
		xmlSource.load(xml);
		getEvents(id);
	} else if (document.implementation && document.implementation.createDocument) {
		//Attach the transform to the processor
		processor.importStylesheet(transform);
		xmlSource = document.implementation.createDocument("", "", null);
		// RUN IN SYNCRON MODE TO INSURE THAT xml IS LOADED BEFORE HANDLING ITS NODES
		xmlSource.async=false;
		xmlSource.load(xml);
		xmlSource.onload = getEvents(id);
	} else {
		alert('Your browser cannot handle this script');
	}
}

//Triggered once the source document is loaded
function insertTransformation(id){
	var elem = document.getElementById(id);
	if (typeof(elem)=="object") {
		if (window.ActiveXObject) {
		    processor.input = xmlSource;
 		 	  processor.transform();
		   	var finishedHTML = processor.output;
				elem.innerHTML = finishedHTML;
		} else if (document.implementation && document.implementation.createDocument) {
		  var frag = processor.transformToFragment(xmlSource, document);
 		 	elem.appendChild(frag);
		}
	}
}


function getEvents(id) {
	if (typeof(xmlSource) == "object") {
		var xmlDoc = xmlSource.documentElement;
		xmlDoc = removePastEvents(xmlDoc);
	}
	insertTransformation(id);
}


function removePastEvents(xmlDoc) {
	var hasOldEvent = true;
	while (hasOldEvent) {
		hasOldEvent = false;
		var x=xmlDoc.getElementsByTagName('event');
		for (var i=0; i<x.length;i++) {
			var y=x[i].getElementsByTagName('date');
			if (typeof(y) == "object") {
				var ds = y[0].childNodes[0].nodeValue;
				if (isDateFuture(ds)) {
					// future event
				} else {
					// past event
					xmlDoc.removeChild(x[i]);
					hasOldEvent = true;
					break;
				}
			}
		}	
	}
	return xmlDoc;
}


function isDateFuture(dateS) {
	if (dateS.length>15) {
		var dt = new Date();
		var yy = dateS.substring(0,4);
		var mm = dateS.substring(5,7);
		var dd = dateS.substring(8,10);
		var hh = dateS.substring(11,13);
		var nn = dateS.substring(14,16);
		dt.setYear(yy);
		dt.setMonth(mm-1);
		dt.setDate(dd);
		dt.setHours(hh);
		dt.setMinutes(nn);
		var now = new Date();
		if (now<dt) {
			return true;
		}
	}
	return false;
}

