/*
**	Pedantic Webspaces Javascript Function Library
**	version 81105
**	(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;
}
/*
**	Functions for AJAX
*/
	var ped_xmlObj = null;
	var ped_xmlLastMod;
function ped_getXML(xmlFile, callback)
{
	var ped_xmlhttp = false;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
	// JScript gives us Conditional compilation, we can cope with old IE versions.
	// and security blocked creation of the objects.
	 try {
	  ped_xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	 } catch (e) {
	  try {
	   ped_xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	  } catch (E) {
	   ped_xmlhttp = false;
	  }
	 }
	@end @*/
	if (!ped_xmlhttp && typeof XMLHttpRequest!='undefined') {
		try {
			ped_xmlhttp = new XMLHttpRequest();
		} catch (e) {
			ped_xmlhttp=false;
		}
	}
	if (!ped_xmlhttp && window.createRequest) {
		try {
			ped_xmlhttp = window.createRequest();
		} catch (e) {
			ped_xmlhttp=false;
		}
	}
	if(!ped_xmlhttp)
	{
		alert("We're sorry. Due to a limitation in your browser, we are unable to retrieve XML data.");
	}
	else
	{
		if (ped_xmlhttp.overrideMimeType)
			ped_xmlhttp.overrideMimeType('text/xml');
		ped_xmlhttp.open("GET",xmlFile,true);
		ped_xmlhttp.onreadystatechange=function() // Request XML file header
		{
			if (ped_xmlhttp.readyState==4)
			{
				if(ped_xmlhttp.status > 300)
				{
					alert("Can not find " + xmlFile + ". Error: " + ped_xmlhttp.status);
				}
				else
				{
					ped_xmlLastMod = ped_xmlhttp.getResponseHeader("Last-Modified");
					ped_xmlObj = ped_xmlhttp.responseXML.documentElement;
					if(ped_xmlObj==null)
					{
						alert("Unable to communicate with the server.");
					}
					callback(ped_xmlObj, ped_xmlLastMod); // Notify That We Are Finished
				}
			}
		}
		ped_xmlhttp.send(null)
	}
}
/*
**	Functions for Variable Retrieval
*/
function ped_getVar(varName)
{
	var url = window.location.href;
	var qparts = url.split("?");
	if( qparts.length < 2 )
	{
		return "";
	}
	var query = qparts[1];
	var vars = query.split("&");
	var value = "";
	for (i=0;i<vars.length;i++)
	{
		var parts = vars[i].split("=");
		if( parts[0] == varName )
		{
			value = parts[1];
			break;
		}
	}
	value = unescape(value);
	value.replace(/\+/g," ");
	return value;
}
