var APP_PATH = "../";
var map;
var icon;

function initIcon() {
   icon = new GIcon();
   icon.image = "/static/blaude/img/geo/flag.png";
   icon.shadow = "/static/blaude/img/geo/flag_shadow.png";
   icon.iconSize = new GSize(25, 31);
   icon.shadowSize = new GSize(25, 31);
   icon.iconAnchor = new GPoint(1, 32);
   icon.infoWindowAnchor = new GPoint(1, 0);
 
}

function createCurrentLocation() {
	return createMarker(userLoc,'Ihr Standort', '', userLocDesc, null);
}

function createMarker(point, category, name, address, icon) {
   if(icon!==null){
      var marker = new GMarker(point,icon);
   }else{
      var marker = new GMarker(point);
   }       
   GEvent.addListener(marker, "click", function() {
   marker.openInfoWindowHtml("<strong>" + category + " " + name + "</strong><p>" + address + "</p>");
   });      

   return marker;
}

function initMap() {
   	map = new GMap2(document.getElementById("map"));                 
  	map.addControl(new GSmallMapControl());
   	map.addControl(new GMapTypeControl());
   	map.setCenter(userLoc, 16);
   	map.addOverlay(createCurrentLocation());
}

function positionMap(point) { 
   while(!(map.getBounds()).contains(point)) {
      map.zoomOut();          
   }      
}

function centerMerchant(point) {
    if (map.getBounds().contains(point)) {
		map.panTo(point);
	}
	else {
		map.setCenter(point, 16);
		positionMap(userLoc);
	}
}

function load() {
  if (GBrowserIsCompatible()) {
     initMap();
     initIcon();
            
     //var flag=0; --> first load
     GDownloadUrl(APP_PATH + "app?service=MerchantGeo&seed=" + Math.random(),function(data) {  
        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName("marker");
        var merchantPoint = userLoc;
        for (var i = 0; i < markers.length; i++) {
           var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng")));
           var address =  markers[i].getAttribute("address");
           var name =  markers[i].getAttribute("name");
           var category =  markers[i].getAttribute("category");
           map.addOverlay(createMarker(point, category, name, address, icon));
           if (i == 2) {
              merchantPoint = point;                  
           }
        }
        positionMap(merchantPoint);

        GEvent.addListener(map, "moveend", function() {
           //load xml file with coordinates at runtime, if moving the map ends
           //how to transmit the following parameters to serverside service?
           var swLat = map.getBounds().getSouthWest().lat();
           var swLng = map.getBounds().getSouthWest().lng();
           var neLat = map.getBounds().getNorthEast().lat();
           var neLng = map.getBounds().getNorthEast().lng();
           //var flag=1; --> search geocodes for bounds

           GDownloadUrl(APP_PATH + "app?service=MerchantGeo&swLng=" + swLng + "&swLat=" + swLat + "&neLng=" + neLng + "&neLat=" + neLat, function(data) {
              var xml = GXml.parse(data);                
              map.clearOverlays();                
              map.addOverlay(createCurrentLocation());
              var markers = xml.documentElement.getElementsByTagName("marker");
             
              for (var i = 0; i < markers.length; i++) {
                 var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),parseFloat(markers[i].getAttribute("lng")));        
                 var address =  markers[i].getAttribute("address");
           		 var name =  markers[i].getAttribute("name");
           		 var category =  markers[i].getAttribute("category");
                 map.addOverlay(createMarker(point, category, name, address, icon));                   
              }
           });
       });	        
     });
  }
}
