
var retrieving=0;

var cachedKort=new Array();
var reqQueue = new Queue();
var latStep = 1;
var lonStep = 2;
var kortRequest=new Array();
var request; 
var first=0;
var map;

var Villa;
var Lejlighed;
var Raekkehus;
var Sommerhus;

var byer=new byerDK();

var xmlfixed= new XMLFixed("Location", false);
xmlfixed.add(new XMLFixed("TilSalg"), false);
var tilSalgGroup=new XMLFixed("TilSalgGroup");
xmlfixed.getNode("TilSalg").add(tilSalgGroup);
tilSalgGroup.add(new XMLFixed("GroupID", true));
tilSalgGroup.add(new XMLFixed("TilSalgEmne", false));
tilSalgGroup.add(new XMLFixed("type", true));
tilSalgGroup.add(new XMLFixed("PrisKat", true));
var tilsalgemne=tilSalgGroup.getNode("TilSalgEmne");
tilsalgemne.add(new XMLFixed("ID", true));
tilsalgemne.add(new XMLFixed("url", true));
tilsalgemne.add(new XMLFixed("kontant", true));
tilsalgemne.add(new XMLFixed("kvadratmeter", true));
tilsalgemne.add(new XMLFixed("adr", true));
tilsalgemne.add(new XMLFixed("siden", true));
tilsalgemne.add(new XMLFixed("fkontant", true));
tilsalgemne.add(new XMLFixed("Lat", true));
tilsalgemne.add(new XMLFixed("Lon", true));

var handleSuccess = function(o){
	var xin=o.argument[0];
	var yin=o.argument[1];
	
	
	
	if(o.responseXML !== undefined){
		var anyf = false;
		var xmlo = parseXML(o.responseXML, xmlfixed);
		var groups=xmlo.getSub("TilSalg", 0).getSubs("TilSalgGroup");
		for(var g=0; g<groups.length; g++)
		{
			anyf = true;
			var emner = groups[g].getSubs("TilSalgEmne");
			var ID = groups[g].getSub("GroupID",0).value;
			var typ=groups[g].getSub("type",0).value;
			var priskat=groups[g].getSub("PrisKat",0).value;
			var Lat=emner[0].getSub("Lat",0).value;
			var Lon=emner[0].getSub("Lon",0).value;
			var createnew=false;
			var accom;
			var prior;
			if(typ==1)
			{
				prior=Villa;
				if(!Villa.contains(ID))
				{
					createnew=true;
					accom="Villa";
				}
			} else if(typ==2)
			{
				prior=Raekkehus;
				if(!Raekkehus.contains(ID))
				{
					createnew=true;
					accom="Rækkehus";
				}
			} else if(typ==3)
			{
				prior=Lejlighed;
				if(!Lejlighed.contains(ID))
				{
					createnew=true;
					accom="Lejlighed";
				}
			} else if(typ==4)
			{
				prior=Sommerhus;
				if(!Sommerhus.contains(ID))
				{
					createnew=true;
					accom="Sommerhus";
				}
			}
			
			if(createnew==true)
			{
				
				if(emner.length==1)
				{
					var url=emner[0].getSub("url",0).value;
					var kvadratmeter=emner[0].getSub("kvadratmeter",0).value;
					var kontant=emner[0].getSub("kontant",0).value;
					var adr=emner[0].getSub("adr",0).value;
					var siden=emner[0].getSub("siden",0).value;
					var fkontant=emner[0].getSub("fkontant",0).value;
					var msg=accom+" til salg:<br/>";
					msg=msg+"Adresse: <a href='"+url+"' target='_blank'>"+adr+"</a><br/>";
		   	  		msg=msg+"Kvadratmeter: <a href='"+url+"' target='_blank'>"+kvadratmeter+"</a><br/>";
		   	 		msg=msg+"Kontant pris: <a href='"+url+"' target='_blank'>"+kontant+" kr.</a><br/>";
		   	 		/*if(fkontant!=0)
		   	 		{
		   	 		  msg=msg+"Til salg siden: "+siden+"<br/>";
		   	 		  if(fkontant!=kontant)
		   	 		  {
		   	 		  	msg=msg+"Første udbudspris: "+fkontant+" kr.<br/>";
		   	 		  }
		   	 		}*/
					var Point=new GLatLng(Lat, Lon);
					prior.addMarker(ID,
						createForSaleMarker(typ+"p"+priskat,Point,msg));
				} else
				{
					var tabs=new Array();
					for(var emn=0; emn<emner.length; emn++)
					{
						
						var url=emner[emn].getSub("url",0).value;
						var kvadratmeter=emner[emn].getSub("kvadratmeter",0).value;
						var kontant=emner[emn].getSub("kontant",0).value;
						var adr=emner[emn].getSub("adr",0).value;
						var sidenmsg="";
						if(fkontant>0)
						{
							sidenmsg="Til salg siden: "+siden+"<br/>";
							if(fkontant!=kontant)
							{
		   	 		        	sidenmsg+="Første udbudspris: "+fkontant+" kr.<br/>";
		   	 		        }
		   	 		    }
						
						tabs[emn]=new GInfoWindowTab("Bolig "+(emn+1), 
							accom+" til salg:<br/>"+
					        "Adresse: <a href='"+url+"' target='_blank'>"+adr+"</a><br/>"+
		   	  		        "Kvadratmeter: <a href='"+url+"' target='_blank'>"+kvadratmeter+"</a><br/>"+
		   	 		        "Kontant pris: <a href='"+url+"' target='_blank'>"+kontant+" kr.</a><br/>"+
		   	 		        sidenmsg);
					}
					var Point=new GLatLng(Lat, Lon);
					prior.addMarker(ID,
						createTabMarker(typ+"p"+priskat,Point,tabs));
				}
			}
		}
		cachedKort[xin*10000+yin]=true;
	}
	retrieveKort();

}



var 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);



function createForSaleMarker(type, point, msg) {
  var icon = new GIcon(baseIcon);
  icon.image = "./images/marker/Marker" + type + ".png";
  var marker = new GMarker(point, icon);
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml(msg);
  });
  return marker;
}

function createTabMarker(type, point, tabs) {
  var icon = new GIcon(baseIcon);
  icon.image = "./images/marker/Marker" + type + ".png";
  var marker = new GMarker(point, icon);
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowTabsHtml(tabs);
  });
  return marker;
}


var handleFailure = function(o){
	if(o.responseText !== undefined){
		document.getElementById("MapMessage").innerHTML = "Der opstod en fejl. Vi beklager.";
	}
}

var changeCount=0;


function updateMapLoc()
{
    changeCount--;
    if(changeCount>1)
    {
    	return;
    }
    
	if(map.getZoom()>11)
	{
					
	  if(first!=0)
	  {
	  	for(var i=0; i<kortRequest.length; i=i+1)
	  	{
	  		YAHOO.util.Connect.abort(kortRequest[i]);
	  	}
	  	reqQueue = new Queue();
	  }
				
	  first++;
	  var center = map.getCenter();
	  var lat = Math.round(center.lat() * 100 - 0.5);
	  var lon = Math.round((center.lng() * 100 - 0.5*lonStep)/lonStep)*lonStep;
	  var bounds= map.getBounds();
	  var sw=bounds.getSouthWest();
	  var ne=bounds.getNorthEast();
	  
	  var dlat=lat-Math.round(sw.lat()*100 - 1);
	  var dlon=lon-Math.round((sw.lng()*100 - lonStep)/lonStep)*lonStep;
	  
	  for(var dis=0; dis<Math.max(dlat, dlon); dis++)
	  { 
	      for(var ilat=Math.max(lat-dis,lat-dlat); 
		  		ilat<=Math.min(lat+dis,lat+dlat); ilat++)
		  {
			  for(var ilon=Math.max(Math.round((lon-dis)/2)*2, lon-dlon); 
			  	ilon<=Math.min(lon+dis, lon+dlon); ilon=ilon+lonStep)
			  {
		  	
		  		if(Math.abs(ilon-lon)+Math.abs(ilat-lat)==dis)
		  		{
			  		if(!cachedKort[ilat*10000+ilon])
			  		{
				  		var point=new GPoint(ilat, ilon);
				  		reqQueue.enqueue(point);
				  	}
			  	}
		  	}
		  }
	  }
	  retrieveKort();
	} else
	{
	  map.clearOverlays();

	  reqQueue=new Queue();
	  cachedKort=new Array();
	  Villa.clearAll();
	  Lejlighed.clearAll();
	  Raekkehus.clearAll();
	  Sommerhus.clearAll();

	  
	  document.getElementById("MapMessage").innerHTML="Klik og tr&aelig;k i kortet eller zoom "+ 
	    "med knapperne i venstre side.";
	}
}

function retrieveKort()
{
	
	var point=reqQueue.dequeue();
	if(point==undefined)
	{
		document.getElementById("MapMessage").innerHTML="Klik p&aring; mark&oslash;ren for at se mere information.";
		return;
	} else
	{
		if(!cachedKort[point.x*10000+point.y])
		{
			var sUrl="servlet/Kort.xml?lat="+point.x+"&lon="+point.y;
			var callback =
			{
			  success:handleSuccess,
			  failure:handleFailure,
			  argument: [ point.x, point.y ]
			};
			retrieving++;
			kortRequest.push(
		  		YAHOO.util.Connect.asyncRequest('GET', sUrl, callback));
		 } else
		 {
		 	retrieveKort();
		 }
	}
	return;
}
 
 

function load() {
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map"));
    map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
	GEvent.addListener(map, "moveend", function () {
	  document.getElementById("MapMessage").innerHTML="Henter data....<img src='./images/progressbar.gif' />";
	  changeCount++;
	  setTimeout('updateMapLoc()', 100);
	});

    map.setCenter(new GLatLng(56.167303495700936, 10.404052734375), 6);
	Villa=new MarkerGroup(map);
	Lejlighed=new MarkerGroup(map);
	Raekkehus=new MarkerGroup(map);
	Sommerhus=new MarkerGroup(map);
	Villa.show();
	Lejlighed.show();
	Raekkehus.show();
	Sommerhus.show();
	
	var selbox = document.getElementById("optby");
	for(var i=0; i<byer.getLength(); i++)
	{
		selbox.options[i+1] = new Option(byer.getNavn(i),'');
    }
  }
}


function pan(cityID)
{
	map.setZoom(13);
	map.panTo(new GLatLng(byer.getLat(cityID), byer.getLon(cityID)));
}

function panBy()
{
	var i=document.getElementById("optby").selectedIndex-1;
	if(i>-1)
	{
		pan(i);
	}
}

    