var debug = false;

function init_debug(){

	if(debug) return;
	debug = true;
	window.onmouseout = checkMouse;

	var display = document.createElement('textarea');
	var attr;
	attr = document.createAttribute('cols'); attr.nodeValue = '50'; display.setAttributeNode(attr);
	attr = document.createAttribute('rows'); attr.nodeValue = '10'; display.setAttributeNode(attr);
	attr = document.createAttribute('id');	 attr.nodeValue = 'debug'; display.setAttributeNode(attr);

	var div = document.createElement('div');
	div.style.position = 'absolute';
	div.style.right = '0px';
	div.style.top	= '100px';

	div.appendChild(display);
	
	document.getElementsByTagName('body')[0].appendChild(div);
}
function trace(msg) {
	if(!debug) return;
	var display = document.getElementById('debug');
	display.innerHTML += msg + '\n';
	
}	

// ------------------------------------------------------------------------------------------------------------
function tt_hide(){
	Widgets.Hide();
}
// ------------------------------------------------------------------------------------------------------------
function tt_show(event, TooltipID){
	Widgets.Show(event,TooltipID);
}
// ------------------------------------------------------------------------------------------------------------
function tt_pin(TooltipID){
	Widgets.Pin(TooltipID);
}
function Tooltips(){

	var PinnedTooltips	= new Array;
	var CurrentTooltip	= null;
	zTop = 100;

	this.GetCurrentTooltip = function(){return CurrentTooltip;}

	this.Show = function(evt, TooltipID){
		
		CurrentTooltip = PinnedTooltips[TooltipID];
		if(CurrentTooltip == undefined){
			CurrentTooltip = new Tooltip(evt, TooltipID);
		}
	}


	this.Hide = function(){
		if(CurrentTooltip != undefined){
			CurrentTooltip.Destroy();
			CurrentTooltip = null;			
		}
	}

	this.Pin = function(TooltipID){
		if(PinnedTooltips[TooltipID] == undefined){
			PinnedTooltips[TooltipID] = CurrentTooltip;
			//CurrentTooltip.DOMNode.firstChild.firstChild.firstChild.firstChild.style.backgroundColor = '#DDDDDD';
			CurrentTooltip.DOMNode.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.nodeValue = 'X';
			CurrentTooltip = null;

		}
		else{
			PinnedTooltips[TooltipID].Destroy();
			PinnedTooltips[TooltipID] = null;
			
		}

	}
	
	function Tooltip(evt, TooltipID){

		this.DOMNode = null;
		this.id = 'tooltip_' + TooltipID;
		var tt = document.getElementById(TooltipID);
		if(tt == null){
			alert('Tooltipemelent mit id ' + TooltipID + ' nicht vorhanden.');
		}
		var div = document.createElement('div');
		var id		= document.createAttribute('id');
		id.nodeValue	= this.id;
		div.setAttributeNode(id);
		div.innerHTML = '<table cellspacing=="0" cellpadding="0" style="width:100%;"><tr>' +
				'<td style="font-size:0.8em;background-color:#3187C5;text-align:right;color:#999999;padding-right:5px;">' +
				'<a href="javascript:;" onclick="tt_pin(\'tooltip_' +TooltipID + '\');" style="color:#FFFFFF;text-decoration:none;">Fixieren</a>' +
				'</td></tr><tr>' +
				'<td>' +
					tt.innerHTML + '</td></tr></table>';

		div.id = 'tooltip_' + TooltipID;

		div.style.position		= 'absolute';
		div.style.cursor		= 'move';
		div.style.display		= 'block';
		div.style.backgroundColor	= '#FFFFFF';
		div.style.borderStyle		= 'solid';
		div.style.borderWidth		= '1px';
		div.style.borderColor		= '#000000';
		div.style.width			= '400px';
		div.style.zIndex			= ++zTop;


		document.getElementsByTagName('body')[0].appendChild(div);				

		if(window.event){
			div.attachEvent('onmousedown', StartDragging,	false);
		}
		else{
			div.addEventListener('mousedown', StartDragging, false);
		}

		if(browser == 'Internet Explorer'){
			div.style.left	= (parseInt(evt.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft)) + 15)  + 'px';
			div.style.top	= (parseInt(evt.clientY + (document.documentElement.scrollTop  ? document.documentElement.scrollTop  : document.body.scrollTop)) + 10)  + 'px';
		}
		else{
			div.style.left	= (parseInt(evt.pageX) + 15)  + 'px';
			div.style.top	= (parseInt(evt.pageY) + 10)  + 'px';
		}

		this.DOMNode = div;


		this.Destroy = function(){
			document.getElementsByTagName('body')[0].removeChild(this.DOMNode);
		}



		var dragbox = null;
		var isDragging = null;

		function StartDragging(evt) {
			evt = new Evt(evt);
			dragbox = evt.source;
			while(dragbox.id.indexOf('tooltip_') == -1 && dragbox.parentNode != null){
				dragbox = dragbox.parentNode;
			}
			if(dragbox.id.indexOf('tooltip_') == -1){
				dragbox = null;
				return;
			}
			dragbox.style.zIndex = ++zTop;
			//setOpacity(dragbox,.7);
			deltaX = evt.x - getX(dragbox);
			deltaY = evt.y - getY(dragbox);
			Evt.addEventListener(document,"mousemove",Drag,false);
			Evt.addEventListener(document,"mouseup",StopDragging,false);
			evt.consume();
		}

		function Drag(evt) {
			if(dragbox != null){
				var evt = new Evt(evt);
				setX(dragbox,evt.x - deltaX);
				setY(dragbox,evt.y - deltaY);
				evt.consume();
			}
		}

		function StopDragging(evt) {
			evt = new Evt(evt);
			//setOpacity(dragbox, 1);
			Evt.removeEventListener(document,"mousemove", Drag,false);
			Evt.removeEventListener(document,"mouseup", StopDragging,false);
			//if (droppedOnDropBox(evt)) {
					//dragBoxDropped(evt);
			//}
			dragbox = null;
		}


	}
}


var dragbox;
var deltaX, deltaY;
var client;
//createClient();
// ---------------------------------------------------------------------------------------------
function createClient() {
	try {
		client = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
	}
	catch (e) {
		alert("Sorry, your browser is not Ajax-enabled!");
	}
}
// ---------------------------------------------------------------------------------------------
function setOpacity(node,val) {
	if (node.filters) {
		try {
			node.filters["alpha"].opacity = val*100;
		}
		catch (e) {
		}
	}
	else if (node.style.opacity) {
		node.style.opacity = val;
	}
}





// ---------------------------------------------------------------------------------------------
function getX(n)		{return parseInt(n.style.left);}
function getY(n)		{return parseInt(n.style.top);}
function setX(n,x)		{n.style.left = x + "px";}
function setY(n,y)		{n.style.top = y + "px";}
// _____________________________________________________________________________________________
// Let us facilitate the handling of events by defining a thin event wrapper
function Evt(evt) {
	this.evt = evt ? evt : window.event;
	this.source = evt.target ? evt.target : evt.srcElement;
	//if(this.source.nodeName != 'DIV'){
	//	throw('No div but ' + this.source.nodeName);
	//}
	this.x = evt.pageX ? evt.pageX : evt.clientX;
	this.y = evt.pageY ? evt.pageY : evt.clientY;
}
// ---------------------------------------------------------------------------------------------
Evt.prototype.toString = function () {
	return "Evt [ x = " + this.x + ", y = " + this.y + " ]";
};
// ---------------------------------------------------------------------------------------------
Evt.prototype.consume = function () {
	if (this.evt.stopPropagation) {
		this.evt.stopPropagation();
		this.evt.preventDefault();
	}
	else{// if (this.evt.cancelBubble) {
		this.evt.cancelBubble = true;
		this.evt.returnValue = false;
	}
};

// ---------------------------------------------------------------------------------------------
Evt.addEventListener = function (target, type, func, bubbles) {
	if (document.addEventListener) {
		target.addEventListener(type, func, bubbles);
	}
	else if (document.attachEvent) {
		target.attachEvent("on"+type, func, bubbles);
	}
	else {
		target["on"+type] = func;
	}
};
// ---------------------------------------------------------------------------------------------
Evt.removeEventListener = function (target,type,func,bubbles) {
	if (document.removeEventListener) {
		target.removeEventListener(type,func,bubbles);
	}
	else if (document.detachEvent) {
		target.detachEvent("on"+type,func,bubbles);
	}
	else {
		target["on"+type] = null;
	}
};
// _____________________________________________________________________________________________
var dragbox = null;
function dragPress(evt) {
	//init_debug();
	try{
		evt = new Evt(evt);
		dragbox = evt.source;
		setOpacity(dragbox,.7);
		deltaX = evt.x - getX(dragbox);
		deltaY = evt.y - getY(dragbox);
		Evt.addEventListener(document,"mousemove",dragMove,false);
		Evt.addEventListener(document,"mouseup",dragRelease,false);
		evt.consume();
		dragging = true;
	}
	catch(e){
		alert(e);
	}
}

function dragMove(evt) {
	if(dragbox != null){
		var evt = new Evt(evt);
		setX(dragbox,evt.x - deltaX);
		setY(dragbox,evt.y - deltaY);
		evt.consume();
	}
}

function dragRelease(evt) {
	if(dragbox != null){
		evt = new Evt(evt);
		dragbox = evt.source;
		setOpacity(dragbox, 1);
		Evt.removeEventListener(document,"mousemove",dragMove,false);
		Evt.removeEventListener(document,"mouseup",dragRelease,false);
		//if (droppedOnDropBox(evt)) {
			//dragBoxDropped(evt);
		//}
		dragbox = null;
	}
}

function droppedOnDropBox(evt) {
	var dropbox = document.getElementById("dropbox ");
	var x = getX(dropbox);
	var y = getY(dropbox);
	var width = getWidth(dropbox);
	var height = getHeight(dropbox);
	return	evt.x > x &&
		evt.y > y &&
		evt.x < x + width &&
		evt.y < y + height;
}

function dragBoxDropped(evt) {
	client.onreadystatechange = callback;
	client.open("get","server.php",true);
	client.send(null);
}

function callback() {
	if (client.readyState == 4) {
		if (client.status == 200) {
			alert(client.responseText);
			createClient();
		}
		else {
			alert("Sorry, there seems to be a problem retrieving the response:\n" +
			client.statusText);
			createClient();
		}
	}
}





























