var styles = [ { "stylers": [ { "saturation": -100 }, { "lightness": 18 } ] } ];
var map;
var markerspolice = [];
var markersbus_station = [];
var markerscafe = [];
var markersfood = [];
var markersdoctor = [];
var markersgrocery_or_supermarket = [] ;
var markerspark = [];
var markersparking = [];
var markerspost_office = [];
var markersschool = [];
var markerssubway_station = [];
var markersmovie_theater = [];

$(document).ready(function(){
    if($('#map_canvas').length){
        map = displayGoogleMap();
    }
    
    $('.poiMarkers .poiIcon').click(function() {
        if($(this).hasClass('current')){
            $(this).removeClass('current');
            switch ($(this).data('poi')) {
                case 'bus_station':
                    jQuery.each(markersbus_station,function( i, val ) {
                        val.setMap(null);
                    });
                    markersbus_station = [];
                    break;
                case 'police':
                    jQuery.each(markerspolice,function( i, val ) {
                        val.setMap(null);
                    });
                    markerspolice = [];
                    break;
                case 'cafe':
                    jQuery.each(markerscafe,function( i, val ) {
                        val.setMap(null);
                    });
                    markerscafe = [];
                    break;
                case 'food':
                    jQuery.each(markersfood,function( i, val ) {
                        val.setMap(null);
                    });
                    markersfood = [];
                    break;
                case 'doctor':
                    jQuery.each(markersdoctor,function( i, val ) {
                        val.setMap(null);
                    });
                    markersdoctor = [];
                    break;
                case 'grocery_or_supermarket':
                    jQuery.each(markersgrocery_or_supermarket,function( i, val ) {
                        val.setMap(null);
                    });
                    markersgrocery_or_supermarket = [];
                    break;
                case 'park':
                    jQuery.each(markerspark,function( i, val ) {
                        val.setMap(null);
                    });
                    markerspark = [];
                    break;
                case 'parking':
                    jQuery.each(markersparking,function( i, val ) {
                        val.setMap(null);
                    });
                    markersparking = [];
                    break;
                case 'post_office':
                    jQuery.each(markerspost_office,function( i, val ) {
                        val.setMap(null);
                    });
                    markerspost_office = [];
                    break;
                case 'school':
                    jQuery.each(markersschool,function( i, val ) {
                        val.setMap(null);
                    });
                    markersschool = [];
                    break;
                case 'subway_station':
                    jQuery.each(markerssubway_station,function( i, val ) {
                        val.setMap(null);
                    });
                    markerssubway_station = [];
                    break;
                case 'movie_theater':
                    jQuery.each(markersmovie_theater,function( i, val ) {
                        val.setMap(null);
                    });
                    markersmovie_theater = [];
                    break;
            }

        }else{
            $(this).addClass('current');

            var POIcenter = new google.maps.LatLng(map.getCenter().lat(), map.getCenter().lng());
            var request = {
                location: POIcenter , 
                radius: 3000,  
                rankby:'distance',
                types: [$(this).data('poi')]   
            };
            infowindow = new google.maps.InfoWindow();
            var service = new google.maps.places.PlacesService(map);
            if($(this).data('poi')==undefined)
                var icon = '';
            else
                var icon = $(this).data('poi');

            service.nearbySearch(request, function(results, status, next_page_token){
                callback(results, status,icon,next_page_token);
            });

        }		
	});
    
});

function createMarker(place,icon) {
	var placeLoc = place.geometry.location;
	if(icon!='')
		var marker = new google.maps.Marker({
			map: map,
			icon: new google.maps.MarkerImage('uploads/template/img/poi/'+icon+'.png', new google.maps.Size(47, 85, "px", "px")),
			position: place.geometry.location
		});
	else
		var marker = new google.maps.Marker({
			map: map,
			position: place.geometry.location
		});
	
	switch (icon) {
		case 'bus_station':
			if($('.bus_station').hasClass('current'))
				markersbus_station.push(marker);
			
			break;
		case 'police':
			if($('.police').hasClass('current'))
				markerspolice.push(marker);
				
			break;
		case 'cafe':
			if($('.cafe').hasClass('current'))
				markerscafe.push(marker);
				
			break;
		case 'food':
			
			if($('.food').hasClass('current'))
				markersfood.push(marker);
				
			break;
		case 'doctor':
			if($('.doctor').hasClass('current'))
				markersdoctor.push(marker);
				
			break;
		case 'grocery_or_supermarket':
			if($('.grocery_or_supermarket').hasClass('current'))
				markersgrocery_or_supermarket.push(marker);
				
			break;
		case 'park':
			if($('.park').hasClass('current'))
				markerspark.push(marker);
				
			break;
		case 'parking':
			if($('.parking').hasClass('current'))
				markersparking.push(marker);
				
			break;
		case 'post_office':
			if($('.post_office').hasClass('current'))
				markerspost_office.push(marker);
				
			break;
		case 'school':
			if($('.school').hasClass('current'))
				markersschool.push(marker);
				
			break;
		case 'subway_station':
			if($('.subway_station').hasClass('current'))
				markerssubway_station.push(marker);
				
			break;
		case 'movie_theater':
			if($('.movie_theater').hasClass('current'))
				markersmovie_theater.push(marker);
				
			break;
	}
	
    
	var ttt = google.maps.event.addListener(marker, 'click', function() {
		infowindow.setContent(place.name);
		infowindow.open(map, this);
	});
    
	return marker;
	
}


function makeRouteMarker( position, icon, title ) {
    new google.maps.Marker({
        position: position,
        map: map,
        icon: icon,
        title: title
    });
}

function calcRoute(start, end, panelObj) {
    var request = {
        origin: start,
        destination: end,
        provideRouteAlternatives: true,
        travelMode: google.maps.DirectionsTravelMode.DRIVING
    };
    directionsService.route(request, function (response, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            directionsDisplay.setDirections(response);
            var leg = response.routes[ 0 ].legs[ 0 ];
            //makeRouteMarker( leg.start_location, icons.start, "title" );
            makeRouteMarker( leg.end_location, 'uploads/template/img/g_map_marker.png', '' );
            panelObj.find('#placeGooglemaps').val(panelObj.find('#placeGooglemaps').val() + ' ' + response.routes[0].legs[0].distance.text);
        }
    });
}	

/* WYŚWIETLA MAPĘ GOOGLE NA STRONIE GŁÓWNEJ */
function displayGoogleMap(){
    
    var styledMap = new google.maps.StyledMapType(styles, {name: "Styled Map"});
    var zoom = gmap_params['zoom'];
    var handler = gmap_params['handlerUrl'];
   
    var lat = parseFloat(gmap_params['center_lat']);
    var lng = parseFloat(gmap_params['center_long']);
    var latlng = new google.maps.LatLng(lat, lng);
    
    
    var myOptions = {
      zoom: zoom,
      center: latlng,
      scrollwheel: false,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById('map_canvas'),myOptions);
    
    map.mapTypes.set('map_style', styledMap);
    map.setMapTypeId('map_style');

    if($('#map_canvas').siblings('#gmapPanel').length) {
        panelObj = $('#map_canvas').siblings('#gmapPanel');
        panelObj.find('#submitGooglemaps').click(function() {
            var to = panelObj.find('#placeGooglemaps').val();
            calcRoutResult = calcRoute(latlng, to, panelObj);            
        });
    }    
    
    infoWindowContent = Array();
    
    var infoWindow = new google.maps.InfoWindow(), marker, i;
    var bounds = new google.maps.LatLngBounds();
    markers = new Array;
    //gmap_params['markers'].each(function()
    for(i=0; i < gmap_params['markers'].length; i++){
        
        var lat2 = parseFloat(gmap_params['markers'][i]['lat']);
        var lng2 = parseFloat(gmap_params['markers'][i]['long']);
        var latlng2 = new google.maps.LatLng(lat2, lng2);
        
        var marker = new google.maps.Marker({
            position: latlng2,
            icon: 'uploads/template/img/g_map_marker_'+gmap_params['markers'][i]['icon']+'.png',
            id: gmap_params['markers'][i]['id'],
            map: map
        });
        
        bounds.extend(marker.position);
        
        if(gmap_params['markers'][i]['infowindow']){
            google.maps.event.addListener(marker, 'click', (function(marker, i) {
                return function() {
                    if(marker['id']){
                        var url = handler;
                        $.ajax({
                            type: 'POST',
                            url: url,
                            cache: false,
                            dataType: 'json',
                            data: {id:marker['id']},
                            success: function(data){
                                if(data.result==='ok'){                                    
                                    infoWindowContent = data.offer;
                                    infoWindow.setContent(infoWindowContent);
                                    infoWindow.open(map, marker);
                                }
                            }
                        });

                        
                    }
                };
            })(marker, i));
        }
        markers.push(marker);
        
    }
    
    if (markers.length > 1) {
        var clusterStyles = [
            {
                textColor: 'white',
                url: 'uploads/template/img/gmap_group1.png',
                height: 100,
                width: 47
            },
            {
                textColor: 'white',
                url: 'uploads/template/img/gmap_group2.png',
                height: 100,
                width: 47
            },
            {
                textColor: 'white',
                url: 'uploads/template/img/gmap_group3.png',
                height: 100,
                width: 47
            }
        ];

        var mcOptions = {gridSize: 50, maxZoom: 15, styles: clusterStyles};
        var mc = new MarkerClusterer(map, markers, mcOptions);
    }
    
    
    if(gmap_params['markers'].length > 1){
        map.fitBounds(bounds);
    }
    
    directionsDisplay.setMap(map);
    
    return map;
}


function callback(results, status, icon,next_page_token) {
    
	if (status == google.maps.places.PlacesServiceStatus.OK) {
        
		for (var i = 0; i < results.length; i++) {
            
			var qqqq = createMarker(results[i],icon);
            
		}      
	} 
	
	
	if (next_page_token.hasNextPage){
		setTimeout(function(){
			var flag = false;
			switch (icon) {
				case 'bus_station':
					if($('.bus_station').hasClass('current')){
						flag = true;
					}
					break;
				case 'police':
					if($('.police').hasClass('current')){
						flag = true;
					}
					break;
				case 'cafe':
					if($('.cafe').hasClass('current')){
						flag = true;
					}
					break;
				case 'food':

					if($('.food').hasClass('current')){
						flag = true;
					}
					break;
				case 'doctor':
					if($('.doctor').hasClass('current')){
						flag = true;
					}
					break;
				case 'grocery_or_supermarket':
					if($('.grocery_or_supermarket').hasClass('current')){
						flag = true;
					}
					break;
				case 'park':
					if($('.park').hasClass('current')){
						flag = true;
					}
					break;
				case 'parking':
					if($('.parking').hasClass('current')){
						flag = true;
					}
					break;
				case 'post_office':
					if($('.post_office').hasClass('current')){
						flag = true;
					}
					break;
				case 'school':
					if($('.school').hasClass('current')){
						flag = true;
					}
					break;
				case 'subway_station':
					if($('.subway_station').hasClass('current')){
						flag = true;
					}
					break;
				case 'movie_theater':
					if($('.movie_theater').hasClass('current')){
						flag = true;
					}
					break;
			}
			
			if(flag)
				next_page_token.nextPage();
            
		},3000);
        
	}

}
    $(document).ready(function() {
	$("#cookie-info span").click(function() {
		var date = new Date();
		date.setTime(date.getTime()+(180*24*60*60*1000));
		document.cookie = "cookie_message_shown=1;expires="+date.toGMTString()+";path=/;";
		$("#cookie-info").fadeOut();
		
		return false;
	});
});