function addPosition(x, y, titulo, descripcion, idprovincia, html) {
	var marker = setMarker(x, y, getPositionHTML(titulo, descripcion, html));
	map.addOverlay(marker);
	jspuntos.push(new Array(marker,titulo,descripcion,html));
}

//Modifica el bounds en el porcentaje que se indique
function modifyBounds(bounds, percent) {
	var ne = bounds.getNorthEast();
	var sw = bounds.getSouthWest();
	var latdif = ne.lat() - sw.lat();
	var lngdif = sw.lng() - ne.lng();
	var ne2 = new GLatLng(ne.lat() + (latdif*percent), ne.lng() - (lngdif*percent));
	var sw2 = new GLatLng(sw.lat() - (latdif*percent), sw.lng() + (lngdif*percent));
	bounds.extend(ne2);
	bounds.extend(sw2);

	return bounds;
}

function setMarker(x, y, html) {
	var pos = new GLatLng(x, y);
	var newmarker = new GMarker(pos, options);
	GEvent.addListener(newmarker, "click", function() {
		newmarker.openExtInfoWindow(map, 'custom_info_window', html);
	});
	return newmarker;
}

function filter(jspuntos) {
	var bounds = new GLatLngBounds();
	var out = '';

	//Ordenar no es necesario, si los puntos vienen ordenados del servidor
	for (i in jspuntos) {
		if (jspuntos[i][0]) {
			bounds.extend(jspuntos[i][0].getLatLng());
			out += "<ul><li class=\"name\"><a href='javascript:centerPosition(" + i + ");'>" + jspuntos[i][1] + "</a></li>" + jspuntos[i][2] + "</ul>";
		}
	}
	$('#listado').html(out);
	bounds = modifyBounds(bounds, 0.20);
	var estimatedLevel = map.getBoundsZoomLevel(bounds);
	/*
	if (estimatedLevel > 7) {
		estimatedLevel = 7;
	} else {
		estimatedLevel = 5;
	}*/
	map.setZoom(estimatedLevel);
	map.panTo(bounds.getCenter());
}

function centerPosition(index) {
	$.scrollTo($('#contents'), 800);
	jspuntos[index][0].openExtInfoWindow(map, 'custom_info_window', getPositionHTML(jspuntos[index][1], jspuntos[index][2], jspuntos[index][3]));
	map.setCenter(jspuntos[index][0].getLatLng(), 7);
}

function getPositionHTML(titulo, descripcion, html) {
	return "<h2>"+titulo+"</h2><ul>"+descripcion+"</ul>"+html+"";
}

//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));
	}
	return false;
}

function getEntities(entityType, pag)
{
	var opts = '';
	var i = 0;
	$('#fieldset_search input:text,#fieldset_search input:hidden,#fieldset_search select').each(function(){
		if (defaultFieldValues[$(this).attr('id')] && defaultFieldValues[$(this).attr('id')] == $(this).val()) {
			return;
		}
		if ($(this).val() != '' && $(this).val() != 0) {
			opts += $(this).attr('name') + ':' + $(this).val() + '|';
		}
	});
	$('#fieldset_search input:radio:checked').each(function(){
		if ($(this).val() != '' && $(this).val() != 0) {
			opts += $(this).attr('name') + ':' + $(this).val() + '|';
		}
	});
	$.getJSON(BASE_PATH + '_entities_search.php', {ent: entityType, page: pag, options: opts}, function(data) {
		if (data['entities'].length == 0){
			alert('No hay resultados')
		} else {
			$('div.result').show();
			cleanMap();
			var entitiesCount = data['entities'].length;
			for(var i = 0; i < entitiesCount; i++) {
				addPosition(data['entities'][i]['latitude'], data['entities'][i]['longitude'], data['entities'][i]['title'], data['entities'][i]['description'],data['entities'][i]['id_province'], data['entities'][i]['html']);
			}
			showPagination(data['paging']['limit'], data['paging']['number'],data['paging']['pag'],data['paging']['ent'], data['paging']['total']);
			filter(jspuntos);
		}
	});
}

function cleanMap() {
	$('#listado').empty();
	if (map.getExtInfoWindow()) {
		map.closeExtInfoWindow();
	}
	map.clearOverlays();
	jspuntos = new Array();
}

function showPagination(limit, number, pag, ent, total)
{
	var threshold = 3;
	pag = parseInt(pag);
	number = parseInt(number);
	if ((pag - threshold) <= 0){
		initPage = 1;
	} else {
		initPage = (pag - threshold);
	}
	if ((pag + threshold) > number) {
		lastPage = number;
	} else {
		lastPage = (pag + threshold);
	}
	if (!total || total == 'undefinded') {
		$('#result_count').html('0');
	} else {
		$('#result_count').html(total);
	}
	$('div.linkPagings').empty();
	if (initPage > 1) $('div.linkPagings').append('<a class="pagesLink" href="#" onclick="getEntities('+ent+',1);return false;">1</a> &nbsp;');
	if (initPage > 2) $('div.linkPagings').append('...&nbsp;');
	for(var i = initPage; i<=lastPage; i++) {
		if (i == pag) {
			$('div.linkPagings').append('<a class="pagesLink selected" href="#" onclick="getEntities('+ent+','+i+');return false;">'+i+'</a> &nbsp;');
		} else {
			$('div.linkPagings').append('<a class="pagesLink" href="#" onclick="getEntities('+ent+','+i+');return false;">'+i+'</a> &nbsp;');
		}
	}
	if (lastPage < (number-1)) $('div.linkPagings').append('...&nbsp;');
	if (lastPage < number) $('div.linkPagings').append('<a class="pagesLink" href="#" onclick="getEntities('+ent+','+number+');return false;">'+number+'</a> &nbsp;');
}

