﻿// avansert kart

var ddTimeDropDown = null;
var btnNextTime = null;
var btnPrevTime = null;
var divMapCtrlContainer = null;

// JScript File

var vpmsParams = null;


function RetrieveHtmlControls() {
  divMapCtrlContainer = $('#mapTimeControls');
  ddTimeDropDown = $('#ddSelectMapTime');
  btnPrevTime = $('#btnPrev');
  btnNextTime = $('#btnNext');
}
    

function vpms_init(params){
    vpmsParams = params;
    
    window.Metno = {};
    //Metno.wms = "http://webcache.oslo.dnmi.no/cgi-bin/mapserv?map=../vhosts/verportal/conf/verportal.map&";
    Metno.wms = "http://webcache.oslo.dnmi.no/verportal/verportal.map?";
    Metno.obs = "http://wms.met.no/ekstremwms?";
    Metno.maxExt = new OpenLayers.Bounds(-20014.0868, -20014.0868, 20016.0868, 20016.0868);
  
    Metno.basemap = new OpenLayers.Layer.WMS("Bakgrunnskart", Metno.wms,
                    {
                        layers: "background",                        
                        format: "image/png",
                        exceptions: "application/vnd.ogc.se_xml"
                    },
                    {
                        maxExtent: Metno.maxExt,
                        buffer: 1,
                        isBaseLayer: true
                    }
                );

    
    Metno.map = new OpenLayers.Map('map',
                    {
                        projection: "EPSG:41000",
                        units: "km",
                        maxExtent: Metno.maxExt,
                        minScale: 221623746.555118,//128000000,
                        maxZoomLevel: 18,                        
                        controls: [new OpenLayers.Control.PanZoomBar(),
                        
                        new OpenLayers.Control.MouseDefaults()
                        ],
                        tileSize: new OpenLayers.Size(512, 512)
                    }
                );
                
    Metno.map.addLayer(Metno.basemap);
    Metno.coords = document.getElementById("coords");
    Metno.map.setCenter(new OpenLayers.LonLat(vpmsParams.lon, vpmsParams.lat), 5);
    RetrieveHtmlControls();   
    setDimensions();
    
    OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;
} // vpms_init()


function setTime(xtime) {
  var layers = getLayers();
  var layerlist = ["background", layers.join(","), "coastlines"].join(",");
  //var layerlist = ["background", layers.join(","), "coastlines", "placenames"].join(",");
  Metno.basemap.mergeNewParams({"layers" : layerlist,
                                 "time"   : xtime});
  configureTimeControl();    
}


function addCheckedLayers() {
  var layers = getLayers();
  var numlayers = layers.length;
  for (var i=0; i<numlayers; i++) {
    Metno.layers[layers[i]].setVisibility(true);
  }
}


/*function switchLayer (el, layer, time) {   
  setDimensions();
}*/


function configureTimeControl() {
  if (ddTimeDropDown.children().length > 1) {
    showElement(ddTimeDropDown);
  } else {
    hideElement(ddTimeDropDown);
    hideElement(btnNextTime);
    hideElement(btnPrevTime);
    divMapCtrlContainer.InnerText = "Velg en visning";
    return true;
  }
  
  if(ddTimeDropDown.selectedIndex == 0) {
      hideElement(btnNextTime);
  } else {
      showElement(btnNextTime);
  }
  
  if((ddTimeDropDown.selectedIndex+1) == ddTimeDropDown.length) {
    hideElement(btnPrevTime);
  } else {
    showElement(btnPrevTime);
  }
} // configureTimeControl()


function setDimensions(time, level) {
  var layers = getLayers();
  var numlayers = layers.length;
  var args = [];
  
  for (var i=0; i<numlayers; i++) {
    args.push('layers=' + layers[i]);
  }
  
  if (args.length == 0) {
    //ddTimeDropDown.options.length = 0;
    configureTimeControl();
    return true;
  }
  
  //Proxy må til for uthenting via XMLHttpReq.
  if (!Boolean(time)) {
    time = ddTimeDropDown.value || '';// || parent.map.myMap.time;
  }

  args.push('date=' + time);
  args.push('timezone='+vpmsParams.timezone);
  args.push('format=%a. %e. %b %H.%M');
  args.push('locale=nb');
  
  uri = vpmsParams.getdimensionsuri+'?'+ args.join(';');
  $.ajax({ 
    url: uri, 
    success: updateDimensions
   });
} //  setDimensions(time, level)


function updateDimensions(text) {
  try {
    var data = eval('(' + text + ')');
  } catch(e) {
    return;
  }
  if (getLayers().length != 0) {
    setOptions(ddTimeDropDown,  data.time.values,  data.time.selected);	    
  } 
  
  setTime(ddTimeDropDown.val());
  configureTimeControl();
 
  return true;
}


function getLayers() {
  var myLayers = [];
  var lag = $('.map-navigator input::checked')
    .map(function(i, v) { return v.name; }).get();
  return lag;
}


function setOptions (select, data, selectedindex) {
  select.empty();
  $.each(data, function(i, v) {
    var cls = (v.all) ? " class='layers_all'" : "";
    select.append("<option value='" + v.value + "'" + cls + ">" 
      + v.title + "</option>");
  });
  select.css("visibility", "visible");
  //select.selectedIndex = selectedindex;
  select.each(function (i, s) { s.selectedIndex = selectedindex });
}


function prevDate() {
  var timeselect = document.getElementById('mapControls').time;
  if (timeselect == null) return;
  if (timeselect.options.length == 0) return;
  if (timeselect.selectedIndex == timeselect.options.length - 1) return;

  timeselect.selectedIndex = timeselect.selectedIndex + 1;
  setTime(timeselect.value);
}


function nextDate() {
  //var timeselect = ddTimeDropDown;
  var timeselect = document.getElementById('mapControls').time;
  if (timeselect == null || timeselect.options.length == 0 || timeselect.selectedIndex == 0) 
    return;
  timeselect.selectedIndex = timeselect.selectedIndex - 1;
  setTime(timeselect.value);
}



function showElement(element) {
  element.css("display", "block");
}

function hideElement(element) {
  element.css("display", "none");
}


/*
function showElementById(elementId) {
  showElement(document.getElementById(elementId))
}


function hideElementById(elementId) {
  hideElement(document.getElementById(elementId));
}


function showElement(element) {
  element.style.visibility = "visible";
}

function hideElement(element) {
  element.style.visibility = "hidden";
}
*/
