var map;
var _json;
var branches = [];
var radiusLng = 0.71;
var radiusLat = 0.40;
var mapIcoDefault = '/templates/skins/pekao2/img/map/marker.gif';
var mapIcoShadow = '/templates/skins/pekao2/img/map/marker-shadow.gif';
var mapIcoTmp = '/templates/skins/pekao2/img/map/empty.gif';
var numberResult = 0;
var table = '';
var directions = null;
var markers = [];
var cityMap = [];
var markerClusterer = null;

var arr = [];
var arrOut = [];
var alllatlng = [];
var latlngbounds = new GLatLngBounds( );

var geocoder;

IconPlacowka = new GIcon(G_DEFAULT_ICON);
IconPlacowka.image = '/templates/skins/pekao2/img/pib/marker-placowka.gif';
IconPlacowka.iconSize = new GSize(23,21);
IconPlacowka.iconAnchor = new GPoint(23,21);
IconPlacowka.shadow = mapIcoShadow;
IconPlacowka.shadowSize = new GSize(36, 25);

IconPartner = new GIcon(G_DEFAULT_ICON);
IconPartner.image = '/templates/skins/pekao2/img/pib/marker-partner.gif';
IconPartner.iconSize = new GSize(23,21);
IconPartner.iconAnchor = new GPoint(23,21);
IconPartner.shadow = mapIcoShadow;
IconPartner.shadowSize = new GSize(36, 25);

IconBankomat = new GIcon(G_DEFAULT_ICON);
IconBankomat.image = '/templates/skins/pekao2/img/pib/marker-bankomat.gif';
IconBankomat.iconSize = new GSize(23,21);
IconBankomat.iconAnchor = new GPoint(23,21);
IconBankomat.shadow = mapIcoShadow;
IconBankomat.shadowSize = new GSize(36, 25);

IconEuronet = new GIcon(G_DEFAULT_ICON);
IconEuronet.image = '/templates/skins/pekao2/img/pib/marker-euronet.gif';
IconEuronet.iconSize = new GSize(23,52);
IconEuronet.iconAnchor = new GPoint(23,52);
IconEuronet.shadow = mapIcoShadow;
IconEuronet.shadowSize = new GSize(36, 55);

Event.observe(window, 'load', function() {
	pibresultDiv = $('pib_result_div');
	if(pibresultDiv) {
	    pibresultDiv.show();
    }
	if($('pibMap')){
    	CenterPibMap();
    }
    geocoder = new google.maps.Geocoder();
    if($('byCity') != null) {
       	placeInfos = $$('.placeInfoContainer');
    	markerClicks = $$('a.see-on-map-click');
        markerClicks.each( function(s,index){
        	tmp = s.getAttribute("rel").split(",");
        	if(tmp[0] != 0 && tmp[1] != 0) {
				var branch = new Object();
				branch.dist = '';
				branch.cloud = placeInfos[index].innerHTML;
				branch.type = tmp[2];
				branch.lat = tmp[0];
				branch.lng = tmp[1];
				arrOut.push(branch);
        	}
        });
    	setMarkersOnMap();
    } else {
     	if($('LAT') &&  $('LNG')){
	    	var lat1 = $('LAT').value;
	    	var lng1 = $('LNG').value;
	    	placeInfos = $$('.placeInfo-hidden');
	    	markerClicks = $$('a.see-on-map-click-hidden');
	        markerClicks.each( function(s,index){
	        	tmp = s.getAttribute("rel").split(",");
	    	    cloudinfo = placeInfos[index].innerHTML;
	    	    calculateDist(lat1, lng1, tmp[0], tmp[1], tmp[3], cloudinfo, tmp[2]);
	        });
    	}
    }

    if ($('printPage') != null) {
    	placeInfos = $$('.placeInfoContainer');
    	markerClicks = $$('a.see-on-map-click');
        markerClicks.each( function(s,index){
        	tmp = s.getAttribute("rel").split(",");
        	if(tmp[0] != 0 && tmp[1] != 0) {
    		var branch = new Object();
    	   // branch.id = tmp[3];
    	    branch.dist = '';
    	    branch.cloud = placeInfos[index].innerHTML;
    	    branch.type = tmp[2];
    	    branch.lat = tmp[0];
    	    branch.lng = tmp[1];
    	    arrOut.push(branch);
        	}
        });
    	setMarkersOnMap();
    }
    searchInfoMsg = $('search_info_msg');
    if(searchInfoMsg) {
        searchInfoMsg.hide();
    }
});
Event.observe(window, 'unload', function() {
    GUnload();
});
function setMarkersOnMap() {
	for (var i=0; i<arrOut.length; i++) {
    	if(arrOut[i]) {
		    addToPibGoogleMap(arrOut[i].lat, arrOut[i].lng, arrOut[i].cloud,arrOut[i].type);
    		latlngbounds.extend( new GLatLng(arrOut[i].lat,arrOut[i].lng) );
        }
	}
    if(map!=undefined){
    	if(latlngbounds.isEmpty()) {
    		map.setCenter(new GLatLng(52.133488,19.313965), 6);
	    } else {
	    	setMaxZoom();
	    }
    	searchPIBMarkerClusterer();
    }
}

function setMaxZoom() {
	if (map.getBoundsZoomLevel( latlngbounds ) > 16) {
		map.setCenter( latlngbounds.getCenter( ), 16 );
	} else {
		map.setCenter( latlngbounds.getCenter( ), map.getBoundsZoomLevel( latlngbounds ) );
	}
}

function CenterPibMap() {
	if (GBrowserIsCompatible()) {
	  map = new GMap2(document.getElementById("pibMap"));
	  map.disableScrollWheelZoom();
	  map.setUIToDefault();
	}
}

function addToPibGoogleMap(lat,lng,info,type){
  if(map!=undefined){
    if(type == 'euronet') {
    	Icon = IconEuronet;
    }else if(type == 'bankomat') {
    	Icon = IconBankomat;
    } else if(type == 'partner') {
    	Icon = IconPartner;
    } else {
    	Icon = IconPlacowka;
    }

    if(lat && lng) {
	    var marker = new GMarker(new GLatLng(lat, lng),{icon:Icon});
	    marker.txt = info;
	    marker.type = type;
	    GEvent.addListener(marker,"click",function() {
	        marker.openInfoWindowHtml(marker.txt);
	    });
	    //map.addOverlay(marker);
  }
  }
  markers.push(marker);
 // return marker;
}

function seeOnPibMap(s) {
	tmp = $(s).getAttribute("rel").split(",");
    var point = new GLatLng(tmp[0], tmp[1]);
    map.setCenter(point, 16);
    Icon = new GIcon(G_DEFAULT_ICON);
    Icon.image = mapIcoTmp;
    //Icon.iconSize = new GSize(23,52);
    //Icon.iconAnchor = new GPoint(23,52);
    //Icon.shadow = mapIcoTmp;
    //Icon.shadowSize = new GSize(36, 55);
    var marker = new GMarker(point,{icon:Icon});
    map.addOverlay(marker);
    var _htmlText = $(s).up().select('.placeInfoContainer')[0].innerHTML;
    GEvent.addListener(marker,"click",function() {
      marker.openInfoWindowHtml(_htmlText);
    });
    marker.openInfoWindowHtml(_htmlText);
}
function ClickViewPibMap(){
	/*
    $$('a.marker_click').each(function(s, index) {
        s.observe('click', function(event){
            tmp = s.getAttribute("rel").split(",");
            var point = new GLatLng(tmp[0], tmp[1]);
            map.setCenter(point, 16);
            Icon = new GIcon(G_DEFAULT_ICON);
            Icon.image = mapIcoTmp;
            //Icon.iconSize = new GSize(23,52);
            //Icon.iconAnchor = new GPoint(23,52);
            //Icon.shadow = mapIcoTmp;
            //Icon.shadowSize = new GSize(36, 55);
            var marker = new GMarker(point,{icon:Icon});
            map.addOverlay(marker);
            var _htmlText = s.up().select('.placeInfo')[0].innerHTML;
            GEvent.addListener(marker,"click",function() {
              marker.openInfoWindowHtml(_htmlText);
            });
            marker.openInfoWindowHtml(_htmlText);
        });
    });
    */
}

//wersja z markerclusterer
function searchPIBMarkerClusterer() {
    if (markerClusterer != null) {
	    markerClusterer.clearMarkers();
	}
	var zoom = 19;
	var size = 40
	zoom = zoom == -1 ? null : zoom;
	size = size == -1 ? null : size;
	markerClusterer = new MarkerClusterer(map, markers, {maxZoom: zoom, gridSize: size});
}


function addHereIAm(){
	if($('LAT') != null && $('LNG') != null && $('LAT').value != null && $('LAT').value != "" && $('LNG').value != null && $('LNG').value != "") {
	  if(map!=undefined){
	    Icon = new GIcon(G_DEFAULT_ICON);
		var marker = new GMarker(new GLatLng($('LAT').value, $('LNG').value),{icon:Icon});
		map.addOverlay(marker);
		GEvent.addListener(marker,"click",function() {
			marker.openInfoWindowHtml("Tu jesteś");
		});
		var point = new GLatLng($('LAT').value, $('LNG').value);
		alllatlng.push(point);
	  }
	  return marker;
	}
}

function calculateDist(lat1, lng1, lat2, lng2, id, cloud, type) {
	var directionsService = new google.maps.DirectionsService();
    var origin1 = new google.maps.LatLng(lat1,lng1);

    var destination1 = new google.maps.LatLng(lat2,lng2);

	   var request = {
	       origin: 	origin1,
	       destination: destination1,
	       travelMode: google.maps.DirectionsTravelMode.WALKING
	   };

	   directionsService.route(request, function(response, status) {
	      if (status == google.maps.DirectionsStatus.OK) {
	         var dist = response.routes[0].legs[0].distance.value/1000;
	         createBranch(id, dist, cloud, type, lat2, lng2);
	         if(arr.length == PLACES_COUNT) {
	         	calc();
	        	addHereIAm();
	        	setMarkersOnMap();
	         }
	      }
	   });

}

function getPIBSearchResult(arrOut) {
	if ($('searchType') != null) {
		var type = $('searchType').value;
	}
	if ($('printPath') != null) {
		var printPath = $('printPath').value;
	}
	if ($('folderId') != null) {
		var folderId = $('folderId').value;
	}
	var ids = '';
	var dists = '';

	for (var i = 0; i<arrOut.length; i++) {
		if (arrOut[i] != null) {
			ids +=  arrOut[i].id + ';';
			dists += arrOut[i].dist + ';';
		}
	}
	new Ajax.Request('/htmlresp?app=Pekao2&pname=PIBSearch&type='+type+'&id='+ids+'&dist='+dists+'&folderId='+folderId+'&printPath='+printPath,
	  {
	    method:'get',
	    onSuccess: function(transport){
	      var response = transport.responseText || "no response text";
	      $('branch-list').insert({bottom: response});
	          hideShowLinks();
	          ClickViewPibMap();
	    }
	  });
}

function compare(a,b) {
	  if (a.dist == null || a.dist == "")
		  return -1;
	  if (b.dist == null || b.dist == "")
		  return 1;
	  if (a.dist < b.dist)
	     return -1;
	  if (a.dist > b.dist)
	    return 1;
	  return 0;
}

function calc() {
	arr.sort(compare);
	if(LIMIT_PLACES) {
		limit = 3;
	} else {
		limit = arr.size();
	}
	for (var i=0; i<limit; i++) {
		arrOut.push(arr[i]);
	}
	getPIBSearchResult(arrOut);
}

function createBranch(id, dist, cloud, type, lat, lng) {
    if(lat != 0 && lng != 0) {
		var branch = new Object();
	    branch.id = id;
	    branch.dist = dist;
	    branch.cloud = cloud;
	    branch.type = type;
	    branch.lat = lat;
	    branch.lng = lng;
	    arr.push(branch);
    }
}


