/*
 * Auteurs orginaux
 * [Berio Molina->http://www.berio.alg-a.org]
 * [Horaciogd->http://www.vhplab.net]
 * 
 */

function agregarMarcador (xmlItem, markerLayer, map) {
	var xmlLat = jQuery("geo_lat",xmlItem);
	var xmlLng = jQuery("geo_long",xmlItem);
	var popup = null;
	if ((xmlLat.length == 0) || (xmlLng.length == 0)) {
		return;
	}

	var lat = parseFloat(xmlLat.text());
	var lng = parseFloat(xmlLng.text());

	var id   = jQuery("guid", xmlItem).text();
	var html = jQuery("description", xmlItem).text();
	var icon = jQuery("geo_icon", xmlItem).text();

	var point = new OpenLayers.LonLat(lng,lat);
	var size = new OpenLayers.Size(55,32);
	var calculateOffset = function(size) { return new OpenLayers.Pixel(-(size.w/2), -size.h); };
	var urlicon = (icon != "" ? icon :  "osm/img/flag.png");
	var icon = new OpenLayers.Icon(urlicon, size, null, calculateOffset);
	var marcador = new OpenLayers.Marker(point.fromDataToDisplay(), icon);
	
	marcador.events.register("mousedown", marcador, function mousedown(evt) {
		if (popup == null) {
			popup = new OpenLayers.Popup.FramedCloud(
				"popup"+id,
				point.fromDataToDisplay(),
				new OpenLayers.Size(100,100),
				html, null, true
			);

			popup.panMapIfOutOfView = true;
			popup.autoSize = true;
			map.addPopup(popup);
		} else {
			popup.toggle();
		}
		OpenLayers.Event.stop(evt);
	});
	markerLayer.addMarker(marcador);	
}



OpenLayers.LonLat = OpenLayers.Class(OpenLayers.LonLat, {

	dataProjection: new OpenLayers.Projection("EPSG:900913"),
			
	mapProjection: new OpenLayers.Projection("EPSG:4326"),
    	
	fromDisplayToData: function() {
		if(this.dataProjection != this.mapProjection) {
			return new OpenLayers.LonLat(this.lon, this.lat).transform(this.dataProjection, this.mapProjection);
		} else {
			return new OpenLayers.LonLat(this.lon, this.lat);
		}
	},
			
	fromDataToDisplay: function() {
		if(this.dataProjection != this.mapProjection) {
			return new OpenLayers.LonLat(this.lon, this.lat).transform(this.mapProjection, this.dataProjection);
		} else {
			return new OpenLayers.LonLat(this.lon, this.lat);
		}
	}
			
});


function geocode(address, map) {
	var lon = "";
	var lat = "";
	jQuery.getJSON("http://ws.geonames.org/searchJSON?maxRows=1&q='" + address + "'", function(data){
		jQuery.each(data.geonames, function(i,geoname){
			lon = geoname.lng;
			lat = geoname.lat;
		});
		var lonlat = new OpenLayers.LonLat(lon, lat);
		map.setCenter(lonlat.fromDataToDisplay());
	});
}

