







	



	


	


	

	
    
	


	


	
	

	
		
		
		
		
		  
		
		

		
		
	
	
	
	
	
	


// <script>
// Copyright (C) FastROI Oy, 2008 

var map; // the Map
var popup=""; // the popup for info
var base_layer; // background layer
var overlay_layer; // vector layer
var selectControl; // does selections

var skirule, skatingrule, allrule;

var latu2FIDMap;  // Map from latuID's to array of FID's
var fid2latuMap;  // Map from FID's to array of latuID's
var zoomTimer;    // timer for delayed zoom

var fid2StatusMap = new Object();  // Map from FID to special color
//var typeStyleMap;  // style which only uses latutype for styling.
var statusStyleMap;  // style which uses fid2StatusMap and latutype to determine color.

var inOnSelect = false;  // semaphore to prevent unnesessary event propagation

var latuColorSelected = "yellow";
var latuColorGood = "blue";
var latuColorBad = "gray";
var latuColorWeak = "gray";
var latuColorUnknown = "#a32";
var latuOpacitySelected = "0.9";
var latuOpacityDefault = "0.9";
var latuOpacityZero = "0.0";
//var latuWidthDefault = 6;
//var latuWidthSelected = 8;
var mapBounds = new OpenLayers.Bounds(500000,6858000,884000,7050000);
var oldBounds = new OpenLayers.Bounds(500000,6858000,884000,7050000); // dummy bounds
var initialMapBounds = new OpenLayers.Bounds(627000,6941448,648045,6951988);
var initialZoomTo = -1;
var initialCenter = new OpenLayers.LonLat(0, 0);

var $latuTabs;




// gets Feature object from overlay_layer by FID
function getFeatureByFID(fid) {
	//TBD - would it be more efficient to use a hash for this.features?
	var feature = null;
	for(var i=0, len=overlay_layer.features.length; i<len; ++i) {
		if(overlay_layer.features[i].fid == fid) {
			feature = overlay_layer.features[i];
			break;
		}
	}
	return feature;
}


// zooms to selection from overlay_layer
function zoomToSelection() {
	var maxExtent = null;
	if (overlay_layer.selectedFeatures && (overlay_layer.selectedFeatures.length > 0)) {
		maxExtent = overlay_layer.selectedFeatures[0].geometry.getBounds();
		for(var i=0, len=overlay_layer.selectedFeatures.length; i<len; i++){
			maxExtent.extend(overlay_layer.selectedFeatures[i].geometry.getBounds());
		}
		
		map.zoomToExtent(maxExtent);
	}
}

// zooms to selection with short timer to allow UI first update
function zoomToSelection_withTimer() {
	if (zoomTimer) {
		window.clearTimeout(zoomTimer);  
	}
	zoomTimer = window.setTimeout(zoomToSelection,1);
}

function selectLatuAndTab(name, noZoom, tabNum) {
	selectLatu(name, noZoom);
	$latuTabs.tabs('select', tabNum);
}

function selectLatuAndTabAuto(name, noZoom) {
	selectLatu(name, noZoom);
	
	// find tabindex.. "#fragment-1", "#fragment-1_2"
	temp = jQuery('#l_'+name).parents("div#fragment-1").length;
	if(temp>0){
		changeRule('ski');
	}
	temp = jQuery('#l_'+name).parents("div#fragment-1_2").length;
	if(temp>0){	
		changeRule('skating');
	}
	
}



// selects all vector with specified latuID
// also selects from left hand menu
function selectLatu(name, noZoom) {

	//--selecting right tab based on  latuname----
	temp = jQuery('#l_'+name).parents("div#fragment-1").length;
	if(temp>0) $latuTabs.tabs('select', 0);
	temp = jQuery('#l_'+name).parents("div#fragment-1_2").length;
	if(temp>0) $latuTabs.tabs('select', 1);
	//------
	
	//alert("selectLatu...");
	// debug time
	//var currentDate = new Date();
	
	var startTime = new Date().getTime();

	inOnSelect = true;
	//jQuery('#fragment-1 > div').removeClass('left_items_selected');
	
	jQuery('#accordion div').removeClass('left_items_selected');
	jQuery('#accordion2 div').removeClass('left_items_selected');
	jQuery('#l_'+name).addClass('left_items_selected');
	
	// handle "info color" change when "latu" becomes selected... 
	//jQuery('#fragment-1 > div > ul > li > span').removeClass('color_span_selected');
	//jQuery('#l_'+name+' > ul > li > span').addClass('color_span_selected');
	
	jQuery('#accordion div > span').removeClass('color_span_selected');
	jQuery('#accordion2 div > span').removeClass('color_span_selected');
	jQuery('#l_'+name+' > span').addClass('color_span_selected');
	
	
	// activate proper accordion...
	 accoH = jQuery('#l_'+name).parent().prev();
	 
	 if(accoH.hasClass('ui-accordion-header') && !accoH.hasClass('ui-state-active')){	 
	 	jQuery('#accordion').accordion( 'activate' , accoH ); 
	 	jQuery('#accordion2').accordion( 'activate' , accoH ); 
	 }
	
	 
	// debug jquery delay...
	var jqueryTime = new Date().getTime() - startTime;



	selectControl.unselectAll();
	
	// debug unselect delay...
	var unSelectTime = new Date().getTime() - startTime;
	
 
	var key = name.replace(/ /g,'').toLowerCase();
	var values = latu2FIDMap[key];
	//alert("key" + key + "    " + values);
	if (values) {
		for(var index in values) {
			var value = values[index];
			//alert("v:"+value);
			var feature = getFeatureByFID(value);
			//alert("f:"+feature);
			if (feature) {
				selectControl.select(feature);
				//alert("lkkl"); 
			}
		}
//-----test		
 popup = new OpenLayers.Popup.FramedCloud('me',
 	                           feature.geometry.getBounds().getCenterLonLat(),
    	                        null,
    	                        jQuery("#latuinfodiv_"+name).html(),
    	                        null, true
            	              );
					          feature.popup = popup;
            				  map.addPopup(popup,true);		
		
	}
//-----test	

	
	// debug select delay...
	var selectTime = new Date().getTime() - startTime;	
	
	inOnSelect = false;
	// since this is event handler and it seems that rendering happens only after
	// completing the event handler we move map in separate "thread" after other
	// selection indicators ale updated
	if(noZoom==null || noZoom==false){
		//zoomToSelection(); 
		zoomToSelection_withTimer(); 
		// use anchor to jump proper part of the left side menu
		// should be used only when selecting from map..
		if(noZoom==null){
			window.location.href = "#" + "l_" + name;
		}
	} else{
		//alert(map.getExtent() + "---" + (new OpenLayers.Bounds(629370,6941448,648045,6951988)));
		//if(!map.getExtent().equals(new OpenLayers.Bounds(629370,6941448,648045,6951988))){
		if(!map.getExtent().equals(oldBounds)){
			//map.zoomToExtent(new OpenLayers.Bounds(629370,6941448,648045,6951988));
			
			map.zoomToExtent(initialMapBounds); // was mapBounds
			
			//map.zoomToMaxExtent();
		}
		
		
		
		
		
		
	}
	// debug mapzoom delay...
	var zoomTime = new Date().getTime() - startTime;	
	
	//alert("jqueryTime:" + jqueryTime + ", unSelectTime:" + unSelectTime + ", selectTime:" + selectTime + ", zoomTime:" + zoomTime);
	oldBounds = map.getExtent();
	
	
}




// finds array of latunames by FID
function findLatuNamesFromFID(fid) {
	return fid2latuMap[fid];
}


function changeRule(rule) {
	
	if(rule=="ski"){
		overlay_layer.styleMap.styles["default"]=skirule;
	}else if(rule=="skating"){
		overlay_layer.styleMap.styles["default"]=skatingrule;
	}else if(rule=="all"){
		overlay_layer.styleMap.styles["default"]=allrule;
	}
	if(popup!="") map.removePopup(popup); 
	overlay_layer.redraw()
}


// sets latulistContents from ajax
function setLatuListHTML(response) {
	OpenLayers.Util.getElement('fragment-1').innerHTML = response.responseText;	
	var refreshdata = OpenLayers.Util.getElement('refreshdata').innerHTML; 
	//alert(refreshdata);
	eval(refreshdata);
	//alert('doAccordion');
	jQuery("#accordion").accordion({
		icons: {
			header: "ui-icon-circle-arrow-e",
			headerSelected: "ui-icon-circle-arrow-s"
		},
		header: 'h3',
		autoHeight: false,
		collapsible: true,
		navigation: false,
		active: -1
	});
	jQuery("#accordion").css('visibility', 'visible');
	
}
// sets lustelulistContents from ajax
function setLuisteluListHTML(response) {
	OpenLayers.Util.getElement('fragment-1_2').innerHTML = response.responseText;
		
	var refreshdata2 = OpenLayers.Util.getElement('refreshdata2').innerHTML; 
	
	
	eval(refreshdata2);
	
	jQuery("#accordion2").accordion({
		icons: {
			header: "ui-icon-circle-arrow-e",
			headerSelected: "ui-icon-circle-arrow-s"
		},
		header: 'h3',
		autoHeight: false,
		collapsible: true,
		navigation: false,
		active: -1
	});
	jQuery("#accordion2").css('visibility', 'visible');
	
}

// sets mapping from latuname to fid from file latu2shpid.json
function setLatu2FIDMap(response) {
	latu2FIDMap = eval('('+response.responseText+')');

	fid2latuMap = new Array();
	for(var latuName in latu2FIDMap) {
		for(var fidIndex in latu2FIDMap[latuName]) {
			var fid = latu2FIDMap[latuName][fidIndex];
			if (!fid2latuMap[fid]) {
				fid2latuMap[fid] = new Array();
			}
			fid2latuMap[fid].push(latuName);
		}
	}
}


// event handler for clicking on feature on map
function onSelectFeatureFromMap(feature) {
	//alert("onSelectFeatureFromMap");
  if (feature.layer == overlay_layer) {

	if (inOnSelect) {
		return;
	}
	inOnSelect = true;

	var fid = feature.fid;

	var latuNames = findLatuNamesFromFID(fid);
	var found = false;

	if (latuNames) {
		if (latuNames[0]) {
			selectLatu(latuNames[0]);
			//alert(latuNames[0] + " " + feature.geometry.getBounds().getCenterLonLat());
			
			   popup = new OpenLayers.Popup.FramedCloud('me',
 	                           feature.geometry.getBounds().getCenterLonLat(),
    	                        null,
    	                        jQuery("#latuinfodiv_"+latuNames[0]).html(),
    	                        null, true
            	              );
					          feature.popup = popup;
            				  map.addPopup(popup,true);
			
			
			
			found=true;
		}
	}
	
	// if selection is not found on our map, show fid to user
	// should be disabled on end system...
	if (!found) {
		//alert("FID not found: "+fid);
	}else{
		// temp debug for finding ID... JJ
		//alert("FID found: "+fid);
	}
	
	inOnSelect = false;
  }	
}

// registers loadstart & loadend events for layer
function registerEvents(layer) {

    layer.events.register("loadstart", layer, function() {
        jQuery('#busyicon').css("visibility", "visible");
    });

    layer.events.register("loadend", layer, function() {
       jQuery('#busyicon').css("visibility", "hidden");
    });

}


 	
// main initialisation method
function init(){

    OpenLayers.ImgPath = '/LATUUI/script/OpenLayers/img/';
	
	var timeDebug = false;
	var startTime = new Date().getTime();
	var rdom = new Date().getTime() +  Math.random();
	
	// initialises latu2fid mapping
	OpenLayers.loadURL('data/latu2shpid.json', '?ts=' + rdom , null, setLatu2FIDMap);    

if(timeDebug) timeString = "OpenLayers.loadURL:" + (new Date().getTime() - startTime);	
	
	// creates left hand tabs
	$latuTabs = jQuery('#latutabs').tabs();
	jQuery('#latutabs').css("visibility", "visible");
	jQuery('#fragment-2').css("visibility", "visible");
	jQuery('#fragment-3').css("visibility", "visible");
	
	

	
	//OpenLayers.Feature.Vector.style['default']['strokeWidth'] = '4';
	//OpenLayers.Feature.Vector.style['select']['strokeWidth'] = '5';

	// parameters for jns_euref map
	var my_bounds = new OpenLayers.Bounds(500000,6858000,884000,7050000);
	var my_mapOptions = {theme: null, resolutions: [100.0, 50.0,25.0,10.0,5.0] ,maxExtent:my_bounds, projection:'EPSG:3067', units: 'm'};

	// parameters for digiroad map
	//var my_layerName = 'kartta';
	//var my_bounds = new OpenLayers.Bounds(3918700, 6649200, 4580716, 7780464);
	//var my_mapOptions = {'maxResolution': 4096, 'minResolution':1, 'maxExtent':my_bounds, 'projection':'EPSG:2394', units: 'm'};


	// initializes the map
	//map = new OpenLayers.Map( OpenLayers.Util.getElement('map'), OpenLayers.Util.extend({controls:[]},my_mapOptions));
	//map = new OpenLayers.Map( OpenLayers.Util.getElement('map'), OpenLayers.Util.extend({controls:[], restrictedExtent: new OpenLayers.Bounds(629370,6941448,648045,6951988)},my_mapOptions));
	//map = new OpenLayers.Map( OpenLayers.Util.getElement('map'), OpenLayers.Util.extend({controls:[], restrictedExtent: new OpenLayers.Bounds(628370,6940448,649045,6952988)},my_mapOptions));
	map = new OpenLayers.Map( OpenLayers.Util.getElement('map'), OpenLayers.Util.extend({controls:[], restrictedExtent: new OpenLayers.Bounds(500000,6858000,884000,7050000)},my_mapOptions));

if(timeDebug) timeString += "; new OpenLayers.Map:" + (new Date().getTime() - startTime);	

	/* 9.12.2008 
	var urlArray = ["http://map1.fastroi.fi/map/tilecache/tilecache.py?",
	                "http://map2.fastroi.fi/map/tilecache/tilecache.py?",
	                "http://map3.fastroi.fi/map/tilecache/tilecache.py?"];                            

	base_layer = new OpenLayers.Layer.WMS( "kartta",
			urlArray, {layers: my_layerName, format: 'image/png', transparent: 'off'},
			OpenLayers.Util.extend(
					{attribution:"&copy;FastROI 2010"}
					,my_mapOptions)
	);
	*/
	
	/* 9.12.2008 */
	base_layer = new OpenLayers.Layer.WMS( 'kartta',
//			"http://kartta.jns.fi/TeklaOGCWeb/WMS.ashx?",
//			"http://kunnossapito.jns.fi/WMS/cache?",
                        ["http://map5.fastroi.fi/map/tilecache/tilecache.py"],
	         {layers: 'Opaskartta', format: 'image/png', transparent: 'off'},
			OpenLayers.Util.extend(
					{attribution:"&copy;Joensuun kaupunki 2011", buffer:1}
					,my_mapOptions)
	); 

	
if(timeDebug) timeString += "; new OpenLayers.Layer.TileCache:" + (new Date().getTime() - startTime);	

	//(JJ) registering start and end event for base map, purpose to show "busy" icon during loading map tiles..
	registerEvents(base_layer);
	
	
	// creates style mapping
	var first = true;
	var statusContext = {
			
		getExternalGraphic : function(feature) {
			
			var foundColor = fid2StatusMap[feature.fid];
			
			
			
			if (foundColor==latuColorGood){ 
				return "images/jaakentta_default.png";
			}else if(foundColor==latuColorBad || foundColor==latuColorWeak) {
				return "images/jaakentta_notok.png";
			}else{
				
				return "";
				  
			}
		}, 			// method to determine color to use when drawing vector
		getColor : function(feature) {
			var foundColor = fid2StatusMap[feature.fid];
			//alert("foundColor=fid = " + foundColor);
			if (foundColor==latuColorGood || foundColor==latuColorBad || foundColor==latuColorWeak) {
			//alert("foundColor, fid = " + foundColor);
				return foundColor;
			}else{
				return latuColorUnknown;    
			}
		}, 
		
		getColor2 : function(feature) {
			var foundColor = fid2StatusMap[feature.fid];
			if (foundColor==latuColorGood || foundColor==latuColorBad || foundColor==latuColorWeak) {
				return latuColorSelected;
			}
			return latuColorUnknown;
		},
		
		getOpacity : function(feature) {
			var foundColor = fid2StatusMap[feature.fid];
			if (foundColor==latuColorGood || foundColor==latuColorBad || foundColor==latuColorWeak || foundColor==latuColorSelected) {
				return latuOpacityDefault;
			}
			return latuOpacityZero;
		},
		getOpacity2 : function(feature) {
			var foundColor = fid2StatusMap[feature.fid];
			if (foundColor==latuColorGood || foundColor==latuColorBad || foundColor==latuColorWeak || foundColor==latuColorSelected) {
				return latuOpacitySelected;
			}			
			return latuOpacityZero;
		},
		getZindex : function(feature) {

			if(feature.geometry.CLASS_NAME=='OpenLayers.Geometry.Point'){
				return 150;
			}else{
				return 100;
			}
			
		}		
		
		
	};
	// default drawing styles
	var statusTemplateDefault = {
			strokeColor : "$"+"{getColor}",
			strokeOpacity: "$"+"{getOpacity}",
			externalGraphic : "$"+"{getExternalGraphic}",
			graphicWidth: 32,
			graphicHeight: 32,
			graphicOpacity: "$"+"{getOpacity}",
			strokeWidth: 6,
			graphicZIndex: "$"+"{getZindex}"

	};				   
	var statusTemplateSelect = {
			strokeColor : "$"+"{getColor2}",
			strokeOpacity: "$"+"{getOpacity2}",
			externalGraphic : "images/jaakentta_selected.png",
			graphicWidth: 32,
			graphicHeight: 32,
			graphicOpacity: "$"+"{getOpacity2}",
			strokeWidth: 8 ,
			graphicZIndex: 1000
			
	};	

	

  var ruleTest1 = { context: statusContext, rules: [
                new OpenLayers.Rule({
                    filter: new OpenLayers.Filter.FeatureId({
 		               fids: ["FK0","FK1","FK2","FK3","FK4","FK5","FK6","FK7","FK8","FK9","FK10",
 		               		"FK11","FK12","FK13","FK14","FK15","FK16","FK17","FK18","FK19","FK20",
 		               		"FK21","FK22","FK23","FK24","FK25","FK26","FK27","FK28","FK29","FK30",
 		               		"FK31","FK32","FK33","FK34","FK35","FK36","FK37","FK38","FK39","FK40",
 		               		"FK41","FK42","FK43","FK44","FK45","FK46","FK47","FK48","FK49","FK50",
 		               		"FK51","FK52","FK53","FK54","FK55","FK56","FK57","FK58","FK59","FK60",
 		               		"FK61","FK62","FK63","FK64","FK65","FK66","FK67","FK68","FK69","FK70",
 		               		"FK101","FK102","FK106",
 		               		"FK110","FK111","FK113","FK115","FK117",
 		               		"FK127",
 		               		"FK200","FK201","FK202","FK203","FK204","FK205","FK206","FK207","FK208","FK209",
 		               		"FK210","FK211","FK212","FK213","FK214","FK215","FK216","FK217","FK218",
 		               		"FK410","FK430","FK435","FK440","FK460","FK465",
 		               		"FK658","FK659","FK660","FK661","FK662","FK663","FK664", 
 		               		"FK670","FK671","FK672", 
 		               		"FK680","FK681","FK682","FK690", 
 		               		"FK507","FK508","FK509","FK510","FK511","FK512"]
  				     }),
                    symbolizer: {
						display: "none"
                    }
                }),
                new OpenLayers.Rule({
                    elseFilter: true,
                    symbolizer: {
                    }
                })
            ]}

  var ruleTest2 = { context: statusContext, rules: [
                new OpenLayers.Rule({
                    filter: new OpenLayers.Filter.FeatureId({
 		               fids: ["FK0","FK1","FK2","FK3","FK4","FK5","FK6","FK7","FK8","FK9","FK10",
 		               		"FK11","FK12","FK13","FK14","FK15","FK16","FK17","FK18","FK19","FK20",
 		               		"FK21","FK22","FK23","FK24","FK25","FK26","FK27","FK28","FK29","FK30",
 		               		"FK31","FK32","FK33","FK34","FK35","FK36","FK37","FK38","FK39","FK40",
 		               		"FK41","FK42","FK43","FK44","FK45","FK46","FK47","FK48","FK49","FK50",
 		               		"FK51","FK52","FK53","FK54","FK55","FK56","FK57","FK58","FK59","FK60",
 		               		"FK61","FK62","FK63","FK64","FK65","FK66","FK67","FK68","FK69","FK70",
 		               		"FK101","FK102","FK106",
 		               		"FK110","FK111","FK113","FK115","FK117",
 		               		"FK127",
 		               		"FK200","FK201","FK202","FK203","FK204","FK205","FK206","FK207","FK208","FK209",
 		               		"FK210","FK211","FK212","FK213","FK214","FK215","FK216","FK217","FK218",
 		               		"FK410","FK430","FK435","FK440","FK460","FK465",
 		               		"FK658","FK659","FK660","FK661","FK662","FK663","FK664", 
 		               		"FK670","FK671","FK672", 
 		               		"FK680","FK681","FK682","FK690", 
 		               		"FK507","FK508","FK509","FK510","FK511","FK512"]
  				     }),
                    symbolizer: {
                    }
                }),
                new OpenLayers.Rule({
                    elseFilter: true,
                    symbolizer: {
                        display: "none"                                   
                    }
                })
            ]}

					   
	var statusStyleDefault = new OpenLayers.Style(statusTemplateDefault, {context: statusContext}); // {context: statusContext, ruleTest});
	var statusStyleSelect = new OpenLayers.Style(statusTemplateSelect, {context: statusContext});
	
	skirule = new OpenLayers.Style(statusTemplateDefault, ruleTest1);
	skatingrule = new OpenLayers.Style(statusTemplateDefault, ruleTest2);
	
	allrule = new OpenLayers.Style(statusTemplateDefault, {context: statusContext}); 
	
	
	

	var statusStyle = {
			'default' : statusStyleDefault,
			'select'  : statusStyleSelect
	};




	statusStyleMap = new OpenLayers.StyleMap(statusStyle);


if(timeDebug)  timeString += "; statusStyleMap:" + (new Date().getTime() - startTime);	

	/*           
           // create a styleMap with a custom default symbolizer
           typeStyleMap = new OpenLayers.StyleMap({
           'default' : {
               strokeOpacity: 0.5,
               strokeWidth: 4},
           'select' : {
               strokeOpacity: 0.9,
               strokeWidth: 6}
           });

			// create a lookup table with different symbolizers for 0, 1 and 2
           var lookup = {
               21031104: {strokeColor: "yellow"}, // valaistu
               21031105: {strokeColor: "blue", strokeWidth: 2}, // perinteinen
               21031106: {strokeColor: "blue"}, // helppo
               21031107: {strokeColor: "red"}, // keskivaikea
               21031108: {strokeColor: "black"}, // vaikea
               21031109:  {strokeColor: "blue"} // vaikea
           }

           // add rules from the above lookup table, with the keyes mapped to
           // the "type" property of the features, for the "default" intent
           typeStyleMap.addUniqueValueRules("default", "laji", lookup);
	 */

	// creates KKJ4 latu vectors
	//overlay_layer = new OpenLayers.Layer.GML("Ladut", "data/ladut.gml", {
	//    styleMap: typeStyleMap, visibility: false, projection:'EPSG:2394'
	//});
	
	// creates EUREF (TM35) latu vectors
	//overlay_layer = new OpenLayers.Layer.GML("Ladut", "data/ladut_euref.gml", {
	overlay_layer = new OpenLayers.Layer.GML("Ladut", "data/ladut_euref.gml" + "?ts=" + rdom, {
		styleMap: statusStyleMap, visibility: false, projection:'EPSG:3067'
	});
	//overlay_layer = new OpenLayers.Layer();
	
if(timeDebug)  timeString += "; overlay_layer :" + (new Date().getTime() - startTime);	
	

	
	// add layers
	map.addLayers([base_layer,overlay_layer]);
	//map.addLayers([base_layer]);
	
	var selectableLayers = new Array();

	
	var messageLayer = new OpenLayers.Layer.Vector("Huomiot",{
        	visibility : true,
	        projection: new OpenLayers.Projection("EPSG:2394"),
            strategies: [new OpenLayers.Strategy.Fixed()],
            protocol: new OpenLayers.Protocol.HTTP({
                url: "/LATUUI/latuMark.html",
                format: new OpenLayers.Format.GeoJSON( )
            }),
            
            styleMap: new OpenLayers.StyleMap(
              {
                graphicName : "star",
                graphicTitle : "$"+"{note}",
                pointRadius : 20,
                fillColor: "#ee9900",
                strokeColor: "#99ee00"
              }
            )
	});
	
	map.addLayers([messageLayer]);
	
	selectableLayers.push(messageLayer); 
	
	
    	

	
	// create map controls
	// default controls
	map.addControl(new OpenLayers.Control.Navigation());
	map.addControl(new OpenLayers.Control.PanPanel());
	map.addControl(new OpenLayers.Control.ZoomPanel());
	map.addControl(new OpenLayers.Control.ArgParser());

	map.addControl(new OpenLayers.Control.Permalink());
	
    /*  Enable for measure tool
    // style the sketch fancy
    var sketchSymbolizers = {
        "Point": {
            pointRadius: 4,
            graphicName: "square",
            fillColor: "white",
            fillOpacity: 1,
            strokeWidth: 1,
            strokeOpacity: 1,
            strokeColor: "#333333"
        },
        "Line": {
            strokeWidth: 3,
            strokeOpacity: 1,
            strokeColor: "#666666",
            strokeDashstyle: "dash"
        }
    };
    var style = new OpenLayers.Style();
    style.addRules([
        new OpenLayers.Rule({symbolizer: sketchSymbolizers})
    ]);
    var styleMap = new OpenLayers.StyleMap({"default": style});
    
    var options = {
        handlerOptions: {
            style: "default", // this forces default render intent
            layerOptions: {styleMap: styleMap},
            persist: true
        }
    };
	
    function handleMeasurements(event) {
        var geometry = event.geometry;
        var units = event.units;
        var order = event.order;
        var measure = event.measure;
        var element = document.getElementById('moutput');
        var out = "";
        if(order == 1) {
            out += "measure: " + measure.toFixed(3) + " " + units;
        } else {
            out += "measure: " + measure.toFixed(3) + " " + units + "<sup>2</" + "sup>";
        }
        element.innerHTML = out;
    }
    
    
	var toolBar = new OpenLayers.Control.NavToolbar();
	var measure = new OpenLayers.Control.Measure(
	          OpenLayers.Handler.Path, options
    );
	measure.events.on({
        "measure": handleMeasurements,
        "measurepartial": handleMeasurements
    });
	
	toolBar.addControls([measure]);
	map.addControl(toolBar);
	
	*/
	
	/*
	 * For history control
	var historyPanel = new OpenLayers.Control.Panel();
	var history = new OpenLayers.Control.NavigationHistory();
	historyPanel.addControls([history.previous,history.next]);

	map.addControl(history);
	map.addControl(historyPanel);
    */

	//map.addControl(new OpenLayers.Control.LayerSwitcher());
	map.addControl(new OpenLayers.Control.Attribution());
	//map.addControl(new OpenLayers.Control.ScaleLine({bottomOutUnits:'',bottomInUnits:''}));
	
	




					  	 				      
	 				      
    	                
    	                         
        	                     
 	
	selectableLayers.push(overlay_layer);


	
	
	selectControl = new OpenLayers.Control.SelectFeature(selectableLayers,
			{
		multiple: true, hover: false, clickout: false, onSelect: onSelectFeatureFromMap
			});

	map.addControl(selectControl);
	selectControl.activate();            

if(timeDebug)  timeString += "; selectControls:" + (new Date().getTime() - startTime);

//	if (!map.getCenter()) map.zoomToMaxExtent();
//	if (!map.getCenter()) map.zoomToExtent(new OpenLayers.Bounds(629370,6941448,648045,6951988));





	
	
	
	
	if(initialZoomTo>-1){
		//map.zoomTo(initialZoomTo);
		map.setCenter(initialCenter, initialZoomTo); 
	}else if (!map.getCenter()){
		 map.zoomToExtent(initialMapBounds);
	}
	
	
	



	overlay_layer.setVisibility(true);
	
if(timeDebug)  timeString += "; zoomToExtent:" + (new Date().getTime() - startTime);	
	
	OpenLayers.loadURL('latuui/loadLatuStatusListAccordion.html', '?ts=' + rdom, null, setLatuListHTML);


	
if(timeDebug)  timeString += "; OpenLayers.loadURL('latuui/loadLatuStatusListAccordion.html:" + (new Date().getTime() - startTime);	 

  if(timeDebug) alert(timeString);
  oldBounds = map.getExtent();


}
// ----------------------------</script>

