/*
Sélection des marques/cylindrées/modèles pour la home Moto85
Copyright(c) 2009, Skalpel.
*/

/* 
Class : SKjs.SelectsHome
	Gestion des select marque /
	
Arguments : 
	marque {String} - Id du select marque
	cylindree {String} - Id du select cylindree
	modele {String} - Id du select modele
	options {object} - Objet Options
	
Options :
	indexToShow {Integer} - 
*/
SKjs.SelectsHome = new Class ({
	Implements: [Events, Options],
	options: {
		suffixDefault:		'defaut'
	},
	
	/*
	Property :
		Initialisation de la Class
	*/
	initialize: function(marque, cylindree, modele, options) {
		this.setOptions(options);
		
		this.dom = {};
		
		this.elements = {};
		
		this.initDom(marque, cylindree, modele);
		this.initEvents();
		this.initFx();
		
		this.initSelects('cylindree');
		
		if ($chk(this.dom.defautMarque) && $chk(this.dom.marque) && this.dom.defautMarque != '') {
			this.dom.defautMarque = '';
			this.dom.marque.fireEvent('change');
		}
	},
	
	initDom: function(marque, cylindree, modele) {
		this.dom.marque 			= $(marque);
		this.dom.cylindree			= $(cylindree);
		this.dom.modele 			= $(modele);
		
		if ($chk($(this.options.suffixDefault+marque))) { this.dom.defautMarque 		= $(this.options.suffixDefault+marque).value; }
		if ($chk($(this.options.suffixDefault+cylindree))) { this.dom.defautCylindree	= $(this.options.suffixDefault+cylindree).value; }
		if ($chk($(this.options.suffixDefault+modele))) { this.dom.defautModele 		= $(this.options.suffixDefault+modele).value; }
	},
	
	initEvents: function() {
        if ($chk(this.dom.marque)) {
            this.dom.marque.addEvent('change', this.swapCylindree.bind(this));
        }
        if ($chk(this.dom.cylindree)) {
            this.dom.cylindree.addEvent('change', this.swapModele.bind(this));
        }
	},
	
	initFx: function() {
		
	},
	
	initSelects: function(type) {
		if (type == 'cylindree' && $chk(this.dom.cylindree)) {
//			this.dom.cylindree.set('disabled', 'disabled');
//			this.dom.cylindree.value = '';
		}
		
		if (type == 'cylindree' || type == "modele") {
            if ($chk(this.dom.modele)) {
                this.dom.modele.set('disabled', 'disabled');
                this.dom.modele.set('value', '');
            }
		}
	},
	
	swapCylindree: function(e) {
		marque = this.dom.marque.value;
		
		this.initSelects('cylindree');
		
		if (marque != "") {
			marque = marque.replace(/\s+/g,'-');
			
	        new Request.JSON({
				url:        SKjs.baseURL+'sk/modules/modeles/cache/' + marque + '.php',
	            encoding:   SKjs.encoding,
	            onComplete:  this.onSwapCylindree.bind(this)

			}).get();
		} else {
			this.dom.marque.fireEvent('blur');
		}
	},
	
	onSwapCylindree: function(result) {
        this.elements = result;

        var defautCylindree = this.dom.defautCylindree != '' ? this.dom.defautCylindree : null;

        this.fillSelect(this.dom.cylindree, 'Toutes les cylindrées', this.elements, defautCylindree);

        if (this.dom.defautCylindree != '') {
            this.dom.defautCylindree = '';
            this.dom.cylindree.fireEvent('change');
        }

		this.dom.marque.fireEvent('blur');
	},
	
	swapModele: function(e) {
		cylindree = this.dom.cylindree.value;
		
		this.initSelects('modele');
		
		if ((cylindree != "") && (this.dom.marque.get('value') != '0')) {
			var defautModele = this.dom.defautModele != '' ? this.dom.defautModele : null;
			this.dom.defautModele = '';
			
			this.fillSelect(this.dom.modele, 'Tous les modèles', this.elements[cylindree], defautModele);
		}

		this.dom.cylindree.fireEvent('blur');
	},
	
	fillSelect: function(select, firstElement, elements, defaultSelected) {
        // Empty the list
        select.empty();

        // Adds default element
        select.adopt(new Element('option', {
            value: '',
            html: firstElement
        }));

        // Adds elements
        try {
	        elements.each(function(element) {
	            selected = defaultSelected == element.toLowerCase() ? true : false;
	        	this.addOption(select, element, element, selected);
	        }, this);
        } catch (e) {
	        for (element in elements) {
	            selected = defaultSelected == element.toLowerCase() ? true : false;
	        	this.addOption(select, element, element, selected);
	        }
        }
        
        select.erase('disabled');
    },
    
    addOption: function(select, name, value, selected) {
    	var attributs   = {
            value: value.toLowerCase(),
            html: name,
            selected: selected
        };
    	select.adopt(new Element('option', attributs));
    }
});
