﻿fast.register("fadeOut", function(mcfg) {
	var self = this;
	mcfg = mcfg ? mcfg : {};
	var cfg = { onready : mcfg.onready ? mcfg.onready : null };
	self.__fade = new Array( 100,90,80,70,60,50,40,30,20,10,0 );
	var interval = setInterval( function() {
		if( self.__fade ) {
			self.style.opacity = self.__fade[0]/100;	
			self.style.filter = "alpha(opacity="+self.__fade[0]+")";				
			self.__fade.splice(0,1);
			if( self.__fade.length == 0 ) {
				self.__fade = null;
				clearInterval(interval);
				if( cfg.onready ) {
					cfg.onready();
				};
			}
		} else {
			clearInterval(interval);
		}
	}, 20 );
	return this;
});

fast.register("fadeIn",function(mcfg) {
	var self = this;
	mcfg = mcfg ? mcfg : {};
	var cfg = { onready : mcfg.onready ? mcfg.onready : null };
	self.__fade = new Array( 0,10,20,30,40,50,60,70,80,90,100 );
	var interval = setInterval( function() {				
		if( self.__fade ) {
			self.style.opacity = self.__fade[0]/100;	
			self.style.filter = "alpha(opacity="+self.__fade[0]+")";				
			self.__fade.splice(0,1);
			if( self.__fade.length == 0 ) {
				self.__fade = null;
				clearInterval(interval);
				if( cfg.onready ) {
					cfg.onready();
				};
			}
		} else {
			clearInterval(interval);
		}
	}, 20 );
	return this;
});

fast.register("slide",function(mcfg) {
	var self = this;
	mcfg = mcfg ? mcfg : {};
	var cfg = { x : mcfg.x, y : mcfg.y };
	var pos = new Array();
	var startx = this.pos().x;
	var starty = this.pos().y;
	var diffx = cfg.x-startx;
	var diffy = cfg.y-starty;
	for( var i = 0; i < 15; i++ ) {
        pos.push( { x : (diffx * Math.cos(i/10)), y : (diffy * Math.cos(i/10)) });        
    }
    pos.reverse(); 
      
    this.__pos = pos; 
	var interval = setInterval( function() {				
		if( self.__pos ) {
			self.style.left = Math.floor(startx+self.__pos[0].x)+"px";	
			self.style.top = Math.floor(starty+self.__pos[0].y)+"px";	
			self.__pos.splice(0,1);
			if( self.__pos.length == 0 ) {
				self.__pos = null;
				clearInterval(interval);
				if( cfg.onready ) {
					cfg.onready();
				};
			}
		} else {
			clearInterval(interval);
		}
	}, 20 );
	return this;
});

fast.register("resize",function(mcfg) {
	var self = this;
	mcfg = mcfg ? mcfg : {};
	var cfg = { width : self.offsetWidth, height : self.offsetHeight, align : "left", valign : "top" };
	for(var i in mcfg){cfg[i]=mcfg[i]}; 
	var size = new Array();
	var f = new Array(5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100);
	
	var px = self.pos().x;
	var py = self.pos().y;
	var sw = self.offsetWidth;
	var sh = self.offsetHeight;
	var dw = cfg.width - sw;
	var dh = cfg.height - sh;
	for( var i = 0; i < f.length; i++ ) {
	    size.push({ w : ((f[i]/100) * dw), h : ((f[i]/100) * dh) });
	}
	
    this.__size = size; 
	var interval = setInterval( function() {				
		if( self.__size ) {
			self.style.width = Math.floor(sw+self.__size[0].w)+"px";
			self.style.height = Math.floor(sh+self.__size[0].h)+"px";
			if( cfg.align == "center" ) {
			    self.style.left = Math.floor( px - (self.__size[0].w)/2) + "px";
			}
			if( cfg.align == "right" ) {
			    self.style.left = Math.floor( px - (self.__size[0].w)) + "px";
			}
			if( cfg.valign == "center" ) {
			    self.style.top = Math.floor( py - (self.__size[0].h)/2) + "px";
			}
			if( cfg.valign == "bottom" ) {
			    self.style.top = Math.floor( py - (self.__size[0].h)) + "px";
			}
			self.__size.splice(0,1);
			if( self.__size.length == 0 ) {
				self.__size = null;
				clearInterval(interval);
				if( cfg.onready ) {
					cfg.onready();
				};
			}
		} else {
			clearInterval(interval);
		}
	}, 20 );
	return this;
});


/*
function rollUp(self) {
    var h = parseFloat(self.element.offsetHeight);
	if( !h ) {
	    fast.done(self);
	}
	
	self.__orgHeight = h;
	self.__height = new Array();
	while( parseInt(h) > 0 ) {
		h = h*0.75;
		self.__height.push( h );
	}
	self.__height.push( 0 );
	var interval = setInterval( function() {
		self.element.style.height = self.__height[0]+"px";			
		self.__height.splice(0,1);
		if( self.__height.length == 0 ) {
			self.__height = null;
			clearInterval(interval);
			fast.done(self);
		}
	}, 20 );
};
fast.register("rollUp",rollUp);


function rollDown(self) {
    var h = parseFloat((self.element.offsetHeight||1));

    self.element.style.height="auto";
    self.__orgHeight = self.element.offsetHeight;
    self.element.style.height=h+"px";

    self.__height = new Array();
    while( h < self.__orgHeight ) {
	    h = h*1.25;
	    self.__height.unshift( ((self.__orgHeight-h)>0?(self.__orgHeight-h):0 ));
    }
    self.__height.push( self.__orgHeight );
    var interval = setInterval( function() {
	    self.element.style.height = self.__height[0]+"px";			
	    self.__height.splice(0,1);
	    if( self.__height.length == 0 ) {
		    self.__height = null;
		    clearInterval(interval);
		    fast.done(self);
	    }
    }, 20 );
};
fast.register("rollDown",rollDown);

fast.register("rollToggle",function(self) {
	if(self.element.offsetHeight) {
	    rollUp(self);
	} else {
	    rollDown(self);
	}
});

function hide() {
    self.element.style.display = "none";
    fast.done(self);
};
fast.register("hide",hide);

function show() {
    self.element.style.display = "none";
    fast.done(self);
};
fast.register("show",show);

function pause( self, args ) {
		setTimeout( function() {
			fast.done(self);
		}, args[0] );
};
fast.register("pause",pause);
*/