// Global variabels
var sftkart_startX;
var sftkart_startY;
var sftkart_mapMouseX;
var sftkart_mapMouseY;
var sftkart_pageMouseX;
var sftkart_pageMouseY;
var sftkart_mapOrgX;
var sftkart_mapOrgY;
var sftkart_rubberBand = null;
var sftkart_zoomingIn = false;
var sftkart_zoomingOut = false;
var sftkart_panning = false;
var sftkart_indentifying = false;
var sftkart_toolObj;
var sftkart_canFormSubmit = false;
var sftkart_isBlinking = false;
var sftkart_isLoading = false;
var sftkart_bTocShowLayerMeta = false;
var sftkart_mouseIcon = '';
	
//***************************************
// Functions for opening various windows
//***************************************

function ShowLayerMetaWindow(url) {
	window.open(url);
	sftkart_bTocShowLayerMeta = true;
}

function ShowPrint() {
	var layers = getElement(sftkartLayersField).value;
	var url = getElement(sftkartMapImage).src;
	var language = getElement(sftkartLanguageField).value;
	var basePath = getElement(sftkartBasePathField).value;
	var isArctic = getElement('arctic').value;

	// 20.04.2006 LHK lagt til mulighet for større kart
	var largemap = getElement(sftkartLargeMapField).value;
	var extent = getElement(sftkartExtentField).value;	
	var detailedmap = getElement(sftkartUseDetailedMap).checked;	
	// 20.04.2006 LHK lagt til mulighet for større kart: largemap    
	 OpenWin(basePath + 'print.aspx?mapurl='+url+'&extent='+extent+'&layers='+layers+'&lang='+language+'&largeMap='+largemap+'&detailedmap='+detailedmap+'&basepath='+basePath+'&isarctic='+isArctic, 'print', 600, 500, 100, 100);
}

function ShowIdentify(evt) {
	var layers = getElement(sftkartLayersField).value;
	var extent = getElement(sftkartExtentField).value;
	var language = getElement(sftkartLanguageField).value;
	var basePath = getElement(sftkartBasePathField).value;
		 
	// 18.04.2006 LHK lagt til mulighet for større kart
	var largemap = getElement(sftkartLargeMapField).value;
		 
	// Makes sure some layers are turned on
	if (layers.length > 0) {
		getMapMousePos(evt);
		var h = 400;
		var w = 350;
		var left = evt.screenX + 10; // - (w / 2);
		var top = evt.screenY - (h / 2); // - (h / 2);
	// 18.04.2006 LHK lagt til mulighet for større kart: largemap    
	OpenWin(basePath + 'identify.aspx?x='+sftkart_mapMouseX+'&y='+sftkart_mapMouseY+'&extent='+extent+'&layers='+layers+'&lang='+language+'&largeMap='+largemap+'&basepath='+basePath, 'identify', w, h, left, top);			
	} else {
		alert(sftkartAlertNoActiveLayersForInfo);
	}
}

function showHelp() {

	var basePath = getElement(sftkartBasePathField).value;

	//window.open('http://www.miljostatus.no/templates/themepage____4284.aspx');
	OpenWin(basePath + 'help/veiledning.htm', 'miljoatlashjelp', 700, 600, 100, 100);
}

function OpenWin(url, name, w, h, left, top) {
	var win = window.open(url, name, 'toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=yes,resizable=yes,width='+w+',height='+h+',top='+top+',left='+left);
	win.focus();
}

function FormSubmit() {
	document.forms[0].submit();
	ShowLoading();	
}

function AllowFormSubmit(allow) {
	sftkart_canFormSubmit = allow;
}

function checkFormSubmit() {
        //alert ("test");
    	if (document.getElementById("pagePrefix_Quicksearch2_searchText").value!="") return true;

	var searchText = getElement('pagePrefix_Quicksearch2_searchText').value;
	if (searchText != "")
		return sftkart_canFormSubmit;
		
	return sftkart_canFormSubmit;
}
	
function ShowLoading() {
	AllowFormSubmit(true);
	getLayerStyle('mapLoading').visibility = 'visible'; 
	StopRefreshMapBlinking();
	sftkart_isLoading = true;
}

//***************************************
// Functions for TOC, refresh map etc.
//***************************************

function StartRefreshMapBlinking() {
	if (!sftkart_isBlinking) {
		sftkart_isBlinking = true;
		BlinkRefreshMap();
	}
}

function BlinkRefreshMap() {
	var obj = getElement(sftkartRefreshMap);
	if (sftkart_isBlinking) {
		if (obj.className.indexOf('Flash') >= 0)
			obj.className = 'buttonRefreshMap';
		else
			obj.className = 'buttonRefreshMapFlash';
	
		window.setTimeout("BlinkRefreshMap()", 400);
	}
	else 
		obj.className = 'buttonRefreshMap';	
}

function StopRefreshMapBlinking() {
	sftkart_isBlinking = false;
}

function DetailedMapChecked() {
	StartRefreshMapBlinking();
}

function TocCheckChanged(node) {	
	StartRefreshMapBlinking();
}


function TocClearContent() {
	SFTKart1_treeviewTOC.UnCheckAll();
	SFTKart1_treeviewTOC.CollapseAll();
	SFTKart1_treeviewTOC.Render();
	StartRefreshMapBlinking();
}

//***************************************
// Functions for variuos mouse events
//***************************************
function panOnMouseOver(obj) {
	obj.src = obj.src.replace('_off.', '_on.');
	if (sftkart_zoomingIn) 
		stopZoomIn();
	else if (sftkart_panning) {
		stopPan();
		document.forms[0].submit();
	}
}

function panOnMouseOut(obj) {
	obj.src = obj.src.replace('_on.', '_off.');
}

function toolOnMouseOver(obj) {
	if (obj != sftkart_toolObj)
		obj.src = obj.src.replace('_1', '_2');
}

function toolOnMouseOut(obj) {
	if (obj != sftkart_toolObj)
		obj.src = obj.src.replace('_2', '_1');
}

function toolOnMouseDown(obj) {
	// checks if its print
	if (obj.id.indexOf('Print') > -1) {
		ShowPrint();
		return false;
	}
	
	if (obj.id.indexOf('Help') > -1) {
		showHelp();	
		return false;
	}
	
	if (sftkart_toolObj) {
		sftkart_toolObj.src = sftkart_toolObj.src.replace('_3', '_1');
	}
	obj.src = obj.src.replace('_1', '_2');
	obj.src = obj.src.replace('_2', '_3');
	sftkart_toolObj = obj;
	setActiveToolField(obj.id);
	//updateMapCursor(obj.id);
	updateMouseIcon(obj.id);
}

function setActiveToolField(toolid) {
	getElement(sftkartActivetoolField).value = toolid;
}

/*
function updateMapCursor(toolid) {
	var map = getLayerStyle(sftkartMapImage);
	if (toolid.indexOf('Zoom') > -1)
		map.cursor='crosshair';
	else if (toolid.indexOf('Pan') > -1)
		map.cursor='move';
	else if (toolid.indexOf('Identify') > -1)
		map.cursor='default';
}
*/

function updateMouseIcon(toolid) {
	var basePath = getElement(sftkartBasePathField).value;
	var mouseImage = getElement("mapMouseImage");
	//alert("updateMouseIcon");
	if (toolid.indexOf('ZoomIn') > -1)
		mouseImage.src = basePath + 'images/zoomin_mus.gif';
	else if (toolid.indexOf('ZoomOut') > -1)
		mouseImage.src = basePath + 'images/zoomout_mus.gif';
	else if (toolid.indexOf('Pan') > -1)
		mouseImage.src = basePath + 'images/pan_mus.gif';
	else if (toolid.indexOf('Identify') > -1)
		mouseImage.src = basePath + 'images/identify_mus.gif';
}

function rubberBandMouseMove(evt) {
	if (!document.all)
		mapMouseMove(evt);
}

//***************************************
// Functions for map mouse events
//***************************************	


function mapOnClick(evt) {
	return false;
}

function mapMouseDown(evt) {
	var toolid = getElement(sftkartActivetoolField).value;
	if (toolid.indexOf('ZoomIn') > -1)
		startZoomIn(evt);
	else if (toolid.indexOf('ZoomOut') > -1)
		startZoomOut(evt);
	else if (toolid.indexOf('Pan') > -1)
		startPan(evt);
	else if (toolid.indexOf('Identify') > -1)
		ShowIdentify(evt);
	return false;
}

function startZoomIn(evt) {
	getMapMousePos(evt);
	sftkart_startX = sftkart_mapMouseX;
	sftkart_startY = sftkart_mapMouseY;
	sftkart_rubberBand = getLayerStyle('mapRubberBand');
	sftkart_rubberBand.width = 0;
	sftkart_rubberBand.height = 0;
	sftkart_rubberBand.left = sftkart_startX;
	sftkart_rubberBand.top = sftkart_startY;
	sftkart_rubberBand.visibility = 'visible';
	sftkart_zoomingIn = true;
}

function startZoomOut(evt) {
	getMapMousePos(evt);
	sftkart_zoomingOut = true;
}

function startPan(evt) {
	getPageMousePos(evt);
	getMapMousePos(evt);
	sftkart_startX = sftkart_pageMouseX;
	sftkart_startY = sftkart_pageMouseY;						

	sftkart_mapOrgX = findObjX(sftkartMapImage);
	sftkart_mapOrgY = findObjY(sftkartMapImage);
	
	sftkart_panning = true;
}

function mapMouseMove(evt) {
	moveMouseIcon(evt);		
	if (sftkart_zoomingIn)
		moveZoom(evt);
	else if (sftkart_panning)
		movePan(evt);
}

function moveMouseIcon(e) {
	getMapMousePos(e);
	
	if (!((isNaN(sftkart_mapMouseX)) || (isNaN(sftkart_mapMouseY)))) {
		mouseImage = getLayerStyle('divMapMouseImage');
		mouseImage.visibility = 'visible';
		mouseImage.left = sftkart_mapMouseX;
		mouseImage.top = sftkart_mapMouseY;
	}
}

function moveZoom(evt) {
	getMapMousePos(evt);
	
	if ((isNaN(sftkart_mapMouseX)) || (isNaN(sftkart_mapMouseY))) {
		stopZoomIn();
		return;
	}
		
	var minX = (sftkart_startX <= sftkart_mapMouseX) ? sftkart_startX : sftkart_mapMouseX;
	var maxX = (sftkart_startX >= sftkart_mapMouseX) ? sftkart_startX : sftkart_mapMouseX;
	var minY = (sftkart_startY <= sftkart_mapMouseY) ? sftkart_startY : sftkart_mapMouseY;
	var maxY = (sftkart_startY >= sftkart_mapMouseY) ? sftkart_startY : sftkart_mapMouseY;
	
	sftkart_rubberBand.left = minX;
	sftkart_rubberBand.top  = minY;
	
	var newW = maxX - minX;
	var newH = maxY - minY;
	
	sftkart_rubberBand.width = newW;
	sftkart_rubberBand.height = newH;
}

function movePan(evt) {
	if ((sftkart_startX != null) && (sftkart_startY != null)) {
		getPageMousePos(evt);
					
		var deltaX = sftkart_pageMouseX - sftkart_startX;
		var deltaY = sftkart_pageMouseY - sftkart_startY;
			
		var mi = getLayerStyle(sftkartMapImage);
		mi.left = deltaX; 
		mi.top = deltaY; 
	}
}

function mapMouseUp(evt) {
	if (sftkart_zoomingIn) {
		stopZoomIn();
	}
	else if (sftkart_zoomingOut) {
		stopZoomOut();
	}	
	else if (sftkart_panning) {
		stopPan();
	}
	sftkart_startX = null;
	sftkart_startY = null;
	mouseX = null;
	mouseY = null;
}

function stopZoomIn() {	
	sftkart_rubberBand.visibility = 'hidden';
	
	//converts to map pixels
	var minX = parseInt(sftkart_rubberBand.left);					
	var maxX = minX + parseInt(sftkart_rubberBand.width);
	var minY = parseInt(sftkart_rubberBand.top);
	var maxY = minY + parseInt(sftkart_rubberBand.height);
								
	//checks if it is a point or rectangle
	if (((maxX - minX) > 10) && ((maxY - minY) > 10))
		eval('document.forms[0].'+sftkartPixelField).value = minX+'@'+minY+'@'+maxX+'@'+maxY;
	else
		eval('document.forms[0].'+sftkartPixelField).value = minX+'@'+minY;	
	
	FormSubmit();
		
	sftkart_rubberBand = null;
	sftkart_zoomingIn = false;
}

function stopZoomOut() {	
	eval('document.forms[0].'+sftkartPixelField).value = sftkart_mapMouseX+'@'+sftkart_mapMouseY;	
	FormSubmit();
	sftkart_zoomingOut = false;
}

function stopPan() {		
	var deltaX = Math.abs(sftkart_pageMouseX - sftkart_startX);
	var deltaY = Math.abs(sftkart_pageMouseY - sftkart_startY);
	//checks if it was a click or drag
	if ((deltaX <= 5) || (deltaY <= 5))
		eval('document.forms[0].'+sftkartPixelField).value = sftkart_mapMouseX+'@'+sftkart_mapMouseY;	
	else
		eval('document.forms[0].'+sftkartPixelField).value = sftkart_startX+'@'+sftkart_startY+'@'+sftkart_pageMouseX+'@'+sftkart_pageMouseY;	

	FormSubmit();
	sftkart_panning = false;
}

function mapMouseOut(evt) {
	//hides the map cursor image
	mouseImage = getLayerStyle('divMapMouseImage');
	mouseImage.visibility = 'hidden';
}

//***************************************
// Functions for populating area dropdown
//***************************************

function AddRegionsToAreaList() {
 	var x;
 	var ddlArea = getElement('SFTKart1_ddlArea');
 	var chooseRegion = sftkartAreaSearchDDLChooseRegion;
 	var chooseCountry = sftkartAreaSearchDDLChooseCountry;
	ddlArea.options[0] = CreateListOption(-1, chooseRegion, true);
	ddlArea.options[1] = CreateListOption(-1, chooseCountry, false);
	for (x = 0; x < areaFylkerNavn.length; x++) {		 	
		ddlArea.options[x + 2] = CreateListOption(areaFylkerID[x], areaFylkerNavn[x], false);
	}
}

function AddCountiesToCountyList() {
 	var ddlCounty = getElement('SFTKart1_ddlCounty');
	ddlCounty.options[0] = CreateListOption(-1, sftkartAreaSearchDDLChooseCounty, true);
}

function AreaListSelectChange(ddlArea) {
	var x;	
 	var chooseRegion = sftkartAreaSearchDDLChooseRegion;
 	var chooseCounty = sftkartAreaSearchDDLChooseCounty;
	var option = ddlArea.options[ddlArea.selectedIndex];
	var selText = option.text;
	var selVal = option.value;
 	var ddlCounty = getElement('SFTKart1_ddlCounty');
	
	// special case (Svalbard)
	if (selVal.indexOf('|') > 0) {
		getElement(sftkartAreaIDField).value = selVal;
		StartRefreshMapBlinking();
		return;	
	}
	
	if (selVal.length == 4) {		
		getElement(sftkartAreaIDField).value = selVal;
		StartRefreshMapBlinking();
		return;
	}
	else if (selVal.length == 2) {
		getElement(sftkartAreaIDField).value = selVal + '00';
		StartRefreshMapBlinking();
	}
		
	// Empty
	for (var q=ddlArea.options.length;q>=0;q--) 
		ddlCounty.options[q]=null;
	
	if (selText == chooseRegion) {
		AddRegionsToAreaList();
		AddCountiesToCountyList();
		return;
	}
	
	ddlCounty.options[0] = CreateListOption(-1, chooseCounty, false);
	//ddlArea.options[1] = CreateListOption(selVal + "00", selText, true);
	
	var selArrayID = eval('area' + selVal + 'ID'); 
	var selArrayNavn = eval('area' + selVal + 'Navn'); 
	for (x = 0; x < selArrayID.length; x++) {
		ddlCounty.options[x + 1] = CreateListOption(selArrayID[x], "  " + selArrayNavn[x], false);
	}
}

function CreateListOption(val, text, sel) {
	var option = document.createElement('option') ;
	option.value = val;
	option.text = text;
	option.selected = sel;
	return option;
}
	
//***************************************
// Various supporting functions
//***************************************	

function getElement(eName) {
	if (document.all)
		return document.all[eName]; 
	else
		return document.getElementById(eName); 
}

function getLayerStyle(name) {
	var theObj = getElement(name);
	return theObj.style;
}

function getPageMousePos(evt) {
	if (evt.pageX) {
		sftkart_pageMouseX=evt.pageX;
		sftkart_pageMouseY=evt.pageY;
	} else {
		sftkart_pageMouseX=evt.clientX + document.documentElement.scrollLeft;
		sftkart_pageMouseY=evt.clientY + document.documentElement.scrollTop;
	}
}

function getMapMousePos(evt) {
	if (evt.offsetX) { 
		sftkart_mapMouseX = evt.offsetX + 1;
		sftkart_mapMouseY = evt.offsetY + 1;
	}
	else {
		sftkart_mapMouseX = evt.pageX - findObjX(sftkartMapImage);
		sftkart_mapMouseY = evt.pageY - findObjY(sftkartMapImage);
	}
}

function getMapX(e) {
	if (e.offsetX) 
		return e.offsetX + 1;
	else
		return e.pageX - findObjX(sftkartMapImage);
}

function findObjX(name) {
	var obj = getElement(name);
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function findObjY(name) {
	var obj = getElement(name);
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function moveMouseIcon_old(e) {
  var _x;
  var _y;
  var isIE = document.all?true:false;
  if (!isIE) document.captureEvents(Event.MOUSEMOVE);

  if (!isIE) {
    _x = e.pageX;
    _y = e.pageY;
  }
  if (isIE) {
     //alert("IE");
    _x = event.clientX + document.documentElement.scrollLeft;
    _y = event.clientY + document.documentElement.scrollTop;
  }
  var mouseIcon = getElement("mouseIcon");
  var mouseImage = getElement("mouseImage");
  //alert(mi);
  mouseIcon.style.left = _x + 15;
  mouseIcon.style.top = _y - 165;
  if (_x < 160 || _x > 700 || _y < 190 || _y > 550) {
	mouseIcon.style.visibility = 'hidden';
  }
  else {
	mouseIcon.style.visibility = 'visible';
  }
  return true;
}


