var _date = new Date();
var _month = (_date.getMonth() + 1).toString();
var _day = _date.getDate().toString();
var _year = _date.getFullYear().toString();
if (_month.length == 1) _month = '0' + _month;
if (_day.length == 1) _day = '0' + _day;
_date = _month + _day + _year;


(function($) {
	$.fn.swapClass = function(cls1, cls2) {
		return this.each(function() {
			if (cls1 == '' || cls2 == '') return;
			if (this.className == cls1) {
				this.className = cls2;
			} else {
				this.className = cls1;
			}
		});
	};
})(jQuery);

(function($) {
	$.fn.swapText = function(txt1, txt2) {
		return this.each(function() {
			if (txt1 == '' || txt2 == '') return;
			if ($(this).text() == txt1) {
				$(this).text(txt2);
			} else {
				$(this).text(txt1);
			}
		});
	};
})(jQuery);

$.fn.eventSorter = function(ary, type) {
	for (var i=ary.length - 2; i>=0;  i--) {
		for (var j=0; j<=i; j++) {
			switch (type) {
				case 'event': { var x = ary[j + 1].sDate.split('/'); var y = ary[j].sDate.split('/'); break; }
				case 'stateDate': { var x = ary[j + 1].event[0].sDate.split('/'); var y = ary[j].event[0].sDate.split('/'); break; }
				case 'stateName': { var x = ary[j + 1].state.toLowerCase(); var y = ary[j].state.toLowerCase(); break; }
			}
			if (type != 'stateName') {
				if (x[0].length == 1) x[0] = '0' + x[0];
				if (x[1].length == 1) x[1] = '0' + x[1];
				var d1 = x[0] + x[1] + x[2];
				if (y[0].length == 1) y[0] = '0' + y[0];
				if (y[1].length == 1) y[1] = '0' + y[1];
				var d2 = y[0] + y[1] + y[2];
				if (parseInt(d1, 10) < parseInt(d2, 10)) { var tmp = ary[j]; ary[j] = ary[j + 1]; ary[j + 1] = tmp; }
			} else { if (x < y) { var tmp = ary[j]; ary[j] = ary[j + 1]; ary[j + 1] = tmp; } }
		}
	}
	return ary;
};

$(document).ready(function() {
	//$.get('http://images.gactv.com/packages/2008/bustour/xml/tour.xml', function(data) {
	$.get('http://' + location.host + '/packages/2008/bustour/xml/tour.xml', function(data) {
		var states = data.documentElement.getElementsByTagName('state');
		var tEvent = new Array();
		for (var i=0; i<states.length; i++) {
			var stateName = states[i].attributes.item(0).nodeValue;
			tEvent[i] = {};
			tEvent[i].state = stateName;
			var stateEvents = states[i].getElementsByTagName('event');
			tEvent[i].event = new Array();
			for (var j=0; j<stateEvents.length; j++) {
				tEvent[i].event[j] = {};
				for (var k=0; k<stateEvents[j].attributes.length; k++) {
					var attr = stateEvents[j].attributes.item(k).nodeName;
					switch (attr) {
						case 'city': { var city = stateEvents[j].attributes.item(k).nodeValue; break; }
						case 'venue': { var venue = stateEvents[j].attributes.item(k).nodeValue; break; }
						case 'startDate': { var sDate = stateEvents[j].attributes.item(k).nodeValue; break; }
						case 'endDate': { var eDate = stateEvents[j].attributes.item(k).nodeValue; break; }
						case 'description': { var desc = stateEvents[j].attributes.item(k).nodeValue; break; }
						case 'href': { var href = stateEvents[j].attributes.item(k).nodeValue; break; }
						case 'linkTitle': { var title = stateEvents[j].attributes.item(k).nodeValue; break; }
					}
				}
				tEvent[i].event[j].city = city;
				tEvent[i].event[j].venue = venue;
				tEvent[i].event[j].sDate = sDate;
				tEvent[i].event[j].eDate = eDate;
				tEvent[i].event[j].desc = desc;
				tEvent[i].event[j].href = href;
				tEvent[i].event[j].title = title;
			}
		}
		
		/* sort the events with each state by start date */
		for (var i=0; i<tEvent.length; i++) { $.fn.eventSorter(tEvent[i].event, 'event'); }
		/* sort the states by comparing the first date on each state now that each states events are sorted */
		//$.fn.eventSorter(tEvent, 'stateDate');
		/* sort the states alphabetically */
		$.fn.eventSorter(tEvent, 'stateName');
		
		/* create the event divs */
		var allStopsWrap = $('#allStops');
		for (var i=0; i<tEvent.length; i++) {
			/* create the all stops container */
			var asCWrap = document.createElement('div');
			$(asCWrap).addClass('allStopsCWrap');
			/* create the header area for all stops */
			var asHWrap = document.createElement('div');
			$(asHWrap).addClass('asHeaderWrap');
			$(asCWrap).append(asHWrap);
			var asHHeader = document.createElement('span');
			$(asHHeader).addClass('header');
			$(asHHeader).html(tEvent[i].state);
			$(asHWrap).append(asHHeader);
			var btnToggle = document.createElement('a');
			$(btnToggle).addClass('btnExpand');
			$(btnToggle).attr('href', 'javascript: void(0);');
			$(btnToggle).html('(expand)');
			$(asHWrap).append(btnToggle);
			/* create the body for all stops */
			var asBWrap = document.createElement('div');
			$(asBWrap).addClass('asBodyWrap');
			$(asBWrap).css('display', 'none');
			$(asCWrap).append(asBWrap);
			/*----------------------------------------*/
			for (var j=0; j<tEvent[i].event.length; j++) {
				var asbH1 = document.createElement('h1');
				if (tEvent[i].event[j].eDate != '') { tEvent[i].event[j].eDate = ' - ' + tEvent[i].event[j].eDate; }
				$(asbH1).html(tEvent[i].event[j].city + ', ' + tEvent[i].event[j].sDate + tEvent[i].event[j].eDate);
				$(asBWrap).append(asbH1);
				var asbP = document.createElement('p');
				$(asbP).html(tEvent[i].event[j].venue);
				$(asBWrap).append(asbP);
				if (tEvent[i].event[j].href != '') {
					var asbA = document.createElement('a');
					$(asbA).attr('href', tEvent[i].event[j].href);
					$(asbA).attr('target', '_blank');
					$(asbA).html(tEvent[i].event[j].title);
					$(asBWrap).append(asbA);
				}
			}
			/*----------------------------------------*/
			/* create the horizontal rule for all stops */
			var asHRule = document.createElement('div');
			$(asHRule).addClass('hRule');
			$(asCWrap).append(asHRule);
			$(allStopsWrap).append(asCWrap);
		}
		/* setup the click events for the toggle buttons */
		$('div.asHeaderWrap a').click(function () {
			var self = this;
			if (document.all) { var oParent = self.parentNode.nextSibling; } else { var oParent = self.parentNode.nextSibling; }
			$(oParent).slideToggle(250, function() { $(self).swapClass('btnExpand', 'btnContract'); $(self).swapText('(expand)', '(contract)'); });
		});
		/* now get the next event by comparing each states events dates to today's date */
		$.fn.eventSorter(tEvent, 'stateDate');
		var lowDate = '';
		for (var i=tEvent.length - 1; i>=0; i--) {
			for (var j=tEvent[i].event.length - 1; j>=0; j--) {
				var x = tEvent[i].event[j].sDate.split('/');
				if (x[0].length == 1) x[0] = '0' + x[0];
				if (x[1].length == 1) x[1] = '0' + x[1];
				var d1 = x[0] + x[1] + x[2];
				if (_date < d1 && d1 < lowDate) { var nextStop = tEvent[i].event[j]; lowDate = d1; }
				if (lowDate == '') lowDate = d1;
			}
		}
		$('#nsVal').html(nextStop.venue + ', ' + nextStop.city);
		if (nextStop.href != '') {
			$('#nsInfo').attr('href', nextStop.href);
			$('#nsInfo').attr('target', '_blank');
			$('#nsInfo').html(nextStop.title);
		}
	});
});

