/*
*
*	Dipendenze:
*	
*		Script:
*			<script type="text/javascript" src="/Scripts/mootools.js"></script>
*			<script type="text/javascript" src="/Scripts/mootools-more.js"></script>
*
*/

var fakeSelect = new Class({
	Implements	: [Events,Options],
	options		: {
		'fromUL'	: '',
		'formField'	: '',
		'replace'	: true, // se true rimpiazza il name che corrisponde a quello passato, il primo input hidden name nell'area indicata.				
		// se viene passato un id sostituisce l'id indicato
		'get'	: {
			'tag'		: 'a',
			'filter'	: false // se impostato come true elimina dalla selezione il valore impostato
			//'erase'		: ['href'], // attributi da eliminare
		},

		'class'	: 'fakeSelect',	// div contenitore del tutto

		'onOpen'	: function(){},
		'onValue'	: function(){},
		'onClose'	: function(){},

		'closeTimeout': 3000, // msec alla chiusura automatica del select on mouseout
		'resetValue': null // valore di reset se diverso dal default
	},
	
	initialize	: function(opzioni){
		this.setOptions(opzioni);
// 
// 		this.addEvent('onValue', opzioni['onValue']);
// 		this.addEvent('onClose', opzioni['onClose']);
// 		this.addEvent('onOpen', opzioni['onOpen']);

		
		this.mainDiv = new Element('div', { 'class' : 'select ' + this.options['class'] });
		this.mainDiv.store('fakeSelect', this);

		this.valueDiv = new Element('div', { 'class' : 'selector' }).inject(this.mainDiv);
		this.valueDivLeft = new Element('div', { 'class' : 'left' }).inject(this.valueDiv);
		this.valueDivCenter = new Element('div', { 'class' : 'center' }).inject(this.valueDiv);
		this.valueDivRight = new Element('div', { 'class' : 'right' }).inject(this.valueDiv);
		this.optionsDiv	= new Element('div', { 'class' : 'options' }).inject(this.mainDiv);

		this.optionsTween = new Fx.Morph(this.optionsDiv);
		
		this.option_elements = new Array();


		this.takeStats();
	}
});

fakeSelect.implement({
	takeStats : function(){
		var ul_element = $(this.options['fromUL']);
		var default_value = ul_element.getAttribute('value');
		
		this.options.resetValue = (this.options.resetValue) ? this.options.resetValue : default_value;

		var a_elements = ul_element.getElements('li ' + this.options['get']['tag']);
		a_elements.each(function(elem, idx) {
			var value = elem.getAttribute('value');
			
			if (this.options['get']['erase']) {
				this.options['get']['erase'].each(function(attr){
					elem.erase(attr);
				});
			}
			
			var div_option = new Element('div');
			div_option.addClass('opt');
			div_option.adopt(elem);
			this.option_elements.push(div_option);
			this.optionsDiv.adopt(div_option);
			
			if(!elem.hasClass('nullelement'))
			{
				div_option.addEvent('click', function(ev) {
					this.setValue(elem);
				}.bind(this));
				
				if (default_value == value){
					this.valueDivCenter.set('text', elem.get('text'));
					this.option_elements[idx].addClass('selected');
				}
			}
		}.bind(this));

		this.mainDiv.injectBefore(ul_element);
		
 		this.optionsDiv.setStyles({'height' : '0px', 'opacity' : '0.0'});
		
		this.valueDiv.addEvent('click', function() {
			if (this.optionsDiv.getStyle('height').toInt() == 0){
					this.apriSelect();
					this.chiudiAltri();
				}
			else
				{this.chiudiSelect()}

		}.bind(this));
		
		var timer = 0;
		this.mainDiv.addEvent('mouseleave', function() {
			timer = this.chiudiSelect.delay(this.options.closeTimeout, this);
			}.bind(this));

		this.mainDiv.addEvent('mouseenter', function() {
			$clear(timer);
			}.bind(this));			
	
		this.initInput(ul_element);
		
		ul_element.destroy();
	},
	
	initInput : function(ul_element) {
		var inputName = ul_element.get('name');
		this.input = undefined;
		
		if(inputName != '')
		{
//			this.input = new Element('input', { 'type' : 'hidden', 'name' : inputName, 'value' : ul_element.getAttribute('value') });
			this.input = new Element('input', { 'type' : 'hidden', 'name' : inputName});
			if (ul_element.getAttribute('value') != '') {
				this.input['value'] = ul_element.getAttribute('value');
			}
			$(this.options['formField']).adopt(this.input);
			
			//$(this.options['formField']).inject(this.input);
		}
	},
	
	setValue : function(elem){
		var value = elem.getAttribute('value');
		
		this.resetClasses(elem.getParent('div.opt'));
		
		this.valueDivCenter.set('text', elem.get('text'));
		if (this.options['formField'] != ''){
			this.sendData(value);
		}
		this.fireEvent('onValue', [value, elem]);
		this.chiudiSelect();
	},
	
	sendData : function(value){
		this.input['value'] =  value;
	},
	
	resetClasses : function(elem){
		this.option_elements.each(function(option_element) {
			option_element.removeClass('selected');
		});

		if (elem){
			elem.addClass('selected');
		}
	},
	
	apriSelect : function(){
		var max_height = 0;
		for(var i=0; i<this.option_elements.length; i++)
			max_height += this.option_elements[i].scrollHeight;
		
		this.optionsTween.start({
			'height' : max_height,
			'opacity' : '1.0'
		});
		this.fireEvent('onOpen');
	},
	
	chiudiSelect : function(){
		this.optionsTween.start({
			'height' : '0px',
			'opacity' : '0.0'
		});
		this.fireEvent('onClose');

	},
	
	chiudiAltri : function(){
		$$('.selector').each(function(selector) {
			if (selector != this.valueDiv) {
				$(selector).getParent().retrieve('fakeSelect').chiudiSelect();
			}
		}.bind(this));
	},
	
	reset : function() {
		$each(this.option_elements, function (element) {
			var child = $(element).getChildren('a')['0'];
			if (child.getAttribute('value') == this.options.resetValue) {
				this.setValue(child);
			}			
		}.bind(this));
	}
	
});