function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

var imgDir="";
folderIcon = "";
var indexOfEntries = new Array;
var nEntries = 0;
var auxs = new Array;

function setIcon(icon){	
	folderIcon = icon;
}

function Folder(folderDescription,permissionCode)
{
	this.description = folderDescription;
	this.permissionCode = permissionCode;
	this.id = -1;
	this.navObj = 0;
	this.iconImg = 0;
	this.nodeImg = 0;
	this.isLastNode = 0;
	this.father = 0;
	this.isOpen = false;
	this.iconSrc = folderIcon;
	this.children = new Array;
	this.nChildren = 0;
	this.selectedChildren = 0;
	this.leftSide="";
	this.hasDrawed = false;
	this.drawChildren = drawChildren;
	this.fatherDiv = 0;
	this.checked = false;
	this.permissionCode = permissionCode;
	
	this.initialize = initialize;
	this.setState = setState;
	this.addChild = addChild;
	this.createIndex = createEntryIndex;
	this.hide = hide;
	this.display = display;
	this.draw = draw;
}

function repaint(folder)
{
	
	
	var i=0;
	if (folder.isOpen)
	{
		if (folder.nodeImg)
			if (folder.isLastNode){
				if(folder.nChildren>0)
					folder.nodeImg.src = imgDir + "Lminus.gif";
			}
			else{
				if( folder.nChildren>0) {
					document.all(folder.nodeImg.name).src =imgDir+"Lminus.gif";
				}
			}
			
			folder.display();
			if(folder.hasDrawed){
				for(i=0;i<folder.nChildren;i++){
					repaint(folder.children[i]);
			}
		}
	}
	else
	{
		if (folder.nodeImg)
			if (folder.isLastNode){
				if( folder.nChildren>0)
					folder.nodeImg.src = imgDir + "Lplus.gif";
			}
			else{
				if( folder.nChildren>0)
					document.all(folder.nodeImg.name).src =imgDir+ "Tplus.gif";
			}
		folder.hide();
	}

}

function createEntryIndex()
{
	this.id = nEntries;
	indexOfEntries[nEntries] = this;
	nEntries++;
}


function initialize(level, lastNode, leftSide)
{
	var j=0;
	var i=0;
	var numberOfFolders;
	var numberOfDocs;
	var nc;

	nc = this.children.length;
	this.createIndex();
	
	if (level>0){
		if (lastNode){
			if( nc>0)
				nodeImage = "Lplus.gif";
			else
				nodeImage = "L.gif";
			this.leftSide = leftSide+"<img name='nodeIcon" + this.id + "' src='" + imgDir + nodeImage+"' border=0 cellspacing=0 cellpadding=0>";
			leftSide = leftSide + "<img src='" + imgDir + "blank.gif' >";
			this.isLastNode = 1;
		}
		else{
			if( nc>0)
				nodeImage = "Tplus.gif";
			else
				nodeImage = "T.gif";
			this.leftSide = leftSide+"<img name='nodeIcon" + this.id + "' src='" + imgDir +nodeImage +"' >";
			leftSide = leftSide + "<img src='" + imgDir + "I.gif' >";
			this.isLastNode = 0;
		}
	}
	else
		this.draw();
	
	if (nc > 0)
	{
		level = level + 1;
		for (i=0 ; i < this.nChildren; i++)
		{
			if (i == this.nChildren-1)
				this.children[i].initialize(level, 1, leftSide);
			else
				this.children[i].initialize(level, 0, leftSide);
		}
	}

}


function drawChildren(){
	var i;
	var str = "";
	if( this.nChildren>0){
		var currentFolder = eval("folder"+this.id);
		this.navObj = currentFolder;
	}
	for(i=0;i<this.nChildren;i++){
		this.children[i].fatherDiv = currentFolder;
		this.children[i].draw();
	}
	this.hasDrawed = true;
}

function draw()
{
	var str="";
	str = "<table class='font-default' style='margin-left:0px' ";
	str +="title='"+this.description+"'";
	str +=" border=0 cellspacing=0 cellpadding=0>";
	str +="<tr valign=top>";
	str +="<td nowrap onclick=clickOnNode("+this.id+")>";
	str +=this.leftSide;
		str +="<img name='folderIcon" + this.id + "' ";
	str +="src='" + imgDir + this.iconSrc+"'>";	
	str +="</td>";	
	str +="<td>";
	
	if( this.permissionCode.length>0 && this.permissionCode != "#")
	{		
		str +="<a class='a-favMenu' href=";		
		str+=this.permissionCode
		str += "&folderID=" + this.id ;
		str += " onclick='clickOnNode("+this.id+");'";
		str +="' title=" + this.description + ">";
		str +=this.description ;
		str +="</a></td></tr>";
		str +="</table>";
	}
	else
	{	
		str +="<td nowrap onclick=clickOnNode("+this.id+")>";
		str +="<a class='a-favMenu' href='javascript:'>" + this.description;		
		str +="</a></td></tr>";
		str +="</table>";
	}
 	if( this.nChildren>0)
	 {
		str += "<table class='font-default' style='margin-left:0px' border=0 cellspacing=0 cellpadding=0><tr><td>";
		str += "<div id=folder"+this.id+" ></div>";
		str += "</td></tr></table>";
	 }
	if( this.id==0)
	{
		str ="<table class='font-default' style='margin-left:0px'><tr><td><div id='ff'>"+str;
		str += "</div></td></tr></table>";
		document.write(str);
	}
	else
		this.fatherDiv.innerHTML += str;
	this.iconImg = eval("folderIcon"+this.id);
	if( this.id>0)
		this.nodeImg =  eval("nodeIcon"+this.id);
}

function hide()
{
	if( this.hasDrawed) {
		this.navObj.style.display = "none";
		this.setState(0);
	}
}

function display()
{
	if( !this.hasDrawed){
		this.drawChildren();
	}
	else{
		this.navObj.style.display = "block";
	}
}

function setState(isOpen)
{
	if (isOpen == this.isOpen){
		return;
	}
	this.isOpen = isOpen;
	repaint(this);
}

function clickOnNode(folderID)
{
	var clickedFolder = 0;
	var state = 0;
	clickedFolder = indexOfEntries[folderID];
	state = clickedFolder.isOpen;
	if(( clickedFolder.children.length>0) || (folderID == 15) || (folderID == 53) || (folderID == 54) || (folderID == 55) || (folderID == 56) || (folderID == 57)){
		clickedFolder.setState(!state);
	}
	else{
		folderID = folderID - 1;
		clickOnNode(folderID);
	}
}

function treeMenuAddItem(level, description, permissionCode)
{
	if(level)
		auxs[level] = auxs[level - 1].addChild(new Folder(description, permissionCode));
	else
		auxs[0] = new Folder(description,permissionCode);
}



function initializeDocument(){
	var foldersTree;
	foldersTree = auxs[0];
	foldersTree.initialize(0, 1, "");
}




function addChild(childObject)
{
	this.children[this.nChildren] = childObject;
	childObject.father= this;
	this.nChildren++;
	return childObject;
}

function checkState(folderID){
	var clickedFolder = 0;
	clickedFolder = indexOfEntries[folderID];
	var checkBox = eval("checkBox"+folderID);
	if( !checkBox.checked){
		if( clickedFolder.nChildren==0){
			if( unSelectItemBrother(clickedFolder))
				unSelectItem(clickedFolder);
		}
		else
			unSelectFolder(clickedFolder);
	}
	else{
		if( clickedFolder.nChildren==0){
			selectItem(clickedFolder);
			selectItemBrother(clickedFolder);
		}
		else
			selectFolder(clickedFolder);
	}
}


function getPermissionCode(permission){
	var a = permission.split(",");
	return (new Number(a[1]));
}

function unSelectItem(folder){
	folder.father.selectedChildren--;
	var checkBox = eval("checkBox"+folder.id);
	checkBox.checked = false;
	folder.checked = false;
	unSelectFather(folder.father);
}

function selectItem(folder){
	folder.father.selectedChildren++;
	var checkBox = eval("checkBox"+folder.id);
	checkBox.checked = true;
	folder.checked = true;
	selectFather(folder.father);
}

function unSelectItemBrother(folder){
	var fatherElement;
	if( folder.nChildren>0)
		return false;
	fatherElement = folder.father;
	if( !fatherElement)
		return false;
	var checkBox = eval("checkBox"+folder.id);
	var brother;
	var permissionCode = getPermissionCode(checkBox.value);
	var i;
	var brotherPermissionCode ;
	if( permissionCode<=8){
		for(i=0;i<fatherElement.nChildren;i++){
			brother = eval("checkBox"+fatherElement.children[i].id);
			if( brother.checked){			
				brotherPermissionCode = getPermissionCode(brother.value);
				if( brotherPermissionCode<=8 && brotherPermissionCode>permissionCode){
					checkBox.checked = true;
					fatherElement.children[i].checked=true;
					return false;
				}
			}
		}
	}
	return true;
}

function selectItemBrother(folder){
	var fatherElement;
	if( folder.nChildren>0)
		return;
	fatherElement = folder.father;
	if( !fatherElement)
		return;
	var checkBox = eval("checkBox"+folder.id);
	var brother;

	var permissionCode = getPermissionCode(checkBox.value);
	if( permissionCode>8)
		return;

	for(i=0;i<fatherElement.nChildren;i++){
		brother = eval("checkBox"+fatherElement.children[i].id);
		if( getPermissionCode(brother.value)<permissionCode){
			if( !brother.checked){
				brother.checked = true;
				fatherElement.children[i].checked=true;
				fatherElement.selectedChildren++;
				selectFather(fatherElement);
			}
		}
	}
}

function unSelectFather(fatherFolder){
	var fatherElement = fatherFolder.father;
	var fatherCheckBox = eval("checkBox"+fatherFolder.id);
	if( fatherCheckBox.checked){
		if( fatherFolder.selectedChildren == 0){
			fatherCheckBox.checked = false;
			fatherFolder.checked = false;
			if( fatherElement){
				fatherElement.selectedChildren--;
				unSelectFather(fatherElement);
			}		
		}
	}	
}


function selectFather(fatherFolder){	
	var fatherElement = fatherFolder.father;
	var fatherCheckBox = eval("checkBox"+fatherFolder.id);
	if( !fatherCheckBox.checked){
		fatherCheckBox.checked = true;
		fatherFolder.checked =true;
		if( fatherElement )
			fatherElement.selectedChildren++;
	}
	if( fatherElement ){
		var fatherElementCheckBox = eval("checkBox"+fatherElement.id);
		if(!fatherElementCheckBox.checked ){
				selectFather(fatherElement);
		}
	}
}



function selectFolder(folder){
	var fatherElement = folder.father;
	if( fatherElement){
		fatherElement.selectedChildren++;
		selectFather(fatherElement);
	}
	selectSubFolder(folder);
}


function selectSubFolder(folder){
	var i;
	folder.selectedChildren = folder.nChildren;
	if( folder.selectedChildren ==0)
		return;
	var checkBox;
	var childrenCheckBox;

	if( folder.hasDrawed){
		checkBox = eval("checkBox"+folder.id);
		checkBox.checked = true;
	}
	folder.checked = true;

	for (i=0 ; i < folder.nChildren; i++){
		if(folder.hasDrawed){
			childrenCheckBox = eval("checkBox"+folder.children[i].id);
			childrenCheckBox.checked = true;
		}
		else
			folder.children[i].checked = true;
		if( folder.children[i].nChildren>0)
			selectSubFolder(folder.children[i]);
	}
}

function unSelectFolder(folder){
	var fatherElement = folder.father;
	if(fatherElement ){
		var fatherElementCheckBox = eval("checkBox"+fatherElement.id);
		if(fatherElementCheckBox.checked){
			fatherElement.selectedChildren--;
			unSelectFather(fatherElement);
		}
	}
	unSelectSubFolder(folder);
}

function unSelectSubFolder(folder){
	var i;
	folder.selectedChildren = 0;
	var checkBox;
	var childrenCheckBox;
	if( folder.hasDrawed){
		checkBox = eval("checkBox"+folder.id);
		checkBox.checked = false;
	}
	else
		folder.checked = false;
	for (i=0 ; i < folder.nChildren; i++){
		if(folder.hasDrawed){
			childrenCheckBox = eval("checkBox"+folder.children[i].id);
			childrenCheckBox.checked = false;
		}
		folder.children[i].checked = false;
		if( folder.children[i].nChildren>0)
			unSelectSubFolder(folder.children[i]);
	}
}

function preSelect(folderID){
	var clickedFolder = 0;
	clickedFolder = indexOfEntries[folderID];
	preSelectItem(clickedFolder);
}

function preSelectItem(folder){
	var checkBox = eval("checkBox0");
	checkBox.checked = true;

	folder.checked = true;
	folder.father.selectedChildren++;
	preSelectFather(folder.father);
}

function preSelectFather(folder){
	var fatherElement = folder.father;
	if( !folder.checked){
		if(fatherElement)
			fatherElement.selectedChildren++;
	}
	folder.checked = true;
	if( fatherElement ){
		preSelectFather(fatherElement);
	}
}


function getPermission(){
	var i;
	var str="";
	for(i=0;i<indexOfEntries.length;i++){
		if( indexOfEntries[i].checked ){
			if( indexOfEntries[i].permissionCode != "-1")
				str += indexOfEntries[i].permissionCode+";";
		}
	}
	if( str.length>0)
		str = str.substr(0,str.length-1);
	if( str.length==0){
		permissionValue.value="";
		return ;
	}
	var a = str.split(";");
	var b;
	var c;
	var d;
	var permissionName="";
	var permissionCode=0;
	str = "";	
	for(i=0;i<a.length;i++){
		b = a[i].split(",");
		c = b[0];
		d = b[1];
		if(permissionName != c){
			if (permissionName.length>0)
				str += permissionName+","+permissionCode+";";
			permissionName = c;
			permissionCode = d;
		}
		else{
	 		permissionCode |= d;
		}
	}
	if( permissionName.length>0)
		str += permissionName+","+permissionCode;
	permissionValue.value = str;
	
}

function expand(){
	var version;
	version = navigator.appVersion;
	var start,end;
	start = version.indexOf("MSIE")+5;
	end = version.indexOf(';',start);
	version = version.substring(start,end);
	var n = new Number(version);
	if(n>4.01)
		clickOnNode(0);
}
