 var Combo = new Class({
 	options: {
		onChange: Class.empty,
		onHover: Class.empty,
		onOut: Class.empty
	},
	initialize: function(el, options){
		this.eventKeyDown = this.keyboardListener.bindAsEventListener(this);
		this.setOptions(options);
		this.ul = el;
		this.lists = $$("#"+this.ul.id+" li");
		this.first = new Element('li', {'class': 'selector'}).injectTop(el);
		this.hidden = new Element('input', {'type': 'hidden','name': this.ul.id}).injectBefore(this.first);
		this.hidden.setStyle("display","none");
		$each(this.lists, function(el){
			el.addClass("lista");
			if(this.ul.title == el.getProperty("rel"))
				this.first.setHTML(el.innerHTML);
			el.setStyle("display","none");
			el.onmouseover = this.over.bind(this, [el]);
			el.onmouseout = this.out.bind(this, [el]);  
			el.onclick = this.click.bind(this, [el]);
		}, this);
		
		this.first.onclick = this.select.bind(this, [el]);
	},
	select: function(el){
		$each(this.lists,function(el){
			if(el.getStyle("display") == "none"){
				this.first.addClass("selectorOpen");
				el.setStyle("display","block");
				document['addEvent']('keydown', this.eventKeyDown);
			}else{
				this.first.removeClass("selectorOpen");
				el.setStyle("display","none");
				document['removeEvent']('keydown', this.eventKeyDown);
			}
		},this);
	},
	over: function(el){
		if(this.options.onHover(el))
			return;
		el.addClass("listOver");
	},
	out: function(el){
		if(this.options.onOut(el))
			return;
		el.removeClass("listOver");
	},
	click: function(el){		
		var changed = false;
		this.hidden.value = el.getProperty("rel");
		if(this.first.innerHTML != el.innerHTML)
			changed = true;
		this.first.setHTML(el.innerHTML);
		this.select();
		if(changed)
			this.change(el);
	},
	keyboardListener: function(event){
		switch (event.keyCode){
			case 27: 
			case 88: 
			case 67: 
				this.select(this); 
				break;
		}
	},
	change: function(el){
		this.options.onChange(el);		
	}
});
Combo.implement(new Events, new Options);
window.addEvent('domready',function(){
	$$('ul.combo').each(function(el){
		new Combo(el);
	});
});