/**
 * Apex Framework
 * 
 * @revised $LastChangedDate: 2008-12-02 11:42:30 +0800 (Tue, 02 Dec 2008) $
 * @version $Id: FormSelectDescription.js 6 2008-12-02 03:42:30Z eugim $
 */

ApexSelectDescription = Class.create({
	id : ''
	
   ,descElementId : ''

   ,selectEl : null
   
   ,descEl : null
   
   ,descAttributeName : 'apex:optiondescription'
   
   ,initialize : function(config){
   		
   		Object.extend(this, config);
   		
		this.selectEl = $(this.id);
		
		this.descElementId = this.descElementId || (this.id + '-DESCRIPTION-ELEMENT');
		this.descEl = $(this.descElementId);
		
		this._init();
		Object.extend(this.selectEl, this); //make available the public methods to the element
	}
	
   ,_init : function(event){
		
		//handle initial value
		var optionEl = this.selectEl.options[this.selectEl.selectedIndex],
			description = optionEl.attributes.getNamedItem(this.descAttributeName).value;
		this.descEl.update(description);
		
		//install listener	
		this.selectEl.observe('change', this._handleSelectChange.bindAsEventListener(this));
		this.selectEl.observe('focus', this._handleSelectChange.bindAsEventListener(this)); //when setting a value, be sure to call .focus next, so that the desc element will be updated
	}
	
	,_handleSelectChange : function(event){
		
		var el = Event.element(event),
	 		optionEl = el.options[el.selectedIndex];
		this.descEl.update(optionEl.attributes.getNamedItem(this.descAttributeName).value);
	}
	
   ,setValue : function(value){
   		
		this.selectEl.value = value;
		this.selectEl.focus();
	}
});