function MapObject(win) {
	this.Element = win.document.getElementById("MapCtrl");
	this.Src = null;
	this.OverViewCX = null;
	this.OverViewCY = null;
	this.OverViewSC = null;
	this.UrlParams = "";

	if (this.Element != null) {
		this.Src = this.Element.getAttribute("MapUrl");
		if (this.Src == null || this.Src == "") this.Src = "";
		this.OverViewCX = this.Element.getAttribute("OverViewCX");
		if (this.OverViewCX == null || this.OverViewCX == "") this.OverViewCX = ""; else this.UrlParams = AddUrlParam(this.UrlParams, "CX", this.OverViewCX);
		this.OverViewCY = this.Element.getAttribute("OverViewCY");
		if (this.OverViewCY == null || this.OverViewCY == "") this.OverViewCY = ""; else this.UrlParams = AddUrlParam(this.UrlParams, "CY", this.OverViewCY);
		this.OverViewSC = this.Element.getAttribute("OverViewSC");
		if (this.OverViewSC == null || this.OverViewSC == "") this.OverViewSC = ""; else this.UrlParams = AddUrlParam(this.UrlParams, "SC", this.OverViewSC);
	}
//alert("this.Src: " + this.Src);
//alert("this.OverViewCX: " + this.Element.getAttribute("OverViewCX"));
//alert("this.Adrsym: " + this.Element.getAttribute("AdrSym"));
}

function ImgSizeObject (el) {
	this.IW = "";
	this.IH = "";
	this.UrlParams = "";
	
	if (el != null) {
		this.IW = el.getAttribute("width");
		if (this.IW == null || this.IW == "") this.IW = ""; else this.UrlParams = AddUrlParam(this.UrlParams, "IW", this.IW);
		this.IH = el.getAttribute("height");
		if (this.IH == null || this.IH == "") this.IH = ""; else this.UrlParams = AddUrlParam(this.UrlParams, "IH", this.IH);
	}
	//alert("UrlParams=" + this.UrlParams);
}

function ImgCenterObject(el) {
	this.CX = "";
	this.CY = "";
	this.UrlParams = "";
	
	if (el != null) {
		this.CX = el.getAttribute("CX");
		if (this.CX == null || this.CX == "") this.CX = ""; else this.UrlParams = AddUrlParam(this.UrlParams, "CX", this.CX);
		this.CY = el.getAttribute("CY");
		if (this.CY == null || this.CY == "") this.CY = ""; else this.UrlParams = AddUrlParam(this.UrlParams, "CY", this.CY);
	}
	//alert("UrlParams=" + this.UrlParams);
}

function ImgRectObject(el) {
	this.LBO = "";
	this.RBO = "";
	this.TBO = "";
	this.BBO = "";
	this.UrlParams = "";

	if (el != null) {
		this.LBO = el.getAttribute("LBO");
		if (this.LBO == null || this.LBO == "") this.LBO = ""; else this.UrlParams = AddUrlParam(this.UrlParams, "LBO", this.LBO);
		this.RBO = el.getAttribute("RBO");
		if (this.RBO == null || this.RBO == "") this.RBO = ""; else this.UrlParams = AddUrlParam(this.UrlParams, "RBO", this.RBO);
		this.TBO = el.getAttribute("TBO");
		if (this.TBO == null || this.TBO == "") this.TBO = ""; else this.UrlParams = AddUrlParam(this.UrlParams, "TBO", this.TBO);
		this.BBO = el.getAttribute("BBO");
		if (this.BBO == null || this.BBO == "") this.BBO = ""; else this.UrlParams = AddUrlParam(this.UrlParams, "BBO", this.BBO);
	}
	//alert("UrlParams=" + this.UrlParams);
}

function ImgObject(el) {
	this.Rect = new ImgRectObject(el);
	this.Center = new ImgCenterObject(el);
	this.SY = "";
	this.UrlParams = "";

	if (el != null) {
		this.SY = el.getAttribute("SY");
		if (this.SY == null || this.SY == "") this.SY = ""; else this.UrlParams = AddUrlParam(this.UrlParams, "SY", this.SY);
	}
	//alert("UrlParams=" + this.UrlParams);
}

function AddUrlParam(Url, Name, Value) {
	if (Url == null || Url == "")
		return Name + "=" + Value;
	else
		return Url + "&" + Name + "=" + Value;
}

function SetDataMode() {
	try {
		var el = window.document.getElementById("MapContainer");
		el.className = "MapData";

		//el = window.document.getElementById("MapIFrame");
		//el.scrolling = "yes";	//Greier ikke å sette en scrolling verdi fra javascript. Verdien som er satt på IFRAME elementet når det rendres er det som blir gjeldende
		window.frames("MapIFrame").document.body.scroll = "auto";
		
	} catch(e){alert ("Feil i Map.js:SetDataMode funksjon:\n" + e.description);}
}

function SetMapMode(win) {
	try {
		var el = win.document.getElementById("MapContainer");
		el.className = "MapGUI";
		
		//el = win.document.getElementById("MapIFrame");
		//el.scrolling = "no";	//Greier ikke å sette en scrolling verdi fra javascript. Verdien som er satt på IFRAME elementet når det rendres er det som blir gjeldende
		//win.frames("MapIFrame").document.body.scroll = "auto";
		
	} catch(e){alert ("Feil i Map.js:SetMapMode funksjon:\n" + e.description);}
}

function ShowMap() {
	try {
		var win = window;
		for (i=0; i<arguments.length; i++) {
			if (arguments[i] == "WindowParent") {
				win = window.parent;
				break;
			}
		}
		var objMap = new MapObject(win);
		for (i=0; i<arguments.length; i++) {
			if (i == 0) objMap.Src += "?" + arguments[i];
			else objMap.Src += "&" + arguments[i];
		}
//alert("ShowMap: " + objMap.Src);
		SetMapMode(win)
		win.document.getElementById("MapIFrame").src = objMap.Src + "&Dummy=" + DateDummy();
		
	} catch(e){alert ("Feil i Map.js:ShowMap funksjon:\n" + e.description);}
}

function Zoom(Factor) {
	try {
		var objMap = new MapObject(window);
		if (objMap == null) return;

		var IframeWin = window.frames("MapIFrame");
		if (IframeWin == null) return;
		var ImgEl = IframeWin.document.getElementById("Map");
		if (ImgEl == null) return;
		var objImg = new ImgObject(ImgEl);
		if (objImg.Rect.UrlParams == "") return;

		var objImgSize = new ImgSizeObject(window.document.getElementById("MapIFrame"));
		if (objImgSize.UrlParams == "") return

		objMap.Src = objMap.Src + "?OP=1&ZoomFactor=" + Factor + "&SY=" + objImg.SY + "&" + objImg.Center.UrlParams + "&" + objImg.Rect.UrlParams + "&" + objImgSize.UrlParams + "&Dummy=" + DateDummy();
//		objMap.Src = objMap.Src + "?OP=0&ZoomFactor=" + Factor + "&SY=" + objImg.SY + "&" + objImg.Center.UrlParams + "&" + objImg.Rect.UrlParams + "&" + objImgSize.UrlParams + "&Dummy=" + DateDummy();
//alert("Zoom: " + objMap.Src);
		SetMapMode(window)
		window.document.getElementById('MapIFrame').src = objMap.Src;

	} catch(e){alert ("Feil i Map.js:Zoom funksjon:\n" + e.description);}
}

function SetOverViewMap(){
	try {
		var objMap = new MapObject(window);
		if (objMap == null) return;
		if (objMap.UrlParams == "") return;

		var objImgSize = new ImgSizeObject(window.document.getElementById("MapIFrame"));
		if (objImgSize.UrlParams == "") return
		objMap.Src = objMap.Src + "?OP=0&" + objMap.UrlParams + "&" + objImgSize.UrlParams + "&Dummy=" + DateDummy();
		SetMapMode(window)
		window.document.getElementById('MapIFrame').src = objMap.Src;

	} catch(e){
alert(e)	;
	}
}

function MoveMap(Direction){
	try {
		var objMap = new MapObject(window);
		if (objMap == null) return;

		var IframeWin = window.frames("MapIFrame");
		if (IframeWin == null) return;
		var ImgEl = IframeWin.document.getElementById("Map");
		if (ImgEl == null) return;
		var objImg = new ImgObject(ImgEl);
		if (objImg.Rect.UrlParams == "") return;

		var nLBO = parseFloat(objImg.Rect.LBO);
		var nRBO = parseFloat(objImg.Rect.RBO);
		var nTBO = parseFloat(objImg.Rect.TBO);
		var nBBO = parseFloat(objImg.Rect.BBO);
		var nDiffX = (nRBO - nLBO) / 3;
		var nDiffY = (nTBO - nBBO) / 3;
		
		switch (Direction.toUpperCase()) {
			case "NW":
				objImg.Rect.LBO = (nLBO - nDiffX).toString();
				objImg.Rect.RBO = (nRBO - nDiffX).toString();
				objImg.Rect.TBO = (nTBO + nDiffY).toString();
				objImg.Rect.BBO = (nBBO + nDiffY).toString();
				break;
			case "N":
				objImg.Rect.TBO = (nTBO + nDiffY).toString();
				objImg.Rect.BBO = (nBBO + nDiffY).toString();
				break;
			case "NE":
				objImg.Rect.LBO = (nLBO + nDiffX).toString();
				objImg.Rect.RBO = (nRBO + nDiffX).toString();
				objImg.Rect.TBO = (nTBO + nDiffY).toString();
				objImg.Rect.BBO = (nBBO + nDiffY).toString();
				break;
			case "W":
				objImg.Rect.LBO = (nLBO - nDiffX).toString();
				objImg.Rect.RBO = (nRBO - nDiffX).toString();
				break;
			case "E":
				objImg.Rect.LBO = (nLBO + nDiffX).toString();
				objImg.Rect.RBO = (nRBO + nDiffX).toString();
				break;
			case "SW":
				objImg.Rect.LBO = (nLBO - nDiffX).toString();
				objImg.Rect.RBO = (nRBO - nDiffX).toString();
				objImg.Rect.TBO = (nTBO - nDiffY).toString();
				objImg.Rect.BBO = (nBBO - nDiffY).toString();
				break;
			case "S":
				objImg.Rect.TBO = (nTBO - nDiffY).toString();
				objImg.Rect.BBO = (nBBO - nDiffY).toString();
				break;
			case "SE":
				objImg.Rect.LBO = (nLBO + nDiffX).toString();
				objImg.Rect.RBO = (nRBO + nDiffX).toString();
				objImg.Rect.TBO = (nTBO - nDiffY).toString();
				objImg.Rect.BBO = (nBBO - nDiffY).toString();
				break;
		}
	
		var objImgSize = new ImgSizeObject(window.document.getElementById("MapIFrame"));
		if (objImgSize.UrlParams == "") return

		objMap.Src = objMap.Src + "?OP=1" + "&SY=" + objImg.SY + "&LBO=" + objImg.Rect.LBO + "&RBO=" + objImg.Rect.RBO + "&TBO=" + objImg.Rect.TBO + "&BBO=" + objImg.Rect.BBO + "&" + objImgSize.UrlParams + "&Dummy=" + DateDummy();
//alert("MoveMap: " + objMap.Src);
		SetMapMode(window)
		window.document.getElementById('MapIFrame').src = objMap.Src;

	} catch(e){}
}

function DateDummy(){
	//Funskjonen lager en unik verdi. Benyttes på url'en til å sette ny src på iframe.
	//Uten nye unik url kjører ikke map.aspx, men cachet side benyttes.
  var d, s = "";
  d = new Date();
  s += d.getYear();
  s += d.getDate();
  s += d.getMonth();
  s += d.getHours();
  s += d.getMinutes();
  s += d.getSeconds();
  return(s);
}

var m_oMapBoundaries = null;
var m_oMapCurrPoint = null;
var m_oMapZoom = null;
function ZoomRect(StartX, StartY) {
	this.StartX = StartX;
	this.StartY = StartY;
	this.StopX = StartX;
	this.StopY = StartY;
	this.Rect = window.document.getElementById("ZoomRect");
}

function MouseDown(el) {
	m_oMapZoom = new ZoomRect(event.clientX, event.clientY);
	m_oMapZoom.Rect.style.left = event.clientX;
	m_oMapZoom.Rect.style.top = event.clientY;
	m_oMapZoom.Rect.style.width = 1;
	m_oMapZoom.Rect.style.height = 1;
	m_oMapZoom.Rect.style.visibility = "visible";
}
function MouseMove(el) {
	if (el == null) return;
	if (m_oMapBoundaries == null) {
		//alert("initierer m_oMapBoundaries");
		m_oMapBoundaries = new ImgRectObject(null);
		m_oMapCurrPoint = new ImgCenterObject(null);
		m_oMapBoundaries.LBO = parseFloat(el.getAttribute("LBO"));
		m_oMapBoundaries.RBO = parseFloat(el.getAttribute("RBO"));
		m_oMapBoundaries.TBO = parseFloat(el.getAttribute("TBO"));
		m_oMapBoundaries.BBO = parseFloat(el.getAttribute("BBO"));
	}

	m_oMapCurrPoint.CX = m_oMapBoundaries.LBO + ((m_oMapBoundaries.RBO - m_oMapBoundaries.LBO) * (event.clientX / el.offsetWidth));
	m_oMapCurrPoint.CY = m_oMapBoundaries.TBO - ((m_oMapBoundaries.TBO - m_oMapBoundaries.BBO) * (event.clientY / el.offsetHeight));
	//window.status = '(' + m_oMapCurrPoint.CX.toFixed(5) + ', ' + m_oMapCurrPoint.CY.toFixed(5) + " - LBO=" + m_oMapBoundaries.LBO.toFixed(5) + ", RBO=" + m_oMapBoundaries.RBO.toFixed(5) + ", BBO=" + m_oMapBoundaries.BBO.toFixed(5) + ", TBO=" + m_oMapBoundaries.TBO.toFixed(5) + " - X=" + event.clientX + ", Y=" + event.clientY + " - W=" + el.offsetWidth + ", H=" + el.offsetHeight + ')';
	window.status = '(' + m_oMapCurrPoint.CX.toFixed(5) + ', ' + m_oMapCurrPoint.CY.toFixed(5) + ')';

	if (event.button == 1 && m_oMapZoom.Rect != null) {
		var x = event.clientX - m_oMapZoom.StartX;
		var y = event.clientY - m_oMapZoom.StartY;
		m_oMapZoom.Rect.style.width = Math.abs(x);
		if (x < 0) m_oMapZoom.Rect.style.left = m_oMapZoom.StartX - Math.abs(x);
		m_oMapZoom.Rect.style.height = Math.abs(y);
		if (y < 0)  m_oMapZoom.Rect.style.top = m_oMapZoom.StartY - Math.abs(y);
	}
}

var m_MapPosition = null;
function MouseUp(el) {
	//alert(event.ctrlKey);
	if (event.ctrlKey) {
		if (window.parent.opener.m_MapPosition != null) window.parent.opener.m_MapPosition.value = m_oMapCurrPoint.CX.toFixed(5) + ',' + m_oMapCurrPoint.CY.toFixed(5);
		window.parent.opener.m_MapPosition = null;
		window.parent.close();
	}

	m_oMapZoom.StopX = event.clientX;
	m_oMapZoom.StopY = event.clientY;
	//alert("m_oMapZoom.StartX=" + m_oMapZoom.StartX + "\nm_oMapZoom.StopX=" + m_oMapZoom.StopX + "\nm_oMapZoom.StartY=" + m_oMapZoom.StartY + "\nm_oMapZoom.StopY=" + m_oMapZoom.StopY)
	if ((Math.abs(m_oMapZoom.StartX - m_oMapZoom.StopX) < 10) || (Math.abs(m_oMapZoom.StartY - m_oMapZoom.StopY) < 10)) {
		m_oMapZoom.Rect.style.visibility = "hidden";
		return;
	} else {
		var sLBO = "";
		var sRBO = "";
		if (m_oMapZoom.StartX < m_oMapZoom.StopX) {
			sLBO = 'LBO=' + (m_oMapBoundaries.LBO + ((m_oMapBoundaries.RBO - m_oMapBoundaries.LBO) * (m_oMapZoom.StartX / el.offsetWidth))).toString();
			sRBO = 'RBO=' + (m_oMapBoundaries.LBO + ((m_oMapBoundaries.RBO - m_oMapBoundaries.LBO) * (m_oMapZoom.StopX / el.offsetWidth))).toString();
		} else {
			sRBO = 'RBO=' + (m_oMapBoundaries.LBO + ((m_oMapBoundaries.RBO - m_oMapBoundaries.LBO) * (m_oMapZoom.StartX / el.offsetWidth))).toString();
			sLBO = 'LBO=' + (m_oMapBoundaries.LBO + ((m_oMapBoundaries.RBO - m_oMapBoundaries.LBO) * (m_oMapZoom.StopX / el.offsetWidth))).toString();
		}
		var sTBO = "";
		var sTBO = "";
		if (m_oMapZoom.StartY < m_oMapZoom.StopY) {
			sTBO = 'TBO=' + (m_oMapBoundaries.TBO - ((m_oMapBoundaries.TBO - m_oMapBoundaries.BBO) * (m_oMapZoom.StartY / el.offsetHeight))).toString();
			sBBO = 'BBO=' + (m_oMapBoundaries.TBO - ((m_oMapBoundaries.TBO - m_oMapBoundaries.BBO) * (m_oMapZoom.StopY / el.offsetHeight))).toString();
		} else {
			sBBO = 'BBO=' + (m_oMapBoundaries.TBO - ((m_oMapBoundaries.TBO - m_oMapBoundaries.BBO) * (m_oMapZoom.StartY / el.offsetHeight))).toString();
			sTBO = 'TBO=' + (m_oMapBoundaries.TBO - ((m_oMapBoundaries.TBO - m_oMapBoundaries.BBO) * (m_oMapZoom.StopY / el.offsetHeight))).toString();
		}
		//alert("sLBO=" + sLBO + "\nsRBO=" + sRBO + "\nsBBO=" + sBBO + "\nsTBO=" + sTBO);
		
		var IframeWin = window.parent.frames("MapIFrame");
		if (IframeWin == null) return;
		var ImgEl = IframeWin.document.getElementById("Map");
		if (ImgEl == null) return;
		var sSY = ImgEl.getAttribute("SY");
		if (sSY == null || sSY == "") sSY = ""; else sSY = "SY=" + sSY;
		//alert("sSY=" + sSY);

		var sIH = "";
		var sIW = ""
		var objImgSize = new ImgSizeObject(window.parent.document.getElementById("MapIFrame"));
		if (objImgSize.UrlParams != "") {
			sIH = "IH=" + objImgSize.IH;
			sIW = "IW=" + objImgSize.IW;
		}
		//alert("sIH=" + sIH + "\nsIW=" + sIW);

		ShowMap('WindowParent', sLBO, sRBO, sBBO, sTBO, sIW, sIH, 'OP=1', sSY);
	}
}

function ChangeScale(el) {
	try {
		if (el.selectedIndex == 0) return;
		
		var IframeWin = window.frames("MapIFrame");
		//alert(IframeWin.document.body.innerHTML);
		if (IframeWin == null) {
			alert("Kan ikke sette ny målestokk.\nFinner ingen IFrame med navn: MapIFrame");
			return;
		}
		var ImgEl = IframeWin.document.getElementById("Map");
		if (ImgEl == null) {
			alert("Kan ikke sette ny målestokk.\nFinner ingen IMG element med navn: Map");
			return;
		}
		var objImg = new ImgCenterObject(ImgEl);
		if (objImg.UrlParams == "") {
			alert("Kan ikke zoome i kartet.\nCX eller CY er ikke satt på IMG element");
			return;
		}
		var objImgSize = new ImgSizeObject(ImgEl);

		var sValue = el.options[el.selectedIndex].value;
		var objMap = new MapObject(window);
		objMap.Src = objMap.Src + "?OP=0&" + objImg.UrlParams + "&SC=" + sValue + "&Dummy=" + DateDummy();
		if (objImgSize.UrlParams != "") objMap.Src = objMap.Src + "&" + objImgSize.UrlParams
//alert("ChangeScale: " + objMap.Src);
		window.document.getElementById('MapIFrame').src = objMap.Src;

	} catch(e){alert ("Feil i Map.js:ChangeScale funksjon:\n" + e.description);}
}

