/*
ExtendedSelect control
----------------
@author            Filatov Dmitry (alpha@design.ru)
@last_updated_date 30.10.2006
*/

function ExtendedSelect(
	oOldSelect,
	sData,
	sItemTagName,
	oOptions
	) {				
	
	this.oOptions = Common.Object.extend(
		oOptions,
		{			
			sExtendedSelectInputClassName     : 'extended-select-input',
			sExtendedSelectContainerClassName : 'extended-select',
			sRelativeClassName                : 'relative',			
			sInvisibleClassName               : 'invisible',
			sSelectedClassName                : 'selected',
			sHoveredClassName                 : 'hovered'
		}
	);	
	
	this.iSelectedIndex = oOldSelect.selectedIndex;
	
	this.oOldSelect = oOldSelect;	
	
	Common.Class.add(this.oOldSelect, this.oOptions.sInvisibleClassName);	
	Common.Class.add(this.oOldSelect.parentNode, this.oOptions.sRelativeClassName);
	
	this.oSelectInput = document.createElement('div');
	this.oSelectInput.innerHTML = 'test';
	
	Common.Class.add(this.oSelectInput, this.oOptions.sExtendedSelectInputClassName);
	
	this.oSelectContainer = document.createElement('div');
	this.oSelectContainer.innerHTML = sData;
	
	Common.Class.add(this.oSelectContainer, this.oOptions.sExtendedSelectContainerClassName);
	Common.Class.add(this.oSelectContainer, this.oOptions.sInvisibleClassName);	
	
	var aItems = this.oSelectContainer.getElementsByTagName(sItemTagName);
	
	this.aItems = [];
	
	for(var i = 0; i < aItems.length; i++) {
		this.aItems[i] = aItems[i];
	}
	
	Common.Class.add(this.aItems[this.iSelectedIndex], this.oOptions.sSelectedClassName);		
	
	this.updateSelectInput();
	
	this.oOldSelect.parentNode.appendChild(this.oSelectInput);
	this.oOldSelect.parentNode.appendChild(this.oSelectContainer);
	
	this.addHandlers();
	
}


ExtendedSelect.prototype = {

	addHandlers : function() {

		var oThis = this;
	
		for(var i = 0; i < this.aItems.length; i++) {
	
			this.aItems[i].iIndex = i;
	
			this.aItems[i].onclick = function() {
			
				oThis.select(this.iIndex);
		
			};
		
			this.aItems[i].onmouseover = function() {
			
				oThis.hover(this.iIndex);
		
			};
		
			this.aItems[i].onmouseout = function() {
			
				oThis.dehover(this.iIndex);
		
			};
			
		}
		
		this.oSelectInput.onclick = function(oEvent){
		
			var oEvent = oEvent || window.event;
		
			oThis.displaySelect();
			
			oEvent.cancelBubble = true;
		
		};
		
		Common.Event.add(
			document,
			'click',
			function() {
				oThis.hideSelect();
			}
		);
	
	},
	
	displaySelect : function() {
	
		Common.Class.remove(this.oSelectContainer, this.oOptions.sInvisibleClassName);
	
	},
	
	hideSelect : function() {
	
		Common.Class.add(this.oSelectContainer, this.oOptions.sInvisibleClassName);
	
	},

	select : function(iIndex) {			
			
		Common.Class.remove(this.aItems[this.iSelectedIndex], this.oOptions.sSelectedClassName);
		
		this.iSelectedIndex = iIndex;
		this.oOldSelect.selectedIndex = this.iSelectedIndex;						
		
		Common.Class.add(this.aItems[this.iSelectedIndex], this.oOptions.sSelectedClassName);				
		
		this.updateSelectInput();
		this.hideSelect();
	
	},
	
	updateSelectInput : function() {
	
		this.oSelectInput.innerHTML = this.oOldSelect.options[this.iSelectedIndex].firstChild.nodeValue;
	
	},
	
	hover : function(iIndex) {			
		
		Common.Class.add(this.aItems[iIndex], this.oOptions.sHoveredClassName);
	
	},
	
	dehover : function(iIndex) {			
		
		Common.Class.remove(this.aItems[iIndex], this.oOptions.sHoveredClassName);
	
	}

};
