var map;
var imagenAlerta = '<img src="/images/iconos/warn.gif" alt="">';
var markers = [];
var refrescarMarkers = true;

function getIcon(images){
    var icon = null;
    if (images) {
        icon = new GIcon();
        icon.image = images;
        icon.iconSize = new GSize(34, 24);
        icon.iconAnchor = new GPoint(24 >> 1, 34 >> 1);
        icon.infoWindowAnchor = new GPoint(24 >> 1, 34 >> 1);
    }
    return icon;
}

function getIconAvatar(images){
    var icon = null;
    if (images) {
        icon = new GIcon();
        icon.image = "/images/markers/marker_viajero.png";
        icon.iconSize = new GSize(26, 26);
        icon.iconAnchor = new GPoint(26 >> 1, 26);
        icon.infoWindowAnchor = new GPoint(26 >> 1, 26 >> 1);
    }
    return icon;
}

function getIconMedia() {
    var icon = null;
    icon = new GIcon();
    icon.image = "/comunidad/images/iconos/fotosyvideo-map.png";
    icon.iconSize = new GSize(26, 26);
    icon.iconAnchor = new GPoint(26 >> 1, 26);
    icon.infoWindowAnchor = new GPoint(26 >> 1, 26 >> 1);
    return icon;
}


function getIconCiudadEditar(images){
    var icon = null;
    if (images) {
        icon = new GIcon();
        icon.image = images;
        icon.iconSize = new GSize(28,33);
        icon.iconAnchor = new GPoint(24 >> 1, 34 >> 1)
        icon.infoWindowAnchor = new GPoint(24 >> 1, 34 >> 1);
    }
    return icon;
}

function getIconAeropuerto(images){
    var icon = null;
    if (images) {
        icon = new GIcon();
        icon.image = images;
        icon.iconSize = new GSize(20, 34);
        icon.iconAnchor = new GPoint(34 >> 1, 20 >> 1);
		icon.infoWindowAnchor = new GPoint(34 >> 1, 20 >> 1);
    }
    return icon;
}

function createMarkerPais(point, nom, link, id, cont){
    var marker = new LabeledMarker(point, {
        "icon": getIcon("images/internas/iconodestinopais.png"),
        "clickable": true,
        "title": nom,
        "labelOffset": new GSize(-6, -10)
    });
    GEvent.addListener(marker, "click", function(){
		ComboDestinos.cargarCombo(cont, 'PAIS_'+id, '', '');
    });
    GEvent.addListener(marker, "mouseover", function(){ ComboDestinos.miga(cont, id, "", "miga"); });
    return marker;
}

function createMarkerCiudad(point, id, nom, pais, cont){
    var label;
    var marker = new LabeledMarker(point, {
        "icon": getIcon("images/internas/iconodestinociudad.png"),
        "clickable": true,
        "title": nom,
        "labelOffset": new GSize(-6, -10)
    });
    GEvent.addListener(marker, "click", function(){
		ComboDestinos.cargarCombo(cont, pais, '', id);
		
	});
    GEvent.addListener(marker, "mouseover", function(){ComboDestinos.miga(cont, pais, id, "miga");});
    return marker;
}


function createMarkerUsuario(point, id, nom, pais, cont, avatar, url, ciudad){
    var label;
    var marker = new LabeledMarker(point, {
        "icon": getIconAvatar(avatar),
        "clickable": true,
        "title": nom,
        "labelOffset": new GSize(-6, -10)
    });
    GEvent.addListener(marker, "click", function(){
    	refrescarMarkers = false;
    	map.setCenter(marker.getLatLng());    	
    	var urlAjax = '/infoMarkerViajero.php';
        new Ajax.Request(urlAjax, {
            method: 'get',
            parameters: {'login': nom, 'ciudad': ciudad },
            onComplete: function(t){                              
            	marker.openInfoWindowHtml(t.responseText);
            }
        });  
    	$('textoDestino').update("<a href ='" + url+ "'>Ir a la p&aacute;gina de " + nom + "</a>");
   	
    });
    return marker;
}

function createMarkerMedia(point, id, tipo, titulo, idUsuario, login, url, urlElemento) {
    var marker = new LabeledMarker(point, {
        "icon": getIconMedia(),
        "clickable": true,
        "title": titulo,
        "labelOffset": new GSize(-6, -10)
    });

    GEvent.addListener(marker, "click", function(){
    	refrescarMarkers = false;
    	map.setCenter(marker.getLatLng());    	
    	var urlAjax = '/infoMarkerMedia.php';
        new Ajax.Request(urlAjax, {
            method: 'get',
            parameters: {'idMedia': id, 'idUsuario': idUsuario, 'login': login, 'titulo' : titulo , 'tipo' : tipo, 'url':url , 'urlElemento':urlElemento },
            onComplete: function(t){                              
            	marker.openInfoWindowHtml(t.responseText);
            }
        });  
    });
    
    return marker;
}

function createMarkerCiudadLink(point, link, id, nom, pais, cont){
    var marker = new LabeledMarker(point, {
        "icon": getIcon("images/internas/iconodestinociudad.png"),
        "clickable": true,
        "title": nom,
        "labelOffset": new GSize(-6, -10)
    });
    GEvent.addListener(marker, "click", function(){
    	refrescarMarkers = false;
    	map.setCenter(marker.getLatLng());
    	var urlAjax = '/infoMarkerCiudad.php';
        new Ajax.Request(urlAjax, {
        	asynchronous: false,
            method: 'get',
            parameters: {cont:cont, pais:pais, ciudad:id},
            onComplete: function(t){                              
            	marker.openInfoWindowHtml(t.responseText);
            }
        });
    });
    GEvent.addListener(marker, "mouseover", function(){ComboDestinos.miga(cont, pais, id, "miga");});
    return marker;
}

function createMarkerCiudadEditar(point, link, id, nom, pais, cont){
    var marker = new LabeledMarker(point, {
        "icon": getIconCiudadEditar("/comunidad/images/iconos/destinoseditar.png"),
        "clickable": true,
        "title": nom,
        "labelOffset": new GSize(-6, -10)
    });
    GEvent.addListener(marker, "click", function(){ if (link != "")  window.location.href = link; });
    GEvent.addListener(marker, "mouseover", function() {
    	ComboDestinos.miga(cont, pais, id, "miga");
    	var url = '/infoCiudadEditar.php';
        var myAjax = new Ajax.Request(url, {
            method: 'post',
            parameters: {'name': nom, 'url': link  },
            onComplete: function(transport)
            {
               $('divCiudadEditar').update(transport.responseText);
               marker.openInfoWindowHtml(transport.responseText);
               $('divCiudadEditar').show();
            }
        });    	
    	return false;
    	}
    );
    
    return marker;
}



function createMarkerContinente(point, id){
    var marker = new LabeledMarker(point, {
        "icon": getIcon("images/internas/iconodestinocontinente.png"),
        "clickable": true,
        "labelOffset": new GSize(-6, -10)
    });
	
    GEvent.addListener(marker, "click", function(){
        $('cmbContinente').value = id;
		ComboDestinos.cargarCont();
    });
  
    GEvent.addListener(marker, "mouseover", function(){ ComboDestinos.miga(id, "", "", "miga"); });
    return marker;
}

function createMarkerAeropuerto(point, nombre, iata, ciudad, distancia, lat, lng){
    var marker = new LabeledMarker(point, {
        "icon": getIconAeropuerto("images/iconos/aeropuerto.png"),
        "clickable": true,
        "title": nombre,
        "labelOffset": new GSize(-6, -10)
    });
    GEvent.addListener(marker, "click", function() {
		var htmlGlobo= "<span>Aeropuerto: <b>" + nombre + " ("+iata+")</b></span><br><span>Ciudad: <b>"+ciudad+"</b></span><br><span>Distancia a "+ciudad+": <b>"+distancia+" kms</b></span><br><span>Latitud: <b>"+lat+"</b></span><br><span>Longitud: <b>"+lng+"</b></span>";				 	
		marker.openInfoWindowHtml(htmlGlobo);
    });                 
    return marker;
}

function createMarkerExcepcion(point, id, nom, pais, cont){
    var label;
    var marker = new LabeledMarker(point, {
        "icon": getIcon("images/internas/iconodestinociudad.png"),
        "clickable": true,
        "title": nom,
        "labelOffset": new GSize(-6, -10)
    });
    GEvent.addListener(marker, "click", function(){
		ComboDestinos.cargarCombo(cont, pais, '', id);
		ComboDestinos.miga(cont, pais, id, "migaexcep");
	});
    GEvent.addListener(marker, "mouseover", function(){ ComboDestinos.miga(cont, pais, id, "migaexcep"); });
    return marker;
}

function createMarkerExcepcionLink(point, link, id, nom, pais, cont){
    var marker = new LabeledMarker(point, {
        "icon": getIcon("images/internas/iconodestinociudad.png"),
        "clickable": true,
        "title": nom,
        "labelOffset": new GSize(-6, -10)
    });
    GEvent.addListener(marker, "click", function(){ if (link != "")  window.location.href = link; });
    GEvent.addListener(marker, "mouseover", function(){ ComboDestinos.miga(cont, pais, id, "migaexcep"); });
    return marker;
}

function createMarkerPaisExcepcion(point, nom, link, id, cont){
    var marker = new LabeledMarker(point, {
        "icon": getIcon("images/internas/iconodestinopais.png"),
        "clickable": true,
        "title": nom,
        "labelOffset": new GSize(-6, -10)
    });
    GEvent.addListener(marker, "click", function(){ ComboDestinos.cargarCombo(cont, 'PAISEXCEP_'+id, '', ''); });
    GEvent.addListener(marker, "mouseover", function(){ ComboDestinos.miga(cont, id, "", "migaexcep"); });
    return marker;
}

function getMarkers(){
    var url = '/includes/getMarkers.php';
    //detectamos el  zoom y pintamos todos los markers segun el zoom
    var zoom  = map.getZoom();
    var swlat = map.getBounds().getSouthWest().lat();
    var swlng = map.getBounds().getSouthWest().lng()
    var nelat = map.getBounds().getNorthEast().lat();
    var nelng = map.getBounds().getNorthEast().lng();
    var pars = 'zoom=' + zoom + '&swlat=' + swlat + '&swlng=' + swlng + '&nelat=' + nelat + '&nelng=' + nelng;
    pars = pars + '&destinos=' + $('filtroDestinos').checked;
    pars = pars + '&usuarios=' + $('filtroUsuarios').checked;
    pars = pars + '&fotos='    + $('filtroFotos').checked;
    pars = pars + '&videos='   + $('filtroVideos').checked;

    if($('id_cmbCiudad2').value!='' && $('cmbCiudad2').value!='') {
    	pars = pars + '&ciudadSel=' + $('id_cmbCiudad2').value;
    }
    
    markers = [];
    new Ajax.Request(url, {
        method: 'get',
        parameters: pars,
        onComplete: function(t){
            var aMD = t.responseText.evalJSON();
            map.clearOverlays();
			
			aMD.each(function(m){
				var mark = null;
				var point = new GLatLng(m.lat, m.lng);
				
				switch (m.tipo) {
					case "continente": 
                    	mark = createMarkerContinente(point, m.id); break;
					case "pais": 
                    	mark = createMarkerPais(point, m.name, m.url, m.id, m.cont); break;
                	case "ciudad": 
                		mark = createMarkerCiudad(point, m.id, m.name, m.pais, m.cont); break;
                	case "ciudadlink": 
						mark = createMarkerCiudadLink(point, m.url, m.id, m.name, m.pais, m.cont); break;
					case "ciudadEditar":
						mark = createMarkerCiudadEditar(point, m.url, m.id, m.name, m.pais, m.cont); break;
					case "aeropuerto": 
						mark = createMarkerAeropuerto(point, m.name, m.iata, m.ciudad, m.distancia, m.lat, m.lng); break;
					case "usuario":
						mark = createMarkerUsuario(point, m.id, m.login, m.pais, m.cont, m.avatar, m.url, m.name); break;
					case "foto" :
						mark = createMarkerMedia(point, m.id,  m.tipo, m.name, m.idUsuario, m.login, m.url, m.urlElemento);
					case "video" :
						mark = createMarkerMedia(point, m.id,  m.tipo, m.name, m.idUsuario, m.login, m.url, m.urlElemento);
						
				}
				if(mark != null){
					//markers.push(mark);
					map.addOverlay(mark);
                }
			});
        }
    });
    
    $('divCiudadEditar').hide();
    
    if(zoom > 7){
    	$('divFiltroMarkers').show();
    }else {
    	$('divFiltroMarkers').hide();
    }
}

function saltaDestino(){
	var codigo;
	var tipo;
	var url = '/includes/cargaUrlDestino.php';
	
	if ($F('cmbCiudad') != "vacio"){
		codigo = $F('cmbCiudad');
		tipo = "linkciudad";
	}else if($F('cmbPais') != "vacio"){
		codigo = $F('cmbPais');
		tipo = "linkpais";
	}else{
		return;
	}
	var pars = 'tipo='+ tipo + '&codigo=' + codigo;
	var myAjax = new Ajax.Request(url, {
		method: 'get',
		parameters: pars,
		onComplete: function(t){
			if (!t.responseText.blank()) window.location.href = t.responseText;
		}
    });
}
function getSelectionCiudad(li){
	var coord = ($('coord_'+li.id).value).split(",");
	$('cmbCiudad2').value = $('valor_'+li.id).innerHTML;
	$('id_cmbCiudad2').value= li.id;
	if(eval($('tipo_'+li.id))) {
		$tipo = $('tipo_'+li.id).value;
		if($tipo == 'continente') {
			$('cmbContinente').value = li.id;
			ComboDestinos.cargarCont();

		} else if($tipo == 'pais') {
			$('cmbContinente').value = $('cont_'+li.id).value;
			ComboDestinos.cargarCont("PAIS_" + li.id);
			
			url = '/includes/cambioDestinosMaps.php';
		    var myAjax = new Ajax.Request(url, {
		        method: 'get',
		        asynchronous: 'false',
		        parameters: {tipo:'pais', pais: li.id},
		        onComplete: function(transport){
		            eval(transport.responseText);
		        }
		    });
		} else if($tipo == 'ciudad') {

			$('cmbContinente').value = $('cont_'+li.id).value;
			ComboDestinos.cargarCont("PAIS_" + $('pais_'+li.id).value);
			url = '/includes/cambioDestinosMaps.php';
		    var myAjax = new Ajax.Request(url, {
		        method: 'get',
		        asynchronous: 'false',
		        parameters: {tipo:'ciudad', pais: li.id},
		        onComplete: function(transport){
		            eval(transport.responseText);
		        }
		    });
		    
//		    map.setCenter(new GLatLng(coord[0], coord[1]), $('zoom_'+li.id).value);
		}
	}
	else { 
		map.setCenter(new GLatLng(coord[0], coord[1]), 10);
	}
	
	$('divCiudadEditar').hide();
	getMarkers();
}

function initialize(idContinente){
    map = new GMap2($('mapaDestinos'));
    map.setCenter(new GLatLng(40.24599150419903, -3.51562500000000), 6);
//    map.setMapType(G_PHYSICAL_MAP);
    map.setMapType(G_HYBRID_MAP);
    map.addControl(new GSmallZoomControl());
    map.enableScrollWheelZoom();
    map.enableContinuousZoom();
    map.addControl(new GMenuMapTypeControl());
    map.addMapType(G_PHYSICAL_MAP);
	GEvent.addListener(map, "moveend", function(){ //conforme movemos el mapa se obtiene los markers
		if(refrescarMarkers) {
			getMarkers();
		}
    });

	GEvent.addListener(map, "dragend", function(){
		refrescarMarkers = true;
    });

	GEvent.addListener(map, "zoomend", function(){
		refrescarMarkers = true;
    });

	
	ComboDestinos.create();

	new Ajax.Autocompleter(
		'cmbCiudad2', 
		'autocomplete_cmbCiudad2',
		"/comunidad/php/buscaciudad.php?tipo=cmbCiudad2", 
		{minChars: 2, updateElement: getSelectionCiudad}
	);
	
	if(eval(idContinente) && idContinente!= '') {
		$('cmbContinente').value = idContinente;
		ComboDestinos.cargarCont();
	}
}

function filtroMarkers(checkID, linkID, estilo) {
	$(checkID).checked = !$(checkID).checked;
	if($(checkID).checked) {
		$(linkID).className = estilo;
	} else	{
		$(linkID).className = estilo+'Gris';
	}
	getMarkers();
}

function negrita(text){	
	return "<b>" + text + "</b>";
}


function anyadeAmigo(idAmigo) {
	var urlAddAmigo = '/comunidad/php/addamigo.php';
	new Ajax.Request(urlAddAmigo, {
	        method: 'get',
	        parameters: { id: idAmigo, accion: 'add' },
	        on200: function(t) {
	        	Dialog.info(t.responseText, { width:250, height:100, okLabel: "Cerrar"});
				setTimeout(infoTimeout, 1000);	        	
	        },
	        on409: function(t) {                                   
	        	Dialog.info(t.statusText, { width:250, height:100, okLabel: "Cerrar"});
				setTimeout(infoTimeout, 1000);	        	

	        },
	        on500: function(t) {                                   
	        	Dialog.info(t.statusText, { width:250, height:100, okLabel: "Cerrar"});
				setTimeout(infoTimeout, 1000);	        	
	        }	        
	    });
}

function setInfoMarkerCiudad(idCont, idPais, idCiudad)
{
	var url = '/includes/cargaUrlDestino.php';
	var pars = {tipo:'miga', cont:idCont , pais:idPais, ciudad:idCiudad};
	new Ajax.Request(url, {
	    method: 'get',
	    parameters: pars,
	    onComplete: function(transport){
	        $('migaCiudad').update(transport.responseText);
	    }
	});
}

