// JavaScript Document
var Resizer = new Class({
						   
			Implements:[Options, Events],
			
			options:{
				expanded:false,
				maxWidth:500,
				maxHeight:0,
				boutton:false,
				contener:Element,
				element:Element,
				textClass:'.texte',
				minWidth:400,
				scrollBar : false
			},
			
			initialize: function(options){
					
					
					this.setOptions(options);
					if(this.options.scrollBar)this.scrollBar = this.options.scrollBar;
					this.maxWidth = this.options.maxWidth;
					this.maxHeight = this.options.maxHeight;
					this.boutton = this.options.boutton;
					this.contener = this.options.contener;
					this.minWidth = this.options.minWidth
					this.element = this.options.element;
					this.elements = this.element.getAllNext('.element');
					this.handler = this.element.getNext('.handler_v');
					this.handler.setStyles({'left': this.element.getCoordinates().left-26+this.element.getCoordinates().width, top:0});
					this.timer = null;
					
					this.texte = this.element.getElement(this.options.textClass);
					this.texte.store('fsize', this.texte.getStyle('font-size').toInt());
					this.texte.store('lheight', this.texte.getStyle('line-height').toInt());
					
						
					this.texte.getElements('div').each(function(el){
						el.store('fsize', el.getStyle('font-size').toInt());
						el.store('lheight', el.getStyle('line-height').toInt());
						el.store('margin-top', el.getStyle('margin-top').toInt());
						el.store('margin-bottom', el.getStyle('margin-bottom').toInt());
						el.store('padding-top', el.getStyle('padding-top').toInt());
						el.store('padding-bottom', el.getStyle('padding-bottom').toInt());
						el.store('border-width', el.getStyle('border-width').toInt());
					});
					this.marginText = this.element.getStyle('width').toInt()-this.texte.getStyle('width').toInt();
				
					this.expanded = false;
					
					
					if(this.boutton){
						this.boutton.addEvent('click', function(){
							this.expand2reduce();
						}.bind(this));
					}
					
					this.makeDrag();
					if(this.options.expanded){
						this.expand2reduce();
					}
					
			},
			
			expand2reduce : function(){
				
				//CHANGE: nouvelle largeur/ancienne largeur. Tous les éléments doivent s'adapter selon cette variable.
				if(!this.expanded)
					var deplacement = (this.maxWidth-this.element.getStyle('width').toInt());
				else
					var deplacement = (this.minWidth-this.element.getStyle('width').toInt());
				//
				
				
				this.expanded = !this.expanded;
				
			
				var myEffect = new Fx.Tween(this.handler, {
					duration:500
				});
				
				myEffect.addEvent('onComplete', function(){
					$clear(this.timer);
					this.resize();
				}.bind(this));
				this.initX = this.handler.getStyle('left').toInt();
				
				myEffect.start('left', this.handler.getStyle('left').toInt()+deplacement);
				this.timer = this.resize.periodical(1, this);
				
			},
			
			makeDrag : function(){
				this.dragHandler = this.handler.makeDraggable({
					snap:0,
					limit:{y:[0,0]},
					
					onStart : function(handler){
						//this.dragHandler.options.limit.x = [this.handler.getStyle('left').toInt(),this.handler.getStyle('left').toInt()+this.maxWidth];
						
						this.initX = handler.getStyle('left').toInt();
					}.bind(this),
					
					onDrag: function(){
					
						this.resize();
						this.handler.setStyle('left', this.element.getPosition(this.contener).x+this.element.getCoordinates(this.contener).width);
						
					}.bind(this)
				});
												
			},
			
			resize:function(){
						
						var deplacement = this.handler.getStyle('left').toInt()-this.initX;
						this.initX = this.handler.getStyle('left').toInt();
						var oldWidth = this.element.getStyle('width').toInt();
						
						var newWidth = oldWidth + deplacement;
						if(newWidth > this.maxWidth){
							newWidth = this.maxWidth;
							deplacement = newWidth-oldWidth;
						}else if(newWidth < this.minWidth){
							newWidth = this.minWidth;
							deplacement = newWidth-oldWidth;
						}
						
						if(newWidth > this.maxWidth/2)
							this.expanded = true;
						else
							this.expanded = false;
						
						var change = newWidth/oldWidth;
						this.contener.setStyle('width',this.contener.getStyle('width').toInt()+deplacement);
						this.handler.getAllNext('.handler_v').each(function(el){
				
							el.setStyle('left', el.getStyle('left').toInt()+deplacement);
						});
						
						this.element.setStyles({
							
							width: newWidth
					
						});
						
						//TYPO ADAPT
						this.texte.store('lheight', this.texte.retrieve('lheight')*change);
						this.texte.store('fsize', this.texte.retrieve('fsize')*change);
						
						
						this.texte.setStyles({
							
							'font-size':this.texte.retrieve('fsize')*change+'px',
							'line-height':this.texte.retrieve('lheight')*change+'px',
							width:newWidth-this.marginText
					
						});
						
						this.texte.getElements('div').each(function(el){
							var realChange = el.retrieve('fsize')/el.retrieve('fsize')*change;
							el.store('lheight', el.retrieve('lheight')*change);
							el.store('fsize', el.retrieve('fsize')*change);
							el.store('margin-top', el.retrieve('margin-top')*change);
							el.store('margin-bottom', el.retrieve('margin-bottom')*change);
							el.store('padding-top', el.retrieve('padding-top')*change);
							el.store('padding-bottom', el.retrieve('padding-bottom')*change);
							el.store('border-width', el.retrieve('border-width')*change);
							el.setStyles({
								'margin-top':el.retrieve('margin-top')*change+'px',
								'margin-bottom':el.retrieve('margin-bottom')*change+'px',
								'padding-top':el.retrieve('padding-top')*change+'px',
								'padding-bottom':el.retrieve('padding-bottom')*change+'px',
								'font-size':el.retrieve('fsize')*change+'px',
								'line-height':el.retrieve('lheight')*change+'px',
								'border-width':el.retrieve('border-width')*change+'px'
							});
						});
						
					
					 
						if(this.maxHeight > 0 && this.texte.getSize().y >= this.maxHeight){
							
							this.texte.setStyle('height', this.maxHeight);
							//this.texte.setStyle('height', this.element.getStyle('height')+this.texte.getScrollSize().y-this.element.getSize().y);
						}	
						this.updateScrollBar();
						
					
			},
			
			updateScrollBar:function(){
				this.scrollBar.update();
			}
			
		
			


			
});
	
	
	
			

	

	
	
	




/*	var myResizerElem = new Fx.Elements($$('.tween_elem'),{
	
	
		duration: 250,						   
										   
										   });
		
		myResizerElem.start({
				
				'0':{
					
					'width':771
				},
				
				'1':{
					
					'width':732,
					'font-size':37,
					'line-height':37
				},
				
				'2':{},
				
				
				'3':{
					
					'left':758
				},
				
				'4':{ 'left':771},
		
		});								   
	};
	
var  resizeUnlarge = function(){

	var myResizerElem = new Fx.Elements($$('.tween_elem'),{
										   
		duration: 250,							   
										   
										   });
		
		myResizerElem.start({
				
				'0':{
					
					'width':250
				},
				
				'1':{
					
					'width':211,
					'font-size':12,
					'line-height':12
				},
				
				'2':{},
				
				
				'3':{
					
					'left':237
				
				},
				
				'4':{ 'left':250},
		
		});								   
	}
	
*/
	

