//<![CDATA[
var map = null;
var geocoder = null;
var trafficInfo;
var toggleStateTraffic = 0;
var wikipediaInfo;
var toggleStateWikipedia = 0;
var panoramioThumbs;
var toggleStatePanoramio = 0;
var panoramioIcons;
var panoramioMarker;
var infoIcons;
var infoMarker;
var resultIcons;
var resultMarker;
var bounds;
var southWest;
var northEast;

// funciones de las cookies

function initCookie(c_name, c_value) {
	value = getCookie(c_name);
	if (value == null || value == '') {
		setCookie(c_name, c_value, 30);
	}
}

function setCookie(c_name, value, expiredays) {
	var exdate = new Date();
	exdate.setDate(exdate.getDate() + expiredays);
	document.cookie = c_name + '=' + escape(value) + ((expiredays == null) ? '' : ';expires=' + exdate.toGMTString());
}

function getCookie(c_name) {
	if (document.cookie.length > 0) {
		c_start = document.cookie.indexOf(c_name + '=');
		if (c_start != -1) {
			c_start = c_start + c_name.length + 1;
			c_end = document.cookie.indexOf(';', c_start);
		if (c_end == -1) c_end = document.cookie.length;
			return unescape(document.cookie.substring(c_start, c_end));
		}
	}
	return '';
}

function checkCookie(id, c_name, c_value) {
	value = getCookie(c_name);
	if (value != null && value != '') {
		if (value == c_value) {
			setCookie(c_name, c_value, 30);
			document.getElementById(id).checked = true;
			return true;
		}
	}
}

initCookie('wikipedia', 1);
initCookie('panoramio', 2, 30);
initCookie('trafico', 0, 30);

// inicializamos el mapa

function initialize() {
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById('map'));
		map.setCenter(new GLatLng(42.20080126620032, -8.644695281982422), 13);
		geocoder = new GClientGeocoder();
		map.setUIToDefault();
		
		var trafficOptions = { incidents:true };
		trafficInfo = new GTrafficOverlay(trafficOptions);
		wikipediaInfo = new GLayer('org.wikipedia.es');
		panoramioThumbs = new GLayer('com.panoramio.all');
		panoramioIcons = new GOverlay(panoramioMarker);
		infoIcons = new GOverlay(infoMarker);
		resultIcons = new GOverlay(resultMarker);
		
	
		GDownloadUrl('data.xml.php', function(data) {
			var xml = GXml.parse(data);
			var markers = xml.documentElement.getElementsByTagName('marker');
			for (var i = 0; i < markers.length; i++) {
				var name = markers[i].getAttribute('name');
				var address = '';//markers[i].getAttribute('address');
				var categoryID = markers[i].getAttribute('categoryID');
				var category = unescape(markers[i].getAttribute('category'));
				var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')), parseFloat(markers[i].getAttribute('lng')));
				infoMarker = createMarker(point, name, address, categoryID);
				map.addOverlay(infoMarker);
			}
		});
	
		bounds = map.getBounds();
		southWest = bounds.getSouthWest();
		northEast = bounds.getNorthEast();
		maxy = northEast.lat();
		miny = southWest.lat();
		maxx = northEast.lng();
		minx = southWest.lng();
	
		getPanoramio();
		getWikipedia();
		getLocation();
		getTraffic();

		// genera un mensaje según donde se haga click en el mapa
		GEvent.addListener(map, 'moveend', function() {
			var center = map.getCenter();
			document.getElementById('message').innerHTML = '<p>coordenadas: ' + center.toString() + ' </p>';
			getPanoramio();
			getWikipedia();
			//getLocation();
			//getTraffic();
		});
	}
}

// creamos los marcadores

function createMarker(point, info, moreInfo, categoryID) {
	var marker = new GMarker(point, customIcons[categoryID]);

	var html = '<div class=\'marker\' style=\'width: 230px; height: 200px; margin: 0 0 5px 0;\'><div class=\'negrita\'>' + info + '</div>';
	if (moreInfo != '') {
		html = html + '<div>' + moreInfo + '</div>';
	}
	var html = html + '</div>';
	GEvent.addListener(marker, 'click', function() {
		marker.openInfoWindowHtml(html);
	});
	return marker;
}

// muestra artículos de la Wikipedia, activa checkbox y guarda cookie
function toggleWikipedia() {
	if (toggleStateWikipedia == 1) {
		document.getElementById('wikipedia').checked = false;
		toggleStateWikipedia = 0;
		setCookie('wikipedia', 0, 30);
		map.removeOverlay(wikipediaInfo);
	} else {
		document.getElementById('wikipedia').checked = true;
		toggleStateWikipedia = 1;
		setCookie('wikipedia', 1, 30);
		map.addOverlay(wikipediaInfo);
	}
}

function getWikipedia() {
	if (checkCookie('wikipedia','wikipedia',1)) {
		toggleStateWikipedia = 1;
		map.addOverlay(wikipediaInfo);
	} else {
		toggleStateWikipedia = 0;
	}
}

// muestra el estado del Tráfico, activa checkbox y guarda cookie
function toggleTraffic() {
	if (toggleStateTraffic == 1) {
		document.getElementById('trafico').checked = false;
		toggleStateTraffic = 0;
		setCookie('trafico', 0, 30);
		map.removeOverlay(trafficInfo);
	} else {
		document.getElementById('trafico').checked = true;
		toggleStateTraffic = 1;
		setCookie('trafico', 1, 30);
		map.addOverlay(trafficInfo);
	}
}

function getTraffic() {
	if (checkCookie('trafico','trafico',1)) {
		toggleStateTraffic = 1;
		map.addOverlay(trafficInfo);
	} else {
		toggleStateTraffic = 0;
	}
}

// muestra iconos y fotos de Panoramio, activa checkbox y guarda cookie
function togglePanoramio(id) {
	if (toggleStatePanoramio == 1) {
		if (id == 1) {
			document.getElementById('panoramio').checked = false;
			document.getElementById('panoramio2').checked = false;
			toggleStatePanoramio = 0;
			setCookie('panoramio', 0, 30);
			map.clearOverlays(panoramioIcons);
		} else {
			document.getElementById('panoramio').checked = false;
			document.getElementById('panoramio2').checked = true;
			toggleStatePanoramio = 2;
			setCookie('panoramio', 2, 30);
			map.clearOverlays(panoramioIcons);
			getPanoramio();
		}
	} else if (toggleStatePanoramio == 2) {
		if (id == 1) {
			document.getElementById('panoramio').checked = true;
			document.getElementById('panoramio2').checked = false;
			toggleStatePanoramio = 1;
			setCookie('panoramio', 1, 30);
			map.removeOverlay(panoramioThumbs);
			getPanoramio();
		} else {
			document.getElementById('panoramio').checked = false;
			document.getElementById('panoramio2').checked = false;
			toggleStatePanoramio = 0;
			setCookie('panoramio', 0, 30);
			map.removeOverlay(panoramioThumbs);
		}
	} else {
		if (id == 1) {
			document.getElementById('panoramio').checked = true;
			document.getElementById('panoramio2').checked = false;
			toggleStatePanoramio = 1;
			setCookie('panoramio', 1, 30);
			getPanoramio();
		} else {
			document.getElementById('panoramio').checked = false;
			document.getElementById('panoramio2').checked = true;
			toggleStatePanoramio = 2;
			setCookie('panoramio', 2, 30);
			getPanoramio();
		}
	}
}

function getPanoramio() {
	if (checkCookie('panoramio','panoramio',1)) {
		bounds = map.getBounds();
		southWest = bounds.getSouthWest();
		northEast = bounds.getNorthEast();
		maxy = northEast.lat().toFixed(12);
		miny = southWest.lat().toFixed(12);
		maxx = northEast.lng().toFixed(12);
		minx = southWest.lng().toFixed(12);
		
		script = document.createElement('script');
		script.src = 'http://www.panoramio.com/map/get_panoramas.php?order=popularity&set=public&from=0&to=50&minx=' + minx + '&miny=' + miny + '&maxx=' + maxx + '&maxy=' + maxy + '&size=thumbnail&callback=ShowPictures';
		document.body.appendChild(script);
		toggleStatePanoramio = 1;

	} else if (checkCookie('panoramio2','panoramio',2)) {
		map.addOverlay(panoramioThumbs);
		toggleStatePanoramio = 2;
	}
}

function ShowPictures(photo) {
	if (GBrowserIsCompatible()) {
		if (!photo) { return };
		var galeria = photo.photos;
		for (var i = 0; i < galeria.length; i++) {
			var point = new GLatLng(galeria[i].latitude, galeria[i].longitude);

			galeria_photo_title = galeria[i].photo_title;
			if (galeria[i].photo_title.length > 30) {
					galeria_photo_title = galeria[i].photo_title.substring(0, 30) + '&#8230;';
				}

			panoramioMarker = createMarker(point, '<a href=\'http://www.panoramio.com/\' alt=\'Panoramio logo\' title=\'Panoramio\' target=\'_blank\'><img src=\'http://www.panoramio.com/img/logo-small.gif\'></a><br /><a href=\'' + galeria[i].photo_url + '\' title=\'' + galeria[i].photo_title + '\' alt=\'' + galeria[i].photo_title + '\' target=\'_blank\'><img src=\'' + galeria[i].photo_file_url + '\'></a><br /><a href=\'' + galeria[i].photo_url + '\' title=\'' + galeria[i].photo_title + '\' target=\'_blank\'>' + galeria_photo_title + '</a>' , 'autor: <a href=\'' + galeria[i].owner_url + '\' title=\'' + galeria[i].owner_name + '\' target=\'_blank\'>' + galeria[i].owner_name + '</a>', -3);
			map.addOverlay(panoramioMarker);
		}
	}
}

// muestra posición del visitante
function getLocation() {
	script = document.createElement('script')
	script.src = 'http://ipinfodb.com/ip_query.php?output=json&callback=ShowMyIp';
	document.body.appendChild(script)
}

function ShowMyIp(geoDict) {
	if (GBrowserIsCompatible()) {
		if (!geoDict) { return };
		var point = new GLatLng(geoDict['Latitude'], geoDict['Longitude']);
		var IpMarker = createMarker(point, 'Est' + unescape('&aacute;') + 's en ' + geoDict['City'] + ', ' + geoDict['RegionName'] + ' (' + geoDict['CountryName'] + ')' , 'Tu IP es: ' + geoDict['Ip'] + '<br /><br /><span class=\'cursiva pequena\'>La posici' + unescape('&oacute;') + 'n es aproximada y depende del nodo de Internet al que te conectes.<br />En muchos casos es posible que la posici' + unescape('&oacute;') + 'n no se aproxime ni lo m' + unescape('&aacute;') + 's m' + unescape('&iacute;') + 'nimo, sobre todo si tu IP es din' + unescape('&aacute;') + 'mica, ya que puede haber un retraso en la actualizaci' + unescape('&oacute;') + 'n de las bases de datos que relacionan las IP con las poblaciones.<br />Puedes ver m' + unescape('&aacute;') + 's datos <a href=\'http://ipinfodb.com/my_ip_location.php\' target=\'_blank\' title=\'IPInfoDB [abre en ventana nueva]\'>aqu' + unescape('&iacute;') + '</a>.</span>', 0);
		map.addOverlay(IpMarker);

		var input = document.getElementById('addressInput2');
		input.value = geoDict['Latitude'] + ', '+ geoDict['Longitude'];

		var span = document.getElementById('posicion');
		GEvent.addDomListener(span, 'click', function() {
			GEvent.trigger(IpMarker, 'click');
		});
		GEvent.addDomListener(span, 'mouseover', function() {
			 span.className = 'cursor subrayada';
		});
		GEvent.addDomListener(span, 'mouseout', function() {
			span.className = 'cursor';
		});		
	}
}

// buscas la dirección
function searchLocations() {
	var city = document.getElementById('citySelect').value;
	var radius = document.getElementById('radiusSelect').value;
	var address = document.getElementById('addressInput').value;

	if (address == '' || address == '|') {
		document.getElementById('aviso').innerHTML = 'Escribe una direcci' + unescape('&oacute;') + 'n';
		document.getElementById('addressInput').focus();
		return false;
	} else {
		geocoder.getLatLng(address + city + ', Spain', function(latlng) {
			if (!latlng) {
				alert('No se encuentra: ' + address + city + ', Spain');
			} else {
				searchLocationsNear(latlng, address + city, radius);
			}
		});
	}
}

function searchLocations2() {
	var address = document.getElementById('addressInput2').value;
	var radius = document.getElementById('radiusSelect2').value;
	if (address == '') {
		alert('Tu posición no se ha detectado. Busca por nombre de calle.')
		return false;
	} else {
		geocoder.getLatLng(address, function(latlng) {
			if (!latlng) {
				alert('No se encuentra: ' + address);
			} else {
				searchLocationsNear(latlng, address, radius);
			}
		});
	}
}

// busca los puntos cerca de esa dirección
function searchLocationsNear(center, addressInput, radius) {
	var anuncios = document.getElementById('anuncios');
	anuncios.style.display = 'none';

	var searchUrl = 'data_search.xml.php?lat=' + center.lat() + '&lng=' + center.lng() + '&radius=' + radius;

	GDownloadUrl(searchUrl, function(data) {
		var xml = GXml.parse(data);
		var markers = xml.documentElement.getElementsByTagName('marker');
		
		//map.removeOverlay(wikipediaInfo);
		//map.removeOverlay(panoramioThumbs);
		//map.clearOverlays(panoramioIcons);
		//map.clearOverlays(resultIcons);
		//map.clearOverlays(infoIcons);

		var sidebar_title = document.getElementById('sidebar_title');
		sidebar_title.style.display = 'block';

		var sidebar = document.getElementById('sidebar');
		sidebar.style.display = 'block';
		sidebar.innerHTML = '';

		bounds = new GLatLngBounds();
		
		if (markers.length == 0) {
			sidebar_title.innerHTML = '<h2>No existen resultados en un radio de ' + radius + ' Km. de \'' + addressInput + '\'</h2>';
			
			var origen = createMarker(center, 'No existen resultados en un radio<br />de ' + radius + ' Km. de \'' + addressInput + '\'', '', '');
			map.addOverlay(origen);
			bounds.extend(center);

			var sidebarEntry = createSidebarEntryError(origen, addressInput); 
			sidebar.appendChild(sidebarEntry);

			//map.setCenter(new GLatLng(42.20080126620032, -8.644695281982422), 13);
			map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));

			//getPanoramio();
			getWikipedia();
			getLocation();
			getTraffic();
		
			return;
		}

		sidebar_title.innerHTML = '<h2>Resultados en un radio de ' + radius + ' Km. de \'' + addressInput + '\'</h2>';
		for (var i = 0; i < markers.length; i++) {
			var name = markers[i].getAttribute('name');
			var address = markers[i].getAttribute('address');
			var address2 = markers[i].getAttribute('address2');
			var zip = markers[i].getAttribute('zip');
			var city = markers[i].getAttribute('city');
			var distance = parseFloat(markers[i].getAttribute('distance'));
			var point = new GLatLng(parseFloat(markers[i].getAttribute('lat')), parseFloat(markers[i].getAttribute('lng')));
			var categoryID = markers[i].getAttribute('categoryID');
			var category = markers[i].getAttribute('category');
			
			var moreInfo = address + ' ' + address2 + '<br /> ' + zip + ' ' + city + '<div class=\'cursiva\'>&nbsp;</div>'
			
			resultMarker = createMarker(point, name, moreInfo, categoryID);
			map.addOverlay(resultMarker);
			bounds.extend(point);

			var sidebarEntry = createSidebarEntry(resultMarker, name, address, distance, categoryID, category);	
			sidebar.appendChild(sidebarEntry);
		}
		map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
		
		//getPanoramio();
		getWikipedia();
		getLocation();
		getTraffic();
		
		var origen = createMarker(center, 'Resultados en un radio<br />de ' + radius + ' Km. de \'' + addressInput + '\'', '', '-1');
		map.addOverlay(origen);

		map.setCenter(origen.getLatLng(), map.getBoundsZoomLevel(bounds));		
	});
}

// crea la barra lateral con los resultados
function createSidebarEntry(marker, name, address, distance, categoryID, category) {
	var div = document.createElement('div');
	var html = '<img src=\'' + eval('customIcons[\'' + categoryID + '\'].image') + '\' alt=\'' + category + '\' title=\'' + category + '\'> ' + name + '<br \/>Direcci&oacute;n: ' + address + '<br \/>Distancia: ' + distance.toFixed(3) + ' Km.';
	div.innerHTML = html;
	div.className = 'entry';
	GEvent.addDomListener(div, 'click', function() {
		GEvent.trigger(marker, 'click');
	});
	GEvent.addDomListener(div, 'mouseover', function() {
		div.style.backgroundColor = '#57B5E0';
	});
	GEvent.addDomListener(div, 'mouseout', function() {
		div.style.backgroundColor = '#F2EFE9';
	});
	return div;
}

function createSidebarEntryError(marker, address) {
	var div = document.createElement('div');
	var html = '<img src=\'http://www.google.com/mapfiles/marker.png\' alt=\'' + address + '\' title=\'' + address + '\'> ' + address + '';
	div.innerHTML = html;
	div.className = 'entry';
	GEvent.addDomListener(div, 'click', function() {
		GEvent.trigger(marker, 'click');
	});
	GEvent.addDomListener(div, 'mouseover', function() {
		div.style.backgroundColor = '#57B5E0';
	});
	GEvent.addDomListener(div, 'mouseout', function() {
		div.style.backgroundColor = '#F2EFE9';
	});
	return div;
}
//]]>
