jQuery(document).ready(function($) {

	// Bindings for search form
	$(".searchForm").ajaxForm({
		dataType: 'html',
		url: "/scripts/search/search-results.php",
		beforeSubmit: kSearch_Validate,
		success: kSearch_DisplayResults
	});


	// Set (and clear) the default text in the top nav search box
	var $searchInput = $("#topNavDiv .searchForm input.searchInput");
	var defaultSearchValue = 'artists, places, or music';
	if ($searchInput.val() == '') {
		$searchInput.val(defaultSearchValue);
	}
	$searchInput.click(function() {
		if ($(this).val() == defaultSearchValue) {
			// only blank out search box if it's the default text
			// otherwise it's a custom search and we don't want to disrupt
			$(this).val("");
		}
	});

}); // end jquery ready()

function kSearch_Validate(arr, $form, options) {
	$(".search-error").hide();
	$(".search-count").hide();
	$("#search-messages").hide();

	$("#contentDiv").tabs("select", "#discover");

	var searchTerms = $.trim( $form.find("input[name=search]").val() );
	if (!searchTerms) {
		kSearch_ShowErrorMessage("Search can't be empty", $form);
		return false;
	}

	kSearch_SpinnerStart();

	return true;
}

function kSearch_ShowErrorMessage(msg, $form) {
	$(".discoverSearch .search-error").text(msg).fadeIn();
}

// wrapper for the functions that display the results
function kSearch_DisplayResults(html, status, xhr, $form) {
	kSearch_SpinnerStop(); // stop spinner regardless of status

	var json = null;
	try {
		json = $.parseJSON(html);
	} catch (err) {
		kSearch_ShowErrorMessage("Search error! :-(", $form);
	}

	if (json != null) {

		if (json.error) {
			var errorMessage = "An error occured!";
			if (json.message) {
				errorMessage = json.message;
			}
			kSearch_ShowErrorMessage(errorMessage, $form);
			kSearch_PopulateResults(json);
		}
		else {
			kSearch_PopulateCategoryFilters(json.categories);
			kSearch_PopulateResults(json);
			kSearch_UpdateResultCount(json, $form);
			kSearch_PopulateMessages(json);
		}
	}
	else {
		kSearch_PopulateResults(null);
	}
}

// categories (on left side)
function kSearch_PopulateCategoryFilters(categories) {
	$("#search-cats").show();
	$("#search-cats ul").empty(); // remove categories from previous search
	$.each(categories, function(index, value) {
		var newElement = $("<li><a href='#' rel='"+value+"'>"+value+"</a></li>");
		$("#search-cats ul").append(newElement);
	});
}

// results!
function kSearch_PopulateResults(json) {
	if (json != null && json.num_results > 0) {

		$("#search-results").html(json.resultsHTML);

		$(".review-tooltip-bands" ).setupReviewTooltips({ reviewType: 'band'   });
		$(".review-tooltip-people").setupReviewTooltips({ reviewType: 'person' });
		$(".review-tooltip-albums").setupReviewTooltips({ reviewType: 'album'  });
		$(".review-tooltip-songs" ).setupReviewTooltips({ reviewType: 'song'  });
	}
	else {
		$("#search-results").html("<p>No results found</p>");
	}
}

// result count
function kSearch_UpdateResultCount(json, $form) {
	var count;
	var resultTxt = "results";
	var timingTxt = "";

	if (json == null || json == "undefined" || typeof(json) == "undefined") {
		count = $("#search-results .result-item:visible").length;
	} else {
		count = json.num_results;

		if (json.total_time>0.0) {
			timingTxt = " (" + json.total_time + " seconds)";
		}
	}
	if (count == 1) { resultTxt = "result"; } // plural vs. singular
	$(".search-count").html(count+" " + resultTxt +" found"+timingTxt).fadeIn();
}

// any messages sent back with results?
function kSearch_PopulateMessages(json) {
	// clear out old messages:
	$("#search-messages").empty();

	// update with new messages
	if (json != null) {
		var messages = json.messages;
		if (messages.length > 0) {
			$.each(messages, function (i, v) {
				$("<li>" + v + "</li>").appendTo($("#search-messages"));
			});
			$("#search-messages").show();
		}
	}
}

// Ajax "loading" message
function kSearch_SpinnerStart() {
	$(".searchForm input[type=submit]").attr('disabled','disabled');
	$("#search-results").html("Loading ...");
}
function kSearch_SpinnerStop() {
	$(".searchForm input[type=submit]").removeAttr('disabled');
}



// search cat hover / click styling
$("#search-cats li a").live("click", function() {
	if ($(this).hasClass("active")) {
		// was active before, removing active status
		$(this).removeClass("active");
	}
	else {
		// activating, make sure nothing is active
		//$("#search-cats .active").removeClass("active"); // strip active from others
		$(this).addClass("active"); // give active to self
	}
	$(this).blur();

	kSearch_FilterResults();
});


//
// Selectively hide/show results based on categories that user selected
//
function kSearch_FilterResults() {
	var activeClasses = $.makeArray($("#search-cats li a.active"));
	activeClasses = $.map(activeClasses, function(el) {
		return 'rtype-'+$(el).attr("rel");
	});

	var toShow = 0;
	var toHide = 1;

	if (activeClasses.length == 0) {
		// user removed filter, so let's show all results. Unhide any hidden results from previous filters
		$("#search-results .result-item:hidden").show();
	}
	else {
		// loop through results
		$("#search-results .result-item").each(function () {

			var found = false;
			for (var i=0; i < activeClasses.length; i++) {
				if ( $(this).hasClass(activeClasses[i]) ) {
					found = true;
					if ( $(this).is(":hidden") ) {
						// Show!
						$(this).show();
						toShow++;
					}
					break;
				}
			}
			if (found==false && $(this).not(":hidden")) {
				// hide
				$(this).hide();
				toHide++;
			}
		});
	}

	kSearch_UpdateResultCount();
}