// Drag and Drop fuer Elemente
// ###################################################################


function disableSelection() {
	element = this;
	element.onselectstart = function() {
		return false;
	};
	element.unselectable = "on";
	element.style.MozUserSelect = "none";
}


function foregroundTooltip() {
	// z-index aller geklonten Tooltips zuruecksetzen
	for (var i = 1; i <= Tooltips.TTCount; i++) {
		var target = document.getElementById('Tooltip'+i);
		if (target && target.style.zIndex != "9") {
			target.style.zIndex = "9";
		}
	}
	this.style.zIndex = "11";
}

addLoadEvent(function() {
	init();
});

function init() { document.onmousemove = drag; document.onmouseup = dragstop; }

var dragobjekt = null; var dragx = 0; var dragy = 0; var posx = 0; var posy = 0;
function dragstart(element) {
	dragobjekt = this.parentNode.parentNode; 
	dragx = posx - dragobjekt.offsetLeft; 
	dragy = posy - dragobjekt.offsetTop; 
}
function dragstop() { dragobjekt=null; }
function drag(ereignis) { posx = document.all ? window.event.clientX : ereignis.pageX; posy = document.all ? window.event.clientY : ereignis.pageY; if(dragobjekt != null) { dragobjekt.style.left = (posx - dragx) + "px"; dragobjekt.style.top = (posy - dragy) + "px"; } }





ie6 = false;
ie = false;
ie = (document.all)? true:false
ie = (navigator.appName.indexOf('Internet Explorer') >- 1)? true:false
if (ie == true && navigator.appVersion.indexOf('MSIE 6') > -1) {
	ie6 = true;
}

function absLeft(i) {
	return (i.offsetParent) ? i.offsetLeft+absLeft(i.offsetParent) : i.offsetLeft;
}
function absTop(el) {
	if (!el) {
		return false;
	}
	return (el.offsetParent)? el.offsetTop+absTop(el.offsetParent) : el.offsetTop;
}

var Tooltips = {
	x:0,
	y:0,
	obj:{},
	text:null,
	lnk:null,
	linkPool: {},
	TTCount:0,
	linkgesetz:null,
	linknorm:null,
	arrowClass:null,
	init: function() {
		var lnks = document.getElementsByTagName("a");
		if (document.getElementById("alpha")) {
			var alpha = document.getElementById("alpha");
		}
		var i = lnks.length || 0;
		var cnt = 0;
		while(i--) {
			//if((lnks[i].name && lnks[i].name != "" && lnks[i].name.indexOf("bild:") == -1) || lnks[i].className == "randhinweis") {
			if((window.location.hostname == 'dejure.org' && lnks[i].className == "randhinweis") || (window.location.hostname != 'dejure.org' && (lnks[i].name && lnks[i].name != "" && lnks[i].name.indexOf("bild:") == -1) || lnks[i].className == "randhinweis")) {
				Tooltips.addEvent(lnks[i], ["mouseover"], Tooltips.initTT);
				Tooltips.addEvent(lnks[i], ["mouseout"],  Tooltips.hideTT);
				Tooltips.linkPool[lnks[i].href] = cnt++;
			}
		}
		if(cnt) {
			Tooltips.createTT();
		}
	},
	createTT: function(e) {
		Tooltips.obj = document.createElement('div');
		Tooltips.obj.id = "Tooltip";
		Tooltips.obj.className = "BTooltip";
		Tooltips.obj.onmousedown = "startDrag(this)";
		Tooltips.obj.style.display = "none";
		Tooltips.obj.style.top = "0";
		Tooltips.obj.style.left = "0";

		Tooltips.arrow = document.createElement('div');
		Tooltips.arrow.className = "BTooltipArrow";

		Tooltips.plus = document.createElement('a');
		Tooltips.plus.className = "plusgrau";
		Tooltips.plus.style.left = "10px";
		Tooltips.plus.style.top = "auto";
		Tooltips.plus.style.bottom = "10px";
		Tooltips.plus.style.position = "absolute";
		Tooltips.addEvent(Tooltips.plus, ["focus", "click"], Tooltips.extendTT);

		Tooltips.close = document.createElement('a');
		Tooltips.close.className = "close";
		Tooltips.close.style.right = "10px";
		Tooltips.close.style.top = "5px";
		Tooltips.close.style.display = "none";

		Tooltips.text = document.createElement('div');
		Tooltips.text.className = "BTooltipText";
		Tooltips.head = document.createElement('div');
		Tooltips.head.className = 'BTooltipHead';
		Tooltips.body = document.createElement('div');
		Tooltips.body.style.overflow = "auto";
		Tooltips.body.style.padding = "10px 10px 20px 10px";
		if (!ie6) {
			Tooltips.obj.appendChild(Tooltips.arrow);
		}
		Tooltips.text.appendChild(Tooltips.close);
		Tooltips.text.appendChild(Tooltips.plus);
		Tooltips.text.appendChild(Tooltips.head);
		Tooltips.text.appendChild(Tooltips.body);
		Tooltips.obj.appendChild(Tooltips.text);
		Tooltips.addEvent(Tooltips.obj, ["blur", "mouseout"], Tooltips.hideTT);
		document.getElementsByTagName('body')[0].appendChild(Tooltips.obj);
		Tooltips.addEvent(Tooltips.obj, ["focus", "mouseover"], Tooltips.holdTT);
	},
	initTT: function(e) {
			e = e || event;
			Tooltips.hideTT(e, 1);

			Tooltips.lnk       = this;
			var positionClass  = "left";

			var heightIndent;
			var indentX = 0;
			var indentY = 30;
			var trueBody = (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body;

			// Inhalt fuer den Tooltip abrufen und ihn fuellen
			var obj = this;
			Tooltips.fillTT(e, this);

			Tooltips.arrow.style.display = 'block';
			if (Tooltips.plus.style.display != "none") {
				Tooltips.plus.style.display = 'block';
			}
			Tooltips.close.style.display = 'none';
			Tooltips.text.style.height = '';
			Tooltips.head.className = 'BTooltipHead';

			Tooltips.obj.style.top = "-2000px";
			Tooltips.obj.style.visibility = "hidden";
			Tooltips.obj.style.display = "block";


			if(String(e.type).toLowerCase().search(/mouseover/) != -1) {
				if (document.captureEvents) {
					Tooltips.x = e.pageX;
					Tooltips.y = e.pageY;
				} else if ( window.event.clientX ) {
					Tooltips.x = window.event.clientX+trueBody.scrollLeft;
					Tooltips.y = window.event.clientY+trueBody.scrollTop;
				}
				// Tooltips orientieren sich an den Links, nicht am Mauszeiger
				indentX = -20;
				if (ie6) {
					indentX = -45;
					indentY = 17;
				}
				curleft = absLeft(obj);
				curtop = absTop(obj);
				Tooltips.x = curleft;
				Tooltips.y = curtop;
				/////
				heightIndent = parseInt(Tooltips.y-(Tooltips.obj.offsetHeight))-10+'px';
			} else {
				var curleft = curtop = 0;
				if (obj.offsetParent) {
					curleft = obj.offsetLeft;
					curtop = obj.offsetTop;
					while (obj = obj.offsetParent) {
						curleft += obj.offsetLeft;
						curtop += obj.offsetTop;
					}
				}
				curtop += this.offsetHeight;

				Tooltips.x = curleft;
				Tooltips.y = curtop;

				heightIndent = parseInt(Tooltips.y-(Tooltips.obj.offsetHeight)-this.offsetHeight)+'px';
			}
			if (Tooltips.obj.offsetWidth > 550) {
				Tooltips.obj.style.width = 400+'px';
			}
			if (Tooltips.obj.offsetHeight > 250) {
				Tooltips.obj.style.height = 250+'px';
			}
			
			if ( parseInt(Tooltips.obj.offsetWidth) > parseInt(absLeft(this)+indentX) && parseInt(Tooltips.obj.offsetWidth) > parseInt(trueBody.clientWidth - absLeft(this) - indentX)) {
				Tooltips.obj.style.left = parseInt(Tooltips.x-((Tooltips.obj.offsetWidth/2)+indentX))+'px';
				positionClass = "center";
			} else if ( parseInt(trueBody.clientWidth+trueBody.scrollLeft) < parseInt(Tooltips.obj.offsetWidth+Tooltips.x) + indentX) {
				Tooltips.obj.style.left = parseInt(Tooltips.x-(Tooltips.obj.offsetWidth+indentX-15))+'px';
				positionClass = "right";
			} else {
				Tooltips.obj.style.left = (Tooltips.x+indentX)+'px';
			}
			if ( parseInt(trueBody.clientHeight+trueBody.scrollTop) < parseInt(Tooltips.obj.offsetHeight+Tooltips.y) + indentY ) {
				Tooltips.obj.style.top = heightIndent;
				positionClass += "Bottom";
			} else {
				Tooltips.obj.style.top = (Tooltips.y + indentY)+'px';
				positionClass += "Top";
			}

			if (!ie6) {
				Tooltips.arrow.className = 'BTooltipArrow '+positionClass+Tooltips.arrowClass;
			}
			Tooltips.showThumb();
	},
	fillTT: function(e, obj) {
		if (obj.getAttribute("name")) {
			arr_text = obj.name.split(",");
			var linkhead = gl[arr_text[0]];
			var linkname = pa[arr_text[1]];
			Tooltips.linkgesetz = arr_text[2];
			Tooltips.linknorm = obj.innerHTML;
			Tooltips.head.innerHTML = "";
			if (Tooltips.linkgesetz) {
				Tooltips.linkgesetz = Tooltips.linkgesetz.replace(/\'/g, "");
				Tooltips.head.innerHTML = "<b>"+Tooltips.linkgesetz+"</b> > ";
			} else {
				Tooltips.linkgesetz = gb;
			}
			Tooltips.head.innerHTML+= linkhead;
			if (linkname) {
				linkname = "<b>"+linkname+"<b>";
				Tooltips.body.innerHTML = linkname;
			}
			Tooltips.arrowClass = "";
		} else {
			var randid = obj.getAttribute("id").substr(4);
			Tooltips.body.innerHTML = document.getElementById("span"+randid).getAttribute("title");
			Tooltips.head.style.display = "none";
			Tooltips.plus.style.display = "none";
			Tooltips.arrowClass = " whiteTop";
		}
	},
	showThumb: function(e) {
		Tooltips.timer = window.setTimeout("Tooltips.obj.style.visibility = 'visible'",500);
		
	},
	holdTT: function(e) {
		if (Tooltips.hideTooltip) {
			clearTimeout(Tooltips.hideTooltip);
		}
	},
	fullhideTT: function(e) {
		var nodetokill = this;
		document.getElementById("dejure").removeChild(this.parentNode.parentNode);
	},
	hideTT: function(e, fullhide) {
		e = e || window.event;
		clearTimeout(Tooltips.timer);

		// mouse(over|out) im Tooltip?
		if((e.type == "blur" || e.type == "mouseout") && !fullhide) {
			var elem = e.relatedTarget || e.toElement || false;
			if(elem.id && elem.id.search("Tooltip") != -1) {
				return;
			}
		}

		//Ohne Verzoegerung verstecken
		if (fullhide) {
			clearTimeout(Tooltips.hideTooltip);
			Tooltips.obj.style.display = "none";
			Tooltips.obj.style.visibility = "hidden";
			return;
		}

		Tooltips.hideTooltip = window.setTimeout(function(){
			Tooltips.obj.style.display = "none";
		}, 500);
	},
	extendTT: function(e) {
		e = e || event;

		Tooltips.removeEvent(Tooltips.obj, ["focus", "mouseout"], Tooltips.hideTT);
		Tooltips.TTCount+= 1;

		var trueBody = (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body;
				if (document.captureEvents) {
					Tooltips.x = e.pageX;
					Tooltips.y = e.pageY;
				} else if ( window.event.clientX ) {
					Tooltips.x = window.event.clientX+trueBody.scrollLeft;
					Tooltips.y = window.event.clientY+trueBody.scrollTop;
				}
		if ( parseInt(trueBody.clientHeight+trueBody.scrollTop) < parseInt(420+absTop(Tooltips.obj)) ) {
			Tooltips.obj.style.top = (trueBody.clientHeight+trueBody.scrollTop)-420+'px';
		}
		Tooltips.arrow.style.display = "none";
		Tooltips.plus.style.display = "none";

		Tooltips.close.style.display = "block";
		Tooltips.close.id = "close"+Tooltips.TTCount;

		Tooltips.head.className+= " BTooltipHeadcursor";
		Tooltips.head.id = "TTHead"+Tooltips.TTCount;

		Tooltips.text.style.height = 400+"px";
		var bodyheight = parseInt(Tooltips.text.offsetHeight-Tooltips.head.offsetHeight-31);
		Tooltips.body.style.height = bodyheight+"px";

		Tooltips.body.id = "TTBody";
		Tooltips.body.id = "TTBody"+Tooltips.TTCount;
		window.laden_verzoegerung = window.setTimeout(function(){
			document.getElementById("TTBody"+Tooltips.TTCount).innerHTML = "<div style=\"text-align:center; padding: "+parseInt(bodyheight/2-8)+"px 0px; \"><img src=\"/jcg/laden.gif\"></div>"
		},100);
		macheRequest("tooltip", Tooltips.linkgesetz, Tooltips.linknorm);
		var Clone = Tooltips.obj.cloneNode(true);
		Clone.style.zIndex = "12";
		Clone.setAttribute('id','Tooltip'+Tooltips.TTCount);
		Tooltips.obj.parentNode.removeChild(Tooltips.obj);
		Tooltips.createTT();

		document.getElementById('dejure').appendChild(Clone);
		Tooltips.addEvent(document.getElementById("close"+Tooltips.TTCount), ["focus", "click"], Tooltips.fullhideTT);
		Tooltips.addEvent(document.getElementById("Tooltip"+Tooltips.TTCount), ["focus", "mousedown"], foregroundTooltip);
		Tooltips.addEvent(document.getElementById("TTHead"+Tooltips.TTCount), ["focus", "mousedown"], dragstart);
		Tooltips.addEvent(document.getElementById("TTHead"+Tooltips.TTCount), ["focus", "mouseover"], disableSelection);
	},
	addEvent: function( obj, types, fn ) {
		var type;
		for(var i = 0; i < types.length; i++) {
			type = types[i];
			if ( obj.attachEvent ) {
				obj['e'+type+fn] = fn;
				obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
				obj.attachEvent( 'on'+type, obj[type+fn] );
			} else obj.addEventListener( type, fn, false );
		}
	},
	removeEvent: function( obj, types, fn ) {
		var type;
		for(var i = 0; i < types.length; i++) {
			type = types[i];
			if ( obj.attachEvent ) {
				obj['e'+type+fn] = fn;
				obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
				obj.attachEvent( 'on'+type, obj[type+fn] );
			} else obj.removeEventListener( type, fn, false );
		}
	}
}

Tooltips.addEvent(window, ['load'], Tooltips.init);


