

/* **************************************
 *  SEARCH INGREDIENT SUGGESTION
 ****************************************/
// Search Suggestion Global Variable
var searchSuggestion_keyHandled = false;
var userEnteredSearchValue = false;
var searchSuggestion_timeout;


// HELPER FUNCTIONS

function hideSearchSuggest() {
	setTimeout(function() { 
		$('#searchForm #suggest').css('display', 'none'); 
	}, 150);
}

// END HELPER FUNCTIONS

/**
 * Handle the various mouse events that can occur in the 
 * Search Ingredient Suggestion division.
 */
function bindSearchSuggestionMouseHandler() {
	$("#searchForm #suggest p").live('mouseenter',function(event) {
		$(this).addClass('highlight');
		return false;
	});
	
	$("#searchForm #suggest p").live('mouseleave',function(event) {
		$(this).removeClass('highlight');
		return false;
	});
	
	$("#searchForm #suggest p").live('click',function(event) {
		var val = $("#searchForm .input").attr('value');
		var ingredients = val.split(',');
		
		ingredients[ingredients.length-1] = $(this).html();
		var result = '';

		var i=0;	
		for(i = 0; i < ingredients.length; i++) {
				result += ingredients[i].trim()+", ";
		}
		
		hideSearchSuggest();
		$("#searchForm .input:first").attr('value', result);
		$("#searchForm .input:first").focus();
		return false;
	});
}

/**
 * Bind a function to handle a key event in the recipe ingredient search form.
 */
function bindSearchSuggestionKeyHandler() {
	$("#searchForm .input").live('keydown',function(event) {
		if($("#searchForm .title").attr('checked') == true) {
			return;
		}
		
		searchSuggestion_keyHandled = true;
		if(event.keyCode == "13") { // enter
			if($("#searchForm #suggest .highlight").exists() == false || $("#searchForm #suggest").css('display') == 'none') {
				hideSearchSuggest();
				searchSuggestion_keyHandled = false;
				return;
			}
			event.preventDefault();
			$("#searchForm #suggest .highlight").click();
			return false;
		}
		else if(event.keyCode == "27") { // esc
			hideSearchSuggest();
			return false;
		}
		else if(event.keyCode == "40") { // down
			if($("#searchForm #suggest .highlight").exists() == false) {
				$("#searchForm #suggest p:first").addClass('highlight');
			}
			else {
				$("#searchForm #suggest .highlight").next("p:first").addClass('highlight');
				$("#searchForm #suggest .highlight:first").removeClass('highlight');
			}
			return false;
		}
		else if(event.keyCode == "38") { // up
			if($("#searchForm #suggest .highlight").exists() == false) {
				$("#searchForm #suggest p:last").addClass('highlight');
			}
			else {
				$("#searchForm #suggest .highlight").prev("p:first").addClass('highlight');
				$("#searchForm #suggest .highlight:last").removeClass('highlight');
			}
			return false;
		}
		else {
			searchSuggestion_keyHandled = false;
		}
	});
}

/**
 * Bind the keyup event on the search input field to a handler function that produces
 * the ingredient suggestions. 
 */
function bindSearchSuggestionGenerator() {
	$("#searchForm .input").live('keyup',function(e) {
		if($("#searchForm .title").attr('checked') == true) {
			return;
		}
		
		if(searchSuggestion_keyHandled == true) {
			return;
		}
		
		var input = $("#searchForm .q").attr('value');
		
		if(input == '') {
			hideSearchSuggest();
			return false;
		}
		
		var position = $("#searchForm .q").offset();
		var height = $("#searchForm .q").outerHeight();
		
		var parentPosition = $("#searchForm").offset();
		
		var left = position.left - parentPosition.left;
		var top = position.top - parentPosition.top +height;
		
		$("#searchForm #suggest").css('display', 'block');
		$("#searchForm #suggest").css('top', top+'px');
		$("#searchForm #suggest").css('left', left+'px');
		$("#searchForm #suggest").html('Loading suggestions...');
		
		clearTimeout(searchSuggestion_timeout);
		searchSuggestion_timeout = setTimeout(function() {
			$.ajax({
				   type: "POST",
				   url: "/searches/suggest/"+input,
				   data: input,
				   success: function(data){
						if(data.trim() == 'none') {
							hideSearchSuggest();
						}
						else {
							$("#searchForm #suggest").html(data);
						}
				   }
				});
		}, 500);
		return false;
	});
}

/**	
 * Function to bind handlers to events that should cause the Search Ingredient
 * Suggestions division to hide itself.
 */
function bindSearchSuggestionHiding() {
	$("#searchForm .input").blur(function() {
		hideSearchSuggest(); 
		return false;
	});
}

$(document).ready(function(e) {
	
	$("#SearchTitle").focus(function(event){
		if($("#SearchTitle").val() == 'Example: vegetable pasta with white sauce'){
			$(this).css('color', 'black');
			$(this).attr('value', '');
		}
		else if($(this).css('color') == 'rgb(102, 102, 102)') {
			$(this).css('color', 'black');
		}
	});
	
	$("#SearchTitle").blur(function(event) {
		if($(this).val().trim() == '') {
			$(this).css('color', 'grey');
			$(this).attr('value', 'Example: vegetable pasta with white sauce');
		}
	});
	
	$("#SearchIngredients").focus(function(event){
		if($("#SearchIngredients").val() == 'Example: spinach, paprika, butter, -chicken, -beef'){
			$(this).css('color', 'black');
			$(this).attr('value', '');
		}
		else if($(this).css('color') == 'rgb(102, 102, 102)') {
			$(this).css('color', 'black');
		}
	});
	
	$("#SearchIngredients").blur(function(event) {
		if($(this).val().trim() == '') {
			$(this).css('color', 'grey');
			$(this).attr('value', 'Example: spinach, paprika, butter, -chicken, -beef');
		}
	});
	
	$("#SearchTags").focus(function(event){
		if($("#SearchTags").val() == 'Example: -gluten, -dairy, italian-american, vegetarian'){
			$(this).css('color', 'black');
			$(this).attr('value', '');
		}
		else if($(this).css('color') == 'rgb(102, 102, 102)') {
			$(this).css('color', 'black');
		}
	});
	
	$("#SearchTags").blur(function(event) {
		if($(this).val().trim() == '') {
			$(this).css('color', 'grey');
			$(this).attr('value', 'Example: -gluten, -dairy, italian-american, vegetarian');
		}
	});
	
	$("#searchForm .ingredient").focus(function(event) {
		hideSearchSuggest();
	});
	

	// Bind functions for the various search suggestions.
	bindSearchSuggestionGenerator();
	bindSearchSuggestionKeyHandler();
	bindSearchSuggestionHiding();
	bindSearchSuggestionMouseHandler();
	
	
});


