﻿dojo.provide("Indy.PropertyAssessmentViewer.Layout");
dojo.require("esri.map");
dojo.require("dojo.cookie");
dojo.require("dojo.parser");
dojo.require("dijit.form.CheckBox");
dojo.require("dijit.layout.BorderContainer");
dojo.require("dijit.layout.ContentPane");
//dojo.require("sampleApp.ConfigManager");
//dojo.require("sampleApp.widget.Legend");
dojo.require("dojox.form.RangeSlider");
var resizeTimer;
var myMap;
var initialExtent;
var tb;
var configDataForMap;
var dynamicLayer;
var configDataForMap;
var startExtent;
var endExtent;

Indy.PropertyAssessmentViewer.Layout.LayoutGenerator = function() {
    var init = function() {
        /**!!!!Resize image!!!**/
        //    var mapHeight = dojo.byId("ext-gen99").style.height;
        //    dojo.byId("mapDiv").style.height = mapHeight;

        var initialExtentString = configDataForMap.layout.initialExtent;
        var initialExtentArray = initialExtentString.split(" ", 4);
        var inExtentXMin = parseFloat(initialExtentArray[0]);
        var inExtentYMin = parseFloat(initialExtentArray[1]);
        var inExtentXMax = parseFloat(initialExtentArray[2]);
        var inExtentYMax = parseFloat(initialExtentArray[3]);

        var spatialReference = parseFloat(configDataForMap.layout.spatialReference);
        initialExtent = new esri.geometry.Extent(inExtentXMin, inExtentYMin, inExtentXMax, inExtentYMax, new esri.SpatialReference({
            wkid: spatialReference
        }));

        //esriConfig.defaults.map.slider = { left:"15px", top:"90px", width:null, height:"200px" };

        myMap = new esri.Map("mapDiv", {
            extent: initialExtent
        });

        //    var url = "http://tritenko09865/arcgis/rest/services/TemplateBaseMap1/MapServer";
        //    var tiledLayer = new esri.layers.ArcGISTiledMapServiceLayer(url);
        //myMap.addLayer(tiledLayer);

        //var url1 = "http://tritenko09865/arcgis/rest/services/ParcelsCCGIS/MapServer";
        //var url1 = "http://maps.indy.gov/ArcGIS/rest/services/TaxAssessment/MapServer";
        var url1 = configDataForMap.layout.baseLayer;
        var tiledLayer2 = new esri.layers.ArcGISTiledMapServiceLayer(url1);
        myMap.addLayer(tiledLayer2);

        //    var url2 = "http://tritenko09865/arcgis/rest/services/TownshipsNeighborhoodsSchoolsChurches/MapServer";
        //    var dynamicLayer = new esri.layers.ArcGISDynamicMapServiceLayer(url2);
        //    myMap.addLayer(dynamicLayer);


        dojo.connect(myMap, 'onLoad', function(myMap) {
            var mapDivEl = dojo.byId('mapDiv');
            dojo.connect(mapDivEl, 'resize', function() {
                clearTimeout(resizeTimer);
                resizeTimer = setTimeout(function() {
                    myMap.resize();
                    myMap.reposition();
                }, 500);
            });
            Indy.PropertyAssessmentViewer.Legend.LegendGenerator.getLegend();
            dojo.connect(myMap, "onMouseMove", showCoordinates);
            dojo.connect(myMap, "onMouseDrag", showCoordinates);
            dojo.connect(myMap, "onMouseDrag", showScale);
            showScale();
            dojo.connect(myMap, 'onZoomEnd', showScale);
            readURLContext();
            dojo.connect(tiledLayer2, "onError", function() {
                console.log(endExtent);
                myMap.setExtent(startExtent);
                //                myMap = null;
                //                myMap = new esri.Map("mapDiv", {
                //                    extent: currExtent
                //                });
            });
            dojo.byId("PnlLoadingMap").style.visibility = "hidden";
        });

        dojo.connect(myMap, 'onZoomStart', function(checksectionals) {
            dojo.byId("PnlLoadingMap").style.visibility = "visible";
            //dojo.byId("SearchbyAddress").innerHTML = '<div ' + "class=" + '"SearchTextSubtitle2"' + ">Search by Address</div>";
            startExtent = myMap.extent;
        });

        dojo.connect(myMap, 'onZoomEnd', function(checksectionals) {
            dojo.byId("PnlLoadingMap").style.visibility = "hidden";
            //dojo.byId("SearchbyAddress").innerHTML = '<a href="' + "javascript:IndyPropertyViewer.showDialog('DlgSearchParcelByAddressContainer','SearchbyAddress')" + '"' + "class=" + '"SearchTextSubtitle2"' + ">Search by Address</a><br />";
            endExtent = myMap.extent;
        });

        //    dojo.connect(myMap, 'onUnload', function(checksectionals){
        //        dojo.byId("PnlLoadingMap").style.visibility = "visible";
        //    });
        //    
        //    dojo.connect(myMap, 'onLoad', function(checksectionals){
        //        dojo.byId("PnlLoadingMap").style.visibility = "hidden";
        //    });

        function showCoordinates(evt) {
            //get mapPoint from event
            var mp = evt.mapPoint;
            //display mouse coordinates
            dojo.byId("info").innerHTML = "Map Coordinates (Feet): " + Math.round(mp.x * 1000) / 1000 + ", " + Math.round(mp.y * 1000) / 1000;
        }

        function showScale() {
            //Find current scale
            var maxX = myMap.extent.xmax;
            var minX = myMap.extent.xmin;
            var maxY = myMap.extent.ymax;
            var minY = myMap.extent.ymin;
            var dpi = 96;
            var imageWidth = myMap.width;
            var imageHeight = myMap.height;
            var centreX = maxX - (maxX - minX) / 2.;
            var centreY = maxY - (maxY - minY) / 2.;
            var dots_per_m = dpi / 2.54 * 100;
            var width_size_in_m = (imageWidth / 2) / dots_per_m;
            var currentMapScale = (maxX - centreX) / width_size_in_m;
            //        var currentMapScale = myMap._LOD.scale;
            dojo.byId("scaleInfo").innerHTML = "Current Scale " + "1'':" + Math.round(currentMapScale) + "'";
            document.getElementById('ScaleBarValueLeft_Label').innerHTML = Math.round(currentMapScale / 4);
            document.getElementById('ScaleBarValueLeftMiddle_Label').innerHTML = Math.round(currentMapScale / 2);
            document.getElementById('ScaleBarValueRight_Label').innerHTML = Math.round(currentMapScale);
        }

        function readURLContext() {
            var URLPath = location.href;
            //var indexParameter = indexOf
            if (URLPath.indexOf('?parcel=') != -1) {
                var URLParcel = URLPath.slice((URLPath.indexOf('?parcel=') + 8));
                console.log(URLParcel);
                if (URLParcel != "") {
                    Indy.PropertyAssessmentViewer.Search.SearchByParcelID.queryByParcelIDAssesDB(URLParcel);
                }
            }
        }

        //	dojo.connect(myMap, 'onLoad', function(checksectionals){
        //            Indy.PropertyAssessmentViewer.Legend.LegendGenerator.getLegend();
        //    });

        //	var dynamicLayersUrls = configDataForMap.layout.dynamicLayers;
        //	if (dynamicLayersUrls.length > 0){
        //	    for (var lc in dynamicLayersUrls){
        //	    	    var dynamicLayer = new esri.layers.ArcGISDynamicMapServiceLayer(dynamicLayersUrls[lc].link);
        //                map.addLayer(dynamicLayer);
        //	    }
        //	}
        //	//Add dynamic layer for testing purposes
        ////	var dynamicLayer = new esri.layers.ArcGISDynamicMapServiceLayer('http://tritenko09865/arcgis/rest/services/TownshipsNeighborhoodsSchoolsChurches/MapServer');
        ////    //dynamicLayer.setVisibleLayers(['2','3']);
        ////    map.addLayer(dynamicLayer);
        //	
        //	dojo.connect(map, 'onLoad', function(theMap){
        //        dojo.connect(dijit.byId('mapDiv'), 'resize', function(){
        //            resizeMap();
        //        });
        //        var loading = dojo.byId("loadingImg");
        //	    //dojo.connect(map, "onUpdate", esri.hide(loading));
        //	    esri.hide(loading);
        //    });
        //    var loading = dojo.byId("loadingImg");
        //    esri.hide(loading);
        //    console.log(map.layerIds);
    }

    //Handle resize of browser
    function resizeMap() {
        clearTimeout(resizeTimer);
        resizeTimer = setTimeout(function() {
            myMap.resize();
            myMap.reposition();
        }, 500);
    }



    return {
        init: init
    }
} ();
//show map on load 
//dojo.addOnLoad(init);

Indy.PropertyAssessmentViewer.Layout.readMap = function(){
    var readConfigManager = function(configData){
        console.log(configData);
        configDataForMap = configData;
        if (navigatorIE6 != -1 || navigatorIE7 != -1 || navigatorIE8 != -1){
            Indy.PropertyAssessmentViewer.Layout.LayoutGenerator.init();
        }
    }
    
    return{
        readConfigManager:readConfigManager
    }
}();


