var map;
OpenLayers.ProxyHost = '';
var minlat,maxlat,minlon,maxlon;
var idArray;
var markers;
var markerstring  = '';
var baseLayer;
var SKBAATTokenKey;

AutoSizeAnchoredBubble2 = OpenLayers.Class(OpenLayers.Popup.AnchoredBubble, {
	'autoSize': true
});

function setSKBAATTokenKey(value) {
	SKBAATTokenKey = value;
}

function mapinit(){
	var mapOptions = {
		//controls: [],
		projection: "EPSG:32633",
		units: "m",
		maxResolution: 5416,
		maxExtent: new OpenLayers.Bounds(-2500000,3500000,3045984,9045984),
		numZoomLevels: 16
	  };

    //kart
    map = new OpenLayers.Map("map", mapOptions);

	baseLayer = new OpenLayers.Layer.WMS('Topografisk norgeskart2', ['http://gatekeeper1.geonorge.no/BaatGatekeeper/gk/gk.cache?gkt='+SKBAATTokenKey], {layers: 'topo2', format: 'image/jpeg'}, {buffer: 1});
	baseLayer.setIsBaseLayer(true);
	map.addLayer(baseLayer);

	svalbard = new OpenLayers.Layer.WMS('Svalbard', ['http://ogc.difi.no/ogc/svalbard.php'], {layers: 'svalbard_alle_tema', format: 'image/gif', transparent: true}, {singleTile: true});
	svalbard.setIsBaseLayer(false);
	map.addLayer(svalbard);

	markers= new OpenLayers.Layer.Markers("etater");
	map.addLayer(markers);
}

function processGEOJSON(data){
	var mgj = new OpenLayers.Format.GeoJSON();
	var ve = mgj.read(data.responseText);
	setOverlayIcons(ve);
}

function setOverlayIcons(vek) {
	if (vek != undefined) {
		var size   = new OpenLayers.Size(20,20);
		var offset = new OpenLayers.Pixel(-(size.w/2), -size.h/2);

		for (i=0; i<vek.length; i++) {
			var feature = vek[i];
			var ll = new OpenLayers.LonLat(feature.geometry.x,feature.geometry.y);
			var newdata = feature.data;
			var row = idArray.revIndexOf(feature.fid);
			if (row == 0) {
				var icon   = new OpenLayers.Icon('/naeromraade/lib/img/pentagon_blue.gif',new OpenLayers.Size(10,10),offset);
				newdata.icon = icon;
				var newfeature = new OpenLayers.Feature(markers, ll, newdata);
				marker = newfeature.createMarker({'numZoomLevels':25});
				markers.addMarker(marker);
			} else {
				var icon = new OpenLayers.Icon('/naeromraade/lib/img/blue_'+row+'.gif',size,offset);
				icon.imageDiv.id = feature.fid
				newdata.icon = icon;

				var contentHTML = '<div style="font-weight:bold;color:#4B7A98;padding:3px;background:#FFFFFF;filter:alpha(opacity:85);opacity:0.85;">';
				contentHTML += '<a class="link" href="'+feature.data.url+'" target="_blank">';
				contentHTML += feature.data.title ;
				contentHTML += '</a><br/>';
				contentHTML += '</div>';
				renderMarker(ll, AutoSizeAnchoredBubble2, contentHTML, icon, true, false);
			}
			findBounds(ll);
		}
		setBounds();
	}
}

function renderMarker(ll, popupClass, popupContentHTML, icon, closeBox, overflow) {
 	var feature = new OpenLayers.Feature(markers, ll);
	feature.closeBox = closeBox;
	feature.popupClass = popupClass;
	feature.data.popupContentHTML = popupContentHTML;
	feature.data.overflow = (overflow) ? "auto" : "hidden";
	feature.data.icon = icon;

	var marker = feature.createMarker();

	var markerClick = function (evt) {
		try {
			if (this.popup != currentPopup)
				currentPopup.hide();
		}
		catch (ex) {}
		if (this.popup == null) {
			this.popup = this.createPopup(this.closeBox);
			map.addPopup(this.popup);
			this.popup.show();
		} else {
			this.popup.toggle();
		}
		currentPopup = this.popup;
		OpenLayers.Event.stop(evt);
	};

	marker.events.register("click", feature, markerClick);
	marker.events.register("mouseover", feature, markerClick);

	markers.addMarker(marker);
}

function findBounds(lonlat) {
	if (lonlat.lat<minlat || minlat == undefined)
 		minlat = lonlat.lat;
	if (lonlat.lat>maxlat || maxlat == undefined)
		maxlat = lonlat.lat;
	if (lonlat.lon<minlon || minlon == undefined)
		minlon = lonlat.lon;
	if (lonlat.lon>maxlon || maxlon == undefined)
		maxlon = lonlat.lon;
}

function setBounds(){
	var difflat = maxlat - minlat;
	var difflon = maxlon - minlon;
	
	if  (!(difflat==difflat==0)){
		if (difflat<0.1) {
			difflat = 0.10;
		}
		if (difflon<0.10) {
			difflon = 0.10;
		}
		if (difflat<1.4*difflon){
			difflat=1.5*difflon;
		}
		bounds = new OpenLayers.Bounds();
		bounds.left  = minlon - (0.03 * difflon);
		bounds.right  =maxlon + (0.03 *difflon);
		bounds.top = maxlat + (0.15 * difflat);
		bounds.bottom = minlat - (0.15 * difflat);
		
		if (minlat > 8400000)  //svalbard
			map.setCenter(new OpenLayers. LonLat(minlon, minlat), 5, false, false); 
		else if (difflon < 1)
			map.setCenter(new OpenLayers. LonLat(minlon, minlat), 14, false, false); 
		else 
			map.zoomToExtent(bounds);
		
	} else {
		map.zoomToExtent(new OpenLayers.Bounds(-241000, 6237500, 1283000, 7961500));
	}
}

function toggle(id){
	var st = id + "_innerImage";
	var ele = document.getElementById(st)
	var ele2 = document.getElementById(id)
	var imgsrc

	try{
		if (ele.src.match("blue") == "blue"){
			imgsrc = ele.src.replace("blue","orange");
			ele.src = imgsrc;
			ele2.style.zIndex = '5000';
		}
		else {
			imgsrc = ele.src.replace("orange", "blue");
			ele.src = imgsrc;
			ele2.style.zIndex = '0';
		}
		ele2.click();
	}
	catch(err) {
	}

}

function initMarkers(id){
	markerstring = id+ ",";
}

function addMarker(id){
	markerstring += id + ",";
}

function endInit(){
	markerstring = markerstring.substring(0, markerstring.length -1);
	idArray = markerstring.split(",");
	var url = "/naeromraade/geojson.asp?tailid="+markerstring+"&type=multiple"
	var responseObj = new OpenLayers.Ajax.Request(url,{onComplete: function(transport) {processGEOJSON(transport); }})
}

Array.prototype.indexOf = function( v, b, s ) {
	for( var i = +b || 0, l = this.length; i < l; i++ )
 	{
		if( this[i]===v || s && this[i]==v )
  			{ return i; }
 	}
	return -1;
};

Array.prototype.revIndexOf = function( v, b, s ) {
	for( var i = this.length-1; i > -1; i-- )
	{
		if( this[i]===v || s && this[i]==v )
			{ return i; }
	}
 	return -1;
};

