var LOCAL_EXTENT  = new OpenLayers.Bounds( -290161.04, 5295335.5, -191077.32, 5373290.31),
	GLOBAL_EXTENT   = new OpenLayers.Bounds( -20037508, -20037508, 20037508, 20037508.34),
	DONOSTIA_EXTENT = new OpenLayers.Bounds( -224779.99454734594, 5358980.567203188, -218946.8938273783, 5362319.909875799);

var MERCATOR_PROYECTION = "EPSG:900913";

var LAYERS = [
[ "Mapa Gipuzkoa 2009", "map", "png"],
[ "Orto Gipuzkoa 2006", "ort", "jpg"],
[ "Orto Gipuzkoa 1954", "ort1954", "jpg"]
];

var MAP_OPTIONS = {
	controls:           [new OpenLayers.Control.Navigation({zoomWheelEnabled: false}), new OpenLayers.Control.PanZoomBar(), new OpenLayers.Control.ScaleLine(), new OpenLayers.Control.MousePosition()/*,new OpenLayers.Control.LayerSwitcher()*/],
	maxExtent:          GLOBAL_EXTENT,
	maxResolution:      156543.0339,
	numZoomLevels:      20,
	units:              "m",
	projection:         new OpenLayers.Projection(MERCATOR_PROYECTION),
	displayProjection:  new OpenLayers.Projection("EPSG:4326")
};

var API_BASE_URL = "http://b5m.gipuzkoa.net/api/1.0/es/"
var layers = [], map;
var MIN_ZOOM = 13,
		MAX_ZOOM = 19;

function init() {
	// Mapa kargatu aurretik futzio hau exekutatzen dugu IEn maparen gainean scroll egiterakoan errorea ez emateko!!!!!!!!!!
	OpenLayers.Events.prototype.getMousePosition = function (evt) {
			if (!this.includeXY) {
					this.clearMouseCache();
			} else if (!this.element.hasScrollEvent) {
					OpenLayers.Event.observe(window, 'scroll',
							OpenLayers.Function.bind(this.clearMouseCache, this));
					this.element.hasScrollEvent = true;
			}
		 
			if (!this.element.scrolls) {
				this.element.scrolls = [
						(document.documentElement.scrollLeft
										 || document.body.scrollLeft),
						(document.documentElement.scrollTop
										 || document.body.scrollTop)
				];

			}

			if (!this.element.lefttop) {
				this.element.lefttop = [
						(document.documentElement.clientLeft || 0),
						(document.documentElement.clientTop  || 0)
				];
			}
		 
			if (!this.element.offsets) {
					this.element.offsets = OpenLayers.Util.pagePosition(this.element);
					this.element.offsets[0] += this.element.scrolls[0];
					this.element.offsets[1] += this.element.scrolls[1];
			}
			return new OpenLayers.Pixel(
					(evt.clientX + this.element.scrolls[0]) - this.element.offsets[0]
											 - this.element.lefttop[0],
					(evt.clientY + this.element.scrolls[1]) - this.element.offsets[1]
											 - this.element.lefttop[1]
			);
	};

	map = new OpenLayers.Map("b5map-mapArea", MAP_OPTIONS);
	//addPanels(map); // "manual zoom" eta "drag" funtzioak kendu behar ditut mouse wheel kentzeko...

	for(var i=0; i<LAYERS.length; i++) {
		var layerData = LAYERS[i] 
			layer = new OpenLayers.Layer.TMS( layerData[0],
				API_BASE_URL + "osgeo/tms/tileset/",
				{
				  layername:                layerData[1],
				  type:                     layerData[2],
				  proyection:               MERCATOR_PROYECTION,
				  displayOutsideMaxExtent:  false,
				  isBaseLayer:              true
				}
		  );
		map.addLayer(layer);
		layers.push(layer);
	}
	
	sombras = new OpenLayers.Layer.Markers("shadows");
	capas = new OpenLayers.Layer.Markers("Rincones con encanto");
	map.addLayer(sombras);
	map.addLayer(capas);
	loadDots();

	var center = (new OpenLayers.LonLat(-2.16757, 43.28267)).transform( map.displayProjection, MAP_OPTIONS.projection);
	map.setCenter(center , MIN_ZOOM+1, false, true);
	restrictZoom(map, MIN_ZOOM, MAX_ZOOM);

}

function loadDots() {
	var shadowsize = new OpenLayers.Size(23,14);
	var shadowoffset = new OpenLayers.Pixel(-8,-16);
	var shadow = new OpenLayers.Icon('http://www.gurezarautz.net/botika/b5m/img/shadow.png',shadowsize,shadowoffset);

	var icon = new Array();
	var iconberri=new Array();
	var shadowberri=new Array();
	//markers & shadows	
	for(i=jstots;i>=1;i--) {	
		var size = new OpenLayers.Size(19,30);
		var offset = new OpenLayers.Pixel(-10,-30);
		icon[i] = new OpenLayers.Icon('http://www.gurezarautz.net/botika/b5m/img/marker'+i+'.png',size,offset);
		iconberri[i] = icon[i].clone();
		shadowberri[i] = shadow.clone();
		
		markers=new OpenLayers.Marker(new OpenLayers.LonLat(jslon[i], jslat[i]),iconberri[i]);
		shadows=new OpenLayers.Marker(new OpenLayers.LonLat(jslon[i], jslat[i]),shadowberri[i]);
		markers.num=i;		

		markers.icon.imageDiv.firstChild.title = i+'. '+jsnom[i]; // puntuetan ALT agertzeko (title)
		
		markers.events.register('click', markers, function() {
			if(this.num<8) {
				tb_init(markers);
				tb_show(jsnom[this.num], "placeSheet.php?height=540&width=540&id="+this.num, null);
			} else {
				//location.href="placeSheet.php?height=540&width=540&id="+this.num;
			}
		});
		
		capas.addMarker(markers);
		sombras.addMarker(shadows);
	}
}

function switchToLayer(index) {
	map.setBaseLayer(layers[index]);
}
// ZOOM restrict
function restrictZoom(map, zoomMin, zoomMax) {
	map.events.register("zoomend", this, function() {
		var zoom = map.getZoom();
		if(zoom < zoomMin) {
			//console.log("" + zoom + " < " + zoomMin);
			map.zoomTo(zoomMin);
		}
		if(zoom > zoomMax) {
			//console.log("" + zoom + " > " + zoomMax);
			map.zoomTo(zoomMax);
		}
		//console.log(zoom);
	});
}
// ZOOM bar
function addPanels(map) {
	var zoomBox = new OpenLayers.Control.ZoomBox( {title: "manual zoom"}),
			mouseDefaults = new OpenLayers.Control.MouseDefaults( {title: "drag"}),
			panel = new OpenLayers.Control.Panel( {defaultControl: mouseDefaults});

	panel.addControls([zoomBox, mouseDefaults]);
	map.addControl(panel);
}