		var toggleHash = new Array(20);
		Effect.MoveAndReSize = Class.create();
		Object.extend(Object.extend(Effect.MoveAndReSize.prototype, Effect.Base.prototype), {
			initialize: function(element) {
		
				this.element = $(element);        
				if(!this.element) throw(Effect._elementDoesNotExistError);
		
				// AVAILABLE OPTIONS (all is optional) 
				//{opacity: 0.2 ,move:['all:200:300','x:500','y:400','fixed:100:100'], resize: ['all:200:300','y:400','x:500','fixed:100:100'], toggleIndex:1...x}
				var options = Object.extend({move:[], resize: []}, arguments[1] || {});
		
				var goMove =( options.move.length > 0);
				var goResize = (options.resize.length > 0);
				var goToggle = (options.toggleIndex!=null);
				var goOpacity = (options.opacity!=null);
		
				var dimension = Element.getDimensions(this.element);
				var position = Position.positionedOffset(this.element);
		
				if (goToggle) 
				{
					originalElement = toggleHash[options.toggleIndex];
		
					// Prevent mutliclic on same object
					if (originalElement!=null)        
						if (originalElement.usedNow==true) return;
							else originalElement.usedNow=true;
		
					this.goToggle(options,dimension,position);
				}
		
				options.addToSize = new Object();
		
				if (goResize)
					this.goResize(options,dimension);    
		
				if(goOpacity)
					this.goOpacity(options);
		
				if (goMove)    
					this.goMove(options,position);
		
				if (goResize || goOpacity) 
					this.start(options);
			},
		
			  initToggle: function(index){
				if (index!=null)
					toggleHash[index].usedNow=false;
			},
		
			goToggle: function(options,dimension,position){
		
				index = options.toggleIndex
				originalElement = toggleHash[index];
		
				if (originalElement==null)
				{            
					toggleHash[index] = new Array(dimension,position,this.element.getStyle('opacity'),this.element.getStyle('z-index'));
				}
				else if (!toggleHash[index].isInitPosition)
				{
					options.resize = new Array('fixed:'  + originalElement[0].width +':'+originalElement[0].height);
					options.move   = new Array('fixed:'  + originalElement[1][0] +':'+originalElement[1][1]);
					options.opacity= originalElement[2];
		
					this.element.style.zIndex = originalElement[3];
					toggleHash[index].isInitPosition = true;
				}
				else toggleHash[index].isInitPosition = false;
			},  
		
			goResize: function(options,dimension) {
		
				this.originalSize = new Object();            
		
				options.resize.each( 
						function(szd) { 
							tmp = szd.split(':');
							if ((tmp[0]=='all') || (tmp[0]=='y')){
								options.addToSize.changeY = true;
								options.addToSize.y = parseInt(((tmp[0]=='y')?tmp[1]:tmp[2]));
							}
		
							if ((tmp[0]=='all') || (tmp[0]=='x')){
								options.addToSize.changeX = true;
								options.addToSize.x = parseInt(tmp[1]);
							}
		
							if (tmp[0]=='fixed')  {
								options.addToSize.changeX = true;
								options.addToSize.changeY = true;
		
								options.addToSize.x = parseInt(tmp[1]) - dimension.width;                         
								options.addToSize.y = parseInt(tmp[2]) - dimension.height;             
							}
						} 
				 );
		
				this.originalSize.x = dimension.width;
				this.originalSize.y = dimension.height;
		
			},  
		
			goMove: function(options,position) {
				var x = 0;
				var y = 0;
				var duration = 0.3;
				options.move.each( 
						function(szd) { 
							tmp = szd.split(':');
		
							if ((tmp[0]=='all') || (tmp[0]=='y')){y = parseInt(((tmp[0]=='y')?tmp[1]:tmp[2]));}                
							if ((tmp[0]=='all') || (tmp[0]=='x')){x = parseInt(tmp[1]);}
		
							if (tmp[0]=='fixed')  {
								x = parseInt(tmp[1]) - position[0];                     
								y = parseInt(tmp[2]) - position[1]; 
							}
						} 
				 );
		
				new Effect.Move(this.element,{x:x,y:y, afterFinish: this.initToggle(options.toggleIndex)});
			},
		
			goOpacity: function(options){
				this.originalOpacity = parseFloat(this.element.getStyle('opacity'));
				options.changeOpacity = true;
				options.addTOpacity = parseFloat(options.opacity) - this.originalOpacity;
			},
		
			setOpacity: function(opacity) {
				this.element.style.opacity =''+opacity;
				this.element.style.filter = 'alpha(opacity='+(opacity*100)+')';
			},
		
			setup: function() {
				if(!this.element.visible()) { this.cancel(); return; }
			},
		
			update: function(position) {
		
				if(this.options.addToSize.changeX)
				  this.element.setStyle({width: this.originalSize.x+(this.options.addToSize.x*position)+'px'});
		
				if(this.options.addToSize.changeY)   
				  this.element.setStyle({height: this.originalSize.y+(this.options.addToSize.y*position)+'px'});
		
				if(this.options.changeOpacity)   
				  this.setOpacity(this.originalOpacity+(this.options.addTOpacity*position));
		
			},
		
			finish: function(){
		
				if(this.options.addToSize.changeX)
				  this.element.setStyle({width: this.originalSize.x+this.options.addToSize.x+'px'});
		
				if(this.options.addToSize.changeY)  
				  this.element.setStyle({height: this.originalSize.y+this.options.addToSize.y+'px'});
		
				if (this.options.toggleIndex!=null) 
					toggleHash[this.options.toggleIndex].usedNow=false;
		
				if(this.options.changeOpacity)   
				{
				  this.setOpacity(this.originalOpacity+this.options.addTOpacity);
				  // Initialize z-index if layer is hidden (opacity = 0.0)                        
		
				  if((this.originalOpacity+this.options.addTOpacity)==0.0)
					this.element.style.zIndex = 1;
					alert(this.element.width);
				}
		
			}
		});