var current_month;
var current_year;
var calendar_root = '/events';

$(function() {
	$("#loading").hide();
	
	$("#loading").ajaxStart(function() {
		$(this).show();
	});
	
	$("#loading").ajaxStop(function() {
		$(this).hide();
	});
	current_month = parseInt($('select#months').val());
	current_year = parseInt($('select#years').val());
	
	bindGridDays();
	
	/** Look for eventid in URL parameters **/
	var hashes = window.location.href.slice(window.location.href.indexOf("?")+1).split("&");
	for(var i = 0; i < hashes.length; i++){
		var hash = hashes[i].split('=');
		if(hash[0] == 'eventid'){
			moveToEvent(parseInt(hash[1]));
		}
	}
});

function changeDate( direction ){
	if(direction != null){
		if( direction == 'p'){
			var prevMonth = parseInt(current_month) - 1;
			var prevYear = parseInt(current_year);
			if(prevMonth == 0){
				prevMonth = 12;
				prevYear = prevYear - 1;
			}
			getMonth(prevMonth, prevYear);			
		}else if( direction == 'n'){
			var nextMonth = parseInt(current_month) + 1;
			var nextYear = parseInt(current_year);
			if(nextMonth == 13){
				nextMonth = 1;
				nextYear = nextYear + 1;
			}
			getMonth(nextMonth, nextYear);
		}
	}else{
		getMonth($('select#months').val(), $('select#years').val());
	}
	return false;
}

function bindGridDays(){
	//Bind Events to days
	$('.wkday', '#calendar-table').each(function(){
		if($(this).hasClass('has_event')){
		  $(this).click(function(){
			var dateParts = this.id.split('-', 3);
			var month = (parseInt(dateParts[0]));
			var day = parseInt(dateParts[1]);
			var year = parseInt(dateParts[2]);			
			getDate(month, day, year);
		  });
		}else{
		  $(this).click(function(){
			var dateParts = this.id.split('-', 3);
			var month = (parseInt(dateParts[0]));
			var day = parseInt(dateParts[1]);
			var year = parseInt(dateParts[2]);
			setDisplayDate(month, day, year);
		    $('#ed-body').html('<div class=\"ed-item\" id=\"nodata\">Please select a day containing one or more events.</div>');
	      });	
		}
		if($(this).hasClass('wkdaysel')){
		  $(this).click();
		}
	});
}

function getDate(month, day, year){	
	var myUrl = calendar_root + '/view/day/m/'+month+'/d/'+day+'/y/'+year+'/v/list?lid=3';
	$('#ed-body').load(myUrl, null, function(){
		setDisplayDate(month, day, year);
	});
}

function setDisplayDate(month, day, year){
	// Events Title Text
	var d = new Date(year, month - 1, day, 0, 0, 0, 0);
	var dNames = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
	var daytags = new Array("th","st","nd","rd","th","th","th","th","th","th");
	var mNames = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');

	var woo = ""+day;
	var wee = woo.substr(woo.length - 1, 1);
	if(woo > 10 && woo < 14) { wee = 0; }
	var dtag = daytags[wee];
	
	$('#ed-header').html('Events for ' + dNames[d.getDay()] + ' the ' + d.getDate() + dtag);
	var monthString = (month).toString();
	var dayString = day.toString();
	// Selected in Grid
	$('.wkdaysel', '#calendar-table').removeClass('wkdaysel');
	$('#'+monthString+'-'+dayString+'-'+year,'#calendar-table').addClass('wkdaysel');
}

function getMonth(month, year, day){
	var myUrl = calendar_root + '/view/month/m/'+month+'/y/'+year+'/v/grid?lid=4';
	$('#calendar-holder').load(myUrl, null, function(){
		bindGridDays();
		current_month = month;
		current_year = year;
		current_day = parseInt(day);
		setDisplayMonth(month, year);
		if(current_day > 0){
			getDate(current_month, current_day, current_year);
		}else{
			defaultEventsDisplay();
		}
	});
}

function setDisplayMonth(month, year){
	// Events Title Text
	var d = new Date(year, month - 1, 1, 0, 0, 0, 0);
	var mNames = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
	$('#month_name').html(mNames[d.getMonth()]);
	$('select#months').val(month);
	$('select#years').val(year);
}

function moveToEvent(eventId){
	$.ajax({
		type: "GET",
		url: "/events/event/"+parseInt(eventId),
		data: "",
		dataType: "xml",
		complete: function(xh, suc) {
			xd = xh.responseXML;
			
			var edata = xd.getElementsByTagName("event");
			var daynumber = 0;
			var monthnumber = 0;
			var yearnumber = 0;
			for(i=0;i<=edata.item(0).childNodes.length;i++) {
				try {
					eventData = edata.item(0).childNodes[i].firstChild.nodeValue;
					eventData = eventData.replace(/\{\{/g,"<");
					eventData = eventData.replace(/}}/g,">");
					switch(edata.item(0).childNodes[i].tagName){
						case 'daynumber':
							daynumber = parseInt(eventData);
							break;
						case 'monthnumber':
							monthnumber = parseInt(eventData);
							break;
						case 'yearnumber':
							yearnumber = parseInt(eventData);
							break;
						default:
								//eventData = eventData.replace("&quo;","\"");
								$("#ew_"+edata.item(0).childNodes[i].tagName).html(eventData);
							
							break;
					}
				}
				catch(err) { }
			}
			
			if(daynumber > 0 && monthnumber > 0 && yearnumber > 0){
				getMonth(monthnumber, yearnumber, daynumber);
			}
			
			$("#months,#years").hide();
			$("#pillar").show();
			$("#eventwindow").slideDown("slow");
		}
	});	
}

function showEvent(eventId) {
	$.ajax({
		type: "GET",
		url: "/events/event/"+parseInt(eventId),
		data: "",
		dataType: "xml",
		complete: function(xh, suc) {
			xd = xh.responseXML;
			
			var edata = xd.getElementsByTagName("event");

			try {
				for(i=0;i<=edata.item(0).childNodes.length;i++) {
					try{
					eventData = edata.item(0).childNodes[i].firstChild.nodeValue;
					eventData = eventData.replace(/\{\{/g,"<");
					eventData = eventData.replace(/}}/g,">");
					//eventData = eventData.replace("&quo;","\"");
					$("#ew_"+edata.item(0).childNodes[i].tagName).html(eventData);
					}catch(err) {/**expecting two bad nodes**/}
				}
			}
			catch(err) {
				//No event data or bad event data
			}
			
			$("#months,#years").hide();
			$("#pillar").show();
			$("#eventwindow").slideDown("slow");
		}
	});			
}

function hideEvent() {	$("#eventwindow").slideUp("slow", function() {
		$("#pillar").hide();
		$("#months,#years").show();
	});
}

function defaultEventsDisplay() {
	var headertxt = "No date selected";
	document.getElementById("ed-header").innerHTML = headertxt;
	document.getElementById("ed-body").innerHTML = "<div class=\"ed-item\" id=\"nodata\">Please select a day containing one or more events.</div>";
}