budgetwidget = Class.create({
	initialize: function(budgetwidgetid) {
		this.elem    = $(budgetwidgetid);
		if ( this.elem!= null ) this.init();		
	},
	
	refresh: function(zmin,zmax) {
		var zdiv = this.elem.down('div.cssclass_tool') ;
		var zal  = zdiv.down('a.cssclass_lslider') ;
		var zar  = zdiv.down('a.cssclass_rslider') ;
		
		var zmin_price = parseFloat(this.elem.down('input[name=price_min]').value);
		var zmax_price = parseFloat(this.elem.down('input[name=price_max]').value);
		var zmax_distance = zdiv.getWidth()-4-zar.getWidth()-zal.getWidth();
		
		var zmin_x = 1;
		var zmax_x = zdiv.getWidth()-2-zar.getWidth()-1;
		
		var zcoef = zmax_distance/(zmax_price-zmin_price);
		
		var zal_left ;
		var zar_left ;
		zmin <= zmin_price ? zal_left = zmin_x : zal_left = Math.round(zcoef*(zmin-zmin_price));
		zmax >= zmax_price ? zar_left = zmax_x : zar_left = Math.max(Math.round(zcoef*(zmax-zmin_price))+zal.getWidth()+1,zal_left+zal.getWidth()+1);
		
		zal.setStyle({left: zal_left+'px'});
		zdiv.down('div.cssclass_lbackground').setStyle({width: zal_left+'px'});
		
		zar.setStyle({left: zar_left+'px'});
		zdiv.down('div.cssclass_rbackground').setStyle({width: (zdiv.getWidth()-2-zar.getWidth()-zar_left)+'px'});
		
		this.elem.down('div.cssclass_min').innerHTML = zmin + '€';
		this.elem.down('div.cssclass_max').innerHTML = zmax + '€';
		
		this.elem.down('input[name=min_cur]').value = zmin;
		this.elem.down('input[name=max_cur]').value = zmax;
	},
	
	reset: function(zindex) {
		var zmin_price = parseFloat(this.elem.down('input[name=price_min]').value);
		var zmax_price = parseFloat(this.elem.down('input[name=price_max]').value);
		
		ecommerce.budgetwidget.refresh(zmin_price,zmax_price);
	
		ecommerce.browsing.refreshForm(zindex,this.elem,'x','',false,false,false);
		ecommerce.browsing.refreshForm(zindex,this.elem,'y','',false,false,false);
	},
	
	init: function() {
		new Draggable(this.elem.down('a.cssclass_lslider'), {
			constraint: 'horizontal',
			onStart: function() {
				var zcontainer = ecommerce.budgetwidget.elem ;
				zcontainer.down('input[name=min_before]').value = zcontainer.down('div.cssclass_min').innerHTML.gsub(/[^0-9.]/,'');
			},
			onEnd: function() {
				var zcontainer = ecommerce.budgetwidget.elem ;
				var zal  = zcontainer.down('div.cssclass_tool').down('a.cssclass_lslider') ;
				
				var new_min    = zcontainer.down('input[name=min_cur]').value;
				var old_min    = zcontainer.down('input[name=min_before]').value;
				var zmin_price = parseFloat(zcontainer.down('input[name=price_min]').value);
				
				var submitit = false;
				if (new_min!=old_min) {
					submitit = true ;
				}
		
				if (new_min==zmin_price) {
					new_min = '';
				}
				ecommerce.analytics.trackPage('/ficheproduit/outils/budget');
				ecommerce.browsing.refreshForm('k',zal,'x',new_min,true,false,submitit);
			},
			snap: function(x,y) {
				var zcontainer = ecommerce.budgetwidget.elem ;
				var zdiv = zcontainer.down('div.cssclass_tool') ;
				var zal  = zdiv.down('a.cssclass_lslider') ;
				var zar  = zdiv.down('a.cssclass_rslider') ;
				var zbg  = zdiv.down('div.cssclass_lbackground') ;
				
				var zmin_x = 1 ;
				var zmax_x = zar.offsetLeft-1-zal.getWidth();
				
				var zmin_price    = parseFloat(zcontainer.down('input[name=price_min]').value);
				var zmax_price    = parseFloat(zcontainer.down('input[name=price_max]').value)-1;
				var zmax_distance = zdiv.getWidth()-4-zar.getWidth()-1-zal.getWidth();
				
				var zmax_cur      = parseFloat(zcontainer.down('input[name=max_cur]').value)-1;
				
				var zx    = x;
				var zcoef = (zmax_price-zmin_price)/zmax_distance;
				
				var new_val = zmin_price+zcoef*zx;
				
				if (x>=zmax_x) {
					x = zmax_x;
					new_val = zmax_cur;
				}
				if (x<=zmin_x) {
					x = zmin_x;
					new_val = zmin_price;
				}
				new_val = Math.round(new_val);
				zbg.setStyle({ width: x+'px' });
				zcontainer.down('input[name=min_cur]').value = new_val;
				zcontainer.down('div.cssclass_min').innerHTML = new_val+'€' ;
				return [x,y];
			}
		});
		new Draggable(this.elem.down('a.cssclass_rslider'), {
			constraint: 'horizontal',
			onStart: function() {
				var zcontainer = ecommerce.budgetwidget.elem ;
				zcontainer.down('input[name=max_before]').value = zcontainer.down('div.cssclass_max').innerHTML.gsub(/[^0-9.]/,'');
			},
			onEnd: function() {
				var zcontainer = ecommerce.budgetwidget.elem ;
				var zal  = zcontainer.down('div.cssclass_tool').down('a.cssclass_rslider') ;
				
				var new_max    = zcontainer.down('input[name=max_cur]').value;
				var old_max    = zcontainer.down('input[name=max_before]').value;
				var zmax_price = parseFloat(zcontainer.down('input[name=price_max]').value);
				
				var submitit = false;
				if (new_max!=old_max) {
					submitit = true ;
				}
				
				if (new_max==zmax_price) {
					new_max = '';
				}
				ecommerce.analytics.trackPage('/ficheproduit/outils/budget');
				ecommerce.browsing.refreshForm('k',zal,'y',new_max,true,false,submitit);
			},
			snap: function(x,y) {
				var zcontainer = ecommerce.budgetwidget.elem ;
				var zdiv = zcontainer.down('div.cssclass_tool') ;
				var zal  = zdiv.down('a.cssclass_lslider') ;
				var zar  = zdiv.down('a.cssclass_rslider') ;
				var zbg  = zdiv.down('div.cssclass_rbackground') ;
		
				var zmin_x = zal.offsetLeft+zal.getWidth()+1;
				var zmax_x = zdiv.getWidth()-2-zar.getWidth()-1;
		
				var zmin_price    = parseFloat(zcontainer.down('input[name=price_min]').value)+1;
				var zmax_price    = parseFloat(zcontainer.down('input[name=price_max]').value);
				var zmax_distance = zdiv.getWidth()-4-zar.getWidth()-1-zal.getWidth();
				
				var zmin_cur      = parseFloat(zcontainer.down('input[name=min_cur]').value)+1;
				
				var zx    = x-zal.getWidth()-1;
				var zcoef = (zmax_price-zmin_price)/zmax_distance;
				
				var new_val = zmin_price+zcoef*zx;
		
				if (x>=zmax_x) {
					x = zmax_x;
					new_val = zmax_price;
				}
				if (x<=zmin_x) {
					x = zmin_x;
					new_val = zmin_cur;
				}
				new_val = Math.round(new_val);
				zbg.setStyle({ width: (zmax_x-x)+'px' });
				zcontainer.down('input[name=max_cur]').value = new_val;
				zcontainer.down('div.cssclass_max').innerHTML = new_val+'€' ;
				return [x,y];
			}
		});
	}
});