// Functions for skyddad natur

// Array which defines which services that should be checked/unchecked at session startup/init.
// Format: (Service (Alias from faces-config), true=Keep checked/false=uncheck)
var services = new Array(
	"Riksintresse",				"false",
	"Mark\xE4garkartor",		"false",
	"Planeringsunderlag",		"false",
	"N2000 Ramvatten",			"false",
	"Naturtypskartering",		"false",
	"Skyddade Omr\xE5den",		"true",
	"Kartbakgrund",				"true");

function init() {

   if(NiftyCheck()){
     roundcorners();
   }

   getDivStyleCookies();
   getVisibilityCookies();
   
   initToc();
   
   Function.prototype.print = print;	
   
   initSlider();
   //register postback tag handler
  EsriControls.addPostBackTagHandler("scale", scaleTagHandler);
}

// Checks if the services should be checked or unchecked.
function initToc() {
	//At sesssion start "ServicesHidden" is not set
	if(getCookie("ServicesHidden") == null){
		var toc = EsriControls.tocs["toc1"];
		var snNodes = toc.nodes;
		for (var i=0; i < snNodes.length; i++) {
			var node = snNodes[i];
			if (!keepServiceChecked(node)) {
				toc.checkedNodeOperation(i, false);
			}
		}
   		setCookie("ServicesHidden", "true");
  	}
}

// Returns false if service should be unchecked.
function keepServiceChecked(node) {
	var index = services.indexOf(node.label);
	if (index > -1) {
		var aServiceChecked = services[index + 1];
		if (aServiceChecked == "false") {
			return false;
		}
	}
	return true;
}

/* Process postback xml response and update content */
function scaleTagHandler(xml, eventSources) {
  //update elements on page with values
  var aScaleLabel = document.getElementById("frmMap:map-scale");
  var aNewScaleValue = xml.getElementsByTagName("map-scale").item(0).firstChild.nodeValue;
  aScaleLabel.value = aNewScaleValue
}

function initSlider() {
	if(typeof EsriControls != "undefined"){
		var map = EsriControls.maps["map1"];

	 	for (var i=0; i < map.mapSourceNames.length; i++) {
			if (map.mapSources[map.mapSourceNames[i]].type == "tile") {
				var aNumberOfSegments = (map.mapSources[map.mapSourceNames[i]].numLevels) ? (map.mapSources[map.mapSourceNames[i]].numLevels - 1) : 12;
				var slider = new EsriMapSlider("mySlider", null, map.id, aNumberOfSegments, 0);
			 	slider.isHorizontal = true;
				slider.init(document.getElementById("slider"));
				slider.update(map);
				break;
			}
		}
	}
}    
        
function initTimeout() {
   if(NiftyCheck()){
	Rounded("div#timeoutborder","all","transparent","#9CBDDE");
	Rounded("div#timeout","all","#9CBDDE","#FFFFFF");
   }
}

function saveDivCookies() {
   setAllDivStyleToCookie();
}

function PrintTool(id, toolName) {
        this.inheritsFrom(new EsriToolItem(id, toolName, null, false));

        this.activate = function() {
          window.open('/skyddadnatur/indexPrintMap.htm', 'Utskriftkarta', 'width=1005, height=600, resizable=yes, status=yes');
        }
}

function HideDivsTool(id, toolName) {
        this.inheritsFrom(new EsriToolItem(id, toolName, null, false));

        this.activate = function() {
        	hideAllDivs();
        }
}
 
function ShowDivsTool(id, toolName) {
        this.inheritsFrom(new EsriToolItem(id, toolName, null, false));

        this.activate = function() {
          resetDivs();
        }
}

function CustomMapPoint(id, toolName) {
	this.inheritsFrom(new EsriMapToolItem(id, toolName, new EsriDrawPointAction(), false));
	this.isPin = false;
	var self = this;

	this.update = function() { 
		self = this; 
	}
	
	this.postAction = function(point) {
	    self.update();

	    // idenify must have clientpostback=false because the entire webpage must be refreshed to see objectdetails.
	    self.clientPostBack = false;

	    var map = self.control;
	
	    if (self.isMarker) {
	      	if (self.isPin) {
	      		map.graphics.drawPin(point);
	      	} else {
	      		map.graphics.drawPoint(point);
	      	}
		} else {
	    	if (self.showLoading) map.showLoading();
	   		point = point.offset(-map.viewBounds.left, -map.viewBounds.top);
	
	    	EsriUtils.addFormElement(map.formId, map.id, map.id);
	    	EsriUtils.addFormElement(map.formId, map.id + "_mode", self.id);
	    	EsriUtils.addFormElement(map.formId, map.id + "_minx", point.x);
	    	EsriUtils.addFormElement(map.formId, map.id + "_miny", point.y);
	    	if (self.clientPostBack) {
	     		EsriUtils.addFormElement(map.formId, "doPostBack", "doPostBack");
	     	}
	    	EsriUtils.submitForm(map.formId, self.clientPostBack, EsriControls.processPostBack);
	    	setDetailsVisibility('visible'); 
	    }
    }
}

		
function refreshMap() {
	var map = EsriControls.maps["map1"];
	
	//for (var i=0; i < map.mapSourceNames.length; i++) {
		if (map.mapSources[map.mapSourceNames[0]].type == "tile") {
			var aCurrentLevel = 11;//map.mapSources[map.mapSourceNames[i]].level;
			
			var params = "doContinuousPan=doContinuousPan&changeLevel=changeLevel&source=" 
				+ "tile" + "&formId=" + map.formId + "&mapId=" + map.id + 
				"&level=" + aCurrentLevel + "&factor=" + (1.0 + aCurrentLevel) + "&" + EsriUtils.buildRequestParams(map.formId);
			
			var xh = EsriUtils.sendAjaxRequest(EsriUtils.getServerUrl(map.formId), params, false, function() { EsriControls.processPostBack(xh); });
		}
	//}
}
     
function zoomTo(value) {
	alert(value);
}
	
		  
function onEnter( evt) {
	var keyCode = null;

	if( evt.which ) {
  		//alert('check code');
  		keyCode = evt.which;
	}
	else if( evt.keyCode ) {
  		keyCode = evt.keyCode;
	}

	if( 13 == keyCode ) {
    	document.getElementById("frmMap:cmdQuery").click();
    	return false;
	} else {
		return true;
	}
}


function doSubmit(){
  if(checkYear(document.getElementById("frmMap:textFromYear")) == false){
    return false;
  }
  else if(checkYear(document.getElementById("frmMap:textToYear")) == false){
    return false;
  }
  else if(checkCountyAndName() == false){
    return false;
  }
  else {
  	showLoading();
    return true;
  }
}

function showLoading() {
	showDiv('laddbild');
	hideDiv('resultborder');
	hideDiv('result');
	setResultVisibility('visible');
	setDetailsVisibility('hidden');
	setAllDivStyleToCookie();
}

function roundcorners() {
   Rounded("div#searchborder","all","transparent","#9CBDDE");
   Rounded("div#search","all","#9CBDDE","#FFFFFF");

   Rounded("div#latestborder","all","transparent","#9CBDDE");
   Rounded("div#latest","all","#9CBDDE","#FFFFFF");

   Rounded("div#tocborder","all","transparent","#9CBDDE");
   Rounded("div#toc","all","#9CBDDE","#FFFFFF");

   Rounded("div#teckenborder","all","transparent","#9CBDDE");
   Rounded("div#tecken","all","#9CBDDE","#FFFFFF");

   Rounded("div#toolsborder","all","transparent","#9CBDDE");
   Rounded("div#tools","all","#9CBDDE","#FFFFFF");

   Rounded("div#resultborder","all","transparent","#9CBDDE");
   Rounded("div#result","all","#9CBDDE","#FFFFFF");

   Rounded("div#detailsborder","all","transparent","#9CBDDE");
   Rounded("div#details","all","#9CBDDE","#FFFFFF");
 
}


	// Check if button's tool is an active tool when cursor moves off button.
	function ButtonOut(id, control, tool, flatimage, downimage) {
		var ff = document.forms;
		var f = document.forms[docFormID];
		var m = control + "_mode";
		var mode = f.elements[m].value;
		var imgsrc = flatimage;
		if (mode == tool) {
			imgsrc = downimage;
		}
		var imgObj = document.getElementById(id);
		if(imgObj != null)
			imgObj.src = imgsrc;
	}

	function setCookie(name, value, expires, path, domain, secure) {
    document.cookie= name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires.toGMTString() : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
	}

	function getCookie(name) {
    	var dc = document.cookie;
    	var prefix = name + "=";
    	var begin = dc.indexOf("; " + prefix);
    	if (begin == -1) {
        	begin = dc.indexOf(prefix);
        	if (begin != 0)
        		return null;
    	}
    	else {
        	begin += 2;
    	}
    	var end = document.cookie.indexOf(";", begin);
    	if (end == -1) {
        	end = dc.length;
    	}
    	return unescape(dc.substring(begin + prefix.length, end));
	}


	function hideDiv(theDivId) {
		var aDivElement = document.getElementById(theDivId);
		aDivElement.style["visibility"] = "hidden";
	}

	function showDiv(theDivId) {
		var aDivElement = document.getElementById(theDivId);
		aDivElement.style["visibility"] = "visible";
	}

	function showTocload() {
		var tocloaddiv = document.getElementById("laddbildtoc");
		var tocloaded = document.getElementById("tocloaded");
		tocloaddiv.style["visibility"] = "visible";
	}

	function hideAllDivs() {
		hideDiv("searchborder");
		hideDiv("search");
		hideDiv("searchbutton");
		hideDiv("advancedsearch");
		hideDiv("latestborder");
		hideDiv("latest");
		hideDiv("teckenborder");
		hideDiv("tecken");
		hideDiv("ovmap");
		hideDiv("moresearch");
		hideDiv("simplesearch");
		hideDiv("result");
		hideDiv("resultborder");
		hideDiv("detailsborder");
		hideDiv("details");
		hideDiv("tocborder");
		hideDiv("toc");

		setResultVisibility("hidden");
		setDetailsVisibility("hidden");
	}

	function resetDivs() {

		initVisibility();

		showDiv("advancedsearch");
		showDiv("searchbutton");
		showDiv("advancedsearch");

		hideDiv("moresearch");

		search.style["height"] = "160";
		searchborder.style["height"] = "190";
		searchbutton.style["top"] = "140";

		document.getElementById("latestborder").style["height"] = "126";

	}

	function checkCountyAndName() {
		var countyField = document.getElementById("frmMap:selectCounty");
		var county = countyField.options[countyField.selectedIndex].value;

		var municipalityField = document.getElementById("frmMap:selectMunicipality");
		var municipality = municipalityField.options[municipalityField.selectedIndex].value;

		var nameField = document.getElementById("frmMap:textObjectname")
		var name = nameField.value;

		if(county == "-1" && municipality == "-1" && name.length==0) {
			alert( "V\u00E4lj l\u00E4n eller kommun aller ange ett namn." );
			nameField.focus();
			return false;
		}
		else return true;
	}


	function checkYear(enteredYear){
		var strYear = enteredYear.value;

		if(strYear.length >0) {
			if(strYear.length < 4) {
				alert( "\u00C5r m\u00E5ste anges med 4 siffror." );
				enteredYear.focus();
				return false;
			}
	  		if ( isNaN( strYear ) ){
				alert( "Endast siffror \u00E4r till\u00E5tet." );
				enteredYear.focus();
				return false;
	  		}
	  		if (strYear=="0000"){
				alert( "Ej ett giltigt \u00E5rtal." );
				enteredYear.focus();
				return false;
	  		}
			else return true;
		}
		else return true;
	}

	//  Set all tool buttons to the flat look then highlight the selected tool.
	function HighlightTool(tool)
	{
		if ((tool!=null) && (tool!=""))
		{
			document.images["imgZoomIn"].src = "images/zoom_in_off.gif";
			document.images["imgZoomOut"].src = "images/zoom_out_off.gif";
			document.images["imgPan"].src = "images/pan_off.gif";
			document.images["imgIdentify"].src = "images/info_off.gif";
			switch (tool)
			{
				case "ZoomIn":
					document.images["imgZoomIn"].src = "images/zoom_in_on.gif";
					break;
				case "ZoomOut":
					document.images["imgZoomOut"].src = "images/zoom_out_on.gif";
					break;
				case "Pan":
					document.images["imgPan"].src = "images/pan_on.gif";
					break;
				case "Identify":
					document.images["imgIdentify"].src = "images/info_on.gif";
					break;
				default:
			}
		}
	}



   	function setResultVisibility(theVisibility) {

		setCookie("result", theVisibility);

		if(theVisibility == "hidden"){
			hideDiv("result");
			hideDiv("resultborder");
		}
	}

   	function setDetailsVisibility(theVisibility) {

		setCookie("details", theVisibility);

		if(theVisibility == "hidden"){
			hideDiv("details");
			hideDiv("detailsborder");
		}
	}

   	function getVisibilityCookies(){
		if(getCookie("result") == "visible"){
			showDiv("resultborder");
			showDiv("result");
		}
		if(getCookie("details") == "visible"){
			showDiv("detailsborder");
			showDiv("details");
		}
	}


	function initVisibility(){
		showDiv("searchborder");
		showDiv("search");
		showDiv("searchbutton");
		showDiv("advancedsearch");
		showDiv("latestborder");
		showDiv("latest");
		showDiv("teckenborder");
		showDiv("tecken");
		showDiv("toolsborder");
		showDiv("tools");
		showDiv("ovmap");

		hideDiv("moresearch");
		hideDiv("simplesearch");
		hideDiv("result");
		hideDiv("resultborder");
		hideDiv("detailsborder");
		hideDiv("details");
		hideDiv("tocborder");
		hideDiv("toc");
	}


	// Set style values to a cookie left, top, height, visibility
	function getStyleString(theElementname) {
 		var aElement = document.getElementById(theElementname);
		return theElementname + "&" + aElement.style["left"] + "&" + aElement.style["top"] + "&" + aElement.style["height"] + "&" + aElement.style["visibility"];
	}

	// Set style values to a cookie left, top, height, visibility
	function setDivStyleToCookie(theElementname) {
		setCookie(theElementname, getStyleString(theElementname));
	}

	// Set alldivs style values to a cookie left, top, height, visibility
	function setAllDivStyleToCookie() {

		var allDivStyleStr = "";

		allDivStyleStr = allDivStyleStr + getStyleString("search") + "/";
		allDivStyleStr = allDivStyleStr + getStyleString("searchborder") + "/";
		allDivStyleStr = allDivStyleStr + getStyleString("searchbutton") + "/";
		allDivStyleStr = allDivStyleStr + getStyleString("moresearch") + "/";
		allDivStyleStr = allDivStyleStr + getStyleString("advancedsearch") + "/";

		allDivStyleStr = allDivStyleStr + getStyleString("simplesearch") + "/";
		allDivStyleStr = allDivStyleStr + getStyleString("latest") + "/";
		allDivStyleStr = allDivStyleStr + getStyleString("latestborder") + "/";
		allDivStyleStr = allDivStyleStr + getStyleString("result") + "/";
		allDivStyleStr = allDivStyleStr + getStyleString("resultborder") + "/";

		allDivStyleStr = allDivStyleStr + getStyleString("details") + "/";
		allDivStyleStr = allDivStyleStr + getStyleString("detailsborder") + "/";
		allDivStyleStr = allDivStyleStr + getStyleString("toc") + "/";

		allDivStyleStr = allDivStyleStr + getStyleString("tocborder") + "/";
		allDivStyleStr = allDivStyleStr + getStyleString("tecken") + "/";
		allDivStyleStr = allDivStyleStr + getStyleString("teckenborder") + "/";
		allDivStyleStr = allDivStyleStr + getStyleString("tools") + "/";
		allDivStyleStr = allDivStyleStr + getStyleString("toolsborder") + "/";

		allDivStyleStr = allDivStyleStr + getStyleString("ovmap") + "/";

		setCookie("skyddadnatur", allDivStyleStr);
	}

	// Set style values to a cookie left, top, height, visibility
	function setAllVisibility(theElementname, initvisibility) {
 		var aElement = document.getElementById(theElementname);
		setCookie("skyddadnaturvisibility", getVisibilityString());
	}


	// Get style values to a cookie left, top, height, visibility
	function getDivStyleFromCookie(theCookieStr) {
		var values = theCookieStr.split("&");
 		var aElement = document.getElementById(values[0]);

		if(values[1]!=null)
			aElement.style.left = values[1];

		if(values[2]!=null)
			aElement.style.top = values[2];

		if(values[3]!=null)
			aElement.style.height = values[3];

		if(values[4]!=null)
			aElement.style.visibility = values[4];
	}

	// Get all cookies
	function getDivStyleCookies() {
		var cookiesStr = getCookie("skyddadnatur");
		if(cookiesStr == null){
			initVisibility();
		} else{
		  var cookieStr = cookiesStr.split("/");
		  for(i=0;i<=19;i++){
		    getDivStyleFromCookie(cookieStr[i]);
		  }
		}
	}


	function minimize(elementStr, heightInt) {
		if(elementStr == "search"){
			document.getElementById("search").style["height"] = "160";
			document.getElementById("searchbutton").style["top"] = "140";
			hideDiv("moresearch");
			hideDiv("advancedsearch");
			hideDiv("simplesearch");
			hideDiv("searchbutton");
		}

		hideDiv(elementStr);

		var myFx = new Fx.Style(elementStr+"border", "height", {duration:20});
 		myFx.custom(heightInt,0);
		document.getElementById(elementStr+"border").style["height"] = "0";
	}

	function maximize(elementStr, heightInt) {
		if(document.getElementById(elementStr).style["visibility"] == "hidden") {

			if(elementStr == "search"){
				showDiv("advancedsearch");
				showDiv("searchbutton");
			}

 			var myFx = new Fx.Style(elementStr+"border", "height", {duration:20});
 			showDiv(elementStr);
 			myFx.custom(0,heightInt);

			document.getElementById(elementStr+"border").style["height"] = heightInt;
		}
	}

	function toggleSearch(){
 		var search = document.getElementById("search");
 		var searchborder = document.getElementById("searchborder");
 		var advancedsearch = document.getElementById("advancedsearch");
 		var searchbutton = document.getElementById("searchbutton");

		if(advancedsearch.style["visibility"] == "visible"){
			search.style["height"] = "360";
			searchborder.style["height"] = "390";
			searchbutton.style["top"] = "340";
			showDiv("moresearch");
			hideDiv("advancedsearch");
			showDiv("simplesearch");
		}
		else if(advancedsearch.style["visibility"] == "hidden"){
			search.style["height"] = "160";
			searchborder.style["height"] = "190";
			searchbutton.style["top"] = "140";
			hideDiv("moresearch");
			showDiv("advancedsearch");
			hideDiv("simplesearch");
		}

	}

