(function($) {
	$.plugin.register( $baseUrl+"scripts/jquery/ui/ui.datepicker.packed", {fn:'datepicker'} );

	var searchType = "";
	var searchRange = " for the next few days";
	var _selectWhen = function(when){
		var start = Date.today();
		var end = Date.today();
		switch(when){
			case "tomorrow":
				searchRange = " for tomorrow";
				start = Date.parse("tomorrow");
				end = Date.parse("tomorrow");
				break;
			case "7days":
				searchRange = " for the next 7 days";
				end = end.addDays(7);
				break;
			case "weekend":
				var as, ae;
				searchRange = " for this weekend";
				var wd = start.toString("ddd");
				switch(wd){
					case "Mon":
						as = 4; ae = as+2;
						break;
					case "Tue":
						as = 3; ae = as+2;
						break;
					case "Wed":
						as = 2; ae = as+2;
						break;
					case "Thu":
						as = 1; ae = as+2;
						break;
					case "Fri":
						as = 0; ae = as+2;
						break;
					case "Sat":
						as = 0; ae = as+1;
						break;
					case "Sun":
						as = 0; ae = as;
						break;
				}
				start = start.addDays(as); 
				end = end.addDays(ae);
				break;
			case "30days":
				searchRange = " for the next 30 days";
				end = end.addDays(30);
				break;
			default:
				searchRange = " today";
				break;
		}
		return { start: start.toString($.danceful.dateSearchFormat), end: end.toString($.danceful.dateSearchFormat) }
	}
	var getEvents = function(stime, etime){
		if(!stime){ return; }
		etime = etime || stime;
		$("#center .panel h4").text("finding "+searchType+searchRange+"...");
		$("#eventlist").empty();

		$.ajax({
		    url: $baseUrl+"data/"+searchType
			,data: {start: stime, end: etime, type: (searchType=="lessons")?5:4 }
		    ,success: handleEvents
		    ,error: handleEventsError
		});
	};
	var handleEventsError = function(msg){};
	var handleEvents = function(data){
		$("#eventlist").html(data);
		var events = $("#eventlist li");
		if(events.length > 0){
			$("#center .panel h4").text(events.length+" "+(events.length==1?searchType.substring(0,searchType.length-1):searchType)+" found"+searchRange);
		} else {
			$("#center .panel h4").text("No "+searchType+" found");
		}
	};
	var handleEventLink = function(e){
		var dates = _selectWhen($(e.target).attr("when"));
		getEvents(dates.start, dates.end);
	};
	var handleDayClick = function(v,e){
		var d = e._getDate().toString($.danceful.dateSearchFormat);
		searchRange = " for "+e._getDate().toString($.danceful.dateDisplayFormat);
		getEvents(d);
	};
	
	$.danceful.events = function(){
		//initialize calendar
		$("#eventsCalendar").datepicker({ 
		    onSelect: handleDayClick
			//,minDate: Date.today() 
		});
		$("#dateRangeLinks li").bind("click", handleEventLink);
		var qry = $.danceful.queryToObject();
		searchType = $.danceful.searchType || "events";
		//get default date range
		var when = "7days";
		if(qry && qry.w){ when = qry.w; }
		var dates = _selectWhen(when);
		getEvents(dates.start, dates.end);
	};

	$(function(){ new $.danceful.events() });
})(jQuery);
