var url="../txtFiler/start10dygn.xml?"

var map = null;
var startZoom = 5;
var zoomLev = startZoom;
var bounds = null;
var activeMarker = 0;
var activeFolder = "";
//
// ==== first part of the select box ===
var select_html = null;
var htmlInfo = null;
var yrInfoUrl = null;
var arrMarkers = new Array();
var arrMarkersInfo = new Array();
var polyArray = new Array();
var htmls = new Array();
var placeIcons = new Array();
//

// Google chart values
var chartStart = "http://chart.apis.google.com/chart?chs=";
// aTc = Temperatur-färger från: -55 till +55, med steg om 5 grader (de första/sista 6 värdena har samma färger)
var aTc = ["9fabfe","9fabfe","9fabfe","9fabfe","9fabfe","9fabfe","b5baff","b5caff","b5d8ff","baeaff","cbfeff","fcffb5","fff2b5","ffe4b5","ffd8b5","ffcab5","ffb7b5","ffb7b5","ffb7b5","ffb7b5","ffb7b5","ffb7b5"];
// sp = Hur stor del ska varje färg ta upp av bakgrunden
var sp = 1/4;
// chartLinje tjocklek samt färg
var lth = 3;
var lco = "000066";
lth = "chls=" + lth + "&";
lco = "chco=" + lco + "&";
//

  function init(){
	// _______________________________________________    Tar bort URL-fönster i iP....
	//
	if (navigator.userAgent.indexOf('iPhone') != -1 || navigator.userAgent.indexOf('iPod') != -1) { 
	  addEventListener("load", function() { 
	  setTimeout(hideURLbar, 0); 
	}, false); 
  }  // END if()

  function hideURLbar() { 
	window.scrollTo(0, 1); 
  }  // END function hideURLbar()

	// _______________________________________________    MAP
	//
	_mPreferMetric=true;
	map = new GMap2(document.getElementById("gMap"), {size:new GSize(320,340)});
	map.setCenter(new GLatLng(62.9,14.4), startZoom);
	map.addControl(new GLargeMapControl());
	//map.addControl(new GScaleControl(300));
	// Typ av kartor
	map.addControl(new GMapTypeControl());
	map.removeMapType(G_HYBRID_MAP);
	map.addMapType(G_PHYSICAL_MAP);
	map.setMapType(G_NORMAL_MAP);
	bounds = map.getBounds();
	// Reagerar på flytt av kartan
	GEvent.addListener(map, "moveend", function() {
		//var zoom = map.getZoom();
		bounds = map.getBounds();
		zoomLev = map.getZoom();
		controlMarkers();
	});
	// Reagerar på; zoomning
	GEvent.addListener(map, "zoomend", function(oldzoom,zoom) { 
		//placeNameIcons()
	});
	
	//   Map Overview
	//
	// map.addControl(new GOverviewMapControl(new GSize(100,100)));
	
	
	// _______________________________________________    Ikoner
	//
	//var wichIcon = 1;
	
	var placeIcon = new GIcon();
	placeIcon.iconSize = new GSize(14, 14);
	placeIcon.iconAnchor = new GPoint(7, 7);
	placeIcon.infoWindowAnchor = new GPoint(8, 6);
	placeIcon.transparent = "../placeIcons/place14IconT.png";
	for(var i=0;i<=1;i++){
		placeIcons[i] = new GIcon(placeIcon, '../placeIcons/place14Icon'+i+'.png');	
	}
	
// ------
	map.openInfoWindowHtml(map.getCenter(),"<div></div>");
	map.closeInfoWindow();
	select_html = "<select onChange='handleSelected(this)'><option selected>" + selectHead + "<\/option>";
	// nRnd är till för att browsern alltid ska läsa in den senaste start-filen
	var nRnd = Math.random();
	url += nRnd;
    var request = GXmlHttp.create();
    request.open("GET", url, true);
    request.onreadystatechange = function() {
      if (request.readyState == 4) {
        var xmlDoc = request.responseXML;
        // –––––––––––––   Platser
        //
        var places = xmlDoc.documentElement.getElementsByTagName("place");        
        for (var indx = 0; indx < places.length; indx++) {
			// obtain values
			var coords = places[indx].getAttribute("coords").split(",");
			var lat = parseFloat(coords[0]);
			var lng = parseFloat(coords[1]);
			var point = new GLatLng(lat,lng);
			var label = places[indx].getAttribute("label");
			var folder = places[indx].getAttribute("fold");
			/*
var country = places[indx].getAttribute("country");
			if(country){
				folder = country + "/" + folder;
			}else{
				folder = "Sweden/" + folder;
			}
*/
			folder = "Sweden/" + folder;
			var zLev =  places[indx].getAttribute("zLev");		                          
			var wichIcon  = parseFloat(places[indx].getAttribute("icon"));
			var arrMarkInfo = {folder: folder, label: label, zLev: zLev};
			arrMarkersInfo[indx] = arrMarkInfo;	
			// create the marker
			var marker = createMarker(point,indx,label,wichIcon);
			arrMarkers[indx] = marker;
			map.addOverlay(marker);	
			marker.hide();			      
		}
		controlMarkers()
		// ===== final part of the select box =====
        select_html += '<\/select>';
        document.getElementById("selectPlace").innerHTML = select_html;
        checkPrePlace();
      }
    }
    request.send(null);
}

// ____________________________________    Skapar Marker och gömmer/visar
//
function controlMarkers() {
	var mLength = arrMarkers.length;
	for (var i = 0; i < mLength; i++) {		
		var marker = arrMarkers[i];
		var point = marker.getLatLng();
		var zLev = arrMarkersInfo[i].zLev;				
		if(bounds.contains(point) && zoomLev>=zLev){
			marker.show();
		}else{
			marker.hide();
		}
	}	 
}
function createMarker(point,indx,label,wichIcon) {
	var marker = new GMarker(point,{icon:placeIcons[wichIcon], title:label});
	// ======= Add the entry to the select box =====
        select_html += '<option> ' + label + '<\/option>';
	
	GEvent.addListener(marker, "click", function() {
		markerClick(indx)
	});
	return marker;
}

// ______________________________________     Marker klickad på
//

function markerClick(indx) {
	//arrMarkers[indx].openInfoWindowTabsHtml([new GInfoWindowTab("Info",html1), new GInfoWindowTab("Bilder",html2),new GInfoWindowTab("Omr&#229;de",html3)]); 	
	activeMarker = indx;
	arrMarkers[activeMarker].openInfoWindowHtml(getText);
	getData();
	
}
// ======= This function handles selections from the select box ====
// === If the dummy entry is selected, the info window is closed ==
var oldLevel = null;
var oldInx = -1;
function handleSelected(opt) {
	var indx = opt.selectedIndex - 1; 
	if (indx > -1) {
		var marker = arrMarkers[indx];
		GEvent.trigger(marker,"click");
		marker.show();
		// Ändrar på zLev till en "högre" level så att orten syns även efter ändring i kartan (samt återställer den senast)
		// Återställer ifall det finns någon
		if (oldInx > -1) {
			arrMarkersInfo[oldInx].zLev = oldLevel;
		}
		oldLevel = arrMarkersInfo[indx].zLev;
		oldInx = indx;
		// Sätter den nya
		arrMarkersInfo[indx].zLev = 5;		
	}else{
		map.closeInfoWindow();
	}
}
// Kollar ifall det finns en ort mer i url. Visar i så fall vädret för denna
function checkPrePlace(){
	if(urlOrt){
		var sOrt = urlOrt.toLowerCase();
		var nPlaces = arrMarkers.length;        
        for (var indx = 0; indx < nPlaces; indx++) {
        	var checkPlace = arrMarkersInfo[indx].label;
        	checkPlace = checkPlace.toLowerCase();
			if(sOrt == checkPlace){
				var marker = arrMarkers[indx];
				marker.show();
				arrMarkersInfo[indx].zLev = 5;
				GEvent.trigger(marker,"click");
				break;
			}
		}
	}
}     
      
// ______________________________________     Hämtar data hos yr.no
//
function getData(){
	var url = "../getyr.php?place=";
	var yrFold = arrMarkersInfo[activeMarker].folder;
	url += yrFold;
	url += "/";
	var yrPlace = removeSpaces(arrMarkersInfo[activeMarker].label);
	url += yrPlace;
	
	// encodeURI behövs för att IE ska kunna hantera åäö
	url = encodeURI(url);
	//alert(url)	
	var request = GXmlHttp.create();
	request.open("GET", url, true);
	//alert(url);
	request.onreadystatechange = function() {
		if (request.readyState == 4) {	
			if (request.status == 200) {
				var xmlDoc = request.responseXML;				
				if(xmlDoc == null){
					map.closeInfoWindow();					
					var answer = confirm(noText);
					if (answer){
						getData();
					}
				}else{
					// Sätter länken till yr.no rätt
					//alert(yrFold+", "+yrPlace)
					yrInfoUrl = "<a href='http://www.yr.no/sted/"+yrFold+"/"+yrPlace+"' target='_blank' ><b>"+yrInfo+"</b></a>"
					handleXML(xmlDoc);
				}				
			}else{
				map.closeInfoWindow();
				alert(noText2+"   ("+request.status+")")
			}
		}
	}
	request.send(null);
}
function handleXML(xmlDoc){
	var nowDate=new Date();
	var startDate=new Date();
	  	// 
	var upDate = GXml.value(xmlDoc.documentElement.getElementsByTagName("lastupdate")[0]).split("T");   
	var listTime = xmlDoc.documentElement.getElementsByTagName("time");   
	var listTemp = xmlDoc.documentElement.getElementsByTagName("temperature");			
	var listWeather = xmlDoc.documentElement.getElementsByTagName("symbol");
	var listWindD = xmlDoc.documentElement.getElementsByTagName("windDirection");
	var listWindSp = xmlDoc.documentElement.getElementsByTagName("windSpeed");
	var listRain = xmlDoc.documentElement.getElementsByTagName("precipitation");

	var cap = arrMarkersInfo[activeMarker].label; // Rubrik
	var htmlDay     = "<tr>";	
	var htmlTemp    = "<tr>";
	var htmlVF      = "<tr>";
	var htmlWind    = "<tr>";
	var htmlRain    = "<tr>";
	var htmlRainTxt = "<tr>";

	var indexDay = 1;
	//
	var minTemp = 1000;
	var maxTemp = -1000;
	var tempVal = [];
	for (var i = 0; i < listTemp.length; i++){
		if(indexDay > 9){ // Max 9 dagars prognos - bryt annars
			break;
		}
		var aTime = listTime[i].getAttribute("from").split("T");
		var time = aTime[1].slice(0,2);
		var dateParts = aTime[0].split("-");
	 	startDate.setFullYear(dateParts[0]);
	 	startDate.setMonth(dateParts[1]-1);
		startDate.setDate(dateParts[2]);
		var startDay = startDate.getDay();
				
		if((time=="12" || time=="13" || time=="14" || time=="15") && startDate > nowDate){
			// TEMPERATUR
			var temp = listTemp[i].getAttribute("value");
			if(parseFloat(temp) < 1){
				htmlTemp += "<td class='temp_cell_L'>"+temp+"&#176;</td>";
			}else{
				htmlTemp += "<td class='temp_cell_H'>"+temp+"&#176;</td>";
			}
			
			// Tar ut min och max-temp | lägger till 100 så att värdena alltid är positiva
			temp = parseFloat(temp)+100;
			if(temp < minTemp){minTemp = temp};
			if(temp > maxTemp){maxTemp = temp};
			// Lägger in alla temperaturerna i en array
			tempVal[indexDay-1] = temp;
			//
			// VÄDERFRAS
			var weath = listWeather[i].getAttribute("number");
			var vfImage = "../images/vf"+weath+".png";						
			htmlVF += "<td><img class='vf' src='"+vfImage+"'></td>";
			// VIND
			// vindriktningen avrundas till jämna 45° så; att det bara blir 8 olika vindriktningar
			var wind = listWindD[i].getAttribute("deg");
			wind = Math.round((wind+14)/45)*45;
			var windSp = parseFloat(listWindSp[i].getAttribute("mps"));
			windSp = "<strong>"+Math.round(windSp)+"</strong>&nbsp;m/s";
			var windImage = "../images/v"+wind+".png";
			htmlWind += "<td><img class='vind' src='"+windImage+"'><span class='wSpeed'>"+windSp+"</span></td>";
			// DAG
			if(startDay==0 || startDay==7){
				htmlDay += "<td class='daysH'>"+days[startDay].slice(0,3)+"</td>";
			}else{
				htmlDay += "<td class='days' >"+days[startDay].slice(0,3)+"</td>";
			}
			// REGN
			var rain = listRain[i].getAttribute("value");
			iHeight = rain*3;
			// Grafiskt kan bara upp till 5mm regn visas, sedan stannar stapeln på max
			if(iHeight>15){iHeight=15;}
			// Ifall nederbörden är noll så tas regnbilden bort
			if(iHeight<=0){
				htmlRain += "<td class='rain_cell'></td>"
			}else{
				htmlRain += "<td class='rain_cell'><img class='regn' src='../images/blueRain2.png' alt='regn' height='"+iHeight+"'  align='bottom' /></td>"
			}
						
			htmlRainTxt += "<td class='rainTxt'>"+rain+"</td>";
			// 
			indexDay++;
		}				
	}
	
	// ––––––––––––   Google Chart   ––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––	
	var tLength = tempVal.length;
	// X-led
	var startX = 100/(tLength*2);
	var spaceX = 100/tLength;
	// aXpos = Var i x-led ska varje värde placeras
	var aXpos =[startX];
	for (var i = 1; i < tLength; i++) {
		aXpos[i] = startX+(spaceX*i);
	}
	//
	// _____________     Räknar ut värden för chart
	// Bestämmer omfånget i x-led
	minTemp -= minTemp%5; // Sätter minTemp till jämnt 5-tal under min
	// flyttar kurvan uppåt ifall utrymme finns
	var tSpan = maxTemp-minTemp;
	// Drar av de hundra graderna som las på tidigare
	minTemp -= 100;
	if(tSpan < 15){
		minTemp -= 5;
	}
	//alert(minTemp)
	
	// aYt = Vilka värden ska anges på y-axeln
	var aYt = [minTemp+5];
	aYt[1] = minTemp+15;
	/* aYt[2] = minTemp+15; */
	// stC = Vilken färg ska bakgrunden börja på | värde 6 = 0 till +5
	var stC = (minTemp/5)+11;

	//
	var aTemps = [];
	for (var i = 0; i < tLength; i++) {
		var temp = (tempVal[i]-minTemp-100)*5;
		aTemps[i] = temp;
	}
	//
	indexDay--;
	var chartFieldW = 100/indexDay;
	var bkg = "chf=c,ls,90,"+aTc[stC]+","+sp+","+aTc[stC+1]+","+sp+","+aTc[stC+2]+","+sp+","+aTc[stC+3]+","+sp+","+aTc[stC+4]+","+sp+","+aTc[stC+5]+","+sp;
	var xTxt = "chxl=0:||"+aYt[0]+"&#176;||"+aYt[1]+"&#176;||1:||"+aYt[0]+"&#176;||"+aYt[1]+"&#176;|&";
	var chartImage = "cht=lxy&chd=t:"+aXpos+"|"+aTemps+"&chg="+chartFieldW+",25,1,0&chxt=y,r&"+lth+xTxt+lco+bkg;
	
	chartStart += ((tLength*22)+30)+"x50&";
 	var chartUrl = chartStart + chartImage;
 	//
	var htmlChart = "<table id='table_chart' border='0' cellspacing='0' cellpadding='0' ><tr><td width='"+(20.4)+"'><img src='" + chartUrl + "' alt='Diagram' /></td></tr></table>"
	// –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––– 
	
	var htmlSep = "<tr><td colspan='"+indexDay+"' class='sepH'></td></tr>";
	var htmlRainText = "<tr><td colspan='"+indexDay+"'><span  class='tableTextSmall'>"+rainText+"</span></td></tr>";	
	var htmlEnd = "</table><div id='yr'>"+yrInfoUrl+upDateInfo+upDate[1].slice(0,5)+"</div></div>";

	htmlDay     += "</tr>";
	htmlTemp    += "</tr>";
	htmlVF      += "</tr>";
	htmlWind    += "</tr>";
	htmlRain    += "</tr>";
	htmlRainTxt += "</tr>";

// bygg upp tabellerna här

	var htmlStart = "<div id='infoWindow'>";
	htmlStart += "<table id='table_start' border='0' cellspacing='0' cellpadding='0' ><caption id='cap'><span class='ort'>"+cap+"</span>"+wText+"</caption>";

	htmlInfo = htmlStart + htmlDay + htmlSep + htmlTemp + "</table>"; // Första tabellen med dagar och temperatur
	htmlInfo += htmlChart + "</table>";	// Andra tabellen med diagram över temperaturen
	htmlInfo += "<table id='table_slut' border='0' cellspacing='0' cellpadding='0'>";

	htmlInfo += htmlVF + htmlWind + htmlRainText + htmlRain + htmlRainTxt + htmlEnd; // Tredje och sista tabellen

	//alert(htmlInfo);
	arrMarkers[activeMarker].openInfoWindowHtml(htmlInfo);
	
	
}
//
function removeSpaces(sPlace) {
		var aSplit = sPlace.split(" ");
		var splitLength = aSplit.length;
		sPlace = aSplit[0];
		for (part=1; part<splitLength; part++) {
			sPlace = sPlace+"_"+aSplit[part];
		}
	return (sPlace);
}