
 
     // ---------------------------------------------
     //         Add loading events
     // ---------------------------------------------
 
function AddLoadEvent(func)
{
    var oldonload = window.onload;
    if (typeof window.onload != 'function')
    {
        window.onload = func;
    }
    else
    {
        window.onload = function()
        {
            if (oldonload)
            {
                oldonload();
            }
        func();
        }
    }
}

     // ---------------------------------------------
     //         Pagevars
     // ---------------------------------------------


var __PageVars = new Array();
var __PageHash = location.hash.substring(1);

var tmpVarList = __PageHash.split("/");

for (var I = 0; I < tmpVarList.length; I++)
{
	if (tmpVarList[I] == "")
		continue;	

	var tmpVar = tmpVarList[I].split(":");
	var tmpObj = new Object();
	tmpObj.Name	= tmpVar[0];
	tmpObj.Value	= tmpVar[1];
	__PageVars.push(tmpObj);
}


function GetPageVar(varName)
{
	for (var I = 0; I < __PageVars.length; I++)
	{
		if (__PageVars[I].Name == varName)
		{
			
			return __PageVars[I].Value;
		}
	}
	return 0;
}

function SetPageVar(varName, varValue, autoUpdate)
{
	if (autoUpdate == undefined)
		autoUpdate = false;

	for (var I = 0; I < __PageVars.length; I++)
	{
		if (__PageVars[I].Name == varName)
		{
			__PageVars[I].Value = varValue;
			varName = 0;
			break;
		}
	}
	if (varName !== 0)
	{
		var newVar = new Object();
		newVar.Name	= varName;
		newVar.Value	= varValue;
		__PageVars.push(newVar);
	}

//	alert(__PageVars[I].Name);

	if (autoUpdate)
		UpdatePageVars();
}

function RemovePageVar(varName, autoUpdate)
{
	if (autoUpdate == undefined)
		autoUpdate = false;

	for (var I = 0; I < __PageVars.length; I++)
	{
		if (__PageVars[I].Name == varName)
		{
			__PageVars.splice(I, 1);
			break;
		}
	}

	if (autoUpdate)
		UpdatePageVars();
}

function UpdatePageVars()
{
	var newLocation = "#";

	for (var I = 0; I < __PageVars.length; I++)
	{
		if (__PageVars[I].Name == "")
			continue;	

		if (newLocation != "#")
			newLocation += "/";
		newLocation += __PageVars[I].Name + ":" + __PageVars[I].Value;
	}

//	alert(newLocation);

	window.location.href = newLocation;

	__PageHash = location.hash.substring(1);
}

function PageHashChanged()
{
	return (__PageHash != location.hash.substring(1));
}

function AdoptPageHash()
{
	__PageVars = new Array();
	__PageHash = location.hash.substring(1);

	var tmpVarList = __PageHash.split("/");

	for (var I = 0; I < tmpVarList.length; I++)
	{
		if (tmpVarList[I] == "")
			continue;	
	
		var tmpVar = tmpVarList[I].split(":");
		var tmpObj = new Object();
		tmpObj.Name	= tmpVar[0];
		tmpObj.Value	= tmpVar[1];
		__PageVars.push(tmpObj);
	}
}

     // ---------------------------------------------
     //         XML
     // ---------------------------------------------

function CreateXMLDocument(rootTagName, namespaceURL)
{
    if (!rootTagName) rootTagName = "";
    if (!namespaceURL) namespaceURL = "";

    if (document.implementation && document.implementation.createDocument)
    {
        // This is the W3C standard way to do it
        return document.implementation.createDocument(namespaceURL, rootTagName, null);
    }
    else
    {
		alert("Using non-W3C compliant browser.");
    }
};
     
function LoadXMLDocument(url, callback, Asynch)
{
	if (undefined == Asynch || !callback)
		Asynch = false;

	var xmlhttp = new window.XMLHttpRequest();
	
	if (Asynch)
	{
		xmlhttp.onreadystatechange = function()
		{
			if (this.readyState==4)
			{
				if (this.responseXML == null)
					alert("Could not open XML file");
				else
					callback(this.responseXML.documentElement);
			}
		}
	}
	xmlhttp.open("GET",url, Asynch);
	xmlhttp.send(null); 
	
	if (!Asynch)
	{
		var giveBack = xmlhttp.responseXML;

		if (giveBack == undefined)
		{
			alert("Could not load XMLDocument " + url);
		}

		if (giveBack && giveBack.documentElement)
			giveBack = giveBack.documentElement;
	
		if (callback)
			callback(giveBack);
		return giveBack;
	}
	
	return 0;
	
//	xmlhttp.onload = function()
//	{
//		alert("Callback");
//	};
};

function HasXMLChild(node, name)
{
	for (var I = 0; I < (node.childNodes).length; I++)
	{
		if (node.childNodes[I].tagName == name)
			return true;
	}
	return false;
}

function FindXMLChildren(node, name)
{
	var Return = new Array();

	for (var I = 0; I < (node.childNodes).length; I++)
	{
		if (node.childNodes[I].tagName == name)
			Return.push(node.childNodes[I]);
	}
	return Return;
}
 
     // ---------------------------------------------
     //         Javascript
     // ---------------------------------------------

function InsertIntoArray(myArray, myInsert, myObject)
{

	if (myArray.length == 0)
	{
//		alert("First...");
		myArray.push(myObject);
		return;
	}
	for (var I = myArray.length-1; I >= myInsert; I--)
	{
//		alert("Moving " + I);
		myArray[I+1] = myArray[I];
	}
//	alert("Insert at " + myInsert);
	myArray[myInsert] = myObject;
}

function DoNotPropagate(e)
{
	if (!e)
		var e = window.event;
	if (e == undefined)
		alert("e was undefined!");
	e.cancelBubble = true;
	if (e.stopPropagation)
		e.stopPropagation();
}