var scrollbar;
var pastEvents = 0;
var totalEvents = 0;
var requestType = null;

var concertTypes = "";
var curricula = "";
var progamTypes = "";
var grades = "";
var isPreConcertTalksOnly = false;

var tmpInput = null;

var homePageImagesContent = null;
var currentHomeImageIndex = 0;

// Preload home page images
jQuery(".header-home-right-img").each
(
	function()
	{
		jQuery('<img/>')[0].src = this;
	}
);

jQuery(function() {
	//scrollpane parts
	
	jQuery("#calendar").DatePicker
	({
		flat: true,
		date: currentDate,
		current: currentDate,
		calendars: 1,
		starts: 7,
		locale: {
			days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
			daysShort: ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"],
			daysMin: ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"],
			months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
			monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
			weekMin: 'wk'
		},
		onRender: onCalendarDateRendered
	});
	
	// Check for spivey suggests and populate
	if(jQuery("#spivey-suggests").length > 0)
	{
		renderSpiveySuggests();
	}
	
	// Check for event scroll and populate
	if(jQuery("#event-display-container").length > 0)
	{	
		var filters = "";
		if(jQuery("#event-display-container").hasClass("pre-concert-talks"))
		{
			requestType = "concerts";
			filters = "pre-concert-talks-only";
			isPreConcertTalksOnly = true;
		}
		else if(jQuery("#event-display-container").hasClass("concerts"))
		{
			requestType = "concerts";
			filters = "date,concert-type";
		}
		else if(jQuery("#event-display-container").hasClass("educational-programs"))
		{
			if(jQuery("#event-display-container").hasClass("young-peoples-concerts"))
			{
				requestType = "young-peoples-concerts";
				filters = "date,grades,program-type,curricula";
			}
			else if(jQuery("#event-display-container").hasClass("student-workshops"))
			{
				requestType = "student-workshops";
				filters = "date";
			}
			else if(jQuery("#event-display-container").hasClass("master-classes"))
			{
				requestType = "master-classes";
				filters = "date";
			}
			else if(jQuery("#event-display-container").hasClass("professional-development-for-teachers"))
			{
				requestType = "professional-development-for-teachers";
				filters = "date";
			}
		}
		
		if(requestType != null)
		{
			if(!isHomePage && filters != "")
			{
				renderFilters(filters.split(","));
				getFilterValues();
			}
			onFilterChanged();
		}
		
	}
	
	if(jQuery("#event-height-placeholder").length > 0)
	{
		jQuery("#event-height-placeholder").css("height", (jQuery("#event-details").height() + 270) + "px");
	}
	
	jQuery("#calendar-listing-container").bind
	(
		"mouseenter",
		function()
		{
			clearTimeout(runTimeout);
		}
	);
	jQuery("#calendar-listing-container").bind
	(
		"mouseleave",
		function()
		{
			runTimeout = setTimeout
			(
				function()
				{
					jQuery("#calendar-listing-container").fadeOut(100);
				},
				1000
			);
		}
	);
	/*jQuery("#calendar-container").bind
	(
		"mouseleave",
		function()
		{
			runTimeout = setTimeout
			(
				function()
				{
					jQuery("#calendar-listing-container").fadeOut(100);
				},
				1000
			);
		}
	);*/
	

	if(jQuery(".header-home-right-img").length > 0)
	{
		currentHomeImageIndex = 0;
		startHomeImageAnimation();
	}
		
	
});

var animateId = -1;
function startHomeImageAnimation()
{
	setTimeout(
		function()
		{
			jQuery("#home-image-0").fadeIn(4000);
		},
		500
	);
	animateId = setInterval(goHomeImageAnimate, 8000);
}

function goHomeImageAnimate()
{
	var currentAnchor = jQuery("#home-image-" + currentHomeImageIndex);
	currentHomeImageIndex++;
	if(currentHomeImageIndex >= jQuery(".header-home-right-img").length) currentHomeImageIndex = 0;
	var anchor = jQuery("#home-image-" + currentHomeImageIndex);		
	jQuery("#header-home-right-img-container").append(anchor);
	jQuery(currentAnchor).fadeOut(4000);
	jQuery(anchor).fadeIn(4000);
	jQuery("#header-image-map-area").attr("href", jQuery(anchor).attr("href"));
	jQuery("#header-image-map-area").attr("title", jQuery(anchor).attr("title"));
	
}

function viewCalendar(type, link)
{
	clearTimeout(runTimeout);
	jQuery("#calendar-listing-container").fadeOut(100);
	jQuery(".calendar-links a").removeClass("active");
	jQuery(link).addClass("active");
	onCalendarDatesRendered();
}

var runTimeout = -1;
var calendarYear = null;
var calendarMonth = null;
var startedRendering = false;
function onCalendarDateRendered(date)
{
	clearTimeout(runTimeout);
	
	if(startedRendering == false)
	{
		if(date.getDate() != 1) return {};
		calendarYear = date.getFullYear();
		calendarMonth = date.getMonth() + 1;
		startedRendering = true;
	}
	
	runTimeout = setTimeout
	(
		onCalendarDatesRendered,
		400
	);
	return {};
}

function onCalendarDatesRendered()
{

	clearTimeout(runTimeout);
	var type = jQuery(".calendar-links .active").attr("id").replace("-calendar-link", "");
	populateCalendar(type, calendarYear, calendarMonth);

	startedRendering = false;
}

var viewingCalendarDayListing = false;
function populateCalendar(eventsType, year, month)
{
	var contentArray = null;
	jQuery.get
	(
		"/?render=calendar-content&type=" + eventsType + "&getYear=" + year + "&getMonth=" + month,
		function(data)
		{
			var calendarDateEvents = jQuery(".calendar-date-events", data);
			contentArray = new Array(calendarDateEvents.length + 1);
			jQuery(calendarDateEvents).each
			(
				function()
				{
					var id = jQuery(this).attr("id").replace("day-", "");
					var dateSplit = id.split("-");
					var day = dateSplit[2] - 0;
					contentArray[day] = this;
				}
			);
			
			jQuery(".datepickerDays a").unbind("mouseenter");
			jQuery(".datepickerDays a").unbind("mouseleave");
			jQuery(".datepickerDays a").removeClass("info-available");
			
			jQuery(".datepickerDays td").each
			(
				function()
				{
					if(!jQuery(this).hasClass("datepickerNotInMonth"))
					{
						var anchor = jQuery("a", this);
						var text = jQuery("span", anchor).text();
						var dayData = contentArray[text - 0];
						if(dayData != undefined && dayData != null)
						{
							jQuery(anchor).addClass("info-available");
							jQuery(anchor).bind
							(
								"mouseenter",
								function(e)
								{
									clearTimeout(runTimeout);
									jQuery("#calendar-listing-container").html(dayData);
									jQuery("#calendar-listing-container").css("left", anchor.offset().left + 24 + "px");
									jQuery("#calendar-listing-container").css("top", anchor.offset().top + "px");
									jQuery("#calendar-listing-container").fadeIn(100);
								}
							);
							jQuery(anchor).bind
							(
								"mouseleave",
								function()
								{
									runTimeout = setTimeout
									(
										function()
										{
											jQuery("#calendar-listing-container").fadeOut(100);
										},
										1000
									);
								}
							);
						}
					}
				}
			);
		}
	);
	
}

function getFilterValues()
{
	if(jQuery("#concert-type").length > 0)
	{
		jQuery.get
		(
			"/?render=filter-values&type=concert-type",
			function(data)
			{
				renderFilterDropdown
				(
					"concert-type-values",
					jQuery("#concert-type"),
					data
				);
			}
		);
	}
	
	if(jQuery("#program-type").length > 0)
	{
		jQuery.get
		(
			"/?render=filter-values&type=program-type",
			function(data)
			{
				renderFilterDropdown
				(
					"program-type-values",
					jQuery("#program-type"),
					data
				);
			}
		);
	}	
	
	if(jQuery("#grades").length > 0)
	{
		jQuery.get
		(
			"/?render=filter-values&type=grades",
			function(data)
			{
				renderFilterDropdown
				(
					"grades-values",
					jQuery("#grades"),
					data
				);
			}
		);
	}
	
	if(jQuery("#curricula").length > 0)
	{
		jQuery.get
		(
			"/?render=filter-values&type=curricula",
			function(data)
			{
				renderFilterDropdown
				(
					"curricula-values",
					jQuery("#curricula"),
					data
				);
			}
		);
	}
}

function renderFilterDropdown(id, input, htmlInsert)
{	
	var left = input.offset().left - 1;
	var top = input.offset().top + input.outerHeight();
	
	var html = '<div id="' + id + '" class="filter-select ui-widget ui-helper-clearfix ui-widget-content ui-corner-all" style="top:' + top + 'px;left:' + left + 'px;">';
	html += htmlInsert;
	html += '</div>';
	jQuery("body").append(html);
	
	jQuery(".filter-selection").hover
	(
		function()
		{
			jQuery(this).addClass("ui-state-hover");
		},
		function()
		{
			jQuery(this).removeClass("ui-state-hover");
		}
	);
	
	jQuery(".filter-selection").bind("click", onFilterValueClicked);
}

function toUpper(string)
{
	return string.toUpperCase();
}

function onFilterValueClicked()
{
	var classes = jQuery(this).attr("class");
	var inputId = classes.replace("filter-selection", "").replace("ui-corner-all", "").replace("ui-state-hover", "").replace(/ /g, "").toLowerCase();
	
	jQuery("#" + inputId).val(jQuery(this).html().replace(/&amp;/g, '&'));
	jQuery("li", jQuery("#" + inputId + "-list")).removeClass("ui-state-active");
	jQuery(this).addClass("ui-state-active");
	onFilterChanged();
}

var currentScrollQuery = "";
var firstRun = true;
function renderFilters(filters)
{
	var html = '<div class="event-filters">';
	var rememberedSearch = false;
	//html += '<div id="refined-search-text">REFINED SEARCH:</div>';
	
	if(filters.length == 1 && filters[0] == "pre-concert-talks-only")
	{
		html += '<h4>Our next pre-concert talks</h4>';
		html += '</div>';
		jQuery("#event-display-container").prepend(html);
		return;
	}
	
	for(var i = 0; i < filters.length; i++)
	{
		html += '<div class="filter">';
		html += '<input id="' + filters[i] + '" readonly="readonly" class="filter-field ' + filters[i] + '" value="' + toUpper(filters[i]).replace("-", " ") + '" />';
		html += '<img id="clear-' + filters[i] + '" alt="X" class="filter-clear-icon" src="/wp-content/themes/spivey/images/close-icon-disabled.png" />';
		html += '</div>';
	}
	html += '<a id="clear-all-filters" href="javascript:clearAllFilters();">Show all</a>';
	html += '</div>';
	jQuery("#event-display-container").prepend(html);
	
	jQuery(".filter-field").each
	(
		function()
		{
			jQuery(this).focus
			(
				function()
				{
					if(jQuery(this).val() == toUpper(jQuery(this).attr('id')).replace("-", " "))
					{
						jQuery(this).val("");
					}
				}
			);
			jQuery(this).blur
			(
				function()
				{
					tmpInput = this;
					setTimeout
					(
						function()
						{
							if(jQuery(tmpInput).val().replace(/ /g, "") == "")
							{
								jQuery(tmpInput).val(toUpper(jQuery(tmpInput).attr('id')).replace("-", " "));
							}
						},
						100
					);
				}
			);
			
			// do filter type specifics
			if(jQuery(this).hasClass("date"))
			{
				jQuery(this).daterangepicker
				({
					closeOnSelect: true,
					onClose: onFilterChanged
				});
				jQuery(this).bind("focus", listenForDateFilterFocus);
			}
			
			if(!jQuery(this).hasClass("date"))
			{
				// add event for hiding and showing the dropdown
				jQuery(this).bind("focus", onFilterInputFocus);
				jQuery(this).bind("blur", onFilterInputBlur);
			}
			
			var rememberedSearchValue = jQuery.cookie(jQuery(this).attr('id') + '-search-value');
			if(rememberedSearchValue != null)
			{
				jQuery(this).val(rememberedSearchValue);
				rememberedSearch = true;
			}
			
		}
	);
	
}

function onFilterInputFocus()
{
	if(jQuery(".ui-daterangepicker").css("display") != "none")
	{
		jQuery(".ui-daterangepicker").fadeOut(300);
	}
	jQuery("#" + jQuery(this).attr("id") + "-values").fadeIn(300);
}

function onFilterInputBlur()
{
	jQuery("#" + jQuery(this).attr("id") + "-values").fadeOut(300);
}

function listenForDateFilterFocus()
{
	setTimeout
	(
		function()
		{
			if(jQuery(".ui-daterangepicker").css("display") == "none")
			{
				jQuery(".ui-daterangepicker").fadeIn(300);
			}
		},
		400
	);
}

function onFilterChanged()
{
	var newScrollQuery = "";
	jQuery(".filter-field").each
	(
		function()
		{
			if(jQuery(this).val() != toUpper(jQuery(this).attr("id")).replace("-", " ") && jQuery(this).val().replace(/ /g, "") != "")
			{
				// this means there's a value to search on
				var closeIcon = jQuery(this).next();
				jQuery(closeIcon).attr('src', '/wp-content/themes/spivey/images/close-icon.png');
				jQuery(closeIcon).addClass('active');
				jQuery(closeIcon).attr('title', 'Click to clear this filter');
				jQuery(closeIcon).click(clearFilter);
				var id = jQuery(this).attr("id");
				var paramName = id;
				if(id.indexOf("-type") >= 0)
				{
					paramName = "category";
				}
				if(newScrollQuery != "")
				{
					newScrollQuery += "&";
				}
				newScrollQuery += paramName + "=" + jQuery(this).val().replace(/&/g, '%26');
				jQuery.cookie(id + '-search-value', jQuery(this).val().replace(/&/g, '&amp;'));
				jQuery(this).parent().addClass("active");
			}
			else
			{
				var closeIcon = jQuery(this).next();
				jQuery(closeIcon).attr('src', '/wp-content/themes/spivey/images/close-icon-disabled.png');
				jQuery(closeIcon).removeClass('active');
				jQuery(closeIcon).removeAttr('title');
				jQuery(closeIcon).unbind('click', clearFilter);
				jQuery(this).parent().removeClass("active");
			}
			
		}
	);

	if(currentScrollQuery != newScrollQuery || firstRun == true)
	{
		updateEventList(requestType, newScrollQuery);
		currentScrollQuery = newScrollQuery;
		firstRun = false;
	}
}

function clearFilter()
{
	var id = jQuery(this).attr('id').replace('clear-', '');
	jQuery("#" + id).val(toUpper(id).replace("-", " "));
	jQuery("#" + id + "-list li").removeClass("ui-state-active");
	jQuery.cookie(id + "-search-value", null);
	jQuery(this).parent().removeClass("active");
	onFilterChanged();
}

function clearAllFilters()
{
	jQuery(".filter-field").each
	(
		function()
		{
			jQuery(this).val(toUpper(jQuery(this).attr("id")).replace("-", " "));
			jQuery("#" + jQuery(this).attr("id") + "-list li").removeClass("ui-state-active");
			jQuery.cookie(jQuery(this).attr("id") + "-search-value", null);
			jQuery(this).parent().removeClass("active");
		}
	);
	onFilterChanged();
}

function updateEventList(type, additionalParams)
{
	jQuery("#event-scroll").html('<div id="loading" title="Loading Events..."></div>');
	if(additionalParams != "") additionalParams = "&" + additionalParams;
	if(isSpiveySuggests == true)
	{
		additionalParams += "&suggestedOnly=1";
	}
	if(isPreConcertTalksOnly == true)
	{
		additionalParams += "&preConcertTalksOnly=1";
	}
	jQuery.get
	(
		"/?render=event-scroll&type=" + type + additionalParams,
		initializeScroller
	);
}

function initializeScroller(data)
{
	jQuery("#event-scroll").html(data);
	
	var scrollPane = jQuery('.event-scroll-pane');
	var scrollContent = jQuery('.event-scroll-content');
	
	if(scrollContent.width() - scrollPane.width() < 10)
	{
		scrollPane.css("overflow-x", "hidden");
	}
	
	if(scrollPane.length > 0 && scrollContent.width() > scrollPane.width() + 10)
	{
		//build slider
		scrollbar = jQuery(".scroll-bar").slider({
			slide:function(e, ui){
				if( scrollContent.width() > scrollPane.width() ){ scrollContent.css('margin-left', Math.round( ui.value / 100 * ( scrollPane.width() - scrollContent.width() )) + 'px'); }
				else { scrollContent.css('margin-left', 0); }
			}
		});
		
		//append icon to handle
		var handleHelper = scrollbar.find('.ui-slider-handle')
		.mousedown(function(){
			scrollbar.width( handleHelper.width() );
		})
		.mouseup(function(){
			scrollbar.width( '100%' );
		})
		.wrap('<div class="ui-handle-helper-parent"></div>').parent();
		
		//change overflow to hidden now that slider handles the scrolling
		scrollPane.css('overflow','hidden');
		
		//size scrollbar and handle proportionally to scroll distance
		function sizeScrollbar(){
			var remainder = scrollContent.width() - scrollPane.width();
			var proportion = remainder / scrollContent.width();
			var handleSize = scrollPane.width() - (proportion * scrollPane.width());
			scrollbar.find('.ui-slider-handle').css({
				width: handleSize,
				'margin-left': -handleSize/2
			});
			handleHelper.width('').width( scrollbar.width() - handleSize);
			
			var totalEvents = jQuery(".event-scroll-item").length;
			var pastEvents = jQuery(".past").length;
			var numEventsOffset = pastEvents;
			if((totalEvents - pastEvents) < 4)
			{
				// that means we'll want to display some of the past events
				numEventsOffset = pastEvents - (pastEvents - (totalEvents - pastEvents));
			}
			var pastEventOffset = 176 * numEventsOffset;
			
			scrollContent.css("margin-left", "-" + pastEventOffset + "px");
			resetValue();
		}
		
		//reset slider value based on scroll content position
		function resetValue(){
			var remainder = scrollPane.width() - scrollContent.width();
			var leftVal = scrollContent.css('margin-left') == 'auto' ? 0 : parseInt(scrollContent.css('margin-left'));
			var percentage = Math.round(leftVal / remainder * 100);
			scrollbar.slider("value", percentage);
		}
		//if the slider is 100% and window gets larger, reveal content
		function reflowContent(){
				var showing = scrollContent.width() + parseInt( scrollContent.css('margin-left') );
				var gap = scrollPane.width() - showing;
				if(gap > 0){
					scrollContent.css('margin-left', parseInt( scrollContent.css('margin-left') ) + gap);
				}
		}
		
		//change handle position on window resize
		jQuery(window)
		.resize(function(){
				resetValue();
				sizeScrollbar();
				reflowContent();
		});
		//init scrollbar size
		setTimeout(sizeScrollbar,10);//safari wants a timeout
		
	}
	
	setTimeout(sizeScrollItemHeight, 500);
	//sizeScrollItemHeight();
	
	// Place images in ui-slider-handle
	if(jQuery(".ui-slider-handle").length > 0)
	{
		jQuery(".ui-slider-handle").append('<img class="left-arrow" src="/wp-content/themes/spivey/images/left-arrow.png" />');
		jQuery(".ui-slider-handle").append('<img class="right-arrow" src="/wp-content/themes/spivey/images/right-arrow.png" />');
	}
	
}

function sizeScrollItemHeight()
{
	var maxHeight = 0;
	jQuery(".event-scroll-item").each
	(
		function()
		{
			if(jQuery(this).height() > maxHeight)
			{
				maxHeight = jQuery(this).height();
			}
		}
	);
	if(maxHeight < 217) maxHeight = 217;
	jQuery(".event-scroll-item").height(maxHeight);
	jQuery("#event-scroll").height(maxHeight);
}

var isSpiveySuggests = false;
function renderSpiveySuggests()
{
	var html = '<div class="event-filters">';
	html += '<h4>Spivey Hall Forth Coming Performances</h4>';
	html += '</div>';
	
	if(jQuery("#spivey-suggests").hasClass("educational-programs"))
	{
		requestType = "educational-programs";
	}
	else
	{
		requestType = "concerts";
	}
	html += '<div id="event-scroll" class="' + requestType + '"></div>';
	jQuery("#spivey-suggests").html(html);
	
	isSpiveySuggests = true;
	onFilterChanged();
}

function validateContactForm()
{
	$errors = "";
	
	if(jQuery.trim(jQuery("#first-name").val()) == "")
	{
		$errors += "First Name\n";
	}
	if(jQuery.trim(jQuery("#last-name").val()) == "")
	{
		$errors += "Last Name\n";
	}
	if(jQuery.trim(jQuery("#email").val()) == "")
	{
		$errors += "Email Address\n";
	}
	
	if($errors != "")
	{
		alert("Please enter the following required fields:\n\n" + $errors);
		return false;
	}
	return true;
	
}
