//FUNCIONES BASICAS
function getLatitudPointerX(pointer){
	var latitud="ND";
	var pointer_array=pointer.split(",");
	if (pointer_array.length==2){
		var latitud_array=pointer_array[0].split("(");
			if(latitud_array.length==2){
				latitud=latitud_array[1];
			}
	}
	return latitud;
}
function getLongitudPointerY(pointer){
	var longitud="ND";
	var pointer_array=pointer.split(",");
	if (pointer_array.length==2){
		var longitud_array=pointer_array[1].split(")");
			if(longitud_array.length==2){
				longitud=longitud_array[0];
			}
	}
	return longitud;
}


//FUNCIONES PERSONALIZADAS
function pintarGMapCaptura(NombreCapaMapa,NombreCapaMensaje,GeoX,GeoY,GeoZoom,idHiddenGeoX,idHiddenGeoY,idHiddenGeoZoom,bCursor,bZoom,bMarcarPunto){

	 if(NombreCapaMapa.length==0){
		 alert('Error en la llamada a pintarGMapCaptura: parametro \'NombreCapa\'');
	 }else if(GeoX.length==0 || GeoY.length==0 || GeoZoom.length==0){
		 alert('Error en la llamada a pintarGMapCaptura: parametros \'GeoX, GeoY, GeoZoom\'');
	 }else if(idHiddenGeoX.length==0 || idHiddenGeoY.length==0 || idHiddenGeoZoom.length==0){
		  alert('Error en la llamada a pintarGMapCaptura: parametros \'idHiddenGeoX, idHiddenGeoY, idHiddenGeoZoom\'');
	 }else{
		 if (GBrowserIsCompatible()) {
				//Definicion
				var map = new GMap2(document.getElementById(NombreCapaMapa));
				if(bCursor)	{ map.addControl(new GSmallMapControl());	}
				if(bZoom)	{ map.addControl(new GMapTypeControl());	}
				
				///Default
				var GeoXDefault = GeoX;
				var GeoYDefault = GeoY;
				var GeoZoomDefault = GeoZoom;
				map.setCenter(new GLatLng(GeoX, GeoY), GeoZoom);
				
				//Marcar el punto dado
				if(bMarcarPunto)	{ 
					var point   = new GLatLng(GeoX,GeoY); 
					map.addOverlay(new GMarker(point));
					//Form con el punto
					document.getElementById(idHiddenGeoX).value = GeoX;
					document.getElementById(idHiddenGeoY).value = GeoY;
					document.getElementById(idHiddenGeoZoom).value = GeoZoom;
					document.getElementById(NombreCapaMensaje).innerHTML = "(" + GeoX + "," + GeoY + "), Zoom=" + GeoZoom;
				}else{
					//Form default
					document.getElementById(idHiddenGeoX).value = "";
					document.getElementById(idHiddenGeoY).value = "";
					document.getElementById(idHiddenGeoZoom).value = "";
				}
				

				
				///Eventos
				GEvent.addListener(map, "click", function(marker, point) {  
					if (marker) {
						map.removeOverlay(marker);	
						//Form default
						document.getElementById(idHiddenGeoX).value = "";
						document.getElementById(idHiddenGeoY).value = "";
						document.getElementById(idHiddenGeoZoom).value = "";
						document.getElementById(NombreCapaMensaje).innerHTML = "No hay seleccion";
					} else {
						if(point){
							if(document.getElementById(idHiddenGeoX).value=="" || document.getElementById(idHiddenGeoY).value==""){
								map.addOverlay(new GMarker(point));
								document.getElementById(idHiddenGeoX).value 	 = getLatitudPointerX(point.toString());
								document.getElementById(idHiddenGeoY).value 	 = getLongitudPointerY(point.toString());
								document.getElementById(idHiddenGeoZoom).value = map.getZoom();
								document.getElementById(NombreCapaMensaje).innerHTML = point.toString() + ", Zoom=" +  map.getZoom();
							}
						}
					}
				});
				GEvent.addListener(map, "zoomend", function() {  
						if(document.getElementById(idHiddenGeoX).value!="" && document.getElementById(idHiddenGeoY).value!=""){
							document.getElementById(idHiddenGeoZoom).value = map.getZoom();
							document.getElementById(NombreCapaMensaje).innerHTML = "(" + document.getElementById(idHiddenGeoX).value+ "," + document.getElementById(idHiddenGeoY).value + "), Zoom=" +  map.getZoom();
						}else{
							document.getElementById(NombreCapaMensaje).innerHTML = "No hay seleccion";
						}
					}
				);
		  }  
	 }
}

// Busquedas
function coordenadaMin(arrayCoordenadas){
	var valor=0;		
	for(i=0;i<arrayCoordenadas.length;i++){
		if(valor!=""){
			if (valor > arrayCoordenadas[i]){
				valor = arrayCoordenadas[i];
			}
		}else{
			valor = arrayCoordenadas[i];
		}
	}
	return valor;
}
function coordenadaMax(arrayCoordenadas){
	var valor=0;
	for(i=0;i<arrayCoordenadas.length;i++){
		if(valor!=""){
			if (valor < arrayCoordenadas[i]){
				valor = arrayCoordenadas[i];
			}
		}else{
			valor = arrayCoordenadas[i];
		}
	}
	return valor;
}

function coordenadaMedio(arrayCoordenadas, valorDefault){
	var valormin=coordenadaMin(arrayCoordenadas);
	var valormax=coordenadaMax(arrayCoordenadas);
	var resultado = valorDefault;
	if(valormin!="" || valormax!=""){
		if(valormax<0 && valormin<0){
			resultado = (valormin - valormax)/(-2) + valormin;
		}else{
			resultado = (valormax - valormin)/2 + valormin;
		}
	}
	return resultado;
}

function zoomOptimo(arrayX,arrayY,Constante,arrayZoom){
	var Xmin= coordenadaMin(arrayX);
	var Xmax= coordenadaMax(arrayX);
	var Ymin= coordenadaMin(arrayY);
	var Ymax= coordenadaMax(arrayY);
	var Zoommin = coordenadaMax(arrayZoom);
	var aux1= Math.pow((Xmax -Xmin),2);
	var aux2= Math.pow((Ymax -Ymin),2);
	var distanciaXY = Math.sqrt(aux1+aux2);
	var	resultZoom = 17;
	
	if(distanciaXY==0){
		resultZoom = Zoommin;
	}else{
		for(i=0;i<17-1;i++){
			if (distanciaXY > Constante * Math.pow(2,i)){
				resultZoom = 17 - 1 - i;
			}
		}
	}

	//Comprobemos resultado
	if (resultZoom < 0){
		resultZoom = 0;
	}
	
	return resultZoom;
}

function createMarker(point, index) {
	var baseIcon = new GIcon();
	baseIcon.shadow = "http://www.adibama.es/img/gmaps/markerShadow.png";
	baseIcon.iconSize = new GSize(20, 34);
	baseIcon.shadowSize = new GSize(37, 34);
	baseIcon.iconAnchor = new GPoint(9, 34);
	baseIcon.infoWindowAnchor = new GPoint(9, 2);
	baseIcon.infoShadowAnchor = new GPoint(18, 25);
	
	var letteredIcon = new GIcon(baseIcon);
	letteredIcon.image = "http://www.adibama.es/img/gmaps/marker" + index + ".png";
	
	// Set up our GMarkerOptions object
	markerOptions = { icon:letteredIcon };
	var marker = new GMarker(point, markerOptions);
						
	return marker;
}