/////////////////////////////////////////////////////////////////////////////////////
// navigation version 3.23.00 for admin and hierarchy editor module
//-----------------------------------------------------------------------------
// ! DO NOT REMOVE THIS NOTICE ! 
// ! DO NOT CHANGE THIS NOTICE !
// THIS IS A LICENSED VERSION. 
// IT IS NOT ALLOWED TO REDISTRIBUTE THIS PRPGRAM OR ANY PART OF IT.
//-----------------------------------------------------------------------------
// Copyright (c) 2001-2007 by aClass+aWeaver and Ralph Stuermer. All Rights reserved.
// Developing+Programming by Ralph Stuermer
// This script is not compatible with dTree. Modified for freestyle ONE using.
/////////////////////////////////////////////////////////////////////////////////////

var NODE_SET_ID=0;
var NODE_CHILDREN=1;
var NODE_PATH=2;
var NODE_LEVEL=3;
var NODE_PARENT=4;
var NODE_FIRST=5;
var NODE_LAST=6;
var NODE_DATA_REF=7;
var NODE_STATE=Math.max(NODE_SET_ID,Math.max(NODE_CHILDREN,Math.max(NODE_PATH,Math.max(NODE_LEVEL,Math.max(NODE_PARENT,Math.max(NODE_FIRST,Math.max(NODE_LAST,NODE_DATA_REF)))))))+1;
var NODE_STATE_COLLAPSED=0;
var NODE_STATE_EXPANDED=1;

/////////////////////////////////////////////////////////////////////////////////
// Link
// http://benutzername:passwort@hostname:port/pfad/file.ext?argument=wert#textanker
function Link(url) {
	this.debug=false;
	this.href=url;
	this.url=url;
	this.scheme='';
  this.user='';
  this.pass='';
  this.host='';
  this.port='';
  this.path='';
  this.file='';
  this.extension='';
  this.query='';
  this.parameter=new Array();
  this.fragment='';
  if(this.url.search(/\:\/\//g)!=-1){
  	var temp=this.url.split("://");
  	this.scheme=temp[0];
  	this.url=temp[1];
  }
  if(this.debug) alert('1. '+this.url);
  if(this.url.search(/\#/g)!=-1){
  	var temp=this.url.split("#");
  	this.url=temp[0];
  	this.fragment=temp[1];
  }
	if(this.debug) alert('2. '+this.url);
  if(this.url.search(/\?/g)!=-1){
  	var temp=this.url.split("?");
  	this.url=temp[0];
  	this.query=temp[1];
  }
	if(this.debug) alert('3. '+this.url);
  if(this.url.search(/\//g)!=-1){
		var temp=this.url.split("/");	
		this.url=temp[0];
		this.file=temp[temp.length-1];
		this.path='';
		for(var i=1; i<temp.length; i++) {
			if(this.debug) alert('3.'+i+'. '+temp[i]);
			this.path+='/'+temp[i];
		}
		if(this.file.search(/\./g)!=-1) {
			var temp=this.file.split(".");
			this.extension=temp[temp.length-1];
		}
		if(this.debug) alert('4. '+this.url);
	  if(this.url.search(/\@/g)!=-1){
	  	var temp=this.url.split("@");
	  	this.url=temp[1];
	  	temp=temp[0].split(":");
	  	this.user=temp[0];
	  	if(temp.length>1) {
	  		this.pass=temp[1];
	  	}
	  }
	  if(this.debug) alert('5. '+this.url);
	  if(this.url.search(/\:/g)!=-1){
	  	var temp=this.url.split(":");
			this.host=temp[0];
	  	if(temp.length>1) {
	  		this.port=temp[1];
	  	}
	  } else {
	  	this.host=this.url;
	  }
	} else {
		this.path=this.url;
	}
  if(this.debug) alert('6. '+this.query);
	if(this.query.length>0) {
		var pairs = this.query.split(/[;&]/);
		var parameter=new Array();
		var k,v;
		for(var i=0; i< pairs.length; i++) {
		  var kv=pairs[i].split('=');
		  if (!kv||kv.length!=2) continue;
		  k=unescape(kv[0]);
		  v=unescape(kv[1]);
		  v=v.replace(/\+/g,' ');
		  parameter[k]=v;
		}
		this.parameter=parameter;
	}
	if(this.debug) {
		for(var k in this.parameter) {
			alert('6. '+k+'='+this.parameter[k]);
		}
	}
	this.url=url;
}

Link.prototype.build = function(host) {	
	this.href='';
	if(this.scheme.length>0) this.href+=this.scheme+'://';
	if(this.user.length>0) {
		this.href+=this.user
		if(this.pass.length>0) this.href+=':'+this.pass;
		this.href+='@';
	}
	if(this.host.length>0) this.href+=this.host;
	if(this.port.length>0) this.href+=':'+this.port;
	if(this.path.length>0) this.href+=this.path;
	if(this.host.length==0||this.host==host) {
		k=session_name();
		if(!this.parameter[k]||this.parameter[k].length==0) {
			v=session_id();
			this.parameter[k]=v;
		}
	}
	var first=true;
	for(var k in this.parameter) {
		if(first) {
			this.href+='?';
			first=false;
		}else {
			this.href+='&';
		}
		this.href+=k+'='+escape(this.parameter[k].replace(/ /g,'+'));
	}
	if(this.fragment.length>0) this.href+='#'+this.fragment;
	return this.href;
}

/////////////////////////////////////////////////////////////////////////////////
// class Item
function Item(link) {
	var	ht=link.split('|');
	this.href=ht[0];
	this.target=ht[1];
}
Item.prototype.has_link = function() {	
	return this.href.length>0;
}
Item.prototype.link = function() {	
	// var link=new Link('http://benutzername:passwort@hostname:port/pfad/file.ext?argument=wert#textanker');
	// var link=new Link('/pfad/file.ext?argument=wert');
	//alert(link.build());
	// return new Link(this.href).build();
	return this.href;
}
/////////////////////////////////////////////////////////////////////////////////
// class Navigation
function Navigation(name) {

	this.hierarchy=new Array();
	this.hierarchy_id=new Array();
	this.hierarchy_depth=0;
	this.hierarchy_name=name;

	this.single=false;
	
	this.smallest_height=true;
	this.location=new Object();
}
	
Navigation.prototype.add = function(node_id,path,item) {	
	var i=this.hierarchy.length;
	this.hierarchy[i]=new Array();
	this.hierarchy[i][NODE_SET_ID]=node_id;
	this.hierarchy[i][NODE_PATH]=path;
	this.hierarchy_id[path]=i;
	this.hierarchy[i][NODE_DATA_REF]=item;
	this.hierarchy[i][NODE_STATE]=NODE_STATE_EXPANDED;
}

Navigation.prototype.build = function() {	
	this.location=new Link(window.location.href);
	var i,p;
	var count=0;
	var level=0;
	var n=new Array();
	for(i=0; i<this.hierarchy.length; i++) {
		this.hierarchy[i][NODE_CHILDREN]=new Array();
		this.hierarchy[i][NODE_LEVEL]=this.hierarchy[i][NODE_PATH].split('_').length-1;
		p=this.hierarchy[i][NODE_PATH].substring(0,this.hierarchy[i][NODE_PATH].lastIndexOf('_'));
		this.hierarchy[i][NODE_PARENT]=p.length>0?p:false;
		this.hierarchy_depth=Math.max(this.hierarchy_depth,this.hierarchy[i][NODE_LEVEL]);
		n[level]=i;
		this.hierarchy[i][NODE_FIRST]=false;
		this.hierarchy[i][NODE_LAST]=false;
		if(level<this.hierarchy[i][NODE_LEVEL]) {
			this.hierarchy[i][NODE_FIRST]=true;
			level=this.hierarchy[i][NODE_LEVEL];
		} 
		if(this.hierarchy[i][NODE_PARENT]!=false) {
			this.hierarchy[this.hierarchy_id[this.hierarchy[i][NODE_PARENT]]][NODE_CHILDREN][this.hierarchy[this.hierarchy_id[this.hierarchy[i][NODE_PARENT]]][NODE_CHILDREN].length]=this.hierarchy[i][NODE_PATH];
		}
		while(level>this.hierarchy[i][NODE_LEVEL]) {
			this.hierarchy[n[level]][NODE_LAST]=true;
			level--;
		}
		this.hierarchy[i][NODE_STATE]=NODE_STATE_EXPANDED;
		count++;
	}
	this.single=count>1?false:true;
	while(level>0&&count>1) {
		try{ 
			this.hierarchy[n[level]][NODE_LAST]=true;
		} catch(ex){}
		level--;
	}
}	

Navigation.prototype.find_object = function(n,d) {		
  var p,i,x;
  if(!d) d=document;
  if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document;
    n=n.substring(0,p);
  }
  if(!(x=d[n])&&d.all)
  	x=d.all[n];
	for(i=0;!x&&d.forms&&i<d.forms.length;i++)
		x=d.forms[i][n];
	// images ?
	for(i=0;!x&&d.layers&&i<d.layers.length;i++)
		x=this.find_object(n,d.layers[i].document);
  if(!x && d.getElementById)
  	x=d.getElementById(n);
  return x;
}


Navigation.prototype.expand_hierarchy = function() {	
	var ec;
	for(var i=0; i<this.hierarchy.length; i++) {
		try{
			if(this.hierarchy[i][NODE_CHILDREN].length>0) {
				try{
					ec=this.find_object(this.hierarchy_name+'i'+this.hierarchy[i][NODE_PATH]);
					ec.src = ec.src.replace(/expand/,'collapse');
				} catch(ex) {}
				ec=this.find_object(this.hierarchy_name+this.hierarchy[i][NODE_PATH]+'_table');
				ec.className = ec.className.replace(/expand/,'collapse');
			}
		} catch(ex) {}
		try{
			this.find_object(this.hierarchy_name+this.hierarchy[i][NODE_PATH]).style.display='';
			this.hierarchy[i][NODE_STATE]=NODE_STATE_EXPANDED;
		} catch(ex) {}
	}
}

Navigation.prototype.collapse_hierarchy = function() {	
	var ec;
	for(var i=0; i<this.hierarchy.length; i++) {
		try{
			if(this.hierarchy[i][NODE_CHILDREN].length>0) {
				try{
					ec=this.find_object(this.hierarchy_name+'i'+this.hierarchy[i][NODE_PATH]);
					ec.src = ec.src.replace(/collapse/,'expand');
				} catch(ex) {}
				ec=this.find_object(this.hierarchy_name+this.hierarchy[i][NODE_PATH]+'_table');
				ec.className = ec.className.replace(/collapse/,'expand');
			}
		} catch(ex) { }
		this.hierarchy[i][NODE_STATE]=NODE_STATE_COLLAPSED;
		if(this.hierarchy[i][NODE_LEVEL]>1) {
			try{
				this.find_object(this.hierarchy_name+this.hierarchy[i][NODE_PATH]).style.display='none';
			} catch(ex) { }
		}
	}
}

Navigation.prototype.expand_node = function(path) {	
  var depth=(arguments.length>1)?arguments[1]:1;
	var i=this.hierarchy_id[path],j;
	if(this.hierarchy[i][NODE_CHILDREN].length>0&&depth>0) {
		for(j=0; j<this.hierarchy[i][NODE_CHILDREN].length; j++) {
			this.expand_node(this.hierarchy[i][NODE_CHILDREN][j],depth-1);
		}
		try {
			ec=this.find_object(this.hierarchy_name+'i'+this.hierarchy[i][NODE_PATH]);
			ec.src = ec.src.replace(/expand/,'collapse');
		} catch(ex) {}
		try {
			ec=this.find_object(this.hierarchy_name+this.hierarchy[i][NODE_PATH]+'_table');
			ec.className = ec.className.replace(/expand/,'collapse');
		} catch(ex) {}
	}
	if(depth>0||(depth>=0&&this.hierarchy[i][NODE_CHILDREN].length==0)) {
		this.hierarchy[i][NODE_STATE]=NODE_STATE_EXPANDED;
	}
	try{
		this.find_object(this.hierarchy_name+this.hierarchy[i][NODE_PATH]).style.display='';
	} catch(ex) {}
}

Navigation.prototype.collapse_node = function(path,collapse) {	
	var collapse=(arguments.length>1)?arguments[1]:false;
	var i=this.hierarchy_id[path],j;
	if(this.hierarchy[i][NODE_CHILDREN].length>0) {
		for(j=0; j<this.hierarchy[i][NODE_CHILDREN].length; j++) {
			this.collapse_node(this.hierarchy[i][NODE_CHILDREN][j],true);
		}
	}
	try {
		ec=this.find_object(this.hierarchy_name+'i'+this.hierarchy[i][NODE_PATH]);
		ec.src = ec.src.replace(/collapse/,'expand');
	} catch(ex) {}
	try {
		ec=this.find_object(this.hierarchy_name+this.hierarchy[i][NODE_PATH]+'_table');
		ec.className = ec.className.replace(/collapse/,'expand');
	} catch(ex) {}
	this.hierarchy[i][NODE_STATE]=NODE_STATE_COLLAPSED;
	if(this.hierarchy[i][NODE_LEVEL]<=1) return;
	if(collapse) {
		try{
			this.find_object(this.hierarchy_name+this.hierarchy[i][NODE_PATH]).style.display='none';
		} catch(ex) {}
	}
}

Navigation.prototype.expand_path = function(path) {	
	var i=this.hierarchy_id[path];
	var state=this.hierarchy[i][NODE_STATE];
	this.collapse_hierarchy();
	var n=path.split('_');
	var p='';
	// alert('n='+n.length);
	for(i=1; i<(n.length-1); i++) {
		p=p+'_'+n[i];
		// alert('n[i]='+n[i]+'p='+p+' path='+path);
		this.expand_node(p);
	}
	if(n.length>2&&state==NODE_STATE_EXPANDED) {
		this.collapse_node(path);
	} else {
		this.expand_node(path);
	}
}

Navigation.prototype.switch_hierarchy = function(path) {	
	var i=this.hierarchy_id[path];
	if(this.hierarchy[i][NODE_STATE]==NODE_STATE_EXPANDED) {
		this.collapse_node(this.hierarchy[i][NODE_PATH],false);
	} else {
		this.expand_node(this.hierarchy[i][NODE_PATH]);
	}
}

Navigation.prototype.onmouseclick = function(path,openclose) {	
	var i=this.hierarchy_id[path];
	var state=this.hierarchy[i][NODE_STATE];
	var item=this.hierarchy[i][NODE_DATA_REF];
	if(openclose>0) {
		if(this.smallest_height) {
			if(this.hierarchy[i][NODE_STATE]==NODE_STATE_EXPANDED) {
				this.collapse_node(this.hierarchy[i][NODE_PATH],false);
			} else {
				this.expand_path(path);
			}
		} else {
			this.switch_hierarchy(path);
		}
	} else {
		if(item.has_link()) {
			// alert(new Link(item.href).build(this.location.host));
			// alert('has a link');
			window.open(new Link(item.href,this.host).build(),item.target);
		} else {
			// alert('NO LINK');
			if(this.smallest_height) {
				if(this.hierarchy[i][NODE_STATE]==NODE_STATE_EXPANDED) {
					this.collapse_node(this.hierarchy[i][NODE_PATH],false);
				} else {
					this.expand_path(path);
				}
			} else {
				this.switch_hierarchy(path);
			}
		}
	}
}

