/* ==============================================================
  WebEvent Calendar Importer
  This script will import calendar events from a hosted WebEvent 
  calendar.

  Clayton Leis
  Nov 2, 2007
*/

function CalendarImporter(calName, containerId, calNumbers, calURL, moreCals)
{
	var container = document.getElementById(containerId);
	var url = calURL + "?cal=";
	this.calendars = new Array();
	
	
		// FINDS DATE
	var Days = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
	var Months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');

	var today = new Date();
	var Year = today.getFullYear();
	var Month = today.getMonth();
	var MonthName = Months[Month];
	var Day = today.getDate();
	var DayName = Days[today.getDay()];
	
	var myDate = DayName + ', ' + MonthName + ' ' + Day + ', ' + Year;
	
	
	
		// OUTPUTS CALENDAR
	this.output = function() {
		container.innerHTML = '<h3>Today at ' + calName + '<br>' + myDate;
		var calNumList = '';
		for (var a=0; a<this.calendars.length; a++){
			var calDiv = document.createElement('div');
			var calTitle = document.createElement('h4');
			calTitle.innerHTML = this.calendars[a].title;
			calDiv.appendChild(calTitle);
			var calUL = document.createElement('ul');
			if (this.calendars[a].events.length == 0){
				calUL.innerHTML = '<p>Loading...</p>';
				if(this.calendars[a].done == true){
					calUL.innerHTML = '<p>No Events</p>';
				}
			}
			for (var b=0; b<this.calendars[a].events.length; b++){
				var calLI = document.createElement('li');
				calLI.innerHTML = this.calendars[a].events[b].title;
				if (this.calendars[a].events[b].time){
					var calSpan = document.createElement('span');
					calSpan.innerHTML = this.calendars[a].events[b].time;
					calLI.appendChild(calSpan);
				}
				calUL.appendChild(calLI);
			}
			calDiv.appendChild(calUL);
			var calLinks = document.createElement('p');
			calLinks.innerHTML = 'more> <a href="' + this.calendars[a].address + '&cmd=listweek" target=_blank>this week</a>, <a href="' + this.calendars[a].address + '&cmd=calmonth" target=_blank>this month</a>';
			calDiv.appendChild(calLinks);
			container.appendChild(calDiv);
			for(var i=1;i<this.calendars[a].calNum.length;i++){
				calNumList += this.calendars[a].calNum[i] + ',';
			}
		}
		// "MORE CALENDARS" AREA
		this.moreCalendars = '<div><h4>More Calendars</h4><ul><li><a href="http://usd320.hosted.webevent.com/cgi-bin/webevent.cgi?cmd=listweek&cal=' + calNumList + '" target="_blank">' + calName + ' this week</a></li><li><a href="http://usd320.hosted.webevent.com/cgi-bin/webevent.cgi?cmd=calmonth&cal=' + calNumList + '" target="_blank">' + calName + ' this month</a></li>';
		for (var i=0; i<moreCals.length; i++){
			this.moreCalendars += '<li><a href="' + moreCals[i][1] + '" target="_blank">' + moreCals[i][0] + '</a></li>';
		}
		this.moreCalendars += '</ul></div>';
		container.innerHTML += this.moreCalendars;
	}
	
	
	
	
	for (var i=0;i<calNumbers.length;i++)
	{
		this.calendars.push(new Calendar(calNumbers[i], this));
	}
	this.output()
	
	
	
	//OBJECTS USED TO STORE INFORMATION
	function Calendar(calNum, callingObj){
		this.title = calNum[0];
		this.events = new Array();
		this.address = url;
		this.calNum = calNum;
		this.done = false;
		this.callingObj = callingObj;
		
		for(var i=1;i<calNum.length;i++){
			this.address += "cal" + calNum[i] + ",";
		}
	
		this.addEvents = function(req){
			var temp = document.createElement('DIV');//create a temporary element
			temp.innerHTML = req.responseText;
			//get calendar title
			var ps = temp.getElementsByTagName('P');
			var times = new Array();
			var titles = new Array();
			for (var i=0;i<ps.length;i++){
				if (ps[i].className == "listeventtime"){
					times.push(ps[i].innerText || ps[i].textContent);
				}
			}
			var divs = temp.getElementsByTagName('DIV');
			for (var i=0;i<divs.length;i++){
				if (divs[i].className == "listeventtitle"){
					for (var j=0;j<divs[i].childNodes.length;j++){
						if (divs[i].childNodes[j].tagName == "A"){
							var eventTitle = divs[i].childNodes[j].innerText || divs[i].childNodes[j].textContent;
						//	alert(divs[i].childNodes[j].textContent);
							titles.push('<a href="' + divs[i].childNodes[j].href + '">' + eventTitle + '</a>');
							
						}
					}
				}
			}
			for (var i=0;i<titles.length;i++)
			{
				this.events.push(new Event(titles[i],times[i]));
			}
		this.done=true;
		callingObj.output();
		}
		
		function Event(eventTitle, eventTime){
			this.title = eventTitle;
			this.time = eventTime;
		}
			
		
		//CODE TO PERFORM REQUESTS
		this.sendRequest = function(url,callbackObj,postData) {
			var req = this.createXMLHTTPObject();
			if (!req) return;
			var method = (postData) ? "POST" : "GET";
			req.open(method,url,true);
			req.setRequestHeader('User-Agent','XMLHTTP/1.0');
			if (postData)
				req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
			req.onreadystatechange = function () {
				if (req.readyState != 4) return;
				if (req.status != 200 && req.status != 304) {
		//			alert('HTTP error ' + req.status);
					return;
				}
				callbackObj.addEvents(req);
			}
			if (req.readyState == 4) return;
			req.send(postData);
		}
		
		this.XMLHttpFactories = function() {
			return [
				function () {return new XMLHttpRequest()},
				function () {return new ActiveXObject("Msxml2.XMLHTTP")},
				function () {return new ActiveXObject("Msxml3.XMLHTTP")},
				function () {return new ActiveXObject("Microsoft.XMLHTTP")}
			];
		}
		
		this.createXMLHTTPObject = function() {
			var xmlhttp = false;
			var factories = this.XMLHttpFactories();
			for (var i=0;i<factories.length;i++) {
				try {
					xmlhttp = factories[i]();
				}
				catch (e) {
					continue;
				}
				break;
			}
			return xmlhttp;
		}
		
		
		this.sendRequest("/importcalendar/mirror.aspx?" + this.address + "&cmd=listday", this);
		
	}

}

function popUp(URL,w,h) {
        winl = (screen.width - w) / 2;
        wint = (screen.height - h) / 2;

        somedate = new Date();
        id = somedate.getTime();
        eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width="+w+",height="+h+",top="+wint+",left="+winl+"');");
 }