
var ALL_RESOURCES = "all resources";
var QUICK_LAUNCH_LABEL= "QL #";

var listUrl;
var resultsAllUrl;
var autoCompleteUrl;

var displayAutoComplete = true;
var cancelAutoComplete = false;
var selectedAutoComplete = false;



function initSearch(contextRoot)
{
	listUrl = CONTEXT_ROOT + "/home/results/list.jsf";
	resultsAllUrl = CONTEXT_ROOT + "/home/results/fullList.jsf"
	autoCompleteUrl = CONTEXT_ROOT + "/AutoComplete";
	initQuickLaunch();
	initAutoComplete();
}

function resetSearch()
{
	$("input#search-string").val(ALL_RESOURCES);
	$("input#search-qlfield").val(QUICK_LAUNCH_LABEL);
	$("div#search-scope").html("all categories");
	$("div#search-scope,input#search-string,input#search-qlfield").css({'color': '#686868'});
	$("input#search-subject").val("");
	$("input#search-category").val("");
}


function initQuickLaunch()
{
	var quickLaunchInput = $("input#search-qlfield");
	
	if(quickLaunchInput.val().length > 0)
	{
		quickLaunchInput.focus();
	}
	else
	{
		quickLaunchInput.val(QUICK_LAUNCH_LABEL);
	} 
	
	//Using focus (rather than focusin) since IE was having issues selecting the text on focus
	quickLaunchInput.focus( function(eventObject) 
    {
		quickLaunchInput.css({'color': '#000000'});
    	if(quickLaunchInput.val() == QUICK_LAUNCH_LABEL)
    	{
    		quickLaunchInput.val('');
    		quickLaunchInput.click();
    	}
    	quickLaunchInput.select();
	});
	
	
	quickLaunchInput.focusout(function() 
    {
		quickLaunchInput.css({'color': '#000000'});
		if(quickLaunchInput.val() == '')
    	{
    		quickLaunchInput.val(QUICK_LAUNCH_LABEL);
    		quickLaunchInput.css({'color': '#686868'});
    	}
    	quickLaunchInput.css({'background-color': 'white'});
	});
	quickLaunchInput.keypress(function(event) { if (event.keyCode == 13) openResourceByID(CONTEXT_ROOT + '/Launch', 'id', 'search-qlfield');})
}


function initAutoComplete()
{   
    var inputSearchString = $("input#search-string");
    
	if(inputSearchString.val().length > 0)
	{
		inputSearchString.focus();
		//inputSearchString.css({'background-color': '#f8f2c5'});
	}
	else
	{
		inputSearchString.val(ALL_RESOURCES);
	} 
	
	inputSearchString.keypress(function(event) {
		 if (event.keyCode == '13') 
		 {	
		    cancelAutoComplete = true;
		    inputSearchString.autocomplete("close");
		    doSearchSubmit();	
		    inputSearchString.focus();	    
   		 }
   		 else
   		 {
   		 	cancelAutoComplete = false;
   		 }
	});
	
	// --- Using focus (rather than focusin) since IE was having issues selecting the text on focus ----
	inputSearchString.focus(function() 
    {
    	//inputSearchString.css({'background-color': '#f8f2c5'});
		inputSearchString.css({'color': '#000000'});
    	if(inputSearchString.val() == ALL_RESOURCES)
    	{
    		inputSearchString.val('');
    	}
    	
    	inputSearchString.select();
	});
	
	
	inputSearchString.focusout(function() 
    {
		inputSearchString.css({'color': '#000000'});
		if(inputSearchString.val() == '')
    	{
			inputSearchString.val(ALL_RESOURCES);
    		inputSearchString.css({'color': '#686868'});
    	}
    	inputSearchString.css({'background-color': 'white'});
	});
	
	var cache = {};
	var cacheSize = 0;
	
	// ----- THIS IS A TRICK TO GET THE CURSOR AT THE END OF THE ENTRY ----- //
	inputSearchString.attr('value',inputSearchString.attr('value'));
	
	inputSearchString.autocomplete(
	{
		minLength: 2,
		search: function(event, ui) {
			if(cancelAutoComplete)
			{
				cancelAutoComplete = false;
				return false; 
			}
		},
		source: function(request, response) 
		{	
			request.subject = $("input#search-subject").val();
			request.category = $("input#search-category").val();
			request.type="keyword";
			
			if(cacheSize > 1000)
			{
				cache = {};
				cacheSize = 0;
			}
			
			var cacheKey = request.subject == '' ? request.term : request.subject + request.category + request.term;
			if ( cacheKey in cache )
			{
				response( cache[ cacheKey ] );
				return;
			}
									
			$.ajax({
				url: autoCompleteUrl,
				dataType: "json",
				data: request,
				success: function( data ) {
					cache[ cacheKey ] = data;
					cacheSize += data.length;
					response( data );
				}
			});
		},
		focus: function(event, ui) 
		{
			addQuotes($(this), ui.item.value);
		},
		select: function(event, ui) 
		{	
			selectedAutoComplete = true;
			addQuotes($(this), ui.item.value);
			doSearchSubmit();
			$(this).focus();
		},
		close: function(event, ui)
		{
			if(selectedAutoComplete) addQuotes($(this), $(this).val());
			selectedAutoComplete = false;
		}			            				         				           
	});// END AUTO COMPLETE
} //END INIT_AUTOCOMPLETE


function addQuotes(target, src) { target.val(src.split(" ").length > 1 ? "\"" + src + "\"" : src); }


function doSearchSubmit()
{  
	if(($("input#search-subject").val() == '0' || $("input#search-subject").val() == '') && ($("input#search-string").val() == ALL_RESOURCES || $("input#search-string").val() == ''))
	{
		loadLink('allresources');
	}
	else
	{
		validateSearchInput();
		var params = {"searchString" : escape($("input#search-string").val()), "searchSubject" : escape($("input#search-subject").val()), "searchCategory" : escape($("input#search-category").val())};		
		loadLink("search", {"params" : params});
	}
	
	$("input#search-string").focus();
}

		
function validateSearchInput()
{
	var inputSearchSubject = $("input#search-subject");
	var inputSearchString = $("input#search-string");
	if(inputSearchSubject.val() == '')
	{
		inputSearchSubject.val('0');
	}
	
	if(inputSearchString.val() == ALL_RESOURCES)
	{
		inputSearchString.val('');	
	}
}

function toggleMenu()
{
	var position = $('#search').offset();	
	$('#search-menu').css("left", position.left + 13);
	if($('#search-menu').css("height") == '0px') openSearchMenu();
	else closeSearchMenu();
}

function openSearchMenu()
{
	$('#search-menu').show(); 
	$("#search-menu").animate({"height": "393px"}, 200);
	$(document).bind('keyup', function(e) {if(e.keyCode == 27) toggleMenu();});
	$(document).bind('click', function(e) {if(!($(e.target).parents().filter('#search-menu').length || $(e.target).is('#search-menu'))) {toggleMenu();}});
	$("iframe").contents().bind('mousedown', function(e){toggleMenu();});
}

function closeSearchMenu(onCloseFunction)
{
	$("#search-menu").animate({"height": "0px"}, 200, function() {$('#search-menu').hide(); $("iframe").contents().unbind('mousedown'); $(document).unbind('click'); $(document).unbind('keyup'); if(onCloseFunction != null) onCloseFunction();});	
}


function setCategory(subject, category)
{
    var inputSearchSubject = $("input#search-subject");
    var inputSearchCategory = $("input#search-category");
    var inputSearchString = $("input#search-string");
	
	inputSearchSubject.val(subject.id);
	inputSearchCategory.val(category.id);
	
	if(category.name != '')
	{
		$("div#search-scope").html(truncateString(0, 20, category.name, "..."));
		$("div#search-scope").css({'color': '#000000'});
	}
	else if(subject.name != '')
	{
		if(subject.name == "All Categories"){
			$("div#search-scope").html("all categories");
			$("div#search-scope").css({'color': '#686868'});
		}
		else{
			$("div#search-scope").html(truncateString(0, 22, subject.name, "..."));
			$("div#search-scope").css({'color': '#000000'});
		}
	}
	
	if(inputSearchString.val() == ALL_RESOURCES)
	{
		inputSearchString.val('');	
	}
	
	closeSearchMenu(doSearchSubmit);
}


function setSearchFields(term, subject, category, scope, isSearch)
{
	if(subject == 0) scope = scope.toLowerCase();
	if(term == '' && !isSearch) term = ALL_RESOURCES;
	if($("input#search-string").val() != term) $("input#search-string").val(term);
	if($("div#search-scope").html() != truncateString(0, 20, scope, "...")) $("div#search-scope").html(truncateString(0, 20, scope, "..."));
	if($("input#search-subject").val() != subject) $("input#search-subject").val(subject);
	if($("input#search-category").val() != category) $("input#search-category").val(category);
	if(isSearch) $("input#search-string").focus();
}


function truncateString(start, stop, theString, postFix)
{
	if( theString.length > (stop - start) ){return theString.substring(start, stop) + postFix;}
	return theString;
}

