/* Variables */
var baseIcon,recomendedIcon,hostelsclubIcon;
var marker=[];
var html=[];
var map,map2;
var gg_layer="gg_map";
var gg_layer2="gg_map2";
var lat,lon,zoom;
var typeControl=true;
var largeMapControl=true;
var smallMapControl=false;
var scaleControl=true;
var is_map_loaded=false;
var centerMarker = null;
var radiusMarker = null;
var circleLine = null;
var bounds;
/* Metodos */
YAHOO.util.Event.onAvailable('gg_trigger', load_gg_map);
function initGoogleMap()
{
    if(GBrowserIsCompatible())
    {
        G_NORMAL_MAP.getErrorMessage = function() {
          var z=map.getZoom();
          if (z > 8) {
            map.setZoom(z-1);
            return "";
          }
          return "No data available at this zoom level.";
        }
        G_SATELLITE_MAP.getErrorMessage = G_NORMAL_MAP.getErrorMessage;
        G_HYBRID_MAP.getErrorMessage = G_NORMAL_MAP.getErrorMessage;
        try{
            if(cod_idioma && cod_idioma=='es')
            {
                G_HYBRID_MAP.PD="Híbrido";
                G_HYBRID_MAP.ME="Híbrido";
                G_SATELLITE_MAP.PD="Satélite";
                G_SATELLITE_MAP.ME="Satélite";
            }
        }catch(e){}
        bounds = new GLatLngBounds();;
        baseIcon = new GIcon();
        recomendedIcon = new GIcon();
        hostelsclubIcon = new GIcon();
        baseIcon.image ="/images_new/maps/hotel_grande.png";
        baseIcon.shadow="/images_new/maps/hotel_grande_sombra.png";
        recomendedIcon.image ="/images_new/hoteles/mapa_ico_hot_rojo.gif";
        hostelsclubIcon.image ="/images_new/maps/hostelsclub.png";
        hostelsclubIcon.shadow="/images_new/maps/hotel_grande_sombra.png";
		baseIcon.iconSize = new GSize(23,29);
		baseIcon.iconAnchor = new GPoint(0,29);        
		baseIcon.infoWindowAnchor = new GPoint(17, 0);
		hostelsclubIcon.iconSize = new GSize(23, 29);
		hostelsclubIcon.iconAnchor = new GPoint(0, 29);
		hostelsclubIcon.infoWindowAnchor = new GPoint(17, 0);
        recomendedIcon.iconSize = new GSize(15, 14);
        recomendedIcon.iconAnchor = new GPoint(0, 14);
        recomendedIcon.infoWindowAnchor = new GPoint(17, 0);
        hostelsclubIcon.infoWindowAnchor = new GPoint(17, 0);
        map = new GMap2($(gg_layer),{draggableCursor: 'move', draggingCursor: 'pointer'});
    }
};
function initGoogleMap2()
{
    if(GBrowserIsCompatible())
    {
        try{
            if(cod_idioma && cod_idioma=='es')
            {
                G_HYBRID_MAP.PD="Híbrido";
                G_HYBRID_MAP.ME="Híbrido";
                G_SATELLITE_MAP.PD="Satélite";
                G_SATELLITE_MAP.ME="Satélite";
            }
        }catch(e){}
        if(!bounds) bounds = new GLatLngBounds();;
        map2 = new GMap2($(gg_layer2),{draggableCursor: 'move', draggingCursor: 'pointer'});
    }
};
function showGoogleMap()
{
    if(GBrowserIsCompatible() && map)
    {
        if(largeMapControl && !smallMapControl) map.addControl(new GLargeMapControl());
        if(smallMapControl && !largeMapControl) map.addControl(new GSmallMapControl());
        if(typeControl) map.addControl(new GMapTypeControl());
        if(scaleControl) map.addControl(new GScaleControl());
        map.setCenter (new GLatLng(lat, lon), zoom);
        map.enableDoubleClickZoom();
        map.enableContinuousZoom();
        for (x in marker)
        {
            if(x=='inArray') continue;
            try{
                if(typeof(marker[x])!='function') map.addOverlay(marker[x]);
            }catch(e){}
        }
    }
};
function showGoogleMap2()
{
    if(GBrowserIsCompatible() && map2)
    {
        map2.addControl(new GLargeMapControl());
        map2.addControl(new GMapTypeControl());
        map2.addControl(new GScaleControl());
        map2.setCenter (new GLatLng(lat, lon), zoom+2);
        map2.enableDoubleClickZoom();
        map2.enableContinuousZoom();
        for (x in marker)
        {
            try{
                if(typeof(marker[x])!='function') map2.addOverlay(marker[x]);
            }catch(e){}
        }
    }
};
//version 1
function showHotelInGoogleMap(id_hotel)
{
    if(GBrowserIsCompatible() && marker[id_hotel])
    {
        if($('gg_map').style.display=='none')
        {
            $('gg_map').style.display='block';
            $('gg_show').style.display='none'
            $('gg_hide').style.display='block'
        }
        marker[id_hotel].openInfoWindowHtml(html[id_hotel]);
        if($('fecha_entrada')) $('fecha_entrada').focus();
        $(gg_layer).focus();
    }
    return false;
};
function showHotelInGoogleMiniMap(id_hotel)
{
    if(GBrowserIsCompatible() && marker[id_hotel])
    {
        if($('gg_map').style.display=='none')
        {
            $('gg_map').style.display='block';
            $('gg_show').style.display='none'
            $('gg_hide').style.display='block'
        }
        marker[id_hotel].showMapBlowup();
        if($('fecha_entrada')) $('fecha_entrada').focus();
        $(gg_layer).focus();
    }
    return false;
};
function showInMap(lat,lon,icon)
{
    map.clearOverlays();
    marker[lat+'_'+lon]=new GMarker(new GLatLng(lat, lon),icon);
    map.addOverlay(marker[lat+'_'+lon]);
    marker[lat+'_'+lon].showMapBlowup();
    GEvent.addListener(marker[lat+'_'+lon], "click", function(){marker[lat+'_'+lon].showMapBlowup();});
    if($('fecha_entrada')) $('fecha_entrada').focus();
    $(gg_layer).focus();
};
// Creates a marker at the given point with the given number label
function createMarker(point,icono,html,titulo,onmover,noclick)
{
    var marker = new GMarker(point,{icon:icono,title:titulo});
    if(!noclick) GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml(html); });
    if(onmover!='')
    {
        GEvent.addListener(marker,"mouseover", function() {
           if(map.getZoom()>=14) marker.openInfoWindowHtml(html);
        });
        GEvent.addListener(marker,"mouseout", function() {
        });
    }
    return marker;
};
function loadMap2()
{
    if(!is_map_loaded)
    {
        initGoogleMap();showGoogleMap(); printHoteles(); is_map_loaded=true;
    }
};
function load_gg_map()
{
//    $('gg_loading').style.display='none';
//    $('gg_show').style.display='block';
};
function show_gg_map4(ver_mapa, lat, lon)
{
    if (ver_mapa) show_gg_map2(false);
    showInMap(lat, lon, recomendedIcon);
};
function show_gg_map3() { show_gg_map2(false); }
function show_gg_map2(hide)
{
    if(hide)
    {
        $('gg_map').style.display='none';
        $('gg_hide').style.display='none';
        $('gg_show').style.display='block';
        if($('gg_form')) $('gg_form').style.display='none';
    }
    else
    {
        $('gg_map').style.display='block';
        $('gg_hide').style.display='block';
        $('gg_show').style.display='none';
        if($('gg_form')) $('gg_form').style.display='block';
        loadMap2();
    }
}

function _calcRange(lat, dist)
{
    TWOPI=2*Math.PI;
    RAD=6378137.0; //meters
    lat_range= 360 * dist / ( TWOPI * RAD);
    lon_range= 360 * dist / ( TWOPI * RAD * Math.cos(lat*TWOPI/360));
    return [lat_range, lon_range];
}
function drawCircle()
{
	var zoom = map.getZoom();
	var centerPt = normalProj.fromLatLngToPixel(centerMarker.getPoint(), zoom);
	var radiusPt = normalProj.fromLatLngToPixel(radiusMarker.getPoint(), zoom);
	var circlePoints = Array();
	with (Math) {
		var radius = floor(sqrt(pow((centerPt.x-radiusPt.x),2) + pow((centerPt.y-radiusPt.y),2)));
		for (var a = 0 ; a < 361 ; a+=10 ) {
			var aRad = a*(Math.PI/180);
			y = centerPt.y + radius * sin(aRad)
			x = centerPt.x + radius * cos(aRad)
			var p = new GPoint(x,y);
			circlePoints.push(normalProj.fromPixelToLatLng(p, zoom));
		}
		//map.removeOverlay(circleLine);
		//map.addOverlay(circleLine);
		map.addOverlay(new GPolyline(circlePoints,'#DE0000',3,1));
	}
}
//version 2
function showHotelInGoogleMap_v2(id_hotel)
{
  if(GBrowserIsCompatible())
  {
    if(!is_map_loaded || !marker[id_hotel])
    {
        setTimeout("showHotelInGoogleMap_v2('"+id_hotel+"');",500);
        return;
    }
    map.setZoom(16);
    marker[id_hotel].openInfoWindowHtml(html[id_hotel]);
    if($('fecha_entrada')) $('fecha_entrada').focus();
   }
   return false;
}

function showAddress(address)
{
    if(gg_append_cpp) address_1=address+", "+gg_ciudad+", "+gg_provincia+", "+gg_pais;
    else address_1=address;
    address_2=address+", "+gg_ciudad+", "+gg_pais;
    if (geocoder)
    {
        geocoder.getLocations(address_1,
        function(result)
        {
            if (result.Status.code != G_GEO_SUCCESS)
            {
                errores.push(new Error('12','000','000',address + " Direccion desconicida"));
                errores.show();
            }else{
              if (result.Placemark.length > 1)
              {
                $("quiso_decir").innerHTML = "Quiso decir:";
                for (var i=0; i<result.Placemark.length; i++) {
                  var p = result.Placemark[i].Point.coordinates;
                  $("quiso_decir").innerHTML += "<li><a href='#' onclick='place(" +p[1]+","+p[0]+")'>"+ result.Placemark[i].address+"</a></li>";
                }
              }else{
                var p = result.Placemark[0].Point.coordinates;
                place(p[1],p[0],null,address, false);

              }
            }
          }
        );
    }
}
function place(lat,lng,icon,title, zoomeasiosi)
{
    var point = new GLatLng(lat,lng);
    $("quiso_decir").innerHTML = "";
    x_zoom=14;
    map.setCenter(point,x_zoom);
    map.addOverlay(new createMarker(point, icon, null, title, false,true));
}
