var dragObject;
var posDifference;

function showMap (event) {
	var map = new YMap(document.getElementById('mapDiv'));
	map.addZoomLong();
	map.setMapType(YAHOO_MAP_REG);
	
	var dojoPoint = new YGeoPoint(44.420549, 26.139898);
	map.drawZoomAndCenter(dojoPoint, 2);
	var dojoMarker = new YMarker(dojoPoint);
	dojoMarker.addAutoExpand("Mokushozen-Ji - Complexului 2bis");
	
	map.addOverlay(dojoMarker);
	
	document.getElementById("mapDivContainer").style.visibility = "visible";
	
	event = event || window.event;
	var mseX = event.clientX;
	var mseY = event.clientY;
	
	document.getElementById("mapDivContainer").style.top = (mseY + 10) + "px";
	document.getElementById("mapDivContainer").style.left = (mseX - 250) + "px";
}

function hideMap() {
	document.getElementById("mapDivContainer").style.visibility = "hidden";
	
	clearElement (document.getElementById("mapDiv"));
}

function clearElement (element) {
	if (element != null) {
		while (element.hasChildNodes()) {
			element.removeChild(element.firstChild);
		}
	}
}

function startDragMap (div, event) {
	event = event || window.event;
	
	if (event.button != 2) {
		var mseX = event.clientX;
		var mseY = event.clientY;
		var position = getElementPosition(div.parentNode);
		posDifference = {dx: mseX - position.x, dy: mseY - position.y};
		
		dragObject = div;
		document.onmousemove = dragMap;
		document.onmouseup = dragMapEnd;
	}
}


function dragMap (event) {
	if (dragObject != null) {
		event = event || window.event;
		var mseX = event.clientX;
		var mseY = event.clientY;
		
		dragObject.parentNode.style.top = mseY - posDifference.dy + "px";
		dragObject.parentNode.style.left = mseX - posDifference.dx + "px";
		
		return false;
	}
}

function dragMapEnd () {
	if (dragObject != null) {
		dragObject.style.cursor = "move";
	}
	
	dragObject = null;
	document.onmousemove = null;
	document.onmouseup = null;
}

function getElementPosition (object) {
	var left = 0;
	var top = 0;
	
	while (object.offsetParent){
		left += object.offsetLeft +
				(object.currentStyle?(parseInt(object.currentStyle.borderLeftWidth)).NaN0():0);
		top += object.offsetTop  +
				(object.currentStyle?(parseInt(object.currentStyle.borderTopWidth)).NaN0():0);
		object = object.offsetParent;
	}


	left += object.offsetLeft + (object.currentStyle?(parseInt(object.currentStyle.borderLeftWidth)).NaN0():0);
	top  += object.offsetTop  + (object.currentStyle?(parseInt(object.currentStyle.borderTopWidth)).NaN0():0);

	return {x:left, y:top};
}

Number.prototype.NaN0 = function() {
	return isNaN (this) ? 0 : this;
}