function main () {
  //config
  var selectors = {
    lat: "#lat",
    lng: "#lng",
    zoom: "#zoom"
  };
  
  function is (name) {
    return $('#'+name).val() > 0;
  }
  
  //functions
  var toNum = function(str,axis){
    return parseFloat(str,typeof axis === "undefined" ? 10 : axis);
  };
  // if(!log && console){
  //  var log = function(){
  //    console.log.apply(console,arguments);
  //  };
  // }
  //main
  var map = new google.maps.Map($('#mapDisplay').get(0));
  var latlng = new GLatLng(toNum($(selectors.lat).val()),
                           toNum($(selectors.lng).val()));
  var zoom = toNum($(selectors.zoom).val());
  //log("@main:latlng=",latlng,";zoom=",zoom);
  map.setCenter(latlng,zoom);

  var marker;

  if(is('marker_draggable')) {
    //add draggable marker
    marker = new GMarker(latlng,{draggable:true,bouncy:false});
    GEvent.addListener(marker,'dragend',
        function(mlatlng){
          //log("@main:marker on dragend:latlng=",mlatlng);
          $(selectors.lat).val(mlatlng.lat());
          $(selectors.lng).val(mlatlng.lng());
          $(selectors.zoom).val(map.getZoom());
        });
    //add control
    map.addControl(new GLargeMapControl3D());
    GEvent.addListener(map,'zoomend',
        function(old_zoom,new_zoom){
          $(selectors.zoom).val(new_zoom);
        });
  }
  else if(is('map_frozen')){
    // add undraggable marker
    marker = new GMarker(latlng,{draggable:false});
    map.disableDragging();
  }
  else {
    // display normal map
    marker = new GMarker(latlng,{draggable:false});
    //add control
    map.addControl(new GLargeMapControl3D());
  }
  
  map.addOverlay(marker);
  typeof window.show_ads == 'function' && window.show_ads(map);
}

