/**************************************************************************
 * Storm-Funcs (C) by Stefan Mateescu / Taurus IT GmbH <stm@taurus-it.de>
 * --> Version 0.21 (2008-01-28)
 * --> Based on mootools (www.mootools.net)
 **************************************************************************
 * NO UNAUTHORIZED USE! DO NOT REMOVE THIS COPYRIGHT NOTICE!
 **************************************************************************/

var mouseX = -1;
var mouseY = -1;
function stm_trackMouse() {
	document.addEvent('mousemove', function(event) {
		if (event.page && event.page.x) {
			mouseX = event.page.x;
			mouseY = event.page.y;
		}
		else {
			mouseX = event.clientX + document.body.scrollLeft - document.body.clientLeft;
			mouseY = event.clientY + document.body.scrollTop  - document.body.clientTop;
		}
	});
}
stm_trackMouse();


// PUBLIC
function stm_noop() {}

// PUBLIC
function stm_getLeft(refObj) {
	xPos=refObj.offsetLeft;
	parentObj=refObj.offsetParent;
	while(parentObj != null) {xPos +=parentObj.offsetLeft;parentObj=parentObj.offsetParent}
	return xPos;
}

// PUBLIC
function stm_getTop(refObj) {
	yPos=refObj.offsetTop;
	parentObj=refObj.offsetParent;
	while(parentObj != null) {yPos +=parentObj.offsetTop;parentObj=parentObj.offsetParent}
	return yPos;
}

// PUBLIC
function stm_hideLayer(layername, duration) {
	if ($(layername).getAttribute('stmShowHideActive')=='1')
		return false;
	if ($(layername).getStyle('display')=='none')
		return false;
	$(layername).setAttribute('stmShowHideActive', '1');
	var obj = $(layername);
	var realOverflow = obj.getStyle('overflow');
	var realHeight = obj.getSize().y;
	obj.setStyle('overflow', 'hidden');
	obj.setStyle('height', realHeight+'px');
	var fx = new Fx.Morph($(layername), {duration: duration, wait: false});
	fx.start( {
		'height': '1px',
		'opacity': 0
	} ).chain(function(){
		$(layername).setStyles({
			'display': 'none'
		});
		this.start();
	}).chain(function(){
		$(layername).setStyles({
			'opacity': 1,
			'visibility': 'visible',
			'overflow': realOverflow,
			'height': realHeight+'px'
		});
		$(layername).setAttribute('stmShowHideActive', '0');
		this.start();
	});
	return true;
}

// opacity only
function stm_hideLayer2(layername, duration) {
	if ($(layername).getAttribute('stmShowHideActive')=='1')
		return false;
	if ($(layername).getStyle('display')=='none')
		return false;
	$(layername).setAttribute('stmShowHideActive', '1');
	var obj = $(layername);
	var fx = new Fx.Morph($(layername), {duration: duration, wait: false});
	fx.start( {
		'opacity': 0
	} ).chain(function(){
		$(layername).setStyles({
			'display': 'none'
		});
		this.start();
	}).chain(function(){
		$(layername).setStyles({
			'opacity': 1,
			'visibility': 'visible'
		});
		$(layername).setAttribute('stmShowHideActive', '0');
		this.start();
	});
	return true;
}

// PUBLIC
function stm_showLayer(layername, duration, parentLayerWithOverflow) {
	if (typeof parentLayerWithOverflow == "undefined")
		parentLayerWithOverflow = document.body;
	else
		parentLayerWithOverflow = $(parentLayerWithOverflow);
	if ($(layername).getAttribute('stmShowHideActive')=='1')
		return false;
	if ($(layername).getStyle('display')!='none')
		return false;
	$(layername).setAttribute('stmShowHideActive', '1');
	var obj = $(layername);
	obj.setStyles({
		'display': 'block',
		'opacity': 0.01
	});
	var realOverflow = obj.getStyle('overflow');
	var realHeight = obj.getSize().y;
	var scrollYdiff = stm_getYScrollDiffForElement(layername, parentLayerWithOverflow);
	if (scrollYdiff!=0) {
		var wndStartX = parentLayerWithOverflow.scrollLeft;
		var wndStartY = parentLayerWithOverflow.scrollTop;
		stm_scrollTo(wndStartX, wndStartY+scrollYdiff, -1, -1, parentLayerWithOverflow);
	}
	obj.setStyles({
		'overflow': 'hidden',
		'height': '1px',
		'opacity': 0
	});
	var fx = new Fx.Morph($(layername), {duration: duration, wait: false});
	fx.start({
		'height': realHeight+'px',
		'opacity': 1
	}).chain(function(){
		$(layername).setStyles({
			'overflow': realOverflow,
			'height': 'auto',//realHeight+'px',
			'opacity': 1
		});
		$(layername).setAttribute('stmShowHideActive', '0');
		this.start();
	});
	return true;
}

// opacity only
function stm_showLayer2(layername, duration, parentLayerWithOverflow) {
	if (typeof parentLayerWithOverflow == "undefined")
		parentLayerWithOverflow = document.body;
	else
		parentLayerWithOverflow = $(parentLayerWithOverflow);
	if ($(layername).getAttribute('stmShowHideActive')=='1')
		return false;
	if ($(layername).getStyle('display')!='none')
		return false;
	$(layername).setAttribute('stmShowHideActive', '1');
	var obj = $(layername);
	obj.setStyles({
		'display': 'block',
		'opacity': 0.01
	});
	var scrollYdiff = stm_getYScrollDiffForElement(layername, parentLayerWithOverflow);
	if (scrollYdiff!=0) {
		var wndStartX = parentLayerWithOverflow.scrollLeft;
		var wndStartY = parentLayerWithOverflow.scrollTop;
		stm_scrollTo(wndStartX, wndStartY+scrollYdiff, -1, -1, parentLayerWithOverflow);
	}
	obj.setStyles({
		'opacity': 0
	});
	var fx = new Fx.Morph($(layername), {duration: duration, wait: false});
	fx.start({
		'opacity': 1
	}).chain(function(){
		$(layername).setStyles({
			'opacity': 1
		});
		$(layername).setAttribute('stmShowHideActive', '0');
		this.start();
	});
	return true;
}

// PUBLIC
function stm_createTempDivForAjax(divName) {
	var t = document.createElement('div');
	t.id = divName;
	t.style.display = "block";
	t.style.position = "absolute";
	t.style.width = "1900px";
	t.style.top = "0px";
	t.style.left= "-2000px";
	return t;
}

// PUBLIC
function stm_switchLayers(layerToHideName, layerToShowName, duration, repairWidthHeightAfterAnim, useLocalCoordinates) {
	if ($(layerToHideName).getAttribute('stmShowHideActive')=='1' || $(layerToShowName).getAttribute('stmShowHideActive')=='1')
		return false;
	if ($(layerToShowName).getStyle('display')!='none' || $(layerToHideName).getStyle('display')=='none')
		return false;
	if (typeof repairWidthHeightAfterAnim == "undefined")
		repairWidthHeightAfterAnim = true;
	if (typeof useLocalCoordinates == "undefined")
		useLocalCoordinates = false;
	$(layerToHideName).setAttribute('stmShowHideActive', '1');
	$(layerToShowName).setAttribute('stmShowHideActive', '1');
	// change order in DOM
	$(layerToShowName).injectAfter($(layerToHideName));
	// get all relevant sizes
	var lthSize = $(layerToHideName).getSize();
	var lthWidth = lthSize.x;
	var lthHeight = Math.max(1, lthSize.y);
	var lthPosX = $(layerToHideName).getLeft();
	var lthPosY = $(layerToHideName).getTop();
	if (useLocalCoordinates) {
		lthPosX = $(layerToHideName).offsetLeft;
		lthPosY = $(layerToHideName).offsetTop;
	}
	var lthOverflow = $(layerToHideName).getStyle('overflow');
	$(layerToShowName).setStyles({
		'width': lthWidth+'px',
		'display': 'block',
		'opacity': 0.1,
		'position': 'absolute',
		'top': lthPosY+'px',
		'left': lthPosX+'px'
	});
	var ltsSize = $(layerToShowName).getSize();
	var ltsWidth = ltsSize.x;
	var ltsHeight = Math.max(1, ltsSize.y);
	var ltsOverflow = $(layerToShowName).getStyle('overflow');
	var scrollYdiff = stm_getYScrollDiffForElement(layerToShowName);
	if (scrollYdiff!=0) {
		var wndStartX = document.body.scrollLeft;
		var wndStartY = document.body.scrollTop;
		stm_scrollTo(wndStartX, wndStartY+scrollYdiff);
	}
	// do the anims
	$(layerToHideName).setStyles({
		'height': lthHeight+'px',
		'width': lthWidth+'px',
		'display': 'block',
		'overflow': 'hidden'
	});
	$(layerToShowName).setStyles({
		'width': ltsWidth+'px',
		'height': lthHeight+'px',
		'overflow': 'hidden'
	});
	var fx1 = new Fx.Morph($(layerToHideName), {'duration': duration, 'wait': false});
	var fx2 = new Fx.Morph($(layerToShowName), {'duration': duration, 'wait': false});
	fx1.start( {
		'height':ltsHeight,
		'opacity':0
	});
	fx2.start( {
		'height':ltsHeight,
		'opacity':0.99
	}).chain(function(){
		$(layerToHideName).setStyles({
			'height': lthHeight+'px',
			'display': 'none',
			'overflow': lthOverflow
		});
		$(layerToShowName).setStyles({
			'position': 'static',
			'display': 'block',
			'overflow': ltsOverflow,
			'opacity': 1.0
		});
		if (repairWidthHeightAfterAnim)
			stm_repairWidthAndHeight(layerToShowName);
		$(layerToHideName).setAttribute('stmShowHideActive', '0');
		$(layerToShowName).setAttribute('stmShowHideActive', '0');
		this.start();
	});
	return true;
}

function stm_repairWidthAndHeight(layername) {
	$(layername).setStyles({
		'width': 'auto',
		'height': 'auto'
	});
}

function stm_getYScrollDiffForElement(elemName, parentLayerWithOverflow) {
	if (typeof parentLayerWithOverflow == "undefined")
		parentLayerWithOverflow = document.body;
	else
		parentLayerWithOverflow = $(parentLayerWithOverflow);
	var BORDERBUFFER = 5;
	var wndStartY = parentLayerWithOverflow.scrollTop;
	var wndEndY = wndStartY + parentLayerWithOverflow.clientHeight;
	var elemSize = $(elemName).getSize();
	var elemStartY = $(elemName).getTop();
	var elemEndY = elemStartY+elemSize.y;
	var diffY = 0;
	if (elemEndY>wndEndY) {
		diffY = +(elemEndY-wndEndY+BORDERBUFFER);
		if (elemStartY-diffY<wndStartY)
			diffY = elemStartY-BORDERBUFFER-wndStartY;
	}
	if (elemStartY<wndStartY) {
		diffY = -(wndStartY-elemStartY+BORDERBUFFER);
	}
	return diffY;
}

function stm_getXScrollDiffForElement(elemName, parentLayerWithOverflow) {
	if (typeof parentLayerWithOverflow == "undefined")
		parentLayerWithOverflow = document.body;
	else
		parentLayerWithOverflow = $(parentLayerWithOverflow);
	var BORDERBUFFER = 5;
	var wndStartX = parentLayerWithOverflow.scrollLeft;
	var wndEndX = wndStartX + parentLayerWithOverflow.clientWidth;
	var elemSize = $(elemName).getSize();
	var elemStartX = $(elemName).getLeft();
	var elemEndX = elemStartX+elemSize.x;
	var diffX = 0;
	if (elemEndX>wndEndX) {
		diffX = +(elemEndX-wndEndX+BORDERBUFFER);
		if (elemStartX-diffX<wndStartX)
			diffX = elemStartX-BORDERBUFFER-wndStartX;
	}
	if (elemStartX<wndStartX) {
		diffX = -(wndStartX-elemStartX+BORDERBUFFER);
	}
	return diffX;
}

function stm_getScrollStep(diff) {
	var negative = (diff<0)?-1:1;
	if (diff==0)
		return 0;
	if (Math.abs(diff)<4)
		return 1*negative;
	if (Math.abs(diff)<8)
		return 2*negative;
	if (Math.abs(diff)<12)
		return 4*negative;
	if (Math.abs(diff)<25)
		return 6*negative;
	if (Math.abs(diff)<50)
		return 10*negative;
	return 20*negative;
}

var stm_globalScrollToTimeout = -1;
var stm_globalScrollNoChange = 0;
function stm_scrollTo(x, y, oldX, oldY, parentLayerWithOverflow) {
	if (typeof parentLayerWithOverflow == "undefined")
		parentLayerWithOverflow = document.body;
	else
		parentLayerWithOverflow = $(parentLayerWithOverflow);
	c5_debugTrace(parentLayerWithOverflow.id);
	var wndStartX = parentLayerWithOverflow.scrollLeft;
	var wndStartY = parentLayerWithOverflow.scrollTop;
	var diffX = x-wndStartX;
	var diffY = y-wndStartY;
	if (typeof oldX != "undefined" || oldX==-1) {
		if (oldX==wndStartX && oldY==wndStartY) {
			stm_globalScrollNoChange++;
		}
	}
	if (stm_globalScrollNoChange>20 || (diffX==0 && diffY==0)) {
		stm_globalScrollNoChange = 0;
		stm_globalScrollToTimeout = -1;
		return;
	}
	var stepX = stm_getScrollStep(diffX);
	var stepY = stm_getScrollStep(diffY);
	parentLayerWithOverflow.scrollTo(wndStartX+stepX, wndStartY+stepY);
	//scrollTo(wndStartX+stepX, wndStartY+stepY);
	if (stm_globalScrollToTimeout != -1)
		clearTimeout(stm_globalScrollToTimeout);
	var parentLayer =  parentLayerWithOverflow==document.body ? "document.body" : "'"+parentLayerWithOverflow.getAttribute('id')+"'";
	stm_globalScrollToTimeout = setTimeout("stm_scrollTo("+x+", "+y+", "+wndStartX+", "+wndStartY+", "+parentLayer+")", 15);
}

function stm_addClass(element, value) {
	if (!element.className) {
		element.className = value;
	}
	else {
		var newClassName = element.className;
		newClassName += " ";
		newClassName += value;
		element.className = newClassName;
	}
}

/**************************************************************************
 * StmTabTool
 **************************************************************************/

function stm_clickOnTab(extTabtoolId, extTabId, hiliteClass, duration) {
	if (typeof duration == "undefined")
		duration = 500;
	// setup
	var tabtoolId = "tabtool___"+extTabtoolId;
	var tabcontainerId = "tabcontainer___"+extTabtoolId;
	var contentcontainerId = "contentcontainer___"+extTabtoolId;
	var tabId = "tab___"+extTabtoolId+"___"+extTabId;
	var contentId = "content___"+extTabtoolId+"___"+extTabId;
	// check if active
	if ($(tabtoolId).getAttribute('stmShowHideActive')=='1')
		return false;
	$(tabtoolId).setAttribute('stmShowHideActive', '1');
	// get active tab
	var acttabId = "";
	var actcontentId = "";
	for (var i=0; i<$(contentcontainerId).childNodes.length; i++) {
		var c = $(contentcontainerId).childNodes[i];
		if (typeof (c.id) != "undefined") {
			if (c.style.display=='block') {
				var tmp = c.id.split("content___"+extTabtoolId+"___");
				acttabId = "tab___"+extTabtoolId+"___"+tmp[1];
				actcontentId = "content___"+extTabtoolId+"___"+tmp[1];
			}
		}
	}
	if (acttabId=="")
		return false;
	// update highlight
	stm_addClass($(tabId), hiliteClass);
	$(acttabId).removeClass(hiliteClass);
	// set cookie
	Cookie.write('stmTabToolActiveTab_'+extTabtoolId, extTabId);
	//switch layers
	setTimeout("stm_switchLayers('"+actcontentId+"', '"+contentId+"', "+duration+");", 10);
	setTimeout(" $('"+tabtoolId+"').setAttribute('stmShowHideActive', '0');", parseInt(duration)+100);
	return true;
}

/**************************************************************************
 * StmTreeTool
 **************************************************************************/

var stm_lastDraggedElement = null;
var stm_lastDropElement = null;
var stm_lastDraggedVisible = false;
var stm_lastDropPosition = "";
var stm_lastDropOnElementId = "";
var stm_lastOverCount = 0;

function stm_toggleTreeElement(treeId, elementId, childsId, switchId, imagePath, duration, parentLayerWithOverflow) {
	if (typeof parentLayerWithOverflow == "undefined")
		parentLayerWithOverflow = document.body;
	else
		parentLayerWithOverflow = $(parentLayerWithOverflow);
	if ($(childsId).style.display!="none") {
		// close branch
		stm_hideLayer(childsId, duration);
		$(switchId).src = imagePath+"/_plus.png";
		Cookie.write("treeStatus_"+treeId+'_'+elementId, 'closed');
	}
	else {
		// check if ajax-loading is needed!
		var childsDiv = $(childsId);
		if (childsDiv.innerHTML=="AJAX_VOID") {
			childsDiv.innerHTML = "<div style=\"padding:3px\">Loading...</div>";
			var t = stm_createTempDivForAjax('treetemp'+elementId);
			document.body.appendChild(t);
			eval("var urlPrefix = treetool_"+treeId+"_ajaxurl;");
			stm_treeDoEditGETrequest(urlPrefix+"subtree&treeParent="+elementId, childsId, 'treetemp'+elementId);
		}
		// open branch
		stm_showLayer(childsId, duration, parentLayerWithOverflow);
		$(switchId).src = imagePath+"/_minus.png";
		Cookie.write("treeStatus_"+treeId+'_'+elementId, 'open');
	}
}

function stm_treeDoEditGETrequest(url, srcDivName, dstDivName) {
	if (typeof c5_showAjaxLayer != "undefined")
		c5_showAjaxLayer();
	new Request({
		url: url,
		method: 'get',
		onSuccess: function(transport, xml) {
			$(dstDivName).set('html', transport.stripScripts(true));
			stm_treeDoDivTransition($(srcDivName), $(dstDivName));
			if (typeof c5_hideAjaxLayer != "undefined")
				c5_hideAjaxLayer();
		}
	 }).send();
}

function stm_treeDoDivTransition(srcDiv, dstDiv) {
	// settings
	var FX_DURATION = 200;
	var BORDERBUFFER = 5;
	// compute resizeEffect
	var srcSize = srcDiv.getSize();
	dstDiv.setStyle('opacity', 0.01);
	dstDiv.style.top = srcDiv.getTop(); //c5_getTop(srcDiv);
	dstDiv.style.left = srcDiv.getLeft(); //c5_getLeft(srcDiv);
	dstDiv.style.width = srcSize.x;
	var dstSize = dstDiv.getSize();
	var startHeight = srcSize.y;
	var endHeight = dstSize.y;
	var endWidth = srcSize.x;
	srcDiv.style.overflow = 'hidden';
	dstDiv.style.overflow = 'hidden';
	dstDiv.style.height = startHeight;
	// compute scrolling
	var elemStartX = srcDiv.getLeft();
	var elemStartY = srcDiv.getTop();
	var elemEndX = elemStartX+dstSize.x;
	var elemEndY = elemStartY+endHeight;
	var wndStartX = document.body.scrollLeft;
	var wndStartY = document.body.scrollTop;
	var wndEndX = wndStartX + document.body.clientWidth;
	var wndEndY = wndStartY + document.body.clientHeight;
	var diffX = 0;
	var diffY = 0;
	//alert("elemStartY="+elemStartY+" | elemEndY="+elemEndY+"\n"+"wndStartY="+wndStartY+" | wndEndY="+wndEndY);
	if (elemEndY>wndEndY) {
		diffY = +(elemEndY-wndEndY+BORDERBUFFER);
		if (elemStartY-diffY<wndStartY)
			diffY = elemStartY-BORDERBUFFER-wndStartY;
	}
	if (elemStartY<wndStartY) {
		diffY = -(wndStartY-elemStartY+BORDERBUFFER);
	}
	//alert("elemStartX="+elemStartX+" | elemEndX="+elemEndX+"\n"+"wndStartX="+wndStartX+" | wndEndX="+wndEndX);
	if (elemEndX>wndEndX) {
		diffX = +(elemEndX-wndEndX+BORDERBUFFER);
		if (elemStartX-diffX<wndStartX)
			diffX = elemStartX-BORDERBUFFER-wndStartX;
	}
	if (elemStartX<wndStartX) {
		diffX = -(wndStartX-elemStartX+BORDERBUFFER);
	}
	//alert(diffX);
	if (diffX!=0 || diffY!=0) {
		stm_scrollTo(wndStartX+diffX, wndStartY+diffY);
	}
	// start actions
	var fx1 = new Fx.Morph(srcDiv, {duration: FX_DURATION, wait: false});
	var fx2 = new Fx.Morph(dstDiv, {duration: FX_DURATION, wait: false});
	fx1.start( {
		'height':endHeight,
		'opacity':0
	});
	fx2.start( {
		'height':endHeight,
		'opacity':1
	}).chain(function(){
		srcDiv.innerHTML = dstDiv.innerHTML;
		srcDiv.setStyle('opacity', 1);
		this.start();
	}).chain(function() {
		dstDiv.setStyle('opacity', 0);
		dstDiv.setStyle('left', "-2000");
		dstDiv.destroy();
		srcDiv.setStyle('height', 'auto');
		srcDiv.setStyle('width', endWidth+'px');
		srcDiv.setStyle('opacity', 1);
		this.start();
	});
}

function stm_treeHiliteRow(rowId, hiliteClass) {
	stm_addClass($(rowId), hiliteClass);
}

function stm_treeLowliteRow(rowId, hiliteClass) {
	$(rowId).removeClass(hiliteClass);
}

function stm_treeCreateDraggableImg(treeId, realId) {
	if (stm_lastDraggedElement!=null)
		return;
	$$(".treeDraggable_"+treeId).each(function(el, index) {
		el.destroy();
	});
	stm_lastDraggedElement = null;
	stm_lastDropElement = null;
	stm_lastDraggedVisible = false;
	stm_lastDropPosition = "";
	stm_lastDropOnElementId = "";
	stm_lastOverCount = 0;
	var de = document.createElement('div');
	de.innerHTML = '<table cellspacing=0 cellpadding=0 border=0><tr><td><img unselectable="on" src="'+$('treeIconImg_'+treeId+"_"+realId).src+'" alt="" border="0"></td><td>&nbsp;</td><td id="treeDraggableText_'+treeId+'_'+realId+'"></td></tr></table>';
	de.setAttribute('id', 'treeDraggable_'+treeId+'_'+realId);
	document.body.appendChild(de);
	$('treeDraggable_'+treeId+'_'+realId).setProperties({
	    'id': 'treeDraggable_'+treeId+'_'+realId,
	    'onMouseOut': "stm_treeRemoveDraggableImg('"+treeId+"', '"+realId+"');",
	    'class': "treeDraggable_"+treeId
	});
	var pos = $('treeIconImg_'+treeId+"_"+realId).getPosition();
	de.setStyles({
	   'border': 'none',//'2px solid #000',
	   'position': 'absolute',
	   'top': pos.y+'px',
	   'left': pos.x+'px',
	   'cursor': 'move',
	   'display': 'block',
	   'z-index': 9999
	});
	de.injectAfter('treeElement_'+treeId+"_"+realId);

	if (document.all)
		de.setProperty('UNSELECTABLE', 'on');

	de.makeDraggable({
		'droppables': $$('.treeElementOf_'+treeId),
		'onStart': function () {
            $('treeDraggable_'+treeId+'_'+realId).setProperty("onMouseOut", "");
            $('treeElement_'+treeId+'_'+realId).setStyle("opacity", "0.6");
            $('treeDraggable_'+treeId+'_'+realId).setStyle("opacity", "0.6");
            var text = $('treeTitle_'+treeId+'_'+realId).get('text');
            $('treeDraggableText_'+treeId+'_'+realId).set('html', stm_treeShortenString(text));
		},
		'onDrag': function (e) {
			stm_treeShowDragmarker(treeId);
		},
		'onComplete': function () {
			stm_treeRemoveDraggableImg(treeId, realId);
            $('treeElement_'+treeId+'_'+realId).setStyle("opacity", "1");
		},
		'onEmptydrop': function () {
			alert("ERROR: EMPTYDROP!");
			stm_treeRemoveDraggableImg(treeId, realId);
            $('treeElement_'+treeId+'_'+realId).setStyle("opacity", "1");
		},
        'onEnter': function (element, droppable) {
			stm_lastDraggedVisible = true;
			stm_treeShowDragmarker(treeId, element, droppable);
		},
        'onLeave': function (element, droppable) {
			if ($("treeDragmarker_"+treeId))
				 $("treeDragmarker_"+treeId).destroy();
			stm_lastDraggedVisible = false;
		},
        'onDrop': function (element, droppable) {
        	if (droppable) {
				stm_treeDropElement(treeId, element, droppable);
			}
			stm_lastDraggedElement = null;
			stm_lastDropElement = null;
			stm_lastDraggedVisible = false;
			stm_lastDropPosition = "";
			stm_lastDropOnElementId = "";
			stm_lastOverCount = 0;
		}
	});
}

function stm_treeShowDragmarker(treeId, draggedElement, dropElement) {
	if ($("treeDragmarker_"+treeId) && !stm_lastDraggedVisible)
		 $("treeDragmarker_"+treeId).destroy();
	if (!stm_lastDraggedVisible)
		return;
	if (typeof draggedElement == "undefined") {
		if (stm_lastDraggedElement == null)
			return;
		draggedElement = stm_lastDraggedElement;
	}
	else
		stm_lastDraggedElement = draggedElement;
	if (typeof dropElement == "undefined")
		dropElement = stm_lastDropElement;
	else
		stm_lastDropElement = dropElement;
	if (!$('treeDragmarker_'+treeId)) {
		var dm = document.createElement('div');
		dm.innerHTML = '<font style="font-size:0px">&nbsp;</font>';
		dm.setAttribute('id', 'treeDragmarker_'+treeId);
		dm.style.display = 'none';
		document.body.appendChild(dm);
		$('treeDragmarker_'+treeId).setStyles({
		   'border': '2px solid red',
		   'position': 'absolute',
		   'top': '0px',
		   'left': '0px',
		   'display': 'none',
		   'z-index': 9999
		});
	}
	if (typeof dropElement != "undefined") {
		var dropCoords = dropElement.getCoordinates();
		var d = $('treeDragmarker_'+treeId);
		var tmp = dropElement.id.split('treeElement_'+treeId+'_');
		var dropId = stm_lastDropOnElementId = tmp[1];
		var dropIconCoords = $('treeIconImg_'+treeId+'_'+dropId).getCoordinates();
		var zeropx = document.all?2:0;
		var firefoxWidthFix = document.all?0:4;
//c5_debugTrace("dropCoords: "+dropCoords.left+", "+dropCoords.top+"<br>"+"mouse: "+mouseX+", "+mouseY+"<br>"+"dropElement: "+dropElement.id);
		if (mouseY<dropCoords.top+dropCoords.height/3) {
			stm_lastDropPosition = "above";
			d.setStyles({
			   'top': (dropCoords.top-2)+'px',
			   'left': dropIconCoords.left+'px',
			   'width': (dropCoords.width-(dropIconCoords.left-dropCoords.left)-firefoxWidthFix)+'px',
			   'height': zeropx+'px',
			   'display': 'block'
			});
		}
		else if (mouseY>dropCoords.top+dropCoords.height/3*2) {
			stm_lastDropPosition = "below";
			d.setStyles({
			   'top': (dropCoords.top+dropCoords.height-2)+'px',
			   'left': dropIconCoords.left+'px',
			   'width': (dropCoords.width-(dropIconCoords.left-dropCoords.left)-firefoxWidthFix)+'px',
			   'height': zeropx+'px',
			   'display': 'block'
			});
		}
		else {
			stm_lastDropPosition = "inside";
			d.setStyles({
			   'top': dropCoords.top+'px',
			   'left': dropIconCoords.left+'px',
			   'width': (dropCoords.width-(dropIconCoords.left-dropCoords.left)-firefoxWidthFix)+'px',
			   'height': (dropCoords.height-firefoxWidthFix)+'px',
			   'display': 'block'
			});
		}
	}
	else
		c5_debugTrace("NO DROP ELEMENT!!!");
}

function stm_treeRemoveDraggableImg(treeId, realId) {
	$('treeDraggable_'+treeId+'_'+realId).destroy();
	$$("treeDraggable_"+treeId).each(function(el, index) {
		el.destroy();
	});
	if ($("treeDragmarker_"+treeId))
		 $("treeDragmarker_"+treeId).destroy();
	$$('.treeElementOf_'+treeId).each(function(drop, index){
		drop.removeEvent('over');
		drop.removeEvent('leave');
		drop.removeEvent('drop');
	});
}

function stm_treeShortenString(txt) {
	var tmp = txt.replace(/<br>|<br\s*\/>/i, " ").split(" ");
	if (tmp[0].length>20)
		tmp[0] = tmp[0].slice(0, 20)+"...";
	return tmp[0]+(tmp.length>1?"...":"");
}

var stm_treeDontDropAgain = false;
function stm_treeDropElement(treeId, dragElement, dropElement) {
	if (stm_treeDontDropAgain)
		return;
	stm_treeDontDropAgain = true;
	var tmp1 = dropElement.id.split('treeElement_'+treeId+'_');
	var dropId = tmp1[1];
	var tmp2 = dragElement.id.split('treeDraggable_'+treeId+'_');
	var dragId = tmp2[1];
	c5_debugTrace("DROP ("+treeId+") "+dragElement.id+"|"+dragId+" [on] "+dropId);
	eval("var urlPrefix = treetool_"+treeId+"_ajaxurl;");
	var url = urlPrefix+"drop&stmTreeId="+treeId+"&stmTreeDragId="+dragId+"&stmTreeDropId="+dropId+"&stmTreeDropPosition="+stm_lastDropPosition;
	c5_showAjaxLayer(); // TODO: must be customizable, if not used with stormcms/2+c5!!!
	new Request({
		url: url,
		method: 'get',
		onSuccess: function(transport, xml) {
			// show window
			$('treetool_'+treeId).set('html', transport.stripScripts(true));
			c5_debugTrace("TREE-TRANSPORT DONE");
			stm_treeDontDropAgain = false;
			c5_hideAjaxLayer(); // TODO: must be customizable, if not used with stormcms/2+c5!!!
		}
	 }).send();
}