var previousSearchValue = new Array(); previousSearchValue['unwantedingredient'] = ''; previousSearchValue['ingredient'] = ''; previousSearchValue['category'] = '';
var hintsPresent = new Array(); hintsPresent['unwantedingredient'] = false; hintsPresent['ingredient'] = false; hintsPresent['category'] = false;
var lastHints = new Array(); lastHints['unwantedingredient'] = new Array(); lastHints['ingredient'] = new Array(); lastHints['category'] = new Array();
var shownHints = new Array(); shownHints['unwantedingredient'] = new Array(); shownHints['ingredient'] = new Array(); shownHints['category'] = new Array();
var selectedHint = new Array(); selectedHint['unwantedingredient'] = -1; selectedHint['ingredient'] = -1; selectedHint['category'] = -1;

function getPossibleIngredients(ingredientType, evt)
{
	var keyCode = evt.keyCode;
	if(keyCode == 40 || keyCode == 38 || keyCode == 13)
		return;
	var ingredientNameInputField = document.getElementById(ingredientType+'_name');
	var ingredientHints = document.getElementById(ingredientType+'_hints');

	if(previousSearchValue[ingredientType] != '' && ingredientNameInputField.value.toLowerCase().indexOf(previousSearchValue[ingredientType]) == 0)
	{
		if(hintsPresent[ingredientType] && lastHints[ingredientType].length > 0)
		{
			showIngredientHints(ingredientType);
			return;
		}
		else if(!hintsPresent[ingredientType])
			return;
		//else cont
	}
	previousSearchValue[ingredientType] = ingredientNameInputField.value.toLowerCase();

	if(ingredientNameInputField.value != '')
	{
		ingredientHints.innerHTML = '&nbsp;';
		ingredientHints.className = 'hintloading';
		ingredientHints.style.display = '';
		hintsPresent[ingredientType] = false;
		
		retrieveIngredientsWhereNameStartsWith(ingredientNameInputField.value, languageId, retrieveIngredientsWhereNameStartsWith_Callback, (ingredientType=='unwantedingredient')?-1:1);
	}	
	else
	{
		hintsPresent[ingredientType] = false;
		lastHints[ingredientType] = [];
		ingredientHints.innerHTML = '&nbsp;';
		ingredientHints.className = 'hintloading';
		ingredientHints.style.display = 'none';
	}
}

function retrieveIngredientsWhereNameStartsWith_Callback(foundAnyIngredients, possibleIngredients, ingredientTypeConvertedToNumber)
{	
	var ingredientType = (ingredientTypeConvertedToNumber==-1)?'unwantedingredient':'ingredient';
	var ingredientHints = document.getElementById(ingredientType+'_hints');
	ingredientHints.className = 'hintnotloading';
	if(!foundAnyIngredients)
	{
		lastHints[ingredientType] = [];
		hintsPresent[ingredientType] = false;
		ingredientHints.innerHTML = '<p>Geen ingredi&euml;nten gevonden<\/p>';
	}
	else
	{
		if(typeof(possibleIngredients) == 'number')
		{
			lastHints[ingredientType] = [];
			hintsPresent[ingredientType] = true;
			ingredientHints.innerHTML = '<p>Teveel ingredi&euml;nten gevonden ('+ possibleIngredients +')<\/p>';
		}
		else
		{
			lastHints[ingredientType] = [];
			hintsPresent[ingredientType] = true;
			var len = possibleIngredients.length;
			for(i = 0; i < len; i++)
			{
				var id = possibleIngredients[i].id;
				var name = possibleIngredients[i].shownName+( (possibleIngredients[i].defaultName == possibleIngredients[i].shownName)?'':' ('+possibleIngredients[i].defaultName+')' );
				var shortName = possibleIngredients[i].shownName;
				lastHints[ingredientType][lastHints[ingredientType].length] = new Array(id, name, shortName);
			}
			showIngredientHints(ingredientType);
		}
	}
}

function showIngredientHints(ingredientType)
{
	var ingredientHints = document.getElementById(ingredientType+'_hints');
	ingredientHints.className = 'hintnotloading';
	ingredientHints.style.display = '';
	ingredientHints.innerHTML = '';
	shownHints = [];
	var currentInputFieldValue = document.getElementById(ingredientType+'_name').value.toLowerCase();
	for(i = 0, len = lastHints[ingredientType].length; i < len; i++)
	{
		var focusedIdNameShortName = lastHints[ingredientType][i];
		if(focusedIdNameShortName[2].toLowerCase().indexOf(currentInputFieldValue) >= 0)
			shownHints[shownHints.length] = focusedIdNameShortName;
	}
	if(shownHints.length > 0)
	{
		for(i = 0, len = shownHints.length; i < len; i++)
		{
			var focusedIdValue = shownHints[i];
			var id = focusedIdValue[0];
			var name = focusedIdValue[1];
			ingredientHints.innerHTML += '<p class="hintline" id="hint_'+i+'"><a onclick="setIngredient(\''+ingredientType+'\','+id+',\''+name+'\');">'+name+'<\/a><input type="hidden" id="hint_'+i+'_id" value="'+id+'" /><input type="hidden" id="hint_'+i+'_value" value="'+name+'" /><\/p>';
		}
		if(selectedHint[ingredientType] != -1)
		{
			selectedHint[ingredientType] = Math.min(shownHints.length-1, selectedHint[ingredientType]);
			var currentHintLine = document.getElementById('hint_'+selectedHint[ingredientType]);
			currentHintLine.childNodes[0].className = 'selectedhintline';
		}
	}
	else
	{
		ingredientHints.innerHTML = '<p>Geen ingredi&euml;nten gevonden<\/p>';
	}
}

function setIngredient(ingredientType, ingredientId, ingredientName)
{
	var divIngredients = document.getElementById(ingredientType+'s');
	var ingredientNumber = document.getElementById(ingredientType+'_count').value;
	document.getElementById(ingredientType+'_count').value++;
	
	//if(ingredientId > 5)
	//	document.getElementById(ingredientType+'_add').style.display = 'none';
	
	var ingredientTemplate = document.getElementById(ingredientType+'_template');
	var newIngredient = ingredientTemplate.cloneNode(true);
	newIngredient.setAttribute('id', ingredientType+'_'+ingredientNumber);
	newIngredient.innerHTML = newIngredient.innerHTML.replace(/XXX/g, ingredientNumber);
	divIngredients.appendChild(newIngredient);
	
	var hiddenIngredientIdField = document.getElementById(ingredientType+'_id_'+ingredientNumber);
	hiddenIngredientIdField.value = ingredientId;
	var ingredientNameField = document.getElementById(ingredientType+'_name_'+ingredientNumber);
	ingredientNameField.innerHTML = ingredientName;
	document.getElementById(ingredientType+'_comma_'+ingredientNumber).style.display = 'none';
	document.getElementById(ingredientType+'_and_'+ingredientNumber).style.display = 'none';
	var foundFirst = false;
	for(var i = ingredientNumber-1; i >= 0; i--)
	{
		var commaField = document.getElementById(ingredientType+'_comma_'+i);
		var andField = document.getElementById(ingredientType+'_and_'+i);
		if(commaField != null && andField != null)
		{
			if(!foundFirst)
			{
				commaField.style.display = 'none';
				andField.style.display = '';
				foundFirst = true;
			}
			else
			{
				commaField.style.display = '';
				andField.style.display = 'none';
			}
		}
	}
	
	var ingredientNameInputField = document.getElementById(ingredientType+'_name');
	ingredientNameInputField.value = '';
	var ingredientHints = document.getElementById(ingredientType+'_hints');
	ingredientHints.innerHTML = '&nbsp;';
	ingredientHints.className = 'hintloading';
	ingredientHints.style.display = 'none';
	
	hintsPresent[ingredientType] = false;
	lastHints[ingredientType] = [];
	shownHints[ingredientType] = [];
	selectedHint[ingredientType] = -1;
}



function getPossibleCategories(evt)
{
	var keyCode = evt.keyCode;
	if(keyCode == 40 || keyCode == 38 || keyCode == 13)
		return;
	var categoryNameInputField = document.getElementById('category_name');
	var categoryHints = document.getElementById('category_hints');

	if(previousSearchValue['category'] != '' && categoryNameInputField.value.toLowerCase().indexOf(previousSearchValue['category']) == 0)
	{
		if(hintsPresent['category'] && lastHints['category'].length > 0)
		{
			showCategoryHints();
			return;
		}
		else if(!hintsPresent['category'])
			return;
		//else cont
	}
	previousSearchValue['category'] = categoryNameInputField.value.toLowerCase();

	if(categoryNameInputField.value != '')
	{
		categoryHints.innerHTML = '&nbsp;';
		categoryHints.className = 'hintloading';
		categoryHints.style.display = '';
		hintsPresent['category'] = false;
		
		retrieveCategoriesWhereNameStartsWith(categoryNameInputField.value, languageId, retrieveCategoriesWhereNameStartsWith_Callback);
	}	
	else
	{
		hintsPresent['category'] = false;
		lastHints['category'] = [];
		categoryHints.innerHTML = '&nbsp;';
		categoryHints.className = 'hintloading';
		categoryHints.style.display = 'none';
	}
}

function retrieveCategoriesWhereNameStartsWith_Callback(foundAnyCategories, possibleCategories)
{	
	var categoryHints = document.getElementById('category_hints');
	categoryHints.className = 'hintnotloading';
	if(!foundAnyCategories)
	{
		lastHints['category'] = [];
		hintsPresent['category'] = false;
		categoryHints.innerHTML = '<p>Geen categorie&euml;n gevonden<\/p>';
	}
	else
	{
		if(typeof(possibleCategories) == 'number')
		{
			lastHints['category'] = [];
			hintsPresent['category'] = true;
			categoryHints.innerHTML = '<p>Teveel categorie&euml;n gevonden ('+ possibleCategories +')<\/p>';
		}
		else
		{
			lastHints['category'] = [];
			hintsPresent['category'] = true;
			var len = possibleCategories.length;
			for(i = 0; i < len; i++)
			{
				lastHints['category'][lastHints['category'].length] = new Array(possibleCategories[i].id, possibleCategories[i].name, possibleCategories[i].shortName);
			}
			showCategoryHints();
		}
	}
}

function showCategoryHints(ingredientType)
{
	var categoryHints = document.getElementById('category_hints');
	categoryHints.className = 'hintnotloading';
	categoryHints.style.display = '';
	categoryHints.innerHTML = '';
	shownHints = [];
	var currentInputFieldValue = document.getElementById('category_name').value.toLowerCase();
	for(i = 0, len = lastHints['category'].length; i < len; i++)
	{
		var focusedIdNameShortName = lastHints['category'][i];
		var longName = focusedIdNameShortName[1].toLowerCase();
		var longNames = longName.split(' ');
		for(var ln = 0; ln < longNames.length; ln++)
			if(longNames[ln].indexOf(currentInputFieldValue) == 0)
			{
				shownHints[shownHints.length] = focusedIdNameShortName;
				break;
			}
	}
	if(shownHints.length > 0)
	{
		for(i = 0, len = shownHints.length; i < len; i++)
		{
			var focusedIdValue = shownHints[i];
			var id = focusedIdValue[0];
			var name = focusedIdValue[1];
			var shortName = focusedIdValue[2];
			categoryHints.innerHTML += '<p class="hintline" id="hint_'+i+'"><a onclick="setCategory('+id+',\''+shortName.replace('\'', '´') +'\');">'+name+'<\/a><input type="hidden" id="hint_'+i+'_id" value="'+id+'" /><input type="hidden" id="hint_'+i+'_value" value="'+shortName+'" /><\/p>';
		}
		if(selectedHint['category'] != -1)
		{
			selectedHint['category'] = Math.min(shownHints.length-1, selectedHint['category']);
			var currentHintLine = document.getElementById('hint_'+selectedHint['category']);
			currentHintLine.childNodes[0].className = 'selectedhintline';
		}
	}
	else
	{
		categoryHints.innerHTML = '<p>Geen categorie&euml;n gevonden<\/p>';
	}
}

function setCategory(ingredientId, ingredientName)
{
	var divIngredients = document.getElementById('categories');
	var categoryNumber = document.getElementById('category_count').value;
	document.getElementById('category_count').value++;
	
	//if(ingredientId > 5)
	//	document.getElementById('category_add').style.display = 'none';
	
	var ingredientTemplate = document.getElementById('category_template');
	var newIngredient = ingredientTemplate.cloneNode(true);
	newIngredient.setAttribute('id', 'category_'+categoryNumber);
	newIngredient.innerHTML = newIngredient.innerHTML.replace(/XXX/g, categoryNumber);
	divIngredients.appendChild(newIngredient);
	
	var hiddenIngredientIdField = document.getElementById('category_id_'+categoryNumber);
	hiddenIngredientIdField.value = ingredientId;
	var ingredientNameField = document.getElementById('category_name_'+categoryNumber);
	ingredientNameField.innerHTML = ingredientName;
	document.getElementById('category_comma_'+categoryNumber).style.display = 'none';
	document.getElementById('category_and_'+categoryNumber).style.display = 'none';
	var foundFirst = false;
	for(var i = categoryNumber-1; i >= 0; i--)
	{
		var commaField = document.getElementById('category_comma_'+i);
		var andField = document.getElementById('category_and_'+i);
		if(commaField != null && andField != null)
		{
			if(!foundFirst)
			{
				commaField.style.display = 'none';
				andField.style.display = '';
				foundFirst = true;
			}
			else
			{
				commaField.style.display = '';
				andField.style.display = 'none';
			}
		}
	}
	
	var ingredientNameInputField = document.getElementById('category_name');
	ingredientNameInputField.value = '';
	var ingredientHints = document.getElementById('category_hints');
	ingredientHints.innerHTML = '&nbsp;';
	ingredientHints.className = 'hintloading';
	ingredientHints.style.display = 'none';
	
	hintsPresent['category'] = false;
	lastHints['category'] = [];
	shownHints['category'] = [];
	selectedHint['category'] = -1;
	previousSearchValue['category'] = '';
	
	if(document.getElementById('searchnotallowed') == null)
		return;
	document.getElementById('searchnotallowed').style.display = 'none';
	document.getElementById('searchallowed').style.display = '';
}



function focusLost(ingredientType)
{
	var ingredientHints = document.getElementById(ingredientType+'_hints');
	ingredientHints.innerHTML = '&nbsp;';
	ingredientHints.style.display = 'none';
	
	selectedHint[ingredientType] = -1;
}

function doRemoveNode(ingredientType, nodeId)
{
	if(ingredientType != 'category')
		var divIngredients = document.getElementById(ingredientType+'s');
	else
		var divIngredients = document.getElementById('categories');
	var node = document.getElementById(nodeId);
	divIngredients.removeChild(node);
	
	var ingredientNumber = document.getElementById(ingredientType+'_count').value;
	var foundFirst = false;
	var foundSecond = false;
	for(var i = ingredientNumber-1; i >= 0; i--)
	{
		var commaField = document.getElementById(ingredientType+'_comma_'+i);
		var andField = document.getElementById(ingredientType+'_and_'+i);
		if(commaField != null && andField != null)
		{
			if(!foundFirst)
			{
				commaField.style.display = 'none';
				andField.style.display = 'none';
				foundFirst = true;
			}
			else if(!foundSecond)
			{
				commaField.style.display = 'none';
				andField.style.display = '';
				foundSecond = true;
			}
			else
			{
				commaField.style.display = '';
				andField.style.display = 'none';
			}
		}
	}
	if(!foundFirst)
	{
		if(document.getElementById('searchnotallowed') == null)
			return;
		document.getElementById('searchnotallowed').style.display = '';
		document.getElementById('searchallowed').style.display = 'none';
	}
}

function detectArrowsAndSelection(ingredientType, evt)
{
	var keyCode = evt.keyCode;
	if(keyCode == 40 || keyCode == 38)
	{
		var previousSelectedHint = selectedHint[ingredientType];
		if(keyCode == 40)	//down
		{
			if(shownHints.length > 0 && selectedHint[ingredientType] < shownHints.length-1)
				selectedHint[ingredientType]++;
	    }
		else if(keyCode == 38)	//up
		{
			if(selectedHint[ingredientType] > 0)
				selectedHint[ingredientType]--;
		}
		if(previousSelectedHint != selectedHint[ingredientType])
		{
			if(previousSelectedHint != -1)
			{
				var previousHintLine = document.getElementById('hint_'+previousSelectedHint);
				previousHintLine.childNodes[0].className = '';
			}
			var currentHintLine = document.getElementById('hint_'+selectedHint[ingredientType]);
			currentHintLine.childNodes[0].className = 'selectedhintline';
		}
	}
    else if(keyCode == 13)	//enter
    {
    	var currentHintLineId = document.getElementById('hint_'+selectedHint[ingredientType]+'_id').value;
    	var currentHintLineValue = document.getElementById('hint_'+selectedHint[ingredientType]+'_value').value;
    	if(ingredientType  != 'category')
    		setIngredient(ingredientType, currentHintLineId, currentHintLineValue);
    	else
    		setCategory(currentHintLineId, currentHintLineValue);
    }

}
