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 = location.protocol + '//' + 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 = location.protocol + '//' + 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;
}

/////////////////

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)
		{
			//log('showSelect: hide');
			document.getElementById(layer).style.visibility = 'hidden';
		}
		else
		{
			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];

			var ajaxURL = location.protocol + '//' + location.host + '/' + path + file;

			loadDataToLayer({
				layerID: layer,
				url: ajaxURL,
				args: args,
				closeOnStart: true
			});
			
			isShow = true;
		}
		lock_select = 1;
		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 = mkCacheKey(url, args);
	if (cacheSelect[cacheKey] != undefined) {
		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('&');
	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;
				}
			}
		}

		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 = location.protocol + '//' + location.host + '/ajax.php';
			//alert(params);
			/*
			var str = '';
			for (var i in params)
			{
				str += i+'='+params[i]+"\n";
			}
			alert(str);
			*/
			$.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 loadContentJquery(layer, data)
{
	var oLayer = $('#'+layer);
	if (data == '')
	{
		oLayer.css('visibility', 'hidden');
	}
	else
	{
		oLayer.html(data);
		addShowLayer(layer);
		hideDataLoadingMessage();
		oLayer.css('visibility', 'visible');
	}
}

function hideSelect(layer)
{
	if (lock_select == 0)
	{
		document.getElementById(layer).style.visibility = 'hidden';
		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()
{
	document.getElementById('data_loading').style.display = 'none';
}

// food_log




