/*************************************************************************
  This code is from Dynamic Web Coding at www.dyn-web.com
  Copyright 2003-4 by Sharon Paine 
  See Terms of Use at www.dyn-web.com/bus/terms.html
  regarding conditions under which you may use this code.
  This notice must be retained in the code as is!
*************************************************************************/

/*
  dw_lib.js - used with dw_glide.js, dw_glider.js, ...
  version date July 2004 
*/

dynObj.holder = {}; 
// constructor
function dynObj(id,x,y,w,h) {
    var el = dynObj.getElemRef(id);
    if (!el) 
        return;  
    this.id = id; 
    dynObj.holder[this.id] = this; 
    this.animString = "dynObj.holder." + this.id;
    var px = window.opera? 0: "px";
    this.x = x || 0;
    if (x) 
        el.style.left = this.x + px;
    this.y = y || 0;
    if (y)
        el.style.top = this.y + px;
    this.w = w || el.offsetWidth || 0;  
    this.h = h || el.offsetHeight || 0;
    // if w/h passed, set style width/height
    if (w) 
        el.style.width = w + px; 
    if (h)
        el.style.height = h + px;
}

dynObj.getElemRef = function(id) { 
    var el = document.getElementById ? document.getElementById(id) : null;
    return el;
} 

dynObj.getInstance = function(id) {
    var obj = dynObj.holder[id];
    if (!obj) 
        obj = new dynObj(id);
    else if (!obj.el) 
        obj.el = dynObj.getElemRef(id);
    return obj;
}

dynObj.prototype.shiftTo = function(x,y) {
    var el = this.el ? this.el : dynObj.getElemRef(this.id) ? dynObj.getElemRef(this.id) : null;
    if (el) {
        if (x != null) el.style.left = (this.x = x) + "px";
        if (y != null) el.style.top = (this.y = y) + "px";
    }
}

dynObj.prototype.shiftBy = function(x,y) { this.shiftTo(this.x+x, this.y+y); }

dynObj.prototype.show = function() { 
    var el = this.el ? this.el : dynObj.getElemRef(this.id) ? dynObj.getElemRef(this.id) : null;
    if (el) 
        el.style.visibility = "visible"; 
}

dynObj.prototype.hide = function() { 
    var el = this.el ? this.el : dynObj.getElemRef(this.id) ? dynObj.getElemRef(this.id) : null;
    if (el) 
        el.style.visibility = "hidden"; 
}


// for time-based animations
// resources: www.13thparallel.org and www.youngpup.net (accelimation)
var dw_Bezier = {
    B1: function (t) { return t*t*t },
    B2: function (t) { return 3*t*t*(1-t) },
    B3: function (t) { return 3*t*(1-t)*(1-t) },
    B4: function (t) { return (1-t)*(1-t)*(1-t) },
    // returns current value based on percentage of time passed
    getValue: function (percent,startVal,endVal,c1,c2) {
        return endVal * this.B1(percent) + c2 * this.B2(percent) + c1 * this.B3(percent) + startVal * this.B4(percent);
    }
}

// adapted from accelimation.js by Aaron Boodman of www.youngpup.net
dw_Animation = {
    instances: [],
    add: function(fp) {
        this.instances[this.instances.length] = fp;
        if (this.instances.length == 1) 
            this.timerID = window.setInterval("dw_Animation.control()", 10);
    },
    
    remove: function(fp) {
        for (var i = 0; this.instances[i]; i++) {
            if (fp == this.instances[i]) {
                this.instances = this.instances.slice(0,i).concat( this.instances.slice(i+1) );
                break;
            }
        }
        if (this.instances.length == 0) {
            window.clearInterval(this.timerID); this.timerID = null;
        }
    },
    
    control: function() {
        for (var i = 0; this.instances[i]; i++) {
            if (typeof this.instances[i] == "function" ) 
                this.instances[i]();
            else 
                eval(this.instances[i]);
        }
    }
}
