function Snake()
{
    this.rootElement = document.createElement("ul");
    this.currentParent = this.rootElement;
}
{
	p = Snake.prototype;
    p.rootElement;
    p.currentParent;
	p.addLevel = Snake_addLevel;
	p.closeLevel = Snake_closeLevel;
	p.addItem = Snake_addItem;
	p.render = Snake_render;
	p.forceSelect = Snake_forceSelect;
	p.forceSelectUrl = Snake_forceSelectUrl;
	p.forceSelectPath = Snake_forceSelectPath;

}

function Snake_addLevel(sLabel, sUrl)
{

	var parent = this.addItem(sLabel+"&nbsp;&raquo;", sUrl);
    var el = document.createElement("ul");
    parent.appendChild(el);
    this.currentParent = el;
}

function Snake_closeLevel()
{
	this.currentParent = this.currentParent.parentNode.parentNode; 
}

function Snake_addItem(sLabel, sUrl, sTarget)
{
    var elA = document.createElement("a");
    elA.innerHTML = sLabel;
    elA.href = sUrl;
    elA.target = "_self"; //sTarget;
    
    var elLi = document.createElement("li");
    elLi.appendChild(elA);
    this.currentParent.appendChild(elLi);
    return elLi;
}


function Snake_render()
{
    var container = document.getElementById("gSnakeInner");

    container.appendChild(this.rootElement);
//    alert(container.innerHTML);
    
}

var finish = false;

//Build the selected path
function Snake_forceSelectPath(sIndex)
{
	iStopPos = sIndex.indexOf("_0");
	iReadTo = (iStopPos > - 1) ? iStopPos : sIndex.length;
	aSelect = sIndex.substring(0, iReadTo).split("_");
	for (i = 0; i < aSelect.length; i++)
	{
		aSelect[i]--;
	}
	oLevel = this;
	for (i = 0; i < aSelect.length - 1; i++)
	{

		oLevel = oLevel.items[aSelect[i]];
		oLevel.item.layer.className = oLevel.classKnown;
		oLevel.setPathPositions();
		oLevel.showSection(true);
	}
	oLastItem = oLevel.items[aSelect[aSelect.length - 1]];
	sClass = oLevel.classKnown || oLevel.items[0].classKnown;
	oLastItem.item.layer.className = sClass;
	oLastItem.setPathPositions();
	if (oLastItem.section)
	{
		oLastItem.showSection(true);
	}
	this.buildPath(oLastItem);
}


var aItems = [0, 0, 0, 0];
var itemLev = 0;
//Function for finding the selected snake path after a postback. 
function Snake_forceSelect(aUrls, oL)
{

    var currentUrl = "/"+aUrls.join("/").toLowerCase()+"/";
    this.forceSelectUrl(currentUrl);
}

function Snake_forceSelectUrl(sUrl, oL)
{
    var links = $(this.rootElement).getElements("a");
    var url;
    var currentUrl = sUrl.toLowerCase();
    var selectedEl,lix;
    var re = /^[a-z]+\:\/\//g;
    var browserName = navigator.appName;  //Added
    for (var i=0,j=links.length;i<j;i++){
        //url = links[i].href.toLowerCase().replace(re,"");
        //Temp fix. IE returns relative url not starting with slash
        if (browserName == "Microsoft Internet Explorer") //Added
        {
            url = "/" + links[i].pathname.toLowerCase().replace(re, ""); //Added
        }
        else 
        {
            url = links[i].pathname.toLowerCase().replace(re, ""); //Added
        }
        
        lix = currentUrl.indexOf(url);
        if (lix==0){
            selectedEl = links[i]; 
            links = $(selectedEl.parentNode).getElements("a");
            j = links.length;
            i=0;
        }
    }
    if (selectedEl==null){
        //alert("selectedEl is null"); //added
        return;
    }
        selectedEl.className = "selected";
        var sub = selectedEl.parentNode.getElementsByTagName("ul");
        if (sub.length>0) sub[0].className = "open";
        var parentSelectedEl = selectedEl.parentNode.parentNode.parentNode;
        while (parentSelectedEl.tagName.toLowerCase()=="li"){
            
          parentSelectedEl.getElementsByTagName("a")[0].className = "selected";
           parentSelectedEl.getElementsByTagName("ul")[0].className = "selected open";
           parentSelectedEl = parentSelectedEl.parentNode.parentNode;
        }
}

