function transicion(curva,ms,callback){
    this.ant=0.01;
    this.done_=false;
    var _this=this;
    this.start=new Date().getTime();
    this.init=function(){
        setTimeout(function(){
            if(!_this.next()){callback(1);_
                this.done_=true;
                window.globalIntervalo=0;
                return
            }
            callback(_this.next());
            _this.init()},13);
    }
    this.next=function(){
        var now=new Date().getTime();
        if((now-this.start)>ms)
            return false;
        return this.ant=curva((now-this.start+.001)/ms,this.ant);
    }
}

function fx(obj,inicio,fin,propCss,u,curva,ms,cola){
    if(!window.globalIntervalo)window.globalIntervalo=1;
    else{
        if(cola)
            return setTimeout(function(){
                fx(obj,inicio,fin,propCss,u,curva,ms,cola)},30);
        else return
    }
    var t=new transicion(curva,ms,function(p){
        if(fin<inicio){
            var delta=inicio-fin;
            obj.style[propCss]=(inicio-(p*delta))+u}else{var delta=fin-inicio;
            obj.style[propCss]=(inicio+(p*delta))+u}});t.init();t=null;
}

function senoidal(p,ant){
    return(1-Math.cos(p*Math.PI))/2;
}




