var imageElement;
var ortoimageElement;
var imagepoiElement;
var imgOffsetTop;
var imgOffsetLeft;
var scrollOffsetTop;
var scrollOffsetLeft;
var parentOffsetTop;
var parentOffsetLeft;

var rubberBand = null;
var startX;
var startY;
var endX;
var endY;

var oldMouseMove = null;
var oldMouseUp = null;
var startTime = null;

var hasrubber;
var hasclick;
var rubberbandmagnify = false;

var mapdragtype;

function myGetElementById(id)
{
	if (!document.all && document.getElementById)
	{
		return document.getElementById(id);
	}
	else if (document.all)
	{
		return document.all[id];
	}
	return null;
}
function getDragType(id)
{
	var dth = myGetElementById("DragTypeHidden");
	if(dth != null)	return dth.value;
	else
	{
	    if (mapdragtype != 0 && mapdragtype != 1)
        {
	        var dragattr = myGetElementById(id).getAttribute("DRAGTYPE");	
	        if (dragattr == "RubberBandZoom") mapdragtype = 0;
	        else mapdragtype = 1;
        }
        return mapdragtype;	
	}
}
function startHasClick(ev)
{
	var e = ev;
	if (!e) e = window.event;
	if (e.button == 2) return true;
	hasrubber = false;
	hasclick = true;
	return startRubber(e); 
}
function startHasRubber(ev)
{
	var e = ev;
	if (!e) e = window.event;
	if (e.button == 2) return true;
	hasrubber = true;
	hasclick = false;
	return startRubber(e); 
}
function startHasClickHasRubber(ev)
{
	var e = ev;
	if (!e) e = window.event;
	if (e.button == 2) return true;
	if (hasrubber == true) return true;
	hasrubber = true;
	hasclick = true;
	return startRubber(e); 
}
function startRubber(e)
{
	var targ;
	if (e.target) targ = e.target;
	else targ = e.srcElement;
	if (targ.tagName!="IMG") return true;
	imgOffsetTop = 0;
	imgOffsetLeft = 0;
	parentOffsetTop = 0;
	parentOffsetLeft = 0;
	scrollOffsetTop = document.body.scrollTop;
	scrollOffsetLeft = document.body.scrollLeft;
	imageElement = targ;
	ortoimageElement = document.getElementById("orto" + imageElement.getAttribute("id"));
	imagepoiElement = document.getElementById(imageElement.getAttribute("id") + "_imgpoi");
	var el = imageElement;	

	// The rubberband will be positioned absolutely.
	// Must record the offset of the first absolutely positioned element.
	while (el!=null)
	{
		imgOffsetTop += el.offsetTop;
		imgOffsetLeft += el.offsetLeft;
		if (el.style.position=='absolute' && el!=imageElement)
		{
			parentOffsetTop += el.offsetTop;
			parentOffsetLeft += el.offsetLeft;
		}
		if (el.tagName.toLowerCase()!="body") el = el.offsetParent;
		else break;
	}

	// Save in page for later use. Convert to document coordinates
	startY = e.clientY + scrollOffsetTop; // + parentOffsetTop;
	startX = e.clientX + scrollOffsetLeft; //  + parentOffsetLeft;
	endX = startX;
	endY = startY;

	var dt = getDragType(imageElement.id);
	if (dt == 0)
	{
		imageElement.style.cursor = "crosshair";
		rubberBand = myGetElementById(imageElement.id + '_rubberBand');
		rubberBand.style.width = 0  + 'px';
		rubberBand.style.height = 0 + 'px';
		rubberBand.style.left = (startX - imgOffsetLeft) + 'px';
		rubberBand.style.top = (startY - imgOffsetTop) + 'px';
		if (hasrubber) rubberBand.style.visibility = 'visible';
	}
	else if (dt == 1)
	{
		imageElement.style.position = "absolute";
		imageElement.style.cursor = "pointer";
		if(ortoimageElement != null){
		    ortoimageElement.style.position = "absolute";
		    ortoimageElement.style.cursor = "pointer";    
		}
	}
	oldMouseMove = document.onmousemove;
	oldMouseUp = document.onmouseup;	
	document.onmouseup = stopRubber;
	document.onmousemove = moveRubber;
	startTime = new Date();
	if (e.preventDefault) e.preventDefault();
}
function moveRubber(ev)
{
	var e = ev;
	if (!e) e = window.event;
	
	// Use document coordinates
	var newY = e.clientY + scrollOffsetTop; // + parentOffsetTop;
	var newX = e.clientX + scrollOffsetLeft; // + parentOffsetLeft;
	var minY = imgOffsetTop; // + parentOffsetTop;
	var minX = imgOffsetLeft; // + parentOffsetLeft;
	var maxY = minY + imageElement.height;
	var maxX = minX + imageElement.width;
	if (newX < minX) newX = minX;
	if (newX > maxX) newX = maxX;
	if (newY < minY) newY = minY;
	if (newY > maxY) newY = maxY;
	endX = newX;
	endY = newY;
	
	var dt = getDragType(imageElement.id);
	if (dt == 0)
	{
	    // Set x-position
		if (endX < startX) rubberBand.style.left = (endX - imgOffsetLeft) + 'px';
		else if (endX >= startX) rubberBand.style.left = (startX - imgOffsetLeft) + 'px';
		rubberBand.style.width = Math.abs(endX - startX) + 'px';
		// Set y-position
		if (endY < startY) rubberBand.style.top = (endY - imgOffsetTop) + 'px';
		else if (endY >= startY) rubberBand.style.top = (startY - imgOffsetTop) + 'px';
		rubberBand.style.height = Math.abs(endY - startY) + 'px';		
		
	}
	else if (dt == 1)
	{
	    var dx = endX - startX;
	    var dy = endY - startY;
		imageElement.style.left = dx + 'px';
	    imageElement.style.top = dy + 'px';
	    imageElement.style.clip = "rect(" + (-dy) + 'px' + " " + (imageElement.width - dx) + 'px' + " " + (imageElement.height - dy) + 'px' + " " + (-dx) + 'px' + ")";
	    if(ortoimageElement != null){
	        ortoimageElement.style.left = dx + 'px';
	        ortoimageElement.style.top = dy + 'px';
	        ortoimageElement.style.clip = "rect(" + (-dy) + 'px' + " " + (ortoimageElement.width - dx) + 'px' + " " + (ortoimageElement.height - dy) + 'px' + " " + (-dx) + 'px' + ")";
	    }
	    if(imagepoiElement != null){
	        imagepoiElement.style.left = dx + 'px';
	        imagepoiElement.style.top = dy + 'px';
	        //imagepoiElement.style.clip = "rect(" + (-dy) + 'px' + " " + (imagepoiElement.width - dx) + 'px' + " " + (imagepoiElement.height - dy) + 'px' + " " + (-dx) + 'px' + ")";
	    }	    
	}
	if (oldMouseMove) oldMouseMove(e);
	if (e.preventDefault) e.preventDefault();
	return false;
}
function stopRubber(ev) 
{
	var e = ev;
	if (!e) e = window.event;
	document.onmouseup = oldMouseUp;
	document.onmousemove = oldMouseMove;
	var endTime = new Date();
	var diffTime = endTime.getTime()-startTime.getTime();
	// Make coordinates relative to the map-image
	startX = startX - imgOffsetLeft - parentOffsetLeft;
	startY = startY - imgOffsetTop - parentOffsetTop;
	endX = endX - imgOffsetLeft - parentOffsetLeft;
	endY = endY - imgOffsetTop - parentOffsetTop;
	var rubberBandWidth = Math.abs(endX - startX);
	var rubberBandHeight = Math.abs(endY - startY);
	var stop = true;
	var dt = getDragType(imageElement.id);
	if ((rubberBandWidth > 10 || rubberBandHeight > 10) && hasrubber)
	{
		if (dt == 0)
		{
			// Swap coordinates if reversed
			var tmp;
			if (endX < startX)
			{
				tmp = endX;
				endX = startX;
				startX = tmp;
			}
			if (endY < startY)
			{
				tmp = endY;
				endY = startY;
				startY = tmp;
			}
	
			if (rubberbandmagnify) magnify(imageElement, startX, startY, endX, endY);
			__doPostBack(imageElement.id,"RubberBand(" + startX + "," + startY + "," + endX + "," + endY + ")" );
			rubberBand.style.visibility = 'hidden';
			rubberBand = null;
		}
		else if (dt == 1)
		{
			__doPostBack(imageElement.id,"DragPan(" + (startX - endX) + "," + (startY - endY) + ")" );
		}
	}
	else if (hasclick && diffTime<200)
	{
		__doPostBack(imageElement.id,"MapClick(" + startX + "," + startY + ")" );
	}
	else stop = false;
	if (stop)
	{
		imageElement.disabled = true;
		imageElement.style.cursor = 'wait';
		var loadControl = myGetElementById(imageElement.id+'_LoadControl');
		if (loadControl!=null)
		{
			loadControl.style.top = startY + 'px';
			loadControl.style.left = startX + 'px';
			loadControl.style.visibility = 'visible';
		}
	}
	imageElement = null;
	ortoimageElement = null;
	imagepoiElement = null;
	hasrubber = false;
	hasclick = false;
	if(rubberBand != null){
		rubberBand.style.visibility = 'hidden';
		rubberBand = null;
	}
	if (document.onmouseup) document.onmouseup(e);
	if (e.preventDefault) e.preventDefault();
}
function setmapcursor(ev)
{
	var e = ev;
	if (!e) e = window.event;
	var targ;
	if (e.target) targ = e.target;
	else targ = e.srcElement;
	if (targ.tagName!="IMG") return true;
	var dt = getDragType(targ.id);
	if (dt == 0) targ.style.cursor = "crosshair";
	else targ.style.cursor = "pointer";
}
function magnify(imel, newleft, newtop, newright, newbot)
{
	magnify2(imel, newleft, newtop, newright, newbot, imel.width, imel.height);
}

function magnify2(imel, newleft, newtop, newright, newbot, imelwidth, imelheight)
{
	var hfactor = imelwidth / (newright - newleft);
	var vfactor = imelheight / (newbot - newtop);
	var factor = (hfactor < vfactor) ? hfactor : vfactor;

	if (hfactor < vfactor)
	{
		/* Horisontal is the longest side */	
		var rb_adjusted_height = imelheight / factor;
		var tmpnewtop = (newbot + newtop - rb_adjusted_height) / 2;
		var tmpnewbot = (newbot + newtop + rb_adjusted_height) / 2;
		newtop = tmpnewtop;
		newbot = tmpnewbot;
	}
	else
	{
		/* Vertical is the longest side */
		var rb_adjusted_width = imelwidth / factor;
		var tmpnewleft = (newleft + newright - rb_adjusted_width) / 2;
		var tmpnewright = (newright + newleft + rb_adjusted_width) / 2;
		newleft = tmpnewleft;
		newright = tmpnewright;
	}
	
	imel.style.width = (imelwidth*factor) + 'px';
	imel.style.height = (imelheight*factor) + 'px';

	imel.style.left = (-newleft*factor) + 'px';
	imel.style.top = (-newtop*factor) + 'px';

    imel.style.clip = "rect(" + (newtop*factor) + 'px' + " " + (newright*factor) + 'px' + " " + (newbot*factor) + 'px' + " " + (newleft*factor) + 'px' + ")";	
    imel.style.position = "absolute";
}

var zboldmousemove;
var zboldmouseup;
var zbimageelement;

var zbimgstartop;
var zbimgstartleft;

var zbstartclienttop;
var zbstartclientleft;

var zbhorizontal;
var zbpixelsize;
var zbminlevel;
var zbmaxlevel;
var zblevelsize;

var zbstartlevel;
var zbcurlevel;
var zbstartpos;
var zbcurpos;
var zbmapimageid;
var zbmapwidth;
var zbmapheight;
var zbinitdone = false;


function zbstart(ev)
{
	var e = ev;
	if (!e) e = window.event;
	var zbimg;
	if (e.target) zbimg = e.target;
	else zbimg = e.srcElement;
	if (zbimg.tagName!="IMG") return true;
	
	if (!zbinitdone) zbinit();
	
	zbimageelement = zbimg;
	zbimgstarttop = zbimageelement.offsetTop;
	zbimgstartleft = zbimageelement.offsetLeft;
	zbstartclienttop = e.clientY;
	zbstartclientleft = e.clientX;
	zbstartpos =  (!zbhorizontal) ? (zbimgstarttop + (e.clientY - zbstartclienttop)) : (zbimgstartleft + (e.clientX - zbstartclientleft));
	zbstartlevel = zbminlevel + zblevelsize*(zbstartpos/zbpixelsize);

	zboldmousemove = document.onmousemove;
	zboldmouseup = document.onmouseup;	
	document.onmouseup = zbstop;
	document.onmousemove = zbmove;
	zbstarttime = new Date();
	if (e.preventDefault) e.preventDefault();
	return false;
}

function zbmove(ev)
{
	var e = ev;
	if (!e) e = window.event;

	if (zbhorizontal)
	{
		var newleft =  zbimgstartleft + (e.clientX - zbstartclientleft);
		if (newleft < 0) newleft = 0;
		if (newleft > zbpixelsize) newleft = zbpixelsize;
		zbcurpos = newleft;
		zbimageelement.style.left = newleft + 'px';
	}
	else
	{
		var newtop =  zbimgstarttop + (e.clientY - zbstartclienttop);
		if (newtop < 0) newtop = 0;
		if (newtop > zbpixelsize) newtop = zbpixelsize;
		zbcurpos = newtop;
		zbimageelement.style.top = newtop + 'px';
	}

	zbcurlevel = zbminlevel + zblevelsize*(zbcurpos/zbpixelsize);

	slidermagnify(myGetElementById(zbmapimageid), zbstartlevel, zbcurlevel);

	if (zboldmousemove) zboldmousemove(e);
	if (e.preventDefault) e.preventDefault();
	return false;
}

function zbstop(ev)
{
	var e = ev;
	if (!e) e = window.event;
	document.onmouseup = zboldmouseup;
	document.onmousemove = zboldmousemove;
	var endTime = new Date();
	var diffTime = endTime.getTime()-zbstarttime.getTime();

	var newpos;
	if (zbhorizontal)
	{
		newpos =  zbimgstartleft + (e.clientX - zbstartclientleft);
		if (newpos < 0) newpos = 0;
		if (newpos > zbpixelsize) newpos = zbpixelsize;
	}
	else
	{
		newpos =  zbimgstarttop + (e.clientY - zbstartclienttop);
		if (newpos < 0) newpos = 0;
		if (newpos > zbpixelsize) newpos = zbpixelsize;
	}
	var targetid = zbimageelement.id.split("_").join("$");
	
	__doPostBack(targetid,"ZoomSlide(" + newpos + ")" );
	if (document.onmouseup) document.onmouseup(e);
	if (e.preventDefault) e.preventDefault();
	return false;
}

function slidermagnify(imel, startlevel, curlevel)
{
	if (!zbmagnify) return;
	if (!imel) return;
	var factor = Math.pow(2, (curlevel - startlevel));
	if (factor > 32) factor = 32.0;
	else if (factor < 0.01) factor = 0.01;
	var newheight = zbmapheight/factor;
	var newwidth = zbmapwidth/factor;
	var newtop = (zbmapheight - newheight) / 2;
	var newleft = (zbmapwidth - newwidth) / 2;
	var newright = (zbmapwidth + newwidth) / 2;
	var newbottom = (zbmapheight + newheight) / 2;
	magnify2(imel, newleft, newtop, newright, newbottom, zbmapwidth, zbmapheight);
}
function showMapRights(url)
{
	popup = window.open(url, 'FlexiMap', 'width=565,height=490,toolbar=0,location=0,status=0,menubar=0,scrollbars=1,resizable=0');
	popup.focus();
}

function getRelativePosition(e){
    var targ = (e.target)? e.target : e.srcElement;
	if (targ.tagName!="IMG") return true;
	startY = e.clientY + document.body.scrollTop;
	startX = e.clientX + document.body.scrollLeft;
	return [startX, startY];
}



// Notify ScriptManager that this is the end of the script.
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();