var JSTreeObj;
var JSTreeList = new Array();
var options_link_authorized = true;
var easylink_authorized = false;
var g_showLinkDate = true;
var g_showLinkDesc = true;
var treeUlCounter = 0;
var nodeId = 1;
var g_defaultLoadingImage = "./img/loading.png";
var g_defaultLoadingSize = "40px";
var boxType =
{
	video 		: 0,
	image 		: 1,
	site 		: 2,
	rss 		: 3,
	podcast 	: 4,
	text		: 5,
	unknown		: 6
}

referenceToDHTMLSuiteContextMenu = new DHTMLGoodies_contextMenu();
referenceToDHTMLSuiteContextMenu.setWidth(120);

/* Constructor */
function JSDragDropTree(dbid)
{
	var idOfTree;
	var boxType;
	var imageFolder;
	var folderImage;
	var plusImage;
	var minusImage;
	var maximumDepth;
	var dragNode_source;
	var dragNode_parent;
	var dragNode_sourceNextSib;
	var dragNode_noSiblings;
	var ajaxObjects;

	var dragNode_destination;
	var floatingContainer;
	var dragDropTimer;
	var dropTargetIndicator;
	var insertAsSub;
	var indicator_offsetX;
	var indicator_offsetX_sub;
	var indicator_offsetY;

	var boxOver;
	this.boxOver = null;

	this.imageFolder = './img/';
	this.folderImage = 'easyfav_folder.gif';
	this.plusImage = 'easyfav_plus.gif';
	this.minusImage = 'easyfav_minus.gif';
	this.maximumDepth = 6;
	var messageMaximumDepthReached;
	var filePathRenameItem;
	var filePathDeleteItem;
	var additionalRenameRequestParameters = {};
	var additionalDeleteRequestParameters = {};

	var renameAllowed;
	var deleteAllowed;
	var privateAllowed;
	var menuModel;
	var menuModelRenameOnly;
	var menuModelDeleteOnly;
	var menuModelAddEasyLinkOnly;
	var menuModelAddEasyLinkPrivateOnly;

	var currentlyActiveItem;
	var contextMenu;
	var currentItemToEdit;		// Reference to item currently being edited(example: renamed)
	var helpObj;

	this.contextMenu = false;
	this.floatingContainer = document.createElement('UL');
	this.floatingContainer.style.position = 'absolute';
	this.floatingContainer.style.display='none';
	this.floatingContainer.id = 'floatingContainer';
	this.floatingContainer.dbid = dbid;
	this.insertAsSub = false;
	document.body.appendChild(this.floatingContainer);
	this.dragDropTimer = -1;
	this.dragNode_noSiblings = false;
	this.currentItemToEdit = false;

	if(document.all){
		this.indicator_offsetX = 2;	// Offset position of small black lines indicating where nodes would be dropped.
		this.indicator_offsetX_sub = 4;
		this.indicator_offsetY = 2;
	}else{
		this.indicator_offsetX = 1;	// Offset position of small black lines indicating where nodes would be dropped.
		this.indicator_offsetX_sub = 3;
		this.indicator_offsetY = 2;
	}
	if(navigator.userAgent.indexOf('Opera')>=0){
		this.indicator_offsetX = 2;	// Offset position of small black lines indicating where nodes would be dropped.
		this.indicator_offsetX_sub = 3;
		this.indicator_offsetY = -7;
	}

	this.messageMaximumDepthReached = ''; // Use '' if you don't want to display a message

	this.renameAllowed = true;
	this.deleteAllowed = true;
	this.privateAllowed = true;
	this.currentlyActiveItem = false;
	this.filePathRenameItem = 'folderTree_updateItem.php';
	this.filePathDeleteItem = 'folderTree_updateItem.php';
	this.ajaxObjects = new Array();
	this.helpObj = false;

	this.RENAME_STATE_BEGIN = 1;
	this.RENAME_STATE_CANCELED = 2;
	this.RENAME_STATE_REQUEST_SENDED = 3;
	this.renameState = null;
}


/* JSDragDropTree class */
JSDragDropTree.prototype = {
	// {{{ addEvent()
	/**
	*
	*  This function adds an event listener to an element on the page.
	*
	*	@param Object whichObject = Reference to HTML element(Which object to assigne the event)
	*	@param String eventType = Which type of event, example "mousemove" or "mouseup"
	*	@param functionName = Name of function to execute.
	*
	* @public
	*/
	addEvent : function(whichObject,eventType,functionName)
	{
		if(whichObject.attachEvent){
			whichObject['e'+eventType+functionName] = functionName;
			whichObject[eventType+functionName] = function(){whichObject['e'+eventType+functionName]( window.event );}
			whichObject.attachEvent( 'on'+eventType, whichObject[eventType+functionName] );
		} else
		whichObject.addEventListener(eventType,functionName,false);
	}
	// }}}
	,
	// {{{ removeEvent()
	/**
	*
	*  This function removes an event listener from an element on the page.
	*
	*	@param Object whichObject = Reference to HTML element(Which object to assigne the event)
	*	@param String eventType = Which type of event, example "mousemove" or "mouseup"
	*	@param functionName = Name of function to execute.
	*
	* @public
	*/
	removeEvent : function(whichObject,eventType,functionName)
	{
		if(whichObject.detachEvent){
			whichObject.detachEvent('on'+eventType, whichObject[eventType+functionName]);
			whichObject[eventType+functionName] = null;
		} else
		whichObject.removeEventListener(eventType,functionName,false);
	}
	,
	Get_Cookie : function(name) {
		var start = document.cookie.indexOf(name+"=");
		var len = start+name.length+1;

		if ((!start) && (name != document.cookie.substring(0,name.length))) return null;
		if (start == -1) return null;
		var end = document.cookie.indexOf(";",len);
		if (end == -1) end = document.cookie.length;
		return unescape(document.cookie.substring(len,end));
	}
	,
	// This function has been slightly modified
	Set_Cookie : function(name,value,expires,path,domain,secure) {

		expires = expires * 60*60*24*1000;
		var today = new Date();
		var expires_date = new Date( today.getTime() + (expires) );
		var cookieString = name + "=" +escape(value) +
		( (expires) ? ";expires=" + expires_date.toGMTString() : "") +
		( (path) ? ";path=" + path : "") +
		( (domain) ? ";domain=" + domain : "") +
		( (secure) ? ";secure" : "");
		document.cookie = cookieString;
	}
	,
	setFileNameRename : function(newFileName)
	{
		this.filePathRenameItem = newFileName;
	}
	,
	setFileNameDelete : function(newFileName)
	{
		this.filePathDeleteItem = newFileName;
	}
	,
	setAdditionalRenameRequestParameters : function(requestParameters)
	{
		this.additionalRenameRequestParameters = requestParameters;
	}
	,
	setAdditionalDeleteRequestParameters : function(requestParameters)
	{
		this.additionalDeleteRequestParameters = requestParameters;
	}
	,setRenameAllowed : function(renameAllowed)
	{
		this.renameAllowed = renameAllowed;
	}
	,
	setDeleteAllowed : function(deleteAllowed)
	{
		this.deleteAllowed = deleteAllowed;
	}
	,setMaximumDepth : function(maxDepth)
	{
		this.maximumDepth = maxDepth;
	}
	,setMessageMaximumDepthReached : function(newMessage)
	{
		this.messageMaximumDepthReached = newMessage;
	}
	,
	setImageFolder : function(path)
	{
		this.imageFolder = path;
	}
	,
	setFolderImage : function(imagePath)
	{
		this.folderImage = imagePath;
	}
	,
	setPlusImage : function(imagePath)
	{
		this.plusImage = imagePath;
	}
	,
	setMinusImage : function(imagePath)
	{
		this.minusImage = imagePath;
	}
	,
	setTreeId : function(idOfTree)
	{
		this.idOfTree = idOfTree;
	}
	,
	setBoxType	: function(boxType)
	{
		this.boxType = boxType;
	}
	,
	expandAll : function()
	{
		var menuItems = document.getElementById(this.idOfTree).getElementsByTagName('LI');
		for(var no=0;no<menuItems.length;no++){
			var subItems = menuItems[no].getElementsByTagName('UL');
			if(subItems.length>0 && subItems[0].style.display!='block'){
				JSTreeObj.showHideNode(false,menuItems[no].id);
			}
		}
	}
	,
	collapseAll : function()
	{
		if (document.getElementById(this.idOfTree))
		{
			var menuItems = document.getElementById(this.idOfTree).getElementsByTagName('LI');
			for(var no=0;no<menuItems.length;no++){
				var subItems = menuItems[no].getElementsByTagName('UL');
				if(subItems.length>0 && subItems[0].style.display=='block'){
					JSTreeObj.showHideNode(false,menuItems[no].id);
				}
			}
		}
	}
	,
	/*
	Find top pos of a tree node
	*/
	getTopPos : function(obj){
		var top = obj.offsetTop/1;
		while((obj = obj.offsetParent) != null){
			if(obj.tagName!='HTML')top += obj.offsetTop;
		}
		if(document.all)top = top/1 + 13; else top = top/1 + 4;
		return top;
	}
	,
	/*
	Find left pos of a tree node
	*/
	getLeftPos : function(obj){
		var left = obj.offsetLeft/1 + 1;
		while((obj = obj.offsetParent) != null){
			if(obj.tagName!='HTML')left += obj.offsetLeft;
		}

		if(document.all)left = left/1 - 2;
		return left;
	}

	,
	showHideNode : function(e,inputId)
	{
		if(inputId){
			if(!document.getElementById(inputId))return false;
			thisNode = document.getElementById(inputId).getElementsByTagName('IMG')[0];
		}else {
			thisNode = this;
			if(this.tagName=='A')thisNode = this.parentNode.getElementsByTagName('IMG')[0];

		}
		if(thisNode.style.visibility=='hidden')return false;
		var parentNode = thisNode.parentNode;
		inputId = parentNode.id.replace(/[^0-9-]/g,'');
		if(thisNode.src.indexOf(JSTreeObj.plusImage)>=0){
			thisNode.src = thisNode.src.replace(JSTreeObj.plusImage,JSTreeObj.minusImage);
			var ul = parentNode.getElementsByTagName('UL')[0];
			ul.style.display='block';
			if(!initExpandedNodes)initExpandedNodes = ',';
			if(initExpandedNodes.indexOf(',' + inputId + ',')<0) initExpandedNodes = initExpandedNodes + inputId + ',';
		}else{
			thisNode.src = thisNode.src.replace(JSTreeObj.minusImage,JSTreeObj.plusImage);
			parentNode.getElementsByTagName('UL')[0].style.display='none';
			initExpandedNodes = initExpandedNodes.replace(',' + inputId,'');
		}
		JSTreeObj.Set_Cookie('easyFav_expandedNodes',initExpandedNodes,500);
		return false;
	}
	,
	/* Initialize drag */
	initDrag : function(e)
	{
		LINK_HideMenu();
		
		if(document.all)e = event;
		
		var subs = JSTreeObj.floatingContainer.getElementsByTagName('LI');
		if(subs.length>0){
			if(JSTreeObj.dragNode_sourceNextSib){
				JSTreeObj.dragNode_parent.insertBefore(JSTreeObj.dragNode_source,JSTreeObj.dragNode_sourceNextSib);
			}else{
				JSTreeObj.dragNode_parent.appendChild(JSTreeObj.dragNode_source);
			}
		}
		//JSTreeObj.dragNode_source = this.parentNode;
		//JSTreeObj.dragNode_parent = this.parentNode.parentNode;
		JSTreeObj.dragNode_source = this.parentNode.parentNode.parentNode.parentNode.parentNode;
		//alert(JSTreeObj.dragNode_source);

		JSTreeObj.dragNode_parent = this.parentNode.parentNode;
		JSTreeObj.dragNode_sourceNextSib = false;

		//JSTreeObj.dragNode_source.boxId = JSTreeObj.dragNode_parent.parentNode.attributes[0].nodeValue;
		JSTreeObj.dragNode_source.boxId = JSTreeObj.dragNode_parent.parentNode.parentNode.parentNode.parentNode.parentNode.attributes[0].nodeValue;
		JSTreeObj.dragNode_source.clientBoxId = JSTreeObj.dragNode_parent.parentNode.parentNode.parentNode.parentNode.id.replace(/[^0-9-]/g,'');
		if(JSTreeObj.dragNode_source.nextSibling)JSTreeObj.dragNode_sourceNextSib = JSTreeObj.dragNode_source.nextSibling;
		JSTreeObj.dragNode_destination = false;
		JSTreeObj.dragDropTimer = 0;
		var childList = JSTreeObj.dragNode_source.parentNode.childNodes;
		var iDecal = 0;
		for (var i = 0; i < childList.length; i++)
		{
			if (COMMON_HasAttributes(childList[i]))
			{
				if (childList[i] == JSTreeObj.dragNode_source)
				iDecal++;
				for (var j = 0; j < childList[i].attributes.length; j++)
				{
					if (childList[i].attributes[j].nodeName == "class")
					{
						if (childList[i].attributes[j].nodeValue != "li_private" && childList[i].attributes[j].nodeValue != "li_friends")
						childList[i].attributes[j].nodeValue = 'li_' + ((i + iDecal) % 2 + 1);
						break;
					}
				}
			}
		}
		JSTreeObj.timerDrag();
		return false;
	}
	,
	timerDrag : function()
	{
		if(this.dragDropTimer>=0 && this.dragDropTimer<10){
			this.dragDropTimer = this.dragDropTimer + 1;
			setTimeout('JSTreeObj.timerDrag()',20);
			return;
		}
		if(this.dragDropTimer==10)
		{
			JSTreeObj.floatingContainer.style.display='block';
			JSTreeObj.floatingContainer.appendChild(JSTreeObj.dragNode_source);
			JSTreeObj.dragNode_source.style.width = '250';
		}
	}
	,
	alertBoxOver		: function (box)
	{
		if (box != null && box.className == "dragableBoxHeader")
		{
			JSTreeObj.boxOver = box;
			JSTreeObj.dragNode_destination = null;
		}
		else
			JSTreeObj.boxOver = null;
	}
	,
	moveDragableNodes : function(e)
	{
		if(JSTreeObj.dragDropTimer<10)return false;
		if(document.all)e = event;
		dragDrop_x = e.clientX/1 + 5 + document.body.scrollLeft;
		//dragDrop_y = e.clientY/1 + 5 + document.documentElement.scrollTop;
		dragDrop_y = e.clientY/1 + 5 + document.body.scrollTop;
		//alert(document.body.scrollTop);

		JSTreeObj.floatingContainer.style.left = dragDrop_x + 'px';
		JSTreeObj.floatingContainer.style.top = dragDrop_y + 'px';

		var thisObj = this;
		if((thisObj.tagName=='IMG') && thisObj.nodrop == false)
		{
			thisObj = thisObj.parentNode.parentNode.parentNode.parentNode.parentNode;
		}

		JSTreeObj.dragNode_noSiblings = false;
		var tmpVar = thisObj.getAttribute('noSiblings');
		if(!tmpVar)tmpVar = thisObj.noSiblings;
		if(tmpVar=='true')JSTreeObj.dragNode_noSiblings=true;

		// cas de la box vide
		if (JSTreeObj.boxOver != null)
		{
			var tmpObj= JSTreeObj.dropTargetIndicator;
			tmpObj.style.display='block';

			var tmpImg = tmpObj.getElementsByTagName('IMG')[0];

			var id = JSTreeObj.boxOver.id.replace(/[^0-9-]/g,'');
			var treeObj = document.getElementById("tree_ul_MyEasyFav" + id);
			//alert(JSTreeObj.boxOver.parentNode.innerHTML);
			tmpObj.style.left = (JSTreeObj.getLeftPos(treeObj) + JSTreeObj.indicator_offsetX) + 'px';
			tmpObj.style.top = (JSTreeObj.getTopPos(treeObj) + JSTreeObj.indicator_offsetY - 5) + 'px';

		}
		else if(thisObj && thisObj.id && this.nodrop == false)
		{
			JSTreeObj.dragNode_destination = thisObj;
			var img = thisObj.getElementsByTagName('IMG')[1];
			var tmpObj= JSTreeObj.dropTargetIndicator;
			tmpObj.style.display='block';
			//tmpObj.style.width = JSTreeObj.dragNode_source.style.width;

			var eventSourceObj = this;
			if(JSTreeObj.dragNode_noSiblings && eventSourceObj.tagName=='IMG')eventSourceObj = eventSourceObj.nextSibling;

			var tmpImg = tmpObj.getElementsByTagName('IMG')[0];
			if(this.tagName=='A' || JSTreeObj.dragNode_noSiblings){
				tmpImg.src = tmpImg.src.replace('ind1','ind2');
				JSTreeObj.insertAsSub = true;
				tmpObj.style.left = (JSTreeObj.getLeftPos(eventSourceObj) + JSTreeObj.indicator_offsetX_sub) + 'px';
			}else{
				tmpImg.src = tmpImg.src.replace('ind2','ind1');
				JSTreeObj.insertAsSub = false;
				tmpObj.style.left = (JSTreeObj.getLeftPos(eventSourceObj) + JSTreeObj.indicator_offsetX) + 'px';
			}


			tmpObj.style.top = (JSTreeObj.getTopPos(thisObj) + JSTreeObj.indicator_offsetY) + 'px';
		}
		else if (JSTreeObj.dragNode_destination == null)
		{
			JSTreeObj.dropTargetIndicator.style.display='none';
		}

		return false;

	}
	,
	dropDragableNodes:function()
	{
		if(JSTreeObj.dragDropTimer<10){
			JSTreeObj.dragDropTimer = -1;
			return;
		}
		var showMessage = false;
		if(JSTreeObj.dragNode_destination){	// Check depth
			var countUp = JSTreeObj.dragDropCountLevels(JSTreeObj.dragNode_destination,'up');
			var countDown = JSTreeObj.dragDropCountLevels(JSTreeObj.dragNode_source,'down');
			var countLevels = countUp/1 + countDown/1 + (JSTreeObj.insertAsSub?1:0);

			if(countLevels>JSTreeObj.maximumDepth){
				JSTreeObj.dragNode_destination = false;
				showMessage = true; 	// Used later down in this function
			}
		}


		if(JSTreeObj.dragNode_destination){
			var nextSib = null;
			if(JSTreeObj.insertAsSub){
				var uls = JSTreeObj.dragNode_destination.getElementsByTagName('UL');
				if(uls.length>0){
					ul = uls[0];
					ul.style.display='block';

					var lis = ul.getElementsByTagName('LI');

					if(lis.length>0){	// Sub elements exists - drop dragable node before the first one
						ul.insertBefore(JSTreeObj.dragNode_source,lis[0]);
					}else {	// No sub exists - use the appendChild method - This line should not be executed unless there's something wrong in the HTML, i.e empty <ul>
						ul.appendChild(JSTreeObj.dragNode_source);
					}
				}else{
					var ul = document.createElement('UL');
					ul.style.display='block';
					JSTreeObj.dragNode_destination.appendChild(ul);
					ul.appendChild(JSTreeObj.dragNode_source);
				}
				var img = JSTreeObj.dragNode_destination.getElementsByTagName('IMG')[0];
				img.style.visibility='visible';
				img.src = img.src.replace(JSTreeObj.plusImage,JSTreeObj.minusImage);
				JSTreeObj.dragNode_source.style.width = '100%';

			}else{
				if(JSTreeObj.dragNode_destination.nextSibling)
				{
					nextSib = JSTreeObj.dragNode_destination.nextSibling;
					nextSib = JSTreeObj.dragNode_destination;
					//alert(JSTreeObj.dragNode_destination.innerHTML);
					//alert(nextSib.innerHTML);
					// Searching for the position in the tree
					var oTree = nextSib.parentNode.parentNode;
					var	bTextSearch = false;
					if (nextSib.nodeName == "#text")
					{
						bTextSearch = true;
					}
					var iIndex = 0;
					var bFound = false;
					for (var i = 0; i < oTree.childNodes.length; i++)
					{
						var oSubTree = oTree.childNodes[i];
						for (var j = 0; j < oSubTree.childNodes.length; j++)
						{
							if (bTextSearch)
							{
								if (oSubTree.childNodes[j].nodeName == "#text")
								{
									if (oSubTree.childNodes[j] == nextSib)
									{
										bFound = true;
										break;
									}
								}
								if(oSubTree.childNodes[j].nodeName == "LI")
								{
									iIndex = iIndex + 1;
								}
							}
							else
							{
								if (oSubTree.childNodes[j].nodeName == "LI")
								{
									if (oSubTree.childNodes[j] == nextSib)
									{
										bFound = true;
										break;
									}
									iIndex = iIndex + 1;
								}
							}
						}
						if (bFound)
						break;
					}

					updateBoxNbLink(nextSib.parentNode.id.replace(/[^0-9-]/gi,''));
					DB_moveLink(JSTreeObj.dragNode_source.parentNode.childNodes[0], nextSib.parentNode.getAttribute('dbid'), iIndex + 1);
					computeEasyLinkPosition();
					// Register the function drop, in case
					var noDrop=false;
					var tmpVar = JSTreeObj.dragNode_source.getAttribute('nodrop');
					if(!tmpVar)tmpVar = JSTreeObj.dragNode_source.noDrop;
					if(tmpVar=='true')noDrop=true;
					if (noDrop)
					{
						var imgList = JSTreeObj.dragNode_source.getElementsByTagName('IMG');
						for (var i = 0; i < imgList.length; i++)
						{
							imgList[i].nodrop = false;
						}
					}
					{
						// Enlever la partie Author au cas oł
						/*var elementId = JSTreeObj.dragNode_source.id.replace("node","");
						alert(("Author" + elementId));
						alert(document.getElementById("Author" + elementId));*/
						//.innerHTML = "";
					}

					// idem rename, delete
					JSTreeObj.registerRenameDeleteFunction(JSTreeObj.dragNode_source);

					nextSib.parentNode.insertBefore(JSTreeObj.dragNode_source,nextSib);
				}
				else
				{

					//alert("parentNode : " + JSTreeObj.dragNode_destination.parentNode.innerHTML);

					JSTreeObj.dragNode_parent.appendChild(JSTreeObj.dragNode_source);
					//JSTreeObj.dragNode_destination.parentNode.appendChild(JSTreeObj.dragNode_source);
				}
				JSTreeObj.dragNode_source.style.width = '100%';
			}
			// Update Class for the li obj
			if (nextSib != null)
			{
				var childList = nextSib.parentNode.childNodes;
				for (var i = 0; i < childList.length; i++)
				{
					if (COMMON_HasAttributes(childList[i]))
					{
						for (var j = 0; j < childList[i].attributes.length; j++)
						{
							if (childList[i].attributes[j].nodeName == "class")
							{
								if (childList[i].attributes[j].nodeValue != "li_private")
								childList[i].attributes[j].nodeValue = 'li_' + (i % 2 + 1);
								break;
							}
						}
					}
				}
			}
			/* Clear parent object */
			/*var tmpObj = JSTreeObj.dragNode_parent;
			var lis = tmpObj.getElementsByTagName('LI');
			if(lis.length==0){
			var img = tmpObj.parentNode.getElementsByTagName('IMG')[0];
			img.style.visibility='hidden';	// Hide [+],[-] icon
			tmpObj.parentNode.removeChild(tmpObj);
			}*/

		}else{
			// cas de la box vide
			if (JSTreeObj.boxOver != null)
			{
				var id = JSTreeObj.boxOver.id.replace(/[^0-9-]/g,'');
				var treeObj = document.getElementById("tree_ul_MyEasyFav" + id);
				if (treeObj.childNodes.length != 0)
					treeObj.insertBefore(JSTreeObj.dragNode_source,treeObj.childNodes[0]);
				else
					treeObj.appendChild(JSTreeObj.dragNode_source);
				updateBoxNbLink(id);
				DB_moveLink(JSTreeObj.dragNode_source.parentNode.childNodes[0], treeObj.getAttribute('dbid'), 1);
				computeEasyLinkPosition();
				JSTreeObj.dragNode_source.style.width = '100%';

				// Register the function drop, in case
				var noDrop=false;
				var tmpVar = JSTreeObj.dragNode_source.getAttribute('nodrop');
				if(!tmpVar)tmpVar = JSTreeObj.dragNode_source.noDrop;
				if(tmpVar=='true')noDrop=true;
				if (noDrop)
				{
					var imgList = JSTreeObj.dragNode_source.getElementsByTagName('IMG');
					for (var i = 0; i < imgList.length; i++)
					{
						imgList[i].nodrop = false;
					}
				}
				// idem rename, delete
				JSTreeObj.registerRenameDeleteFunction(JSTreeObj.dragNode_source);

				var childList = treeObj.childNodes;
				for (var i = 0; i < childList.length; i++)
				{
					if (COMMON_HasAttributes(childList[i]))
					{
						for (var j = 0; j < childList[i].attributes.length; j++)
						{
							if (childList[i].attributes[j].nodeName == "class")
							{
								if (childList[i].attributes[j].nodeValue != "li_private" && childList[i].attributes[j].nodeValue != "li_friends")
								childList[i].attributes[j].nodeValue = 'li_' + (i % 2 + 1);
								break;
							}
						}
					}
				}
			}
			else
			{
				// Putting the item back to it's original location
				// In DB, no move
				if(JSTreeObj.dragNode_sourceNextSib){
					JSTreeObj.dragNode_sourceNextSib.parentNode.insertBefore(JSTreeObj.dragNode_source,JSTreeObj.dragNode_sourceNextSib);
				}else{
					var ul = document.getElementById("tree_ul_MyEasyFav" + JSTreeObj.dragNode_source.clientBoxId);
					ul.appendChild(JSTreeObj.dragNode_source);
				}
				JSTreeObj.dragNode_source.style.width = '100%';
			}
		}
		JSTreeObj.dropTargetIndicator.style.display='none';
		JSTreeObj.dragDropTimer = -1;
		if(showMessage && JSTreeObj.messageMaximumDepthReached)alert(JSTreeObj.messageMaximumDepthReached);
	}
	,
	registerRenameDeleteFunction : function(linkObj)
	{
		//alert(linkObj.innerHTML);
		if(this.contextMenu && options_link_authorized){
			var aTag = linkObj.getElementsByTagName('A')[0];
			this.contextMenu.attachToElement(linkObj,false,this.menuModel);
			this.addEvent(aTag,'contextmenu',this.highlightItem);
		}
	}
	,
	createDropIndicator : function()
	{
		this.dropTargetIndicator = document.createElement('DIV');
		this.dropTargetIndicator.style.position = 'absolute';
		this.dropTargetIndicator.style.display='none';
		var img = document.createElement('IMG');
		img.src = this.imageFolder + 'dragDrop_ind1.gif';
		img.id = 'dragDropIndicatorImage';
		img.setAttribute('width', '100%');
		this.dropTargetIndicator.appendChild(img);
		document.body.appendChild(this.dropTargetIndicator);

	}
	,
	dragDropCountLevels : function(obj,direction,stopAtObject){
		var countLevels = 0;
		if(direction=='up'){
			while(obj.parentNode && obj.parentNode!=stopAtObject){
				obj = obj.parentNode;
				if(obj.tagName=='UL')countLevels = countLevels/1 +1;
			}
			return countLevels;
		}

		if(direction=='down'){
			var subObjects = obj.getElementsByTagName('LI');
			for(var no=0;no<subObjects.length;no++){
				countLevels = Math.max(countLevels,JSTreeObj.dragDropCountLevels(subObjects[no],"up",obj));
			}
			return countLevels;
		}
		return countLevels;
	}
	,
	cancelEvent : function()
	{
		return false;
	}
	,
	cancelSelectionEvent : function()
	{
		if(JSTreeObj.dragDropTimer<10)return true;
		return false;
	}
	,getNodeOrders : function(initObj,saveString)
	{

		if(!saveString) saveString = '';
		if(!initObj){
			initObj = document.getElementById(this.idOfTree);

		}
		var lis = initObj.getElementsByTagName('LI');

		if(lis.length>0){
			var li = lis[0];
			while(li){
				if(li.id){
					if(saveString.length>0)saveString = saveString + ',';
					var numericID = li.id.replace(/[^0-9-]/gi,'');
					if(numericID.length==0)numericID='A';
					var numericParentID = li.parentNode.parentNode.id.replace(/[^0-9-]/gi,'');
					if(numericID!='0'){
						saveString = saveString + numericID;
						saveString = saveString + '-';


						if(li.parentNode.id!=this.idOfTree)saveString = saveString + numericParentID; else saveString = saveString + '0';
					}
					var ul = li.getElementsByTagName('UL');
					if(ul.length>0){
						saveString = this.getNodeOrders(ul[0],saveString);
					}
				}
				li = li.nextSibling;
			}
		}

		if(initObj.id == this.idOfTree){
			return saveString;

		}
		return saveString;
	}
	,highlightItem : function(inputObj,e)
	{
		if(JSTreeObj.currentlyActiveItem)JSTreeObj.currentlyActiveItem.className = '';
		this.className = 'highlightedNodeItem';
		JSTreeObj.currentlyActiveItem = this;
	}
	,
	removeHighlight : function(e)
	{
		if (COMMON_GetButtonClicked(e) == COMMON_MouseLeftClickValue())
		{
			if(JSTreeObj.currentlyActiveItem)JSTreeObj.currentlyActiveItem.className = '';
			JSTreeObj.currentlyActiveItem = false;
			var searchResultContainer = document.getElementById("floatingSearchContainer");
			searchResultContainer.display = "none";
			UnTip();
		}
	}
	,
	hasSubNodes : function(obj)
	{
		var subs = obj.getElementsByTagName('LI');
		if(subs.length>0)return true;
		return false;
	}
	,
	privatePublicItem : function(obj1,obj2)
	{
		var liElement = null;
		if (obj2.nodeName == "A")
		{
			liElement = obj2.parentNode.parentNode.parentNode.parentNode.parentNode;	// Reference to the <li> tag.
		}
		else if (obj2.nodeName == "TD")
		{
			liElement = obj2.parentNode.parentNode.parentNode.parentNode;	// Reference to the <li> tag.
		}
		else if (obj2.nodeName == "IMG")
		{
			liElement = obj2.parentNode.parentNode.parentNode.parentNode.parentNode;	// Reference to the <li> tag.
		}
		else
		{
			liElement = obj2.parentNode;	// Reference to the <li> tag.
		}
		var bPrivate = true;
		if (COMMON_GetClass(liElement) == "li_private")
		{
			COMMON_SetClass(liElement, "li_1");
			bPrivate = false;
		}
		else
		{
			COMMON_SetClass(liElement, "li_private");
		}
		var attributeList = liElement.attributes;
		for (var i = 0; i < attributeList.length; i++)
		{
			if (attributeList[i].nodeName.toLowerCase() == "dbid")
			{
				DB_privatePublicLink(liElement, attributeList[i].nodeValue, bPrivate);
				break;
			}
		}
	}
	,
	easyfavItem: function(obj1,obj2)
	{
		var liElement = null;
		if (obj2.nodeName == "A")
		{
			liElement = obj2.parentNode.parentNode.parentNode.parentNode.parentNode;	// Reference to the <li> tag.
		}
		else if (obj2.nodeName == "TD")
		{
			liElement = obj2.parentNode.parentNode.parentNode.parentNode;	// Reference to the <li> tag.
		}
		else if (obj2.nodeName == "IMG")
		{
			liElement = obj2.parentNode.parentNode.parentNode.parentNode.parentNode;	// Reference to the <li> tag.
		}
		else
		{
			liElement = obj2.parentNode;	// Reference to the <li> tag.
		}

		//if(this.hasSubNodes(obj2.parentNode)) message = message + ' and it\'s sub nodes';
		var url = liElement.getElementsByTagName('A')[0];
		DB_addEasyFav(url.href, "false");
	}
	,
	easyfavItemPrivate: function (obj1, obj2)
	{
		var liElement = null;
		if (obj2.nodeName == "A")
		{
			liElement = obj2.parentNode.parentNode.parentNode.parentNode.parentNode;	// Reference to the <li> tag.
		}
		else if (obj2.nodeName == "TD")
		{
			liElement = obj2.parentNode.parentNode.parentNode.parentNode;	// Reference to the <li> tag.
		}
		else if (obj2.nodeName == "IMG")
		{
			liElement = obj2.parentNode.parentNode.parentNode.parentNode.parentNode;	// Reference to the <li> tag.
		}
		else
		{
			liElement = obj2.parentNode;	// Reference to the <li> tag.
		}

		//if(this.hasSubNodes(obj2.parentNode)) message = message + ' and it\'s sub nodes';
		var url = liElement.getElementsByTagName('A')[0];
		DB_addEasyFav(url.href, "true");
	}
	,
	deleteItem : function(obj1,obj2)
	{
		var message = g_lang_link_delete;
		var liElement = null;
		if (obj2.nodeName == "A")
		{
			liElement = obj2.parentNode.parentNode.parentNode.parentNode.parentNode;	// Reference to the <li> tag.
		}
		else if (obj2.nodeName == "TD")
		{
			liElement = obj2.parentNode.parentNode.parentNode.parentNode;	// Reference to the <li> tag.
		}
		else if (obj2.nodeName == "IMG")
		{
			liElement = obj2.parentNode.parentNode.parentNode.parentNode.parentNode;	// Reference to the <li> tag.
		}
		else
		{
			liElement = obj2.parentNode;	// Reference to the <li> tag.
		}

		//if(this.hasSubNodes(obj2.parentNode)) message = message + ' and it\'s sub nodes';
		if(confirm(message)){
			this.__deleteItem_step2(liElement);	// Sending <LI> tag to the __deleteItem_step2 method
		}

	}
	,
	__refreshDisplay : function(obj)
	{
		if(this.hasSubNodes(obj))return;

		var img = obj.getElementsByTagName('IMG')[0];
		img.style.visibility = 'hidden';
	}
	,
	__deleteItem_step2 : function(obj)
	{

		/*// Creating ajax object and send items
		var ajaxIndex = JSTreeObj.ajaxObjects.length;
		JSTreeObj.ajaxObjects[ajaxIndex] = new sack();
		JSTreeObj.ajaxObjects[ajaxIndex].method = "GET";
		JSTreeObj.ajaxObjects[ajaxIndex].setVar("deleteIds", saveString);
		JSTreeObj.__addAdditionalRequestParameters(JSTreeObj.ajaxObjects[ajaxIndex], JSTreeObj.additionalDeleteRequestParameters);
		JSTreeObj.ajaxObjects[ajaxIndex].requestFile = JSTreeObj.filePathDeleteItem;	// Specifying which file to get
		JSTreeObj.ajaxObjects[ajaxIndex].onCompletion = function() { JSTreeObj.__deleteComplete(ajaxIndex,obj); } ;	// Specify function that will be executed after file has been found
		JSTreeObj.ajaxObjects[ajaxIndex].runAJAX();		// Execute AJAX function*/
		var attributeList = obj.attributes;
		for (var i = 0; i < attributeList.length; i++)
		{
			if (attributeList[i].nodeName.toLowerCase() == "dbid")
			{
				DB_deleteLink(obj, attributeList[i].nodeValue);
			}
		}
	}
	,
	__renameComplete : function(ajaxIndex)
	{
		if(this.ajaxObjects[ajaxIndex].response!='OK'){
			alert('ERROR WHEN TRYING TO RENAME NODE: ' + this.ajaxObjects[ajaxIndex].response); 	// Rename failed
		}
	}
	,
	__saveTextBoxChanges : function(e,inputObj)
	{
		if(!inputObj && this)inputObj = this;
		if(document.all)e = event;
		if(e.keyCode && e.keyCode==27){
			JSTreeObj.__cancelRename(e,inputObj);
			return;
		}
		inputObj.style.display='none';
		inputObj.nextSibling.style.visibility='visible';
		if(inputObj.value.length>0){
			var sWithoutWWValue = inputObj.value;
			var sValue = inputObj.value;
			//String_Worddrap(inputObj.value, 15, " ", true);
			sValue = String_htmlentities(sValue, 'HTML_ENTITIES');
			inputObj.nextSibling.innerHTML = sValue;
			// Send changes to the server.
			if (JSTreeObj.renameState != JSTreeObj.RENAME_STATE_BEGIN) {
				return;
			}
			JSTreeObj.renameState = JSTreeObj.RENAME_STATE_REQUEST_SENDED;

			var attributeList = inputObj.parentNode.parentNode.parentNode.parentNode.parentNode.attributes;
			for (var i = 0; i < attributeList.length; i++)
			{
				if (attributeList[i].nodeName.toLowerCase() == "dbid")
				{
					if (sValue != JSTreeObj.helpObj.innerHTML)
					{
						sWithoutWWValue = encodeURI(sWithoutWWValue);
						sWithoutWWValue = sWithoutWWValue.replace("&", "%26");

						DB_renameLink(attributeList[i].nodeValue, sWithoutWWValue);
					}
					break;
				}
			}
		}
	}
	,
	__cancelRename : function(e,inputObj)
	{
		JSTreeObj.renameState = JSTreeObj.RENAME_STATE_CANCELD;
		if(!inputObj && this)inputObj = this;
		inputObj.value = JSTreeObj.helpObj.innerHTML;
		inputObj.nextSibling.innerHTML = JSTreeObj.helpObj.innerHTML;
		inputObj.style.display = 'none';
		inputObj.nextSibling.style.visibility = 'visible';
	}
	,
	__renameCheckKeyCode : function(e)
	{
		if(document.all)e = event;
		if(e.keyCode==13){	// Enter pressed
			JSTreeObj.__saveTextBoxChanges(false,this);
		}
		if(e.keyCode==27){	// ESC pressed
			JSTreeObj.__cancelRename(false,this);
		}
	}
	,
	__createTextBox : function(obj)
	{
		var textBox = document.createElement('TEXTAREA');
		textBox.className = 'folderTreeTextBox';
		textBox.value = String_html_entity_decode(obj.innerHTML, 'HTML_ENTITIES');
		textBox.style.width = '100%';
		textBox.style.height = '100%';
		textBox.setAttribute("maxlength","100");
		obj.parentNode.insertBefore(textBox,obj);
		textBox.id = 'textBox' + obj.parentNode.id.replace(/[^0-9-]/gi,'');
		textBox.onblur = this.__saveTextBoxChanges;
		textBox.onkeydown = this.__renameCheckKeyCode;
		this.__renameEnableTextBox(obj);
	}
	,
	__renameEnableTextBox : function(obj)
	{
		JSTreeObj.renameState = JSTreeObj.RENAME_STATE_BEGIN;
		obj.style.visibility = 'hidden';
		obj.previousSibling.value = String_html_entity_decode(obj.innerHTML, 'HTML_ENTITIES');;
		obj.previousSibling.style.display = 'inline';
		obj.previousSibling.select();
	}
	,
	renameItem : function(obj1,obj2)
	{
		// Check where the rename is done
		if (obj2.nodeName == "A")
		{
			currentItemToEdit = obj2.parentNode.parentNode.parentNode.parentNode.parentNode;	// Reference to the <li> tag.
		}
		else if (obj2.nodeName == "TD")
		{
			currentItemToEdit = obj2.parentNode.parentNode.parentNode.parentNode;	// Reference to the <li> tag.
		}
		else if (obj2.nodeName == "IMG")
		{
			currentItemToEdit = obj2.parentNode.parentNode.parentNode.parentNode.parentNode;	// Reference to the <li> tag.
		}
		else
		{
			currentItemToEdit = obj2.parentNode;	// Reference to the <li> tag.
		}
		if(!obj2.previousSibling || obj2.previousSibling.tagName.toLowerCase()!='input'){
			this.__createTextBox(currentItemToEdit.getElementsByTagName("A")[1]);
		}else{
			this.__renameEnableTextBox(currentItemToEdit.getElementsByTagName("A")[1]);
		}
		this.helpObj.innerHTML = currentItemToEdit.getElementsByTagName("A")[1].innerHTML;
	}
	,
	initTree : function()
	{
		JSTreeList[this.idOfTree] = this;
		JSTreeObj = this;
		JSTreeObj.createDropIndicator();
		document.documentElement.onselectstart = JSTreeObj.cancelSelectionEvent;
		document.documentElement.ondragstart = JSTreeObj.cancelEvent;
		document.documentElement.onmousedown  = JSTreeObj.removeHighlight;
		/* Creating help object for storage of values */
		this.helpObj = document.createElement('DIV');
		this.helpObj.style.display = 'none';
		document.body.appendChild(this.helpObj);

		/* Create context menu */
		if(this.deleteAllowed || this.renameAllowed || this.privateAllowed){
			try{
				/* Creating menu model for the context menu, i.e. the datasource */
				this.menuModel = new DHTMLGoodies_menuModel();
				if(this.renameAllowed)this.menuModel.addItem(1,'Rename','','',false,'JSTreeObj.renameItem');
				if(this.privateAllowed)this.menuModel.addItem(2,'Private-Public','','',false,'JSTreeObj.privatePublicItem');
				if(this.deleteAllowed)this.menuModel.addItem(3,'Delete','','',false,'JSTreeObj.deleteItem');
				this.menuModel.init();

				this.menuModelRenameOnly = new DHTMLGoodies_menuModel();
				if(this.renameAllowed)this.menuModelRenameOnly.addItem(4,'Rename','','',false,'JSTreeObj.renameItem');
				this.menuModelRenameOnly.init();

				this.menuModelDeleteOnly = new DHTMLGoodies_menuModel();
				if(this.deleteAllowed)this.menuModelDeleteOnly.addItem(5,'Delete','','',false,'JSTreeObj.deleteItem');
				this.menuModelDeleteOnly.init();

				this.menuModelAddEasyLinkOnly = new DHTMLGoodies_menuModel();
				if(this.deleteAllowed)
				{
					this.menuModelAddEasyLinkOnly.addItem(6,'EasyFav it!','','',false,'JSTreeObj.easyfavItem');
					this.menuModelAddEasyLinkOnly.addItem(7,'EasyFav it! (Private)','','',false,'JSTreeObj.easyfavItemPrivate');
				}
				this.menuModelAddEasyLinkOnly.init();

				window.refToDragDropTree = this;

				this.contextMenu = referenceToDHTMLSuiteContextMenu;
			}catch(e){

			}
		}


		var nodeId = 0;
		var dhtmlgoodies_tree = document.getElementById(this.idOfTree);

		JSTreeObj.__registerTree(dhtmlgoodies_tree);

		document.documentElement.onmousemove = JSTreeObj.moveDragableNodes;
		document.documentElement.onmouseup = JSTreeObj.dropDragableNodes;
	}
	,
	__registerTree:	function (oElement)
	{
		if (oElement)
		{
			var menuItems = oElement.getElementsByTagName('LI');	// Get an array of all menu items
			for(var no=0;no<menuItems.length;no++){
				JSTreeObj.__registerElement(menuItems[no]);
			}
		}
	}
	,
	__registerElement: function(oElement)
	{
		if (window.navigator.appName == "Microsoft Internet Explorer") // IE
		{
			oElement.width = "100%";
		}
		else
		{
			oElement.setAttribute('WIDTH','100%');
		}

		// No children var set ?
		var noChildren = true;
		var tmpVar = oElement.getAttribute('noChildren');
		if(!tmpVar)tmpVar = oElement.noChildren;
		if(tmpVar=='true')noChildren=true;
		// No drag var set ?
		var noDrag = false;
		var tmpVar = oElement.getAttribute('nodrag');
		if(!tmpVar)tmpVar = oElement.noDrag;
		if(tmpVar=='true')noDrag=true;

		var noDrop = false;
		var tmpVar = oElement.getAttribute('nodrop');
		if(!tmpVar)tmpVar = oElement.nodrop;
		if(tmpVar=='true')noDrop=true;

		var noDesc = false;
		var tmpVar = oElement.getAttribute('nodesc');
		if(!tmpVar)tmpVar = oElement.nodesc;
		if(tmpVar=='true')noDesc=true;

		var fromLastFav = false;
		var tmpVar = oElement.getAttribute('lastFav');
		if(!tmpVar)tmpVar = oElement.lastFav;
		if(tmpVar=='true')fromLastFav=true;
		
		var oElementId = oElement.id.replace("node", "");

		var subItems = oElement.getElementsByTagName('UL');
		/*var img = document.createElement('IMG');
		img.src = this.imageFolder + this.plusImage;
		img.onclick = JSTreeObj.showHideNode;

		if(subItems.length==0)img.style.visibility='hidden';else{
		subItems[0].id = 'tree_ul_' + treeUlCounter;
		treeUlCounter++;
		}*/
		var aTag = oElement.getElementsByTagName('A')[0];
		aTag.id = 'nodeATag' + oElement.id.replace(/[^0-9-]/gi,'');
		aTag.onclick = JSTreeObj.showHideNode;
		//if(!noDrag)aTag.onmousedown = JSTreeObj.initDrag;
		//if(!noChildren)aTag.onmousemove = JSTreeObj.moveDragableNodes;
		aTag.style.display = 'none';
		//aTag.parentNode.removeChild(aTag);


		var folderImg = oElement.getElementsByTagName('IMG')[0];
		//if(!noDrag)folderImg.onmousedown = JSTreeObj.initDrag;
		//folderImg.onmousemove = JSTreeObj.moveDragableNodes;
		folderImg.style.display = 'none';
		//folderImg.parentNode.removeChild(folderImg);

		var table = document.createElement('TABLE');
		if (window.navigator.appName == "Microsoft Internet Explorer") // IE
		{
			table.height = '100px';
			table.width = '100%';
		}
		else
		{
			table.setAttribute('height','100px');
			table.setAttribute('width','100%');
		}
		table.id = "tableBox";
		oElement.onmouseenter = onLinkOn;
		oElement.onmouseleave = onLinkOut;
		//COMMON_SetClass(oElement, "linkTable");

		var tBody = document.createElement("TBODY");
		table.appendChild(tBody);

		var tr = document.createElement('TR');
		tBody.appendChild(tr);

		var tdImage = document.createElement('TD');
		if (window.event || window.navigator.appName == "Microsoft Internet Explorer") // IE
		{
			tdImage.rowSpan = '3';
			tdImage.width = '35%';
			tdImage.align = 'center';
			tdImage.valign = 'top';
		}
		else
		{
			tdImage.setAttribute('ROWSPAN','3');
			tdImage.setAttribute('WIDTH','35%');
			tdImage.setAttribute('align', 'center');
			tdImage.setAttribute('valign', 'top');
		}

		tr.appendChild(tdImage);

		var Img = document.createElement('IMG');
		Img.nodrop = noDrop;
		Img.id = "ImageTreeView" + oElementId;
		if(!noDrag && options_link_authorized)
		{
			Img.onmousedown = JSTreeObj.initDrag;
			Img.style.cursor = 'move';
		}
		Img.style.backgroundImage = folderImg.style.backgroundImage; 
		imgPreloader = ImageLoader_Add("ImageTreeView" + oElementId, Img, COMMON_GetClass(folderImg));

		COMMON_SetClass(Img, "loadingThumb");
		Img.onmousemove = JSTreeObj.moveDragableNodes;
		Img.src = g_defaultLoadingImage;

		tdImage.appendChild(Img);

		var tdTitle = document.createElement('TD');
		tdTitle.setAttribute('WIDTH','50%');
		tr.appendChild(tdTitle);

		var aNewTag = document.createElement('A');
		COMMON_SetClass(aNewTag, "linkTitle");
		if (fromLastFav)
			aNewTag.setAttribute("lastfav", true);
		// VideoSrc
		var inputList = oElement.getElementsByTagName('input');
		var bFound = false;
		for (i = 0; i < inputList.length; i++)
		{
			if (inputList[i].id == "video_src")
			{
				aNewTag.setAttribute("href", aTag.getAttribute("href"));
				aNewTag.setAttribute("target", "_blank");
				aNewTag.setAttribute("rel", "lightboxvideo");
				aNewTag.setAttribute("swfurl", inputList[i].getAttribute('value'));
				//aNewTag.setAttribute("swfurl", oElement.getElementsByTagName('INPUT')[1].getAttribute('value'));
				aNewTag.setAttribute("title", aTag.innerHTML);
				aNewTag.setAttribute("lightboxContentType", lightboxContent_type.video);
				bFound = true;
			}
			else if (inputList[i].id == "image_src")
			{
				aNewTag.setAttribute("href", aTag.getAttribute("href"));
				aNewTag.setAttribute("target", "_blank");
				aNewTag.setAttribute("rel", "lightbox");
				aNewTag.setAttribute("title", aTag.getAttribute("href"));
				aNewTag.setAttribute("lightboxContentType", lightboxContent_type.image);
				bFound = true;
			}
		}
		if (!bFound)
		{
			aNewTag.setAttribute("dbId", oElement.getAttribute('dbId'));
			if (document.getElementById("VideoSrc" + oElementId))
			{
				aNewTag.setAttribute("href", aTag.getAttribute("href"));
				aNewTag.setAttribute("target", "_blank");
				aNewTag.setAttribute("rel", "lightboxvideo");
				aNewTag.setAttribute("swfurl", document.getElementById("VideoSrc" + oElementId).getAttribute('value'));
				aNewTag.setAttribute("title", aTag.innerHTML);
				aNewTag.setAttribute("lightboxContentType", lightboxContent_type.video);
			}
			else if (document.getElementById("Image" + oElementId))
			{
				aNewTag.setAttribute("href", aTag.getAttribute("href"));
				aNewTag.setAttribute("target", "_blank");
				aNewTag.setAttribute("rel", "lightbox");
				aNewTag.setAttribute("title", aTag.getAttribute("href"));
				aNewTag.setAttribute("lightboxContentType", lightboxContent_type.image);
			}
			else
			{
				aNewTag.setAttribute("href", aTag.getAttribute("href"));
				aNewTag.setAttribute("target", "_blank");
				aNewTag.setAttribute("title", aTag.innerHTML);
			}
			if (document.getElementById("SpecialEmbed" + oElementId))
			{
				aNewTag.setAttribute("href", aTag.getAttribute("href"));
				aNewTag.setAttribute("target", "_blank");
				aNewTag.setAttribute("rel", "lightboxspecialembed");
				aNewTag.setAttribute("title", aTag.getAttribute("href"));
				aNewTag.setAttribute("lightboxContentType", lightboxContent_type.special_embed);
			}
		}
		if (options_link_authorized)
			aNewTag.onmousemove = JSTreeObj.moveDragableNodes;
		aNewTag.innerHTML = String_Worddrap(aTag.innerHTML, 16, "\n", true);
		tdTitle.appendChild(aNewTag);

		var tdOption = document.createElement('TD');
		tdOption.setAttribute('valign', 'top');
		tdOption.setAttribute('align', 'right');
		//tdOption.style.visibility = "hidden";
		tr.appendChild(tdOption);
		var divOption = document.createElement('DIV');
		tdOption.appendChild(divOption);
		COMMON_SetClass(divOption, "divLinkOption");
		
		{
			var noDelete = oElement.getAttribute('noDelete');
			if(!noDelete)noDelete = oElement.noDelete;
			var noRename = oElement.getAttribute('noRename');
			if(!noRename)noRename = oElement.noRename;

			if(!(noRename=='true' && noDelete=='true'))
			{
				var imgOption = document.createElement('IMG');
				imgOption.src = "./img/link_options.png";
				imgOption.style.cursor = "pointer";
				imgOption.id = "link_options_img";
				imgOption.onclick=function(e, inputObj)
				{
					ShowLinkOptionsMenu(this);
					g_linkTarget = COMMON_GetTarget(e);
					while (g_linkTarget && g_linkTarget.nodeName != "LI")
						g_linkTarget = g_linkTarget.parentNode;
					if	(g_linkTarget)
						g_linkTarget = g_linkTarget.getElementsByTagName("TABLE")[0];
				}
				Image_AddHoverChangeSrc(imgOption, "./img/link_options.png", "./img/link_options_hover.png")
				divOption.appendChild(imgOption);
			}
		}

		if (g_showLinkDesc && !noDesc)
		{
			tr = document.createElement('TR');
			tBody.appendChild(tr);
	
			var tdDesc = document.createElement('TD');
			COMMON_SetClass(tdDesc, "linkDesc");
			tr.appendChild(tdDesc);
	
			var oDesc = oElement.getElementsByTagName('INPUT')[0];
			if (oDesc )
			{
				tdDesc.innerHTML = String_Worddrap(oDesc.getAttribute('value'), 16, "\n", true);
				if (options_link_authorized)
					tdDesc.onmousemove = JSTreeObj.moveDragableNodes;
			}
		}
		
		tr = document.createElement('TR');
		tBody.appendChild(tr);
		var tdAdded = document.createElement('TD');
		COMMON_SetClass(tdAdded, "linkAuthor");
		// Author
		if (document.getElementById("Author" + oElementId))
		//if (oElement.getElementsByTagName('INPUT').length >= )
		{
			if (document.getElementById("Nickname" + oElementId))
				tdAdded.innerHTML = "Added By <a rel='useHashValue' href='#p/" + document.getElementById("Nickname" + oElementId).getAttribute('value') + "'>" + document.getElementById("Author" + oElementId).getAttribute('value') + "</a>";
			else
				tdAdded.innerHTML = "Added By " + document.getElementById("Author" + oElementId).getAttribute('value');
			if (document.getElementById("Counter" + oElementId))
			{
				tdAdded.innerHTML += "<span style='float:right; cursor:pointer' class='linkCounterUser' onmousedown=\"DB_getEasyfaviers(" + oElement.getAttribute('dbId') + ");\"> + " + document.getElementById("Counter" + oElementId).getAttribute('value') + "</span>";
			}
		}
		if (g_showLinkDate && document.getElementById("Date" + oElementId))
		{
			var txt = "";
			// Date
			var date = new Date();
			var now = date.getTime();
			var added = document.getElementById("Date" + oElementId).getAttribute('value');
			var diff = added;
			//var diff = now / 1000 - added;
			var year = parseFloat(60 * 60 * 24 * 365);
			//special case Year
			var diffYear = diff / 100000;
			var yearYear = year / 100000;
			var yearIn2 = parseInt(diffYear / yearYear);
			var yearIn = diff / year;
			if (yearIn >= 1) {
				txt = parseInt(yearIn) + " year(s) ago";
			}
			else
			{
				var month = 60 * 60 * 24 * 30;
				var monthIn = diff / month;
				if (monthIn >= 1) {
					txt = parseInt(monthIn) + " month(s) ago";
				}
				else
				{
					var day = 60 * 60 * 24;
					var dayIn = diff / day;
					if (dayIn >= 1) {
						txt = parseInt(dayIn) + " day(s) ago";
					}
					else
					{
						var hours = 60 * 60;
						var hoursIn = diff / hours;
						if (hoursIn >= 1) {
							txt = parseInt(hoursIn) + " hour(s) ago";
						}
						else
						{
							var minutes = 60;
							var minutesIn = diff / minutes;
							if (minutesIn >= 1) {
								txt = parseInt(minutesIn) + " minute(s) ago";
							}
							else
							{
								txt = parseInt(diff) + " second(s) ago";
							}
						}
					}
				}
			}
			tdAdded.innerHTML = tdAdded.innerHTML + "<br/>" + txt;
		}

		tr.appendChild(tdAdded);


		oElement.appendChild(table);
		
		ImageLoader_Activate(imgPreloader, folderImg.src);

		/*var inputList = oElement.getElementsByTagName('input');
		while (inputList.length != 0)
		{
			inputList[0].parentNode.removeChild(inputList[0]);				
			inputList = oElement.getElementsByTagName('input');
		}*/

		/*if(this.contextMenu){
			if (options_link_authorized)
			{
				var noDelete = oElement.getAttribute('noDelete');
				if(!noDelete)noDelete = oElement.noDelete;
				var noRename = oElement.getAttribute('noRename');
				if(!noRename)noRename = oElement.noRename;

				if(noRename=='true' && noDelete=='true'){}else{
					if(noDelete == 'true')this.contextMenu.attachToElement(oElement,false,this.menuModelRenameOnly);
					else if(noRename == 'true')this.contextMenu.attachToElement(oElement,false,this.menuModelDeleteOnly);
					else this.contextMenu.attachToElement(oElement,false,this.menuModel);

				}
				this.addEvent(aTag,'contextmenu',this.highlightItem);
			}
			else if (easylink_authorized)
			{
				this.contextMenu.attachToElement(oElement,false,this.menuModelAddEasyLinkOnly);
				this.addEvent(aTag,'contextmenu',this.highlightItem);
			}
		}*/
	}
	,
	__registerEventTree:	function (oElement)
	{
		if (oElement)
		{
			var menuItems = oElement.getElementsByTagName('LI');	// Get an array of all menu items
			for(var no=0;no<menuItems.length;no++){
				JSTreeObj.__registerEventElement(menuItems[no]);
			}
		}
	}
	,
	__registerEventElement: function(oElement)
	{
		// No children var set ?
		var noChildren = false;
		var tmpVar = oElement.getAttribute('noChildren');
		if(!tmpVar)tmpVar = oElement.noChildren;
		if(tmpVar=='true')noChildren=true;
		// No drag var set ?
		var noDrag = false;
		var tmpVar = oElement.getAttribute('noDrag');
		if(!tmpVar)tmpVar = oElement.noDrag;
		if(tmpVar=='true')noDrag=true;

		var subItems = oElement.getElementsByTagName('UL');

		var aTag = oElement.getElementsByTagName('A')[0];
		//aTag.onclick = JSTreeObj.showHideNode;
		if(!noDrag)aTag.onmousedown = JSTreeObj.initDrag;
		if(!noChildren)aTag.onmousemove = JSTreeObj.moveDragableNodes;
		aTag.onmousemove = JSTreeObj.moveDragableNodes;
		var folderImg = oElement.getElementsByTagName('IMG');
		if(!noDrag)folderImg.onmousedown = JSTreeObj.initDrag;
		folderImg.onmousemove = JSTreeObj.moveDragableNodes;
	}
	,
	__addAdditionalRequestParameters : function(ajax, parameters)
	{
		for (var parameter in parameters) {
			ajax.setVar(parameter, parameters[parameter]);
		}
	}
}

var g_linkTarget = null;

function onLinkOn(e)
{
}

function onLinkOut(e)
{
}

function LINK_renameDeleteAuthorized(oElement)
{
	if (!oElement)
		return false;
	var noDelete = oElement.getAttribute('noDelete');
	if(!noDelete)noDelete = oElement.noDelete;
	var noRename = oElement.getAttribute('noRename');
	if(!noRename)noRename = oElement.noRename;
	if (noRename == 'true' || noDelete == 'true')
		return false;
	return true;
}

function LINK_HideMenu()
{
	/*if (options_link_authorized == false || !g_linkTarget || !LINK_renameDeleteAuthorized(g_linkTarget.parentNode))
	return;*/
	eLinkOn = null;
	g_linkTarget = null;
	if (!$("#link_menu").hasClass('hidden')) {
		$("#link_menu").animate({height: 'toggle', opacity: 0}, 100).addClass('hidden');
	}	
}

function LINK_MakePublicFromMenu(e, inputObj)
{
	LINK_UpdatePrivacy(0);
	LINK_HideMenu();
}

function LINK_MakePrivateFromMenu(e, inputObj)
{
	LINK_UpdatePrivacy(1);
	LINK_HideMenu();
}

function LINK_MakeFriendFromMenu(e, inputObj)
{
	LINK_UpdatePrivacy(2);
	LINK_HideMenu();
}

function LINK_UpdatePrivacy(value)
{
	if (g_linkTarget != null)
	{
		var liElement = g_linkTarget.parentNode;
		if (value == 0)
			COMMON_SetClass(liElement, "li_1");
		else if (value == 1)
			COMMON_SetClass(liElement, "li_private");
		else if (value == 2)
			COMMON_SetClass(liElement, "li_friends");
			
		var attributeList = liElement.attributes;
		for (var i = 0; i < attributeList.length; i++)
		{
			if (attributeList[i].nodeName.toLowerCase() == "dbid")
			{
				DB_privatePublicLink(liElement, attributeList[i].nodeValue, value);
				break;
			}
		}
	}	
}
function LINK_EasyfavFromMenu(e, inputObj)
{
	if (g_linkTarget != null)
	{
		var liElement = g_linkTarget.parentNode;
		var attributeList = liElement.attributes;
		for (var i = 0; i < attributeList.length; i++)
		{
			if (attributeList[i].nodeName.toLowerCase() == "dbid")
			{
				DB_easyfavFromMenu(liElement, attributeList[i].nodeValue, liElement.id);
				break;
			}
		}
	}
}

function LINK_OpenFromMenu(e, inputObj)
{
	if (g_linkTarget != null)
	{
		window.open(g_linkTarget.getElementsByTagName('a')[0].href, target="_blank");
		//LINK_HideMenu();
	}
}

function LINK_DeleteFromMenu(e, inputObj)
{
	if (g_linkTarget != null)
	{
		var message = g_lang_link_delete;
		if(confirm(message)){
			JSTreeObj.__deleteItem_step2(g_linkTarget.parentNode);	// Sending <LI> tag to the __deleteItem_step2 method
			LINK_HideMenu();
		}
	}
}

function LINK_RenameFromMenu(e, inputObj)
{
	if (g_linkTarget != null)
	{
		JSTreeObj.__createTextBox(g_linkTarget.parentNode.getElementsByTagName("A")[1]);
		JSTreeObj.helpObj.innerHTML = g_linkTarget.parentNode.getElementsByTagName("A")[1].innerHTML;
		LINK_HideMenu();
	}
}

function LINK_PrivateFromMenu(e, inputObj)
{
	if (g_linkTarget != null)
	{
		var liElement = g_linkTarget.parentNode;
		var bPrivate = true;
		if (COMMON_GetClass(liElement) == "li_private")
		{
			COMMON_SetClass(liElement, "li_1");
			bPrivate = false;
		}
		else
		{
			COMMON_SetClass(liElement, "li_private");
		}
		var attributeList = liElement.attributes;
		for (var i = 0; i < attributeList.length; i++)
		{
			if (attributeList[i].nodeName.toLowerCase() == "dbid")
			{
				DB_privatePublicLink(liElement, attributeList[i].nodeValue, bPrivate);
				break;
			}
		}
	}
}

function LINK_EasyFavPublicFromMenu()
{
	if (g_linkTarget != null)
	{
		DB_addEasyFav(g_linkTarget.parentNode.getElementsByTagName("A")[1].href, 0);
		LINK_HideMenu();
	}	
}
function LINK_EasyFavPrivateFromMenu()
{
	if (g_linkTarget != null)
	{
		DB_addEasyFav(g_linkTarget.parentNode.getElementsByTagName("A")[1].href, 1);
		LINK_HideMenu();
	}	
}
function LINK_EasyFavFriendFromMenu()
{
	if (g_linkTarget != null)
	{
		DB_addEasyFav(g_linkTarget.parentNode.getElementsByTagName("A")[1].href, 2);
		LINK_HideMenu();
	}	
}

function LINK_LoginNeeded()
{
	window.location.href = "../";
}
