var baseIcon;
var map;
var markers = new Array();
var polylines = new Array();
var zoomall;
var numZoomPoints=0;
var defaultZoomInLevel=15;
var currentPoint;
var infoWindowClick=-1;
var cursorMode=0;
var nMarkers=0;
var currentPointIndex=0;
var markersID = new Array();
var zLevels =new Array();
var mapID=0;
var url;

function gotoMarker(index) {
    GEvent.trigger(markers[index],'click') 
}

function toggleTrackDisplay(index,checked) {
  if (checked)
  {
    polylines[index].show();
  } else
  {
    polylines[index].hide();
  }
  
//  alert(index+' ' + value);
}

function zoomInAndGotoMarker(index) {
      
    map.setCenter(markers[index].getPoint(), zLevels[index]);
    gotoMarker(index);
}

function flyttPunkt(index) {

  markers[index].setPoint(currentPoint);
}
function slettPunkt(ID) {
  var index=-1;
  for(i=0;i<markersID.length;i++){if (ID==markersID[i]) index=i;}
  if (index<0) 
  {
    alert('Ukjent feil ved sletting av punkt');
  } else
  {
    deleteWayPoint(mapID,markersID[index]);
    location.href=url;
  }
}

function setCursorMode(mode,pointIndex)
{
  if(mode==1)
  {
     document.getElementById('map').firstChild.firstChild.style.cursor = 'crosshair';
     document.getElementById("status").innerHTML = 'Velg punkt på kart hvor du ønsker å plassere punkt';
     cursorMode=mode;
  }
  if(mode==2)
  {
     var index=-1;
     for(i=0;i<markersID.length;i++){if (pointIndex==markersID[i]) index=i;}

     document.getElementById('map').firstChild.firstChild.style.cursor = 'crosshair';
     document.getElementById("status").innerHTML = 'Velg nytt punkt på kart';
     cursorMode=mode;
     currentPointIndex=index;
     map.closeInfoWindow()
  }
  if(mode==3)
  {
     document.getElementById('map').firstChild.firstChild.style.cursor = 'crosshair';
     document.getElementById("status").innerHTML = 'Velg omtrent hvor på kartet du ønsker å hente frem punkter fra';
     cursorMode=mode;
  }

}

function getInfoWindowHtml(pointID)
{
  var s=getHtmlWayPoint(mapID,pointID);
  return s;
}

function createMarker(lat,lng, index, s, zAll,zLevel,id,em,ikon,iconIndex) {

  if (ikon==2)
  {
    var icon = new GIcon();
    icon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
    icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
    icon.iconSize = new GSize(12, 20);
    icon.shadowSize = new GSize(22, 20);
    icon.iconAnchor = new GPoint(6, 20);
    icon.infoWindowAnchor = new GPoint(5, 1);
  }
  if (ikon==1)
  {
    var letter = String.fromCharCode('A'.charCodeAt(0) + iconIndex);
    var icon = new GIcon(baseIcon);
    icon.image = 'http://www.google.com/mapfiles/marker' + letter + '.png';
  }
  if (zAll) {
    if (numZoomPoints==0) { zoomall=new GLatLngBounds(new GLatLng(lat,lng),new GLatLng(lat,lng)); } else { zoomall.extend(new GLatLng(lat,lng)); }
    numZoomPoints++;
  }
  if (ikon>0)
  {
    var marker = new GMarker(new GPoint(lng,lat), icon);
  } 
  else
  {
    var marker = new GMarker(new GPoint(lng,lat));
  }
  var html = s;
  if(zLevel<1) zLevel=defaultZoomInLevel;
  GEvent.addListener(marker, 'click', function() {
    if(em)
    {
      marker.openInfoWindowHtml(getInfoWindowHtml(id));
    } else
    {
//      map.setCenter(marker.getPoint(), zLevel);
      marker.openInfoWindowHtml(html);
    }
    infoWindowClick=index;
  });
  
/*
  GEvent.addListener(marker, 'mouseover', function() {
    marker.openInfoWindowHtml(html);
    infoWindowClick=-1;

  });
  GEvent.addListener(marker, 'mouseout', function() {
    if (!infoWindowClick==index) map.closeInfoWindow();
  });
*/
  markers[index]=marker;
  markersID[index]=id;
  zLevels[index]=zLevel;
  nMarkers=nMarkers+1;
  map.addOverlay(marker);
  return marker;
}



function mapZoomAll(){

try{ map.setCenter(zoomall.getCenter(), map.getBoundsZoomLevel(zoomall));}catch(err){    alert(err);}

  
}

function wheelZoom(a) { 
    if ((a.detail || -a.wheelDelta) < 0) 
        map.zoomIn(); 
    else 
        map.zoomOut(); 

} 

var OKFunction = function(o) {
  punktID=document.getElementById('selectPointID').value;
  var s=addWayPoint(mapID,punktID);
  location.href=url;
}


function klikk(overlay,point) {
  if(overlay==null)  {
    currentPoint=new GLatLng(point.lat(),point.lng());
    if (cursorMode==1)
    {
      id=0;
      var s=createNewWayPoint(mapID,point.lat(),point.lng(),'Overskrift','Tekst');
      createMarker(point.lat(),point.lng(),nMarkers,s,1,0,id,1,1,nMarkers);
      location.href=url;
    }
   if (cursorMode==2)
   {
     moveWayPoint(markersID[currentPointIndex],point.lat(),point.lng());
     flyttPunkt(currentPointIndex);
   }
   if (cursorMode==3)
   {
       DialogBoksOpen('Legg til punkt','<div><h3>Velg punkt fra listen under:</h3><form><select id="selectPointID">'+LagPunktListe(mapID,point.lat(),point.lng())+'</select></form></div>',OKFunction);
   }
   if (cursorMode>0) document.getElementById("status").innerHTML = '&nbsp;';
   cursorMode=0;
 }
}


// Passing an example of array of arguments to both
// the success and failure callback handlers.
var args = ['foo','bar'];

var responseSuccess = function(o){
/* Please see the Success Case section for more
 * details on the response object's properties.
 * o.tId
 * o.status
 * o.statusText
 * o.getResponseHeader[ ]
 * o.getAllResponseHeaders
 * o.responseText
 * o.responseXML
 * o.argument
 */
 location.href=url;
 alert('GPX file lagret');
};



var callback =
{
  upload:responseSuccess,
  argument:args
};




var OKGPXFunction = function(o) {
  var formObject = document.getElementById('aForm');   
  YAHOO.util.Connect.setForm(formObject,true);   
  var cObj = YAHOO.util.Connect.asyncRequest('POST', '/include/xmlMapPostUpload.asp', callback);
}

function loadGPXdialog() {

  var s= '<div><h3>Hent data fra GPX (GPS eXchange format) fil</h3>';
  s=s+ '<table class=editKartotek>';
  s=s+'<form Id=aForm method="POST" action="/include/xmlMapPost.asp"  ENCTYPE="multipart/form-data" >';
  s=s+'<table class=editKartotek width="1">';
  s=s+'<tr><td colSpan=2>Du kan velge hvilke data som skal leses fra filen. Programmer som lager slike filer er f.eks. Garmin Mapsource, men mange andre programmer kan også benyttes (F.eks. <a target="_new" href="http://www.easygps.com">EasyGPS</a> som er gratis).</td></tr>';
  s=s+'<tr><td>GPX&nbsp;fil:</td><td><INPUT TYPE="FILE" NAME="gpxFile" SIZE="50"></td></tr>';
  s=s+'<tr><td colSpan=2>Data som skal lastes fra filen:</td></tr>';
  s=s+'<tr><td><Input Type="CheckBox" Name="WayPoints" >Veipunkter</td><td></td></tr>';
  s=s+'<tr><td><Input Type="CheckBox" Name="Routs" >Ruter</td><td></td></tr>';
  s=s+'<tr><td><Input Type="CheckBox" Name="Tracks" >Spor</td><td></td></tr>';
  s=s+'<tr><td><Input Type="Hidden" Name="mapID" Value="'+mapID+'">Spor</td><td></td></tr>';
  s=s+'</table>';
  s=s+'</form></div>';
  DialogBoksOpen('Hent data fra GPX (GPS eXchange format) fil',s,OKGPXFunction);

}

var OKSorterWayPoints = function(o) {
  alert('Sortering OK');
  location.href=url;

//  var formObject = document.getElementById('aForm');   
//  YAHOO.util.Connect.setForm(formObject,true);   
//  var cObj = YAHOO.util.Connect.asyncRequest('POST', '/include/xmlMapPostUpload.asp', callback);
}
function sorterWayPoints() {
  var s= '<div><h3>Sett sorteringsrekkefølgen under</h3>';
  s=s+LagWayPointSorteringsDialog(mapID)+'</div>';
  DialogBoksOpen('Sorter punkter',s,OKSorterWayPoints);

}

var OKorganizeTracks = function(o) {
  alert('Spor OK');
  location.href=url;
}

function organizeTracks() {
  var s= '<div><h3>Organiser spor på kartet</h3>';
  s=s+LagOrganizeTracksDialog(mapID)+'</div>';
  DialogBoksOpen('Organiser spor',s,OKorganizeTracks);

}

var SlettKartOK = function(o) {
  slettKart(mapID);
  
  location.href=url;
}


function mapDeleteDialog() {
  DialogBoksOpen('Slett kart','<b>Advarsel:</b><br>Ønsker du virkelig å slette dette kartet?',SlettKartOK);

}
function lastKart(urlString) {
  url=urlString;
  baseIcon = new GIcon();
  baseIcon.shadow = 'http://www.google.com/mapfiles/shadow50.png';
  baseIcon.iconSize = new GSize(20, 34);
  baseIcon.shadowSize = new GSize(37, 34);
  baseIcon.iconAnchor = new GPoint(9, 34);
  baseIcon.infoWindowAnchor = new GPoint(9, 2);
  baseIcon.infoShadowAnchor = new GPoint(18, 25);
  map = new GMap2(document.getElementById('map'));
//  map.addControl(new GLargeMapControl());
  map.addMapType(G_PHYSICAL_MAP);
//  map.addControl(new GMapTypeControl());
//  map.addControl(new GScaleControl());
//  map.addControl(new GOverviewMapControl());
  map.setUIToDefault();
  map.enableGoogleBar();
  map.enableContinuousZoom();
  setInitialView(map);
  setKartSpesifikkeData(map);
  sjekkZoomAll();

// GEvent.addDomListener(document.getElementById('map'), "DOMMouseScroll", wheelZoom); 
// GEvent.addDomListener(document.getElementById('map'), "mousewheel", wheelZoom); 



  GEvent.addListener(map, "click",klikk);
    GEvent.addListener(map, "mousemove", function(point) {
//      currentPoint=new GLatLng(point.lat(),point.lng());
//      document.getElementById("mapPoint").innerHTML = point.toString();
    });


  map.savePosition();
}
function getWindowHeight(delta) {
  var myWidth = 0, myHeight = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    myWidth = window.innerWidth;
    myHeight = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    myWidth = document.documentElement.clientWidth;
    myHeight = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    myWidth = document.body.clientWidth;
    myHeight = document.body.clientHeight;
  }
  return myHeight-delta;
}

function writeMapDiv(cssStyle,delta)
{
  
//  document.write("<div id='" + cssStyle + "' style=' height: " + getWindowHeight(delta) + "pt; ' >");  
  document.write("<div id='" + cssStyle + "' style=' height:" + getWindowHeight(delta) + "px; right=2px; ' >");
}
