//-----------------------------------------------------------------------------
// Event handler for image onmouseover events
//-----------------------------------------------------------------------------
var previousImage;

function onMouseOver( thisImageName )
{
	previousImage = thisImageName;
	document.ToolbarForm[thisImageName].src = ".." + SkinDir + "/images/toolbar/" + thisImageName + "_w.gif";	
}

//-----------------------------------------------------------------------------
// Event handler for image onmouseout events
//-----------------------------------------------------------------------------
function onMouseOut()
{
  document.ToolbarForm[previousImage].src = ".." + SkinDir + "/images/toolbar/" + previousImage + ".gif";
}

//-----------------------------------------------------------------------------
function onLoad()
{
	var ms = -1;
	try
	{
		ms = parseInt(SendRequest("map","formstate"));
	}
	catch(e){}

	if( ms == NaN || ms == -1 )
	{
		setTBFormState(_state);					
	}
	else
	{
		setTBFormState(ms);
	}
		
		
	var minScale = SendRequest("map","minScale");
	var maxScale = SendRequest("map","maxScale");
	var scale = SendRequest("map","scale");
	var theme = SendRequest("map","maptheme");
	if( minScale && maxScale )
	{
		_minScale = minScale;
		_maxScale = maxScale;
		_scale = scale;
		_theme = theme;
		createScaleOptions(_scale);
	}
}

//-----------------------------------------------------------------------------
// doSubmit()
//-----------------------------------------------------------------------------
function doSubmit( actionValue, parameterValue )
{
	var _currentMunicipality	= SendRequest("map", "municipality");
  switch (actionValue)
  {
    case "printPreview":
      var selectedGroups = escape(SendRequest("legendFrame", "selectedGroups"));
      var selectedLayers = escape(SendRequest("legendFrame", "selectedLayers"));
      var mapTheme = SendRequest("map", "maptheme");
      var srs = SendRequest("map", "srs");
      var bbox = SendRequest("map", "bbox");
      var scale = SendRequest("map", "scale");

      var printOrderUrl = "../" + m_printComponent + "/" + m_printOrderForm + "?knr=" + _currentMunicipality + "&selectedGroups=" + selectedGroups + "&selectedLayers=" + selectedLayers + "&mapTheme=" + mapTheme + "&srs=" + srs + "&bbox=" + bbox + "&scale=" + scale;

      printPreviewWindow = window.open(printOrderUrl, "Utskriftbestilling", "Width=650,Height=670,Scrollbars=Yes,Status");
      printPreviewWindow.focus();
      break;

  case "print":
    var printWindowUrl = "../" + m_printComponent + "/" + m_printForm + "?knr=" + _currentMunicipality; 
    printWindow = window.open(printWindowUrl, "Utskrift", "Width=690,Height=670,Scrollbars=Yes,status");
	  printWindow.focus();
	  break;

  case "copy":
    var selectedGroups = escape(SendRequest("legendFrame", "selectedGroups"));
		var selectedLayers = escape(SendRequest("legendFrame", "selectedLayers"));
		
		if( _west == 0 && _east == 0 ) //Check if a broadcast has been sent.
		{
			var bbox = SendRequest("map","bbox");
			if(bbox && bbox != "")
				UpdateObserver("MapLoaded", bbox);
		}
		//var scale = SendRequest("map", "scale");
		
		var copyWindowUrl = "../CopyToClipboardComponent/CopyForm.aspx?selectedGroups=" + selectedGroups + "&selectedLayers=" + selectedLayers + "&theme=" + _theme + "&bbox=" + _west + ";" + _south + ";" + _east + ";" + _north + ";" + _srs + ";" + _width + ";" + _height + ";" + _scale;
    copyWindow = window.open(copyWindowUrl, "Kopier", "Width=690,Height=710,Scrollbars=Yes,status,resizable");
	  copyWindow.focus();
    break;
    
  case "url":
			displayBookmarkForm();
    break;
    
  case "help":
    if (m_helpUrl)
    {
      helpWindow = window.open(m_helpUrl, "Hjelp");
	    helpWindow.focus();
	  }
    break;

  case "email":
    displayEMailForm();          
    break;

  case "zoom":
	  SendMessage( "map", "setFormState", formState.ZOOM );
    break;

  case "pan":
	  SendMessage( "map", "setFormState", formState.PAN );
    break;

  case "info":
	  SendMessage( "map", "setFormState", formState.INFO );
    break;
  
	case "infoEstate":
    SendMessage( "map", "setFormState", formState.INFOESTATE );
    break;
  
  case "infoLine":
		SendMessage( "map", "setFormState", formState.INFOLINE );          
    break;

  case "infoRect":
		SendMessage( "map", "setFormState", formState.INFORECT );          
    break;

  case "measPath":
	  SendMessage( "map", "setFormState", formState.MEASPATH );
    break;

  case "measArea":
	  SendMessage( "map", "setFormState", formState.MEASAREA );
    break;
    
  case "draw":
	  SendMessage( "map", "setFormState", formState.DRAWMODE );
    break;
    
  case "getMap":
    SendMessage( "map", "reload", null );
    break;
    
  case "zoomToScale":
		doCallPlugin(actionValue, parameterValue);
		break;
		
	case "forward":	
	case "back":
		SendMessage("map", actionValue, actionValue);
		break;
		
	case "3D":
		var mno = _currentMunicipality;
		if (mno==null||mno=="")
		{
			mno="DEFAULT";
		}
		var mnoList = mno.split(',');
		if (mnoList.length>1)
		{
			mno = "DEFAULT";
		}
		
		var vgDataset = 'http://www.virtual-globe.info/norge-globe-features.vgml'
		var vgCoordinates = '10.857145776654992,59.92802173744468';
		var vgHeight = '10000';
		if (virtualGlobeDatasets!=null&&virtualGlobeDatasets[mno]!=null)
		{
			vgDataset = virtualGlobeDatasets[mno];
		}
		
		if (virtualGlobeLatLonCoordinates!=null&& virtualGlobeLatLonCoordinates[mno]!=null)
		{
			vgCoordinates = virtualGlobeLatLonCoordinates[mno];
		}
		
		if (virtualGlobeStartHeights!=null&&virtualGlobeStartHeights[mno]!=null)
		{
			vgHeight = virtualGlobeStartHeights[mno];
		}
		
		var vgUrl = m_virtualGlobeStarter + "?dataset=" + vgDataset + "&lookat=" + vgCoordinates + "," + vgHeight + "&libs=Xj3D"
		window.open(vgUrl);
		break;

  case "infoland":
    var mno = _currentMunicipality;
    if (mno == null || mno == "") {
      mno = "DEFAULT";
    }
    var mnoList = mno.split(',');
    if (mnoList.length > 1) {
      mno = "DEFAULT";
    }

    if (infolandServiceTorgUrls != null && infolandServiceTorgUrls[mno] != null) {
      window.open(infolandServiceTorgUrls[mno]);
    }
    else {
      alert("Ingen INFOLAND URL er konfigurert for kommune " + mno);
    }
    break;

  case "obliquePhoto":
    SendMessage("map", "setFormState", formState.OBLIQUEPHOTO);
    break;

  default:
	  //var srs   = document.ToolbarForm.selectSRS.value;
	  alert("Ikke kall doSubmit..");
	  parent.doSubmit(actionValue,parameterValue);
	}
}

//-----------------------------------------------------------------------------
function removeOperaLink()
{
	var operaLink = getObject("operaLink");
	var children = operaLink.childNodes;
	for (var i = children.length - 1; i >= 0; i--)
	{
		operaLink.removeChild(children[i]);
	}
	
}
//-----------------------------------------------------------------------------
// doSelectScale()
//-----------------------------------------------------------------------------
function doSelectScale()
{
	var scale = document.ToolbarForm.selectScale.value;
	if (scale != null && scale != "" && scale != "null")
	{
    document.ToolbarForm.selectScale.value = "null";
	  if (scale == "0")
	  {
      scale = prompt("Skriv inn m\u00e5lestokk","");
      if (scale == null || scale == "0")
      {
				// Cancel
				var mapScale = SendRequest("map", "scale");
				getObject("selectScale").value = mapScale;
				return;
		}
      var lio = scale.lastIndexOf(":");
      if (lio > -1) {
        scale = scale.slice(lio+1);
      }
      var s = parseInt(scale);
      if (isNaN(s) || s < _minScale)
      {
        alert("M\u00e5lestokktallet m\u00e5 v\u00e6re st\u00f8rre enn eller lik 1:" + _minScale);
        return;
      }
      else if (isNaN(s) || (s > _maxScale && _maxScale > 0.0))
      {
        alert("M\u00e5lestokktallet m\u00e5 v\u00e6re mindre enn eller lik 1:" + _maxScale);
        return;
      }
      scale = s;
	  }
	  
	  doSubmit("zoomToScale",scale);
		return;
	}
}


//-----------------------------------------------------------------------------
// Performs a submit to trigger refresh of toolbar/combo states
//-----------------------------------------------------------------------------
function setHistoryState(forward, backward)
{
  if( _DEBUG && _DEBUG == true )
  {          
    alert("ToolbarFrame->setHistoryState: " + forward + ", " + backward);
  }
  if (forward)
  {
    changeObjectDisplay("enabledForwardButton","inline");
    changeObjectDisplay("disabledForwardButton","none");
  }
  else
  {
    changeObjectDisplay("enabledForwardButton","none");
    changeObjectDisplay("disabledForwardButton","inline");
  }
  
  if (backward)
  {
    changeObjectDisplay("enabledBackButton","inline");
    changeObjectDisplay("disabledBackButton","none");
  }
  else
  {
    changeObjectDisplay("enabledBackButton","none");
    changeObjectDisplay("disabledBackButton","inline");
  }
}

//-----------------------------------------------------------------------------
// Set toolbarState change, or submits form for non-toolbarState changing actions
//-----------------------------------------------------------------------------
function setTBFormState(s)
{
  if (Number(_state) != Number(s))
  {
    switch(Number(_state))
    {
    case formState.ZOOM:
      changeObjectDisplay("zoomButton","inline");
      changeObjectDisplay("zoomStateButton","none");
      onMouseOver('bZoom');
      break;    
      
    case formState.PAN:
      changeObjectDisplay("panButton","inline");
      changeObjectDisplay("panStateButton","none");
      onMouseOver('bPan');
      break;    
      
    case formState.INFO:
      changeObjectDisplay("infoButton","inline");
      changeObjectDisplay("infoStateButton","none");
      onMouseOver('bInfo');
      break; 
          
    case formState.INFOESTATE:
        changeObjectDisplay("infoButtonEstate","inline");
        changeObjectDisplay("infoStateButtonEstate","none");
        onMouseOver('bInfoEstate');
        break;           
  
    case formState.INFOLINE:
      changeObjectDisplay("infoLineButton","inline");
      changeObjectDisplay("infoLineStateButton","none");
      onMouseOver('bInfoLine');
      break;    
      
    case formState.INFORECT:
      changeObjectDisplay("infoRectButton","inline");
      changeObjectDisplay("infoRectStateButton","none");
      onMouseOver('bInfoRect');
      break;
      
    case formState.MEASPATH:
      changeObjectDisplay("measPathButton","inline");
      changeObjectDisplay("measPathStateButton","none");
      onMouseOver('bMeasPath');
      break;    
      
    case formState.MEASAREA:
      changeObjectDisplay("measAreaButton","inline");
      changeObjectDisplay("measAreaStateButton","none");
      onMouseOver('bMeasArea');
      break;    
      
		case formState.DRAWMODE:
		case formState.DRAWLINE:
		case formState.DRAWRECT:
		case formState.DRAWCIRCLE:
		case formState.DRAWELLIPSE:
		case formState.DRAWPATH:
		case formState.DRAWPOLY:
		case formState.DRAWTEXT:
		case formState.DRAWDELETE:
			changeObjectDisplay("drawButton","inline");
			changeObjectDisplay("drawStateButton","none");
			onMouseOver('bDraw');
			break;

	  case formState.OBLIQUEPHOTO:
	    changeObjectDisplay("obliqePhotoButtonDiv", "inline");
	    changeObjectDisplay("obliqePhotoStateButtonDiv", "none");
	    break;    
    }
    onMouseOut();
  }
  switch(Number(s))
  {
    case formState.ZOOM:
      changeObjectDisplay("zoomButton","none");
      changeObjectDisplay("zoomStateButton","inline");
      break;    
      
    case formState.PAN:
      changeObjectDisplay("panButton","none");
      changeObjectDisplay("panStateButton","inline");
      break;    
      
    case formState.INFO:
			if (Number(_state) != Number(s))
			{
				var message = "<table class=\"infoTable\">\n";
				message += "  <tbody>\n";
				message += "    <tr>\n";
				message += "      <th  class=\"infoTableTitle\"colspan='2'>INFORMASJON OM KARTOBJEKTER<\/th>\n";
				message += "    <\/tr>\n";
				message	+= "    <tr><td>Klikk p\u00e5 objekt i kart for \u00e5 hente informasjon.<\/td><\/tr>"
				message	+= "    <\/tbody><\/table>";
					SendMessage( "infoFrame", "showInformation",message);  
				}
      changeObjectDisplay("infoButton","none");
      changeObjectDisplay("infoStateButton","inline");
      break;  
      
    case formState.INFOESTATE:
      if (Number(_state) != Number(s))
			{
				var message = "<table class=\"infoTable\">\n";
				message += "  <tbody>\n";
				message += "    <tr>\n";
				message += "      <th  class=\"infoTableTitle\"colspan='2'>INFORMASJON OM EIENDOM<\/th>\n";
				message += "    <\/tr>\n";
				message	+= "    <tr><td>Klikk p\u00e5 eiendom i kart for \u00e5 hente informasjon.<\/td><\/tr>"
				message	+= "    <\/tbody><\/table>";
					SendMessage( "infoFrame", "showInformation",message);  
				}
      changeObjectDisplay("infoButtonEstate","none");
      changeObjectDisplay("infoStateButtonEstate","inline");
      break;    
      
    case formState.INFOLINE:
			if (Number(_state) != Number(s))
			{
				var message = "<table class=\"infoTable\">\n";
				message += "  <tbody>\n";
				message += "    <tr>\n";
				message += "      <th  class=\"infoTableTitle\"colspan='2'>INFORMASJON OM KARTOBJEKTER UNDER LINJE<\/th>\n";
				message += "    <\/tr>\n";
				if (isMac())
				{
					message	+= "    <tr><td>Klikk musknappen for \u00e5 starte linjen.<\/td><\/tr>"
					message	+= "    <tr><td>Klikk musknappen for \u00e5 lage knekkpunkt.<\/td><\/tr>"
					message	+= "    <tr><td>Dobbel-klikk musknappen for \u00e5 avslutte.<\/td><\/tr>"
				}
				else
				{
					message	+= "    <tr><td>Klikk venstre musknapp for \u00e5 starte linjen.<\/td><\/tr>"
					message	+= "    <tr><td>Klikk venstre musknapp for \u00e5 lage knekkpunkt.<\/td><\/tr>"
					message	+= "    <tr><td>Dobbel-klikk venstre musknapp for \u00e5 avslutte.<\/td><\/tr>"
				}
				message	+= "    <\/tbody><\/table>";
				SendMessage('infoFrame', 'showInformation',message);
			}
      changeObjectDisplay("infoLineButton","none");
      changeObjectDisplay("infoLineStateButton","inline");
      break;    
      
    case formState.INFORECT:
			if (Number(_state) != Number(s))
			{
				var message = "<table class=\"infoTable\">\n";
				message += "  <tbody>\n";
				message += "    <tr>\n";
				message += "      <th  class=\"infoTableTitle\"colspan='2'>INFORMASJON OM KARTOBJEKTER INNENFOR REKTANGEL<\/th>\n";
				message += "    <\/tr>\n";
				
				if (isMac())
				{
					message	+= "    <tr><td>Klikk og hold musknappen nede mens du trekker ut rektangel.<\/td><\/tr>"
					message	+= "    <tr><td>Slipp musknappen for \u00e5 avslutte.<\/td><\/tr>"
				}
				else
				{
					message	+= "    <tr><td>Klikk og hold venstre musknapp nede mens du trekker ut rektangel.<\/td><\/tr>"
					message	+= "    <tr><td>Slipp venstre musknapp for \u00e5 avslutte.<\/td><\/tr>"
				}
				message	+= "    <\/tbody><\/table>";
				
				SendMessage('infoFrame', 'showInformation',message );
      }
      changeObjectDisplay("infoRectButton","none");
      changeObjectDisplay("infoRectStateButton","inline");
      
      break;   
      
    case formState.MEASPATH:
			if (Number(_state) != Number(s))
			{
				var message = "<table class=\"infoTable\">\n";
				message += "  <tbody>\n";
				message += "    <tr>\n";
				message += "      <th  class=\"infoTableTitle\"colspan='2'>AVSTANDSM\u00c5LING<\/th>\n";
				message += "    <\/tr>\n";
				message	+= "    <tr><td>Klikk for &aring; begynne m&aring;lingen.<\/td><\/tr>"
				message	+= "    <tr><td>Klikk for &aring; lage knekkpunkt.<\/td><\/tr>"
				message	+= "    <tr><td>Dobbel-klikk for &aring; avslutte m&aring;lingen.<\/td><\/tr>"
				message	+= "    <\/tbody><\/table>";
				
					SendMessage('infoFrame', 'showInformation', message);
				}
      changeObjectDisplay("measPathButton","none");
      changeObjectDisplay("measPathStateButton","inline");
                
      break;    
      
    case formState.MEASAREA:
			if (Number(_state) != Number(s))
			{
				var message = "<table class=\"infoTable\">\n";
				message += "  <tbody>\n";
				message += "    <tr>\n";
				message += "      <th  class=\"infoTableTitle\"colspan='2'>AREALM\u00c5LING<\/th>\n";
				message += "    <\/tr>\n";
				message	+= "    <tr><td>Klikk for &aring; begynne m&aring;lingen.<\/td><\/tr>"
				message	+= "    <tr><td>Klikk for &aring; lage knekkpunkt.<\/td><\/tr>"
				message	+= "    <tr><td>Dobbel-klikk for &aring; avslutte m&aring;lingen.<\/td><\/tr>"
				message	+= "    <\/tbody><\/table>";
				
					SendMessage('infoFrame', 'showInformation', message);
				}
      changeObjectDisplay("measAreaButton","none");
      changeObjectDisplay("measAreaStateButton","inline");
      break;    
              
    case formState.DRAWMODE:
    case formState.DRAWCIRCLE:
    case formState.DRAWELLIPSE:
    case formState.DRAWPATH:
    case formState.DRAWLINE:
    case formState.DRAWRECT:
    case formState.DRAWPOLY:
    case formState.DRAWTEXT:
    case formState.DRAWDELETE:
			if (Number(_state) != Number(s))
			{
				var message = "<table class=\"infoTable\">\n";
				message += "  <tbody>\n";
				message += "    <tr>\n";
				message += "      <th  class=\"infoTableTitle\"colspan='2'>P\u00c5TEGNINGSMODUS<\/th>\n";
				message += "    <\/tr>\n";
				message	+= "    <tr><td>Velg tegnefunksjon i paletten i kartvinduet<\/td><\/tr>"
				message	+= "    <\/tbody><\/table>";
				
				SendMessage('infoFrame', 'showInformation',  message );
			}
      changeObjectDisplay("drawButton","none");
      changeObjectDisplay("drawStateButton","inline");
      onMouseOver('bDraw');
      break;
    case formState.OBLIQUEPHOTO:
      changeObjectDisplay("obliqePhotoButtonDiv", "none");
      changeObjectDisplay("obliqePhotoStateButtonDiv", "inline");
      break;    
      
  }
  _state = s;
  
  var mapState = getObject("mapState");
  if( mapState )
		mapState.value = _state;
}

//-----------------------------------------------------------------------------
// Set toolbarState change, or submits form for non-toolbarState changing actions
//-----------------------------------------------------------------------------
function getFormState()
{ 
  return _state;
}
      
//-----------------------------------------------------------------------------
// displayBookmarkForm()
//-----------------------------------------------------------------------------
function displayBookmarkForm()
{
  var mapForm		= SendRequest("#root", "parentPage");
	var bbox			= SendRequest("map", "bbox");
  var mapTheme	= SendRequest("map", "maptheme");
  
  var bookmarkWindowUrl = "BookmarkForm.aspx?mapForm=" + mapForm + "&mapTheme=" + mapTheme + "&bbox=" + bbox; 
	bookmarkWindow = window.open(bookmarkWindowUrl, "Bokmerke", "Width=600,Height=175,Scrollbars=Yes,status,resizable");
	bookmarkWindow.focus();
}

//-----------------------------------------------------------------------------
function getMapUrl()
{
  var mapForm		= SendRequest("#root", "parentPage");
	var bbox			= SendRequest("map", "bbox");
  var mapTheme	= SendRequest("map", "maptheme");
  var west      = 0;
  var east      = 0;
  var south     = 0;
  var north     = 0;
  var srs       = "";
  var scale     = 0;
	var url = m_applicationUrl + "/" + mapForm;
  
	var bb = bbox.split(';');
	if (bb.length > 1)
	{
		west	= bb[0];
		south = bb[1];
		east	= bb[2];
		north = bb[3];
		srs   = bb[4];
		// width = bb[5];
		// height = bb[6];
		scale = bb[7];
		
		var x     = north - ((north - south) / 2);
		var y     = east - ((east - west) / 2);
		
		url = m_applicationUrl + "/" + mapForm  + "?srs=" + srs + "&x=" + x + "&y=" + y + "&scale=" + scale + "&mapTheme=" + mapTheme;
  }
	return url;	
}


//-----------------------------------------------------------------------------
// displayEMailForm()
//-----------------------------------------------------------------------------
function displayEMailForm()
{
  var mapForm		= SendRequest("#root", "parentPage");
	var bbox			= SendRequest("map", "bbox");
  var mapTheme	= SendRequest("map", "maptheme");
  var _currentMunicipality	= SendRequest("map", "municipality");
  
	/*
  var maplayers = SendRequest("map", "maplayers");
  var maplayers_string = "";
            
  try
  {
    for( var i=0; i<maplayers.length; i++ )
    {
      if( maplayers_string != "" )
      {
        maplayers_string += "*";
      }
    
      maplayers_string += escape(maplayers[i].$url);
    }
  }
  catch(ex)
  {
    if( _DEBUG && _DEBUG == true )
    {
      alert("Exception thrown while traversing maplayers array. " + ex.message); 
    }
  }
  */
  if( _DEBUG && _DEBUG == true )
  {          
    alert("FrameToolbar:doSubmit -> opening EmailForm.aspx?bbox=" + bbox + "&maplayers=" + maplayers_string);
  }

  var emailWindowUrl = "EmailForm.aspx?mapForm=" + mapForm + "&knr=" + _currentMunicipality + "&mapTheme=" + mapTheme + "&bbox=" + bbox; /* + "&mapLayers=" + maplayers_string; */
	emailWindow = window.open(emailWindowUrl, "Email", "Width=550,Height=500,Scrollbars=Yes,Statusbar=ON");
	emailWindow.focus();
}

//-----------------------------------------------------------------------------
function createScaleOptions(currentScale)
{
	var writtenCurrent = false;
	//Write scale items
	try
	{
		var selectScale = getObject("selectScale");
		selectScale.innerHTML = "";
		
		var option = createOption(0, "Skriv inn m\u00e5lestokk");
		selectScale.appendChild(option);							
				
		option = createOption(_minScale, "1:" + _minScale);
		selectScale.appendChild(option);
	
		for(var i=0; i<_scaleThresholds.length; i++)
		{
			if( _scaleThresholds[i] > _minScale &&
				_scaleThresholds[i] < _maxScale )
			{							
				option = createOption(_scaleThresholds[i], "1:" + _scaleThresholds[i]);
				selectScale.appendChild(option);
				
				if( currentScale > _scaleThresholds[i]
					&& ((_scaleThresholds.length == (i+1))
					|| ((_scaleThresholds[i+1] > currentScale)) && writtenCurrent == false) )
				{
					option = createOption(currentScale, "1:" + currentScale);
					selectScale.appendChild(option);
					
					writtenCurrent = true;								
				}
			}
		}
		
		option = createOption(_maxScale, "1:" + _maxScale);
		selectScale.appendChild(option);			
		
		setTimeout("getObject('selectScale').value=" + currentScale + ";", 50);
	}
	catch(e)
	{
		alert("En feil oppstod under opprettelse av m\u00e5lestokkvalg p\u00e5 menylinje.");
	}
	
}

//-----------------------------------------------------------------------------
function createOption(attValue, content)
{
	var option = document.createElement("option");
	option.setAttribute("value",attValue);
	option.innerHTML = content;

	return option;				
}

//-----------------------------------------------------------------------------
// doCallPlugin()
//-----------------------------------------------------------------------------
function doCallPlugin(action, parameterValue)
{
  var functionXml = '<functions>';
  switch (action)
  {
    case 'zoomOut2':
    case 'zoomOut5':            
      functionXml += '<zoomToFactor><factor>';
      switch(action)
      {
        case 'zoomOut2':
          functionXml += '2';
          break;
        case 'zoomOut5':
          functionXml += '5';
          break;  
        default:
          return;     
      }
      functionXml += '<\/factor><\/zoomToFactor>';                           
      break;
    case 'zoomAll':
      functionXml += '<zoomAllTheme><theme>' + _theme + '<\/theme><\/zoomAllTheme>';      
      break;
    case 'zoomToScale':
			functionXml += '<zoomToScale><scale>' + parameterValue + '<\/scale><\/zoomToScale>';      
			break;
  }
  functionXml += '<\/functions>';
    
  if (SendMessage)
  {
    SendMessage( "map", "functionxml", functionXml );
  }
}

//-----------------------------------------------------------------------------
// DoAction()
//-----------------------------------------------------------------------------
function DoAction( command, value )
{
  try
  {
	  switch(command)
	  {
		  case "history":
			  setHistoryState(value.hasForward, value.hasPrevious);
			  break;

			case "printPreview":
			  doSubmit("printPreview", "");
			  break;
			  
			case "showObliquePhoto":
			  var _currentMunicipality = SendRequest("map", "municipality");
			  var mno = _currentMunicipality;
			  if (mno == null || mno == "") {
			    mno = "DEFAULT";
			  }
			  var mnoList = mno.split(',');
			  if (mnoList.length > 1) {
			    mno = "DEFAULT";
			  }

			  if (obliquePhotoServiceUrls != null && obliquePhotoServiceUrls[mno] != null) {
			    var obliquePhotoServiceUrl = obliquePhotoServiceUrls[mno] + "?x=" + value.x + "&y=" + value.y
			    var servicesWin = window.open(obliquePhotoServiceUrl, "Skr\u00e5foto", "Width=960,Height=630,Scrollbars=Yes,status,resizable");
			    servicesWin.focus();
			  }
	}
	}
	catch(ex)
	{
	  alert("FrameToolbar->DoAction - Exception:\n" + exception);
	}
}

//-----------------------------------------------------------------------------
// Request()
//-----------------------------------------------------------------------------
function Request(message) {
  try {
    switch (message) {
      case "tooltipEnabled":
        var cb = $("cbShowInfoBox");
        if (cb) {
          return cb.checked;
        }
        else {
          return true;
        }
        break;
      case "tooltipCheckboxExists":
        var cb = $("cbShowInfoBox");
        if (cb) return true;
        else    return false;
        break;
    }
  }
  catch (e) {
    alert("FrameToolbar->Request - Exception:\n" + e.message);
  }
  return false;
}

//-----------------------------------------------------------------------------
// UpdateObserver()
//-----------------------------------------------------------------------------
function UpdateObserver(message, value) {
  switch (message) {
    case "FormState":
      setTBFormState(value);
      break;

    case "MapLoaded":
      try {
        var bbox = value.split(";");

        _west = bbox[0];
        _south = bbox[1];
        _east = bbox[2];
        _north = bbox[3];
        _srs = bbox[4];
        _width = bbox[5];
        _height = bbox[6];

        try {
          var minScale = parseFloat(bbox[10]);
          var maxScale = parseFloat(bbox[11]);

          if (minScale != _minScale || maxScale != _maxScale || _scale != bbox[7]) {
            _minScale = minScale;
            _maxScale = maxScale;
            createScaleOptions(bbox[7]);
          }
        }
        catch (e) {
          alert("Data broadcasted from mapwindow is missing min and maxscale." + e.message);
        }

        _scale = bbox[7];
        _theme = bbox[8];

        try {
          var s = bbox[9];
          setTBFormState(s);
        }
        catch (e) {
          alert("Data broadcasted from mapwindow not sufficient. Update MapComponent.");
        }
      }
      catch (ex) {
      }
      break;
    case "municipalityChanged": 			// Change municipality on change in map
    case "municipalityChoiceChanged": // Change municipality on change in combos
      _currentMunicipality = value;
      break;
  }
}

