/*
 * Yann Ducrocq / Laurent Cerisier - La Cooperative de Communication (coop-com.net) - 15/07/08
 * 
 * requirements : ui.slider.js, ui.base.js
 */

var REGLETTE_WIDTH = 200;

function reglette(jqInputText) {
	/**
	 * TODO : les attributs devraient etre copies sur l'input et pas sur son label
	 */	
	 
	var value		= reglette_parseInt(jqInputText.val());	
	
	if ( $.trim(value.toString()) == '' || isNaN(value)) 
		value	= 0;	
		
	var jqLabel = jqInputText.prev('label');
	jqInputText.attr('data', jqLabel.attr('data'));
	jqInputText.attr('coefPow', jqLabel.attr('coefPow'));
	jqInputText.attr('coefReg', jqLabel.attr('coefReg'));	
	jqInputText.attr('unite', jqLabel.attr('unite'));		
	
	var data = jqInputText.attr('data');
	
	if (!data)  {
		jqInputText
			.keyup(function(){	reglette_refreshSlider($(this).parent().siblings('.ui-slider'), true);	})
			.blur(function() {	reglette_refreshSlider($(this).parent().siblings('.ui-slider'), true);	})
		;
	} else {
		jqInputText
			.keyup(function(){	return false;	})
			.keydown(function() { return false; })
	}
		
	jqInputText.val( reglette_formatNumber(value) );	
	
	//creation du span pour afficher l'unite
	if (! jqInputText.next().is('.reglette_unite') )
		jqInputText.parent().append('<span class="reglette_unite"></span>');	
		
	//recuperation de l'unite	
	reglette_refreshRegletteUnite(jqInputText);	
	
	if (!data) {
		//slider et evenements		
		jqInputText.parent().siblings('.ui-slider').each(function(){
			var v = reglette_refreshSlider($(this), true);
		}).mousemove(function(){
			reglette_refreshInput($(this));
		}).mouseup(function(){
			reglette_refreshInput($(this));
		}).mousedown(function(){
			reglette_refreshInput($(this));
		}).mouseover(function(){
			reglette_refreshSlider($(this), false);
		}).mouseout(function(){
			reglette_refreshInput($(this));
		});
	}else {
		//slider et evenements		
		jqInputText.parent().siblings('.ui-slider').each(function(){
			var v = reglette_refreshSliderWithData($(this), true);
		}).mousemove(function(){
			reglette_refreshInputWithData($(this));
		}).mouseup(function(){
			reglette_refreshInputWithData($(this));
		}).mousedown(function(){
			reglette_refreshInputWithData($(this));
		}).mouseover(function(){
			reglette_refreshSliderWithData($(this), false);
		}).mouseout(function(){
			reglette_refreshInputWithData($(this));
		});
	}
}

function reglette_refreshInput(jqUISlider) {		

	var jqInputText		= jqUISlider.siblings('.element').find('.budget');
	var coefPow			= parseInt(jqInputText.attr('coefPow'));
	var coefReg			= parseInt(jqInputText.attr('coefReg'));
	var coefReglette	= (coefReg - coefPow) / REGLETTE_WIDTH;
	
	var sliderPos		= Math.floor( coefReglette * REGLETTE_WIDTH * (jqUISlider.slider('value') / 100 ) ) + 10 + coefPow;
	var n				= sliderPos.toString().length; 
	var pown			= Math.pow(10,n-1);	
	var reste			= sliderPos % pown;		
		if ( reste == 0 ) {
			if (jqUISlider.slider('value') / 100 >0)
				reste = 1;
			else 
				reste=0;
		}	
	
	var iCurrentVal		= reste * Math.pow(10, Math.floor(sliderPos/Math.pow(10,n-1)) -1 ) ;
	
	jqInputText.val(
			reglette_formatNumber( Math.floor( parseInt(iCurrentVal,10) ) )
	);
		
	reglette_refreshRegletteUnite( jqInputText );
}

function reglette_refreshInputWithData(jqUISlider) {		

	var jqInputText		= jqUISlider.siblings('.element').find('.budget');
	var sData			= '0,'+ jqInputText.attr('data');
	var aData			= new Array();
	eval('aData = new Array(' + sData + ');');
	
	var iSliderPos		= jqUISlider.slider('value');
	var iCurrentVal		= aData[iSliderPos];
	
	jqInputText.val(
		reglette_formatNumber( Math.floor( parseInt(iCurrentVal,10) ) )
	);
		
	reglette_refreshRegletteUnite( jqInputText );
}

function reglette_refreshSliderWithData(jqUISlider, bMoveSlider) {	
	var jqInputText 	= jqUISlider.siblings('.element').find('.budget');	
	var value			= reglette_parseInt(jqInputText.val());	
	var sData			= '0,'+ jqInputText.attr('data');
	var aData			= new Array();
	eval('aData = new Array(' + sData + ');');
	
	jqUISlider.slider({	stepping: 1 });	
	
	if (bMoveSlider) {		
						
		for (var i=0;i<100;i++) {
			if (value>=aData[i])
				jqUISlider.slider('moveTo',i);
		}
	}	
}

function reglette_refreshSlider(jqUISlider, bMoveSlider) {	
	jqUISlider.slider({	stepping: 1	});	
	
	
	var jqInputText 		= jqUISlider.siblings('.element').find('.budget');	
	var value				= reglette_parseInt(jqInputText.val());	
	var coefPow				= parseInt(jqInputText.attr('coefPow'));
	var coefReg				= parseInt(jqInputText.attr('coefReg'));
	
	if (bMoveSlider) {		
						
		var ratioWidth 		= 	100/REGLETTE_WIDTH;
		var coefInterval	= 	REGLETTE_WIDTH / (coefReg - coefPow);
		var realValue		=	(value.toString().length - 1) * 10  
								+ 	parseInt(value.toString().substring(0,1)) 		
								- 	coefPow;					
								
		var calage			=	10 * ratioWidth;
		
		var sliderPos 		= 	Math.floor(
									ratioWidth * ( Math.floor(coefInterval * realValue) + 10 * ratioWidth )
								);	
								
		if (realValue==0)
			sliderPos = 0;						
										
		
		/*var sliderPos =  	Math.floor(100/REGLETTE_WIDTH)
								* ( 
										( REGLETTE_WIDTH / (coefReg - coefPow) ) 
									*	(  
												(value.length - 1) * 10  
											+ 	parseInt(value.substring(0,1)) 		
											- 	coefPow						
									  	) 
									+ (10 * (100/REGLETTE_WIDTH))  
								)								
						 ;	*/
						 
		jqUISlider.slider('moveTo',sliderPos);
	}	
}

function reglette_getUnite(n) {
	switch(n) {
		case '1' : return '€';
		case '2' : return 'mois';
		case '3' : return 'm²';
		case '4' : return 'ha';
		default	 : return '';
	}
}

function reglette_refreshRegletteUnite( jqInputText ) {
	var iUnite	= jqInputText.attr('unite');
	var sUnite 	= reglette_getUnite( iUnite );
	
	if ( reglette_parseInt(jqInputText.val()) >= 10000 && iUnite == '3' ) {
		sUnite = reglette_getUnite( '4' );
		jqInputText.val(Math.floor(reglette_parseInt(jqInputText.val())/10000));
	}
	
	jqInputText.css('right', (10 * sUnite.length) + 'px');
	jqInputText.siblings('.reglette_unite').text(sUnite);
	
}

function reglette_formatNumber(n) {	
	var ret=''; var n = n.toString();
	
	for ( var i=1; i<=n.length; i++ ) {
		ret = n.charAt(n.length-i) + ret;
				
		if (i%3 == 0)
			ret = ' ' + ret;
	}
	
	return $.trim(ret);
}

function reglette_parseInt(n){	
	n = $.trim(n);	
	n = parseInt(n.toString().replace(/\s/g,''));
	
	if (isNaN(n) || n=='')
		n=0;
	
	return n;
}

function reglette_beforeSubmit(formId) {
	$(formId).find('.budget').each(function() {
		var value = reglette_parseInt($(this).val());
		
		$(this).val(value);
	});
}

/*
 * uniquement en mode Affichage, quand il faut recuperer les unites
 * 
 */

function reglette_refreshUnits(jqLabel) {	
	var unite 	= reglette_getUnite( jqLabel.attr('unite') ) ;	
	var valeur 	= jqLabel.next('.info').text();
	
	if ( reglette_parseInt(valeur) >= 10000 && unite == '3' ) {
		unite = reglette_getUnite( '4' );
	}		
	
	if (valeur != '-')
		jqLabel.next('.info').text(valeur+' '+unite);
}


