/*
**	Pedantic Webspaces Javascript Function Library
**	version 80816
**	(C) 2008 Pedantic Webspaces - All Rights Reserved
*/

/*
**	Linked List Functions
*/
function LinkedList() {}
LinkedList.prototype = {
  length: 0,
  first: null,
  last: null
};
LinkedList.Sliders = function() {};
LinkedList.Sliders.prototype = new LinkedList();
LinkedList.Sliders.prototype.append = function(node) {
	if( !this.exists(node) ) {
		if (this.first === null) {
		node.prev = node;
		node.next = node;
		this.first = node;
		this.last = node;
	  } else {
		node.prev = this.last;
		node.next = this.first;
		this.first.prev = node;
		this.last.next = node;
		this.last = node;
	  }
	  this.length++;
	}
};
LinkedList.Sliders.prototype.remove = function(node) {
  if (this.length > 1) {
    node.prev.next = node.next;
    node.next.prev = node.prev;
    if (node == this.first) { this.first = node.next; }
    if (node == this.last) { this.last = node.prev; }
  } else {
    this.first = null;
    this.last = null;
  }
  node.prev = null;
  node.next = null;
  this.length--;
};
LinkedList.Sliders.prototype.exists = function(node) {
	if( this.length > 0 ) {
		var current = this.first;
		do {
			if( current == node ){
				return 1;
			}
			current = current.next;
		} while ( current != this.first );
	}
	return 0;
};

/*
**	Functions to product Fading Effects
*/
var FadeList = new LinkedList.Sliders();
var FadeTimer;
var FadeObject = null;
var FadeTime = 45;

function padHex(hex)
{
	if(hex.length == 1)
	{
		return "0" + hex;
	}
	return hex;
}
function initColorFade(objName, start, end, steps)
{
	if( FadeTimer == null )
	{
		FadeTimer = setInterval('FadeStep()',FadeTime);
	}
	FadeList.append( document.getElementById(objName) );
	FadeObject = document.getElementById(objName);
	FadeObject.FadeStartColor = parseInt(start,16);
	FadeObject.FadeEndColor = parseInt(end,16);
	FadeObject.FadeSteps = steps;
	FadeObject.FadeCurrentStep = 0;
	FadeObject.rStep = parseFloat((( FadeObject.FadeEndColor / 65536 ) - ( FadeObject.FadeStartColor / 65536 ))/FadeObject.FadeSteps);
	FadeObject.gStep = parseFloat((( (FadeObject.FadeEndColor%65536) / 256 ) - ( (FadeObject.FadeStartColor%65536) / 256 ))/FadeObject.FadeSteps);
	FadeObject.bStep = parseFloat((( FadeObject.FadeEndColor%256 ) - ( FadeObject.FadeStartColor%256 ))/FadeObject.FadeSteps);
	FadeObject.rStart = parseInt( FadeObject.FadeStartColor / 65536 );
	FadeObject.gStart = parseInt( (FadeObject.FadeStartColor%65536) / 256 );
	FadeObject.bStart = parseInt( FadeObject.FadeStartColor%256 );
}
function FadeStep()
{
	if( FadeList.length == 0 )
	{
		clearInterval(FadeTimer);
		FadeTimer = null;
		FadeObject = null;
	}
	else
	{
		FadeObject = FadeList.first;
		do {
			FadeObject.FadeCurrentStep++;
			var color = "#";
			color += padHex(parseInt(FadeObject.rStart + FadeObject.rStep * FadeObject.FadeCurrentStep).toString(16));
			color += padHex(parseInt(FadeObject.gStart + FadeObject.gStep * FadeObject.FadeCurrentStep).toString(16));
			color += padHex(parseInt(FadeObject.bStart + FadeObject.bStep * FadeObject.FadeCurrentStep).toString(16));
			FadeObject.style.color = color;
			if( FadeObject.FadeCurrentStep == FadeObject.FadeSteps )
			{
				var prev = FadeObject.prev;
				FadeList.remove(FadeObject);
				FadeObject = prev;
			}
			FadeObject = FadeObject.next;
		} while ( FadeObject != FadeList.first );
	}
}
function getFilename()
{
	var regexp = /(\w|[-.])+$/;
	str = document.URL;
	a = regexp.exec(str);
	return a[0];
}
function getEventTarget(evt)
{
	var targ;
	if (!evt) var evt = window.event;
	if (evt.target) targ = evt.target;
	else if (evt.srcElement) targ = evt.srcElement;
	if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode;
	return targ;
}

