dojo.require("dijit.dijit");
dojo.require("esri.map");
dojo.require("dojo.parser");
dojo.require("dojo.io.script")
dojo.require("dojo.cookie");
dojo.require("dijit.layout.BorderContainer");
dojo.require("dijit.TitlePane");
dojo.require("dijit.Tooltip");
dojo.require("dijit.Dialog");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.form.CheckBox");
dojo.require("dijit.form.Button");
dojo.require("dijit.form.FilteringSelect");
dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.NumberTextBox");
dojo.require("dijit.form.ValidationTextBox");
dojo.require("dojox.grid.Grid");
dojo.require("dojox.grid.compat._data.model");
dojo.require("dojox.layout.ExpandoPane");
dojo.addOnLoad(initMain);

var mainMap     = null;
var fullExtent  = null;
var mapCenter   = null;
var geocacheBasicLayer = null;
var geocacheImageLayer = null;
var dynamicLayer = null;

var nav = null;
var gridVisible    = false;
var firstMapQuery  = true;
var firstGridQuery = true;
var resetMap       = false;

// Error handling
//window.onerror = errorHandler;
var error_invalid_arguments = 1;
var error_empty_result      = 2;

function errorHandler(msg,source,code) {
	//alert(msg+" "+source+" "+code);
}

/** This function decides to use internal search or the remote Solrserver **/
function useRemoteSearchEngine() {
  var useRemote = true;
  if((''+window.location).indexOf("old=true") > -1) {
    useRemote = false;
  }
  return useRemote;
}

function initMain() {
	// Force classname on dialogs
	dojo.body().className = "tundra";
	
	// splash screen to avoid ugly loading in IE
	dojo.byId('loaderInner').innerHTML += " Ferdig.";
	setTimeout(function hideLoader(){
		var loader = dojo.byId('loader'); 
		dojo.fadeOut({ node: loader, duration:500,
			onEnd: function(){ 
				loader.style.display = "none"; 
			}
		}).play();
	}, 250);
	
	// Checking browser support
	if (dojo.cookie("isBrowserChecked") == undefined && sessvars.isBrowserChecked == undefined) {
		if (dojo.isIE < 7) {
			alert("Denne l\u00F8sningen er testet i IE7 og i nyere versjoner av denne nettleseren. "+
			"Man kan i enkelte tilfeller oppleve feil i applikasjonen ved bruk av eldre versjoner enn dette.");
		}
		
		sessvars.isBrowserChecked = true;
		dojo.cookie("isBrowserChecked", true, {expires: 365});
	}
	
	fullExtent = new esri.geometry.Extent(-554564,6157471,1775890,8221226);
	mapCenter  = new esri.geometry.Point(542509,7189348);
	
	mainMap = new RaMap("mainMap",{ displayGraphicsOnPan:false });
	//geocacheBasicLayer = new esri.layers.ArcGISTiledMapServiceLayer(geocacheBasicURL+"?token="+geocacheToken);
	//geocacheImageLayer = new esri.layers.ArcGISTiledMapServiceLayer(geocacheImageURL+"?token="+geocacheToken);
	geocacheBasicLayer = new esri.layers.ArcGISTiledMapServiceLayer(geocacheBasicURL);
	geocacheImageLayer = new esri.layers.ArcGISTiledMapServiceLayer(geocacheImageURL);
	dynamicLayer       = new esri.layers.ArcGISDynamicMapServiceLayer(dynamicURL1, {"opacity":0.4});
	
	// adding layers
	mainMap.addLayer(geocacheBasicLayer);
	mainMap.addLayer(geocacheImageLayer);
	mainMap.addLayer(dynamicLayer);
	
	// set layer visible
	if (sessvars.visible_layer == undefined || sessvars.visible_layer == "basic") {
		geocacheBasicLayer.show();
		geocacheImageLayer.hide();
    	toggleLayerButton.setLabel("Satellitt");
	} else {
		geocacheBasicLayer.hide();
		geocacheImageLayer.show();
		toggleLayerButton.setLabel("Kart");
	}
	
	//update TOC
	var sessValue = sessvars.arkeologi_visible;
	arkeologiCheckBox.setValue(sessValue == undefined   || sessValue == true ? true : false);
	sessValue = sessvars.hus_visible;
	husCheckBox.setValue(sessValue == undefined         || sessValue == true ? true : false);
	sessValue = sessvars.kirke_visible;
	kirkeCheckBox.setValue(sessValue == undefined       || sessValue == true ? true : false);
	sessValue = sessvars.teknisk_visible;
	tekniskCheckBox.setValue(sessValue == undefined     || sessValue == true ? true : false);
	sessValue = sessvars.undervann_visible;
	undervannCheckBox.setValue(sessValue == undefined   || sessValue == true ? true : false);
	sessValue = sessvars.kulturminne_visible;
	kulturminneCheckBox.setValue(sessValue == undefined || sessValue == true ? true : false);
	sessValue = sessvars.verden_visible;
	verdenCheckBox.setValue(sessValue == undefined      || sessValue == true ? true : false);
	
	// setting stores to combo boxes
	hovedkategoriComboBox.store = hovedkategoriStore;
	underkategoriComboBox.store = underkategoriStore;
	vernetypeComboBox.store     = vernetypeStore;
	dateringComboBox.store      = dateringStore;
	tilrettelagtComboBox.store  = tilrettelagtStore;
	fylkeComboBox.store         = fylkeStore;
	kommuneComboBox.store       = kommuneStore;
	
	esri.config.defaults.io.timeout = 180000;
	
	dojo.connect(gridExpandoPane, "toggle", function() {
		gridVisible = !gridVisible;
	});
	dojo.connect(mainMap, "onLoad", initFunctionality);
	dojo.connect(mainMap, "onMouseOut", fireMapMouseUp);	
}

function hasExtent() {
	return sessvars.extent_xmin != undefined;
}

function getExtent() {
	var xmin = Number(sessvars.extent_xmin);
	var ymin = Number(sessvars.extent_ymin);
	var xmax = Number(sessvars.extent_xmax);
	var ymax = Number(sessvars.extent_ymax);
	return new esri.geometry.Extent(xmin,ymin,xmax,ymax);
}

function centerAndZoom() {
	mainMap.centerAndZoom(mapCenter,1);
	resetMap = false;
}

function fireMapMouseUp(e) {   
	var mapElement  = document.getElementById("mainMap");
	var screenPoint = new esri.geometry.Point(e.pageX,e.pageY);
	var bounds = new esri.geometry.Extent(
		mainMap.position.x,mainMap.position.y,
		mainMap.position.x+mainMap.width,
		mainMap.position.y+mainMap.height);
	if (bounds.contains(screenPoint)) return;
	 
	var oEvent = null;
    if (document.createEvent) {
    	oEvent = document.createEvent("MouseEvents");
        oEvent.initMouseEvent("mouseup", true, true, window, 0, 0, 0, 
			e.pageX, e.pageY, false, false, false, false, 0, null);
    } 
	else if (document.createEventObject) {
        oEvent = document.createEventObject();
        oEvent.detail   = 0;
        oEvent.screenX  = 0;
        oEvent.screenY  = 0;
        oEvent.clientX  = e.pageX;
        oEvent.clientY  = e.pageY;
        oEvent.ctrlKey  = false;
        oEvent.altKey   = false;
        oEvent.shiftKey = false;
        oEvent.metaKey  = false;
        oEvent.button   = 0;
        oEvent.relatedTarget = null;
     }
     var fired = false;
     if (document.createEvent) {
        fired = mapElement.dispatchEvent(oEvent);
     } 
	 else if (document.createEventObject) {
		fired = mapElement.fireEvent("onmouseup", oEvent);
     }
}

function initFunctionality(map) {
	map.hideZoomSlider();
   	map.hidePanArrows();
	
	// the custom navigator
	nav = new Navigator(map);
    
	dojo.connect(dijit.byId("mainMap"), "resize", function() {
		map.reposition();
		map.resize();
		if (resetMap) {
			var t=setTimeout("centerAndZoom()",500);
		}
	});
	dojo.connect(map, "onExtentChange", function(extent, delta, levelChange, lod) {
		map.queryExtent(extent, lod.level);
		map.toggleVerdensarv();
		
		sessvars.extent_xmin = extent.xmin;
		sessvars.extent_ymin = extent.ymin;
		sessvars.extent_xmax = extent.xmax;
		sessvars.extent_ymax = extent.ymax;
		
		//update scalebar
		var scale = ((extent.xmax-extent.xmin)/map.width)*193;
    	var scaleKmTd = document.getElementById("scaleKmTd");
    	scaleKmTd.innerHTML = (scale/1000).toFixed(2)+" Km";
	});
	
	dojo.connect(arkeologiCheckBox, "onChange", function(newValue) {
		var level = map.getLevel();
		if (level > 7) map.resize();
		sessvars.arkeologi_visible = newValue;
	}); 
	dojo.connect(husCheckBox, "onChange", function(newValue) {
		var level = map.getLevel();
		if (level > 7) map.resize();
		sessvars.hus_visible = newValue;
	}); 
	dojo.connect(kirkeCheckBox, "onChange", function(newValue) {
		var level = map.getLevel();
		if (level > 7) map.resize();
		sessvars.kirke_visible = newValue;
	}); 
	dojo.connect(tekniskCheckBox, "onChange", function(newValue) {
		var level = map.getLevel();
		if (level > 7) map.resize();
		sessvars.teknisk_visible = newValue;
	}); 
	dojo.connect(undervannCheckBox, "onChange", function(newValue) {
		var level = map.getLevel();
		if (level > 7) map.resize();
		sessvars.undervann_visible = newValue;
	}); 
	dojo.connect(kulturminneCheckBox, "onChange", function(newValue) {
		var level = map.getLevel();
		if (level > 7)map.resize();
		sessvars.kulturminne_visible = newValue;
	}); 
	dojo.connect(verdenCheckBox, "onChange", function(newValue) {
		sessvars.verden_visible = newValue;
		map.toggleVerdensarv();
	});
	
	var sessValue = sessvars.hovedkategori;
	if (sessValue != null) {
		hovedkategoriComboBox.setValue(sessValue);
		hovedkategoriCheckBox.setValue(true);
		hovedkategoriCheckBox.setDisabled(false);
		if (sessValue == "L-VDA" || sessValue == "L-KLM") {
			disableInputs(true);
			resetInputs();
			vernetypeComboBox.setDisabled(false);
		} else {
			underkategoriComboBox.query = {kat:sessValue};
			underkategoriComboBox.setDisabled(false);
		}
	}
	sessValue = sessvars.underkategori;
	if (sessValue != null) {
		underkategoriComboBox.setValue(sessValue);
		underkategoriCheckBox.setValue(true);
		underkategoriCheckBox.setDisabled(false);
	}
	sessValue = sessvars.vernetype;
	if (sessValue != null) {
		vernetypeComboBox.setValue(sessValue);
		vernetypeCheckBox.setValue(true);
		vernetypeCheckBox.setDisabled(false);
	}
	sessValue = sessvars.datering;
	if (sessValue != null) {
		dateringComboBox.setValue(sessValue);
		dateringCheckBox.setValue(true);
		dateringCheckBox.setDisabled(false);
	}
	sessValue = sessvars.tilrettelagt;
	if (sessValue != null) {
		tilrettelagtComboBox.setValue(sessValue);
		tilrettelagtCheckBox.setValue(true);
		tilrettelagtCheckBox.setDisabled(false);
	}
	sessValue = sessvars.fylke;
	if (sessValue != null) {
		fylkeComboBox.setValue(sessValue);
		fylkeCheckBox.setValue(true);
		fylkeCheckBox.setDisabled(false);
		kommuneComboBox.query = {fylke:sessValue};
		kommuneComboBox.setDisabled(false);
	}
	sessValue = sessvars.kommune;
	if (sessValue != null) {
		kommuneComboBox.setValue(sessValue);
		kommuneCheckBox.setValue(true);
		kommuneCheckBox.setDisabled(false);
	}
	sessValue = sessvars.gnr;
	if (sessValue != null) {
		gnrInput.setValue(sessValue);
		gnrInput.setDisabled(false);
		bnrInput.setDisabled(false);
	}
	sessValue = sessvars.bnr;
	if (sessValue != null) {
		bnrInput.setValue(sessValue);
		bnrInput.setDisabled(false);
	}
	sessValue = sessvars.fritekst;
	if (sessValue != null) {
		fritekstInput.setValue(sessValue);
		fritekstInput.setDisabled(false);
	}
	dojo.connect(hovedkategoriComboBox, "onMouseDown", function(value) {
		hovedkategoriComboBox.setDisplayedValue("");
	}); 
	dojo.connect(underkategoriComboBox, "onMouseDown", function(value) {
		underkategoriComboBox.setDisplayedValue("");
	}); 
	dojo.connect(vernetypeComboBox, "onMouseDown", function(value) {
		vernetypeComboBox.setDisplayedValue("");
	});
	dojo.connect(dateringComboBox, "onMouseDown", function(value) {
		dateringComboBox.setDisplayedValue("");
	}); 
	dojo.connect(tilrettelagtComboBox, "onMouseDown", function(value) {
		tilrettelagtComboBox.setDisplayedValue("");
	}); 
	dojo.connect(fylkeComboBox, "onMouseDown", function(value) {
		fylkeComboBox.setDisplayedValue("");
	}); 
	dojo.connect(kommuneComboBox, "onMouseDown", function(value) {
		kommuneComboBox.setDisplayedValue("");
	});
	dojo.connect(gnrInput, "onMouseDown", function(value) {
		gnrInput.setValue("");
		searchButton.setDisabled(false);
	});  
	dojo.connect(bnrInput, "onMouseDown", function(value) {
		bnrInput.setValue("");
		searchButton.setDisabled(false);
	});  
	dojo.connect(fritekstInput, "onMouseDown", function(value) {
		fritekstInput.setValue("");
		searchButton.setDisabled(false);
	});    
	
	dojo.connect(hovedkategoriComboBox, "onChange", function(value) {
		if (value.length == 0) {
			hovedkategoriComboBox.domNode.style.fontStyle = "italic";
			hovedkategoriCheckBox.setValue(false);
			hovedkategoriCheckBox.setDisabled(true);
			sessvars.hovedkategori = null;
			underkategoriComboBox.query = {name:"*"};
		} else {
			hovedkategoriComboBox.domNode.style.fontStyle = "normal";
			hovedkategoriCheckBox.setValue(true);
			hovedkategoriCheckBox.setDisabled(false);
			sessvars.hovedkategori = value;
			searchButton.setDisabled(false);
			underkategoriComboBox.setDisplayedValue("Type kulturminne");
			
			if (value == "L-VDA" || value == "L-KLM") {
				disableInputs(true);
				resetInputs();
				vernetypeComboBox.setDisabled(false);
			}
			else {
				switch (value) {
					case "L-AKM":
						underkategoriComboBox.query = {L_AKM: "true"};
						break;
					case "L-ARK":
						underkategoriComboBox.query = {L_ARK: "true"};
						break;
					case "L-BVF":
						underkategoriComboBox.query = {L_BVF: "true"};
						break;
					case "L-KRK":
						underkategoriComboBox.query = {L_KRK: "true"};
						break;
					case "L-MAR":
						underkategoriComboBox.query = {L_MAR: "true"};
						break;
					case "L-TEK":
						underkategoriComboBox.query = {L_TEK: "true"};
						break;
				}
				disableInputs(false);
			}
		}
	}); 
	dojo.connect(hovedkategoriCheckBox, "onChange", function(newValue) {
		if (!newValue) {
			hovedkategoriComboBox.setDisplayedValue("Kategori");
			disableInputs(false);
		}
	}); 
	dojo.connect(underkategoriComboBox, "onChange", function(value) {
		if (value.length == 0) {
			underkategoriComboBox.domNode.style.fontStyle = "italic";
			underkategoriCheckBox.setValue(false);
			underkategoriCheckBox.setDisabled(true);
			sessvars.underkategori = null;
		} else {
			underkategoriComboBox.domNode.style.fontStyle = "normal";
			underkategoriCheckBox.setValue(true);
			underkategoriCheckBox.setDisabled(false);
			sessvars.underkategori = value;
			searchButton.setDisabled(false);
		}
	}); 
	dojo.connect(underkategoriCheckBox, "onChange", function(newValue) {
		if (!newValue) underkategoriComboBox.setDisplayedValue("Type kulturminne");
	}); 
	dojo.connect(vernetypeComboBox, "onChange", function(value) {
		if (value.length == 0) {
			vernetypeComboBox.domNode.style.fontStyle = "italic";
			vernetypeCheckBox.setValue(false);
			vernetypeCheckBox.setDisabled(true);
			sessvars.vernetype = null
		} else {
			vernetypeComboBox.domNode.style.fontStyle = "normal";
			vernetypeCheckBox.setValue(true);
			vernetypeCheckBox.setDisabled(false);
			sessvars.vernetype = value;
			searchButton.setDisabled(false);
		}
	});
	dojo.connect(vernetypeCheckBox, "onChange", function(newValue) {
		if (!newValue) vernetypeComboBox.setDisplayedValue("Vernestatus");
	}); 
	dojo.connect(dateringComboBox, "onChange", function(value) {
		if (value.length == 0) {
			dateringComboBox.domNode.style.fontStyle = "italic";
			dateringCheckBox.setValue(false);
			dateringCheckBox.setDisabled(true);
			sessvars.datering = null;
		} else {
			dateringComboBox.domNode.style.fontStyle = "normal";
			dateringCheckBox.setValue(true);
			dateringCheckBox.setDisabled(false);
			sessvars.datering = value;
			searchButton.setDisabled(false);
		}
	});
	dojo.connect(dateringCheckBox, "onChange", function(newValue) {
		if (!newValue) dateringComboBox.setDisplayedValue("Tidsepoke");
	}); 
	dojo.connect(tilrettelagtComboBox, "onChange", function(value) {
		if (value.length == 0) {
			tilrettelagtComboBox.domNode.style.fontStyle = "italic";
			tilrettelagtCheckBox.setValue(false);
			tilrettelagtCheckBox.setDisabled(true);
			sessvars.tilrettelagt = null
		} else {
			tilrettelagtComboBox.domNode.style.fontStyle = "normal";
			tilrettelagtCheckBox.setValue(true);
			tilrettelagtCheckBox.setDisabled(false);
			sessvars.tilrettelagt = value;
			searchButton.setDisabled(false);
		}
	});
	dojo.connect(tilrettelagtCheckBox, "onChange", function(newValue) {
		if (!newValue) tilrettelagtComboBox.setDisplayedValue("Tilrettelagt");
	}); 
	dojo.connect(fylkeComboBox, "onChange", function(value) {
		if (value.length == 0) {
			fylkeComboBox.domNode.style.fontStyle = "italic";
			fylkeCheckBox.setValue(false);
			fylkeCheckBox.setDisabled(true);
			sessvars.fylke = null;
			kommuneComboBox.query = {fylke:"*"};
		} else {
			fylkeComboBox.domNode.style.fontStyle = "normal";
			fylkeCheckBox.setValue(true);
			fylkeCheckBox.setDisabled(false);
			sessvars.fylke = value;
			searchButton.setDisabled(false);
			
			kommuneComboBox.query = {fylke:value};
			kommuneComboBox.setDisplayedValue("Kommune");
			kommuneComboBox.setDisabled(false);
		}
	}); 
	dojo.connect(fylkeCheckBox, "onChange", function(newValue) {
		if (!newValue) fylkeComboBox.setDisplayedValue("Fylke");
	}); 
	dojo.connect(kommuneComboBox, "onChange", function(value) {
		if (value.length == 0) {
			kommuneComboBox.domNode.style.fontStyle = "italic";
			kommuneCheckBox.setValue(false);
			kommuneCheckBox.setDisabled(true);
			gnrInput.setDisabled(true);
			bnrInput.setDisabled(true);
			sessvars.kommune = null;
		} else {
			kommuneComboBox.domNode.style.fontStyle = "normal";
			kommuneCheckBox.setValue(true);
			kommuneCheckBox.setDisabled(false);
			gnrInput.setDisabled(false);
			bnrInput.setDisabled(false);
			sessvars.kommune = value;
			searchButton.setDisabled(false);
		}
	});
	dojo.connect(kommuneCheckBox, "onChange", function(newValue) {
		if (!newValue) kommuneComboBox.setDisplayedValue("Kommune");
	});
	dojo.connect(gnrInput, "onChange", function(value) {
		if (value == null || value == 0) {
			sessvars.gnr = null;
		}
		else {
			sessvars.gnr = value;
			searchButton.setDisabled(false);
		}
	});
	dojo.connect(bnrInput, "onChange", function(value) {
		if (value == null || value == 0) 
			sessvars.bnr = null;
		else {
			sessvars.bnr = value;
			searchButton.setDisabled(false);
		}
	});
	dojo.connect(fritekstInput, "onChange", function(value) {
		if (value == null || value.length == 0) 
			sessvars.fritekst = null;
		else {
			sessvars.fritekst = value;
			searchButton.setDisabled(false);
		}
	});
	
	dojo.connect(searchButton, "onClick", function(evt) {
		map.search(true);
		sessvars.hasQuery = true;
	}); 
	
	dojo.connect(fritekstInput, "onKeyDown", function(evt) {
		if (evt.keyCode == 13) {
			map.search(true);
			sessvars.hasQuery = true;
		}
	});
	dojo.connect(searchButton, "onKeyDown", function(evt) {
		if (evt.keyCode == 13) {
			map.search(true);
			sessvars.hasQuery = true;
		}
	});
	
	// adding verdensarv and Kulturmiljo
	map.addVerdensarvGraphics();
	
	// initial query
	map.reposition();
	map.resize();
	map.setExtent(hasExtent() ? getExtent() : fullExtent);
	
	if (sessvars.hasQuery) {
		map.search(false);
		searchButton.setDisabled(false);
	}
}

function disableInputs(disabled) {
	underkategoriComboBox.setDisabled(disabled);
	vernetypeComboBox.setDisabled(disabled);
	dateringComboBox.setDisabled(disabled);
	tilrettelagtComboBox.setDisabled(disabled);
	fylkeComboBox.setDisabled(disabled);
	kommuneComboBox.setDisabled(disabled);
	fritekstInput.setDisabled(disabled);
}

function resetInputs() {
	underkategoriComboBox.setDisplayedValue("Type kulturminne");
	vernetypeComboBox.setDisplayedValue("Vernestatus");
	dateringComboBox.setDisplayedValue("Tidsepoke");
	tilrettelagtComboBox.setDisplayedValue("Tilrettelagt");
	fylkeComboBox.setDisplayedValue("Fylke");
	kommuneComboBox.setDisplayedValue("Kommune");
	gnrInput.setValue(0);
	bnrInput.setValue(0);
	fritekstInput.setValue("");
}

function resetSearch() {
	resetInputs();
	hovedkategoriComboBox.setDisplayedValue("Kategori");
	gnrInput.setDisabled(true);
	bnrInput.setDisabled(true);
	searchButton.setDisabled(true);
	
	// session variables
	sessvars.hovedkategori = null;
	sessvars.underkategori = null;
	sessvars.vernetype     = null;
	sessvars.datering      = null;
	sessvars.tilrettelagt  = null;
	sessvars.fylke         = null;
	sessvars.kommune       = null;
	sessvars.gnr           = null;
	sessvars.bnr           = null;
	sessvars.hasQuery      = false;
	
	//legende
	arkeologiCheckBox.setValue(true);
	husCheckBox.setValue(true);
	kirkeCheckBox.setValue(true);
	tekniskCheckBox.setValue(true);
	undervannCheckBox.setValue(true);
	kulturminneCheckBox.setValue(true);
	//verdenCheckBox.setValue(true);
	
	mainMap.message("NOMESSAGE",""); // clearing messsage
	gridWidget.setModel(new dojox.grid.data.Table(null, null)); // clearing table
	
	//close table if open, redraw
	if (gridVisible) {
        resetMap = true;
		gridExpandoPane.toggle();
	} else {
        mainMap.centerAndZoom(mapCenter,1);
    }
}

function setBusy(busy) {
	if (busy) {
		document.getElementById("maploading").style.display = "inline";
		document.body.style.cursor = "wait";
	} else {
		document.getElementById("maploading").style.display = "none";
		document.body.style.cursor = "auto";
	}
}

function isBusy() {
	return (document.getElementById("maploading").style.display == "inline");
}

function arrayContains(arr, value) {
	for (var i = 0; i < arr.length; i++) {
		if (arr[i] == value) return true;
	}
	return false;
}

dojo.declare("RaMap", esri.Map, {
	//This class contains methods for selection 
	//displaying and zooming to features in the map.
	
	constructor: function(name, options){
		//Contructs an RaMap. 
		//name: The name of the map. This must correspond to the
		//ID attribute og the map div-tag.
		
		this.fylkeQueryTask = new esri.tasks.QueryTask(fylkerURL);
		this.fylkeQuery = new esri.tasks.Query();
		this.fylkeQuery.outFields = ["FYLKE_ID", "FYLKE", "ANTALL"];
		
		this.kommuneQueryTask = new esri.tasks.QueryTask(kommunerURL);
		this.kommuneQuery = new esri.tasks.Query();
		this.kommuneQuery.outFields = ["KOMM_ID", "KOMMUNE", "ANTALL"];
		
		this.lokalitetQueryTask = new esri.tasks.QueryTask(lokaliteterURL);
		this.lokalitetQuery = new esri.tasks.Query();
		this.lokalitetQuery.outFields = ["LOK_ID", "KATEGORI", "ART_KODE", "LOK_NAVN", "KOMMUNE", "VERNETYPE"];
		
		this.matrikkelQueryTask = new esri.tasks.QueryTask(matrikkelURL);
		this.matrikkelQuery = new esri.tasks.Query();
		this.matrikkelQuery.outFields = ["MOB_NO"];
		
		this.verdensarvQueryTask = new esri.tasks.QueryTask(verdensarvURL);
		this.verdensarvQuery = new esri.tasks.Query();
		this.verdensarvQuery.outFields = ["VID", "KATEGORI","LOK_NAVN","VERNETYPE"];
		
		this.verdensarvLayer = null;
		this.isBusy = false;
    },
	addVerdensarvGraphics: function() {
		this.verdensarvLayer = new esri.layers.GraphicsLayer();
        this.addLayer(this.verdensarvLayer);
	
		this.verdensarvQuery.where = "VID > 0";
		this.verdensarvQuery.returnGeometry = true;
		var self = this;
		this.verdensarvQueryTask.execute(this.verdensarvQuery, function(featureSet) {
			try  {
				for (var i = 0; i < featureSet.features.length; i++) {
        			var feature = featureSet.features[i];
					var symbol = symbols[feature.attributes.KATEGORI];
        			feature.setSymbol(symbol);
           			self.verdensarvLayer.add(feature);
        		}
				if (sessvars.hovedkategori != undefined && 
						(sessvars.hovedkategori == "L-VDA" || 
						 sessvars.hovedkategori == "L-KLM")) {
					var arr = self.getVerdensarvKat(sessvars.hovedkategori);
					self.showLokalitetResult(null, true, arr);
				}
				setBusy(false);
			} catch(error) {
				setBusy(false);
				errorHandler("ERROR","addVerdensarvGraphics.execute");
			}
		});
	},
	toggleVerdensarv: function()  {
		var sessValue = sessvars.verden_visible;
		var isVisible = sessValue == undefined || sessValue == true ? true : false;
		if (this.getLevel() > 3 && isVisible) {
			this.verdensarvLayer.show();
		}
		else {
			this.verdensarvLayer.hide();
		}
	},
    queryExtent: function(extent, level) {
    	//onExtentChange callback.
		try {
			setBusy(true);
			var self = this;
			if (this.graphics != null) this.graphics.clear();
			if (level >= 0 & level <= 3) {
				this.fylkeQuery.geometry = extent;
				this.fylkeQuery.where = null;
				this.fylkeQuery.returnGeometry = true;
				this.fylkeQuery.spatialRelationship = esri.tasks.Query.SPATIAL_REL_INTERSECTS;
				this.fylkeQueryTask.execute(this.fylkeQuery, function(featureSet) {
					try  {
						self.updateFylker(featureSet);
						setBusy(false);
					} catch(error) {
						setBusy(false);
						errorHandler("ERROR","fylkeQueryTask.execute");
					}
				});
			}
			else if (level > 3 & level <= 7) {
				this.kommuneQuery.geometry = extent;
				this.kommuneQuery.where = null;
				this.kommuneQuery.returnGeometry = true;
				this.kommuneQuery.spatialRelationship = esri.tasks.Query.SPATIAL_REL_INTERSECTS;
				this.kommuneQueryTask.execute(this.kommuneQuery, function(featureSet) {
					try  {
						self.updateKommuner(featureSet);
						setBusy(false);
					} catch(error) {
						setBusy(false);
						errorHandler("ERROR","kommuneQueryTask.execute");
					}
				});
			}
			else if (level > 7) {
				this.lokalitetQuery.geometry = extent;
				this.lokalitetQuery.where = "KATEGORI IN "+this.getTocContent();
				this.lokalitetQuery.returnGeometry = true;
				this.lokalitetQuery.spatialRelationship = esri.tasks.Query.SPATIAL_REL_INTERSECTS;
				this.lokalitetQueryTask.execute(this.lokalitetQuery, function(featureSet) {
					try  {
						self.updateLokaliteter(featureSet);
						setBusy(false);
					} catch(error) {
						setBusy(false);
						errorHandler("ERROR","lokalitetQueryTask.execute");
					}
				});
			}
		} catch(error) {
			setBusy(false);
			errorHandler("ERROR","onExtentChange");
		}
    },
	search: function(doZoom) {
		var value = hovedkategoriComboBox.getValue();
        if ((value == "L-VDA" || value == "L-KLM") && this.verdensarvLayer != null) {
            // Verdensarv og kulturmiljosok
			var arr = this.getVerdensarvKat(value);
			this.showLokalitetResult(null, true, arr);
            return;
        }
		var fritekst = fritekstInput.getValue();
		if (fritekst != null && fritekst.length > 0) {
			setBusy(true);
			//Fritekstsøk mot Idium
			//var url = "http://localhost:8080/RA_Publikum_v2/fritekst.txt";
			var remoteQuery = fritekstURL + "q=name%3A" + encodeURIComponent(fritekst) + "%20attribArt_kode%3A" + encodeURIComponent(fritekst) + "%20attribKOMMUNE%3A" + encodeURIComponent(fritekst) + "%20attribFYLKE%3A" + encodeURIComponent(fritekst) + "%20text%3A" + encodeURIComponent(fritekst);
			//var remoteQuery = fritekstURL + "q=" + encodeURIComponent(fritekst);
			var localQuery = fritekstURL+"query="+fritekst;
			var url = useRemoteSearchEngine() ? remoteQuery : localQuery;
			var and = "+AND+";
			var colon = ":";
			if(useRemoteSearchEngine()) {
				and = "%20%2B";
				colon = "%3A";
			}
			var value = hovedkategoriComboBox.getValue();
			if (value.length != 0)          url += and+"attribKATEGORI_KODE"+colon+value.substring(2);
			value = underkategoriComboBox.getValue();
			if (value.length != 0)          url += and+"attribUNDERKATEGORI_KODE"+colon+value;
			value = vernetypeComboBox.getValue();
			if (value.length != 0)          url += and+"attribVERNETYPE_KODE"+colon+value;
			value = dateringComboBox.getValue();
			if (value.length != 0)          url += and+"attribDATERING_KODE"+colon+value;
			value = tilrettelagtComboBox.getValue();
			if (value.length != 0)          url += and+"attribTILRETTELAGT"+colon+value;
			value = fylkeComboBox.getValue();
			if (value.length != 0)          url += and+"attribFYLKE_ID"+colon+value;
			value = kommuneComboBox.getValue();
			if (value.length != 0)          url += and+"attribKOMM_ID"+colon+value;
			value = gnrInput.getValue();
			if (value != null && value > 0) url += and+"attribGID"+colon+value;
			value = bnrInput.getValue();
			if (value != null && value > 0) url += and+"attribsiteLargeSiteNumber"+colon+value;

			// Use proxy on remote searches
			if (useRemoteSearchEngine()) {
				url = '/scripts/httpAuditProxy.groovy?url=' + encodeURIComponent(url);
			}
				
			var self = this;
			dojo.xhrGet( {
		       	url: url, 
		        handleAs: "json",
		        load: function(responseObject, ioArgs) {
					if (!gridVisible) {
    					gridExpandoPane.toggle();
    				}
                    if (responseObject.fritekstResult.length > 0) {
                        var list = ""; // List containing LOK_ID
                        var arr = []; // Array containing Verdensarv and Kulturmiljø ID's
                        for (var i = 0; i < responseObject.fritekstResult.length; i++) {
                            var id = responseObject.fritekstResult[i];
                            if (isNaN(id)) {
                                arr.push(id.substring(2));
                            }
                            else {
                                list += "," + id;
                            }
                        }
                        self.lokalitetQuery.where = "LOK_ID IN (" + list.substring(1) + ")";
                        self.lokalitetQuery.geometry = null;
                        self.lokalitetQuery.spatialRelationship = null;
                        self.lokalitetQuery.returnGeometry = true;
                        self.lokalitetQueryTask.execute(self.lokalitetQuery, function(featureSet){
							try {
								// if remote, sort according to Solr search results
								if (useRemoteSearchEngine()) {
									featureSet.features.sort(function(a,b) {
										var indexA = list.indexOf("," + a.attributes.LOK_ID);		                                      
										var indexB = list.indexOf("," + b.attributes.LOK_ID);
										return indexA - indexB;
									});
								}
								self.showLokalitetResult(featureSet, doZoom, arr, responseObject.totnumb);
								setBusy(false);
							} 
							catch (error) {
								errorHandler("ERROR", "lokalitetQueryTask.execute");
								setBusy(false);
							}
							}, function(){
								self.showLokalitetResult(null, doZoom, arr, arr.length);
								setBusy(false);
							});
                        
                    }
                    else {
                        gridWidget.setModel(new dojox.grid.data.Table(null, null)); // clearing table
                        self.message("WARNING", "Ingen treff. Pr&#248;v et nytt s&#248;k.");
                    }
		        },
				error: function(response, ioArgs) {
		          	errorHandler("HTTP status code: ", ioArgs.xhr.status); 
					setBusy(false);
		          	return response;
		          }
			});
			return;
		}
		var where = "";
		if (value.length != 0) 
			where += "KATEGORI = '" + value + "' ";
		value = underkategoriComboBox.getValue();
		if (value.length != 0) 
			where += "AND ART_KODE = '," + value + ",' "; // Hack: must fix in database
		value = vernetypeComboBox.getValue();
		if (value.length != 0) 
			where += "AND VERNETYPE = '" + value + "' ";
		value = dateringComboBox.getValue();
		if (value.length != 0) 
			where += "AND DATERING = '" + value + "' ";
		value = tilrettelagtComboBox.getValue();
		if (value.length != 0) 
			where += "AND TILRETTELAGT = '" + value + "' ";
		value = fylkeComboBox.getValue();
		if (value.length != 0) 
			where += "AND FYLKE_ID = '" + value + "' ";
		value = kommuneComboBox.getValue();
		if (value.length != 0) 
			where += "AND KOMM_ID = '" + value + "' ";
				
		var gnr = Number(gnrInput.getValue());
		var bnr = Number(bnrInput.getValue());
		//gaards og bruksnummer soek
		if (gnr > 0) {
			var kommid = kommuneComboBox.getValue();
			this.matrikkelQuery.where = "KOMM_ID = '" + kommid + "' AND GNR = " + gnr;
			if (bnr > 0) this.matrikkelQuery.where  += " AND BNR = " + bnr;
			this.matrikkelQuery.returnGeometry = false;
			
			var self = this;
			this.matrikkelQueryTask.execute(this.matrikkelQuery, function(featureSet){
				try {
					if (!gridVisible) {
						gridExpandoPane.toggle();
					}
					if (featureSet.features.length > 0) {
						where += "AND MOB_NO IN (";
						for (var i = 0; i < featureSet.features.length; i++) {
							where += featureSet.features[i].attributes.MOB_NO;
							if (i < featureSet.features.length - 1) {
								where += ",";
							}
						}
						where += ")";
						self.doSearch(where,doZoom);
					} else {
						gridWidget.setModel(new dojox.grid.data.Table(null, null)); // clearing table
						self.message("WARNING","Ingen treff. Pr&#248;v et nytt s&#248;k.");
					}
				} 
				catch (error) {
					errorHandler("ERROR", "matrikkelQueryTaskTask.execute");
				}
			});
		}
		else {
			this.doSearch(where,doZoom);
		}
	},
	doSearch: function(where,doZoom) {
		if (isBusy()) return;
    	try {
			setBusy(true);
			if (where.indexOf("AND") == 0) {
				where = where.substring(3);
			}
			//alert(where);
			this.lokalitetQuery.where = where;
			this.lokalitetQuery.geometry = null;
			this.lokalitetQuery.spatialRelationship = null;
			this.lokalitetQuery.returnGeometry = true;
				
			var self = this;
			this.lokalitetQueryTask.execute(this.lokalitetQuery, function(featureSet){
				try {
					sessvars.hasQuery = true;
					// Oppdaterer tabell og kart
					self.showLokalitetResult(featureSet, doZoom);
					setBusy(false);
				} 
				catch (error) {
					setBusy(false);
					errorHandler("ERROR", "lokalitetQueryTask.execute");
				}
			});
		} catch(error) {
			setBusy(false);
			errorHandler("ERROR","doSearch");
		}
    },
    showLokalitetResult: function(featureSet,doZoom,arr,totNum) {
        var dataForGrid = new Array();
        var extent  = new esri.geometry.Extent(9999999,9999999,-9999999,-9999999);
		var length  = 0;
		var counter = 0;
		
		if (featureSet != null && featureSet.features.length > 0) {
			length += featureSet.features.length;

			for (var i = 0; i < length; i++) {
				var feature = featureSet.features[i];
				var attr = feature.attributes;
				dataForGrid[i] = [
					attr.KATEGORI, 
					getUnderkategoriName(attr.ART_KODE), 
					attr.LOK_NAVN, 
					attr.KOMMUNE, 
					getVernetypeName(attr.VERNETYPE), 
					attr.LOK_ID, 
					feature.geometry
				];
				this.expandExtent(extent, feature.geometry);
				counter++;
			}
		}
		if (arr != null && arr.length > 0) {
			length += arr.length;
	        for (var i = 0; i < this.verdensarvLayer.graphics.length; i++) {
	        	var feature = this.verdensarvLayer.graphics[i];
	        	var attr = feature.attributes;
				if (arrayContains(arr,attr.VID)) {
					dataForGrid[counter] = [
						attr.KATEGORI, 
						getHovedkategoriName(attr.KATEGORI), 
						attr.LOK_NAVN, 
						"", 
						getVernetypeName(attr.VERNETYPE), 
						attr.VID, 
						feature.geometry
					];
					this.expandExtent(extent, feature.geometry);
					counter++;
				}
	        }
		}
		if (length >= maxNumRecordsQuery) {
			length = maxNumRecordsQuery
		}
        if (!gridVisible) {
    		gridExpandoPane.toggle();
    	}
        if (length > 0) {
			var msg = null;
			if (totNum) { // fritekst
				msg = length < 50 ? "Antall treff: " + length :
					"Antall treff : Over 50. Du b&#248;r spesifisere s&#248;ket ditt.";
			}
			else {
				msg = length < maxNumRecordsQuery ? "Antall treff: " + length :
					"Antall treff : Over 1000. Du b&#248;r begrense s&#248;ket ditt.";
			}
        	this.message("INFO",msg);
        	
        	var model = new dojox.grid.data.Table(null, dataForGrid);
        	var view1 = {
          	cells: [[
             	{name: ' ', width: '20px', formatter: this.formatKatImage},
             	{name: 'Type kulturminne', width: '150px'},
             	{name: 'Navn', width: '200px'},
             	{name: 'Kommune', width: 'auto'},
             	{name: 'Vernestatus', width: 'auto'},
             	{name: ' ', width: '75px', formatter: this.formatInfoImage}]]
        	};
        	var layout = [view1];
        	gridWidget.setModel(model);
        	gridWidget.setStructure(layout);
        	this.connectRowEvents();
        
        	// zoom to extent of all selected features
			if (doZoom && extent != null) {
				if (length == 1) {
					var cx = (extent.xmin+extent.xmax)/2;
					var cy = (extent.ymin+extent.ymax)/2;
					extent.update(cx-500,cy-500,cx+500,cy+500);
				} else {
					extent = extent.expand(1.2); // 20% bigger
				}
        		this.setExtent(extent);
			}
        } else {
			gridWidget.setModel(new dojox.grid.data.Table(null, null)); // clearing table
        	this.message("WARNING","Ingen treff. Pr&#248;v et nytt s&#248;k.");
        }
    },
	getVerdensarvKat: function(kat, vtype) {
        var arr    = [];
		var length = this.verdensarvLayer.graphics.length;
		var vtype  = vernetypeComboBox.getValue();
        for (var i = 0; i < length; i++) {
        	var feature = this.verdensarvLayer.graphics[i];
        	var attr = feature.attributes;
			if (kat == attr.KATEGORI && (vtype.length == 0 || vtype == attr.VERNETYPE)) {
				arr.push(attr.VID);
			}
        }
		return arr;
    },
    updateFylker: function(featureSet) {
    	var n = featureSet.features.length;
        //alert("Num records: "+n);
        if (n == 0) {
        	return;
        }
        var extent = new esri.geometry.Extent(9999999,9999999,-9999999,-9999999);
        for (var i = 0; i < n; i++) {
        	var feature = featureSet.features[i];
        	var symbol = symbols["Lokalitet"];
        	if (symbol != null) {
        		feature.setSymbol(symbol);
           		this.graphics.add(feature);
        	}
        	this.expandExtent(extent,feature.geometry);
        }
        extent.expand(1.2); // 20% bigger
        this.connectGraphicsEvents();
        return extent;
    },
    updateKommuner: function(featureSet) {
    	var n = featureSet.features.length;
        //alert("Num records: "+n);
        if (n == 0) {
        	return;
        }
        var extent = new esri.geometry.Extent(9999999,9999999,-9999999,-9999999);
        for (var i = 0; i < n; i++) {
        	var feature = featureSet.features[i];
        	var symbol = symbols["Lokalitet"];
        	if (symbol != null) {
        		feature.setSymbol(symbol);
           		this.graphics.add(feature);
        	}
        	this.expandExtent(extent,feature.geometry);
        }
        extent.expand(1.2); // 20% bigger
        this.connectGraphicsEvents();
        return extent;
    },
    updateLokaliteter: function(featureSet) {
    	var n = featureSet.features.length;
        //alert("Num records: "+n);
        if (n == 0) {
        	return;
        }
        var extent = new esri.geometry.Extent(9999999,9999999,-9999999,-9999999);
		if (dojo.isIE && n > 500) {
			//Preven IE crash when large number of graphic objects
			alert("Klarte ikke \u00e5 tegne opp alle kulturminner i denne m\u00e5lestokken. "+
				"Zoom inn for \u00e5 se alle, eller bruk nettleseren Mozilla Firefox");
			n = 500;
		}
        for (var i = 0; i < n; i++) {
        	var feature = featureSet.features[i];
        	var symbol;
        	if (this.getRowIndex(feature.attributes.LOK_ID) > -1)//selected
        		symbol = selectedSymbols[feature.attributes.KATEGORI];
        	else symbol = symbols[feature.attributes.KATEGORI];
        	
        	if (symbol != null) {
        		feature.setSymbol(symbol);
           		this.graphics.add(feature);
        	}
        	this.expandExtent(extent,feature.geometry);
        }
        this.connectGraphicsEvents();
        extent.expand(1.2); // 20% bigger
        return extent;
    },
    connectRowEvents: function() {
    	if (!firstGridQuery) return;
        // handle onMouseOver events
        var self = this;
        dojo.connect(gridWidget, "onRowMouseOver", function(evt) {
        	var row = gridWidget.model.getRow(evt.rowIndex);
			if (row.length == 7) { // lokaliteter
				var feature = self.getFeature(row[5]);
				if (feature != null) {
					if (feature.symbol.url.indexOf("Selected") > -1) {
						feature.setSymbol(highlightSelectedSymbols[row[0]]);
					}
					else {
						feature.setSymbol(highlightSymbols[row[0]]);
					}
				}
			}
			else { //verdensarv
                var feature = self.getVdaFeature(row[4]);
				if (feature != null) {
					feature.setSymbol(highlightSymbols[row[0]]);
				}
            }
        });
        dojo.connect(gridWidget, "onRowMouseOut", function(evt) {
        	var row = gridWidget.model.getRow(evt.rowIndex);
			if (row.length == 7) { // lokaliteter
				var feature = self.getFeature(row[5]);
				if (feature != null) {
					if (feature.symbol.url.indexOf("Selected") > -1) {
						feature.setSymbol(selectedSymbols[row[0]]);
					}
					else {
						feature.setSymbol(symbols[row[0]]);
					}
				}
			} else { //verdensarv
                var feature = self.getVdaFeature(row[4]);
				if (feature != null) {
					feature.setSymbol(symbols[row[0]]);
				}
            }
        });
        dojo.connect(gridWidget, "onCellClick", function(evt){
            var row = gridWidget.model.getRow(evt.rowIndex);
            if (row[0] == "L-VDA" || row[0] == "L-KLM") { // lokaliteter
            	switch (evt.cell.index) { //verdensarv / kulturmiljo
                    case 0:
                    case 5:
						var type = row[0] == "L-VDA" ? "verdensarv" : "kulturmiljo";
						window.open(articlePageURL + type + "/?VID=" + row[5],"_self");
                        break;
                    default:
                        var ext = row[6].getExtent();
                        if (ext.getWidth() * ext.getHeight() < 15625) {
                            var x = ext.getCenter().x;
                            var y = ext.getCenter().y;
                            ext = new esri.geometry.Extent(x - 125, y - 125, x + 125, y + 125);
                        }
                        self.setExtent(ext, true);
                        break;
                }
            }
            else { //kulturminner
                switch (evt.cell.index) {
                    case 0:
                    case 5:
						window.open(articlePageURL + "kulturminne/?LOK_ID=" + row[5],"_self");
                        break;
                    default:
                        var extent = new esri.geometry.Extent(
							row[6].x - 500, row[6].y - 500, row[6].x + 500, row[6].y + 500);
                        self.setExtent(extent, true);
                        break;
                }
            }
        });
        firstGridQuery = false;
    },
    connectGraphicsEvents: function() {
    	if (!firstMapQuery) return;
    	var self = this;
		// lokaliteter
        this.graphics.enableMouseEvents();
        dojo.connect(this.graphics, "onMouseOver", function(evt) {
        	var attr = evt.graphic.attributes;
        	var content = null;
        	if (attr.FYLKE_ID != undefined) {
        		evt.graphic.setSymbol(highlightSymbols["Lokalitet"]);
        		content = 
        			"<b>Fylke: </b>"+attr.FYLKE+"<br/>" +
        			"<b>Antall kulturminner: </b>"+attr.ANTALL+"<br/>" +
        			"<em>Klikk for \u00e5 zoome inn</em>";
        	}
        	else if (attr.KOMM_ID != undefined) {
        		evt.graphic.setSymbol(highlightSymbols["Lokalitet"]);
        		content = 
        			"<b>Kommune: </b>"+attr.KOMMUNE+"<br/>" +
        			"<b>Antall kulturminner: </b>"+attr.ANTALL+"<br/>" +
        			"<em>Klikk for \u00e5 zoome inn</em>";
        	}
        	else if(attr.LOK_ID != undefined) {
        		if(evt.graphic.symbol.url.indexOf("Selected") > -1) {
        			evt.graphic.setSymbol(highlightSelectedSymbols[attr.KATEGORI]);
        			var rowIndex = self.getRowIndex(attr.LOK_ID);
           			var node = gridWidget.views.views[0].getRowNode(rowIndex);
            		if (node != null) {
            			//gridWidget.setScrollTop(gridWidget.scroller.findScrollTop(rowIndex));
            			node.style.backgroundColor = "#60a1ea";
            		}
        		} else {
        			evt.graphic.setSymbol(highlightSymbols[attr.KATEGORI]);
        		}
        		content = 
        			"<b>Type kulturminne: </b>"+getUnderkategoriName(attr.ART_KODE)+"<br/>" +
        			"<b>Navn: </b>"+attr.LOK_NAVN+"<br/>" +
        			"<b>Kommune: </b>"+attr.KOMMUNE+"<br/>" +
        			"<b>Vernestatus: </b>"+getVernetypeName(attr.VERNETYPE)+"<br/>" +
        			"<em>Klikk for mer informasjon</em>";
        	}
        	if (content != null) {
        		mapTooltip.setContent(content);
        		dijit.popup.open({popup: mapTooltip, x: evt.pageX, y: evt.pageY});
        	}
        });
        dojo.connect(this.graphics, "onMouseOut", function(evt) {
        	dijit.popup.close(mapTooltip);
        	var attr = evt.graphic.attributes;
        	if (attr.FYLKE_ID != undefined) {
        		evt.graphic.setSymbol(symbols["Lokalitet"]);
        	}
        	else if (attr.KOMM_ID != undefined) {
        		evt.graphic.setSymbol(symbols["Lokalitet"]);
        	}
        	else if(attr.LOK_ID != undefined) {
        		if(evt.graphic.symbol.url.indexOf("Selected") > -1) {
        			evt.graphic.setSymbol(selectedSymbols[attr.KATEGORI]);
        			var rowIndex = self.getRowIndex(attr.LOK_ID);
           			var node = gridWidget.views.views[0].getRowNode(rowIndex);
            		if (node != null) {
            			if (rowIndex % 2 == 0) //even
            				node.style.backgroundColor  = "white";
            			else node.style.backgroundColor = "#f2f5f9";
            		}
        		} else {
        			evt.graphic.setSymbol(symbols[attr.KATEGORI]);
        		}
        	}
        });
        dojo.connect(this.graphics, "onClick", function(evt) {
        	var attr = evt.graphic.attributes;
        	if (attr.FYLKE_ID != undefined) {
				var level = 4;
        		self.centerAndZoom(evt.mapPoint,level);
        	}
        	else if (attr.KOMM_ID != undefined) {
				var level = dojo.isIE && attr.ANTALL > 500 ? 10 : 8;
        		self.centerAndZoom(evt.mapPoint,level);
        	}
        	else if(attr.LOK_ID != undefined) {
				window.open(articlePageURL+"kulturminne/?LOK_ID="+attr.LOK_ID,"_self");
				//window.open(articlePageURL+"?LOK_ID="+attr.LOK_ID,"_self");
        	}
        });
		// verdensarv
		if (this.verdensarvLayer != null) {
			this.verdensarvLayer.enableMouseEvents();
			dojo.connect(this.verdensarvLayer, "onMouseOver", function(evt){
				var attr = evt.graphic.attributes;
				var content = 
        			"<b>Type kulturminne: </b>"+getHovedkategoriName(attr.KATEGORI)+"<br/>" +
        			"<b>Navn: </b>"+attr.LOK_NAVN+"<br/>" +
					"<b>Vernestatus: </b>"+getVernetypeName(attr.VERNETYPE)+"<br/>" +
        			"<em>Klikk for mer informasjon</em>";	
				mapTooltip.setContent(content);
				dijit.popup.open({ popup: mapTooltip, x: evt.pageX, y: evt.pageY });
			});
			dojo.connect(this.verdensarvLayer, "onMouseOut", function(evt){
				var attr = evt.graphic.attributes;
				dijit.popup.close(mapTooltip);
			});
			dojo.connect(this.verdensarvLayer, "onClick", function(evt){
				var attr = evt.graphic.attributes;
				var type = attr.KATEGORI == "L-VDA" ? "verdensarv" : "kulturmiljo";
				window.open(articlePageURL + type + "/?VID=" + attr.VID,"_self");
			});
		}
        firstMapQuery = false;
    },
    toggleLayer: function() {
    	if (toggleLayerButton.label == "Kart") {
    		toggleLayerButton.setLabel("Satellitt");
    		geocacheImageLayer.hide();
    		geocacheBasicLayer.show();
    		sessvars.visible_layer = "basic";
    	}
    	else {
    		toggleLayerButton.setLabel("Kart");
    		geocacheBasicLayer.hide();
    		geocacheImageLayer.show();
    		sessvars.visible_layer = "satellitt";
    	}
    },
    expandExtent: function(extent,geometry) {
		if (geometry.type == "point") {
			if (geometry.x < extent.xmin) extent.xmin = geometry.x;
    		if (geometry.x > extent.xmax) extent.xmax = geometry.x;
    		if (geometry.y < extent.ymin) extent.ymin = geometry.y;
    		if (geometry.y > extent.ymax) extent.ymax = geometry.y;
		}
		else {
			var geomExt = geometry.getExtent();
			if (geomExt.xmin < extent.xmin) extent.xmin = geomExt.xmin;
    		if (geomExt.xmax > extent.xmax) extent.xmax = geomExt.xmax;
    		if (geomExt.ymin < extent.ymin) extent.ymin = geomExt.ymin;
    		if (geomExt.ymax > extent.ymax) extent.ymax = geomExt.ymax;
		}
    },
    getRowIndex: function(lokId) {
    	for (var i = 0; i < gridWidget.model.getRowCount(); i++) {
    		if (gridWidget.model.getRow(i)[5] == lokId) {
    			return i;
    		}
    	}
    	return -1;
    },
    getFeature: function(lokId) {
    	var graphicsArray = this.graphics.graphics;
    	for (var i = 0; i < graphicsArray.length; i++) {
           	if (graphicsArray[i].attributes.LOK_ID == lokId) {
           		return graphicsArray[i];
           	}
        }
        return null;
    },
	getVdaFeature: function(vid) {
    	var graphicsArray = this.verdensarvLayer.graphics;
    	for (var i = 0; i < graphicsArray.length; i++) {
           	if (graphicsArray[i].attributes.VID == vid) {
           		return graphicsArray[i];
           	}
        }
        return null;
    },
    getTocContent: function() {
    	var list = "";
    	if (arkeologiCheckBox.getValue())   list += "'L-ARK'";
    	if (husCheckBox.getValue())         list += ",'L-BVF'";
    	if (kirkeCheckBox.getValue())       list += ",'L-KRK'";
    	if (tekniskCheckBox.getValue())     list += ",'L-TEK'";
    	if (undervannCheckBox.getValue())   list += ",'L-MAR'";
    	if (kulturminneCheckBox.getValue()) list += ",'L-AKM'";
    	//if (verdenCheckBox.getValue())      list += ",'L-GRO'";
    	if (list.indexOf(",") == 0) list = list.substring(1);
    	list = "("+list+")";
    	return list;
    },
    formatKatImage: function(kat) {
		return "<img src='"+selectedSymbols[kat].url+"' style='cursor:pointer' width='18' height='18'></img>";
	},
	formatInfoImage: function() {
		return "<span style='cursor:pointer;text-decoration:underline;color:#0d426c'>Les artikkel</span>";
	},
	message: function(type,msg) {
		messageArea.attr("content", msg);
	}
});