/**
 * Класс для создания кастомизированных селекторов
 * -----------------------------------------------
 * @copyright TimeZero <http://www.timezero.ru/>
 * @autor Ivan Kamenev <vicont@timezero.ru>
 */

var CustomDropDown = function(contId, valueFieldId, optionList) {
	
	var mainContainer = $(contId);
	var valueSpan = Common.getElementsByClassName(mainContainer, "SPAN", "input_span")[0];
	var valueField = $(valueFieldId);
	var valuesListContainer = Common.getElementsByClassName(mainContainer, "DIV", "field-list")[0];
	var optionList = optionList;
	
	var eventList = {};
	
	this.init = function(defaultValue) {
		var optionsContainer = Common.getElementsByClassName(valuesListContainer, "DIV", "selector_r")[0];
		
		for (value in optionList) {
			var optionBlock = document.createElement('DIV');
			optionBlock.innerHTML = optionList[value];
			optionBlock.ddObject = this;
			optionBlock.value = value;
			optionsContainer.appendChild(optionBlock);
			Common.Event.add(optionBlock, 'click', function() {
				this.ddObject.setValue(this.value);
			});
			Common.Event.add(optionBlock, 'mouseover', this.bloomField);
			Common.Event.add(optionBlock, 'mouseout', this.unbloomField);
		}
		optionBlock.style.borderBottom = "none";
		this.setValue(defaultValue);
		
		var valueBlock = Common.getElementsByClassName(mainContainer, "DIV", "value-block")[0];
		Common.Event.add(valueBlock, 'click', this.toggle);
	};
	
	this.on = function(eventName, handler) {
		eventList[eventName] = handler;
	};
	
	this.fireEvent = function(eventName) {
		if (eventList[eventName] != undefined) {
			eventList[eventName]();
		}
	}
	
	this.getContainerId = function() {
		return mainContainer.id;
	};
	
	this.toggle = function() {
		var curDisplay = valuesListContainer.style.display;
		valuesListContainer.style.display = (curDisplay == "none") ? "block" : "none";
	};
	
	this.bloomField = function() {
		this.className = "sel_blue_line";
	};
	
	this.unbloomField = function() {
		this.className = "not_sel_line";
	};
	
	this.setValue = function(value) {
		valueSpan.innerHTML = optionList[value];
		valueField.value = value;
		valuesListContainer.style.display = 'none';
		this.fireEvent("select");
	};
	
	this.hide = function() {
		valuesListContainer.style.display = 'none';
	}
	
};

var DropDownManager = function() {
	
	var ddList = [];
	
	return {
		
		register: function(obj) {
			if (!this.isRegistered(obj)) {
				ddList.push(obj);
			}
		},
		
		isRegistered: function(obj) {
			for (var i = 0; i < ddList.length; i++) {
				if (ddList[i] == obj) {
					return true;
				}
			}
			return false;
		},
		
		hideUnusedItems: function(e) {
			var tgt = Common.Event.getTarget(e);
			for (var i = 0; i < ddList.length; i++) {
				var needHide = true;
				var itemContainerId = ddList[i].getContainerId();
				var target = tgt;
				while (target.parentNode) {
					if (target.parentNode.id == itemContainerId) {
						needHide = false;
						break;
					}
					target = target.parentNode;
				}
				if (needHide) {
					ddList[i].hide();
				}
			}
		}
		
	}
	
}();