// INTLv4
var foodlist_dont_foodinfo;

function foodlist_onclick(e){
	document.getElementById("foodinfo_static").style.display = "none";
	// foodinfo_static_container belongs to public calorie table on 101
	if(document.getElementById('foodinfo_static_container'))
	{
		document.getElementById('foodinfo_static_container').style.display = 'none';
	}

	if (!e)
		var e = window.event;
	if (!e)
		return;
	var elem;
	if (e.target)
		elem = e.target;
	if (e.srcElement)
		elem = e.srcElement;
	if (!elem)
		return;
	var elems = document.getElementsByTagName("a");
	var food_id;
	var type;
	food_id = elem.id.substring(2);
	report_food_id = elem.id;
	if (elem.id.substring(0,2) == 'fo')
		type=1;
	if (elem.id.substring(0,2) == 'ex')
		type=2;
	document.getElementById('inputfield').focus();
	for (var i=0;i<elems.length;i++) {
		if (elems[i].className == 'option')
		{
			elems[i].style.backgroundColor="white";
			elems[i].style.borderTop = "0px";
			elems[i].style.borderBottom = "0px";
			elems[i].style.padding = "1px 5px 2px 8px";
		}
	}
	elem.style.backgroundColor = "yellow";
	elem.style.borderTop = "1px solid #bbb";
	elem.style.borderBottom = "1px solid #bbb";
	elem.style.padding = "0px 5px 1px 8px";
	if (type == 1)
	{
		if (foodlist_dont_foodinfo != 1)
		{ // click from mouse
			foodinfo_show(food_id);
		} else {
			// selected via keyboard
			document.getElementById("suggestlist").style.display = "block";
			foodinfo_show_delayed(food_id);
			if(document.getElementById('loader_gfx'))
			{
				document.getElementById("loader_gfx").style.visibility = 'visible';
			}
		}
		if(food_id > 0)
		{
			foodlist_amountbox_delayed(food_id);
		}
		else
		{
			foodlist_amountbox_recipe_delayed(food_id);
		}
	}
	if (type == 2)
	{
		xajax_show_exercise_details(food_id);
	}
	var options = options_build_array();
	if (options.length > 0)
	{
		for (var i = 0; i < options.length; i++)
		{
			if (options[i].cursor == 1)
			{
				options[i].cursor = 0;
				options[i].style.background = '';
			}
		}
	}
	elem.cursor = 1;
}

function input_gram(){
	try {
		if(document.getElementById('amount_gram').value == ""){
			document.getElementById('amount').disabled=0;
		}
		else{
			document.getElementById('amount').disabled=1;
		}
	} catch (err) {
	}
}

function clear_radio_buttons() {
	if(document.getElementById('gram').value == ""){
		document.getElementById('save').disabled=1;
		document.getElementById('save').checked=false;
	}
	else{
		document.getElementById('save').disabled=0;
	}
	for (var i = 0; i < document.form_food.amount.length; i++) {
		document.form_food.amount[i].checked = false;
	}
}

function clear_input(){
	if(document.getElementById('gram')){
		document.getElementById('gram').value='';
	}
  if(document.getElementById('save') ){
		document.getElementById('save').disabled=1;
		document.getElementById('save').checked=false;
	}
}

function input_set(value){
	if(value == 1)
	{
		if(document.getElementById('amount')){
			document.getElementById('times_sign').style.visibility = 'hidden';
			document.getElementById('amount').value = ""
		}
		if(document.getElementById('save_measure'))
		{
			document.getElementById('save_measure_txt').style.color = '#000';
			document.getElementById('save_measure').disabled = false; 
		}
	}
	else{
		if(document.getElementById('amount'))
		{
			document.getElementById('times_sign').style.visibility = 'visible';
			if(document.getElementById('amount').value <= "0")
				document.getElementById('amount').value = "1"
		}
		if(document.getElementById('save_measure_txt'))
		{
			document.getElementById('save_measure_txt').style.color = '#ccc';
			document.getElementById('save_measure').checked = false;
			document.getElementById('save_measure').disabled = true; 
		}
	}
}

function input_type() {
  var e1 = document.getElementById('focus_here');
  OnKeyRequestBuffer.bufferText = false;
  if(document.getElementById('recipe').checked == false){
    xajax_search_202(e1.value);
		pageId = 202;
  }
  if(document.getElementById('recipe').checked == true){
    xajax_search_232(e1.value);
		pageId = 232;
  }
	if(document.getElementById('div3')){
		document.getElementById('div3').innerHTML = '';
	}
	if(document.getElementById('div4')){
		document.getElementById('div4').innerHTML = '';
	}
	if(document.getElementById('div5')){
		document.getElementById('div5').innerHTML = '';
	}
	clear_input();
  e1.focus();
  e1.select();
}

var OnKeyRequestBuffer =
{
		bufferText: false,
		bufferTime: 200,

		modified : function(strId, algorithm)
		{
			if (document.getElementById('foodinfo_static'))
			{
				document.getElementById("foodinfo_static").style.display = "none";
			}
				// foodinfo_static_container belongs to public calorie table on 101
				if(document.getElementById('foodinfo_static_container'))
				{
					document.getElementById('foodinfo_static_container').style.display = 'none';
				}
				if (document.getElementById('suggestlist'))
				{
					document.getElementById("suggestlist").style.display = "block";
				}
				setTimeout('OnKeyRequestBuffer.compareBuffer("'+strId+'","'+xajax.$(strId).value+'", "'+algorithm+'");', this.bufferTime);
				if(document.getElementById('sys_msg'))
				{
					if (document.getElementById(strId).value.length > 0)
						document.getElementById('sys_msg').style.display = 'none';
				}
		},

		compareBuffer : function(strId, strText, algorithm)
		{
				var evalStr;
				if (strText == xajax.$(strId).value && strText != this.bufferText)
				{
					foodinfo_show_cancel();
					if (document.getElementById('suggestlist'))
					{
						document.getElementById("suggestlist").style.display = "block";
					}
					this.bufferText = strText;
					evalStr = "xajax_foodlist_search(xajax.$(strId).value,"+algorithm+")";
					eval(evalStr);
				}
		}
}

function suggestlist_back(str, algorithm) {
	var resultt;
	result = str.split(" ");
	result.pop();
	for (var i in result){
		if(resultt)
			resultt += " " + result[i];
		else
			resultt = result[i];
	}
	document.getElementById('inputfield').value = resultt;
	OnKeyRequestBuffer.modified('inputfield', algorithm);
	document.getElementById('inputfield').focus();
}

function suggestlist_pick(e) {
	if (!e)
		var e = window.event;
	if (!e)
		return;
	var elem;
	if (e.target)
		elem = e.target;
	if (e.srcElement)
		elem = e.srcElement;
	if (!elem)
		return;
	var str = elem.id.substring(4);
	var algorithm = elem.name;
	document.getElementById('inputfield').value = document.getElementById('inputfield').value + " " + str;
	OnKeyRequestBuffer.modified('inputfield', algorithm);
	document.getElementById('inputfield').focus();
}

// select cursor position
// - Marks the position
// - Scroll parent div to position
// - Call "onclick" event
function select_cursor_position(element)
{
	//eval(element.attributes.getNamedItem('onclick').value);
	foodlist_dont_foodinfo = 1;
	if(document.dispatchEvent) { // W3C
    var oEvent = document.createEvent( "MouseEvents" );
    oEvent.initMouseEvent("click", true, true,window, 1, 1, 1, 1, 1, false, false, false, false, 0, element);
    element.dispatchEvent( oEvent );
	}
	else if(document.fireEvent) { // IE
    element.fireEvent("onclick");
	}    
	foodlist_dont_foodinfo = 0;
	var pos = element.offsetTop - element.parentNode.offsetTop;
	var windowTop = element.parentNode.scrollTop;
	var windowBottom = windowTop + element.parentNode.clientHeight;
	if (pos > windowBottom - element.scrollHeight)
	{
		element.parentNode.scrollTop = pos+element.scrollHeight-element.parentNode.clientHeight;
		return;
	}
	if (pos < windowTop)
	{
		element.parentNode.scrollTop = pos;
	}
}

// Build an array of option elements
function options_build_array()
{
	var li = document.getElementById('scroll');
	var options = [];
	var i = 0;
	for (var p = 0; p < li.childNodes.length; p++)
	{
		node = li.childNodes[p];
		if (node.className == 'option')
		{
			options[i] = node;
			i++;
		}
	}
	return options;
}

// Cursor keys on foodlist
function cursorkeys_foodlist(e)
{
	if (!e)
		var e = window.event;
	if (!e)
		return;
	switch (e.keyCode) {
		case 38: // Up
			var options = options_build_array();
			if (options.length == 0)
				return false;
			var cursor = -1;
			for (var i = 0; i < options.length; i++)
			{
				if (options[i].cursor == 1)
					cursor = i;
			}
			if (cursor == -1)
			{
				var top = options.length-1;
				select_cursor_position(options[top]);
				return false;
			}
			if (cursor == 0)
				return false;
			if (cursor - 1 == 0)
				document.getElementById('scroll').scrollTop = 0;
			select_cursor_position(options[cursor-1]);
			return false;
			break;

		case 40: // Down
			var options = options_build_array();
			if (options.length == 0)
				return false;
			var cursor = -1;
			for (var i = 0; i < options.length; i++)
			{
				if (options[i].cursor == 1)
					cursor = i;
			}
			if (cursor == -1)
			{
				select_cursor_position(options[0]);
				return false;
			}
			if (cursor == options.length - 1)
				return false;
			select_cursor_position(options[cursor+1]);
			return false;
			break;
		case 99936: // Home - DISABLED
			var options = options_build_array();
			if (options.length == 0)
				return false;
			var cursor = -1;
			for (var i = 0; i < options.length; i++)
			{
				if (options[i].cursor == 1)
					cursor = i;
			}
			if (cursor != -1 && cursor != 0)
			{
				options[cursor].cursor = 0;
				options[cursor].style.background = '';
			}
			document.getElementById('scroll').scrollTop = 0;
			select_cursor_position(options[0]);
			return false;
			break;
		case 99935: // End - DISABLED
			var options = options_build_array();
			if (options.length == 0)
				return false;
			var cursor = -1;
			for (var i = 0; i < options.length; i++)
			{
				if (options[i].cursor == 1)
					cursor = i;
			}
			if (cursor != -1 && cursor != options.length-1)
			{
				options[cursor].cursor = 0;
				options[cursor].style.background = '';
			}
			var top = options.length-1;
			select_cursor_position(options[top]);
			return false;
			break;
		case 13: // Enter
			if (document.getElementById('amount'))
			{
				document.getElementById('amount').focus();
			}
			return false;
			break;
		case 34: // PageDown
			var scr = document.getElementById('scroll');
			var pos = scr.scrollTop;
			var options = options_build_array();
			if (options.length == 0)
				return false;
			var targetPos = pos + scr.clientHeight - options[0].scrollHeight;
			var cursor = -1;
			var newCursor = -1;
			for (var i = 0; i < options.length; i++)
			{
				if (options[i].cursor == 1)
				{
					if (cursor == -1 && options[i].offsetTop - scr.offsetTop == targetPos)
						targetPos = targetPos + scr.clientHeight;
					cursor = i;
				}
				if (options[i].offsetTop - scr.offsetTop >= targetPos)
				{
					newCursor = i;
					break;
				}
			}
			if (newCursor == -1)
				newCursor = options.length-1;
			if (cursor == newCursor)
				return false;
			if (cursor != -1 && cursor != newCursor)
			{
				options[cursor].cursor = 0;
				options[cursor].style.background = '';
			}
			select_cursor_position(options[newCursor]);
			return false;
			break;
		case 33: // PageUp
			var scr = document.getElementById('scroll');
			var options = options_build_array();
			if (options.length == 0)
				return false;
			var cursor = -1;
			var newCursor = -1;
			for (var i = options.length-1; i >= 0; i--)
				if (options[i].cursor == 1)
					cursor = i;
			var pos = options[cursor].offsetTop - scr.offsetTop;
			if (pos == scr.scrollTop)
				var targetPos = pos - scr.clientHeight + options[0].scrollHeight;
			else
				var targetPos = scr.scrollTop;
			for (var i = options.length-1; i >= 0; i--)
				if (options[i].offsetTop - scr.offsetTop <= targetPos)
				{
					newCursor = i;
					break;
				}
			if (newCursor == -1)
				newCursor = 0;
			if (cursor == newCursor)
				return false;
			if (cursor != -1 && cursor != newCursor)
			{
				options[cursor].cursor = 0;
				options[cursor].style.background = '';
			}
			if (newCursor == 0)
				scr.scrollTop = 0;
			select_cursor_position(options[newCursor]);
			return false;
			break;
	}
	return true;
}

function change_input_type(type)
{
	var field = document.getElementById('inputfield');
	if(type == 'food_all')
	{
		field.onkeyup = new Function("OnKeyRequestBuffer.modified('inputfield', 13)");
		field.algorithm = 13;
	}
	if(type == 'recipe_all')
	{
		field.onkeyup = new Function("OnKeyRequestBuffer.modified('inputfield', 2)");
		field.algorithm = 2;
	}
	jQuery('#inputfield').data('algorithm',field.algorithm);
	field.focus();
	xajax_foodlist_search(field.value, field.algorithm);
}

/*
var report_food_count = 0;

function foodlist_context(e){
	if (!e)
		var e = window.event;
	if (!e)
		return;
	var elem;
	if (e.target)
		elem = e.target;
	if (e.srcElement)
		elem = e.srcElement;
	if (!elem)
		return;
	e.cancelBubble=true;
	report_food_id = elem.id;
	return dm_popup(6, 2000, e);
}
*/

var report_food_id = null;

function report_food(url)
{
	if (report_food_id)
	{
		if (report_food_id.substring(0,2) == 'fo' && report_food_id.substring(2) > 0)
		{
			window.location = "/index.php?id=218&food_id="+report_food_id.substring(2)+url;
			return false;
		}
	}
	alert('{{LANG_2002}}');
	return false;
}

/*
function foodlist_context_off(menuid)
{
	report_food_count--;
	if (report_food_count <= 0)
		document.getElementById(report_food_id).style.backgroundColor = '';
}
*/

function foodlist_add_events()
{
	var elems = document.getElementsByTagName("a");
	for (var i=0; i<elems.length;i++)
	{
		if (elems[i].className == 'option')
		{
			if (elems[i].addEventListener)
			{
				elems[i].addEventListener("click", foodlist_onclick, false);
				if (elems[i].id.substring(0,2) == "fo")
				{
//					if (elems[i].id.substring(2) > 0)
//						elems[i].addEventListener("contextmenu", foodlist_context, false);
//					elems[i].addEventListener("mouseover", foodinfo_show, false);
//					elems[i].addEventListener("mouseout", foodinfo_onmouseout, false);
				}
			} else {
				elems[i].attachEvent("onclick", foodlist_onclick);
				if (elems[i].id.substring(0,2) == "fo")
				{
//					if (elems[i].id.substring(2) > 0)
//						elems[i].attachEvent("oncontextmenu", foodlist_context);
//					elems[i].attachEvent("onmouseover", foodinfo_show);
//					elems[i].attachEvent("onmouseout", foodinfo_onmouseout);
				}
			}
		}
	}

	var elems = document.getElementsByTagName("a");
	for (var i=0; i<elems.length;i++)
	{
		if (elems[i].className == 'suggestoption')
		{
			if (elems[i].addEventListener)
				elems[i].addEventListener("click", suggestlist_pick, false);
			else
				elems[i].attachEvent("onclick", suggestlist_pick);
		}
	}
}

function clear_foodinfo()
{
	foodinfo_show_cancel();
	document.getElementById("suggestlist").style.display = "block";
	document.getElementById("foodinfo_static").style.display = "none";
	// foodinfo_static_container belongs to public calorie table on 101
	if(document.getElementById('foodinfo_static_container'))
	{
		document.getElementById('foodinfo_static_container').style.display = 'none';
	}
}

function clear_inputfield(algorithm)
{
	document.getElementById('inputfield').value = '';
	if(document.getElementById('input_type'))
	{
		change_input_type(document.getElementById('input_type').options[document.getElementById('input_type').selectedIndex].value);
	}
	else
	{
		OnKeyRequestBuffer.modified('inputfield', algorithm);
	}
	if(document.getElementById('amountbox'))
	{
		document.getElementById('amountbox').innerHTML = '';
	}
	document.getElementById('inputfield').focus();
}

var foodlist_amountbox_timer;
function foodlist_amountbox_delayed(food_id)
{
	if (foodlist_amountbox_timer)
	{
		clearTimeout(foodlist_amountbox_timer);
		foodlist_amountbox_timer = false;
	}
	foodlist_amountbox_timer = setTimeout("foodlist_amountbox("+food_id+")", 60);
}

function foodlist_amountbox_recipe_delayed(recipe_id)
{
	if (foodlist_amountbox_timer)
	{
		clearTimeout(foodlist_amountbox_timer);
		foodlist_amountbox_timer = false;
	}
	foodlist_amountbox_timer = setTimeout("foodlist_amountbox_recipe("+recipe_id+")", 60);
}

function foodlist_amountbox(food_id)
{
	foodlist_amountbox_timer = false;
	xajax_foodlist_amountbox(food_id);
}

function foodlist_amountbox_recipe(recipe_id)
{
	foodlist_amountbox_timer = false;
	xajax_foodlist_amountbox_recipe(recipe_id);
}

jQuery('#inputfield')
	.click(function(){
			clear_foodinfo();
	})
	.keydown(function(event){
			return cursorkeys_foodlist(event);
	})
	.keyup(function(){
			OnKeyRequestBuffer.modified('inputfield', $(this).data('algorithm'));
	});
jQuery('#mealchooser')
	.change(function(){
			window.location='/index.php?id=205&mealtype='+$(this).val();
	});
jQuery('#input_type')
	.change(function(){
			change_input_type($(this).val());
	});
jQuery('#clear_input')
	.click(function(){
			clear_inputfield($('#inputfield').data('algorithm'));
			$('.calculate').next('span').text('');
	});
jQuery('#report_link')
	.click(function(){
			report_food($(this).data('url'));
	});

