/*************************************************************************
  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, limit) 
{
	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;
	
	this.limit = limit;
	
//	alert("id=" + id + "\nlimit=" + limit)
}

dynObj.getElemRef = function(id) 
{ 
	return document.getElementById? document.getElementById(id): null;
} 

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, d) 
{
	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";
		
		/*
		if(getScrollY() <= this.limit)
		{
			el.style.top = (this.y = this.limit) + "px";	
		}
		else
		{
			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]);
		}
	}
}
