
var ip; //incoming panel
var cp; //currentpanel
var ipPosition;
var cpPosition;
var inMotion = false;
var acceleration = 8000; //px per sec2
var time = 0;
var interval = 10;
var halfwayX;
var vInitial;
var xCpInitial;
var xIpInitial;
var containerHeight;

function slidePanels(incoming){
    ip = incoming;
    
    if(cp == null){
      cp = document.getElementById("page1");
    }
    
    if(ip == cp){
        inMotion = false;
        return;
    }
    
    //initialize motion
    var container = document.getElementById("container");
    //var containerPos = findPos(container);
    containerHeight = getPositionValue(container.style.height) * 1;
    halfwayX = containerHeight/2;
    xIpInitial = containerHeight; 
    xCpInitial = 0;
    acceleration = Math.abs(acceleration);
          
    ip.style.top = getStyleValue(xIpInitial);
    cp.style.top =  getStyleValue(xCpInitial);
    ip.style.visibility = "visible";
    vInitial = 0;

    
    //start motion
    ipPosition = getPositionValue(ip.style.top) * 1;
    cpPosition = getPositionValue(cp.style.top) * 1;
    time = 0;
    setTimeout("movePanels()", interval);
                           
}

function movePanels(){ 
 time = time + interval;
 //calculate new positions
 ipPosition = calculatePosition(vInitial, xIpInitial, time);
 cpPosition = calculatePosition(vInitial, xCpInitial, time);
 
 //check positions
 if((cpPosition + containerHeight) < halfwayX){
    if(acceleration > 0){
        //switching to decel
        vInitial = acceleration * time/1000;
        xIpInitial = getPositionValue(ip.style.top);
        xCpInitial = getPositionValue(cp.style.top);
        acceleration = - acceleration;
        time=0;
    }
 }
 if(ipPosition <= 3){
    //decelerated to 0
    cp.style.visibility = "hidden";
    ip.style.top = getStyleValue(0);
    cp = ip;
    inMotion = false;
 }else{
    ip.style.top = getStyleValue(ipPosition);
    cp.style.top = getStyleValue(cpPosition);
    setTimeout("movePanels()", interval);            
 }
}

function calculatePosition(vInitial, xInitial, time){
    vInitial = vInitial * 1;
    xInitial = xInitial * 1;
    ts = time/1000;
    return 2*xInitial - (acceleration/2 * Math.pow(ts,2) + vInitial*ts + xInitial);
}

function getPositionValue(val){
    return val.toString().substring(0, val.toString().length-2);
}

function getStyleValue(val){
    return val + "px";
}
function findPos(obj) {
    var curleft = curtop = 0;
    if(obj.offsetParent){
        do{
            curleft += obj.offsetLeft;
            curtop += obj.offsetTop;
        }while(obj = obj.offsetParent)
    }
   return [curleft, curtop];
}
