
/*************************************************************************
  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]);
		    }
	}
}

/*
		dw_glider.js - requires dw_lib.js
		glide to maintain window location on scroll
		version date: September 2003

		This code is from Dynamic Web Coding at www.dyn-web.com
    See Terms of Use at http://www.dyn-web.com/bus/terms.html
    Permission granted to use this code
    as long as this entire notice is included.

    Resources: ypChaser by Aaron Boodman (www.youngpup.net)
    DHTML chaser tutorial at DHTML Lab - www.webreference.com/dhtml
*/

Glider.holder = [];
function Glider(id,x,y,w,h,d,ac)
{
	this.glideDur = d || 1000;
	this.origX = x;
	this.origY = y;
	this.ac = -ac || 0;
	this.baseObj = dynObj;
	this.baseObj(id,x,y,w,h);
  	Glider.holder[Glider.holder.length] = this;
  	if (!Glider.winHt) Glider.winHt = getWinHeight();
}
Glider.prototype = new dynObj;
Glider.prototype.onGlideInit = function () {}

Glider.prototype.checkGlider = function()
{
	var scrollY = getScrollY();
	destY = scrollY - this.origY;
//	var destY = scrollY + this.origY;
//	 + this.origY - this.y;
//	if (destY < this.origY) { destY = this.origY; }
   	if ( destY<0 ) { destY = 0; }
	if (destY != this.y)
	{
//		var elem=document.getElemenetById('glideDiv');
//		alert('y=' + this.baseObj.getElemRef);
//		alert('destY=' + destY+ ' scrollY='+scrollY+' origY='+this.origY+' y='+this.y+' winHt='+Glider.winHt);
//		alert('origY=' + this.origY);
		if (destY != this.dy)
		{
			this.dy = destY;
			this.glideInit();
			this.onGlideInit();
		}
		this.glide();
	}
}

Glider.prototype.glideInit = function()
{
	this.gt = new Date().getTime();
	var distY = this.dy - this.y;
	if ( Math.abs(distY) > Glider.winHt )
	{	// distance greater than window height?
		this.gsy = (distY > 0)? this.dy - Glider.winHt: this.dy + Glider.winHt;
	}
	else this.gsy = this.y;
//	this.gsy=0;
  	this.g_yc1 = this.gsy + ( (1+this.ac) * (this.dy - this.gsy)/3 );
	this.g_yc2 = this.gsy + ( (2+this.ac) * (this.dy - this.gsy)/3 );
//	+this.getElementByID('GlideDiv')
//	alert ('this.y:'+this.y+' Glider.winHt:'+Glider.winHt+' distY:'+distY+' this.dy:'+this.dy+' thid.gsy:'+this.gsy+' this.height');
}

Glider.prototype.glide = function()
{
	var elapsed = new Date().getTime() - this.gt;
//  alert ('here');
	if (elapsed < this.glideDur)
  	{
    		var y = dw_Bezier.getValue( elapsed/this.glideDur, this.gsy, this.dy, this.g_yc1, this.g_yc2 );
    		this.shiftTo(null,y);
  	}
  	else this.shiftTo(null,this.dy);
}

Glider.control = function()
{
  	for (var i=0; Glider.holder[i]; i++)
  	{
	    	var curObj = Glider.holder[i];
	    	if (curObj) curObj.checkGlider();
  	}
}
//Glider.timer = setInterval("Glider.control()",20);
dw_Animation.add(Glider.control);

// returns height of window
function getWinHeight()
{
	var winHt = 0;
	if (window.innerHeight) winHt = window.innerHeight-18;
	else if (document.documentElement && document.documentElement.clientHeight)
		winHt = document.documentElement.clientHeight;
	else if (document.body && document.body.clientHeight)
		winHt = document.body.clientHeight;
	return winHt;
}

// returns amount of vertical scroll
function getScrollY()
{
	var sy = 0;
	if (document.documentElement && document.documentElement.scrollTop)
		sy = document.documentElement.scrollTop;
	else if (document.body && document.body.scrollTop)
		sy = document.body.scrollTop;
	else if (window.pageYOffset)
		sy = window.pageYOffset;
	else if (window.scrollY)
		sy = window.scrollY;
	return sy;
}

// onresize, get window height
if (window.addEventListener)
  	window.addEventListener("resize", function(){ Glider.winHt = getWinHeight(); }, "false");
else if (window.attachEvent)
 	window.attachEvent("onresize", function(){ Glider.winHt = getWinHeight(); } );

 function initStatLyr()
{
// args: id, left, top, w, h, duration of glide to location onscroll, acceleration factor
// acceleration factor should be -1 to 1. -1 is full deceleration
//	var statLyr = new Glider("glideDiv",0,0,null,null,1000,-1);
	var obj = document.getElementById ("glideDiv");
	var curleft = curtop = 0;
	if (obj){
		if (obj.offsetParent) {
		do {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			} while (obj = obj.offsetParent);
		}
//		alert (curtop);
	}	
	if (curtop<1) curtop = cartGlideTop;

	var statLyr = new Glider("glideDiv",0,curtop-5,null,null,1000,-1);
	statLyr.show();

	var obj = document.getElementById ("glidePrice");
	var curleft = curtop = 0;
	if (obj){
		if (obj.offsetParent) {
		do {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			} while (obj = obj.offsetParent);
		}
//		alert (curtop);
	}	
	if (curtop<1) curtop = 370;
	if (startSmallCart==true)
	{
		var priceGlide = new Glider("glidePrice",0,curtop-5,null,null,1000,-1);
		priceGlide.show();
	}
	

//	alert (cartGlideTop);
//	var statLyr = new Glider("price_glide",0,390,null,null,1000,-1);
//	statLyr.show();
}