/*
function execForm(form)
{
  var ajax = new sack();
  //form = document.getElementById(form);
  for (var i = 0; i < form.elements.length; i++)
  {
    if (form.elements[i].name)
    {
      ajax.setVar(form.elements[i].name, form.elements[i].value);
    }
  }
  ajax.requestFile = form.action;
  ajax.method = form.method.toString().toUpperCase();
  ajax.element = form.target;
  ajax.runAJAX();
  return false;
}
*/

function loadURL(url, layer, callback)
{
  var re = /^(.*?)([^\/]*)$/;
  var path_arr = re.exec(location.pathname);
  var path = path_arr[1];
  if (path == '/') path = '';

  var re2 = /^(.*?)\?(.*)$/;
  var file_arr = re2.exec(url);
  var file = file_arr[1];
  var args = file_arr[2];
  
  var group_id = args.match(/group_id=(\d*)/);
  group_id = group_id[1];
  var name_name = args.match(/name_name=([^&]*)/);
  if (name_name != null && name_name.length > 0) {
	  name_name = name_name[1];
  }
  else {
	  name_name = '';
  }

  //var url = "http://" + location.host + '/' + path + url + '&rnd='+Math.random();
  var url = "http://" + location.host + '/' + path + file;

  loadDataToLayer({
	  url: url,
	  layerID: layer,
	  args: args,
	  closeOnStart: false,
	  onLoad: function(){ initCursor(name_name, layer); }
  }, callback);

  return false;
}

function loadURLJSON(params, layer, callback)
{
  showDataLoadingMessage();
  var ajaxURL = "http://" + location.host + '/ajax.php';
	$.getJSON(ajaxURL, params, function(data){
		var l = document.getElementById(layer);
		if (callback) callback(layer, params, data);
		l.style.visibility = 'visible';
		addShowLayer(l.id);
		hideDataLoadingMessage();
		initCursor(params.name_name, layer);
	});
  return false;
}

/*
function loadChart(url, layer)
{
  var ajax = new sack();
  ajax.requestFile = url;
  ajax.method = 'GET';
  ajax.element = layer;
  ajax.onCompletion = function() { set_chart(); };
  ajax.runAJAX();
  return false;
}
*/

function touchURL(url)
{
  var ajax = new sack();
  ajax.requestFile = url;
  ajax.method = 'GET';
  ajax.runAJAX();
  return false;
}

/////////////////

function loadURLContent(data, layer)
{
  document.getElementById(layer).innerHTML = data;
}

function loadContentFromUrl(url, layer)
{
  var ajaxObject;
  ajaxObject = new sack();
  ajaxObject.requestFile = url;
  ajaxObject.method = 'GET';
  ajaxObject.onCompletion = function(){ loadURLContent(ajaxObject.response, layer); };
  ajaxObject.runAJAX();
}




var selectedRow = 0;
function showMeasureRecipe(event, group_id)
{
	event.stopPropagation();
	selectedRow = 0;
	var food_id = 0;
	if (document.food_log)
	{
		food_id = document.food_log.food_id.value;
	}
	else
	{
		if (document.getElementById('food_id_'+group_id)) {
			food_id = document.getElementById('food_id_'+group_id).value;
		}
	}

	if (document.getElementById('search_measure_'+group_id).style.visibility != 'show')
	{
		showSelect(event, 0, 'select.php?group_id='+group_id+'&name_id=measure_id&name_name=form_measure_id_'+group_id+'&page=measure&word='+document.getElementById('form_measure_id_'+group_id).value+'&layer=search_measure_'+group_id+'&food_id='+food_id, 'search_measure_'+group_id);
	}
}

function showMeasure(event, is_key, group_id)
{
	if (document.getElementById('search_measure_' + group_id).style.visibility == 'visible') {
		hideSelect('search_measure_' + group_id);
		return false;
	}
	else {
		selectedRow = 0;

		if (document.food_log)
		{
			var f = document.getElementById('s_'+group_id);
			if (f.className == 'text_empty') {
				var food_id = '';
			}
			else {
				var food_id = document.food_log.food_id.value;
			}
		}
		else
		{
			if (document.getElementById('food_id_'+group_id)) {
				var food_id = document.getElementById('food_id_'+group_id).value;
			}
			else {
				var food_id = 0;
			}
		}
		return showSelect(event, is_key, 'select.php?group_id='+group_id+'&name_id=measure_id&name_name=form_measure_id_'+group_id+'&page=measure&word='+document.getElementById('form_measure_id_'+group_id).value+'&layer=search_measure_'+group_id+'&food_id='+food_id, 'search_measure_'+group_id);
	}
}

var selectedRowPrevious = 0;
function setSelected(num)
{
	if (num != null && document.getElementById('list_row_'+selectedRow) != null)
	{
		var previousRow = document.getElementById('list_row_'+selectedRowPrevious);
		if (previousRow) previousRow.className = 'list_row';
		selectedRow = num;
		document.getElementById('list_row_'+selectedRow).className = 'list_row_selected';
		selectedRowPrevious = selectedRow;
	}
}

var req = null;
var lock_select = 0;
var lock_select_timeout = 20;
// Загружает и показывает окно ajax селектора чего либо
function showSelect(event, is_key, url, layer)
{
	var isShow = false;
	if (lock_select == 0)
	{
		document.getElementById(layer).style.position = 'absolute';
		if (is_key == 1)
		{
			// Отфильтровываем управляющие кнопки
			var badKeys = new Array(0,9,16,17,19,27,33,34,35,36,37,38,39,40,45,46,47,112,113,114,115,116,117,118,119,120,121,122,123,145);
			for (i = 0; i < badKeys.length; i++)
			{
				if (event.keyCode == badKeys[i])
				{
					return false;
				}
			}
		}
		
		if (document.getElementById(layer).style.visibility == 'visible' && is_key == 0)
		//if (document.getElementById(layer).style.display == 'block' && is_key == 0)
		{
			//log('showSelect: hide');
			document.getElementById(layer).style.visibility = 'hidden';
			//document.getElementById(layer).style.display = 'none';
		}
		else
		{
			//showDataLoadingMessage();

			var re = /^(.*?)([^\/]*)$/;
			var path_arr = re.exec(location.pathname);
			var path = path_arr[1];
			if (path == '/') path = '';

			var re2 = /^(.*?)\?(.*)$/;
			var file_arr = re2.exec(url);
			var file = file_arr[1];
			var args = file_arr[2];
			
			var group_id = args.match(/group_id=(\d*)/);
			group_id = group_id[1];
			var name_name = args.match(/name_name=([^&]*)/);
			name_name = name_name[1];

			//document.getElementById(layer).style.visibility = 'hidden';
			//document.getElementById(layer).style.display = 'none';

			//document.getElementById(layer).innerHTML = '';

			/*
			var ajaxURL = "http://" + location.host + '/' + path + file;
			$.get(ajaxURL, args, function(data){
				var l = document.getElementById(layer);
				l.innerHTML = data;
				initCursor('s_'+group_id, layer);
				l.style.visibility = 'visible';
				//l.style.display = 'block';
				addShowLayer(l.id);
				hideDataLoadingMessage();
			});
			*/
			var ajaxURL = "http://" + location.host + '/' + path + file;
			//loadDataToLayer(ajaxURL, args, layer, function(){ initCursor('s_'+group_id, layer); });
			loadDataToLayer({
				layerID: layer,
				url: ajaxURL,
				args: args,
				closeOnStart: true
				//onLoad: function(){ initCursor('s_'+group_id, layer); }
				//onLoad: function(){ initCursor(name_name, layer); }
			});
			
			isShow = true;
			
			
		}
		lock_select = 1;
		//setTimeout("lock_select=0", lock_select_timeout);
		setTimeout(function(){ lock_select = 0; }, lock_select_timeout);
		
	}
	else
	{
		//alert('lock open');
		//isShow = true;
	}
	return isShow;
}

var cacheSelect = {};
function loadDataToLayer(params, callback) {
	var layerID = params.layerID;
	var url = params.url;
	var args = params.args;
	var onLoad = params.onLoad;

	if (params.closeOnStart) {
		document.getElementById(layerID).style.visibility = 'hidden';
		document.getElementById(layerID).innerHTML = '';
	}

	var onSuccess = function(data) {
		var l = document.getElementById(layerID);
		l.innerHTML = data;

		if (onLoad) onLoad();
		
		addShowLayer(l.id);
		l.style.visibility = 'visible';
	};

	//var cacheKey = md5(url+args);
	var cacheKey = mkCacheKey(url, args);
	if (cacheSelect[cacheKey] != undefined) {
	//if (1==2) {
		onSuccess(cacheSelect[cacheKey]);
		if (callback) callback();
	}
	else {
		showDataLoadingMessage();
		$.get(url, args, function(data){
			onSuccess(data);
			if (callback) callback();
			hideDataLoadingMessage();
			
			cacheSelect[cacheKey] = data;
		});
	}
}

function mkCacheKey(url, params) {
	// Параметры, не учитываемые при формировании ключа.
	var valsNotInclude = [
	//'group_id',
	//'layer',
	//'name_id',
	//'name_name'
	];
	var paramsArr = params.split(/&/);
	var paramsKey = [];
	for (var i = 0 in paramsArr) {
		var includeVal = true;
		for (var j in valsNotInclude) {
			var reg =  new RegExp("^"+valsNotInclude[j]+"=");
			if (paramsArr[i].match(reg)) {
				includeVal = false;
				break;
			}
		}
		if (includeVal) {
			paramsKey[paramsKey.length] = paramsArr[i];
		}
	}
	paramsKey.sort();
	var params = paramsKey.join('&');
	//alert(params);
	return md5(url + params);
}

function showSelectJSON(event, is_key, params, layer)
{
	if (lock_select == 0)
	{
		document.getElementById(layer).style.position = 'absolute';
		if (is_key == 1)
		{
			// Отфильтровываем управляющие кнопки
			var badKeys = new Array(0,9,16,17,19,27,33,34,35,36,37,38,39,40,45,46,47,112,113,114,115,116,117,118,119,120,121,122,123,145);
			for (i = 0; i < badKeys.length; i++)
			{
				if (event.keyCode == badKeys[i])
				{
					return false;
				}
			}
		}
		
		//alert(params.word);

		if ((document.getElementById(layer).style.visibility == 'visible' && is_key == 0) || params.word == '')
		{
			document.getElementById(layer).style.visibility = 'hidden';
		}
		else
		{
			showDataLoadingMessage();

			document.getElementById(layer).style.visibility = 'hidden';

			document.getElementById(layer).innerHTML = '';

			var ajaxURL = "http://" + location.host + '/ajax.php';
			$.getJSON(ajaxURL, params, function(data){
				var l = document.getElementById(layer);
				if (t_callback) t_callback(layer, params, data);
				l.style.visibility = 'visible';
				addShowLayer(l.id);
				hideDataLoadingMessage();
			});
		}
		lock_select = 1;
		setTimeout("lock_select=0", lock_select_timeout);
	}
	else
	{
		//alert('lock open');
	}
}

function initCursor(targetFieldID, selectorLayerID) {
	setSelected(0);
	if (targetFieldID != '') {
		$('#'+targetFieldID).focus();
	}
}

function loadContent(layer)
{
  var l = document.getElementById(layer);
  if (req.readyState == 4)
  {
    try
    {
      if (req.status == 200)
      {
        if (req.responseText == "")
        {
          l.style.visibility = 'hidden';
        }
        else
        {
          l.innerHTML = req.responseText;
          l.style.visibility = 'visible';
          addShowLayer(l.id);
          hideDataLoadingMessage();
        }
      }
    }
    catch(e){}
  }
}

function hideSelect(layer)
{
	if (lock_select == 0)
	{
		document.getElementById(layer).style.visibility = 'hidden';
		//document.getElementById(layer).style.display = 'none';
		document.getElementById(layer).innerHTML = '';
		lock_select = 1;
		setTimeout("lock_select=0", lock_select_timeout);
	}
	else
	{
		//alert('lock close');
	}
}

function showTypeInFocus(group, text)
{
	var f = document.getElementById('s_'+group);
	if (f.value == text)
	{
		f.value = '';
	}
	f.className = 'text';
}

function showTypeInBlur(group, text)
{
	var f = document.getElementById('s_'+group);
  
	if (f.value == text || f.value == '')
	{
		f.value = text;
		f.className = 'text_empty';
	}
	else
	{
		f.className = 'text';
	}
}

function showDataLoadingMessage()
{
  var win_x = window.pageXOffset ? window.pageXOffset : document.body.scrollLeft;
  var win_y = window.pageYOffset ? window.pageYOffset : document.body.scrollTop;

  var l = document.getElementById('data_loading');

  l.style.left = (document.body.clientWidth-l.style.width)/2 - 100 + win_x;
  l.style.top = (document.body.clientHeight-l.style.height)/2 + win_y;
  l.style.display = 'block';
}

function hideDataLoadingMessage()
{
  var l = document.getElementById('data_loading');
  l.style.display = 'none';
}

// food_log



