var Engine = detectBrowser();
var extension = (Engine.isMSIE && !Engine.isMSIE7)? "gif" : "png";
var imgClassName = (Engine.isMSIE && !Engine.isMSIE7)?" TransparentGIF":" TransparentPNG";




function toggleLayerVisibility(layerIndex) {
	var layerId = layers[layerIndex];
	var tiles = document.getElementsByClassName('customTileL'+layerId);
	for(var i=0;i < tiles.length;i++) {
		if (style==undefined) {
			var style = (actualTabStatus[layerIndex]==0)?'none':'block';
		}
		tiles[i].style.display = style;
	}
	if (layerVisibility[layerIndex]==false) layerVisibility[layerIndex] = true;
	else layerVisibility[layerIndex] = false;
}

function inArray(arrayObj,value) {
	for(var i=0;i<arrayObj.length;i++) {
		if (arrayObj[i] == value) return true;
	}
	return false;
}

function refreshZoom() {
	if (!NoZoom) {
		showLoadingLayer();
		hideAllTiles();
		checkBounds();
		tilePerRow = Math.pow(2,zoom.google.to_native(zoom.yahoo.to_universal(map.getZoomLevel())));
		equator = (tilePerRow/2)-1;
		refreshStaticLayers();
		if (performingRefresh) stopRefresh = true;
		else refreshLayers();
	}
}

function hideAllMarkers() {
	if (!hidingMarkers){
		hidingMarkers = true;
		for (var i=0;i<markerList.length;i++){
			map.removeOverlay(markerList[i]);
		}
		markerList = new Array();
		hidingMarkers=false;
	}
}

function addMarkerNegozio(image,text,markerPoint){
	var index = markerList.length;

	var myImage = new YImage();  
	myImage.src = image;  
	myImage.size = new YSize(16,24);  
	myImage.offsetSmartWindow  = new YCoordPoint(10,24); 
	//myImage.offset = new YCoordPoint(-8,0); 
	
	
	// Create a new marker for an address
	markerList[index] = new YMarker(markerPoint,myImage);
	// Create some content to go inside the SmartWindow
	markerList[index].addAutoExpand(text);
	markerList[index].setSmartWindowColor('grey');
	
	
	// Put the marker on the map
	map.addOverlay(markerList[index]);
}

function hideAllTiles() {
	map.disableDragMap();
	for(var i=0;i<loadedTilesObjects.length;i++) {
		if (loadedTilesObjects[i]!=undefined) {
			for(var j=0;j<loadedTilesObjects[i].length;j++) {
				if (loadedTilesObjects[i][j]!=undefined) {
					//loadedTilesObjects[i][j].hide();
					document.getElementById('tileImg'+i+"_"+j).style.display = 'none';
				}
			}
		}
	}
}

function showAllTiles() {
	for(var i=0;i<loadedTilesObjects.length;i++) {
		if (loadedTilesObjects[i]!=undefined) {
			for(var j=0;j<loadedTilesObjects[i].length;j++) {
				if (loadedTilesObjects[i][j]!=undefined && layerVisibility[i]) {
					loadedTilesObjects[i][j].unhide();
					document.getElementById('tileImg'+i+"_"+j).style.display = 'block';
				}
			}
		}
	}
	hideLoadingLayer();
	map.enableDragMap();
}

function changeZoomDblClick(e) {
	hideAllTiles();
	if (!e) var e = window.event;
	
	var offsetX = parseInt(findPosX($('mapContainer')));
	var offsetY = parseInt(findPosY($('mapContainer')));
	
	var x = parseInt(e.clientX)-offsetX;
	var y = parseInt(e.clientY)-offsetY;
	
	var myZoom = map.getZoomLevel();
	if (myZoom>0) myZoom = myZoom-1;

	NoZoom = true;	
	var newCenter = checkBoundsNoRedraw(map.convertXYLatLon(new YCoordPoint(x,y)),myZoom);
	map.drawZoomAndCenter(newCenter, myZoom);
	showLoadingLayer();
	tilePerRow = Math.pow(2,zoom.google.to_native(zoom.yahoo.to_universal(map.getZoomLevel())));
	equator = (tilePerRow/2)-1;
	refreshStaticLayers();
	refreshLayers();
	NoZoom = false;
}

function locateAddress(address,myZoom) {
	hideAllTiles();
	
	NoZoom = true;	
	map.drawZoomAndCenter(address, myZoom);
	showLoadingLayer();
	tilePerRow = Math.pow(2,zoom.google.to_native(zoom.yahoo.to_universal(map.getZoomLevel())));
	equator = (tilePerRow/2)-1;
	refreshStaticLayers();
	refreshLayers();
	NoZoom = false;
}


function checkBounds() {
	myAllowedBounds = allowedBounds[parseInt(map.getZoomLevel())];
	if (myAllowedBounds == null) return;

	var center = map.getCenterLatLon();
	
	if(center.Lat>=myAllowedBounds[0] && center.Lat<=myAllowedBounds[2] && center.Lon>=myAllowedBounds[1] && center.Lon<=myAllowedBounds[3]){
		return;
	}
	
	var newLat = center.Lat;
	var newLon = center.Lon;
	
	if(center.Lat < myAllowedBounds[0]){
		newLat = myAllowedBounds[0];
	}
	if(center.Lat>myAllowedBounds[2]){
		newLat = myAllowedBounds[2];
	}
	if(center.Lon<myAllowedBounds[1]){
		newLon = myAllowedBounds[1];
	}
	if(center.Lon>myAllowedBounds[3]){
		newLon = myAllowedBounds[3];
	}
	
	map.drawZoomAndCenter(new YGeoPoint(newLat, newLon), map.getZoomLevel());
}

function performOnPan() {
	NoZoom = true;
	checkBounds();
	NoZoom = false;
}

function performRefresh() {
	refreshStaticLayers();
	refreshLayers();
}

function checkBoundsNoRedraw(center,myZoom) {
	myAllowedBounds = allowedBounds[myZoom];
	if (myAllowedBounds == null) return;

	if(center.Lat>=myAllowedBounds[0] && center.Lat<=myAllowedBounds[2] && center.Lon>=myAllowedBounds[1] && center.Lon<=myAllowedBounds[3]){
		return center;
	}
	
	var newLat = center.Lat;
	var newLon = center.Lon;
	
	if(center.Lat < myAllowedBounds[0]){
		newLat = myAllowedBounds[0];
	}
	if(center.Lat>myAllowedBounds[2]){
		newLat = myAllowedBounds[2];
	}
	if(center.Lon<myAllowedBounds[1]){
		newLon = myAllowedBounds[1];
	}
	if(center.Lon>myAllowedBounds[3]){
		newLon = myAllowedBounds[3];
	}
	
	return new YGeoPoint(newLat, newLon);
}

function searchFirstUsableIndex(l) {
	for(i=0;i<loadedTilesObjects[l].length;i++) {
		if (loadedTilesObjects[l][i]==undefined) return i;
		else {
			var id = loadedTiles[l][i];
			var zindex = id.indexOf("Z");
			var xindex = id.indexOf("x");
			var yindex = id.indexOf("y");
			if (zindex!=-1 && xindex!=-1 && yindex!=-1) { 
				var z = parseInt(id.substring(zindex+1,xindex));
				var x = parseInt(id.substring(xindex+1,yindex));
				var y = parseInt(id.substring(yindex+1));
				if (x<firstX || x>lastX || y<lastY || y>firstY) {
					return i;
				} 
			}
		}
	}
	return loadedTilesObjects[l].length;
}

function refreshStaticLayers() {
	
	var TileUtl = new Tile();
	
	switch (parseInt(map.getZoomLevel())){
		case 13:
			if (coverZ12!=undefined) coverZ12.hide();
			if (coverZ13==undefined) {
				var imagen = YUtility.createNode('img','COVERZ13');
				imagen.src = url_confini+'/layers/confini_z'+parseInt(map.getZoomLevel())+'.png';
				imagen.className = "cover";
				if (Engine.isMSIE && !Engine.isMSIE7) imagen.setAttribute('galleryimg','no');
				coverZ13 = new YCustomOverlay(TileUtl.convertXYtoLatLon(16,equator-1-5,zoom.google.to_native(zoom.yahoo.to_universal(13))));
				YUtility.appendNode(coverZ13, imagen);
				map.addOverlay(coverZ13);
				$('COVERZ13').parentNode.style.zIndex = 1;
			} else {
				coverZ13.unhide();
				$('COVERZ13').parentNode.style.zIndex = 1;
			}
		break;
		case 12:
			if (coverZ13!=undefined) coverZ13.hide();
			if (coverZ12==undefined) {
				var imagen = YUtility.createNode('img','COVERZ12');
				imagen.src = url_confini+'/layers/confini_z'+parseInt(map.getZoomLevel())+'.png';
				imagen.className = "cover2";
				if (Engine.isMSIE && !Engine.isMSIE7) imagen.setAttribute('galleryimg','no');
				coverZ12 = new YCustomOverlay(TileUtl.convertXYtoLatLon(33,equator-1-9,zoom.google.to_native(zoom.yahoo.to_universal(12))));
				YUtility.appendNode(coverZ12, imagen);
				map.addOverlay(coverZ12);
				$('COVERZ12').parentNode.style.zIndex = 1;
			} else {
				coverZ12.unhide();
				$('COVERZ12').parentNode.style.zIndex = 1;
			}
		break;
		default:
			if (coverZ13!=undefined) coverZ13.hide();
			if (coverZ12!=undefined) coverZ12.hide();
		break;
		
	}
}
var myCounter=0;
var changePan=false;
var zoomSlider=null;
function refreshLayers() {

	var TileUtl = new Tile();
	if (loadedTilesObjects.length!=0) {
		performingRefresh = true;
	}
	var actualZoom = map.getZoomLevel();
	
	if (zoomSlider != null){
		changePan=true;
		zoomSlider.setValue(actualZoom*10);
	}
	
	if (actualZoom <6){
		var myGeoRss = "";
		var myBounds = map.getBoundsLatLon();
		var pRSS='/markers/negozi?latmax='+myBounds.LatMax+'&latmin='+myBounds.LatMin+'&lonmax='+myBounds.LonMax+'&lonmin='+myBounds.LonMin;
		
		ahah(pRSS,'hiddenTarget',0,'POST','','true');
		hideAllTiles();
		map.enableDragMap();
		
		if (typeof enableTabNegozi!='undefined')
			enableTabNegozi();
	}else{
		if (typeof disableTabNegozi!='undefined')
			disableTabNegozi();
		hideAllMarkers();
		
		var bounds = map.getBoundsLatLon();
		var tileCoords = TileUtl.getTileCoords( bounds.LatMax, bounds.LonMin, zoom.google.to_native(zoom.yahoo.to_universal(map.getZoomLevel()))+1 );
		
		var ULX = tileCoords.x;
		var ULY = (equator-tileCoords.y);
	
		if (Engine.isMSIE) {
			firstX = ULX;
			lastX = ULX+visibleTilesPerRow;
			firstY = ULY;
			lastY = ULY-visibleTilesPerCol;
		} else {
			firstX = ULX-1;
			lastX = ULX+visibleTilesPerRow+1;
			firstY = ULY+1;
			lastY = ULY-visibleTilesPerCol-1;
		}
		
		var zindex = 2;
		for (var z = 0; z < layers.length; z++) {
			for(var i=firstX;i<=lastX;i++) {
				for(var j=firstY;j>=lastY;j--) {
					var id = 'L'+layers[z]+'Z'+parseInt(map.getZoomLevel())+'x'+i+'y'+j;
					if (loadedTiles[z]==undefined) loadedTiles[z] = [];
					if (loadedTilesObjects[z]==undefined) loadedTilesObjects[z] = [];
					if (!inArray(loadedTiles[z],id)) {
						var newIndex = searchFirstUsableIndex(z);
						var tilePoint = TileUtl.convertXYtoLatLon(i,equator-1-j,zoom.google.to_native(zoom.yahoo.to_universal(map.getZoomLevel())));
						tilePoint.Lat += 0.00002;
						
						var style = {
							zIndex:zindex
						};
						
						if (loadedTilesObjects[z][newIndex]==undefined) {
							var div = YUtility.createNode('div',id);
							div.innerHTML = '<img class="customTileL'+layers[z]+''+imgClassName+'" id="tileImg'+z+"_"+newIndex+'" style="z-index:'+zindex+'" src="'+url_site+'/'+extension+'/layer'+layers[z]+'_z'+parseInt(map.getZoomLevel())+'x'+i+'y'+j+parameters[z]+'" '+((Engine.isMSIE && !Engine.isMSIE7)?'galleryimg="no"':'')+'>';
							loadedTilesObjects[z][newIndex] = new YCustomOverlay(tilePoint,div);
							map.addOverlay(loadedTilesObjects[z][newIndex]);
						} else {
							//loadedTilesObjects[z][newIndex].hide();
							document.getElementById('tileImg'+z+"_"+newIndex).style.display = 'none';
							loadedTilesObjects[z][newIndex].setYGeoPoint(tilePoint);
							document.getElementById('tileImg'+z+"_"+newIndex).parentNode.id = id;
							document.getElementById('tileImg'+z+"_"+newIndex).style.zIndex = zindex;
							new ImagePreloader(url_site+"/"+extension+"/layer"+layers[z]+"_z"+parseInt(map.getZoomLevel())+"x"+i+"y"+j+parameters[z],z,newIndex,parseInt(map.getZoomLevel()));
						}
						$(id).style.zIndex = zindex;
						loadedTiles[z][newIndex] = id;
					}
				}
			}
			zindex++;
		}
	}
	
}

function showLoadingLayer() {
	$('loadingLayer').style.display = "block";
	window.setTimeout("resetMyMap()",5000);
}

function resetMyMap() {
	hideLoadingLayer();
	performingRefresh = false;
	stopRefresh = false;
	tilesToLoad = 0;
	NoZoom = false;
	showAllTiles();
	refreshLayers();
}

function hideLoadingLayer() {
	$('loadingLayer').style.display = "none";
}

var allowedBounds = [];
allowedBounds[13]= new Array(42.000000, 12.500000, 42.000000, 12.500000 );
allowedBounds[12]= new Array(39.289752, 11.923232, 43.891736 ,15.520728 );
allowedBounds[11]= new Array(35.889752,  6.823232, 46.901736 ,18.120728 );
allowedBounds[10]= new Array(35.889752,  6.823232, 46.901736 ,18.120728 );
allowedBounds[9] = new Array(35.889752,  6.823232, 46.901736 ,18.120728 );
allowedBounds[8] = new Array(35.689752,  6.823232, 47.001736 ,18.320728 );
allowedBounds[7] = new Array(35.589752,  6.723232, 47.051736 ,18.420728 );
allowedBounds[6] = new Array(35.489752,  6.623232, 47.091736 ,18.520728 );
allowedBounds[5] = new Array(35.489752,  6.623232, 47.091736 ,18.520728 );
allowedBounds[4] = new Array(35.489752,  6.623232, 47.091736 ,18.520728 );
allowedBounds[3] = new Array(35.489752,  6.623232, 47.091736 ,18.520728 );
allowedBounds[2] = new Array(35.489752,  6.623232, 47.091736 ,18.520728 );
allowedBounds[1] = new Array(35.489752,  6.623232, 47.091736 ,18.520728 );