function debug(message) {
	debuggerId = 'debuggerr';
	if (!document.getElementById(debuggerId)) {
		buglog = document.createElement('div');
		buglog.id = debuggerId;

		buglog.style.position = 'absolute';
		buglog.style.top = '15px';
		buglog.style.right = '15px';
		buglog.style.backgroundColor = 'lightyellow';
		buglog.style.color = 'black';
		buglog.style.border = '1px solid black';
		buglog.style.paddingRight = '20px';
		buglog.style.opacity = '0.8';
		
		document.body.appendChild(buglog);

		drglog = new DebugDragger('drglog',buglog);
		drglog.SetEvents();
	} else {
		buglog = document.getElementById(debuggerId);
	}

	if (buglog.childNodes.length == 0) {
		logtitle = getNewElement(buglog.id, 'p');
		logtitle.style.textAlign='right';
		logtitle.style.marginLeft='15px';
		logtitle.style.borderBottom = '1px dotted black';
		logtitle.innerHTML = '<strong style=\'cursor:default\'>Activity Log</strong>';
		ol = getNewElement(buglog.id, 'ol');
		ol.onmouseover = function() {
			drglog.draggable = false;
		}
		ol.onmouseout = function() {
			drglog.draggable = true;
		}
		clearbutton = getNewElement(buglog.id, 'p');
		clearbutton.style.textAlign='right';
		//clearbutton.innerHTML += '<button onclick="document.getElementById(buglog.id).style.display=\'none\';return false;">Hide</button>\n';
		clearbutton.innerHTML += '<button onclick="document.getElementById(buglog.id).parentNode.removeChild(document.getElementById(buglog.id));return false;">Close</button>';
	} else {
		ol = buglog.childNodes[1];
	}

	var li = getNewElement(ol.id, 'li');
	li.style.whiteSpace = 'pre';
	document.getElementById(li.id).appendChild(document.createTextNode(message));
	buglog.style.display = 'block';
}

function getNewElement(parentId, eltag) {
	var parentEl = document.getElementById(parentId);
	var childEl = document.createElement(eltag);
	childEl.id = parentEl.id + '-child'+ parentEl.childNodes.length;
	parentEl.appendChild(childEl);
	return childEl;
}


/* Start Dragging Code */
function DebugDragger(id,target,handle) {	
	this.id = id;
	this.target = target; //object to drag
	handle = handle ? handle : target; //if no handle, entire object
	this.handle = handle; //object child - to drag
	
	this.dragging = false;
	this.clickable = true;
	
	this.draggable = true;
}

DebugDragger.prototype.SetEvents = function () {

	var me = this;
	
	this.handle.ondrag = function() { return false; };
	this.handle.onselectstart = function() { return false; };
	
	this.handle.onmousedown = function (evt) {		
		evt = evt ? evt : window.event;

		me.MouseDownX = evt.pageX ? evt.pageX : evt.clientX;
		me.MouseDownY = evt.pageY ? evt.pageY : evt.clientY;
		
		if (!me.draggable) return;

		me.dragging = true;
			
		me.MouseOffsetX = me.MouseDownX - me.FindPosX();
		me.MouseOffsetY = me.MouseDownY - me.FindPosY();
			
		document.onmousemove = function (evt) {
			if (me.dragging) {
				evt = evt ? evt : window.event;
					
				me.MouseX = evt.pageX ? evt.pageX : evt.clientX;
				me.MouseY = evt.pageY ? evt.pageY : evt.clientY;
					
				var x = me.MouseX - me.MouseOffsetX;
				var y = me.MouseY - me.MouseOffsetY;
				
				me.target.style.right = '';
				me.target.style.bottom = '';

				me.target.style.left = x + 'px';
				me.target.style.top = y + 'px';
			}
			return false;
		};
			
		return false;
	};
	this.handle.onmouseup = function() {
		document.onmousemove = null;
		me.dragging = false;
		
		if (me.MouseUp) { //function set
			me.MouseUp();
		}

		return false;
	};
};

DebugDragger.prototype.ClickAction = function(inFunc) {
	var me = this; //passed as object to function set
	if (!inFunc) { //passed in null
		this.handle.onclick = null;
	} else {
		this.handle.onclick = function(evt) {
			evt = evt ? evt : window.event;
			if(me.RegisterClick(evt)) {
				inFunc(me);
			}
		};
	}
};

DebugDragger.prototype.MouseOver = function(inFunc) {
	var me = this; //passed as object to function set
	this.target.onmouseover = function() {
		inFunc(me);
		
		return;
	};
};

DebugDragger.prototype.MouseOut = function(inFunc) {
	var me = this; //passed as object to function set
	this.target.onmouseout = function() {
		inFunc(me);
		
		return;
	};
};

DebugDragger.prototype.AddMouseUp = function(inFunc) { //not set as a handler
	var me = this; //passed as object to function set
	var tmp = this.MouseUp;
	this.MouseUp = function (tmp) {
		if (tmp) {
			tmp();
		}
		inFunc(me);
	}
	//inFunc(this); //passed as object to function set
	
	return;
};

DebugDragger.prototype.RegisterClick = function (evt) {
	if (!this.clickable) {
		return false;
	} else {
		this.MouseUpX = evt.pageX ? evt.pageX : evt.clientX;
		this.MouseUpY = evt.pageY ? evt.pageY : evt.clientY;
		
		var x = this.MouseDownX - this.MouseUpX;
		var y = this.MouseDownY - this.MouseUpY;
		
		if (Math.abs(x) < 3 && Math.abs(y) < 3) {
			this.dragging = false;
			return true;
		} else {
			return false;
		}
	}
};

/* Start Div Position Code */	
DebugDragger.prototype.FindPosX = function () {
	var curleft = 0;
	var obj = this.target;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
};

DebugDragger.prototype.FindPosY = function () {
	var curtop = 0;
	var obj = this.target;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
};
/* End Div Position Code */	
/* End Dragging Code */
