window.addEvent('domready', function() {
//	getElements('a.eventLink').each(function (elem) {
	$$('a.eventLink').addEvent("click",function() {
		paramID = this.get('paramID');
		paramDate = this.get('paramDate');
		tzOffset = (new Date().getTimezoneOffset()/60);	// Send the offset in hours from UTC
		var box = new EventInfoBox(this, {id: "eventBox" + paramID, 
								   	url: "/retrieve_data.php",
									args: "action=retrieveEventData&id=" + paramID + "&dateVal=" + paramDate + "&tzo=" + tzOffset});
		return false;
	});
});

var EventInfoBoxes = [];
var EventInfoBox = new Class({
	options: {
		id: "eventInfoBox",
		url: "",
		args: "",
		classPrefix: "eventInfoBox",
		adjust: {x:0,y:0},
		onClose: $empty
	},
	initialize: function(el, options){
		this.element = $(el); if (!this.element) return;
		this.setOptions(options);
		this.dateVals = {id:"",date:"",dateObj:"",dateStart:"",dateStartObj:"",dateEnd:"",dateEndObj:"",
						timeStart:"",timeStartObj:"",timeEnd:"",timeEndObj:"",title:"",description:""},
		this.boxFX = "";
		this.loadXML();
	},
	loadXML: function() {
		if(this.options.url!="") {
			var xmlHTTP = new Request({url: this.options.url,method:'get',
									  onComplete:function(txt,xml) {
				if(xml.childNodes.length > 0) {
					if(xml.childNodes[0].firstChild.nodeName.toUpperCase()!="ERROR") {
						this.dateVals.id = getNodeText(xml.childNodes[0].getElementsByTagName("ID")[0])
						this.dateVals.date = getNodeText(xml.childNodes[0].getElementsByTagName("DATE")[0])
						this.dateVals.dateObj = new Date(this.dateVals.date*1000);
						this.dateVals.dateVal = this.dateVals.dateObj.format("%Y%m%d");
						this.dateVals.dateStart = getNodeText(xml.childNodes[0].getElementsByTagName("DATESTART")[0])
						this.dateVals.dateStartObj = new Date(this.dateVals.dateStart*1000);
						this.dateVals.dateEnd = getNodeText(xml.childNodes[0].getElementsByTagName("DATEEND")[0])
						this.dateVals.dateEndObj = new Date(this.dateVals.dateEnd*1000);
						this.dateVals.timeStart = getNodeText(xml.childNodes[0].getElementsByTagName("TIMESTART")[0])
						if(this.dateVals.timeStart && this.dateVals.timeStart!="")
							this.dateVals.timeStartObj = new Date(this.dateVals.timeStart*1000);
						else
							this.dateVals.timeStartObj = "";
						
						this.dateVals.timeEnd = getNodeText(xml.childNodes[0].getElementsByTagName("TIMEEND")[0])
						if(this.dateVals.timeEnd && this.dateVals.timeEnd!="")
							this.dateVals.timeEndObj = new Date(this.dateVals.timeEnd*1000);
						else
							this.dateVals.timeEndObj = "";
						this.dateVals.title = getNodeText(xml.childNodes[0].getElementsByTagName("TITLE")[0])
						this.dateVals.description = getNodeText(xml.childNodes[0].getElementsByTagName("DESCRIPTION")[0])

						this.create();
					} else {
						alert("Error: " + getNodeText(xml.childNodes[0].firstChild));
					}
				} else {
					alert("Error: Could not communicate with server.");
				}
			}.bind(this)});
			xmlHTTP.send(this.options.args + '&ms=' + new Date().getTime());
		} else {
			alert("Please supply a url.");
		}
	},
	create: function() {
		this.layout = new Element('div',{
			'id': this.options.id,
			'styles': {
				'display':'none',
				'position':'absolute'
			},
			'class': this.options.classPrefix
		}).inject(document.body);
		EventInfoBoxes.push(this);
		
		var menuIcons = new Element('div',{
			'class': 'menuIcons'
		}).inject(this.layout);

		var closeIcon = new Element('a', {
			'href': '#',
			'title': 'Close Window',
			'class': 'close',
			'events': {
				'click': function() {
					this.hide();
					this.fireEvent('onComplete', [this]);
					return false;
				}.bind(this)
			}
		}).inject(menuIcons);
		
		var dateHeader = new Element('h2', {
			'html': this.dateVals.dateObj.format("%N %E, %V")
		}).inject(this.layout);
		var hr = new Element('hr').inject(this.layout);

		var titleHeader = new Element('h3', {
			'html': this.dateVals.title 
		}).inject(this.layout);

		if(this.dateVals.dateStart != this.dateVals.dateEnd) {
			dateRangeString = this.dateVals.dateStartObj.format("%O/%E/%V") + " - ";
			dateRangeString += this.dateVals.dateEndObj.format("%O/%E/%V");
			var dateRange = new Element('p', {
				'html': '<strong>Event Dates:</strong> ' + dateRangeString
			}).inject(this.layout);
		}
		if(this.dateVals.timeStart && this.dateVals.timeStart!="")
			timeRangeString = this.dateVals.timeStartObj.format("%I:%M %p");
		else
			timeRangeString = "";

		if(this.dateVals.timeEnd && this.dateVals.timeEnd!="") {
			if(timeRangeString != "" && this.dateVals.timeStart != this.dateVals.timeEnd) {
				timeRangeString += " - " + this.dateVals.timeEndObj.format("%I:%M %p");
			} else if(this.dateVals.timeStart != this.dateVals.timeEnd) {
				timeRangeString += this.dateVals.timeEndObj.format("%I:%M %p");
			}
		}
		if(timeRangeString != "") { 
			var timeRange = new Element('p', {
				'html': '<strong>When:</strong> ' + timeRangeString + ''
			}).inject(this.layout);
		}

		var eventOptions = new Element('p', {
			'html': this.dateVals.description
		}).inject(this.layout);

		this.position();
	},
	position: function() {
		var coords = this.element.getCoordinates();
		this.layout.setStyles({
			'left': coords.left,
			'top': coords.top + coords.height + 1
		});
		this.layout.setStyle('opacity','0');
		this.layout.setStyle('display','block');
		this.boxFX = new Fx.Tween(this.layout,{duration:"short"});
		this.boxFX.start("opacity","1");
	},
	hide: function() {
		this.boxFX.cancel();
		this.boxFX.start("opacity","0").chain(function() {
			this.layout.setStyles({'display': 'none'});
			this.layout.destroy();
		}.bind(this));
	}
});

EventInfoBox.implement(new Options);
EventInfoBox.implement(new Events);

function getMonthAsString(month) {
	monthArr = ["January","February","March","April","May","June","July","August","September","October","November","December"];
	return monthArr[month];
}
