  var pxlres = 144; // m/pxl
  var mapWidth = 342;
  var mapHeight = 300;
  var cx = 0;
  var cy = 0;
  var res = 0;
  var xmin = -1;
  var xmax = -1;
  var ymin = -1;
  var ymax = -1;
  var showMarker = false;
  var doSearch = true;

  function constCalc() {
   var sx1 = 14;
   var wx1 = 442176;
   var sx2 = 162;
   var wx2 = 892536;
   var sy1 = 6;
   var wy1 = 6401712;
   res = (wx2-wx1)/(sx2-sx1);
   cx = wx1-(sx1*res);
   cy = wy1-(sy1*-res);
  }

  function isNav() {
   return (navigator.appName == "Netscape")
  } 
 
  function setCenter(x,y) {
   showMarker = false;
   xmin = x-(pxlres*mapWidth/2);
   ymin = y-(pxlres*mapHeight/2);
   xmax = x+(pxlres*mapWidth/2);
   ymax = y+(pxlres*mapHeight/2);
   parent.setCx(x);
   parent.setCy(y);
   var s = worldToScreen(x,y);
   with (document.getElementById('udsnit')) {
    style.left = s[0]-8;
    style.top = s[1]-7;
   }
   setMapSrc();
  }

  function setMapSrc() {
   document.getElementById('waiting').style.visibility = 'visible';
   if (!isNav()) {
    document.getElementById('KMSMap').style.visibility = 'hidden';
   }
//   layerCount = 0;
//   var bgMap1 = 'http://kortforsyning.kms.dk/service?SERVICENAME=Havnekort&WMTVER=1.0.0&REQUEST=map&SRS=EPSG:32632&WIDTH=342&HEIGHT=300&FORMAT=JPEG&EXCEPTIONS=INIMAGE&JPEGQUALITY=80'; 
   var poiMap1 = 'oversigtskort2.aspx?REQUEST=MAP&WIDTH=342&HEIGHT=300&FORMAT=JPEG&SRS=EPSG:32632&JPEGQUALITY=78';
   var poiMap2 = '&BGCOLOR=#000000&LAYERS='; 
   var bboxStr = '&BBOX='+xmin+','+ymin+','+xmax+','+ymax;
   poiMap1 += bboxStr;
//   bgMap1 += bboxStr;
//   document.getElementById('KMSMap').src = bgMap1;
   document.getElementById('KMSMap').src = poiMap1 + poiMap2;
  }
 
  function mboc(ths) {
   panFactor = 0.5;
   var worldWidth = xmax-xmin;
   var worldHeight = ymax-ymin;
   var centerX = (worldWidth/2)+xmin;
   var centerY = (worldHeight/2)+ymin;
   panX = parseInt(worldWidth * panFactor);
   panY = parseInt(worldHeight * panFactor);
   switch (ths.id.substr(0,ths.id.length-1)) {
    case 'NE': centerX += panX; centerY += panY; break;
    case 'NW': centerX -= panX; centerY += panY; break;
    case 'N' : centerY += panY; break;
    case 'S' : centerY -= panY; break;
    case 'E' : centerX += panX; break;
    case 'W' : centerX -= panX; break;
    case 'SW': centerX -= panX; centerY -= panY; break;
    case 'SE': centerX += panX; centerY -= panY; break;
    default  : break;
   }
   setCenter(centerX,centerY);
  }
  
  function imgLoaded(ths) {
   document.getElementById('waiting').style.visibility = 'hidden';
   document.getElementById('KMSMap').style.visibility = 'visible';
  }
  
  function imgError(ths) {
   imgLoaded(ths);
   alert('Kort kunne ikke hentes');
  }

  function screenToWorld(sx,sy) {
   var w = new Array();
   w[0] = parseInt(sx*res+cx); 
   w[1] = parseInt(-sy*res+cy);
   return w;
  }
  
  function worldToScreen(wx,wy) {
   var s = new Array();
   s[0] = parseInt((wx-cx)/res); 
   s[1] = parseInt(-((wy-cy)/res));
   return s;
  }

  function imgCoord(e) {
   var c = new Array();
   if (isNav()) {
    c[0] = e.pageX - e.target.parentNode.offsetLeft - document.body.offsetLeft;
    c[1] = e.pageY - e.target.parentNode.offsetTop - document.body.offsetTop;
   } else {
    c[0] = e.offsetX;
    c[1] = e.offsetY;
   }
   return c;
  }

  function overviewOnClick(evt) {
   var a = imgCoord(evt); 
   var w = screenToWorld(parseInt(a[0]),parseInt(a[1]));
   setCenter(w[0],w[1]);
  }

/************************/

 var searchStr = '';
 var errmsg = 'Der er ikke valgt en havn/bro';
 var mapx = -2;
 var mapy = -2;
 var mapx_t = -1;
 var mapy_t = -1;

 function getRadioValue(radioname) {
  var radioobj = document.getElementsByName(radioname);
  for (var i=0;i<radioobj.length;i++) {
   if (radioobj[i].checked) {
    return radioobj[i].value;
   }
  }
  return '';
 }

 function setRadioValue(radioname,val) {
  radioValueReset(radioname);
  var radioobj = document.getElementsByName(radioname);
  if (val!='') {
   for (var i=0;i<radioobj.length;i++) {
    radioobj[i].checked = radioobj[i].value==val;
   }
  }
 }

 function radioValueReset(radioname) {
  var radioobj = document.getElementsByName(radioname);
  for (var i=0;i<radioobj.length;i++) {
   radioobj[i].checked = false;
  }
 }


 function emptyList(listName) {
  list = document.getElementById(listName);
  while (list.options.length) {
   list.options[0] = null; }
 }

 function insertListItem(listName,_id,optionText,optionValue) {
 	if (!(listContainsItem(listName,optionText))) {	
 		with (document.getElementById(listName)) {
			options[_id] = new Option();
			options[_id].text = optionText;
			options[_id].value = optionValue; }
	}
 }
 
 function insertListHavn(Havn) {

    var havneSearchlist = document.getElementById('theList');

    var i = havneSearchlist.options.length;

    with (havneSearchlist) {
        options[i] = new Option();
        options[i].text = Havn.Name;
        options[i].value = Havn.Id + ';' + Havn.Type;
        i++;
    }
}

 function listContainsItem(listName,optionText) {
	
	var objList = document.getElementById(listName);
	
	for (var i=0; i<objList.length; i++){
		if (objList.options[i].text == optionText) {
			return true;
		}
	}
	return false;
 }

 function fillList(havneType,firstItem,lastItem,str) {
  emptyList('theList');
		
  var MatchingHavne = alleHavne.GetHavne(parent.getSearchStr(),havneType,'');
	
  for (var i=0; i<MatchingHavne.length;i++){
  	insertListHavn(MatchingHavne[i]);
  }

  if (isNav()) {
   document.getElementById('aa').style.visibility = 'hidden';
  }
 }
 
function inputOnKeyUp(evt) {
  var edt = document.getElementById('searchstr');
  var sel = document.getElementById('theList');
  if (evt.keyCode==13){
    if (sel.length==1){ 
      sel.selectedIndex = 0;
      showOnMap();
    }
    try { evt.preventDefault(); evt.cancelBubble;}
    catch(err) {};
    return true;
  } else {
    if (edt.value!=searchStr){  
      searchStr = edt.value;
      parent.setSearchStr(searchStr);
      fillList(getRadioValue('R1'),0,-1,searchStr); 
    }
  }
}


 function showAll() {
  emptyList('theList');
  if (isNav()) {
   document.getElementById('aa').style.visibility = 'visible';
  }
  setTimeout(showAll2,10);
 }

 function showAll2() {
  searchStr = '';
  parent.setSearchStr(searchStr);
  document.getElementById('searchstr').value = '';
  fillList(getRadioValue('R1'),0,-1,searchStr); 
 }
	
 function clearAll() {
  searchStr = '';
  parent.setSearchStr('');
  emptyList('theList');
  parent.setSm(getRadioValue('R1'));
  document.getElementById('searchstr').value = '';
  document.getElementById('searchstr').focus();
 }

function R1SelectedIndexChanged() {
  parent.setSm(getRadioValue('R1'));
  document.getElementById('searchstr').focus();
  fillList(getRadioValue('R1'),0,-1,searchStr);
}

function theListOnChange(ths) {
  searchStr = ths.options[ths.selectedIndex].text;
  document.getElementById('searchstr').value = ths.options[ths.selectedIndex].text;
} 

function theListOnKeyUp(evt) {
  if (evt.keyCode==13){
    showOnMap();
    return false;
  } else {
    return true; 
  }
}

function showOnMap() {
  if (document.getElementById('theList').selectedIndex<0) {
   alert(errmsg);
   return false;
  }
  
  with (document.getElementById('theList')) {
      var havneid = options[selectedIndex].text;
      var havnetype = options[selectedIndex].value.split(';')[1];
      var MatchingHavne = alleHavne.GetHavne(havneid,havnetype,'');
      if (MatchingHavne.length>0){
        setCenter(MatchingHavne[0].X,MatchingHavne[0].Y);
      }
    }
}

function showDetails() {
  if (document.getElementById('theList').selectedIndex<0) {
   alert(errmsg);
   return false;
  }
  
  var havnid;
  var havnetype;
  
  with (document.getElementById('theList')) {
   havnid = parseInt(options[selectedIndex].value.split(';')[0]);   
   havnetype = options[selectedIndex].value.split(';')[1];   
  }
  
  var bannerH2sdElement = parent.document.getElementById('bannerH2')
  if (bannerH2sdElement != null) {
	bannerH2sdElement.style.display = "none";
  }
  
  switch (havnetype) {
    case 'bro' : parent.visBroOpl(havnid); break;
    default: parent.visHavneOpl(havnid); break;
  }
}

function mapOnClick(evt) {
  var a = imgCoord(evt);
  if (isNav()) {
   a[0] -= 33;
   a[1] -= 19;
  }
  
  var wx = xmin + (a[0]*pxlres);
  var wy = ymax - (a[1]*pxlres);
  var r = 500;
  
  var MatchingHavne = alleHavne.GetHavneByPoint(wx,wy,r);
  if (MatchingHavne.length>0){
	  switch (MatchingHavne[0].Type) {
		case 'lyst' : parent.visHavneOpl(MatchingHavne[0].Id); break;
		case 'erhverv' : parent.visHavneOpl(MatchingHavne[0].Id); break;
		case 'bro' : parent.visBroOpl(MatchingHavne[0].Id); break;
	  }
  }
}
 
updateMapOnMouseMove = true;
 
function mapOnMouseMove(evt) {
  if (!updateMapOnMouseMove)
   return false;
  document.getElementById('flyout').style.visibility = 'hidden';
  doSearch = true;
  var a = imgCoord(evt); 
  mapx = a[0];
  mapy = a[1];
  if (isNav()) {
   mapx -= 33;
   mapy -= 19;
  }
}

function hideFlyout() {
  document.getElementById('flyout').style.visibility = 'hidden';
}

setInterval(checkMouseMove,200);

function checkMouseMove() {
  if ((mapx==mapx_t) && (mapy==mapy_t) && (doSearch)) {
   if (document.getElementById('flyout').style.visibility=='hidden') {
    searchHarbour(mapx,mapy);
   }
  } else {
   mapx_t = mapx;
   mapy_t = mapy
  }
}

function structure(navn,id,type) {
  this.navn = navn;
  this.id = id;
  this.type = type;
  this.toHtmlString = toHtmlString;
}
 
function arrayContainsStructure(arry,strct){
  for(var i=0;i<arry.length;i++){
    if(arry[i].navn==strct.navn)
    return true;
  }
  return false;
}

function toHtmlString() {
  var matchText = '<a href="index.aspx#';
  matchText += this.type + '=' + this.id + '">' + this.navn + '</a>';
  return matchText;
}

function searchHarbour(ox,oy) {
  var wx = xmin + (ox*pxlres);
  var wy = ymax - (oy*pxlres);
  // IG 2008-11-18 r = search radius. Originally 500
  var r = 2000;
  
  var MatchingHavne = alleHavne.GetHavneByPoint(wx,wy,r);
  
  if (MatchingHavne.length>0){
	   
	var matchText = '';
	for (ix=0;ix<MatchingHavne.length;ix++) {

		var iDType = 'HID';		
		switch (MatchingHavne[ix].Type) {
			case 'bro' : iDType ='BID'; break;
		}
		matchText += '<a href="index.aspx#' + iDType + '=' + MatchingHavne[ix].Id + '">' + MatchingHavne[ix].Name + '</a><br />';
	}
	displayFlyout(matchText,ox,oy);
	return false;
	}
	else {
	return false;
  }
}

function displayFlyout(hname,ox,oy) {
  with (document.getElementById('flyout')) {
   innerHTML = hname;
   style.top = oy+33;
   style.left = ox+30;
   style.visibility = 'visible';
   updateMapOnMouseMove=false;
   setTimeout("updateMapOnMouseMove = true;",1500);
  }
} 

function onBodyLoad() {

  //Ensure correct layout
  //parent.resetContent();
  //parent.showContent(1);

  constCalc();
  document.getElementById('searchstr').focus();
  setRadioValue('R1',parent.getSm());
  setCenter(parent.getCx(),parent.getCy());
  
  if (isNav()) {
   //document.getElementById('t1').style.top = '-7px';
   //document.getElementById('t2').style.top = '-7px';
   //document.getElementById('t3').style.top = '-7px';
  } 
  fill();
  if (window!=parent) {
   parent.restoreMenu1(1);
  } 
}

function fill() {
  searchStr = parent.getSearchStr();
  fillList(getRadioValue('R1'),0,-1,searchStr); 
  document.getElementById('searchstr').value = searchStr;
}