$(document).ready(function(){
	var slider_loc = "#MainSlider";
	var events_loc = "#AjaxEvents";
	var ministries_loc = "#ebygroup";
	var left_date_loc = "#fLeftDate";
	var right_date_loc = "#fRightDate";
	var jump_points_loc = "#ebytime";
	var events_file_loc = "/ajax-events.php";
	var day = 1000 * 60 * 60 * 24;
	var day_range_min = 0;
	var day_range_max = 180;
	var min_date = new Date(); min_date.addDays(day_range_min);
	var max_date = new Date(); max_date.addDays(day_range_max);
	var default_left_date = new Date();
	var default_right_date = new Date(); default_right_date.addDays(day_range_max);
	var date_display_format = "mmm dd, yyyy";
	var date_submit_format = "mm-dd-yy";
	Date.format = date_display_format;
	var today = new Date();
	today.zeroTime(); min_date.zeroTime(); max_date.zeroTime();
	var left_date;
	var right_date;
	
	$(events_loc+' .none').hide();
	$('p#submit input[type=image]').hide();
	
	function date_is_today (date)
	{
		if (today.asString() == date.asString())
			return 'Today';
		else
			return date.asString();
	}//date_is_today()
	
	function days_from_today (date)
	{
		return days_between(today, date);
	}//days_from_today()
	
	/* Finds the days between the two submitted dates */
	function days_between (left, right)
	{
		left.zeroTime();
		right.zeroTime();
		return Math.round((right.getTime() - left.getTime()) / day);				
	}//days_between()
	
	/* return the date of the selected field */
	function date_from_field(field_loc)
	{
		if ($(field_loc).val() == 'Today')
			return new Date();
		else 
			return Date.fromString($(field_loc).val());		
	}//field_date
	
	/* Disables all date-picker related elements */
	function disable_elements ()
	{
		$('#DateRange :text.date').datepicker('disable');
		$(jump_points_loc+' :radio,'+ministries_loc+' :checkbox').attr('disabled', 'disabled');
		$(slider_loc).sliderDisable();
	}//disable_elements
	
	/* Enables all date-picker related elements */
	function enable_elements ()
	{
		$('#DateRange :text.date').datepicker('enable');
		$(jump_points_loc+' :radio,'+ministries_loc+' :checkbox').removeAttr('disabled');
		$(slider_loc).sliderEnable();
	}//enable_elements
	
	/* Updates the two textboxes representing the date range */
	function update_date_range (left, right)
	{
		left_date = new Date();
		right_date = new Date();
		left_date.addDays(left);
		right_date.addDays(right);
		
		$('#fLeftDate').val(date_is_today(left_date));
		$('#fRightDate').val(date_is_today(right_date));
	}//update_date_range()
	
	function update_slider (left, right)
	{
		//reset handles
		$(slider_loc).sliderMoveTo(day_range_min, null, null, false, 0);
		$(slider_loc).sliderMoveTo(day_range_max, null, null, false, 1);
		
		//set new values
		$(slider_loc).sliderMoveTo(days_from_today(left), null, null, false, 0);
		$(slider_loc).sliderMoveTo(days_from_today(right), null, null, false, 1);
	}//update_slider()
	
	/* Updates the list of events via AJAX */
	function update_events (left, right)
	{
		disable_elements();
		$(events_loc+' .none').fadeOut('fast');
		
		//build selected ministry list
		var ministry_list = '';
		$(ministries_loc+' input:checked, #fSelectedGroup').each(function(){
			ministry_list += $(this).val()+',';
		});
		if (ministry_list != '')
			ministry_list = '&ministries='+ministry_list;
		
		//hide previous events and displaying loading message	
		$(events_loc+' ul').fadeOut('fast', function(){
			$(events_loc+' .loading').fadeIn('normal', function(){
				//load events
				Date.format = date_submit_format;
				$(events_loc+' ul').load(events_file_loc+"?start="+left.asString()+"&end="+right.asString()+ministry_list,
					'', function(){
						//display events & hide loading message
						Date.format = date_display_format;
						$(events_loc+' .loading').fadeOut('normal', function(){
							if ($(events_loc+' li').length > 0) {
								/* enable tool tips */
								$(events_loc+' li .details').hide();
								$(events_loc+' li a').bind('mouseenter', function(){
									showTrail($($(this).attr('rel')).text());
								});
								$(events_loc+' li a').bind('mouseleave', function(){
									hidetrail();
								});
								$(events_loc+' ul').fadeIn('fast', function(){
									enable_elements();
								});
							} else { //if no events display message
								$(events_loc+' .none').fadeIn('fast');
								enable_elements();
							}
						});
				});
			});
		});	
		
	}//update_events
	
	/* Updates the slider, event list, and date range */
	function update_all (left, right)
	{
		update_date_range(days_between(min_date, left), days_between(min_date, right));
		update_slider(left, right);
		update_events(left, right);
	}//update_all
	
	update_date_range(days_from_today(default_left_date), days_from_today(default_right_date));
	
	/* Sets the slider up */
	$(slider_loc).slider({
		handle: '.handle',
		minValue: day_range_min,
		maxValue: day_range_max,
		slide: function(e, ui) {
			update_date_range(ui.values[0], ui.values[1]);
		},
		change: function(e, ui) {
			//deslect any jump points
			$(jump_points_loc+' input').removeAttr('checked');
			
			//update events
			var left = new Date();	left.addDays(ui.values[0]);
			var right = new Date();	right.addDays(ui.values[1]);
			update_events(left, right);
		}
	});//#MainSlider.slider
	
	update_slider(default_left_date, default_right_date);
	update_events(default_left_date, default_right_date);
	
	/* Sets up the date pickers */
	$('#DateRange :text.date').datepicker({
		dateFormat: 'M dd, yy',
		minDate: day_range_min,
		maxDate: day_range_max,
		onSelect: function(date) {
			var selected = Date.fromString(date);
			ldate = date_from_field(left_date_loc);
			ldate.zeroTime();
			rdate = date_from_field(right_date_loc);
			rdate.zeroTime();
			//fix the dates if they overlap
			if (selected.getTime() == ldate.getTime() && ldate.getTime() > min_date.getTime() && ldate.getTime() >= rdate.getTime())
				ldate.setTime(rdate.getTime() - 3*day);
			else if (selected.getTime() == rdate.getTime() && rdate.getTime() < max_date.getTime() && rdate.getTime() <= ldate.getTime())
				rdate.setTime(ldate.getTime() + 3*day);
			update_slider(ldate, rdate);
			update_date_range(days_between(min_date, ldate), days_between(min_date, rdate));
			update_events(ldate, rdate);
		}
	});
	
	/* Jump Points */
	$('#fThisWeek').click(function(){
		var right = new Date; right.addDays(7);
		update_all(today, right);
	});
	$('#fNextTwoWeeks').click(function(){
		var right = new Date; right.addDays(14);
		update_all(today, right);
	});
	$('#fThisMonth').click(function(){
		var right = new Date; right.addDays(30);
		update_all(today, right);
	});
	
	//when ministries are checked
	$(ministries_loc+' input').click(function(){ //#submit input
		update_events(date_from_field(left_date_loc), date_from_field(right_date_loc));
	});

});//document.ready