/**
*	Classes permettant de gérer le catalogue sur le site du client
*	Fait partie de la librairie à implanter sur le site du client
*
*	@date 2010-02-04
*	@author IRCF
*/
var Catalogue = {};
Catalogue.Parametres = new Class({
	Implements: Options,
	options: {
		codeArticle : null,			
		url : '/loader.php',		// URL pour le programme Ajax
		prix : 'prix',				// Elément pour afficher le prix
		parametres : '.parametre select'	// Eléments SELECT correspondants aux paramètres de l'article
	},
	initialize: function(options){
		this.setOptions(options);
		this.options.parametres = $$(this.options.parametres);
		this.options.prix = $(this.options.prix);
		// A chaque modification d'un paramètre on met à jour le prix
		this.options.parametres.addEvent('change',function(){
			this.update();
		}.bind(this));
	},
	// On effectue une requête en Ajax pour recalculer le prix d'un produit
	update : function(){
		var data = "";
		this.options.parametres.each(function(e,i){
			if (i!=0) data += ",";
			data += e.value;
		});
		new Request.HTML({
			method : 'post',
			url : this.options.url,
			data : {
				'data' : 'class=combinaison&method=calculerPrix&param[0]='+data+'&param[1]='+this.options.codeArticle+'&param[2]=1'
			},
			onSuccess : function(responseTree, responseElements, responseHTML, responseJavaScript) {
				this.options.prix.innerHTML = "Prix TTC : " + responseHTML + " EUR";
			}.bind(this)
		}).send();
	}
});

Element.implement({
    toJSON: function(){
        var json = {};
        this.getElements('input, select, textarea', true).each(function(el){
            if (!el.name || el.disabled || el.type == 'submit' || el.type == 'reset' || el.type == 'file') return;
            var value = (el.tagName.toLowerCase() == 'select') ? Element.getSelected(el).map(function(opt){
                return opt.value;
            }) : ((el.type == 'radio' || el.type == 'checkbox') && !el.checked) ? null : el.value;
            $splat(value).each(function(val){
                if (typeof val != 'undefined') {
                    json[el.name] = val;
                }
            });
        });
        return json;
    }
});

Catalogue.Caddie = new Class({
	Implements: Options,
	options: {
		url: 'http://pro.'+document.domain.replace('www.','')+'/commerce/caddie.xml.php',
		codeCatalogue: null,
		xsl: 'http://'+document.domain+'/xsl/caddie.xsl',
		addButtons: '.add',
		deleteButtons: '.delete',
		onAdd : null,
		onAddComplete: null,
		onDelete : null,
		onDeleteComplete: null
	},
	initialize : function(element,options){
		this.element = $(element);
		this.setOptions(options);
		$$(this.options.addButtons).each(function (button){
			button.addEvent('click',function(event){
				if (this.options.onAdd) this.options.onAdd.run(button);
				event.stop();
				if (button.tagName=="INPUT"){
					data = button.getParent('form').toJSON();
				}else{
					data = {codeArticle:button.getProperty('rel')};
				}
				this.update(data,this.options.onAddComplete,button);
			}.bind(this));
		}.bind(this));
		this.update(null,null,null);
	},
	update : function(data,callback,button){
		new Request.JSONP({
			url: this.options.url,
			data: $extend({codeCatalogue:this.options.codeCatalogue,xsl:this.options.xsl},data),
			onComplete: function(_data){
				if (callback) callback.run(button);
				this.element.innerHTML = _data;
				this.element.getElements(this.options.deleteButtons).each(function (button){
					button.addEvent('click',function(event){
						if (this.options.onDelete) this.options.onDelete.run(button);
						event.stop();
						this.update({numLigne:button.getProperty('rel')},this.options.onDeleteComplete,button);
					}.bind(this));
				}.bind(this));
			}.bind(this)
		}).send();
	}
});
