window.onload = initPage;

var eventArr = new Array();
var categoryArr = new Array("Official Events", "Balls &#38; Parties", "Closings &#38; Reopenings", "Music Events", "Service Events", "Other Events");
var objArr = new Array();
eventObj = new Object();
var fullDate = new Date();
var req;
var xmlSafariDoc;


function sortByDate(a, b) {
	var x = a.hours;
	var y = b.hours;
	return ((x > y) ? 1 : ((x < y) ? -1 : sortByMin(a, b)));
}

function sortByMin(a, b) {
	var x = a.minutes;
	var y = b.minutes;
	return ((x > y) ? 1 : ((x < y) ? -1 : sortByTitle(a,b)));
}

function sortByTitle(a, b) {
	var x = a.title;
	var y = b.title;
	return ((x > y) ? 1 : ((x < y) ? -1 : 0));
}

function getCatName(cat) {
	if (cat == "official") {
	 	return categoryArr[0];
	}
	else if (cat == "ball") {
	 	return categoryArr[1];
	}
	else if (cat == "closings") {
	 	return categoryArr[2];
	}
	else if (cat == "music") {
	 	return categoryArr[3];
	}
	else if (cat == "service") {
	 	return categoryArr[4];
	}
	else  {
	 	return categoryArr[5];
	}

}

function toggleCategory(cat, myDate) {
	var hasCat = false;
	var displayHTML = new String();
	var titleTxt = "January " + myDate + ", 2009";
	var catTxt = getCatName(cat);
	var headerClass = "top" + myDate;
	document.getElementById('inaugCalendar').className = headerClass;
	displayHTML = '<h3>'+titleTxt+'</h3><h4>'+catTxt+'</h4>';
	displayHTML += '<div id="catStrip"><a href="javascript:void(0)" onClick="showHTML(' + '\'' + myDate;
	displayHTML += '\');">Show All Categories</a></div>';
	for (j=0; j< objArr.length; j++) {
		if (myDate == objArr[j].date)
		{
			if (cat == objArr[j].category) {
		   		hasCat = true;
		   		displayHTML += objArr[j].html;
			}
		}
	}
	if (hasCat == false) {
		displayHTML += '<div id="noEvents"><p>There are no events of that type currently listed for this date.</p></div>'; 
	}
	
	document.getElementById('events').innerHTML = displayHTML;
	
}




function inaugEvent(description, time, street, city, date, title, moreInfo, html, category)
{
	this.date=date;
	this.time=time;
	this.description=description;
	this.street=street;
	this.city=city;
	this.title=title;
	this.moreInfo = moreInfo;
	this.html=html;
	this.category=category;
	this.fullDate = new Date();
	this.minutes = getMin(time);
	this.hours = getHrs(time);
	if (this.hours.substring(0,1) == 0) {
		fullDate.setHours(this.hours.substring(1,2));
	}
	else {
	 	fullDate.setHours(this.hours);
	}
	fullDate.setMinutes(this.minutes);
	fullDate.setDate(date);
	fullDate.setMonth(1);
	fullDate.setYear(2009);
	objArr.push(this);
	
}

function getMin (time) {
	return time.substring(2,4);
}

function getHrs (time) {
	return time.substring(0,2);
}


function initPage() {
	myXML = loadXML("events.xml");
	initArray(myXML);
	loadTodaysPage();
}

function loadTodaysPage() {
	var date_param = gup("date");
	if ((date_param != null) && (date_param !="") && (date_param > 14) && (date_param < 22)) {
		loadPage(date_param);		
	}	
	else {
		var today = getToday();
		if ((today > 14) && (today < 22))
		{
			showHTML(today);
		}
		else {
				showHTML("20");
		}
	}
}


function loadXML(xmlName) {
	if (window.ActiveXObject) // IE
  	{
  		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
 	}
		// code for Mozilla, Firefox, Opera, etc.
	else if (document.implementation.createDocument)
  	{
  		xmlDoc=document.implementation.createDocument("","",null);
  	}
	else
  	{
  		alert("Your browser cannot view this script.");
 		 return;
  	}
	try 
  	{
  		xmlDoc.async=false;
  		xmlDoc.load(xmlName);
  		return(xmlDoc);
  	}
 	catch(e) {
			try {
				req = new XMLHttpRequest();
				} catch(e) {alert("Your browser cannot view this script. " + e.message );}
			if(req) {
				req.onreadystatechange = processReqChange;
				req.open("GET", xmlName, true);
				req.send(null);
		  	}
	}
		
  	return(null);
    
}

function processReqChange() {
    // only if req shows "loaded"
    if (req.readyState == 4) {
        // only if "OK"
        if (req.status == 200 || req.status ==0) {
			xmlSafariDoc = req.responseXML.documentElement;
			initArray(xmlSafariDoc);
			loadTodaysPage();
        } else {
            alert("There was a problem retrieving the XML data " +
                req.statusText);
        }
    }
}

function loadPage(day) {
	showHTML(day);
}

function gup(name)
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

function convertTime(myTime) {
	var timeStr = '';
	var minutes = getMin(myTime);
	var hours = getHrs(myTime);
	if (hours > 12) {
		hours -= 12;
	    timeStr = hours + ":" + minutes + " p.m.";
	}
	else if (hours == 12){
	    timeStr = hours + ":" + minutes + " p.m.";
	}
	else if (hours == 0){
		hours = 12;
	    timeStr = hours + ":" + minutes + " a.m.";
	}
	else {
		if (hours < 10){
		hours = myTime.substring(1,2);
		}
		timeStr = hours + ":" + minutes + " a.m.";
	}
	return timeStr;
}


function initArray(xmlDoc) {
	 eventArr = xmlDoc.getElementsByTagName("event");
	for (i=0; i< eventArr.length; i++) {
		var eventName = "event" + i;		
		var date = eventArr[i].getAttribute("date");
		var title = eventArr[i].getAttribute("title");
		var desc = eventArr[i].getAttribute("description");
		var time = eventArr[i].getAttribute("time");
		var street = eventArr[i].getAttribute("street");
		var city = eventArr[i].getAttribute("city");
		var moreInfo = eventArr[i].getAttribute("website");
		var category = eventArr[i].getAttribute("category");
		var tempHtml = createEventHtml(desc, time, street, city, date, title, moreInfo, category);
		eventName = new inaugEvent(desc, time, street, city, date, title, moreInfo, tempHtml, category);
	}
	objArr.sort(sortByDate);
	
}

function createEventHtml (description, time, street, city, date, title, moreInfo, category) {
 		var tempHtml = '<div style="width:454px; margin-top: 10px; padding:5px 0 10px 0; border-bottom:dotted 1px #cecece;">'; 

			if ((time != null) && (time !="")) {
				var newTime = convertTime(time);
				tempHtml += '<div class="time">' + newTime + "</div>";
			}
					
			if((title != null) && (title !="")) {
				tempHtml += '<div class="title">' + title + "</div>";
			}

			if((street != null) && (street !="")) {
				tempHtml += '<div class="street">' + street + "</div>";
			}
			if((city != null) && (city !="")) {
				tempHtml += '<div class="city">' + city + "</div>";
			}

			
			if((description != null) && (description !="")) {
				tempHtml += '<div class="desc">' + description + "</div>";
			}

			if((moreInfo != null) && (moreInfo !="")) {
				tempHtml += '<div class="more_info"><a href="' + moreInfo;
				tempHtml += '" target="_blank">&#187; More information</a></div>';
			}
					
			tempHtml += '</div><div class="clearboth"></div>';
			
			return tempHtml;

}

function showHTML(myDate) {
	var hasInfo = false;
	var displayHTML = new String();
	var titleTxt = "January " + myDate + ", 2009";
	var headerClass = "top" + myDate;
	var catStrip = buildCatLinks(myDate);
	document.getElementById('inaugCalendar').className = headerClass;
	displayHTML = '<h3>'+titleTxt+'</h3>';
	displayHTML += catStrip;
	for (j=0; j< objArr.length; j++) {
		if (myDate == objArr[j].date)
		{
		   hasInfo = true;
		   displayHTML += objArr[j].html;
		}
	}
	if (hasInfo == false) {
		displayHTML += '<div id="noEvents"><p>There are no events currently listed for this date.</p></div>'; 
	}
	
	document.getElementById('events').innerHTML = displayHTML;
	
}

function buildCatLinks(myDate) {
	var catStrip = new String();
	catStrip = '<div id="catStrip"><a href="javascript:void(0)" onClick="toggleCategory(' + '\'official\'';
	catStrip += ', \'' + myDate + '\');">Official Events</a> | ';
	catStrip += '<a href="javascript:void(0)" onClick="toggleCategory(' + '\'ball\'' + ', \'' + myDate;
	catStrip += '\');">Balls &#38; Parties</a> | ';
	catStrip += '<a href="javascript:void(0)" onClick="toggleCategory(' + '\'closings\'' + ', \'' + myDate;
	catStrip += '\');">Closings &#38; Reopenings</a> | ';
	catStrip += '<a href="javascript:void(0)" onClick="toggleCategory(' + '\'music\'' + ', \'' + myDate;
	catStrip += '\');">Music Events</a> | ';
	catStrip += '<a href="javascript:void(0)" onClick="toggleCategory(' + '\'service\'' + ', \'' + myDate;
	catStrip += '\');">Service Events</a> | ';
	catStrip += '<a href="javascript:void(0)" onClick="toggleCategory(' + '\'other\'' + ', \'' + myDate;
	catStrip += '\');">Other Events</a></div>';
	return catStrip;
}

function getToday() {
	var today = new Date();
	var todaysdate = today.getDate();
	return todaysdate;
}

