var map,mgr,markers,areas,trails,list;
var meter=null,meter_start=null,meter_stop=null,tour=null;
var days=[];
var icons=new Array(5);

function init(q)
{
	if(GBrowserIsCompatible()) {
		map=new GMap2(document.getElementById("container"));
		map.setCenter(new GLatLng(65.89,17.67),5,G_PHYSICAL_MAP);
		map.enableDoubleClickZoom();
		map.enableContinuousZoom();
		map.removeMapType(G_NORMAL_MAP);
		map.removeMapType(G_HYBRID_MAP);
		map.addMapType(G_SATELLITE_MAP);
		map.addMapType(G_PHYSICAL_MAP);
		map.addControl(new GLargeMapControl());
		map.addControl(new GScaleControl());
		map.addControl(new GOverviewMapControl());
		map.addControl(new GMapTypeControl());
		
		mgr=new MarkerManager(map,{borderPadding:50});
		markers=new Array(mapdata.length+mapdata4.length-2);
		initMarkers();
		if(document.getElementById("facs").checked) toggleFacs(true);
		if(document.getElementById("other").checked) toggleOther(true);
		if(document.getElementById("icons").checked) toggleIcons(true);
		areas=new Array(mapdata2.length-1);
		initAreas();
		if(document.getElementById("areas").checked) toggleAreas(true);
		trails=new Array(mapdata3.length-1);
		initTrails();
		if(document.getElementById("trails").checked) toggleTrails(true);
		if(document.getElementById("tour").selectedIndex>0) {
			plotTour(document.getElementById("tour").selectedIndex);
			centerTour();
		}
		if(q!="") MS(q);
	} else {
		document.getElementById("container").innerHTML="<TABLE border=0 style='width: 100%; height: 100%'><TR><TD class='nlnk2' align=center>Sorry, your browser is not compatible with this map application!</TD></TR></TABLE>";
	}
}

function initMarkers()
{
	for(c=0;c<mapdata.length-1;c++) {
		icon=new GIcon();
		n=mapdata[c][4];
		if(mapdata[c][3]=="other") {
			icon.image="other-"+(n!=0?"a":"n")+".png";
		} else {
			icon.image=mapdata[c][3]+".png";
		}
		if(mapdata[c][3].indexOf("-s")!=-1) {
			icon.iconSize=new GSize(31,25);
			icon.iconAnchor=new GPoint(15,20);
			icon.infoWindowAnchor=new GPoint(24,5);
		} else if(mapdata[c][3]!="shelter"&&mapdata[c][3]!="hut") {
			icon.iconSize=new GSize(25,20);
			icon.iconAnchor=new GPoint(12,16);
			icon.infoWindowAnchor=new GPoint(19,4);
		} else {
			icon.iconSize=new GSize(21,16);
			icon.iconAnchor=new GPoint(10,12);
			icon.infoWindowAnchor=new GPoint(16,3);
		}
		markers[c]=new GMarker(new GLatLng(mapdata[c][1],mapdata[c][2]),{title:mapdata[c][0]+(n<0?" [provisions]":""),icon:icon});
		var t="<SPAN class=\"name\">"+mapdata[c][0]+"</SPAN>\n<P class=\"txt\">";
		if(n!=0) {
			t+=Math.abs(n)+" bed"+(Math.abs(n)>1?"s":"")+(n<0?" + provisions":"");
		} else {
			t+="<I>No accommodation</I>";
		}
		t+="</P>\n<A href=\"fac.php?fac="+escape(mapdata[c][0])+"\" class=\"nlnk\">View info page &#187;</A>";
		markers[c].bindInfoWindowHtml(t);
	}
	var d;
	for(d=0;d<mapdata4.length-1;d++) {
		icon=new GIcon();
		if(mapdata4[d][4]!=null) {
			t="<P><IMG src=\""+mapdata4[d][4].substring(0,mapdata4[d][4].indexOf(":"))+"/images/"+
				mapdata4[d][4].substring(mapdata4[d][4].indexOf(":")+1,mapdata4[d][4].length)+
					"t.jpg\" alt=\"thumbnail\" width=160 height=120></P>";
		} else {
			t="";
		}
		if(mapdata4[d][3]=="road") {
			icon.image="road.png";
			icon.iconSize=new GSize(25,12);
			icon.iconAnchor=new GPoint(12,9);
			icon.infoWindowAnchor=new GPoint(20,0);
			markers[c+d]=new GMarker(new GLatLng(mapdata4[d][1],mapdata4[d][2]),{title:mapdata4[d][0],icon:icon});
			markers[c+d].bindInfoWindowHtml("<SPAN class=\"name\">"+mapdata4[d][0]+"</SPAN>"+t+"<P class=\"txt\"><I>Roadside starting point</I></P>");
		} else {
			icon.image="POI.png";
			icon.iconSize=new GSize(20,25);
			icon.iconAnchor=new GPoint(9,24);
			icon.infoWindowAnchor=new GPoint(18,0);
			markers[c+d]=new GMarker(new GLatLng(mapdata4[d][1],mapdata4[d][2]),{title:mapdata4[d][0],icon:icon});
			markers[c+d].bindInfoWindowHtml("<SPAN class=\"name\">"+mapdata4[d][0]+"</SPAN><P class=\"txt\">"+
				mapdata4[d][3].substring(mapdata4[d][3].indexOf(":")+1,mapdata4[d][3].length)+"</P>"+t+
					"<P class=\"txt\"><U>Coordinates:</U> <I>"+mapdata4[d][1]+"&deg;N, "+mapdata4[d][2]+"&deg;E</I>");
		}
	}
	icon=new GIcon();
	icon.image="mnts1.png";
	icon.iconSize=new GSize(60,30);
	icon.iconAnchor=new GPoint(30,15);
	icons[0]=new GMarker(new GLatLng(68.0,18.5),{icon:icon,title:"Northern Lapland"});
	GEvent.addListener(icons[0],"click",function(){map.setCenter(new GLatLng(68.1,18.3),8)});
	icon=new GIcon(icon);
	icon.image="mnts2.png";
	icons[1]=new GMarker(new GLatLng(67.333,17.333),{icon:icon,title:"Laponia"});
	GEvent.addListener(icons[1],"click",function(){map.setCenter(new GLatLng(67.35,17.55),8)});
	icon=new GIcon(icon);
	icon.image="mnts3.png";
	icons[2]=new GMarker(new GLatLng(66.667,16.5),{icon:icon,title:"Arjeplogsfjällen"});
	GEvent.addListener(icons[2],"click",function(){map.setCenter(new GLatLng(66.6,16.6),8)});
	icon=new GIcon(icon);
	icon.image="mnts4.png";
	icons[3]=new GMarker(new GLatLng(66.0,15.333),{icon:icon,title:"Vindelfjällen"});
	GEvent.addListener(icons[3],"click",function(){map.setCenter(new GLatLng(65.975,15.7),9)});
	icon=new GIcon(icon);
	icon.image="mnts5.png";
	icons[4]=new GMarker(new GLatLng(63.0,12.667),{icon:icon,title:"Jämtland"});
	GEvent.addListener(icons[4],"click",function(){map.setCenter(new GLatLng(63.01,12.775),9)});
}

function initAreas()
{
	for(c=0;c<mapdata2.length-1;c++) {
		areas[c]=new GPolygon.fromEncoded({
			polylines: [{
				points: mapdata2[c][0],
				levels: mapdata2[c][1],
				color: mapdata2[c][2],
				opacity: 0.25,
				weight: 3,
				numLevels: 18,
				zoomFactor: 2
			}],
			fill: true,
			color: mapdata2[c][2],
			opacity: 0.25,
			outline: false
		});
	}
}

function initTrails()
{
	for(c=0;c<mapdata3.length-1;c++) {
		trails[c]=new GPolyline.fromEncoded({
			points: mapdata3[c][0],
			levels: mapdata3[c][1],
			color: mapdata3[c][2],
			opacity: 0.75,
			weight: (mapdata3[c][2].substring(5,7)=="00"?3:2),
			numLevels: 18,
			zoomFactor: 2
		});
	}
}

function DM(s)
{
	if(s=="Start") {
		if(meter!=null)	map.removeOverlay(meter);
		document.getElementById("run").value="Stop";
		document.getElementById("km").value=0;
		meter=new GPolyline([],"#00FFFF",5,1,{geodesic:true,clickable:false});
		map.addOverlay(meter);
		list=GEvent.addListener(map,"click",function(overlay,latlng,overlaylatlng) {
			if(overlay!=null) {
				latlng=overlaylatlng;
				try {
					overlay.closeInfoWindow();
				} catch(dummy) {
					void(0);
				}
			}
			n=meter.getVertexCount();
			if(n==0) {
				meter_start=new GMarker(latlng,{title:"Start",icon:G_DEFAULT_ICON,clickable:false});
				map.addOverlay(meter_start);
			} else {
				if(meter_stop!=null) map.removeOverlay(meter_stop);
				meter_stop=new GMarker(latlng,{title:"End",icon:G_DEFAULT_ICON,clickable:false});
				map.addOverlay(meter_stop);
			}
			meter.insertVertex(n,latlng);
			document.getElementById("km").value=Math.round(meter.getLength()/10)/100;
		});
	} else {
		document.getElementById("run").value="Start";
		GEvent.removeListener(list);
		meter.setStrokeStyle({weight:4,opacity:0.5});
		if(meter_start!=null) map.removeOverlay(meter_start);
		if(meter_stop!=null) map.removeOverlay(meter_stop);
	}
}

function MS(q)
{
	if(q.length<4) {
		alert("Search text must be at least 4 characters long.");
		return;
	}
	if(document.getElementById("facs").checked) {
		for(c=0;c<mapdata.length-1;c++) {
			t=markers[c].getTitle().toLowerCase();
			if(t.indexOf(" [")!=-1) t=t.substring(0,t.indexOf(" ["));
			if(t==q.toLowerCase()) {
				map.setCenter(markers[c].getLatLng(),11);
				setTimeout("GEvent.trigger(markers[c],'click')",1000);
				return;
			}
		}
	}
	if(document.getElementById("other").checked) {
		for(c=mapdata.length-1;c<markers.length;c++) {
			if(markers[c].getTitle().toLowerCase()==q.toLowerCase()) {
				map.setCenter(markers[c].getLatLng(),11);
				setTimeout("GEvent.trigger(markers[c],'click')",1000);
				return;
			}
		}
	}	
	alert("Marker not found!");
}

function toggleFacs(on)
{
	for(c=0;c<mapdata.length-1;c++) {
		if(on) {
			mgr.addMarker(markers[c],(mapdata[c][3]=="shelter"||mapdata[c][3]=="hut"?8:7));
		} else {
			mgr.removeMarker(markers[c]);
		}
	}
}

function toggleAreas(on)
{
	for(c=0;c<areas.length;c++) {
		if(on) {
			map.addOverlay(areas[c]);
		} else {
			map.removeOverlay(areas[c]);
		}
	}
}

function toggleTrails(on)
{
	for(c=0;c<trails.length;c++) {
		if(on) {
			map.addOverlay(trails[c]);
		} else {
			map.removeOverlay(trails[c]);
		}
	}
}

function toggleOther(on)
{
	for(c=mapdata.length-1;c<mapdata.length+mapdata4.length-2;c++) {
		if(on) {
			mgr.addMarker(markers[c],7);
		} else {
			mgr.removeMarker(markers[c]);
		}
	}
}

function toggleIcons(on)
{
	for(c=0;c<icons.length;c++) {
		if(on) {
			mgr.addMarker(icons[c],4,6);
		} else {
			mgr.removeMarker(icons[c]);
		}
	}
}	

function plotTour(n)
{
	if(tour!=null) {
		map.removeOverlay(tour);
		tour=null;
	}
	if(days.length>0) {
		for(c=0;c<days.length;c++)
			map.removeOverlay(days[c]);
		days=[];
	}
	if(n==0) {
		document.getElementById("goto").href="javascript:alert('No tour selected!')";
		return;
	}
	tour=new GPolyline.fromEncoded({
		points: mapdata5[n-1][1],
		levels: mapdata5[n-1][2],
		color: "#FFFF00",
		opacity: 0.75,
		weight: 4,
		numLevels: 18,
		zoomFactor: 2
	});
	map.addOverlay(tour);
	verts=mapdata5[n-1][3];
	for(c=0;c<verts.length-1;c++) {
		days[c+1]=new GMarker(tour.getVertex(verts[c][0]),{title:"Day "+verts[c][1],clickable:false,zIndexProcess:zFix});
		map.addOverlay(days[c+1]);
	}
	if(verts[c][0]==0) {
		days[0]=new GMarker(tour.getVertex(0),{title:"Tour start+finish",clickable:false,zIndexProcess:zFix});
		map.addOverlay(days[0]);
	} else {
		days[0]=new GMarker(tour.getVertex(0),{title:"Tour start",clickable:false,zIndexProcess:zFix});
		days[c+1]=new GMarker(tour.getVertex(verts[c][0]),{title:"Tour finish (day "+verts[c][1]+")",clickable:false,zIndexProcess:zFix});
		map.addOverlay(days[0]);
		map.addOverlay(days[c+1]);
	}
	document.getElementById("goto").href="title.php?tour="+mapdata5[n-1][0];
}

function zFix(dummy1,dummy2)
{
	return 1000;
}

function centerTour()
{
	if(tour==null) {
		alert("No tour plotted!");
		return;
	}
	bounds=tour.getBounds();
	map.setCenter(bounds.getCenter(),map.getBoundsZoomLevel(bounds));
}
