var icons = new Array();
var documentListTemplate = "doclist";
var documentMaxRows = 10;
var isAdmin = false;
var showDiscussions = true;
var showLocalnews = true;

function getDocumentSearchDefinition(defs)
{
  var def = new Object;

  def.adapter  = "docresult";
  def.sort     = "ref_ptime desc";
  def.listTemplate = documentListTemplate;
  //def.maxRows  = 10;
  def.maxRows = documentMaxRows;
  def.skipRows = 0; 
  if (defs)
  {
    // hantera lokala DD-annonser
    //if (trace)
      //alert(varDump(defs));
    if (defs.maxRows)
      def.maxRows = defs.maxRows;
    if (defs.maxDistance)
      def.maxDistance = defs.maxDistance;
    if (defs.documentType)
      def.documentType = defs.documentType;
    if (defs.sort)
      def.sort = defs.sort;
    if (defs.listTemplate)
      def.listTemplate = defs.listTemplate;
  }
  
  var center = StarMap.getCenter();
  var bounds = StarMap.getBounds();
  var westLong = bounds[0]; // min X = west
  var southLat = bounds[1]; // min Y = south
  var eastLong = bounds[2]; // max X = east
  var northLat = bounds[3]; // max Y = north
  def.bounds = [northLat, westLong, southLat, eastLong];

  var ctLong = center[0];
  var ctLat = center[1];

  def.center = [ctLat, ctLong];

  return def;   
}

function refreshLocalAdDocumentSelection()
{
  if (!('dd-local-ads')) // -- strunta i detta om vi inte är på dalademokraten 
    return;

  var defs = new Object;
  defs.maxRows = 1;
  defs.maxDistance = 999;
  defs.documentType = 10;
  defs.sort = "distance";
  defs.listTemplate = "dd-ads";
  
  var def = getDocumentSearchDefinition(defs);

  var cb = function(data) 
	{ 
  	if (data && data.list)
  	{
      // göm defaultdokumentet och visa det positionerade
      $('dd-global-ads').style.display = "none";
      $('dd-local-ads').innerHTML = data.list;
    }
    else
  	{
      // visa defaultdokumentet och göm/töm det positionerade
      $('dd-global-ads').style.display = "block";
      $('dd-local-ads').innerHTML = "";	  
    }
	};

  queuedRpcCall("maps.getPositions", def, cb);
}

function refreshDocumentSelection()
{
  if (showLocalnews)
  {
    var defs = new Object;
    defs.maxRows = 3;
    defs.documentType = 11;
    defs.sort = "ref_ptime desc";
    defs.listTemplate = "localnewslist";
    var def = getDocumentSearchDefinition(defs);
  }
  else
  {
    var def = getDocumentSearchDefinition();
  }
  
  var cb = function(data) 
	{ 

	if (data && data.list)
  {
    if ($('positioneddocshead'))
      $('positioneddocshead').style.display="block";
	  $('positioneddocs').innerHTML = data.list;
    
  }
  else
	{
    if ($('positioneddocshead'))
      $('positioneddocshead').style.display="none";
    $('positioneddocs').innerHTML = "";	  
	}
  };

  queuedRpcCall("maps.getPositions", def, cb);
}

function buildLocationName(data)
{
  var html = [];

  if (data.streetName && data.streetNumber)
	html.push(data.streetName + " " + data.streetNumber);
  else if (data.streetName)
    html.push(data.streetName);

  if (data.city)
    html.push(data.city);  

  if (data.region && data.region != data.city)
    html.push(data.region);  

  return html.join(", ");
}


function formatLocationList(set)
{
  var html = "";

  var regions = [];
  var cities  = [];
  var streets = [];
  var other = [];

  for (var i=0; i < set.length; i++)
    {
    r = set[i];

	if (r.streetName)
	  streets.push(r);
	else if (r.city)
	  cities.push(r);     
	else if (r.region)
	  regions.push(r);     
    else
	  other.push(r);
    }

  if (regions.length > 0)
    {
    html += "<b>Kommuner:</b>";
    html += buildLocationList(regions);
    }

  if (cities.length > 0)
    {
    html += "<b>Städer/orter:</b>";
    html += buildLocationList(cities);
    }

  if (streets.length > 0)
    {
    html += "<b>Gator:</b>";
    html += buildLocationList(streets);
    }

  if (other.length > 0)
    {
    html += "<b>Annat:</b>";
    html += buildLocationList(other);
    }

  return html;
}

function buildLocationList(set)
{
  var html = "<ul>";

  for (var i=0; i < set.length; i++)
    {
	  var x = set[i].position.longitude;
	  var y = set[i].position.latitude;

	  html += "<li>"; 
	  html += "<a href='javascript:void(0)' onclick='onLocationSelectXY(" + x + "," + y + ",this.innerHTML)'>";
	  html += buildLocationName(set[i]);
	  html += "</a>";  
	  html += "</li>"; 
    }

  html += "</ul>";
  return html;
}

getBoundsForZoomLevel = function(idx) 
{
  var oldIndex = StarMap.zoomIndex;
  StarMap.zoomIndex = idx;
  var bounds = StarMap.getBounds();
  StarMap.zoomIndex = oldIndex;
  return bounds;
}

getZoomLevelForBounds = function(minX, minY, maxX, maxY)
{
   var reach = maxX - minX;
   var zoom = 0;

   alert(reach);

   if (reach <= 664)
   	 zoom = 0;      
   else if (reach <= 1328)
   	 zoom = 1;      
   else if (reach <= 3320)
   	 zoom = 2;      
   else if (reach <= 8300)
   	 zoom = 3;      
   else if (reach <= 39840)
   	 zoom = 4;      
   else 
   	 zoom = 5;      
  
   return zoom;
}


function getIconForPoint(refclass, symbol,idx, active) 
{
  var map = { 
	"ad-erbjudes"    : "pe",
    "ad-erbjudesftg" : "fe", 
    "ad-erbjudesorg" : "pe", 
    "ad-sokes"       : "ps", 
    "ad-sokesftg"    : "fs", 
    "ad-bytes"       : "pb",
    "member"         : "pe", 
    "memberftg"      : "fe",
    "ad-kalender"    : "pe",
    "ad-kalenderftg" : "fe",
    "ad-kupong"      : "pe",
    "vbulletin3thread"         : "pe",
    "vbulletin3thread-ftg" : "fe",
    "vbulletin3thread-privat"  : "pe",
    "document-localnews" : "pe"
  };

  var prefix = map[symbol]; 

  if (!prefix)
	alert("Ej mappad symbol: " + symbol);

  if (active)
	prefix = "m" + prefix;
  
  if (idx > 10)
    idx = 10;
  
  var icon = "/mapimages/" + prefix + "_" + idx + ".gif";

  // -- TEST av png med skugga
  if (currentUser && (currentUser == 1009880 || currentUser == 1001) && prefix == "pe")
    icon = "/mapimages/transp/" + prefix + "_" + idx + ".png";
  
  return icon;
}

function createMarker(o, idx)
{
  var info = new Object;

  var y = o.latitude;
  var x = o.longitude;
  var zIndex = 11 - idx;

  var title = o.info;

  var icon = getIconForPoint(o.refclass, o.symbol, idx);

  var marker = StarMap.addPoint(x,y,title,icon,zIndex);

  marker._geopos_ID = o.ID;
  marker._geopos_refclass = o.refclass;
  marker._geopos_symbol = o.symbol;
  marker._geopos_viewURL = o.viewURL;

  return marker;
}

function updateMarker(m, idx)
{
  var zIndex = 11 - idx;
  var icon = getIconForPoint(m._geopos_refclass, m._geopos_symbol, idx);

  m.update(m.x, m.y, m.title, icon, zIndex);

  return m;
}

function removeMarker(m)
{
  StarMap.removePoint(m);
}

function setMapCenter(lat, lng)
{
  StarMap.panTo(lng, lat);
}

function loadVisibleMarkers(query, sort, max, skip, forced)
{
  if (!max)
	max = 10;

  var center = StarMap.getCenter();

  var bounds = StarMap.getBounds();

  SMUtils.dbg("center: " + center + ", bounds: " + bounds);

  var westLong = bounds[0]; // min X = west
  var southLat = bounds[1]; // min Y = south

  var eastLong = bounds[2]; // max X = east
  var northLat = bounds[3]; // max Y = north

  var ctLong = center[0];
  var ctLat = center[1];

  if (homeMarker)
	{
	  ctLong = homeMarker.x;
	  ctLat = homeMarker.y;
	}

  if (tempMarker)
	{	
	  ctLong = tempMarker.x;
	  ctLat = tempMarker.y;
	}
		  
  var url = westLong + "," + southLat + "," + eastLong + "," + northLat + "," + ctLat + "," + ctLong;

  if (url != prevUrl || forced)
	{
	  asyncRpcCall("maps.getVisiblePositions",
				   northLat, westLong,
				   southLat, eastLong,		   
				   sort,
				   ctLat, ctLong,
				   max,
				   skip,
				   query,
				   function(data) { addMarkers(data); });

	  prevUrl = url;
	}
}

/* from starmap-resultpage-dev.js*/

function scrollToAnchor(name)
{
  if(document.anchors && document.anchors.item(name).scrollIntoView)
	{
	  document.anchors.item(name).scrollIntoView(true);
	} 
}

function reloadPage()
{
  document.location.reload();
}

function onSearchModeChange()
{
  // force reload on MSIE
  //
  if (navigator.appVersion.match(/\bMSIE\b/))
    {
    advancedMode = !advancedMode;
    storeMapState(true);
    }
  else
    {
    toggleSearchMode();
    StarMap.repaint();
    storeMapState();
    }
}

function toggleSearchMode()
{
  advancedMode = !advancedMode;

  if (advancedMode)
	{
    if ($('toadvanced'))
  	  $('toadvanced').style.display = "none";
	  if ($('tosimple'))
      $('tosimple').style.display = "block";

	  $('advsearch1').style.display = "block";
	  $('advsearch2').style.display = "block";
	}
  else	
	{
	  if ($('toadvanced'))
      $('toadvanced').style.display = "block";
	  if ($('tosimple'))
      $('tosimple').style.display = "none";

	  $('advsearch1').style.display = "none";
	  $('advsearch2').style.display = "none";
	}
}

function addMarkers(arr)
{
  if (typeof arr != "object")
    alert(arr);

  var newMarkers = new Array();
  var positions = arr.positions;
  var totalrows = arr.totalrows;
  var rows = arr.rows;
  var overflow = arr.overflow;
  var plus = 100;
  var info;

  pages = Math.ceil(totalrows / maxMarkers);

  var currentRows =  currentPage*maxMarkers;
  if (totalrows < maxMarkers)
    var currentRows = totalrows;
    
  var info = "Träff " + ((currentPage*maxMarkers)-9) + "-" + currentRows + " av " + totalrows;

  if (pages == 0)
	info = "";

  $("pageinfo1").innerHTML = info;
  $("pageinfo2").innerHTML = info;

  if (totalrows == 0)
    arr.list = "<div class='margin'><b>Inga träffar i visat kartområde</b><br />Zooma ut för att söka i större område. " +
	  "<a href='#' onclick='zoomOut();return false;'>Zooma ut ></a><br /><br /></div>";

  $('resultlist').innerHTML = arr.list ? arr.list : "";

  indicateSelectionSize(totalrows);

  for (var i = 0; i < positions.length; i++)
	{
	  var ID = positions[i].ID;
	  if (markers[ID])
		{
		  newMarkers[ID] = updateMarker(markers[ID], i+1);
		}
	  else
		{
		  newMarkers[ID] = createMarker(positions[i], i+1);
		  newMarkers[ID].addClickListener(onPointClick);
		  newMarkers[ID].addMouseOverListener(onPointMouseOver);
		  newMarkers[ID].addMouseOutListener(onPointMouseOut);
		}
	}

  for (var old in markers)
	{
	  if (!newMarkers[ old ])
		{
		  removeMarker( markers[ old ]);
		}
	}

  markers = newMarkers;
}

function onPointClick(x)
{
  window.open(x._geopos_viewURL, "_self");
}

function onPointMouseOver(x)
{
  x.showToolTip(true);

  var id = x._geopos_ID;
  var f = $("listrow" + id);
  if (f)
    {
	  f.oldClassName = f.className;
	  f.className = "over";
    }
}

function onPointMouseOut(x)
{
  var id = x._geopos_ID;
  x.hideToolTip(true);

  var f = $("listrow" + id);
  if (f)
    {
	  f.className = "";
	  f.className = f.oldClassName;
    }
}

function hideMarkerForId(id)
{
  markers[id].hideToolTip(true);
}

function showMarkerForId(id)
{
  markers[id].showToolTip(true);
}


function lookupLocation()
{
  var location = $F('location');

  if (mapState.homelocation && mapState.homelocation == location)
	return;

  var callb = function (data,x)
    {
	  if (!data)
		{
		alert("Ingen träff.");
		return;
		} 

	  if (!data.length)
      {
	  	var y = data.position.latitude;
		var x = data.position.longitude;
		onLocationSelectXY(x,y, buildLocationName(data));
		return;
      }

	  var html = formatLocationList(data);

	  $("locationlist").style.display = "block";
	  $("locationlist").innerHTML = html;
    }

  asyncRpcCall("maps.lookupLocation", location, "rt90", callb);
}

function onLocationSelectXY(x,y,name)
{
  $("locationlist").style.display = "none";

  if (name)
	$("location").value = name;

  setTempMarker(x,y);
  gotoPosition(x,y);

  indicateCurrentSort();

  storeMapState();
    
  openTempToolTip();
}

function indicateCurrentZoom()
{
  var idx = StarMap.zoomIndex;

  for (var i=0; i < 7; i++)
	{
	  var f = $("zi1_" + i);
	  if (f)
		{
		  if (i == idx)
			f.addClassName("sort");
		  else
			f.removeClassName("sort");
		}
	}

  var f = $("zi2");
  if (f)
	{
      var imgNbr = [6,5,4,3,2,-1,-1][idx];
	  var s;
      if (imgNbr != -1)
	     s = { background: "url(/images/zoomhl" + imgNbr + ".gif) no-repeat"};
	  else	  		     
	     s = { background: "none"};
      f.setStyle(s);
	}
}

function getFreeTextQuery()
{
  var f = $F('fritext');

  if (f == "Fritextsökning"  || f == "" )
     return null;

  return f;
}

function openTempToolTip(m)
{
  if (tempMarker)
	tempMarker.showToolTip(true);
}

function closeTempToolTip(m)
{
  if (tempMarker)
	tempMarker.hideToolTip(true);
}

function openHomeToolTip(m)
{
  if (homeMarker)
	homeMarker.showToolTip(true);
}

function closeHomeToolTip(m)
{
  if (homeMarker)
	homeMarker.hideToolTip(true);
}

function gotoHomePosition()
{
  if (homeMarker)
	{
	  if (mapState.homelocation)
		$('location').value = mapState.homelocation;
	  else
		$('location').value = "";

	  removeTempMarker();
	  indicateCurrentSort();
      gotoPosition(homeMarker.x, homeMarker.y);      

	  storeMapState();
	}
}

function gotoTempPosition()
{
  if (tempMarker)
	gotoPosition(tempMarker.x, tempMarker.y);      
}

function zoomIn()
{
  StarMap.zoomIn();
}

function zoomOut()
{
  // if (StarMap.zoomIndex < 5)
  StarMap.zoomOut();
}

function setTempMarker(x,y)
{
  var msg = "<b>Din plats på kartan:</b><br />" + $F('location') + "<br /><br />"; 

  if (currentUser == 0)
	msg += "<a href='/login.htm'>Spara som min adress</a> / ";

  msg += "<a href='javascript:void(0);' onclick='closeTempToolTip()'>Stäng</a>";

//  msg += " / <a href='javascript:void(0)' onclick='onRemoveTempMarker();'>Test: ta bort</a> ";

  if (!tempMarker)
	{
	  tempMarker = StarMap.addPoint(x,y, msg, "/mapimages/temp_place.gif", 85);
	  tempMarker.addClickListener(openTempToolTip);
	}
  else
	tempMarker.update(x,y, msg, "/mapimages/temp_place.gif", 85);
}

function setHomeMarker(x,y)
{
  var msg = "<b>Din sparade plats på kartan:</b><br />" + mapState.homelocation + "<br /><br />"; 

  msg += "<a href='/member/editprofile.htm'>Ändra din sparade plats</a> / ";

  msg += "<a href='javascript:void(0);' onclick='closeHomeToolTip()'>Stäng</a>";

//  msg += " / <a href='javascript:void(0)' onclick='onRemoveHomeMarker();'>Test: ta bort</a> ";

  if (!homeMarker)
	{
	  homeMarker = StarMap.addPoint(x,y, msg, "/mapimages/home.gif", 80);
	  homeMarker.addClickListener(openHomeToolTip);
	}
  else
	homeMarker.update(x,y, msg, "/mapimages/home.gif", 80);
}

function onRemoveTempMarker()
{
  removeTempMarker();
  indicateCurrentSort();
  refreshAdSelection(1);
  storeMapState();
}

function removeTempMarker()
{
  if (tempMarker)
	{
	  StarMap.removePoint(tempMarker);
	  tempMarker = null; 
	}
}

function removeHomeMarker()
{
  if (homeMarker)
	{
	  StarMap.removePoint(homeMarker);
	  homeMarker = null; 
	}
}

function onZoomChange()
{
  onMapChange();
  indicateCurrentZoom();
}

function setGeoPositionSort(s)
{
  if (s)
    _geoPositionSort = s;
}

function hideAllPoints()
{
  var points = StarMap.points;
  var index = 0;
  for (var i=points.length-1;i>=0;i--) {
    StarMap.hidePoint(points[i]);
  }
}

function unhideAllPoints()
{
  var points = StarMap.points;
  var index = 0;
  for (var i=points.length-1;i>=0;i--) {
    StarMap.showPoint(points[i]);
  }
}

/* diskussioner */

function getDiscussionsSearchDefinition()
{
  var def = new Object;

  def.adapter  = "forumresult";
  def.listTemplate = "forumpushlist"; //"forumlist";
  def.maxRows  = 1;
  def.skipRows = 0;
  def.sort = "ref_ctime desc"; 

  var center = StarMap.getCenter();
  var bounds = StarMap.getBounds();
  var westLong = bounds[0]; // min X = west
  var southLat = bounds[1]; // min Y = south
  var eastLong = bounds[2]; // max X = east
  var northLat = bounds[3]; // max Y = north
  def.bounds = [northLat, westLong, southLat, eastLong];

  var ctLong = center[0];
  var ctLat = center[1];

  if (homeMarker)
	{
	  ctLong = homeMarker.x;
	  ctLat = homeMarker.y;
	}

  if (tempMarker)
	{	
	  ctLong = tempMarker.x;
	  ctLat = tempMarker.y;
	}

  def.center = [ctLat, ctLong];

  return def;   
}

function refreshDiscussionsSelection()
{
  if (!showDiscussions)
    return;

  var def = getDiscussionsSearchDefinition();
  
  var cbGeneralDiscussions = function(data)
  {
    if (data && data.info)
    {
      $('discussionshead').style.display="block";
      $('generaldiscussions').innerHTML = data.info;
      $('generaldiscussions').style.display = "block";
    }
    else
    {
      $('discussionshead').style.display="none";
      $('generaldiscussions').style.display = "block";
    }
  }
  
  var cb = function(data) 
	{ 
    if (!$('discussionshead'))
      return;
    
  	if (data && data.list)
    {
      $('discussionshead').style.display="block";
      $('localdiscussions').style.display="block";
  	  $('localdiscussions').innerHTML = data.list;
    }
    else
  	{
      $('discussionshead').style.display="none";
      $('localdiscussions').style.display="none";
  	}
    
    // -- komplettera med opositionerade
    var def = new Object;
    def.listTemplate = "forumpushlist"; 
    def.maxRows  = 3 - data.rows;
    def.sort = "lastpost desc";    
    queuedRpcCall("forum.getForumThreads", def, cbGeneralDiscussions);  
  };

  queuedRpcCall("maps.getPositions", def, cb);
}