function GMap()	{

	var map      = null;
	var geocoder = null;
	var latitude     = null;
	var longitude     = null;
	var point = null;
	var div= null;
	var url= 'http://static.meseon.net/images/common/map/'
	var p_news= 'pointer_b.png';
	var p_museum= 'pointer_g.png';
	var p_gallery= 'pointer_p.png';
	
	this.initialize = initialize;
	this.w_loadskel = w_loadskel;
	this.ajax_loadskel = ajax_loadskel;
	this.loadskel = loadskel;
	this.unload = unload;
	this.getIcon= getIcon;
	this.setRawinMap= setRawinMap;
	this.setIconinMap= setIconinMap;
	this.setTIconinMap= setTIconinMap;
	this.setMuseuminMap= setMuseuminMap;
	this.setGalleryinMap= setGalleryinMap;
	this.showAddress= showAddress;
	this.searchAddress= searchAddress;
	this.getHtmlContent= getHtmlContent;
	this.getTableHtmlContent= getTableHtmlContent;

    function unload()	{
	GUnload();
    }
    function initialize(lati, long) {
	//alert(div);
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map") );
	
	if (lati!=0 && long!=0)	{
        	map.setCenter(new GLatLng(lati, long),15);
		point= new GLatLng(lati, long);
		map.addOverlay(new GMarker(point));
	} else {
		map.setCenter(new GLatLng(40.420116, -3.703731), 3);
	}
        map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
	geocoder = new GClientGeocoder();
	GEvent.addListener(map, "click", 
		function(marker, point) {
 		 	if (marker) {
               				null;
              		} else {  
          			map.clearOverlays();
				var marcador = new GMarker(point);
				map.addOverlay(marcador);
				latitude = Math.round(point.y * 1000000)/1000000;
				longitude = Math.round(point.x * 1000000)/1000000;
				$('latitude').value= latitude;$('longitude').value= longitude;
				}
  			});

      	}
    }

	function w_loadskel()	{
		if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("map") );
			map.addControl(new GSmallMapControl());
			map.addControl(new GMapTypeControl());
			geocoder = new GClientGeocoder();
		}
	}

	function ajax_loadskel()	{
		map = new GMap2(document.getElementById("map") );
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		geocoder = new GClientGeocoder();
	}

	function loadskel(lati, long, zoom)	{
		if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("map") );
		
			if (lati!=0 && long!=0)	{
				if (zoom<0)
					zoom= 15;
				map.setCenter(new GLatLng(lati, long),zoom);
				//point= new GLatLng(lati, long);
				//map.addOverlay(new GMarker(point));
			} else {
				if (zoom<0)
					zoom= 3;
				map.setCenter(new GLatLng(40.420116, -3.703731), zoom);
			}
			map.addControl(new GSmallMapControl());
			map.addControl(new GMapTypeControl());
			geocoder = new GClientGeocoder();
		}
	}

	function getIcon(flavour)	{ //flavour=1 => news //flavour=2 =>museum //flavour=3 => gallery 
		var icon = new GIcon(G_DEFAULT_ICON);
		if (flavour==1)
			icon.image = url + p_news;
		else if (flavour==2)
			icon.image = url + p_museum;
		else if (flavour==3)
			icon.image = url + p_gallery;	
			
		icon.iconSize = new GSize(20,35);
		return icon;
	}

	function setRawinMap(flavour, lati, long, frame, b_open)	{
		var point= new GLatLng(lati, long);
		var marker = new GMarker(point, this.getIcon(flavour));
		map.addOverlay(marker);
		GEvent.addListener(marker, 'click', function() {
			marker.openInfoWindowHtml(frame);
		});
		if (b_open)	{			
			marker.openInfoWindowHtml(frame);
		}
		return marker;
	}

	function setIconinMap(flavour, lati, long, a_content, b_open)	{
		var point= new GLatLng(lati, long);
		var marker = new GMarker(point, this.getIcon(flavour));
		map.addOverlay(marker);
		GEvent.addListener(marker, 'click', function() {
			marker.openInfoWindowHtml(getHtmlContent(a_content));
		});
		if (b_open)	{			
			marker.openInfoWindowHtml(getHtmlContent(a_content));
		}
		return marker;
	}

	function setGalleryinMap(lati, long, a_content, b_open)	{
		return this.setTIconinMap(3, lati, long, a_content, b_open);
	}

	function setMuseuminMap(lati, long, a_content, b_open)	{
		return this.setTIconinMap(2, lati, long, a_content, b_open);
	}

	function setTIconinMap(flavour, lati, long, a_content, b_open)	{
		var point= new GLatLng(lati, long);
		var marker = new GMarker(point, this.getIcon(flavour));
		map.addOverlay(marker); 
		GEvent.addListener(marker, 'click', function() {
			marker.openInfoWindowHtml(getTableHtmlContent(a_content));
		});
		if (b_open)	{			
			marker.openInfoWindowHtml(getTableHtmlContent(a_content));
		}
		return marker;
	}

	function getTableHtmlContent(a_content)	{
		var image= '';
		if (a_content['image']!="")	{
			image= "<img src=" + a_content['image'] + " width='80' />";
		}
		var html= "<table><tr><td style='vertical-align: top;'>" + image +" </td><td style='padding-left: 6px;vertical-align: top;'><span style='font-size: 8pt; font-family: verdana'><b>" +a_content['name'] + "</b></span><br>"  +a_content['desc'] + "</td></tr></table>";
		return html;
	}


	function getHtmlContent(a_content)	{
		var html= "<span style='font-size: 8pt; font-family: verdana'><b>" +a_content['name'] + "</b></span><br>" 
		+a_content['desc'];
		return html;
	}

	function showAddress(address, zoom)	{
		if (geocoder) {		
			geocoder.getLatLng(address,
				function(point) {
				if (!point) {
					//alert(address + " not found");
				} else {
					if (zoom <0)
						zoom= 10;
					map.setCenter(point, zoom);
				}
			}
			);	
		}
	}

	function setAddress()	{
		$('qa').value= $('street').value + ', ' + $('city').value;
	}

	function searchAddress(address) {
		if (geocoder) {		
			geocoder.getLatLng(address,
				function(point) {
				if (!point) {
					//alert(address + " not found");
				} else {
					map.setCenter(point, 16);
					var marker = new GMarker(point);
					map.addOverlay(marker);
					
					lati = Math.round(point.y * 1000000)/1000000;
					long = Math.round(point.x * 1000000)/1000000;
					$('latitude').value= lati;$('longitude').value= long;
				}
			}
			);	
		}
	}

}