//===============================================================
// Skriptobj supporting the AmberMenu script, 2004-01-16
// Copyright 2004 Michael van Ouwerkerk (http://13thparallel.org)
//===============================================================
var Skriptobj = function(id){
	if(id){
		this.id = id;
		Skriptobj.objRegistry[ id ] = Skriptobj.objRegistry[ Skriptobj.objRegistry.length ] = this;
		this.gRef = "Skriptobj_" + id;
		eval(this.gRef + " = this");
		var elm = Skriptlib.getElement(id);
		this.x = this.loadX = elm.offsetLeft ? elm.offsetLeft : elm.style && elm.style.left ? parseInt(elm.style.left) : elm.left ? elm.left : 0;
		this.y = this.loadY = elm.offsetTop ? elm.offsetTop : elm.style && elm.style.top ? parseInt(elm.style.top) : elm.top ? elm.top : 0;
		this.w = this.loadW = elm.offsetWidth ? elm.offsetWidth : elm.style && elm.style.width ? parseInt(elm.style.width) : elm.clip && elm.clip.width ? elm.clip.width : 0;
		this.h = this.loadH = elm.offsetHeight ? elm.offsetHeight : elm.style && elm.style.height ? parseInt(elm.style.height) : elm.clip && elm.clip.height ? elm.clip.height : 0;
	}
	return this;
};

Skriptobj.objRegistry = [];

Skriptobj.prototype.show = function(){
	var s = Skriptlib.getStyleObj(this.id);
	s.visibility = "visible";
};

Skriptobj.prototype.hide = function(){
	var s = Skriptlib.getStyleObj(this.id);
	s.visibility = "hidden";
};

Skriptobj.prototype.setZIndex = function(num){
	var s = Skriptlib.getStyleObj(this.id);
	s.zIndex = num;
};

Skriptobj.prototype.moveTo = function(x, y){
	var elm = Skriptlib.getElement(this.id);
	var s = elm.style ? elm.style : elm;
	if(x != null){
		this.x = x;
		s.left = elm.style ? x + "px" : x;
	}
	if(y != null){
		this.y = y;
		s.top = elm.style ? y + "px" : y;
	}
};

Skriptobj.prototype.setClip = function(top, right, bottom, left){
	var elm = Skriptlib.getElement(this.id);
	if(elm.style){
		var clip = "rect(" + top + "px, " + right + "px, " + bottom + "px, " + left + "px)";
		elm.style.clip = clip;
	} else if(elm.clip){
		elm.clip.top = top;
		elm.clip.right = right;
		elm.clip.bottom = bottom;
		elm.clip.left = left;
	}
};

Skriptobj.prototype.slideInterval = null;
Skriptobj.prototype.onStartSlide = function(){};
Skriptobj.prototype.onSlide = function(){};
Skriptobj.prototype.onEndSlide = function(){};

Skriptobj.prototype.startSlide = function(slideDuration, startX, startY, endX, endY){
	if(this.slideInterval != null) this.endSlide();
	var startTime = new Date().getTime();
	var accelX = (endX - startX) / slideDuration / slideDuration;
	var accelY = (endY - startY) / slideDuration / slideDuration;
	this.onStartSlide();	
	this.slideInterval = setInterval(this.gRef + ".slide(" + slideDuration + "," + startX + "," + startY + "," + endX + "," + endY + "," + startTime + "," + accelX + "," + accelY + ")", 10);
};

Skriptobj.prototype.slide = function(slideDuration, startX, startY, endX, endY, startTime, accelX, accelY){
	var remainingTime = startTime + slideDuration - new Date().getTime();
	if(remainingTime < 0) remainingTime = 0;
	var elapsedX = (endX - startX) - (remainingTime * remainingTime * accelX);
	var elapsedY = (endY - startY) - (remainingTime * remainingTime * accelY);
	this.show();
	this.moveTo(startX + elapsedX, startY + elapsedY);
	this.onSlide(elapsedX, elapsedY);
	if(!remainingTime) this.endSlide();
};

Skriptobj.prototype.endSlide = function(){
	clearInterval(this.slideInterval);
	this.slideInterval = null;
	this.onEndSlide();
};
