///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 
// Библиотека предназначена для генерации зависимых полей select с подгрузкой данных через JSON, в форме.
// При этом сами тэги селект должны быть определены заранее.
// !!!!!!!! Обязательно необходимо подключение библиотеки jQuery !!!!!!!!!
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

var path				= '/ajax/get_related_structure.php';// путь до вызываемого скрипта
var count_lvls			= 6;								// максимальное кол-во селектов
var sh_timeout			= 300;								// время появления/исчезания элементов
var element_name		= 'lvl';							// базовое имя элементов
var parent_element_name	= 'pid_lvl';						// базовое имя элементов
var is_init				= 0;
var disable_id			= '.response, .file';

if ( !zero_name )
var zero_name			= 'Выберите';

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Антикеш для ИЕ
function get_path ()
{
	new_path = path+'?some_trash='+ get_rand_string(32);
	//alert(new_path);
	return new_path;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function enable_checker()
{
	$(".checker").attr({"disabled":""});
	$(".checker").removeClass("disabled");
	is_login = 1;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function disable_checker()
{
	$(".checker").attr({"disabled":"disabled"});
	$(".checker").addClass("disabled");
	is_login = 0;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function disable_form ()
{
	if( $(disable_id).attr('disabled') == true )	return 0;
	
	$(disable_id).attr({"disabled":"disabled"});
	$(disable_id).addClass("disabled");
	$(":file").removeClass("disabled");
	$(".fakefile").addClass("disabled");
	
	submit_src		= $("#submit").attr('src');
	submit_src_new	= submit_src.replace('.','_disabled.');
	$("#submit").attr({"src":submit_src_new});
	
	look_src		= $("#look").attr('src');
	look_src_new	= look_src.replace('.','_disabled.');
	$("img#look").attr({"src":look_src_new});
	return false;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function enable_form ()
{
	//if ( is_login == 0 ) return 0;
	if( $(disable_id).attr('disabled') != true )	return 0;
	
	$(disable_id).attr({"disabled":""});
	$(disable_id).removeClass("disabled");
	$(":file").removeClass("disabled");
	$(".fakefile").removeClass("disabled");
	
	submit_src		= $("#submit").attr('src');
	submit_src_new	= submit_src.replace('_disabled.','.');
	$("#submit").attr({"src":submit_src_new});
	
	look_src		= $("#look").attr('src');
	look_src_new	= look_src.replace('_disabled.','.');
	$("img#look").attr({"src":look_src_new});
	return false;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// сворачивание ненужных селектов группы
function disalow_selects ( count_lvls, num )
{
	for ( i=count_lvls; i>num; i-- )
	{
		$("#"+element_name+i).hide(sh_timeout)
		$("#"+element_name+i).empty();
	}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// добавление первого нулевого элемента в список
function add_default ( num)
{
	$("<option>").attr("value", 'null').text(zero_name).appendTo("#"+element_name+num);
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// инициализация одного селекта
function init_change_select( num )
{
	var next_num = num+1;
	$("#"+element_name+num).change(function()
	{
		var pid = $("#"+element_name+num).val();
		var count = 0;
		is_obj	= 0;
		
		if ( pid == 'null' )
		{
			window.setTimeout("disable_form()", 400);
		}
		
		$.getJSON(get_path() + "&id=" + pid,
		$("#"+element_name+next_num).empty(),
		function(data)
		{
			add_default(next_num);
			$.each(data.items, function(i,item)
			{
				if( item.is_obj == "true" )
				{
					is_obj = 1;
				}
				else
				{
					$("<option>").attr("value", item.id).text(item.name).appendTo("#"+element_name+next_num);
					count = count +1;
				}
			});
			
			if ( count > 0)
			{
				$("#"+element_name+next_num).show(sh_timeout);
				disalow_selects ( count_lvls, next_num );
				window.setTimeout("disable_form()", 400);
			}
			else
			{
				disalow_selects ( count_lvls, num );
				if ( is_obj == 1 )	window.setTimeout("enable_form()", 400);
				else				window.setTimeout("disable_form()", 400);
			}
		});
	});
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Загрузка данных в селект при загрузке
function onload_init( pid, id, num )
{
	var count = 0;
	
	if ( pid == 'null' )
	{
		//window.setTimeout("disable_form()", 400);
	}
		
	$.getJSON(get_path()+"&id=" + pid,
	function(data)
	{
		add_default(num); // добавление пункта селекта по умолчанию
		$.each ( data.items, function(i,item)
		{
			if( item.is_obj == "true" )
			{
				is_obj = 1;
			}
			else
			{
				if ( id == item.id )
				$("<option>").attr("value", item.id).attr("selected", true).text(item.name).appendTo("#"+element_name+num);
				else
				$("<option>").attr("value", item.id).text(item.name).appendTo("#"+element_name+num);
				count = count +1;
			}
		});
		
		if ( count > 0)
		{
			$("#"+element_name+num).show(sh_timeout);
			disalow_selects ( count_lvls, (num+1) ); // зачем то это было нужно, но ХЗ зачем, надо тестить
			window.setTimeout("disable_form()", 400);
		}
		else
		{
			disalow_selects ( count_lvls, num );
			if ( is_obj == 1 )	window.setTimeout("enable_form()", 400);
			else				window.setTimeout("disable_form()", 400);
		}
	});
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
function init_select (k)
{
	pid	= $("#"+parent_element_name+k).val(); // определение родительского id
	if ( k == 0 )	pid = 0;

	if ( pid || k==0 )
	{
		id	= $("#"+parent_element_name+(k+1)).val(); // определение id
		onload_init( pid, id, (k+1) );
	}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
function init_all_selects()
{
	var pid		= 0;
	for (k=0; k<count_lvls; k++)
	{
		init_select(k);
		init_change_select(k);
	}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 
function add_all_acts ()
{
	var pid		= 0;
	for (k=0; k<count_lvls; k++)
	{
		init_change_select(k);
	}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Функция аналогична функции init_all_selects только в ней не вызывается определение действий над селектом
function re_init_all_selects()
{
	var pid		= 0;
	for (k=0; k<count_lvls; k++)
	{
		init_select(k);
	}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
