var map = null;         // map
var panorama = null;    // streetview panorama
var client = null;      // streetview client (to get info about nearest panorama, etc.)
var dummy = null;       // little dude(?), loaded directly from google servers (at the moment..)
var defaultzoom = 15;
var closezoom = 19;   

window.addEvent('unload', function()
{
  GUnload();
});

function create_map(element, center, zoom, enabled, satellite)
{
  // options = {};
  var obj = new GMap2(element);
  zoom = zoom || defaultzoom;
  satellite = satellite || false

  if (enabled == true)
  {
    obj.addControl(new GSmallMapControl());
    obj.addControl(new GMapTypeControl());
    obj.enableScrollWheelZoom();
  }
  else
  {
    obj.disableDoubleClickZoom();
    obj.disableDragging();
    obj.disableInfoWindow();
  }
  
  if (satellite == true)
  {
    obj.setMapType(G_SATELLITE_MAP );
  }

  obj.setCenter(center, zoom);
 
  return obj;
}

function create_panorama(target, latlng, pov)
{
    var options = {'latlng': latlng, 'pov': pov};
    var obj = new GStreetviewPanorama(target, options);
    
    //obj.setLocationAndPOV(latlng);
    return obj;
}

function create_streetview_client()
{
    var obj = new GStreetviewClient();
    return obj;
}

function create_default_marker(latlng, enabled)
{
    enabled = enabled || false;
    
    var marker = new GMarker(
        latlng
       ,{
       
        clickable   : false
       ,draggable   : enabled
       ,bouncy      : enabled
       ,autoPan     : enabled
       
       }
    );

    return marker;
}

function create_marker(latlng, icon, clickable, draggable)
{
    clickable = clickable || false;
    draggable = draggable || false;
    
    var marker = new GMarker(
        latlng
       ,{
       
        icon        : icon
       ,clickable   : clickable
       ,draggable   : draggable
       
       }
    );

    return marker;
}

function create_message_marker(message)
{
    var icon = create_icon(message.main_category_id);
    var marker = create_marker(new GLatLng(message.lat, message.lng), icon, true, false);
    
    var destination = site_base+"/ideeen/kaart/bekijk/"+message.id;
    
    var html = '';
    var image = '';
    if (message.img_extension != '')
    {
        image = "<img class='userimg_small' src='"+site_base+"/resources/uploads/core/user/tmb/"+message.user_id+"."+message.img_extension+"' width='"+message.img_width_tmb+"' height='"+message.img_height_tmb+"' alt='"+message.fullname+"' />";
    }
    html += "<a href='"+destination+"'>"+message.category_name+"</a>";
    html += "<p>"+message.content+"</p>";
    html += "<div class='author'>"+image+"Geplaatst door <a href='"+site_base+"/ideeen/deelnemers/"+message.user_id+"'>"+message.fullname+"</a> op "+message.created+"<br /><a href='"+destination+"'>[+] ga naar dit bericht</a><div class='layoutfix'>&nbsp;</div></div>";

    GEvent.addListener(marker, "click", function()
    {
        marker.openInfoWindowHtml(html);
    });
    
    return marker;
}

function create_icon(category_id)
{
    var icon = new GIcon();
    icon.image = site_base+'/resources/images/map/' + category_id + '.gif';
    //icon.shadow = site_base+'/resources/images/styles/marker_shadow.png';
    icon.iconSize = new GSize(16, 16);
    //icon.shadowSize = new GSize(20, 12);
    icon.iconAnchor = new GPoint(8, 8);
    icon.infoWindowAnchor = new GPoint(16, 1);
    return icon;
}

function create_dummy()
{
    var icon = new GIcon(G_DEFAULT_ICON);
    icon.shadow = '';
    icon.image = "http://maps.gstatic.com/mapfiles/cb/man_arrow-0.png";
    icon.transparent = "http://maps.gstatic.com/mapfiles/cb/man-pick.png";
    icon.imageMap = [
        26,13, 30,14, 32,28, 27,28, 28,36, 18,35, 18,27, 16,26,
        16,20, 16,14, 19,13, 22,8
    ];
    icon.iconSize = new GSize(49, 52);
    icon.iconAnchor = new GPoint(25, 35);  // near base of guy's feet
    // icon.infoWindowAnchor = new GPoint(25, 5);  // top of guy's head
    
    return icon;
}