﻿dojo.require("esri.map");
dojo.require("esri.tasks.identify");

var timer;
var camTimer;
var map;
var tiledGenericBase, tiledHybridBase, tiledHybridBaseOverlay, dynamicAlerts;
var tiledGenericBaseURL, tiledHybridBaseURL, tiledHybridBaseOverlayURL, dynamicAlertsURL;
var trafficCamerasURL, tiledtrafficCameras, geometryService;
var locator, locatorURL;
var isCurrentAlertLayerOn = true;
var isFutureAlertLayerOn = true;
var isTrafficCamLayerOn = false;
var isGenericBaseLayerOn = false;
var isHybridBaseLayerOn = false;
var isHybridBaseOverlayLayerOn = false;
var maponload_handler, locatorComplete_handler, windowResize_handler, maponClick_handler, addOnUnload_handler, maponupdate_handler1, maponupdate_handler2;
var layersLoaded, loading;

dynamicAlertsURL = "http://www.mariettaga.gov/arcgis/rest/services/roadclosures/MapServer";
tiledGenericBaseURL = "http://www.mariettaga.gov/arcgis/rest/services/basemap/MapServer";

function init() {
 		layersLoaded = 0;  //varible to keep track of when all layers have been loaded.
        loading = dojo.byId("loadingImg");  //loading image. id


		
console.log("init()");
    	var lods = [
		  {"level" : 0, "resolution" : 125.388888888889, "scale" : 144448}, 
		  {"level" : 1, "resolution" : 62.6944444444444, "scale" : 72224}, 
		  {"level" : 2, "resolution" : 31.3472222222222, "scale" : 36112}, 
		  {"level" : 3, "resolution" : 15.6736111111111, "scale" : 18056}, 
		  {"level" : 4, "resolution" : 7.83680555555556, "scale" : 9028},
		  {"level" : 5, "resolution" : 3.91840277777778, "scale" : 4514}
		];

		var startextent = new esri.geometry.Extent({xmin:2160041.66289,ymin:1417221.999891,xmax:2205193.499914,ymax:1455701.237354,spatialReference:{wkid:2240}});
 		
		esriConfig.defaults.map.zoomDuration = 1000; //time in milliseconds; default is 250
        esriConfig.defaults.map.zoomRate = 50; //refresh rate of zoom animation; default is 25
		esriConfig.defaults.map.slider = {left:"10px", top:"15px", width:null, height:"150px" };
     	esriConfig.defaults.map.sliderLabel = {tick: 6, labels: ["City","","","","Street"], style: "width:4em; font-family:Verdana; font-size:85%; color:#000; padding-left:2px;"};
     
        map = new esri.Map("map", {lods : lods, extent : startextent});
        //map.disableScrollWheelZoom()
		
		dojo.connect(map, "onLoad", showLoading);
        dojo.connect(map, "onZoomStart", showLoading);
        dojo.connect(map, "onPanStart", showLoading);
        
console.log("map object " + new Date().getTime()  + "  " + map);
         // NOTE:  Seems that if you connect to the onLoad AFTER you add map layers, it won't fire the map.onLoad even
         // in IE after you leave and return via the back button.
        maponload_handler = dojo.connect(map, "onLoad", initFunctionality);
		
        tiledGenericBase = new esri.layers.ArcGISDynamicMapServiceLayer(tiledGenericBaseURL, {id:"Base"});
        map.addLayer(tiledGenericBase);
        tiledGenericBase.setDisableClientCaching(true);
		dojo.connect(tiledGenericBase, "onUpdate", hideLoading); 
 
        dynamicAlerts = new esri.layers.ArcGISDynamicMapServiceLayer(dynamicAlertsURL, {id:"Alerts"});
        map.addLayer(dynamicAlerts);
        dynamicAlerts.setDisableClientCaching(true);
        dojo.connect(dynamicAlerts, "onUpdate", hideLoading); 
	
        //geometryService = new esri.tasks.GeometryService("http://condor/ArcGIS/services/Geometry");
		
        dynamicAlerts.show();
		tiledGenericBase.show();
     

        //connect to window's resize event
         windowResize_handler = dojo.connect(window, "onresize", function() {
            clearTimeout(timer);
            timer = setTimeout(function() { map.resize(); map.reposition(); }, 1200);});        
        addOnUnload_handler = dojo.addOnUnload(removeListeners); 
}
      
function initFunctionality(map) {
console.log("initFunctionality begins");
	initIdentify();
	maponClick_handler = dojo.connect(map, "onClick", function(){console.log("map onClick:");map.infoWindow.hide();}); 
	preLoadData();   
}


function ClearMap() {
    map.graphics.clear();
}

//function to get parameters passed in the URL
function getURLParam( name ) {
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}


function removeListeners() {
 console.log("removing listeners");
    // if you add a listener elsewhere in the app, add a line to remove it here
    // this function will be called when the document unloads.  
    // Removing listeners prevents possible memory leaks
    dojo.disconnect(maponload_handler);
    dojo.disconnect(windowResize_handler);
    dojo.disconnect(maponClick_handler);
    dojo.disconnect(addOnUnload_handler); 
    dojo.disconnect(graphicsonMouseOver_handler);
    dojo.disconnect(graphicsonMouseOut_handler);
    dojo.disconnect(graphicsonClick_handler);
}  
function createURLForCurrentExtent() {
    var baseURL= document.location.host + document.location.pathname;
    var params = "?xmin=" + map.extent.xmin + "&ymin=" + map.extent.ymin + "&xmax=" + map.extent.xmax + "&ymax=" + map.extent.ymax;
    if (tiledGenericBase.visible===true){
        params += "&basemap=Map"
    }else if (tiledHybridBaseOverlay.visible===true){ 
        params += "&basemap=Hybrid"
    }else if (tiledHybridBase.visible===true){ 
        params += "&basemap=Aerial"        
    }
    if (map.infoWindow.isShowing){
        params += "&" + selectedFeatureQuery;
        }
    //return extentURL;
    var extentURL = "http://" + baseURL + params;
    dojo.byId("txtLink").value = extentURL;
    dojo.byId("linkDiv").style.display = "block";
    return extentURL;    
}

function showLoading() {
  esri.show(loading);
  map.disableMapNavigation();
  map.hideZoomSlider();
}

function hideLoading() {
  layersLoaded++;
  if (layersLoaded === map.layerIds.length) {
	esri.hide(loading);
	map.enableMapNavigation();
	map.disableScrollWheelZoom()
	map.showZoomSlider();
	layersLoaded = 0;
  }
}