
if (navigator.userAgent.indexOf(' MSIE ')>0) {
	//Modified 2008-12-08 by Martin Johansson/CIKADO - MSIE 5.5 reported "Operation aborted" when loading the page
	//if (document.createStyleSheet) document.createStyleSheet().addRule('.tree a.title','float:left;'); /* Added 2008-12-03 by Martin Johansson/CIKADO - did not work with Opera 9.62 */
	if (document.styleSheets && document.styleSheets.length>0) document.styleSheets[document.styleSheets.length-1].addRule('.tree a.title','float:left;');
}



var strAgentURL='/webshop/products.nsf/tree';
var strTargetURL='/webshop/engine.nsf/webshop.default.ls?open&id=2';
var strWindowTarget='webshop';

var Trees=new Object();

if (window.addEventListener) window.addEventListener('load',LoadTrees,false);
else if (window.attachEvent) window.attachEvent('onload',LoadTrees);
else if (!window.onload) window.onload=LoadTrees;
else LoadTrees()

function LoadTrees() {

	var strArrIds=new Array();
	strArrIds.push('tree1');
//	strArrIds.push('tree2');

	for (var i=0; i<strArrIds.length; i++) {

		var objTree=new Tree(strArrIds[i],true,true);
		Trees[strArrIds[i]]=objTree;

		objTree.Load(strAgentURL,true);
	}
}

function HandleClick(strTreeId,e) {

	if (!strTreeId) throw new Error(1000,'The tree container must have an Id attribute');

	var eltTarget=(e.target ? e.target : e.srcElement ? e.srcElement : null)
	if (!eltTarget) throw new Error(1000,'No event available');

	var objTree=Trees[strTreeId]

	if (eltTarget.nodeName=='A' && eltTarget.firstChild.nodeName=='SPAN') return (objTree.Expand(eltTarget.firstChild) || false);
	if (eltTarget.nodeName=='SPAN' && eltTarget.parentNode.nodeName=='A') return (objTree.Expand(eltTarget) || false);

	if (eltTarget.nodeName=='A') {
		var eltIMG=eltTarget.previousSibling.firstChild;
		if (eltIMG && !objTree.IsExpanded(eltIMG)) objTree.Expand(eltTarget.previousSibling.firstChild);
		window.open(strTargetURL+'&tradid='+eltTarget.parentNode.parentNode.id.substr(strTreeId.length+1),strWindowTarget);//,'',false);
	}
	return false;
}

function Tree(strTreeId,boolCollapseSiblings,boolPreserveExpanded) {

	var me=this;
	var boolMSIE7=(navigator.userAgent.indexOf(' MSIE ')>0 && document.documentElement && document.documentElement.currentStyle && document.documentElement.currentStyle.minWidth)

	this.Id=strTreeId;
	this.CollapseSiblings=boolCollapseSiblings;
	this.PreserveExpanded=boolPreserveExpanded;
	this.XML=null;
	this.ExpandedIds=new Array();

	this.Load=function(strURL,boolAsync) {

		var objXMLHttp=tmt.CreateXMLHttp();
		if (objXMLHttp) {

			if (boolAsync) objXMLHttp.onreadystatechange=function() {if (objXMLHttp.readyState==4) BuildTree(objXMLHttp);}
			objXMLHttp.open('GET',strURL,boolAsync);
			objXMLHttp.setRequestHeader('Cache-Control','no-cache'); //opera does not handle cached responses (304) and this makes opera not send HTTP_IF_MODIFIED_SINCE
			objXMLHttp.send(null);
			if (!boolAsync) BuildTree(objXMLHttp);
		}
		else BuildTree(null);
	}

	this.IsExpanded=function(eltIMG) {
		var eltDIV=eltIMG.parentNode.parentNode;
		var eltULChild=eltDIV.nextSibling;
		return !(!eltULChild || eltULChild.style.display!='block');
	}

	this.Expand=function(eltIMG,boolBuildOnly) {

		var eltDIV=eltIMG.parentNode.parentNode;
		var strId=eltDIV.parentNode.id;

		var eltULChild=eltDIV.nextSibling;

		if (!eltULChild && this.XML) {
			var objULChildren=this.XML.selectNodes('//li[@id="'+strId+'"]/ul/li')
			if (objULChildren.length>0) eltULChild=eltDIV.parentNode.appendChild(CreateChildren(objULChildren,strId));
		}

		if (!eltULChild || boolBuildOnly) return;

		if (eltULChild.style.display!='block') {

			if (this.CollapseSiblings) {
				var eltArrLI=eltDIV.parentNode.parentNode.childNodes;
				for (var i=0; i<eltArrLI.length; i++) if (eltArrLI[i].tagName=='LI' && eltArrLI[i]!=eltDIV.parentNode) Collapse(eltArrLI[i]);
			}
			SetExpanded(eltULChild,eltIMG,strId);			
		}
		else {
			SetCollapsed(eltULChild,eltIMG,strId);
		}

		if (this.PreserveExpanded) SetCookie(this.Id,this.ExpandedIds.join(','));
	}

	function Collapse(eltLI) {

		var objA=eltLI.getElementsByTagName('A')[0];
		if (objA) {
			var eltIMG=objA.firstChild;
			if (eltIMG.tagName=='SPAN') {
				var eltDIV=eltLI.firstChild;
				var eltULChild=eltDIV.nextSibling;
				if (eltULChild) SetCollapsed(eltULChild,eltIMG,eltDIV.parentNode.id);
			}
		}
	}

	function SetExpanded(eltULChild,eltIMG,strId) {
		eltULChild.style.display='block';
		eltIMG.className='minus';
		me.ExpandedIds.push(strId);
	}

	function SetCollapsed(eltULChild,eltIMG,strId) {
		eltULChild.style.display='none';
		eltIMG.className='plus';
		for (var i=0; i<me.ExpandedIds.length; i++) if (strId==me.ExpandedIds[i]) me.ExpandedIds.splice(i,1);
	}

	function BuildTree(objXMLHttp) {	

		var eltContainer=document.getElementById(me.Id);

if (!eltContainer) return; //Added 2008-10-30 by Martin Johansson/CIKADO - this happens when page is edited in Termite...

		if (!objXMLHttp) {
			eltContainer.innerHTML='No XML HTTP object available';
		}
		else if (objXMLHttp.status!=200) {
			eltContainer.innerHTML='HTTP Error: '+objXMLHttp.statusText+' ('+objXMLHttp.status+')';
		}
		else if (eltContainer.firstChild.nodeName!='UL') {

			var objXML=objXMLHttp.responseXML;
			if (objXML && objXML.documentElement && objXML.documentElement.nodeName=='ul') {

				me.XML=objXMLHttp.responseXML;

				eltContainer.innerHTML='';
				eltContainer.appendChild(CreateChildren(objXML.documentElement.childNodes,eltContainer.id));
			}
			else {
				var strHTML=objXMLHttp.responseText;
				eltContainer.innerHTML=strHTML.substr(strHTML.indexOf('?>')+2);
			}

			var strExpand=(me.PreserveExpanded ? unescape(GetCookie(me.Id)) : '');
			if (!strExpand && location.search.indexOf('&expand=')>0) {
				strExpand=location.search.split('&expand=')[1]
				if (strExpand.indexOf('&')>=0) strExpand=strExpand.split('&')[0];
			}
			if (strExpand) {
				var strArrExpand=strExpand.split(',');
				for (var i=0; i<strArrExpand.length; i++) ExpandById(strArrExpand[i]);
			}
		}
	}

	function ExpandById(strId,boolBuildOnly) {

		if (strId.length==0) return;

		var eltLI=document.getElementById(strId);
		if (!eltLI) {
			ExpandById(strId.substr(0,strId.lastIndexOf('-')),true);
			eltLI=document.getElementById(strId);
		}

		if (eltLI) {
			var objA=eltLI.getElementsByTagName('A')[0];
			if (objA) {
				var eltIMG=objA.firstChild;
				if (eltIMG.tagName=='SPAN') me.Expand(eltIMG,boolBuildOnly);
			}
		}
	}

	function CreateChildren(objULChildren,strParentId) {
	
		var intId=1;
		var strArr=new Array();

		for (var i=0; i<objULChildren.length; i++) {

			var objChild=objULChildren[i];
			if (objChild.nodeType==1) {

				var strId=objChild.getAttribute('id');
				if (!strId) {
					strId=strParentId+'-'+intId;
					objChild.setAttribute('id',strId);
				}
				else {
					strId=me.Id+'-'+strId;
					objChild.setAttribute('id',strId);
				}

				var objFirstChild=objChild.firstChild;
				if (objFirstChild) {
					if (boolMSIE7) objFirstChild.setAttribute('style','width:auto'); //to make ellipsis work for MSIE 7 (see the css file)
					strArr.push('<LI id="'+strId+'" title="'+GetText(objFirstChild).split('"').join('&quot;')+'">'+GetXML(objFirstChild)+'</LI>');
				}

				intId++;
			}
		}
		
		var eltULChild=document.createElement('UL');
		eltULChild.innerHTML=strArr.join('');
		return eltULChild;
	}

	function GetCookie(strName) {
		var strArr=document.cookie.split('; ').join(';').split(';');
		for (var i=0; i<strArr.length; i++) if (strArr[i].indexOf(strName+'=')==0) return strArr[i].split('=')[1];
		return '';
	}

	function SetCookie(strName,strValue) {
		document.cookie=strName+'='+escape(strValue);	//+'; path='+location.pathname+'/';
	}

	function GetXML(objNode) {
		var strXML=objNode.xml
		return (typeof(strXML)!='undefined' ? strXML : window.XMLSerializer ? (new XMLSerializer()).serializeToString(objNode) : null);
	}

	function GetText(objNode) {
		while (objNode && objNode.nodeType==1) objNode=objNode.lastChild;
		return (objNode && objNode.nodeValue ? objNode.nodeValue : '');
	}
}
