var hide_str = 'hide';
var show_str = 'show';
var move_flag = false;

function universalAttacher(element, event, callback) {
	if (element.addEventListener) {
		/* gecko */
		element.addEventListener(event,callback,false);
	} else if (element.attachEvent) {
		/* ie */
		element.attachEvent("on"+event,callback);
	} else {
		/* ??? */
		element["on"+event] = callback;
	}
	
}

function universalSource(event) {
	return (event.target ? event.target : event.srcElement);
}

function float_mousemove(element,event) {
	if (move_flag == element.id) {
		var new_x = parseInt(element.offsetLeft) + (event.clientX - element.getAttribute("mouse_x"));
		var new_y = parseInt(element.offsetTop) + (event.clientY - element.getAttribute("mouse_y"));
		element.style.left = new_x+"px";
		element.style.top = new_y+"px";
		element.setAttribute("mouse_x",event.clientX);
		element.setAttribute("mouse_y",event.clientY);
	}
}

function float_mousedown(element,event) {
	element.setAttribute("mouse_x",event.clientX);
	element.setAttribute("mouse_y",event.clientY);
	move_flag = element.id;
}

function float_toggle(element) {
	var divs = element.getElementsByTagName("div");
	var link = document.getElementById(element.id+"_link");

	var div = divs[1];
	if (div.style.display == "none") {
		div.style.display = "block";
		link.innerHTML = hide_str;
	} else {
		div.style.display = "none";
		link.innerHTML = show_str;
	}
}

function real_float(id, x, y, hide) {
	/*
		expected element structure:
		<div id="id">
			<div>
				<!-- something.. -->
				<!-- PLACE FOR SHOW/HIDE -->
			</div>
			<div>
				<!-- content to be shown/hidden -->
			</div>
		</div>
	*/
	var element = document.getElementById(id);
	if (!element) return;
	element.style.position = (element.attachEvent ? "absolute" : "fixed");
	if (x > 0) {
		element.style.left = x+"px";
	} else {
		element.style.right = -x + "px";
	}
	if (y > 0) {
		element.style.top = y + "px";
	} else {
		element.style.bottom = -y + "px";
	}
	
	var span = document.createElement("span");
	span.innerHTML = '[<a id="'+id+'_link" href="#">'+hide_str+'</a>]';
	
	var divs = element.getElementsByTagName("div");
	divs[0].appendChild(span);
	var link = document.getElementById(id+"_link");
	
	var funcMove = function(event) {
		float_mousemove(element,event);
	}
	var funcDown = function(event) {
		float_mousedown(element,event);
	}
	var funcUp = function() {
		move_flag = false;
	}
	var funcToggle = function() {
		float_toggle(element);
	}
	universalAttacher(document.body,"mousemove",funcMove);
	universalAttacher(document.body,"mouseup",funcUp);
	universalAttacher(element,"mousedown",funcDown);
	universalAttacher(link,"click",funcToggle);
	if (hide) funcToggle();
}

