if(typeof DynamicList == 'undefined'){
	document.write(
		'<script type="text/javascript" src="/js/a/lsf/forms/dynamic_list.js"></script>');
}

DynamicGroupList = new Object();

/**
 * options:
 * - element элемент, к которому всё цепляется
 * - url это ссылка из которой будут браться данные
 * - emptyName = "Пусто" то, что будет показываться для пустого списка
 * - emptyValue = 0
 * - defaultName = "Выберите" то, что будет показываться первым пунктом, если нет - не показывается
 * - defaultValue = 0
 * - intValue = true - считать ли аргумент целым числом
 * - params Объект с именами параметров - paramName => valueName
 * - value значение по-умолчанию, очень удобно использовать для задания предвыбранного значения
 * - callback(data) = [заполнение списка от] функция, используемая для получения данных
 * - notify() функция, вызываемая после заполнения всего
 * - noHandler = false не устанавливать слушателя (по-умолчанию ставится)
 **/
DynamicGroupList.create = function(options){
	var select = options.element;
	var value = options.value;
	options.callback = function(data){
			while(select.options.length)
				select.remove(0);

			// OPTGROUPы способом выше не удаляются, поэтому...
			while (select.childNodes.length) {
				if (select.firstChild.tagName == 'OPTGROUP') 
					while (select.firstChild.childNodes.length)
						select.firstChild.removeChild(select.firstChild.firstChild);
				select.removeChild(select.firstChild);
			}
				
			if(options.defaultName.length)
				DynamicList.addOption(select, options.defaultValue, options.defaultName);
				
			for(var i in data){
				if(typeof(data[i]) == 'object'){
					DynamicGroupList.addOptgroup(select, i, data[i], value)
				}else{
					DynamicList.addOption(select, i, data[i], i == value);
				}
			}
				
			if(typeof(options.notify) == 'function')
				options.notify();
				
			if(typeof(select.dynamicListNotifier) == 'function')
					select.dynamicListNotifier();
		};

	DynamicList.create(options);
}

DynamicGroupList.addOptgroup = function(selectElement, label, data, value){
	var oOption = document.createElement("OPTGROUP");	
	oOption.label = label;
	selectElement.appendChild(oOption);

	for(var i in data)
		if(typeof(data[i]) == 'object')
			DynamicGroupList.addOptgroup(oOption, i, data[i], value)
		else{
			DynamicGroupList.addOption(selectElement, i, data[i], i == value);
		}

	return oOption;
}

DynamicGroupList.addOption = function(selectElement, optionValue, optionText, selected){
	var oOption = document.createElement("OPTION");

	oOption.text = optionText;
	oOption.value = optionValue;
    if(selectElement.tagName == 'OPTGROUP'){
		alert(selectElement.tagName);
		selectElement.appendChild(oOption);
	}else{
		selectElement.options.add(oOption);
	}

	oOption.selected = selected;

	return oOption;	
}
