﻿// Code for animating HTML elements to make them open and close

var lTargetDimensionClosed = 10;
var lAniAmount = 10;
var lAnilDelay = 5;

// differing types of animation
var ANI_TYPE_VERTICAL = 0;
var ANI_TYPE_HORIZONTAL = 1;

function aniElement(oElement, sElement, lElementDimension, lAniType) {

    this.oElement = oElement;
    this.lInitialDimension = lElementDimension;
    this.sElement = sElement;
    this.lAniType = lAniType;
    
    if (oElement.style.display=="none") {
        if (lAniType == ANI_TYPE_VERTICAL) {
            this.oElement.style.height = "0px";
        } else {
            this.oElement.style.width = "0px";
        }
        this.lMod = 1;
    } else {
        if (lAniType == ANI_TYPE_VERTICAL) {
            this.oElement.style.height = lElementDimension + "px";
        } else {
            this.oElement.style.width = lElementDimension + "px";
        }
        this.lMod = -1;
    }
    return this;
}

var arElements = new Array();

function registerAni(sElement, lElementDimension, lAniType) {
    var myAniElement = new aniElement(document.getElementById(sElement), sElement, lElementDimension, lAniType);

    // push it into the keyset
    arElements[sElement] = myAniElement;
}

function vScrollStart(sElement)
{

    var oElement = arElements[sElement];
    
    if (oElement == null) {
        window.status = "There is no animated element named '" + sElement + "'";
        return;
    }
    oElement.oElement.style.display="";
    oElement.oElement.style.visibility="visible";
    vScroll(oElement);
}

function vScrollByName(sElement) {
    vScroll(arElements[sElement]);
}
function vScroll(oElement)
{
    var lCurDimension;
    
    if (oElement.lAniType == ANI_TYPE_VERTICAL) {
        lCurDimension = oElement.oElement.clientHeight;
    } else {
        lCurDimension = oElement.oElement.clientWidth;
    }
    
    var lMod = oElement.lMod;
    
    if ((lMod == -1) && (lCurDimension <= lTargetDimensionClosed)) {
        oElement.lMod = 1;
        if (oElement.lAniType == ANI_TYPE_VERTICAL) {
            oElement.oElement.style.height = lTargetDimensionClosed + "px";
        } else {
            oElement.oElement.style.width = lTargetDimensionClosed + "px";
        }
        oElement.oElement.style.display="none";
        
    } else if ((lMod == 1) && (lCurDimension >= oElement.lInitialDimension)) {
        oElement.lMod = -1;
        if (oElement.lAniType == ANI_TYPE_VERTICAL) {
            oElement.oElement.style.height = oElement.lInitialDimension + "px";
        } else {
            oElement.oElement.style.width = oElement.lInitialDimension + "px";
        }
        
    } else {
        var lNewDimension = (lCurDimension + (lAniAmount*oElement.lMod));
        var lBefore = oElement.oElement.style.height;
        
        var lAfter;
        
        if (oElement.lAniType == ANI_TYPE_VERTICAL) {
            oElement.oElement.style.height = lNewDimension + "px";
            lAfter = oElement.oElement.style.height;
        } else {
            oElement.oElement.style.width = lNewDimension + "px";
            lAfter = oElement.oElement.style.width;
        }
        
        var dNow = new Date();

        var tmp = setTimeout("vScrollByName('" + oElement.sElement + "')", lAnilDelay);
    }
}
