var elements = new Array();

function viewLayer() {
	var zoom = map.getZoom();
	var bounds = map.getBounds();

	//Muestra un solo punto (España)
	if(zoom <= zoomMaxCountry) {
		clearAllmarkers();
		elements.push({
			"id"		: "0",
			"latitude"	: latCountry,
			"longitude"	: lngCountry,
			"category"	: country,
			"name"		: "España"
		});
		addMarkers(getMarkers(1, false),zoomMinCountry,zoomMaxCountry);
	//Muestra tantos punteros como provincias (52)
	} else if(zoom >= zoomMinProvince && zoom <= zoomMaxProvince) {
		clearAllmarkers();
		$.getJSON(BASE_PATH +'modules/_getmarkers.php',{
				typeMarker	: "province"
			},
			function(request) {
				for(i = 0; i < request.length; i++) {
					elements.push({
						"id"		: request[i].id_province,
						"latitude"	: request[i].latitude,
						"longitude"	: request[i].longitude,
						"category"	: province,
						"name"		: request[i].province
					});
				}
				addMarkers(getMarkers(request.length, false),zoomMinProvince, zoomMaxProvince);
			}
		);
	//Muestra los punteros como Codigo Postal
	} else if(zoom >= zoomMinZipCode && zoom <= zoomMaxZipCode) {
		clearAllmarkers();
		showLoading();
		$.getJSON(BASE_PATH +'modules/_getmarkers.php',{
				typeMarker	: "zipCode",
				latSW		: bounds.getSouthWest().lat(),
				lngSW		: bounds.getSouthWest().lng(),
				latNE		: bounds.getNorthEast().lat(), 
				lngNE		: bounds.getNorthEast().lng()
			},
			function(request) {
				hideLoading();
				for(i = 0; i < request.length; i++) {
					elements.push({
						"id"		: request[i].zipCode,
						"latitude"	: request[i].latitude,
						"longitude"	: request[i].longitude,
						"category"	: zipCode,
						"name"		: request[i].name
					});
				}
				addMarkers(getMarkers(request.length, false),zoomMinZipCode, zoomMaxZipCode);
			}
		);
	//Muestra el numero total de punteros dependiendo del trozo de mapa que se este visualizando actualmente.
	} else {
		clearAllmarkers();
		showLoading();
		$.getJSON(BASE_PATH +'modules/_getmarkers.php',{
				typeMarker: "atms",
				latSW		: bounds.getSouthWest().lat(),
				lngSW		: bounds.getSouthWest().lng(),
				latNE		: bounds.getNorthEast().lat(), 
				lngNE		: bounds.getNorthEast().lng(),
				orderBy		: orderBy,
				orderType	: orderType
			},
			function(request) {
				hideLoading();
				for(i = 0; i < request.length; i++) {
					elements.push({
						"id"			: request[i].id_terminal,
						"latitude"		: request[i].latitude,
						"longitude"		: request[i].longitude,
						"category"		: atms,
						"name"			: request[i].name,
						"title"			: request[i].title,
						"content"		: request[i].content,
						"bank"			: request[i].bank,
						"address"		: request[i].address,
						"numberAddress"	: request[i].number_address,
						"zipCode"		: request[i].zipCode,
						"city"			: request[i].city,
						"province"		: request[i].province
					});
				}
				addMarkers(getMarkers(request.length, true),zoomMinATM, zoomMaxATM);
				//Pintamos los resultados en un div para una vista "rapida"
				addMarkersToDiv();
			}
		);

	}
}

//Crea los punteros
function getMarkers(n, atms) {
	var markers = [];
	for(var i = 0; i < n; i++) {
			if (atms == true) {
				markers.push(
					addPositionWithBalloons(
						elements[i]['id'],
						elements[i]['latitude'],
						elements[i]['longitude'],
						elements[i]['category'], 
						elements[i]['name'],
						elements[i]['title'],
						elements[i]['content'],
						elements[i]['bank'],
						i)
				);
			} else {
				markers.push(
					addPosition(elements[i]['id'],elements[i]['latitude'],elements[i]['longitude'],elements[i]['category'], elements[i]['name'])
				);
			}
	}
	return markers;
}

//Añade los puntos al managerMarker
function addMarkers(markers, zoomMin, zoomMax) {
	groupMgr.addMarkers(markers,zoomMin, zoomMax);
	groupMgr.refresh();
}

function getProvinces(){
	map.setCenter(this.getLatLng(), zoomInitialize);
}

function getZipCodes(){
	map.setCenter(this.getLatLng(), zoomMinZipCode);
}

function getATMs(){
	map.setCenter(this.getLatLng(), zoomMinATM);
}

function addPosition(idMarker, x, y, category, name) {
	var marker = setMarkerFixed(x, y, name, category);
	return marker;
}

function addPositionWithBalloons(id, x, y, category, name, title, content, bank, index) {
	var linkAtm		= '<a class="link_error" href="' + linkAtmError + '&amp;id_terminal=' + id + '">' + txtInfoAtmError + '</a>';
	var balloons	= title + content;
	var marker		= setMarker(x, y, name, balloons, bank, id);
	total[index]	= new Array();
	total[index].push({0: marker, 1: title, 2: content, 3: linkAtm, 4: id});
	return marker;
}

function clearAllmarkers() {
	groupMgr.clearMarkers();
	elements.length = 0;
	total.length = 0;
	//$('#listado').empty();
	$('#listado').fadeOut(800);
	$('.result').fadeOut(900);
	zoom  = map.getZoom();
	if(zoom < zoomMinATM) {
		closeInfoWindow();
	}
}

function setMarker(x, y, name, balloons, bank, id) {
	var pos = new GLatLng(x, y);
	if(selectBank == bank) {
		var newmarker = new GMarker(pos, {icon: gmIconResalted, title: name});
	} else {
		var newmarker = new GMarker(pos, {icon: gmIcon, title: name});
	}
	GEvent.addListener(newmarker, "click", function() {
		var mapType = map.getCurrentMapType();
		if(mapType == G_SATELLITE_3D_MAP) {
			map.openInfoWindowHtml(pos,balloons);
		} else {
			newmarker.openExtInfoWindow(map, 'custom_info_window', balloons, {paddingX: 4, paddingY: 4, beakOffset: 5});
		}
		$('#link_info').attr('href', linkAtmError + '&id_terminal=' + id);
	});
	return newmarker;
}

function setMarkerFixed(x, y, name, category) {
	var pos = new GLatLng(x, y);
	switch (category) {
		case 1:
			var nextStep = getProvinces;
			break;
		case 2:
			var nextStep = getZipCodes;
			break;
		case 3:
			var nextStep = getATMs;
			break;
	}
	var marker = new GMarker(pos,{icon: gmIcon, title: name});
	GEvent.bind(marker, "click", marker, nextStep);
	return marker;
}

function addMarkersToDiv() {
	var body		= "";
	var html		= "";
	var color		= 1;
	var classColor	= "one";

	var header = "<table id='atms_result' summary='"+ txtSummary + "'>" +
		"<thead id='header_result'>" +
			"<tr>" +
				"<th class='result_bank'>"+ txtBank + " " +
					"<a href='#' class='orderAtm_asc' onclick='orderAtms(\"id_bank\",\"ASC\"); return false;'><img src='./themes/"+THEME+"/images/order_asc.jpg' alt='"+txtASC+"' /></a> " +
					"<a href='#' class='orderAtm_desc' onclick='orderAtms(\"id_bank\",\"DESC\"); return false;'><img src='./themes/"+THEME+"/images/order_desc.jpg' alt='"+txtDESC+"' /></a>" +
				"</th>" +
				"<th class='result_address'>"+ txtAddress + " " +
					"<a href='#' class='orderAtm_asc' onclick='orderAtms(\"address\",\"ASC\"); return false;'><img src='./themes/"+THEME+"/images/order_asc.jpg' border'0' alt='"+txtASC+"' /></a> " +
					"<a href='#' class='orderAtm_desc' onclick='orderAtms(\"address\",\"DESC\"); return false;'><img src='./themes/"+THEME+"/images/order_desc.jpg' border'0' alt='"+txtDESC+"' /></a> " +
				"</th>" +
				"<th class='result_zipCode'>"+ txtZipCode + " " +
					"<a href='#' class='orderAtm_asc' onclick='orderAtms(\"post_code\",\"ASC\"); return false;'><img src='./themes/"+THEME+"/images/order_asc.jpg' border'0' alt='"+txtASC+"' /></a> " +
					"<a href='#' class='orderAtm_desc' onclick='orderAtms(\"post_code\",\"DESC\"); return false;'><img src='./themes/"+THEME+"/images/order_desc.jpg' border'0' alt='"+txtDESC+"' /></a> " +
				"</th>" +
				"<th class='result_city'>"+ txtCity + " " +
					"<a href='#' class='orderAtm_asc' onclick='orderAtms(\"city\",\"ASC\"); return false;'><img src='./themes/"+THEME+"/images/order_asc.jpg' border'0' alt='"+txtASC+"' /></a> " +
					"<a href='#' class='orderAtm_desc' onclick='orderAtms(\"city\",\"DESC\"); return false;'><img src='./themes/"+THEME+"/images/order_desc.jpg' border'0' alt='"+txtDESC+"' /></a> " +
				"</th>" +
				"<th class='result_province'>"+ txtProvince + " " +
					"<a href='#' class='orderAtm_asc' onclick='orderAtms(\"id_province\",\"ASC\"); return false;'><img src='./themes/"+THEME+"/images/order_asc.jpg' border'0' alt='"+txtASC+"' /></a> " +
					"<a href='#' class='orderAtm_desc' onclick='orderAtms(\"id_province\",\"DESC\"); return false;'><img src='./themes/"+THEME+"/images/order_desc.jpg' border'0' alt='"+txtDESC+"' /></a> " +
				"</th>" +
			"</tr>" +
		"</thead>";
	body = "<tbody id='body_result'>";
	for (var i = 0; i < elements.length; i++) {
		if (color == 1) {
			classColor = "one";
			color = 2;
		} else {
			classColor = "two";
			color = 1;
		}
		body+= "<tr id='atm_"+i+"' class='link_atm " + classColor + "' onclick='centerPosition("+i+");' onmouseout='darken("+i+",\""+classColor+"\");' onmouseover='lighten("+i+");'>";
		if (selectBank == elements[i].bank) {
			body+= "<td class='bank_field highlighted'>" + elements[i].bank + "</td>";
		} else {
			body+= "<td class='bank_field '>" + elements[i].bank + "</td>";
		}
		body+= "<td class='address_field '>" + elements[i].address + ", " + elements[i].numberAddress + "</td>";
		body+= "<td class='zipCode_field '>" + elements[i].zipCode + "</td>";
		body+= "<td class='city_field '>" + elements[i].city + "</td>";
		body+= "<td class='province_field '>" + elements[i].province + "</td>";
		body+= "</tr>";
	}
	body+= "</tbody>"
	html = header + body + "</table>";
	$('#listado').html(html);
	$('#listado').fadeIn(600);
	$('.result').fadeIn(800);
}

function lighten(id) {
	$("#atm_"+id).attr('class','link_atm lighten');
}

function darken(id,preClass) {
	$("#atm_"+id).attr('class','link_atm '+preClass);
}

function showLoading() {
	$('#loadingMarkers').css("display", "block");
}

function hideLoading() {
	$('#loadingMarkers').css("display", "none");
}

function orderAtms(orderAtm, orderAtmType) {
	orderBy		= orderAtm;
	orderType	= orderAtmType;
	viewLayer();
}

function searchAddress() {
	var address;
	var bank;
	address = $('#address').val();
	bank = $('#bank').val();
	selectBank = bank;

	if(address != txtAddressExample) {
		address+= ', spain';
		geocoder.getLocations(address,searchLocation);
	} else {
		if(zoom >= zoomMinATM) {
			viewLayer();
		} else {
			alert(txtNotFilterBank);
		}
	}
}

function searchLocation(address){
	var html = '<div id="resultAddress">' + txtTitleResult + '</div>';
	html+= '<span id="closeAddress"><img src="./themes/'+THEME+'/images/close.gif" alt="'+txtClose+'" onclick="closeAddress(true);" /></span>';
	var lat = 0;
	var lng = 0;
	if (address.Status.code == G_GEO_SUCCESS){
		if (address.Placemark.length == 1){
			clearAllmarkers();
			closeInfoWindow();
			lat = address.Placemark[0].Point.coordinates[1];
			lng = address.Placemark[0].Point.coordinates[0];
			addressTitle = address.Placemark[0].address;
			setAddress(lat, lng, addressTitle);
		} else {
			clearAllmarkers();
			closeInfoWindow();
			html+= "<ul id='listAddress'>";
			for(var i = 0; i < address.Placemark.length; i++) {
				lat = address.Placemark[i].Point.coordinates[1];
				lng = address.Placemark[i].Point.coordinates[0];
				html+="<li class='linkAddress'><a href='#' class='titleLink' onclick='setAddress(" + lat + "," + lng + ",\""+ address.Placemark[i].address +"\");' >" + address.Placemark[i].address + "</a></li>";
			}
			html+= "</ul>";
			$('#selectAddress').html(html);
			$('#selectAddress').fadeIn(800);
			$('#listado').fadeOut(800);
		}
	} else {
		alert(txtAddressNoFound);
	}
}

function setAddress(lat,lng, address) {
	zoom = zoomSearch;
	map.setCenter(new GLatLng(lat,lng), zoom);
	//$('#address').val(address);
	closeAddress(false);
}

function closeInfoWindow() {
	map.closeExtInfoWindow();
}
function closeAddress(refreshMap) {
	$('#selectAddress').empty();
	$('#selectAddress').fadeOut(800);
	if(refreshMap) {
		viewLayer();
	}
}

function centerPosition(index) {
	$.scrollTo($('#contents'), 800);
	var balloons = total[index][0][1] + total[index][0][2];
	var mapType = map.getCurrentMapType();
	if(mapType == G_SATELLITE_3D_MAP) {
		map.openInfoWindowHtml(total[index][0][0].getLatLng(),balloons);
	} else {
		total[index][0][0].openExtInfoWindow(map, 'custom_info_window', balloons, {paddingX: 4, paddingY: 4, beakOffset: 5});
	}
	//Cambiamos la Url del formulario de información de cajero mal posicionado.
	$('#link_info').attr('href', linkAtmError + '&id_terminal=' + total[index][0][4]);
}

//Buscar dirección captura el evento de pulsado de return
function sendReturnEvent(event, id) {
	var evt = (evt) ? evt : ((event) ? event : null);
	var node = (evt.target) ? evt.target: ((evt.srcElement) ? evt.srcElement: null);
	if (evt.keyCode == 13) {
		//eval(document.getElementById(id).onclick(event));
		searchAddress();
	}
	return false;
}