function log(e){
    //return false;
    if (typeof(console) == 'object') 
        console.log(e);
    //else alert(e);  
};


/**
 * Google maps class
 */
var gmap = {
    /**
     * Push map data into stack
     * @param {Object} id
     * @param {Object} gmdata
     */
    push: function(id, gmdata){
        var mdata = $.extend({
            lat: 0,
            lon: 0,
            markerTitle: '',
            address: '',
            zoom: 14,
            id: '',
            showAddress: false
        }, gmdata);
        mdata.id = id;
        gmap.stack[gmap.stack.length] = mdata;
        return mdata;
    },
    
    /**
     * Show maps
     */
    showMaps: function(){
        if (typeof(google) == 'undefined') {
            return false;
        }
        for (var i = 0; i < gmap.stack.length; i++) {
            var mdata = gmap.stack[i];
            gmap.refreshMap(gmap.stack[i]);
        }
    },
    
    /**
     * Refresh map
     * @param {Object} mdata
     */
    refreshMap: function(mdata){
        var latlng = new google.maps.LatLng(mdata.lat, mdata.lon);
        var geocoder = new google.maps.Geocoder();
        var options = {
            zoom: mdata.zoom,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        }
        var ngmap = new google.maps.Map(document.getElementById(mdata.id), options);
        
        if (mdata.showAddress) {
            var infowindow_content = '';
            if (mdata.markerTitle) {
                infowindow_content += '<p><strong>' + mdata.markerTitle + '</strong></p>';
            }
            if (mdata.markerTitle) {
                infowindow_content += '<p>' + mdata.markerTitle + '</p>';
            }
        }
        
        // known lat and lng
        if (mdata.lat && mdata.lon) {
            var marker = new google.maps.Marker({
                position: latlng,
                map: ngmap,
                title: mdata.markerTitle
            });
            if (infowindow_content) {
                var infowindow = new google.maps.InfoWindow({
                    content: infowindow_content
                });
                google.maps.event.addListener(marker, 'click', function(){
                    infowindow.open(ngmap, marker);
                });
            }
        }
        // known address
        else {
            geocoder.geocode({
                'address': mdata.address
            }, function(results, status){
                if (status == google.maps.GeocoderStatus.OK) {
                    ngmap.setCenter(results[0].geometry.location);
                    var marker = new google.maps.Marker({
                        map: ngmap,
                        position: results[0].geometry.location,
                        title: mdata.markerTitle
                    });
                    if (infowindow_content) {
                        var infowindow = new google.maps.InfoWindow({
                            content: infowindow_content
                        });
                        google.maps.event.addListener(marker, 'click', function(){
                            infowindow.open(ngmap, marker);
                        });
                    }
                }
                else {
                    //alert("Geocode was not successful for the following reason: " + status);
                }
            });
        }
    },
    
    /**
     * Open map in new window
     * @param {Object} mapdata
     */
    window: function(mapdata){
        gmap.windowDestroy()
        mapdata.id = 'gmapMapPlaceholder';
        $('body').append('<div id="gmapPopupWrapper"><div id="gmapBar"><p><a href="#" class="more" onclick="gmap.windowDestroy()">Close</a></p></div><div id="gmapMapPlaceholder"></div></div>');
        var gmapPopupWrapper = $('#gmapPopupWrapper');
        var gmapMapPlaceholder = $('#gmapMapPlaceholder');
        var gmapBar = $('#gmapBar');
        var barHeight = gmapBar.outerHeight();
        gmapBar.css({
            top: $(window).scrollTop(),
            left: $(window).scrollLeft()
        });
        gmapMapPlaceholder.css({
            height: $(window).height() - barHeight,
            width: $(window).width(),
            top: $(window).scrollTop() + barHeight,
            left: $(window).scrollLeft()
        });
        $(window).scroll(function(){
            gmapBar.css({
                top: $(window).scrollTop(),
                left: $(window).scrollLeft()
            });
            gmapMapPlaceholder.css({
                top: $(window).scrollTop() + barHeight,
                left: $(window).scrollLeft()
            });
        });
        gmap.refreshMap(mapdata);
        return false;
    },
    /**
     * Destroy popup map
     */
    windowDestroy: function(){
        $('#gmapPopupWrapper').remove();
    },
    stack: []
};

//--------------------------------------------------------------------------

$(document).ready(function(){

});

window.onload = function(){
    if (typeof(gmap) == 'object') {
        gmap.showMaps();
    }
};

