function _EuiManager() {
	this.idx = 0;
	this.euis = new Array();

	/*
		DocumentÀÇ ºó¿µ¿ªÀ» Å¬¸¯ÇßÀ» °æ¿ì, ÆîÃÄÁø SelectBox¸¦ ´Ý¾ÆÁØ´Ù.
	*/
	var self = this;
	$(document).click(function(e) {
		var isOnSelect = false;
		for (var i=0; i<self.euis.length; i++) {
			var obj = self.euis[i];
			if (obj.type == "SELECT" && obj.visualElement != null) {
				if ($(e.target).parents("#" + obj.visualElement.attr("id")).length) {
					isOnSelect = true;
				}
			}
		}
		
		if (!isOnSelect) {
			for (var i=0; i<self.euis.length; i++) {
				var obj = self.euis[i];
				if (obj.type == "SELECT" && obj.visualElement != null) {
					$(".euiSelectList", obj.visualElement).hide();
				}
			}
		}
	});
}

_EuiManager.prototype.add = function(euiObj) {
	this.euis[this.idx] = euiObj;
	euiObj.euiIdx = this.idx;
	
	this.idx++;
};

_EuiManager.prototype.get = function(idx) {
	return this.euis[idx];
};

_EuiManager.prototype.size = function() {
	return this.euis.length;
};

_EuiManager.prototype.updateUi = function(formElement) {
	var eui = $(formElement).data("eui");
	if (eui != null) eui.update();
};

var EuiManager = new _EuiManager();

function EuiSelect(formElement, visualTemplate) {
	/*Eui °øÅë ½ÃÀÛ*/
	this.type = "SELECT";
	this.euiIdx = -1;
	this.formElement = formElement;
	this.visualElement = null;

	this.formElement.data("eui", this);
	EuiManager.add(this);
	/*Eui °øÅë ³¡*/
	
	this.template = visualTemplate;
	
	this._init();
}

EuiSelect.prototype.render = function() {
	this._parse();

	
	this._setTitleListener();
	this._setItemListener();
};

EuiSelect.prototype.update = function() {
	this._parse();
	
	this._setTitleListener();
	this._setItemListener();
};

EuiSelect.prototype._init = function() {
	var tag = this.template.html;
	this.visualElement = $(tag);
	$(this.visualElement).attr("id", "eui_" + this.euiIdx);
	$(this.visualElement).attr("style", this.formElement.attr("style"));
	
	this.formElement.hide();
	this.formElement.after(this.visualElement);
	$(this.visualElement).attr("class", this.template.visualClass);

	this._setBaseListener();
};

EuiSelect.prototype._parse = function() {
	var sItem = "";
	$("option", this.formElement).each(function() {
		sItem += "<li>" + $(this).text() + "</li>";
	});

	$(".euiSelectList", this.visualElement).html(sItem);
	
	this._setTitle();
};

EuiSelect.prototype._setTitle = function() {
	var self = this;
	$(".euiSelectTitle", this.visualElement).text($("option:selected", this.formElement).text());

	if (this.template.itemOnClass != null) {
		$(".euiSelectList li", this.visualElement).each(function(idx) {
			$(this).removeClass();
			if (idx == $("option:selected", self.formElement).index()) {
				$(this).attr("class", self.template.itemOnClass);
			}
			else {
				$(this).attr("class", "");
			}
		});
	}	
};
/*
$(function() {
	$("body").append("<div id='debug' style='position:absolute;left:0px;top:0px;'></div>");
});
*/

EuiSelect.prototype._setBaseListener = function() {
	var self = this;

	/*mouseOver½Ã ÆîÄ§À» ¼±ÅÃÇßÀ» ¶§*/
	if (this.template.isMouseOverFolding != null && this.template.isMouseOverFolding) {
		/*Select Box ±âº» Folding */
		$(self.visualElement).mouseenter(function() {
			for (var i=0; i<EuiManager.size(); i++) {
				var obj = EuiManager.get(i);
	
				if (obj.type == "SELECT") {
					if (self.euiIdx == obj.euiIdx) {
						$(".euiSelectList", self.visualElement).show();
					}
					else {
						/*ÀÚ½Å¿ÜÀÇ ´Ù¸¥ SelectBoxµéÀº Å¬¸¯½Ã list itemÀ» ´Ý¾ÆÁà¾ß ÇÑ´Ù.*/
						$(".euiSelectList", obj.visualElement).hide();
					}
				}
			}
		});
		
		$(self.visualElement).mouseleave(function() {
			$(".euiSelectList", self.visualElement).hide();
		});
	}
};

EuiSelect.prototype._setTitleListener = function() {
	var self = this;
	/*Select Box ±âº» Folding */
	if (this.template.isMouseOverFolding == null || !this.template.isMouseOverFolding) {
		/*Select Box ±âº» Folding */
		$(".euiSelectMain", self.visualElement).click(function() {
			for (var i=0; i<EuiManager.size(); i++) {
				var obj = EuiManager.get(i);
	
				if (obj.type == "SELECT") {
					if (self.euiIdx == obj.euiIdx) {
						$(".euiSelectList", self.visualElement).show();
					}
					else {
						/*ÀÚ½Å¿ÜÀÇ ´Ù¸¥ SelectBoxµéÀº Å¬¸¯½Ã list itemÀ» ´Ý¾ÆÁà¾ß ÇÑ´Ù.*/
						$(".euiSelectList", obj.visualElement).hide();
					}
				}
			}
		});
	}
};

EuiSelect.prototype._setItemListener = function() {
	var self = this;
	/*ItemÀ» Å¬¸¯ÇßÀ»¶§, ¿øº» SelectBoxÀÇ ÀÌº¥Æ®¸¦ Simulate*/
	$(".euiSelectList li", self.visualElement).click(function() {
		/*onchange¼º°Ý¿¡ ¸Â°Ô ´Ù¸¥ ItemÀ» Å¬·¢ÇßÀ» °æ¿ì¸¸*/
		if (self.formElement.prop("selectedIndex") != $(this).index()) {	
			self.formElement.prop("selectedIndex", $(this).index());
			self._setTitle();	
			/*¿øº» SelectBoxÀÇ ÀÌº¥Æ®¸¦ È£Ãâ*/
			self.formElement.change();
		}
		$(".euiSelectList", self.visualElement).hide();
	});
	
	/*itemOn Class¸¦ ÁöÁ¤ÇßÀ»½Ã ¸¶¿ì½º over È¿°ú*/
	if (this.template.itemOnClass != null) {
		$(".euiSelectList li", this.visualElement).mouseenter(function() {
			$(this).attr("class", self.template.itemOnClass);
		});
		
		$(".euiSelectList li", this.visualElement).mouseleave(function() {
			if ($(this).index() != $("option:selected", self.formElement).index()) {
				$(this).attr("class", "");
			}
		});
	}
};

