/*
 * this script is responsible for Google Point Of Interests
 */
 
$(document).ready(function() {
  MEDIA_URL = $("#media_url")[0].value /* could be global - only string and quite useful */
  
  /* RynekPierwotny Point of interests config */
  RPConfig = new Object(); /* must be global */
  RPConfig['poi_banks'] = {'query':'bank OR bankomat OR restauracja OR poczta OR urząd','image':'bank.png'};
  RPConfig['poi_schools'] = {'query':'szkoła OR żłobek OR przedszkole OR gimnazjum OR wyższka szkoła', 'image':'school.png'};
  RPConfig['poi_cultures'] = {'query':'kino OR teatr  OR muzeum OR biblioteka OR galeria handlowa  OR obiekt zabytkowy OR kościół', 'image':'culture.png'};
  RPConfig['poi_sports'] = {'query':'basen OR pływalnia OR hala sportowa OR boisko OR kort tenisowy OR stadnina koni OR centrum sportowe OR klub fitness', 'image':'sport.png'};
  RPConfig['poi_healths'] = {'query':'przychodnia OR klinika OR szpital OR apteka', 'image':'health.png'};
  RPConfig['poi_communications'] = {'query':'lotnisko OR dworzec kolejowy OR stacja metra OR przystanek pks OR postój taksówek OR przystanek autobusowy', 'image':'communication.png'};

  for (var dictionary in RPConfig) {
    if(RPConfig.hasOwnProperty(dictionary)) {
        var icon_data = new Object();
        var url_icon = MEDIA_URL+"img/poi_icons/"+RPConfig[dictionary]['image'] ;
        icon_data['iconImage'] = url_icon;
        icon_data['iconSize'] = new GSize(24,28);
        RPConfig[dictionary]['gicon'] =  Mapifies.createIcon(icon_data);
    }
  }

  function getMarker(data) {
    var marker_data =  {};
    marker_data['pointIcon'] = RPConfig[data['poi_type']]['gicon'];
    marker_data['pointLatLng'] = [data['lat'], data['lng']];
    marker_data['pointTitle'] = data['titleNoFormatting'];
    Mapifies.AddMarker('.advertMapContainer', marker_data, function (marker) {
      PMarkers[data['poi_type']].push(marker);
    });
  }
  function getMarkerPOI(data, icon) {
    var marker_data =  {};
    marker_data['pointIcon'] = RPConfig[icon]['gicon'];
    marker_data['pointLatLng'] = [data['latitude'], data['longitude']];
    marker_data['pointTitle'] = data['titleNoFormatting'];
    marker_data['pointTitle'] = data['name'];
    Mapifies.AddMarker('.advertMapContainer', marker_data, function (marker) {
        var mouseover = $('.point-mouseover', this).html();
        GEvent.addListener(marker, "mouseover", function(e) {
            jQuery.ajax({
                url:'/i/poi/html/'+data.id+'/', success:function(html){mouseover = html;}, async:false
            });

            var point = gMap.fromLatLngToContainerPixel(e);
            var cssobj = getTooltipCoordinates(point);
            $('#tooltipGMarkerCLick').css(cssobj);
            showTooltipGMarker(mouseover);
        });
        GEvent.addListener(marker, "mouseout", function (e) {
            hideTooltipGMarkerSmooth();
        });
      PMarkers['poi_schools'].push(marker);
    });
  }

  $('input:checkbox').click(function () 
    {
      poi_checkbox=$(this);
      checkbox = poi_checkbox[0];
      if ($(this).is(":checked")) {
        sc.execute(RPConfig[checkbox.id]['query']);  
      } else {
        RPhideMarkers(checkbox.id);
      };
      
    }
  );

  function RPhideMarkers(poiType) {
    jQuery.map(PMarkers[poiType], function () {
      var marker = PMarkers[poiType].pop();
      Mapifies.RemoveMarker('.advertMapContainer',marker);
  
    });
  };

  google.search.Search.getBranding(document.getElementById("branding"));
  var gMap = Mapifies.MapObjects.Get('.advertMapContainer');
  //gMap.addControl(new google.maps.SmallMapControl());
  gMap.addControl(new google.maps.MapTypeControl());
  gLocalSearch = new google.search.LocalSearch();
  gLocalSearch.setCenterPoint(gMap);
  sc = new google.search.SearchControl();
  sc.addSearcher(gLocalSearch);
  sc.setSearchCompleteCallback(null, OnLocalSearch);
  sc.setResultSetSize(google.search.Search.LARGE_RESULTSET)
  sc.draw(document.getElementById("google_poi_search"));
  PMarkers = new Object();
  PMarkers['poi_schools'] = [];
  PMarkers['poi_banks'] = [];
  PMarkers['poi_cultures'] = [];
  PMarkers['poi_sports'] = [];
  PMarkers['poi_healths'] = [];
  PMarkers['poi_communications'] = [];
  //GEvent.addListener(gMap, "moveend", function() {
   
  //});
  function OnLocalSearch() {
    var checkbox = $(this)[0].checkbox;
    var poi_type = checkbox.id;

    var gr = gLocalSearch.resultViewport;
    var url = '/i/poi/json/?swLat='+gr.sw.lat+'&swLng='+gr.sw.lng+'&neLat='+gr.ne.lat+'&neLng='+gr.ne.lng+'&poi_type='+poi_type;

    if (!gLocalSearch.results) return;

    for (var i = 0; i < gLocalSearch.results.length; i++) {
      gLocalSearch.results[i]['poi_type'] = poi_type;  
      getMarker(gLocalSearch.results[i]);
    }


    // Get local points
    var _local_data;
    $.ajax({
        type: 'GET',
        url: url.toString(),
        dataType: 'json',
        success: function(data) {
            _local_data = data;
        },
        data: {},
        async: false
    });

    for (var i = 0; i < _local_data.length; i++) {
        getMarkerPOI(_local_data[i], poi_type);
    };


  }

  
});



