﻿//Map
var map = null;
//Save form data
var _formData = [];
_formData["SearchTab"] = "Parcel";
//Map tools
var _currentMode = "Pan";
var _lastMode = "Pan";
//Ajax
var _ajaxSearch = null;
var _searchTime = null;

//Map init
function load() {
    //Get map
    map = $find("Map1");

    //Set window resize event handler
    window.setTimeout('$addHandler(window,"resize", resizeApp);', 500);

    //Set up toolbar event handler
    var toolbar = $find("Toolbar1");
    if (map != null && toolbar != null) {
        map.remove_extentChanged(toolbar._toolbarExtentChangedHandler); // just in case it is already present
        map.add_extentChanged(toolbar._toolbarExtentChangedHandler);
        toolbar.add_onToolSelected(OnToolSelectHandler);
    }
    map.add_extentChanging(function() { if (arcgisIdentifyTool != null) closeIdentifyPanel(); });
    map.add_extentChanged(function() { if (arcgisIdentifyTool != null) closeIdentifyPanel(); });
    
    //Enable measuring
    if (typeof setUpMeasureEvent != "undefined") setUpMeasureEvent();

    //Rsize page
    resizeApp();

    //Center
    map.panTo(new ESRI.ADF.Geometries.Point(953863, 2059746), false);
}


//Toolbar event handler
function OnToolSelectHandler(sender, args) {
    if (args.name) {
        var mode = args.name;
        _currentMode = mode;
        if (mode != "Measure" && _lastMode == "Measure") closeMeasureToolbarTool();
        if (mode != "MapIdentify" && _lastMode == "MapIdentify") {
            if (arcgisIdentifyTool != null) closeIdentifyPanel();
        }
        _lastMode = mode;
    }
}


//Resize page
function resizePage() {
    var offsetTop = 0;
    var mapElem = e("divMap");

    for (var elem = mapElem; elem != null; elem = elem.offsetParent) {
        offsetTop += elem.offsetTop;
    }

    var height = getWindowHeight() - offsetTop;
    if (height >= 0) {
        mapElem.style.height = height - 11 + "px";
    }
}

//Resize map
function resizeApp() {
    //Resize map div
    resizePage();

    //Refresh map
    if (this.map != null) {
        this.map.checkMapsize();
    }
}



//---RESULTS GRID--//
function setHighlight(row, layerID, featureIndex, highlight, overColor, outColor) {
    if (highlight)
        row.style.backgroundColor = overColor; //'#E18484';
    else if (featureIndex % 2 == 1)
        row.style.backgroundColor = 'white';
    else
        row.style.backgroundColor = outColor;  //'#EDEDB5';

    var graphicFeatureGroup = $find(layerID);
    var graphicFeature = graphicFeatureGroup.get(featureIndex);
    graphicFeature.set_highlight(highlight);
}

function zoomToFeature(obj, layerID, featureIndex, featureType) {
    var graphicFeatureGroup = $find(layerID);
    var graphicFeature = graphicFeatureGroup.get(featureIndex);

    var zoomExtent = graphicFeature.get_geometry().getEnvelope();
    if (featureType == "Point") {
        var dist = 2500;
        zoomExtent.set_xmin(zoomExtent.get_xmin() - dist);
        zoomExtent.set_xmax(zoomExtent.get_xmax() + dist);
        zoomExtent.set_ymin(zoomExtent.get_ymin() - dist);
        zoomExtent.set_ymax(zoomExtent.get_ymax() + dist);
    } else {
        var width = zoomExtent.get_xmax() - zoomExtent.get_xmin();
        var height = zoomExtent.get_ymax() - zoomExtent.get_ymin();
        zoomExtent.set_xmin(zoomExtent.get_xmin() - width / 2);
        zoomExtent.set_xmax(zoomExtent.get_xmax() + width / 2);
        zoomExtent.set_ymin(zoomExtent.get_ymin() - height / 2);
        zoomExtent.set_ymax(zoomExtent.get_ymax() + height / 2);
    }

    var map = $find('Map1');
    map.zoomToBox(zoomExtent, false);
}

function zoomToAll(x1, y1, x2, y2) {
    var zoomExtent = new ESRI.ADF.Geometries.Envelope(x1, y1, x2, y2);
    var width = zoomExtent.get_xmax() - zoomExtent.get_xmin();
    var height = zoomExtent.get_ymax() - zoomExtent.get_ymin();
    zoomExtent.set_xmin(zoomExtent.get_xmin() - width / 2);
    zoomExtent.set_xmax(zoomExtent.get_xmax() + width / 2);
    zoomExtent.set_ymin(zoomExtent.get_ymin() - height / 2);
    zoomExtent.set_ymax(zoomExtent.get_ymax() + height / 2);

    var map = $find('Map1');
    map.zoomToBox(zoomExtent, false);
}

function showParcelDetails(pin) {
    showFloatingPanel('fpParcelDetails');
    html = "<iframe src='parceldetail.aspx?pin=" + pin + "' width='100%' height='100%' frameborder='0'></iframe>";
    e("fpParcelDetails_Contents").innerHTML = html;
}

function showPrintPdf() {
    showFloatingPanel('fpPrintPdf');
    html = "<iframe src='Print.aspx' width='100%' height='100%' frameborder='0'></iframe>";
    e("fpPrintPdf_Contents").innerHTML = html;
}

function showPrintPdf2() {
    showFloatingPanel('fpPrintPdf2');
}

function closePrintPdf() {
    hideFloatingPanel('fpPrintPdf');
    e("fpPrintPdf_Contents").innerHTML = '';
}

//---MAP INTERACTION--//
function panAndZoom(sender, eventArgs) {
    var map = sender;
    var clickPoint = map.toMapPoint(eventArgs.offsetX, eventArgs.offsetY);
    map.panTo(clickPoint);
    var zoomScript =
                "$find('Map1').zoom(2, new ESRI.ADF.Geometries.Point({0}, {1}), true);";
    zoomScript = String.format(zoomScript, clickPoint.get_x(), clickPoint.get_y());
    window.setTimeout(zoomScript, 1000);
}

function changeTransparency(transparency) {
    var map = $find('Map1');
    var op = parseFloat(transparency) / 100;
    var selectedMapLayer = e("SelectedMapLayer").value;

    //
    /*var Map1 = $get('Map1');
    var MapImages = Map1.getElementsByTagName('img');
    for (var i = 0; i < MapImages.length; i++) {
    if (MapImages[i].id.indexOf('Soil') !== -1) {
    var oi = $get(MapImages[i].id);
    alert(oi.toSource());
    oi.style.opacity = parseFloat(transparency) / 100;
    oi.style.filter = 'alpha(opacity=' + transparency + ')';
    }
    }*/

    //
    if (selectedMapLayer != "") {
        for (var i = 0; i < map.get_layers().get_layerCount(); i++) {
            var mapName = map.get_layers().get_layer(i).get_name();
            if (mapName == 'Map1_Soil' || mapName == 'Map1_Flood Zone' || mapName == 'Map1_Wetland' || mapName == 'Map1_Parcel Text' || mapName == 'Farm Assessment' || mapName == 'Map1_Subdivision' || mapName == 'Map1_Topography') {
                map.get_layers().get_layer(i).set_opacity(1 - op);
                map.refreshLayer(map.get_layers().get_layer(i));
            }
        }
    }

    map.set_extent(map.get_extent());
    //e("transparencySlider").value = transparency;
    //map.refresh();
}


//---SEARCH--//
function executeSearch() {
    var searchTerm = e('txtSearch').value;
}

function showResults() {
    toggleFloatingPanelVisibility("fpResults");
}

function showMapLayers() {
    //toggleFloatingPanelVisibility("fpLayers");
    toggleDisplay2("divMapLayers");
}

function handleSearchClick() {
    if (e('txtSearch').value.indexOf('Enter ') > -1) {
        e('txtSearch').value = "";
    }
}

//---AJAX---//
function getXmlHttpRequestObject() {
    if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        return new ActiveXObject("Microsoft.XMLHTTP");
    } else {
        alert("This function is not supported by your browser");
    }
}

//---SUGGEST---//
//Starts the search request.
function searchSuggest() {
    clearTimeout(_searchTime);
    _searchTime = setTimeout(function() {
        _ajaxSearch = getXmlHttpRequestObject();
        var typ = escape(e('sTab').value);
        if (_ajaxSearch.readyState == 4 || _ajaxSearch.readyState == 0) {
            var str = escape(e('txtSearch').value);
            if (str.length > 0) {
                _ajaxSearch.open("GET", 'suggest.ashx?val=' + str + '&typ=' + typ, true);
                _ajaxSearch.onreadystatechange = handleSearchSuggest;
                _ajaxSearch.send(null);
            } else {
                toggleDiv("search_suggest", "off");
            }
        }
    }, 250);
}

//Called when the AJAX response is returned.
function handleSearchSuggest() {
    if (_ajaxSearch.readyState == 4) {
        var ss = e('search_suggest')
        ss.innerHTML = '';
        if (_ajaxSearch.responseText.length > 0) {
            toggleDiv("search_suggest", "on");
            ss.innerHTML = _ajaxSearch.responseText;
        } else {
            toggleDiv("search_suggest", "off");
        }
        _ajaxSearch = null;
    }
}

//Mouse over function
function suggestOver(div_value) {
    div_value.className = 'suggest_link_over';
}

//Mouse out function
function suggestOut(div_value) {
    div_value.className = 'suggest_link';
}

//Close suggest div
document.onclick = check;
function check(e) {
    var target = (e && e.target) || (event && event.srcElement);
    var obj = document.getElementById('search_suggest');
    if (target != obj) { obj.style.display = 'none' }
}

//Find search value (click function)
function findSearchItem(value) {
    document.getElementById('search_suggest').innerHTML = '';
    toggleDiv("search_suggest", "off");
    //e('txtSearch').value = value;
    e('txtSearch').value = ConvertAmp(value);
    e('btnSearch').click();
}

function ConvertAmp(str) {
    str = str.replace("&amp;", "&");
    return str;
}


//---TABS---//
//Set up search tabs
function setSearchTab(objName) {
    //Save Input Box Data
    var formTabVal = getFormData("SearchTab");
    var formTabVal = e("sTab").value;
    var formSearchData = e("txtSearch").value;
    saveFormData(formTabVal, formSearchData);

    //Get Stored Data 
    var tab = e(objName);
    if (tab.className != 'selected') {
        //saveFormData("SearchTab", objName);
        e("sTab").value = objName;
        //e("txtSearch").value = getFormData(objName);
    }

    //Set Active Tab (Inactivate Others) 
    e("Parcel").className = '';
    e("Address").className = '';
    e("Subdivision").className = '';
    tab.className = 'selected';
        
    //
    if (objName == 'Parcel')
        e("txtSearch").value = 'Enter Parcel (ex. 08-32-201-004)';
    if (objName == 'Subdivision')
        e("txtSearch").value = 'Enter Subdivision Name';
    if (objName == 'Address')
        e("txtSearch").value = 'Enter Address';
}


//---GENERAL---//
//toggle display
function toggleDisplay(id) {
    var element = e(id);
    if (element.style.display == 'none') {
        element.style.display = '';
    } else {
        element.style.display = 'none'
    }
}

function toggleDisplay2(id) {
    var element = e(id);
    if (element.style.visibility == 'hidden') {
        element.style.visibility = 'visible';
    } else {
        element.style.visibility = 'hidden';
    }
}

function toggleDiv(divID, display) {
    var divElem = e(divID);
    if (display == "off") {
        if (divElem.style.display != "none")
            divElem.style.display = "none";
    }
    if (display == "on") {
        if (divElem.style.display != "block")
            divElem.style.display = "block";
    }
}


//height
function getWindowHeight() {
    if (window.self && self.innerHeight) {
        return self.innerHeight;
    }
    if (document.documentElement && document.documentElement.clientHeight) {
        return document.documentElement.clientHeight;
    }
    return 0;
}

//element id
function e(id) { return document.getElementById(id); }

//element rectangle
function GetElementRectangle(element) {
    var rect = null;
    if (isIE)
        rect = element.getBoundingClientRect();
    else {
        var bounds = Sys.UI.DomElement.getBounds(element);
        rect = { "left": bounds.x, "top": bounds.y, "right": bounds.x + bounds.width, "bottom": bounds.y + bounds.height };
    }
    return rect;
}

//unique id
function GetID() {
    var dt = new Date();
    return dt.getTime();
}

//get/set key value pairs
function saveFormData(key, val) {
    _formData[key] = val;
}
function getFormData(key) {
    var val = _formData[key];
    if (typeof (val) == 'undefined') { val = ''; }
    return val;
}

//Submit form with enter key
function submitForm() {
    if (window.event && window.event.keyCode == 13) {
        e('btnSearch').click();
        //alert(window.event.keyCode);
    //} else if (window.event && window.event.keyCode == 40) {
    //    alert("down arrow");
    } else {
        searchSuggest();
        //return true;
    }
}

