var states = [];
var allCities = [];
var resultsOfSearch = [];
var resultsUnfiltered = [];
var lastState;
var lastCity;
var calBig = false;

$(function() {
	resultsUnfiltered = eventsData;
	loadEvents(resultsUnfiltered);
	drawSearch();
	$("#stateSel").bind('click', function(e) {
		lastCity = -1;
		$this = $(this);
		var state = $this.val();
		if (state == lastState) {
			lastState = -1;
			resetSearch();
			return;
		}
		lastState = state;
		$('#citySel').val(null);
		$('#citySel option').remove();
		if (states[state][1].length > 1) {
			var citySel = $('#citySel');
			for (var j=0; j<states[state][1].length; j++) {
				citySel.append($("<option>").attr("value", states[state][1][j]).html(states[state][1][j]));
			}
			//citySel.attr("size", j);
			$('#cityselectfield').show();
			$('#citystaticfield').hide();
		} else {
			$('#cityStatic').html('<b>' + states[state][1][0] + '</b>');
			$('#cityselectfield').hide();
			$('#citystaticfield').show();
		}
		filterResults();
	});
	$("#citySel").bind('click', function(e) {
		$this = $(this);
		var city = $this.val();
		if (city === lastCity) {
			this.selectedIndex = -1;
			lastCity = -1;
			filterResults();
			return false;
		}
		lastCity = city;
		filterResults();
	});
});

function loadEvents(events) {
	var curYear = (new Date()).getFullYear();
	var stateIndex;
	for (var i = 0; i < events.length; i++) {
		if (events[i].location.state.length == 0) {
			events[i].location.state = events[i].location.country;
		} else {
			events[i].location.state = "US - " + events[i].location.state;
		}
		var state = events[i].location.state;
		stateIndex = -1;
		for (var j=0; j<states.length; j++) {
			if (state == states[j][0]) {
				stateIndex = j;
				break;
			}
		}
		if (stateIndex == -1) {
			states[states.length] = [state, [events[i].location.city]];
		} else {
			if ($.inArray(events[i].location.city, states[stateIndex][1]) == -1) {
				states[stateIndex][1][states[stateIndex][1].length] = events[i].location.city;
			}
		}
	}

	states.sort();
	for (var i=0, j=0; i<states.length; i++) {
		states[i][1].sort();
		for (j=0; j<states[i][1].length; j++) {
			allCities[allCities.length] = states[i][1][j];
		}
	}

	allCities.sort();
}

// calendar

function drawNav(date) {
	$("#calnav1").unbind('click');
	$("#calnav2").unbind('click');
	$("#calnav3").unbind('click');
	$('#calzoomicon').unbind('click');
	$("#calnav1").jqCal({ date: new Date(date[0], date[1], 1),
		mode: $.fn.jqCal.modes.Tiny, events: eventsData
	});
	$("#calnav1").bind('click', function() {
		drawEventCal(new Date(date[0], date[1], 1));
	});
	$('#calzoomicon').bind('click', function() {
		drawEventCal(new Date(date[0], date[1], 1));
	});
	$("#calnav2").jqCal({ date: new Date(date[0], date[1] + 1, 1),
		mode: $.fn.jqCal.modes.Tiny, events: eventsData
	});
	$("#calnav2").bind('click', function() {
		drawEventCal(new Date(date[0], date[1] + 1, 1));
	});
	$("#calnav3").jqCal({ date: new Date(date[0], date[1] + 2, 1),
		mode: $.fn.jqCal.modes.Tiny, events: eventsData
	});
	$("#calnav3").bind('click', function() {
		drawEventCal(new Date(date[0], date[1] + 2, 1));
	});
	$("#prev").unbind('click');
	$("#next").unbind('click');
	$("#prev").unbind('mousedown');
	$("#next").unbind('mousedown');
	$("#prev").unbind('selectstart');
	$("#next").unbind('selectstart');
	$("#prev").bind('mousedown', function() {
		return false;
	});
	$("#next").bind('mousedown', function() {
		return false;
	});
	$("#prev").bind('selectstart', function() {
		return false;
	});
	$("#next").bind('selectstart', function() {
		return false;
	});
	var now = new Date();
	var firstFromNow = new Date(now.getFullYear(), now.getMonth(), 1);
	var prevMonth = new Date(date[0], date[1] - 1, 1);
	if (firstFromNow.valueOf() > prevMonth.valueOf()) {
		$("#prev").addClass("disabledarrow");
	} else {
		$("#prev").removeClass("disabledarrow");
		$("#prev").bind('click', function() {
			this.focus();
			var prevDate = [date[0], date[1] - 3, 1];
			drawNav(prevDate);
			return false;
		});
	}
	var maxMonth = new Date(now.getFullYear() + 2, now.getMonth(), 1);
	var nextMonth = new Date(date[0], date[1] + 4, 1);
	if (maxMonth.valueOf() < nextMonth.valueOf()) {
		$("#next").addClass("disabledarrow");
	} else {
		$("#next").removeClass("disabledarrow");
		$("#next").bind('click', function() {
			this.focus();
			var nextDate = [date[0], date[1] + 3, 1];
			drawNav(nextDate);
			return false;
		});
	}
}

function drawEventCal(drawDate) {
	$("#eventcal").jqCal({ date: drawDate,
		mode: $.fn.jqCal.modes.Big, events: eventsData, monthYear: false
	});
	var search = searchEnglish();
	$("#MonthYearBig").html($.fn.jqCal.defaults.months[drawDate.getMonth()] + 
		", " + drawDate.getFullYear() + ((search.length > 0) ? " " + search : ""));
	$('#calzoomicon').hide();
	$('#eventCalBig').show();
	$('#searchform').hide();
	$('#calnav').addClass("calnavopen");
	calBig = true;
}

function hideEventCal() {
	$('#calnav').removeClass("calnavopen");
	$('#eventCalBig').hide();
	$('#calzoomicon').show();
	$('#searchform').show();
	calBig = false;
}

// search

function drawSearch() {
	$('#stateSel option').remove();
	var stateSel = $('#stateSel');
	for (var i=0; i<states.length; i++) {
		stateSel.append($("<option>").attr("value", i).html(states[i][0]));
	}

	//stateSel.attr("size", states.length);

	$('#citySel option').remove();
	var citySel = $('#citySel');
	for (j=0; j<allCities.length; j++) {
		citySel.append($("<option>").attr("value", allCities[j]).html(allCities[j]));
	}

	//citySel.attr("size", count);

	lastCity = -1;
	lastState = -1;

	$('#stateSel option').attr("selected", "");
	$('#citySel option').attr("selected", "");
	$('#cityselectfield').show();
	$('#citystaticfield').hide();

	drawNav(resultsUnfiltered[0].date);

	$("#eventcalcontainer").show();
}

function filterResults() {
	var stateName = ((states[$("#stateSel").val()]) ? states[$("#stateSel").val()][0] : "");
	var cityName = $("#citySel").val();
	resultsOfSearch = [];

	if (cityName === null && stateName.length == 0) {
		drawList(resultsUnfiltered, false);
		return;
	}
	if (cityName === null) {
		for (var i=0, j=0; i<resultsUnfiltered.length; i++) {
			if (resultsUnfiltered[i].location.state == stateName) {
				resultsOfSearch[resultsOfSearch.length] = resultsUnfiltered[i];
			}
		}
	} else {
		for (var i=0, j=0; i<resultsUnfiltered.length; i++) {
			if (resultsUnfiltered[i].location.city == cityName) {
				resultsOfSearch[resultsOfSearch.length] = resultsUnfiltered[i];
			}
		}
	}
	drawList(resultsOfSearch, false);
}

function inSearch() {
	return (resultsOfSearch.length > 0);
}

function searchEnglish() {
	var stateName = ((states[$("#stateSel").val()]) ? states[$("#stateSel").val()][0] : "");
	var cityName = $("#citySel").val();

	var ret = "";

	if (cityName === null && stateName.length == 0) {
		return "";
	}
	if (cityName === null) {
		ret = " in " + stateName;
	} else if (stateName.length == 0) {
		ret = " in " + cityName;
	} else {
		ret = " in " + cityName + ", " + stateName;
	}

	ret = ret + " <a href='#' onclick='resetSearch(); return false;'>All " + resultsUnfiltered.length + " Events</a>";

	return ret;
}


function resetSearch() {
	resultsOfSearch = [];
	drawSearch();
	drawList(resultsUnfiltered, true);
}


function drawList(events) {
	var listHTML = [];
	if (!inSearch()) {
		listHTML[0] = "<h3 style='padding-top: 15px;'>" + events.length + " Upcoming Events</h3>";
	} else {
		listHTML[0] = "<h3 style='padding-top: 15px;'>" + events.length + " Upcoming Event" + ((events.length > 1) ? "s" : "") + " " + searchEnglish() + "</h3>";
	}
	var curYear = (new Date()).getFullYear();
	var stateIndex;
	eventsData = [];
	for (var i = 0; i < events.length; i++) {
		listHTML[listHTML.length] =
'<div class="NewsItemTemplate">' +
'<div class="EventDate">' +
'<a href="' + events[i].url + '" class="EventTitle">' +
'    <div class="DateContainer">' +
'        <div class="DateMonth">' +
'        ' + $.fn.jqCal.defaults.monthsTiny[events[i].date[1]] + 
			((events[i].date[0] != curYear) ? " '" + (events[i].date[0]-2000) : "") + '</i></b>' +
'        </div>' +
'        <div class="DateDay">' +
'        ' + events[i].date[2] + '</i></b>' +
'        </div>' +
'    </div>' +
'    <div class="DateYear">' +
'    \'' + ((new Date(events[i].date[0], events[i].date[1], events[i].date[2])).getFullYear() - 2000) + '</i></b>' +
'    </div>' +
'</a>' +
'</div>' +
'<div class="EventContent">' +
'<a href="' + events[i].url + '" class="EventTitle">' +
'' + events[i].title + '' +
'</a>' +
'<br />' +
'<span class="">' +
'<b><i>' +
'' + events[i].location.name + '' +
'</i></b>' +
'</span> at <b><i>' +
'' + events[i].location.city + ', ' + events[i].location.state + ', ' + events[i].location.zip + '' +
'</i></b>' +
'<br />' + events[i].listDesc +
'</div>' +
'<div class="EventLinks">' +
'<a href="http://www.facebook.com/sharer.php?u=' + escape(events[i].url) + '&t=Gift%20of%20Life%20Donor%20Drive" target="fbShare" onclick=\'var newFB = window.open("", "fbShare", "toolbar=no, width=550, height=550"); newFB.focus();\'>' +
'<img src="/images/facebook_share.png" alt="Share on Facebook" border="0" />' +
'  </a>' +
'</div>' +
'</div>';
		eventsData[eventsData.length] = events[i];
	}
	if (listHTML.length) {
		$('#event_listing').html(listHTML.join(""));
	} else {
		$('#event_listing').html("<b>No Upcoming Events</b>");
	}

	drawNav(events[0].date);
	if (calBig) {
		drawEventCal(new Date(events[0].date[0], events[0].date[1], 1));
	}

	$("#eventcalcontainer").show();
}


function inspect(obj) {
	var s = "";
	for (var x in obj) {
		if (false && typeof(obj[x]) == "object") {
			s += x + ":" + "\n" + inspect(obj[x]) + "\n";
		} else {
			s += x + ":" + obj[x] + "\n";
		}
	}
	return s;
}

function html(s) {
	return s.replace(/\n/g, "<br/>");
}


