//--- javascript for www.tharros.info ---

//--- ad the following line to the page
//--- <script type="text/javascript" src="<path>/tharros_maps.js"></script>
//--- date: 12 september 2009
//--- author if not indicated otherwise: T. Kriek 
//--- The tharros_maps js file contains script used for the maps on GoogleNuraghi, GoogleSardinia, GSardiniaService and GSardiniaRoute 


/* function ZoomInTo finds a point and zooms into that point on the map */
function ZoomInTo(lat,lon,thisFocus){
    var thisPoint = new google.maps.LatLng( lat, lon);
	mymap.setZoom(thisFocus);
	mymap.panTo(thisPoint);
}

/* function ZoomNur finds a point and zooms into that point on the map */
function ZoomNur(lat,lon,thisFocus){
    var thisPoint = new google.maps.LatLng( lat, lon);
	mymap.setZoom(thisFocus);
	mymap.panTo(thisPoint);
}

/* function setFocusTo sets the focus to a specific point */
function setFocusTo(strPoint){
	for (var i = 0; i < markerArray.length; i++){
		if(markerArray[i][0] == strPoint){
		    ZoomInTo(parseFloat(markerArray[i][8]), parseFloat(markerArray[i][7]),17);
		}
	}
}

/* function createIcon creates the base icon */
function createIcon(strImage){
   	var myIcon = new google.maps.Icon();
	myIcon.shadow = "images/main/shadow50.png";
	myIcon.IconSize = new google.maps.Size(20, 34);
	myIcon.shadowSize = new google.maps.Size(37, 34);
	myIcon.iconAnchor = new google.maps.Point(10, 34);
    myIcon.infoWindowAnchor = new google.maps.Point(20, 17);
    myIcon.infoShadowAnchor = new google.maps.Point(5, 5);
	myIcon.image = strImage ;
	return myIcon;
}

/* function createNIcon creates the base Nuraghe icon */
function createNIcon(strImage){
   		var myIcon = new google.maps.Icon();
		myIcon.iconAnchor = new google.maps.Point(16, 16);
        myIcon.infoWindowAnchor = new google.maps.Point(16, 16);
        myIcon.infoShadowAnchor = new google.maps.Point(5, 5);
		myIcon.image = strImage ;
		return myIcon;
}

/* function loadSiteMarkers loads the markers for sites using markerArray */
function loadSiteMarkers(){
	var mPoint, mSiteDesc, mMarker ;
    for (var i = 0; i < markerArray.length; i++){
	    mPoint = new google.maps.LatLng(parseFloat(markerArray[i][8]), parseFloat(markerArray[i][7])) ;
		mSiteDesc = buildSiteInfoWindow(i); 
		mMarker = createSiteMarker(mPoint, mSiteDesc);
		mymarkers.push(mMarker);	
		mymap.addOverlay(mMarker);
	}		
}

/* function loadNuragheClusters loads the markers and clusters for nuraghi using XML : new method*/
function loadNuragheClusters(nId){
	var curZoom = mymap.getZoom();
	var nLatMax = 0;
	var nLatMin = 0;
	var nLonMax = 0;
	var nLonMin = 0;
	if(curZoom > nLvl2Zoom){
		var bounds = mymap.getBounds();  
		var southWest = bounds.getSouthWest();  
		var northEast = bounds.getNorthEast(); 
		var nLatMax = northEast.lat();
		var nLatMin = southWest.lat();
		var nLonMax = northEast.lng();
		var nLonMin = southWest.lng();  
	} 
	// refresh map 
	if (curZoom < nLvl2Zoom + 1){ // added
		mymap.clearOverlays();
	} // added
	for (var i = 0; i < aDivs.length; i++) {
		mymap.getPane(G_MAP_MAP_PANE).removeChild(aDivs[i]);
	}
	aDivs = [] ;
	//mymarkers = [];	// commented out   
	//copy to new array markerArray	
	prevmarkerArray = [] ; // added
	prevmarkerArray = markerArray.slice();	//added
	markerArray = [] ;
	iNur = 0 ;
	nurtree= null;
	nurtree=new jktreeview("tree2");
	document.getElementById("tree1").innerHTML = 'Loading...';
	document.getElementById("tree2").style.display = "none" ;
	document.getElementById("tree0").style.display = "" ;
	// 	
	var toplvl = nurtree.addItem("Nuraghi", "");
	google.maps.DownloadUrl("NuraghiXML.php?lvl="+ curZoom +"&latmin="+nLatMin+"&latmax="+nLatMax+"&lonmin="+nLonMin+"&lonmax="+nLonMax, function(data) {
	    var curProv = "" ;
		var curPlace = "" ;
		var ncurZoom = mymap.getZoom();
		var nurxml = GXml.parse(data);  
		var nurmarkers = nurxml.documentElement.getElementsByTagName("marker"); 
		if(nurmarkers.length > 0){
			
			for (var i = 0; i < nurmarkers.length; i++) {
				if(ncurZoom < nLvl1Zoom + 1){
				    markerArray.push([nurmarkers[i].getAttribute("prov"),nurmarkers[i].getAttribute("count"),nurmarkers[i].getAttribute("lat"),nurmarkers[i].getAttribute("lon")]);
					if (curProv != markerArray[i][0]) {
					    curProv = markerArray[i][0] ;
					   	subtoplvl = nurtree.addItem(markerArray[i][0],toplvl, "javascript:ZoomNur("+parseFloat(markerArray[i][2])+","+parseFloat(markerArray[i][3])+ ",10)") ;
					}
					
				}else if (ncurZoom < nLvl2Zoom + 1){
					markerArray.push([nurmarkers[i].getAttribute("prov"), nurmarkers[i].getAttribute("count"),nurmarkers[i].getAttribute("lat"),nurmarkers[i].getAttribute("lon"),nurmarkers[i].getAttribute("place")]);
					if (curProv != markerArray[i][0]) {
					    curProv = markerArray[i][0] ;
					   	subtoplvl = nurtree.addItem(markerArray[i][0],toplvl) ;
					}
					if (curPlace != markerArray[i][4]){
					    curPlace = markerArray[i][4] ;
						sublvl = nurtree.addItem(markerArray[i][4],subtoplvl, "javascript:ZoomNur("+parseFloat(markerArray[i][2])+","+parseFloat(markerArray[i][3])+ ",12)") ; 
					}
					
				}else{
					markerArray.push([nurmarkers[i].getAttribute("id"),nurmarkers[i].getAttribute("name"),nurmarkers[i].getAttribute("prov"),nurmarkers[i].getAttribute("place"),nurmarkers[i].getAttribute("IGM"),nurmarkers[i].getAttribute("lat"),nurmarkers[i].getAttribute("lon"),nurmarkers[i].getAttribute("image")]);
					if (curProv != markerArray[i][2]) {
				       curProv = markerArray[i][2] ;
				   	   subtoplvl = nurtree.addItem(markerArray[i][2],toplvl) ;
					}
					if (curPlace != markerArray[i][3]){
				       curPlace = markerArray[i][3] ;
				   	   sublvl = nurtree.addItem(markerArray[i][3],subtoplvl) ; 
					}
					nurtree.addItem(markerArray[i][1], sublvl, "javascript:ZoomNur("+parseFloat(markerArray[i][5])+","+parseFloat(markerArray[i][6])+ ",16)");
				}
				
			}
			if(ncurZoom < nLvl2Zoom + 1){
			    loadClusterMarkerArray(); // load high level cluster icons with zoom on click
			}else{	
				// first remove the markers that are not present in the new markerArray	 
				if (prevmarkerArray.lenght > 0){
					for (var j = 0; j < markerArray.length; j++) {
						if (!compareMarker(markerArray, prevmarkerArray[j][0])){
							// remove marker 
							mymap.removeOverlay(mymarkers[j]);
							
						}	
					} 
				}
				mymarkers = []; // reset mymarkers added
				loadNMarkerArray();
			}
		}else{
			document.getElementById("note2").innerHTML = 'Listed 0 Nuraghi...' ;
	   		nurtree.treetop.draw();
	   		document.getElementById("tree0").style.display = "none" ;
	   		document.getElementById("tree2").style.display = "" ;
		}
	});		
}

/* function loadServices loads the markers and clusters for accommodations and restaurants using XML */
function loadServices(nId, strCat){
	var curZoom = mymap.getZoom();
	var nLatMax = 0;
	var nLatMin = 0;
	var nLonMax = 0;
	var nLonMin = 0;
	if(curZoom > nLvl2Zoom){
		var bounds = mymap.getBounds();  
		var southWest = bounds.getSouthWest();  
		var northEast = bounds.getNorthEast(); 
		var nLatMax = northEast.lat();
		var nLatMin = southWest.lat();
		var nLonMax = northEast.lng();
		var nLonMin = southWest.lng();  
	} 
	
	// refresh map 
	if (curZoom < (nLvl2Zoom + 1) || (strCat != nSetType)){ // added
		mymap.clearOverlays();
	} // added 
	for (var i = 0; i < aDivs.length; i++) {
		mymap.getPane(G_MAP_MAP_PANE).removeChild(aDivs[i]);
	}		   
	nSetType = strCat ; 
	aDivs = [] ;
	mymarkers = [];	 // to be removed
	prevmarkerArray = [] ; // added
	prevmarkerArray = markerArray.slice();	//added
	markerArray = [] ;
	iNur = 0 ;
	google.maps.DownloadUrl("ServicesXML.php?cat="+strCat+"&lvl="+ curZoom +"&latmin="+nLatMin+"&latmax="+nLatMax+"&lonmin="+nLonMin+"&lonmax="+nLonMax+"&lng="+strLng, function(data) {
	    var curProv = "" ;
		var curPlace = "" ;
		var ncurZoom = mymap.getZoom();
		var servicexml = GXml.parse(data);  
		var markers = servicexml.documentElement.getElementsByTagName("marker"); 
		if(markers.length > 0){
			
			for (var i = 0; i < markers.length; i++) {
				if(ncurZoom < nLvl1Zoom + 1){
				    markerArray.push([markers[i].getAttribute("prov"),markers[i].getAttribute("count"),markers[i].getAttribute("lat"),markers[i].getAttribute("lon")]);
				}else if (ncurZoom < nLvl2Zoom + 1){
					markerArray.push([markers[i].getAttribute("prov"), markers[i].getAttribute("count"),markers[i].getAttribute("lat"),markers[i].getAttribute("lon"),markers[i].getAttribute("place")]);
				}else{
					markerArray.push([markers[i].getAttribute("id"),markers[i].getAttribute("type"),markers[i].getAttribute("name"),markers[i].getAttribute("prov"),markers[i].getAttribute("place"),markers[i].getAttribute("url"),markers[i].getAttribute("lat"),markers[i].getAttribute("lon")]);
				}
			}
			if(ncurZoom < nLvl2Zoom + 1){
			    loadSrvClMarkerArray(); // load high level cluster icons with zoom on click
			}else{
			    loadSMarkerArray(); // tbd
			}
		}else{
			
		}
	});		
}

/* function loadNMarkerArray loads every single instance and keeps track of progress */
function loadNMarkerArray(){
    var mPoint, mSiteDesc, mMarker ; // var iNur and markerArray defined as global var
	if (iNur < markerArray.length ){   
		mPoint = new google.maps.LatLng(parseFloat(markerArray[iNur][5]), parseFloat(markerArray[iNur][6])) ;
		mSiteDesc = buildNuragheInfoWindow(iNur); 
		mMarker = createNuragheMarker(mPoint, mSiteDesc, "Nuraghe "+markerArray[iNur][1]); 
		// only add markers if they are not already present in the mymarkers array : new routine 08-05-2010
		if (!compareMarker(prevmarkerArray, markerArray[iNur][0])){	// added
			mymap.addOverlay(mMarker);
		}  // added
		//
		mymarkers.push(mMarker);	
		document.getElementById("tree1").innerHTML = 'Loading '+markerArray.length+' Nuraghi...<br />Please wait, thank you' ;
		document.getElementById("note2").innerHTML = 'Loading '+iNur+' Nuraghi...' ;
		iNur++ ;
	    setTimeout('loadNMarkerArray()', 0);
	}else{
		iNur = 0 ;
		document.getElementById("note2").innerHTML = 'Listed '+markerArray.length+' Nuraghi...' ;
		nurtree.treetop.draw();
		document.getElementById("tree0").style.display = "none" ;
		document.getElementById("tree2").style.display = "" ;
	   
	}
		 
}

/* function loadSMarkerArray loads every single instance and keeps track of progress */
function loadSMarkerArray(){
    var mPoint, mSiteDesc, mMarker ; // var iNur and markerArray defined as global var
	if (iNur < markerArray.length ){
		mPoint = new google.maps.LatLng(parseFloat(markerArray[iNur][6]), parseFloat(markerArray[iNur][7])) ;
		mSiteDesc = buildServiceInfoWindow(iNur); 
		mMarker = createServiceMarker(mPoint, mSiteDesc, markerArray[iNur][2],markerArray[iNur][1]); // tbd
		mymap.addOverlay(mMarker);
		mymarkers.push(mMarker);	
		iNur++ ;
	    setTimeout('loadSMarkerArray()', 0);
	}else{
		iNur = 0 ;
	}
		 
}

/* function loadClusterMarkerArray loads high level cluster icon: new method */
function loadClusterMarkerArray(){
    var nTotalNuraghi = 0 ;
	for (var i = 0; i < markerArray.length; i++) {
		mPoint = new google.maps.LatLng(parseFloat(markerArray[i][2]), parseFloat(markerArray[i][3])) ;
		mSiteDesc = buildClusterInfoWindow(i); 
		mMarker = createClusterMarker(mPoint, mSiteDesc, "", markerArray[i][1]);
		aDivs.push(mMarker);
		nTotalNuraghi = nTotalNuraghi + parseInt(markerArray[i][1]) ;
	}
	nurtree.treetop.draw();
	document.getElementById("tree0").style.display = "none" ;
	document.getElementById("note2").innerHTML = 'Listed '+nTotalNuraghi+' Nuraghi...' ;
	document.getElementById("tree2").style.display = "" ;
}

/* function loadSrvClMarkerArray loads high level cluster icon: new method */
function loadSrvClMarkerArray(){
    var nTotals = 0 ;
	for (var i = 0; i < markerArray.length; i++) {
		mPoint = new google.maps.LatLng(parseFloat(markerArray[i][2]), parseFloat(markerArray[i][3])) ;
		mSiteDesc = buildSrvClInfoWindow(i);
		mMarker = createSrvClMarker(mPoint, mSiteDesc, "", markerArray[i][1]); 
		aDivs.push(mMarker);
		nTotals = nTotals + parseInt(markerArray[i][1]) ;
	}
}

/* function loadNuragheMarker loads one marker: ViewNuraghi */
function loadNuragheMarker(nIndex){
    mymap.clearOverlays();
	mymarkers = [];
	mPoint = new google.maps.LatLng(parseFloat(markerArray[nIndex][5]), parseFloat(markerArray[nIndex][6])) ;
	mSiteDesc = buildNuragheInfoWindow(nIndex); 
	mMarker = createNuragheMarker(mPoint, mSiteDesc, "Nuraghe "+markerArray[nIndex][1]);
	mymarkers.push(mMarker);	
	mymap.addOverlay(mMarker);
	ZoomNur(parseFloat(markerArray[nIndex][5]), parseFloat(markerArray[nIndex][6]),17);
	textHeader = 'Nuraghe '+markerArray[nIndex][1]+' ('+markerArray[nIndex][0]+') '; 
	writefoottxt(textHeader) ;
	infotext = buildNuragheInfoText(nIndex) ;
	document.getElementById("nurinfo").innerHTML= infotext ;
}

/* function createSiteMarker creates the marker instamce for sites */
function createSiteMarker(point, sitedesc, title) { 
	var cMarkIcon = new google.maps.Icon(baseIcon); 
	if (title != ""){ 
	   markerOptions = { icon:cMarkIcon, title:title };
	}else{
	   markerOptions = { icon:cMarkIcon };
	}
	var marker = new google.maps.Marker(point, markerOptions);  
	google.maps.Event.addListener(marker, "click", function() {
	    marker.openInfoWindowHtml(sitedesc);  
	});
	return marker;
}

/* function createNuragheMarker to setup marker for Nuraghi */
function createNuragheMarker(point, strSiteDesc, strTitle) { 
	var cMarkIcon = new google.maps.Icon(baseIcon); 
	if (strTitle != ""){ 
	   markerOptions = { icon:cMarkIcon, title:strTitle };
	}else{
	   markerOptions = { icon:cMarkIcon };
	}
	var marker = new google.maps.Marker(point, markerOptions);  
	google.maps.Event.addListener(marker, "click", function() {
	    marker.openInfoWindowHtml(strSiteDesc);  
	});
	google.maps.Event.addListener(marker, "dblclick", function(){
	    mymap.setZoom(16);
		mymap.panTo(point);
	});
	google.maps.Event.addListener(marker, "mouseover", function(){
	    marker.setImage("images/main/markern_h.png");
	});
	google.maps.Event.addListener(marker, "mouseout", function(){
	    marker.setImage("images/main/markern.png");
	});
	
	return marker;
}

/* function createServiceMarker to setup marker for Nuraghi */
function createServiceMarker(point, strSiteDesc, strTitle, nType) { 
	//var cMarkIcon = new google.maps.Icon(baseIcon); 
	var SIcon = createNIcon("images/icons/"+nType+".png");
	var cMarkIcon = new google.maps.Icon(SIcon); 
	if (strTitle != ""){ 
	   markerOptions = { icon:cMarkIcon, title:strTitle };
	}else{
	   markerOptions = { icon:cMarkIcon };
	}
	var marker = new google.maps.Marker(point, markerOptions);  
	google.maps.Event.addListener(marker, "click", function() {
	    marker.openInfoWindowHtml(strSiteDesc);  
	});
	google.maps.Event.addListener(marker, "dblclick", function(){
	    mymap.setZoom(17);
		mymap.panTo(point);
	});
	return marker;
}

/* function createClusterMarker creates the marker instamce for clusters: new method */
function createClusterMarker(point, sitedesc, title, nurnum) {
	if(nurnum > 99){
	    ClusterIcon = "images/main/m3.png";
		clwidth = 66;
	}else if(nurnum > 9){
		ClusterIcon = "images/main/m2.png";
		clwidth = 56;
	}else{
	    ClusterIcon = "images/main/m1.png";
		clwidth = 53;
	}
	var ClIcon = createNIcon("images/trans.gif");
	var cMarkIcon = new google.maps.Icon(ClIcon); 
	var pos = mymap.fromLatLngToDivPixel(point);
	pos.x -= parseInt(clwidth / 2, 10);
  	pos.y -= parseInt(clwidth / 2, 10);
	var div = document.createElement("div");
	div.style.cssText = 'background:url(' + ClusterIcon + ');height:'+(clwidth/2)+'px;padding-top: '+(clwidth/2-6)+'px;width:'+(clwidth)+'px;cursor:pointer;top:' + pos.y + 'px;left:' + pos.x + 'px;color:black;position:absolute;font-size:11px;' + 'font-family:Verdana,sans-serif;font-weight:bold' ;
	div.innerHTML = nurnum ;
	mymap.getPane(G_MAP_MAP_PANE).appendChild(div);
	if (title != ""){ 
	   markerOptions = { icon:cMarkIcon, title:title };
	}else{
	   markerOptions = { icon:cMarkIcon };
	}
	var marker = new google.maps.Marker(point, markerOptions);  
	google.maps.Event.addDomListener(div, "dblclick", function() {
		var curZoom = mymap.getZoom();
		var newZoom = curZoom+1 ;
	    mymap.setZoom(newZoom);
		mymap.panTo(point);
	});
	google.maps.Event.addDomListener(div, "click", function(){
	    marker.openInfoWindowHtml(sitedesc);
	});
	mymarkers.push(marker);	
	mymap.addOverlay(marker);
	
	return div;
}

/* function createSrvClMarker creates the marker instamce for clusters: new method */
function createSrvClMarker(point, sitedesc, title, nurnum) {
	ClusterIcon = "images/icons/blackblank.png";
	clwidth = 30;
	var ClIcon = createNIcon("images/trans.gif");
	var cMarkIcon = new google.maps.Icon(ClIcon); 
	var pos = mymap.fromLatLngToDivPixel(point);
	pos.x -= parseInt(clwidth / 2, 10);
  	pos.y -= parseInt(clwidth / 2, 10);
	var div = document.createElement("div");
	div.style.cssText = 'background:url(' + ClusterIcon + ');height:'+(clwidth/2)+'px;padding-top: '+(clwidth/2-9)+'px;width:'+(clwidth)+'px;cursor:pointer;top:' + pos.y + 'px;left:' + pos.x + 'px;color:black;position:absolute;font-size:11px;' + 'font-family:Verdana,sans-serif;font-weight:bold;' ;
	div.innerHTML = nurnum ;
	mymap.getPane(G_MAP_MAP_PANE).appendChild(div);
	if (title != ""){ 
	   markerOptions = { icon:cMarkIcon, title:title };
	}else{
	   markerOptions = { icon:cMarkIcon };
	}
	var marker = new google.maps.Marker(point, markerOptions);  
	google.maps.Event.addDomListener(div, "dblclick", function() {
		var curZoom = mymap.getZoom();
		var newZoom = curZoom+2 ;
	    mymap.setZoom(newZoom);
		mymap.panTo(point);
	});
	google.maps.Event.addDomListener(div, "click", function(){
	    marker.openInfoWindowHtml(sitedesc);
	});
	mymarkers.push(marker);	
	mymap.addOverlay(marker);
	
	return div;
}


/* function buildSiteInfoWindow builds the Info Window for the sites using markerArray */
function buildSiteInfoWindow(iMarker){
	//strLng defined global var
	if (strLng=="nl"){
	   strGalleryLbl = "Foto Galerij" ;
	   strSiteLbl = "Beschrijving" ;
	   strRouteLbl = "Routebeschrijving" ;
	   strNuragheLbl = "Nuraghi in kaart" ;
	}else if (strLng=="it"){
	   strGalleryLbl = "Galleria delle Foto" ;
	   strSiteLbl = "Descrizione" ;
	   strRouteLbl = "Itinerario" ;
	   strNuragheLbl = "Mappa dei Nuraghi" ;
	}else{
	   strGalleryLbl = "Picture Gallery" ;
	   strSiteLbl = "Description" ;
	   strRouteLbl = "Route description" ;
	   strNuragheLbl = "Map of Nuraghi" ;
	}
    sb = [] ;
	sb[sb.length] = '<table style="width: 320px; height: 150px">' ;
	sb[sb.length] = '<tr><td class="subtitle2" colspan="2">'+markerArray[iMarker][6]+'<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td class="tl"><table class="lcol" style="height: 112px; width: 165px">' ;
	sb[sb.length] = '<tr><td class="tl"><img src="images/images/terra animata.gif" height="16" alt="earth"></td><td class="copyright" style="height: 20px">'+convertDecimalToMin(parseFloat(markerArray[iMarker][8]), parseFloat(markerArray[iMarker][7]))+'<\/td><\/tr>' ; 
	if(markerArray[iMarker][3] == 1){
	    sb[sb.length] = '<tr><td class="tc"><img src="images/expand.gif" alt="item"></td><td class="tl"><a href="ViewSites.php?cat='+ markerArray[iMarker][0] +'&lng='+ strLng +'" class="mapslink">'+ strSiteLbl +'<\/a><\/td><\/tr>' ;
	}
	if(markerArray[iMarker][2] == 1){
	    sb[sb.length] = '<tr><td class="tc"><img src="images/expand.gif" alt="item"></td><td class="tl"><a href="ViewGallery.php?cat='+ markerArray[iMarker][0] +'&lng='+ strLng +'" class="mapslink">'+ strGalleryLbl +'<\/a><\/td><\/tr>' ;
	}
	if(markerArray[iMarker][5] != ""){
	    sb[sb.length] = '<tr><td class="tc"><img src="images/expand.gif" alt="item"></td><td class="tl"><a href="GSardiniaRoute.php?rte='+ markerArray[iMarker][5] +'&lng='+ strLng +'" class="mapslink">'+ strRouteLbl +'<\/a><\/td><\/tr>' ;
	}
	if(markerArray[iMarker][9] != 0){
	    sb[sb.length] = '<tr><td class="tc"><img src="images/expand.gif" alt="item"></td><td class="tl"><a href="GoogleNuraghi.php?id='+ markerArray[iMarker][9] +'&lat='+parseFloat(markerArray[iMarker][8])+'&lon='+parseFloat(markerArray[iMarker][7])+'&lng='+ strLng +'" class="mapslink">'+ strNuragheLbl +'<\/a><\/td><\/tr>' ;
	}
	sb[sb.length] = '<\/table><\/td><td class="tc">' ;
	if(markerArray[iMarker][1] != ""){
	    sb[sb.length] = '<img src="'+markerArray[iMarker][1]+'" height="112px">' ;
	}
	sb[sb.length] = '<\/td><\/tr>';
	sb[sb.length] = '<tr><td class="footer"><a href='+"'javascript:ZoomInTo("+'"' + markerArray[iMarker][8] +'",'+'"' + markerArray[iMarker][7] +'",17'+")'"+'>Zoom +<\/a>' ;
	sb[sb.length] = '&nbsp;| <a href='+"'javascript:ZoomInTo("+'"' + markerArray[iMarker][8] +'",'+'"' + markerArray[iMarker][7] +'",8'+")'"+'>Zoom -<\/a><\/td>' ;
	sb[sb.length] = '<td class="footer">©2001-2010 Tharros.info<\/td><\/tr>' ;
	sb[sb.length] = '<\/table>';
	return sb.join("");

}

/* build html for Nuraghe infowindow */
function buildNuragheInfoWindow(iMarker) {
	//strLng defined global var
	if (strLng=="nl"){
	   strNameLbl = "naam" ;
	   strPlaceLbl = "plaats" ;
	}else if (strLng=="it"){
	   strNameLbl = "nome" ;
	   strPlaceLbl = "luogo" ;
	}else{
	   strNameLbl = "name" ;
	   strPlaceLbl = "place" ;
	}
	strProvLbl = "prov." ;
    sb = [] ;
	sb[sb.length] = '<table width="350px">' ;
	sb[sb.length] = '<tr><td class="subtitle2" colspan="2">Nuraghe '+markerArray[iMarker][1]+'<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td class="tl"><table class="lcol" style="height: 112px; width: 195px;">' ;
	sb[sb.length] = '<tr><td class="tr"><img src="images/images/terra animata.gif" width="16px" alt="earth"><\/td><td colspan="2" class="copyright" style="height: 20px">'+convertDecimalToMin(parseFloat(markerArray[iMarker][5]), parseFloat(markerArray[iMarker][6]))+'<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td colspan="2" class="tl">id<\/td><td class="tl">: '+markerArray[iMarker][0]+'<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td colspan="2" class="tl">'+strNameLbl+'<\/td><td class="tl">: '+markerArray[iMarker][1]+'<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td colspan="2" class="tl">'+strPlaceLbl+'<\/td><td class="tl">: '+markerArray[iMarker][3]+'<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td colspan="2" class="tl">'+strProvLbl+'<\/td><td class="tl">: '+markerArray[iMarker][2]+'<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td colspan="2" class="tl">IGM<\/td><td class="tl">: '+markerArray[iMarker][4]+'<\/td><\/tr>' ;
	sb[sb.length] = '<\/table><\/td><td class="tc">' ;
	if(markerArray[iMarker][7].length > 1){
	   sb[sb.length] = '<img src="/sites/'+markerArray[iMarker][7]+'" width="150px">' ;
	}
	sb[sb.length] = '<\/td><\/tr>';
	sb[sb.length] = '<tr><td class="footer">&nbsp;<\/td><td class="footer">©2001-2010 Tharros.info<\/td><\/tr>' ;
	sb[sb.length] = '<\/table>';
	return sb.join("");

}

/* build html for Service infowindow */
function buildServiceInfoWindow(iMarker) {
	//strLng defined global var
	sb = [] ;
	sb[sb.length] = '<table width="420px">' ;
	sb[sb.length] = '<tr><td class="subtitle2" colspan="2">'+markerArray[iMarker][2]+'<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td class="tc" colspan="2">' ;
	sb[sb.length] = '<iframe src="ServicesHTML.php?id='+markerArray[iMarker][0]+'&lng='+strLng+'" width="410px" height="210px" frameborder="0" marginwidth="0" marginheight="0"><\/iframe>' ;
	sb[sb.length] = '<tr><td colspan="2" class="tl">'+markerArray[iMarker][4]+' '+markerArray[iMarker][3]+'<\/td><\/tr>' ;
	sb[sb.length] = '<\/td><\/tr>';
	sb[sb.length] = '<tr><td class="footer"><a href='+"'javascript:ZoomInTo("+'"' + markerArray[iMarker][6] +'",'+'"' + markerArray[iMarker][7] +'",17'+")'"+'>Zoom +<\/a><\/td>';
	sb[sb.length] = '<td class="footer">©2001-2010 Tharros.info<\/td><\/tr>' ;
	sb[sb.length] = '<\/table>';
	return sb.join("");

}

/* build html for cluster infowindow */
function buildClusterInfoWindow(iMarker) {
    //strLng defined global var
	if (strLng=="nl"){
	   strPlaceLbl = "gemeente" ;
	}else if (strLng=="it"){
	   strPlaceLbl = "comune" ;
	}else{
	   strPlaceLbl = "place" ;
	}
	sb = [] ;
	sb[sb.length] = '<table width="250px">' ;
	sb[sb.length] = '<tr><td class="subtitle2">'+markerArray[iMarker][0]+'' ;
	if(mymap.getZoom()> nLvl1Zoom ){
		sb[sb.length] = ' - '+markerArray[iMarker][4]+'' ;
	}
	sb[sb.length] = '<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td class="tl"><table style="width: 100%;">' ;
	sb[sb.length] = '<tr><td class="tr"><img src="images/images/terra animata.gif" width="16px" alt="earth"><\/td><td colspan="2" class="copyright" style="height: 20px">'+convertDecimalToMin(parseFloat(markerArray[iMarker][2]), parseFloat(markerArray[iMarker][3]))+'<\/td><\/tr>' ;
	if(mymap.getZoom()> nLvl1Zoom){
		sb[sb.length] = '<tr><td colspan="2" class="tl">'+strPlaceLbl+'<\/td><td class="tl">: '+markerArray[iMarker][4]+'<\/td><\/tr>' ;
	}
	sb[sb.length] = '<tr><td colspan="2" class="tl">Nuraghi<\/td><td class="tl">: '+markerArray[iMarker][1]+'<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td style="width: 20px"><\/td><td><\/td><td><\/td><\/tr>' ;
	sb[sb.length] = '<\/table><\/td>' ;
	sb[sb.length] = '<tr><td class="footer">©2001-2010 Tharros.info<\/td><\/tr>' ;
	sb[sb.length] = '<\/table>';
	return sb.join("");
}

/* build html for service cluster infowindow */
function buildSrvClInfoWindow(iMarker) {
    //strLng defined global var
	var curZoom = mymap.getZoom();
	var newZoom1 = curZoom+2 ;
	var newZoom2 = curZoom-2 ;
	if (strLng=="nl"){
	   strPlaceLbl = "gemeente" ;
	   strServiceLbl = "diensten" ;
	}else if (strLng=="it"){
	   strPlaceLbl = "comune" ;
	   strServiceLbl = "servizi" ;
	}else{
	   strPlaceLbl = "place" ;
	   strServiceLbl = "services" ;
	}
	sb = [] ;
	sb[sb.length] = '<table width="250px">' ;
	sb[sb.length] = '<tr><td class="subtitle2">'+markerArray[iMarker][0]+'' ;
	if(curZoom > nLvl1Zoom ){
		sb[sb.length] = ' - '+markerArray[iMarker][4]+'' ;
	}
	sb[sb.length] = '<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td class="tl"><table style="width: 100%;">' ;
	//sb[sb.length] = '<tr><td class="tc"><a href='+"'javascript:ZoomInTo("+'"' + markerArray[iMarker][6] +'",'+'"' + markerArray[iMarker][7] +'",'+ newZoom1 +")'"+'>Zoom +<\/a><\/td>' ;
	//sb[sb.length] = '<td class="tc"><a href='+"'javascript:ZoomInTo("+'"' + markerArray[iMarker][8] +'",'+'"' + markerArray[iMarker][7] +'",'+ newZoom2 +")'"+'>Zoom -<\/a><\/td><\/tr>' ;
	if(curZoom > nLvl1Zoom){
		sb[sb.length] = '<tr><td class="tl">'+strPlaceLbl+'<\/td><td class="tl">: '+markerArray[iMarker][4]+'<\/td><\/tr>' ;
	}
	sb[sb.length] = '<tr><td class="tl">'+strServiceLbl+'<\/td><td class="tl">: '+markerArray[iMarker][1]+'<\/td><\/tr>' ; // tbc
	sb[sb.length] = '<tr><td style="width: 20px"><\/td><td><\/td><td><\/td><\/tr>' ;
	sb[sb.length] = '<\/table><\/td>' ;
	sb[sb.length] = '<tr><td class="footer">©2001-2010 Tharros.info<\/td><\/tr>' ;
	sb[sb.length] = '<\/table>';
	return sb.join("");
}

/* build html for nuraghe info */
function buildNuragheInfoText(iMarker) {
    if (strLng=="nl"){
	   strNameLbl = "naam" ;
	   strPlaceLbl = "plaats" ;
	   strMap = "Grote kaart" ;
	   strAlti = "hoogte in m" ;
	   strBibl = "bibliografische verwijzingen" ;
	}else if (strLng=="it"){
	   strNameLbl = "nome" ;
	   strPlaceLbl = "luogo" ;
	   strMap = "Mappa grande" ;
	   strAlti = "altitudine in m" ;
	   strBibl = "referenze bibliografiche" ;
	}else{
	   strNameLbl = "name" ;
	   strPlaceLbl = "place" ;
	   strMap = "Large map" ;
	   strAlti = "altitude in m" ;
	   strBibl = "bibliographic references" ;
	}
	strProvLbl = "prov." ;
	sb = [] ;
	sb[sb.length] = '<table width="380px">' ;
	sb[sb.length] = '<tr><td class="tl">id<\/td><td class="tl">: '+markerArray[iMarker][0]+'<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td class="tl">'+strNameLbl+'<\/td><td class="tl">: '+markerArray[iMarker][1]+'<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td class="tl">'+strPlaceLbl+'<\/td><td class="tl">: '+markerArray[iMarker][3]+'<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td class="tl">'+strProvLbl+'<\/td><td class="tl">: '+markerArray[iMarker][2]+'<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td class="tl">'+strAlti+'<\/td><td class="tl">: '+markerArray[iMarker][8]+'<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td class="tl">coord.<\/td>' ;
	sb[sb.length] = '<td class="tl">: '+convertDecimalToMin(parseFloat(markerArray[iMarker][5]), parseFloat(markerArray[iMarker][6]))+'<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td class="tl">IGM<\/td><td class="tl">: '+markerArray[iMarker][4]+'<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td class="tl">'+strBibl+'<\/td><td class="tl">: '+markerArray[iMarker][9]+'<\/td><\/tr>' ;
	sb[sb.length] = '<tr><td class="tc"><a href="GoogleNuraghi.php?id='+markerArray[iMarker][0]+'&amp;lat='+markerArray[iMarker][5]+'&amp;lon='+markerArray[iMarker][6]+'&amp;lng='+strLng+'"><img src="images/images/terra animata.gif" width="16px" alt="'+strMap+'" style="vertical-align: top"> ['+strMap+']<\/a><\/td>' ;
	sb[sb.length] = '<td class="tc"><a href="http://maps.google.com/?t=k&om=1&ll='+markerArray[iMarker][5]+','+markerArray[iMarker][6]+'&amp;output=kml"><img src="images/images/google_earth_logo.gif" width="16px" alt="Google Earth" style="vertical-align: top"> [Google Earth]<\/a><\/td><\/tr>' ;
	sb[sb.length] = '<tr><td><\/td><td class="tc"><a href="http://www.wikimapia.org/#lat='+markerArray[iMarker][5]+'&lon='+markerArray[iMarker][6]+'&z=17&l=0&m=b" target="wmap"><img src="images/images/wikimapia.jpg" width="12px" alt="Wikimapia" style="vertical-align: top"> [Wikimapia]<\/a><\/td><\/tr>' ;
	sb[sb.length] = '<\/table>';
	return sb.join("");
}

/* function showRoute shows route directions based on array wayPoint */
function showRoute(wPoint){
   gdir1.loadFromWaypoints(wPoint, { "locale" : locale });
}

/* function hideRoute hides route directions based on array wayPoint */
function hideRoute(){
    dpolyline = gdir1.getPolyline() ;
	dpolyline.hide()
    for (var i = 0; i < wayPoint.length; i++){
	    dmarker = gdir1.getMarker(i);
		dmarker.hide();
	}
}

/* function hideMarkers hides the markers on the map using mymarkers array */
function hideMarkers(){
    for (var i = 0; i < mymarkers.length; i++){
	   mymarkers[i].hide() ;
	}
}

/* function showMarkers shows the markers on the map using mymarkers array */
function showMarkers(){
    for (var i = 0; i < mymarkers.length; i++){
	   mymarkers[i].show() ;
	}
}


/* Find coordinates for the center */
function FindCoord(){
	  var thisCenter; var thisCoord;
	  thisCenter = mymap.getCenter();
	  thisCoord = thisCenter.toUrlValue();
	  alert(thisCoord);
} 

/* function compareMarker to compare new set of markers against previous set. New routine 08-05-2010 */	
function compareMarker(markerArray1, id) { 
	var InmarkerArray = false ;
	for (i = 0 ; i = markerArray1.lenght ; i++){
		if (markerArray1[i][0] == id){ 
		   InmarkerArray = true ;
		}
	}  
	return InmarkerArray ; 
}

/* function convertDecimalToMin to convert points. Adapted by T. Kriek */
function convertDecimalToMin(nlat,nlng) { 
        /* 
                Input:  Lat and Lng 
                Output: String with Latitude & Longitude in Degree Minute Second 
				Compass format 
				strLng defined as global var but you can also use language detection instead
        */ 
		if (strLng=="nl"){
		   strNorth = "NB" ;
		   strSouth = "ZB" ;
		   strEast = "OL" ;
		   strWest = "WL" ;
		}else if (strLng=="it"){
		   strNorth = "N" ;
		   strSouth = "S" ;
		   strEast = "E" ;
		   strWest = "O" ;
		}else{
		   strNorth = "N" ;
		   strSouth = "S" ;
		   strEast = "E" ;
		   strWest = "W" ;
		}
        var lat = nlat; 
        var lng = nlng; 
        var dirLat; 
        var dirLng; 
        if (lat > 0) { 
                dirLat = strNorth; 
        } 
        else { 
                dirLat = strSouth; 
                lat = lat * -1; 
        } 
        if (lng > 0) { 
                dirLng = strEast; 
        } 
        else { 
                dirLng = strWest; 
                lng = lng * -1; 
        } 


        var degLat = parseInt(lat); 
        var degLng = parseInt(lng); 
        var decLat = lat - degLat; 
        var decLng = lng - degLng; 
        var dmnLat = 60 * decLat; 
        var dmnLng = 60 * decLng; 
        var minLat = parseInt(dmnLat);
        var minLng = parseInt(dmnLng);
        var dscLat = dmnLat - minLat; 
        var dscLng = dmnLng - minLng; 
        var secLat = parseInt(60 * dscLat);
        var secLng = parseInt(60 * dscLng);
        var sDeg = degLat + "°" + minLat + "'" + secLat + '"' + dirLat + "," + degLng + "°" + minLng + "'" + secLng + '"' + dirLng; 
        return sDeg; 
} 

// treeview
/* Interface to YUI TreeView object to easily define a tree */
/* By JavaScriptKit.com- http://www.javascriptkit.com       */
/* Last updated: Dec 13th, 2006                             */

function jktreeview(treeid){
	this.treetop=new YAHOO.widget.TreeView(treeid)
}

jktreeview.prototype.addItem=function(itemText, noderef, href){
	var noderef=(typeof noderef!="undefined" && noderef!="")? noderef : this.treetop.getRoot()
	var treebranch=new YAHOO.widget.TextNode(itemText, noderef, false)
	if (typeof href!="undefined")
		treebranch.href=href
	return treebranch
}
