jQuery.fn.reverse = function() {return this.pushStack(this.get().reverse(), arguments);};
var markers = {};
var infowindow;

function highlight($r){ $('.result.active').removeClass('active'); if($r){ $r.addClass('active'); }}
function loadMap(results, app, media_url, clat, clon, icon_conf){
    var $mapdiv = $(unescape("%3Cdiv%20id%3D%22mapdiv%22%3E%3C/div%3E")).appendTo('.col2');

    var zoom = 11;
    var bounds = new google.maps.LatLngBounds;
    results.each(function(){
        var $r = $(this);
        var lat = parseFloat($r.find('.lat').text());
        var lon = parseFloat($r.find('.lon').text());
        if(lat && lon){
            bounds.extend(new google.maps.LatLng(lat,lon));
        }
    });
    var center = bounds.getCenter();

	var opts = {
	  center: center,
	  zoom: zoom,
	  mapTypeId: google.maps.MapTypeId.ROADMAP,
	  navigationControl: true,
	  navigationControlOptions: {style: google.maps.NavigationControlStyle.DEFAULT},
	  mapTypeControl: true,
	  mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
	  scaleControl: false
	};

    var map = new google.maps.Map($mapdiv.get(0), opts);
	map.fitBounds(bounds);
	if(map.getZoom() > 11){
		map.setZoom(11);
	}

    results.reverse().each(function(i){
        i = results.length - 1 - i;
        var $r = $(this);
		var lat = parseFloat($r.find('.lat').text());
		var lon = parseFloat($r.find('.lon').text());
        var text = $r.html();

        if(icon_conf.scheme == 'distance'){
            var icon_name = (Math.floor(i/10)+1);
        } else {
            var icon_name = $r.hasClass('premium')?'premium':'simple';
        }
		var image = media_url  + '/map/' + icon_name + '.png';

		var marker = new google.maps.Marker({
			position: new google.maps.LatLng(lat, lon),
			icon: image,
			map: map
		});
        markers[$r.attr('id')] = marker;

		google.maps.event.addListener(marker, 'click', function() {
			if (infowindow) infowindow.close();
			infowindow = new google.maps.InfoWindow({content: text, maxWidth: 300});
			infowindow.open(map, marker);
            highlight($r);
		});
    });
};

$(document).ready(function(){
    $('input:text:first').focus();
    var $results = $('.result');
    if($results.length){
        loadMap($results, app, media_url, lat, lon, icon_conf);
        $('.pin img').hover(function(){
            $(this).addClass('active');
        },
        function(){
            $(this).removeClass('active');
        });
        $('.pin img').click(function(){
            var $r = $(this).parents('.result');
            var text = $r.html();
            var marker_id = $r.attr('id');
            if(markers[marker_id]){
                google.maps.event.trigger(markers[marker_id], 'click');
            }
            $('.result.active').removeClass('active');
            $r.addClass('active');
        })
    };
});
