

/*
 * Global variables
 */
 
var selectedNodeNum; // Integer that is the index of the current node in the navigation tree
var nodeArray;       // Array containing all the nodes in the navigation tree.

/*
 * Settings. Initialized in the init() function below.
 */

var iconBase;        // Point to the base URL of the icons used to show position. 
var iconName;        // Name attribute of the icon image tag. An integer is appended to this to indicate level of depth.
var iconMap;         // Default name of the icon map. An integer is appended to this to indicate level of depth.

var maxIconNum;      // The highest node number. Used to initialize the array of nodes.
var maxDepth;        // max depth of the navigation tree.

var mainImageName    // Name attribute of the the main image.

var nodeNavigationTimeStamp //timestamp used to genrate image views.

var globalSelectedArea // Global areakey for forecast maps

var arbTimeStep	= 0;	// Def tidsteg
var vDagArr = new Array(phraseArray[10],phraseArray[11],phraseArray[12],phraseArray[13],phraseArray[14],phraseArray[15],phraseArray[16]);

	var dagsMarkeringar = new Array();
	dagsMarkeringar['mo']=phraseArray[21];
	dagsMarkeringar['em']=phraseArray[22];
	dagsMarkeringar['kv']=phraseArray[23];
	dagsMarkeringar['na']=phraseArray[24];
	dagsMarkeringar['da']=phraseArray[25];
 
/*
 *
 */
function node(nodeName, placeId, imgMap, iconSrc, iconMap, parents, children) {
  this.nodeName = nodeName;
  this.placeId  = placeId;
  this.imgMap   = imgMap;
  this.iconSrc  = iconSrc;
  this.iconMap  = iconMap;
  this.parents  = parents;
  this.children = children;
}

/*
 * Set the icon representing the indicated navigation 
 * level to the image indicated by iconSrc.
 *
 * The icons are assumed to be named "level" plus an integer
 * indicating depth.
 */

function setIcon(level, iconSrc, mapName) {
  var image = document.images[iconName + level];
  var iconLocation;

  if (iconSrc != null) {
    iconLocation = iconBase + iconSrc;
  } else {
    iconLocation = "img/trans.gif";
  }

  if (image != null) {
     image.src = iconLocation;

     if (mapName != null) {
       image.useMap = "#" + mapName;
     } else {
       image.useMap = "#" + iconMap + level;
     }
  }
}

/*
 * Update the view to reflect the current navigation 
 * status (i.e. which node is in selectedNodeNum).
 */ 

function updateNavigationView() {
  // Runs every time

   var selectedNode = nodeArray[selectedNodeNum];
   document.forms.navigationForm.selectedNum.value  = selectedNodeNum;
   document.forms.navigationForm.selectedName.value = selectedNode.nodeName;
   document.forms.navigationForm.placeId.value      = selectedNode.placeId;

   updateMainView(selectedNode, arbTimeStep);
   updateParentView(selectedNode);
   updateChildView(selectedNode);
}

/*
 * Update the view of the main image
 */

function updateMainView(selectedNode, arbTimeStep) {
	
   var placeId = selectedNode.placeId;
   var currParents = selectedNode.parents;

   var mainSrc = getMainSrc(placeId, arbTimeStep, currParents);
   var mapName = selectedNode.imgMap;
   mapName = "null";
   
   var image = document.images[mainImageName];
   
   
if (document.forms.time != 'undefined')
	{
		var selMap;
		var btnTemp;
		currMapDates = smhiavailabledates[globalSelectedArea];
		if (currMapDates.length>=35) {
			selMap=selMaps22;
			btnTemp=btnTimArr22;
		}
		else{
			selMap=selMaps5;
			btnTemp=btnTimArr5;
		}
		for (var i=0; i<selMap.length; i++)
		{
			if (arbTimeStep==selMap[i]){break};
		}
		var tempday = extractFormatDate(arbTimeStep,currMapDates);
		document.forms.time.forcasttime.value=tempday+' '+dagsMarkeringar[btnTemp[i]];
   }
   

   if (image != null) {
     image.src = mainSrc; 

     if (mapName != null) {
       image.useMap = "#" + mapName;
     } else {
       image.useMap = null;
     }
   }

   
}

function smhicheckExist(inVal, inArr) {
	var arbVal;
	for (arbVal=0;arbVal<inArr.length;arbVal++) {
		if (inArr[arbVal]==inVal) {
			return true;
		}
	}
	return false;
}

/* 
 * Get the src for main image, based on SMHI placeId;
 * NOTE: ADAPT THIS!!
 */

function getMainSrc(placeId, inTimeStep, currParents) {
	var parentArr = new Array();
	parentArr = String(currParents).split(",");

	var tmpCnt;
	var tmpArea = String(placeId);
	if (tmpArea == selectArea)
	{
		tmpArea=tmpArea+"1";
	}
	else
	{
		if (!smhicheckExist(tmpArea,smhiavailableareas) && (tmpArea>1)) {
			for (tmpCnt=0;tmpCnt<parentArr.length;tmpCnt++) {
				if (smhicheckExist(nodeArray[parentArr[tmpCnt]].placeId,smhiavailableareas)) {
					
					tmpArea = nodeArray[parentArr[tmpCnt]].placeId+"0";
					
				}
			}
		}
	}

	globalSelectedArea = tmpArea;

	if (smhicheckExist(tmpArea,smhiavailableareas)) {
		timeStamp = smhiavailabledates[tmpArea][(inTimeStep*2)]+" "+smhiavailabledates[tmpArea][(inTimeStep*2)+1];
		
		var dateString = timeStamp.substr(0,10);
		var timeString = timeStamp.substr(11,2);


		
		return smhilandimages[tmpArea+"_"+dateString+"_"+timeString][0];
	} else {
		return "./img/datamissing.gif";
	}
}


/*
 * Update the view to reflect the parents of the currently selected node
 */
 
function updateParentView(selectedNode) {
   var parents = selectedNode.parents;

   if (parents != null) {
   	
     var parentsLength = parents.length;
		
     for (i = 0; i < parentsLength; i++) {
     	if (nodeArray[parents[i]].iconMap != null)
     	{
       		setIcon(i, nodeArray[parents[i]].placeId+'_ico.gif', nodeArray[parents[i]].iconMap);
       	}
     }
	if (selectedNode.iconSrc != null){
     		setIcon('curr', selectedNode.iconSrc, selectedNode.imgMap);
	}
	else{
		setIcon('curr',(nodeArray[parents[parentsLength-1]]).iconSrc, (nodeArray[parents[parentsLength-1]]).imgMap);
	}
		
		
     for (i = parentsLength + 1; i < 5; i++) {
       setIcon(i, null, null);
     }
   } else {
     for (i = 0; i < maxDepth; i++) {
       setIcon(i, null, null);
     }
     setIcon('curr', selectedNode.iconSrc, selectedNode.imgMap);
   }
   

	
   
}

/*
 * Update the view to reflect the children of the currently selected node
 */

function updateChildView(selectedNode) {
var children = selectedNode.children;

	if (children != null)
	{
		if (nodeArray[children[0]].children == null)
		{
		   var subSelect = document.forms.navigationForm.subSelect;
		   var opts = subSelect.options;
		
		   opts.length = 0;
		
		   if (children != null) {
		      for (var i = 0; i < children.length; i++) {
			 opts.length++;
			 opts[i].value = children[i];
		         opts[i].text = nodeArray[children[i]].nodeName;
		      }
		   } 
	   }
	}
	else {   
		     var parents = selectedNode.parents;
		
		     if (parents != null) {
		       var parentsLength = parents.length;
		
		       updateChildView(nodeArray[parents[parents.length - 1]]);
		     }
		   } 
	
}

/*
 * Check if the node with the indicated number is a leaf in the navigation tree.
 */

function isLeafNode(nodeNum) {
   var selectedNode = nodeArray[nodeNum];

   if (!selectedNode) {
     return false;
   } else if (selectedNode.children && selectedNode.children.length > 0) {
     return false;
   } else {
     return true;
   }
}

/*
 * Test if the current page should be reloaded with a new query string.
 * !ADAPT THIS!
 */

function checkReload(selectedValue) {
   var selectedNode = nodeArray[selectedValue];

   if (!selectedNode) {
     return false;
   } else if (selectedNode.children && selectedNode.children.length > 0) {
     return false;
   } else {
     return true;
   }
}

/*
 * Do reload the page with a new query string.
 */

function doReload(selectedValue) {

   var selectedNode = nodeArray[selectedValue];

   if (selectedNode) {
     var placeId = selectedNode.placeId;

     window.location.search = "?placeId=" + placeId;
   }
}

/*
 * Handle that a child of the current node has been chosen
 */

function handleChildSelect(selectValue) {
// TEST OK
doReload(selectValue);return;

   if (selectValue > 0) {
      selectedNodeNum=selectValue;
      if (checkReload(selectedNodeNum)) {
        doReload(selectedNodeNum);
	return;
      }
      updateNavigationView();
   }
}


/*
 * Handle that a child of the current node has been chosen through a map
 */

function handleChildMapSelect(selectValue) {

   if (selectValue > 0) {
// TEST OK
doReload(selectValue);return;

      selectedNodeNum=selectValue;
      if (checkReload(selectedNodeNum)) {
        doReload(selectedNodeNum);
	return;
      }
      updateNavigationView();
   }
}

/*
 * Handle that a parent of the current node has been chosen. 
 * The parent is indicated indirectly by its depth, not by its node number.
 * The depth is used to look it up in the current node's navigational
 * data.
 */

function handleParentSelectByDepth(depth) {

   var selectedNode = nodeArray[selectedNodeNum];
   var parents = selectedNode.parents;

   if (parents != null) {
      if (depth < parents.length) {
         selectedNodeNum = parents[depth];
	// TEST OK
	doReload(selectedNodeNum);return;

         if (checkReload(selectedNodeNum)) {
          doReload(selectedNodeNum);
            return;
         }
         updateNavigationView();
      }
   }

}

/*
 * Try to lookup the name given by the event. If incomplete, try to make it complete.
 */

function handleNameKey(txtInput, event) {
	
	if (browserIsIE)
	{
		if (event == null) {
  			nameCheck(txtInput.value, true);
  		}	
		else if (event != null && event.keyCode > 64) {
  			nameCheck(txtInput.value, false);
  		}
  	}
  	if (event != null) {
		if (event.keyCode == 13)
			{
				nameCheck(txtInput.value, true);
			}
	}
}



/*
 * Try to lookup the name given by the string. If incomplete, try to make it complete.
 */


function nameCheck(value, reload) {

  	value = String(value).toUpperCase();
  	var foundCount = 0;
  	var lastFoundNodeNum;
  	var inlength=value.length;
  	
	var saveName="";
	var foundName = false;
	
  	for (i = 0; i <= maxIconNum; i++) {
    	var node = nodeArray[i];
   
    	if (node != null) {
      	var name = node.nodeName.toUpperCase();
   
     		if (name.substring(0, value.length) == value) {
      		if (!foundName)
      		{
      			saveName=name;
      			lastFoundNodeNum = i;
      			foundName = true;
      		}
      		else if (name < saveName){
      			saveName=name;
        			lastFoundNodeNum = i;
        		}
      	}
  		}
	}
  
	if (foundName)
	{  
		document.forms.navigationForm.selectedName.value = nodeArray[lastFoundNodeNum].nodeName;
		if (browserIsIE)
		{
  			var oRange = document.forms.navigationForm.selectedName.createTextRange(); 
   		oRange.moveStart("character", inlength); 
   		oRange.moveEnd("character", nodeArray[lastFoundNodeNum].nodeName.length);      
   		oRange.select();  
   	}
   	/*if (browserIsMoz)
   	{
   		document.forms.navigationForm.selectedName.setSelectionRange(inlength, nodeArray[lastFoundNodeNum].nodeName.length); 
   	}*/
	} 

	if (reload)
	{ 
		if (foundName)
		{	 
  			selectedNodeNum = lastFoundNodeNum;
  			if (checkReload(selectedNodeNum)) {
  				doReload(selectedNodeNum);
   			return;
  			}
  			window.location=menuArray[currMenu][1]+"?placeId="+nodeArray[selectedNodeNum].placeId;
  		}
		else
		{
		 	document.forms.navigationForm.selectedName.value = "Ingen träff";
		}
	}
}



/*
 * Get the node number correspinding to the given placeId.
 */

function findPlaceId(placeId) {
  for (i = 0; i <= maxIconNum; i++) {
    var node = nodeArray[i];
   
    if (node != null) {
      if (node.placeId == placeId) {
        return i;
      }
    }
  } 
  return null;
}

/*
 * Helper function: parse the query string from this page's URL.
 */

function parseQueryString() {
//  var tmpDelAncors = location.search.substring(0).split("#");
//  var querySubStrings = tmpDelAncors[0].split("&");
  var querySubStrings = location.search.substring(1).split("&");
  var queryVars = new Array();

  for (i = 0; i <querySubStrings.length; i++) {
    var keyValPair = querySubStrings[i].split("=")
    if (keyValPair[0] && keyValPair[1]) {
      queryVars[keyValPair[0]] = unescape(keyValPair[1]);
    }
  }

  return queryVars;
}

/*
 * Get the name of the currently selected node
 */

function getCurrentName() {
   var selectedNode = nodeArray[selectedNodeNum];

   if (selectedNode) {
     var name = selectedNode.nodeName;

     if (name) { 
       return name;
     }
   }
   return "ORTNAMN";
}


function getCurrentMapName() {
	
   var selectedNode = nodeArray[selectedNodeNum];
   placeId = selectedNode.placeId;
   currParents = selectedNode.parents;
	
	var parentArr = new Array();
	parentArr = String(currParents).split(",");

	var tmpCnt;
	var tmpArea = String(placeId);
	if (!smhicheckExist(tmpArea,smhiavailableareas) && (tmpArea>1)) {
		for (tmpCnt=0;tmpCnt<parentArr.length;tmpCnt++) {
			if (smhicheckExist(nodeArray[parentArr[tmpCnt]].placeId,smhiavailableareas)) {
				tmpArea = nodeArray[parentArr[tmpCnt]].nodeName;
			}
		}
	}
	else 
	{
		tmpArea = selectedNode.nodeName;
	}
	return tmpArea;
   
}


function showKeys(arr) {
  for (var key in arr) {
    alert(key + " => " + arr[key]);
  }
}





/*
 * Make timeline for current area
 */

// document.write('<td bgcolor="#FFFFFF" align="left"><a href="javascript://" onMouseOver="updateMainView(nodeArray[selectedNodeNum], \''+valuesArray[datArr[aktTidsteg]+"-datum"]+'_'+valuesArray[datArr[aktTidsteg]+"-tidsteg"]+'\');"><img border="0" src="img/'+colArr[aktTidsteg]+'.gif" name="imgtimesel'+aktTidsteg+'"></a></td>');

var btnColArr22 = new Array('big','small','small','small','big','small','small','small','big','small','small','small','big','small','big','small');
var btnTimArr22 = new Array('na','mo','em','kv','na','mo','em','kv','na','mo','em','kv','na','da','na','da');
var selMaps22 = new Array(-1,0,1,2,3,4,5,6,7,8,9,10,11,13,15,17);
var selMaps5 = new Array(0,1,2,3,4);
var btnColArr5 = new Array('big','small','big','small','big');
var btnTimArr5 = new Array('em','em','em','em','em');
var latestTouch = 0;
var latestCol = 'big';
var latestOver = 0;
var latestOverCol = 'big';

function btnOver(inBtnNr,inCol)
{
	if (inBtnNr != latestTouch) {
		var restoreSrc = 'time/'+latestOverCol+'.gif';
		var image = document.images["slidebtn"+latestOver];
		if (image != null) {
			image.src = restoreSrc;
		}

		var btnSrc = 'time/'+inCol+'_over.gif';
		var image = document.images["slidebtn"+inBtnNr];
		if (image != null) {
			image.src = btnSrc;
		}
		latestOver = inBtnNr;
		latestOverCol = inCol;
	}
}

function btnTouch(inBtnNr,inCol)
{
	var restoreSrc = 'time/'+latestCol+'.gif';
	var image = document.images["slidebtn"+latestTouch];
	if (image != null) {
		image.src = restoreSrc;
	}

	var btnSrc = 'time/'+inCol+'_sel.gif';
	var image = document.images["slidebtn"+inBtnNr];
	if (image != null) {
		image.src = btnSrc;
	}
	latestTouch = inBtnNr;
	latestCol = inCol;
	latestOver = -1;
}


function changeTimeStep(inPlaceId,inTimeStep,inParents)
{
   var mainSrc = getMainSrc(inPlaceId, inTimeStep, inParents);
   var image = document.images[mainImageName];
   if (image != null) {
     image.src = mainSrc;
   }
   
	if (typeof(document.forms.time) != 'undefined')
	{
		var selMap;
		var btnTemp;
		currMapDates = smhiavailabledates[globalSelectedArea];
		if (currMapDates.length>=35) {
			selMap=selMaps22;
			btnTemp=btnTimArr22;
		}
		else{
			selMap=selMaps5;
			btnTemp=btnTimArr5;
		}
		for (var i=0; i<selMap.length; i++)
		{
			if (inTimeStep==selMap[i]){break};
		}
		
		var tempday = extractFormatDate(inTimeStep,currMapDates);		
	  	document.forms.time.forcasttime.value=tempday+' '+dagsMarkeringar[btnTemp[i]];
     	
	}
   return;
}



function generateTimeline() {
   var selectedNode = nodeArray[selectedNodeNum];
   var placeId = selectedNode.placeId;
   var currParents = selectedNode.parents;
   // Sätter timeStamp utifrån default för sverige eller utland
  	var mainSrc = changeTimeStep(placeId, 0, currParents);
   var mapCnt;
   var currMapDates = new Array();
   var latestDate;
   currMapDates = smhiavailabledates[globalSelectedArea];
  
   document.write('<table cellpadding="0" cellspacing="0" border="0" width=100%>');
   document.write('<tr>');
	document.write('<td align=center>');
			
	// om 22 eller 5 tidsteg
	if (currMapDates.length>=35) {
	
	for (var tem=0; tem<22; tem++)
	{
		if (currMapDates[tem*2+1]==-1){latestOver++;}
	}
	arbTimeStep	= latestOver;
		
		document.write('<img src="img/trans.gif" height=3>')
		document.write('<table cellpadding=0 cellspacing=0 border=0>');
		document.write('<tr>');
		
		for (var i=0;i<16;i++) {
			if (i >= latestOver+1){
				document.write('<td align="middle"><img src="time/'+btnTimArr22[i]+'.gif"></td>');
			}else{
				document.write('<td align="middle"></td>');
			}
		}
		document.write('</tr>');
		
		document.write('<tr>');
		for (var i=0;i<16;i++) {
			if (i >= latestOver+1){
				document.write('<td><a href="javascript:changeTimeStep('+placeId+','+selMaps22[i]+',\''+currParents+'\');btnTouch('+i+',\''+btnColArr22[i]+'\');"><img src="time/'+btnColArr22[i]+'.gif" name="slidebtn'+i+'" border="0" onMouseOver="javascript:btnOver('+i+',\''+btnColArr22[i]+'\');"></A></td>');
			}else{
				document.write('<td><img src="time/'+btnColArr22[i]+'_na.gif" border="0"></td>');
			}
		}
		document.write('</tr>');	
		document.write('<tr><td colspan="4">'+extractFormatDate(0,currMapDates)+'</td><td colspan="4">'+extractFormatDate(4,currMapDates)+'</td>	<td colspan="4">'+extractFormatDate(8,currMapDates)+'</td><td colspan="2">'+extractFormatDate(12,currMapDates)+'</td><td colspan="2">'+extractFormatDate(15,currMapDates)+'</td></tr>');
			
		document.write('</table>');
		
	} else if (currMapDates.length>=10) {
		
		document.write('<img src="img/trans.gif" height=3>')
		document.write('<table cellpadding=0 cellspacing=0 border=0>');
		document.write('<tr>');
		for (var i=0;i<5;i++) {
			document.write('<td align="middle"><img src="time/'+btnTimArr5[i]+'.gif"></td>');
		}
		document.write('</tr>');
		document.write('<tr>');
		for (var i=0;i<5;i++) {
			document.write('<td><a href="javascript:changeTimeStep('+placeId+','+i+',\''+currParents+'\');btnTouch('+i+',\''+btnColArr5[i]+'\');"><img src="time/'+btnColArr5[i]+'.gif" name="slidebtn'+i+'" border="0" onMouseOver="javascript:btnOver('+i+',\''+btnColArr5[i]+'\');"></A></td>');
		}
		document.write('</tr><tr><td class="ntv_date" colspan=2>'+extractFormatDate(0,currMapDates)+'</td><td class="ntv_date" colspan=2>'+extractFormatDate(2,currMapDates)+'</td><td class="ntv_date">'+extractFormatDate(4,currMapDates)+'</td></tr><tr>');

		document.write('</table>');
		document.write('<img src="img/trans.gif" height=3>')
	} else {
		document.write('<tr><td>&nbsp;</td></tr>');
	}
	document.write('</td>');
	document.write('<td class="ntv_legend_padding_question">');
	document.write('<img src="img/trans.gif" height=5><br>')
	document.write('<a href="javascript:void(0);" onclick="window.open(\'beskrivning_timeline.html\', \'Question\', \'location=no, menubar=no, Height=160, width=200, status=no, resizable=no, scrollbar=no \')"><img src="img/question.gif" border=0></a> ');
	document.write('</td>');
	document.write('</tr>');
   document.write('</table>');
   
   if (currMapDates.length>=35) {
   	btnTouch(latestOver+1,btnColArr22[latestOver+1]);
   }
	else 
	{
		btnTouch(latestOver,btnColArr5[latestOver]);
	}
}

function extractFormatDate(intimestep, inArr)
{
	var arbDateArr = new Array();
	arbDateArr = inArr[intimestep*2].split("-");
	if (setDayFormat == 'date')
	{
		return (Math.round(arbDateArr[2])+'/'+Math.round(arbDateArr[1]));
	}
	else if (setDayFormat == 'weekdays')
	{
		weekDaysArr = new Array(phraseArray[37], phraseArray[38], phraseArray[39], phraseArray[40], phraseArray[41], phraseArray[42], phraseArray[43]);
		
		printDate = new Date(arbDateArr[0],arbDateArr[1]-1,arbDateArr[2]);
		//printDate.setFullYear(arbDateArr[0]);
		//printDate.setMonth(arbDateArr[1]-1);
		//printDate.setDate(arbDateArr[2])
		
		return (weekDaysArr[printDate.getDay()]);
	}
	
}


