/*
 Copyright TriSoft Technologies. All rights reserved.
 Web: http://www.trisoft-tech.cz
*/

var GMaps = new Class({

  map: null,
  initialize:  function() {

  var listener_onclick = null;
  var map_markers = {};
  var location = "";
  var elMsg;
  var elMap = $('map');
  var defLat = 49.8;
  var defLng = 15.4;
  var defZoom = 7;
  
  if (elMap) {
      if (!GBrowserIsCompatible()) {
        return null;
      }
      
      this.map = new GMap2(elMap);
      //this.map.setCenter(new GLatLng(c);
      this.map.addControl(new GLargeMapControl());
      this.map.addControl(new GMapTypeControl());
      window.addEvent("unload", function(){GUnload();});
      
      var tinyIcon = new GIcon();
      tinyIcon.image = "/img/map/icon-1.png";
      tinyIcon.shadow = "/img/map/shadow.png";
      tinyIcon.iconSize = new GSize(32, 32);
      tinyIcon.shadowSize = new GSize(50, 30);
      tinyIcon.iconAnchor = new GPoint(16, 32);
      tinyIcon.infoWindowAnchor = new GPoint(16, 2);
      
      markerOptions = { icon:tinyIcon };
    
      $(document.body).adopt(
  			$$([
  				elMsg = new Element("div", {id: "lblMessage"}),
  			])
		  );
		  
		  /*
      elMsg.setStyles({"display":"block","position":"absolute","background":"#ccc","border":"1px solid #999999","color":"#fff","width":"300px","opacity":"0.9","padding":"30px"})
      elMsg.addClass('center');
      elMsg.set('html','Načítají se data, moment prosím.');
      */
      
      if (elMap.get("title") && elMap.get("title").length>0) {
        var params = elMap.getProperty('title').split(':');
        elMap.setProperty('title','');
        if ( !params[2] ) params[2]="";
        if ( !params[3] ) params[3]="";
        
        this.map.setCenter(new GLatLng(params[0],params[1]), parseInt(params[2]));
     	  
     	  if ( location != params[3] ) {
          location=params[3];
          requestMarkers(params[3]);   
        } 
      } else {
        this.map.setCenter(new GLatLng(defLat,defLng),defZoom);
      }       
            
      $$('.map-move-to').each(function(el,i) {
          el.addEvent('click',function() { 
            var params = el.getProperty('title').split(':');
            if ( !params[2] ) params[2]="";
            if ( !params[3] ) params[3]="";
            
            gmaps.map.setCenter(new GLatLng(params[0],params[1]), parseInt(params[2]));
         	    
            if ( location != params[3] ) {
              location=params[3];
              removeAllMapMarkers();
              map_markers.empty();
              requestMarkers(params[3]);   
              }
           })
      });
    }
  
    function requestMarkers(params) {
      var myJSON = new Request.JSON({url: ("/maps-json.aspx?" + params),
        onComplete: function(obj){
        map_markers = obj;
        createMapMarkers();
        }}).send();
    }

    function createMarker(point, index) {
      var marker = new GMarker(point, markerOptions);
      GEvent.addListener(marker, "click", markerOnClick);
      return marker;
    }
    
    function createMapMarkers() {
      var marker;
      for (var i = 0; i<map_markers.length; i++) {
        tinyIcon.image = "/img/map/icon-"+map_markers[i]["t"]+".png";
        marker = createMarker(new GLatLng(map_markers[i]["lat"], map_markers[i]["lng"]),i);
        map_markers[i].marker = marker;
        gmaps.map.addOverlay(marker);
      }    
      return null;
    }

    function removeAllMapMarkers() {
      for (var i = 0; i<map_markers.length; i++) {
        gmaps.map.removeOverlay(map_markers[i].marker);
      }    
      map_markers.empty();
      return null;
    }
    
    function findMapMarker(marker) {
      for (var i=0; i<map_markers.length; i++) {
        if (map_markers[i].marker == marker) return map_markers[i];
      }    
      return null;
    }
    
    function markerOnClick(latlng) {
      var marker = findMapMarker(this);
      
      var form = '<div class="left">';
      
      form += '<div class="mb10" style="width:280px;">';
      if ( marker.p != '' ) {
        form += '<img src="' + marker.p + '" width="120" height="90" alt="Foto" title="Foto" class="photo mb5" /><br />';
      }
      //form += '<img src="/img/icon/theme_def/user_head.gif" width="16" height="16" alt="Foto" title="Foto" class="middle" />' + marker.n+'<br />';
      form += marker.n+'<br />';
      if ( marker.m != '' ) {
        form += '<b>Vzkaz:</b> ' + marker.m + '<br />';
      }
      form += '</div>';
      
      form += '</div>';
      
      this.openInfoWindowHtml(form);
    }
    
    function buildImagePath(id) {
       return (Math.floor(id/1e6)+'').padLeft('0',3) + '/' + (Math.floor(id/1e3)+'').padLeft('0',3) + '/' + id.substring(id.length-3,id.length-2);  
    }
    
    function markerOnClickInput(latlng) {
      var marker = findMapMarker(this);
      var form = '<div>';
      form += '<p><label for="title"></label><input id="title" type="text" value="'+marker.t+'" /></p>';
      form += '<p><label for="desc"></label><textarea id="desc" rows="3" cols="30">'+marker.d+'</textarea></p>';
      form += '<p style="text-align:right"><a href="javascript:void(0);" onclick="removeUserMarker(\''+marker.id+'\');"></a></p></div>';
      this.openInfoWindowHtml(form);
    }
  },
  
    showDetailInfo: function(id,lat,lng) {
      var detail = $('detail');
      detail.set('html','<img src="/img/load_32x32_blue.gif" width="32" height="32" class="padt2" alt="" title="" />');
      detail.load('/detail-small.aspx?aid=' + id);
      return true;
    },
    
    findLocation: function(street,city,country,form) {
      gmaps.map.clearOverlays();
      
      var tinyIcon = new GIcon();
      tinyIcon.image = "/img/map/icon-empty-green.png";
      tinyIcon.shadow = "/img/map/shadow.png";
      tinyIcon.iconSize = new GSize(32, 32);
      tinyIcon.shadowSize = new GSize(50, 30);
      tinyIcon.iconAnchor = new GPoint(16, 32);
      tinyIcon.infoWindowAnchor = new GPoint(16, 2);
      
      markerOptions = { icon:tinyIcon };
      GEvent.addListener(gmaps.map,"click",locationOnClick);
      
      var myHtml = "<div class=\"center mt15\">Kliknutím na mapu umístíte novou pozici ikony.<br /><br /><input type=\"button\" class=\"button\" name=\"Confirm\" value=\"Potvrdit pozici\" onclick=\"CommitLocation(form);\" /></div>";
      var query;
      
      if (street!='') {
        query = street+', '+city+', '+country;
      } else {
        query = city+', '+country;
      }
      
      
      var geocoder = new GClientGeocoder();
      
      /*
      geocoder.getLatLng(
        query,
        function(point) {
          if (!point) {
            alert("Adresa '" + query + "' nebyla nalezena.");
          } else {
            gmaps.map.setCenter(point, 16);
            alert(geocoder);
            form.lng.value=point.x;
            form.lat.value=point.y;
            gmaps.marker = new GMarker(point, markerOptions);
            gmaps.map.addOverlay(gmaps.marker);
            //var myHtml = "<div class=\"center mt15\">Kliknutím na mapu umístíte novou pozici ikony.<br /><br /><input type=\"button\" class=\"button\" name=\"Confirm\" value=\"Potvrdit pozici\" onclick=\"CommitLocation(form);\" /></div>";
            gmaps.marker.openInfoWindowHtml(myHtml);
          }
        }
      );
      */
      
      geocoder.getLocations(query, addAddressToMap);

      function getPostalCode(theObj){
        var output='';
        if(theObj.constructor == Array || theObj.constructor == Object) {
          for(var p in theObj){
            if(theObj[p].constructor == Array|| theObj[p].constructor == Object){
              if ( p=='PostalCode' ) {
                output += theObj[p].PostalCodeNumber;
              } else {
                output += getPostalCode(theObj[p]);
              }
            }
          }
          return output;
        }
      }

      function addAddressToMap(response) {
        gmaps.map.clearOverlays();
        if (!response || response.Status.code != 200) {
          alert("Promiňte, zadané město a ulice nebyla nalezena.");
        } else {
          place = response.Placemark[0];
          point = new GLatLng(place.Point.coordinates[1],
                              place.Point.coordinates[0]);
          form.lng.value=point.x;
          form.lat.value=point.y;
          form.zip.value=getPostalCode(place);
          //alert("Adresa: " + place.address);
          
          gmaps.map.setCenter(point, 16);
          var marker = new GMarker(point, markerOptions);
          gmaps.map.addOverlay(marker);
          var myHtml = "<div class=\"center mt15\">Kliknutím na mapu umístíte novou pozici<br />ikony ve vybrané lokalitě.<br /><br /><input type=\"button\" class=\"button\" name=\"Confirm\" value=\"Potvrdit pozici\" onclick=\"CommitLocation(form);\" /></div>";
          marker.openInfoWindowHtml(myHtml);
        }
      }
      
      function locationOnClick(overlay,point) {
        if (point) {
          gmaps.map.clearOverlays();
          form.lng.value=point.x;
          form.lat.value=point.y;
          var marker = new GMarker(point, markerOptions);
          gmaps.map.addOverlay(marker); 
          var myHtml = "<div class=\"center mt15\">Kliknutím na mapu umístíte novou pozici<br />ikony ve vybrané lokalitě.<br /><br /><input type=\"button\" class=\"button\" name=\"btnConfirm\" value=\"Potvrdit pozici\" onclick=\"CommitLocation();\" /></div>";
          this.openInfoWindow(point, myHtml);
        }
      }
      
      /*
      function markerOnClick(latlng) {
        var marker = findMapMarker(this);
        
        var form = '<div class="left">';
        
        form += '<img src="/img_k/foto/mnail/';
        if (marker.i=="0") {
          form += '0.gif';
        } else {
          form += buildImagePath(marker.i)+'/'+(marker.i+'').padLeft('0',6)+'.jpg';
        }
          
        form += '" width="80" height="60" alt="" title="" class="photo" /><br />';
  
        form += '<div class="mb10">';
        form += marker.u+'<br />';
        form += marker.o+' '+marker.c;
        form += '</div>';
        
        form += 'ID#: '+marker.id+' ('+marker.k1+')<br />';
        form += marker.k2+', ' + marker.p + '<br />';
        form += marker.t+', '+marker.m+'<br />';
        form += '<br />';
  
        form += '<p class="center"><a href="javascript:showDetailInfo('+marker.id+','+marker.lat+','+marker.lng+');">více informací</a>';
        form += ' &nbsp;&nbsp; <a href="/detail.aspx?aid='+marker.id+'">úplný detail</a></p>';
        form += '</div>';
        
        this.openInfoWindowHtml(form);
      }
      */
    }

});
var gmaps;
function showDetailInfo(id,lat,lng) { gmaps.showDetailInfo(id,lat,lng);};
window.addEvent("domready", function(){ gmaps = new GMaps();});
