﻿// JScript File

// 
//
//
function doCallback(message, context) {      
    WebForm_DoCallback('__Page',message,processCallbackResult,context,postBackError,true) ;    
}

function findNeighborhoodByClick() {
    // set up default tool for neighborhood map
    MapPoint(map.controlName, "findNeighborhoodByClick", false);        
    map.divObject.onmousedown = MapNeighborhoodClick;
}
//=================================================
// Process the click
//=================================================
function MapNeighborhoodClick(e) 
{
    portal.hideHelp();

    //showResultsLoading();
        
    getXY(e);
    var box = calcElementPosition(map.containerDivId);
    var message = 'findNeighborhoodByClick';
    
    var x = mouseX - box.left;
    var y = mouseY - box.top;
	                        
    var context = "mapNeighborhood";
    message += ',' + x + ',' + y;
    doCallback(message, context);
}    

//=================================================
// Zoom to the specified extent
//=================================================
function zoomToExtent(xmin,ymin,xmax,ymax) 
{
    var message = 'zoomToExtent';
    var context = "mainMap";
    message += ',' + xmin + ',' + ymin + ',' + xmax + ',' + ymax;
    doCallback(message, context);
}     
//=================================================
// Zoom to the specified point
//=================================================
function zoomToPoint(x,y,label) 
{    
    // clean up label
    var cleanupRegex = /\\/g;
    var message = 'zoomToPoint';
    var context = "mainMap";
    message += ',' + x + ',' + y + ',' + label.replace(cleanupRegex, "");
    doCallback(message, context);
}
//=================================================
// Zoom to a feature
//=================================================
 function zoomToFeature(layerName, objectID)
 {
    var message = 'zoomToFeature';
    var context = "mainMap";
    message += ',' + layerName + ',' + objectID;
    doCallback(message, context);
}
//=================================================
//Search for a Neighborhood by Address
//=================================================
function findNeighborhoodByAddress() {
    // close help dialog if open
    portal.hideHelp();
 var address = findElement("txtAddress", "input").value;
 //show the results
 if (address != "")
 {
    getResults("address",address);
   } else {
        alert("Please type in your address.");
   }
}
//=================================================
//Search for a Neighborhood by Name
//=================================================
function findNeighborhoodByName() {
    // close help dialog if open
    portal.hideHelp();
    var ddlNeighborhood = findElement("ddlNeighborhoods", "select").value;
    //show the results
    showResultsLoading();
      
    //zoom to the extent as well
    var context = "mainMap";
    var message = 'zoomToNeighborhood,' + ddlNeighborhood;
    doCallback(message, context);
}

//==================================================
// Find Neighborhood by XY
//==================================================

function processXYCallbackResult(returnmessage, context)
{
    var coords = returnmessage.split("^^^");
    findNeighborhoodByXY(coords[coords.length-1].split(",")[0], coords[coords.length-1].split(",")[1]);    
}
function findNeighborhoodByXY(x,y)
{
    //display the results
    getResults("xy",x + "||" + y);
}

// -------------------------------------------------
// when ...
// -------------------------------------------------
function resetToolbar() {
    var toolbarName = "Toolbar1";
	var f = document.forms[docFormID];
	f.elements[Toolbars[toolbarName].currentToolField].value = "MapPan";
	MapDragImage ( 'mainMap' , 'MapPan', true,''); 
    Toolbars[toolbarName].refreshGroup();
    Toolbars[toolbarName].selectTool();
}

//==================================================
// resize the mainmap image without doing a page refresh
// reset the size of the map container and then
// resize the map
//==================================================
function resizeMap(width, height) {
    if (height == null) {
        height = width;
    }
    try
    {
        // make sure we're resizing the main map and not the neighborhood map
        map = Maps["mainMap"];
        map.resize(width, height);

        //store the new map size
        YAHOO.ext.state.Manager.set("map-size-width",width);
        YAHOO.ext.state.Manager.set("map-size-height",height);

        getEl("mainMap").setWidth(width);
        getEl("mainMap").setHeight(height);
        
        if (YAHOO.ext.util.Browser.isIE) {
            getEl("mainMap").setStyle("left", "0px");
        }
    } catch(ex){
        //catch and handle exceptions here with regards
        //to resizing the map
    }      
}

// show/hide the ESRI nav arrow control
function navShowHide(show) {
    //store the nav arrow visibility state
    YAHOO.ext.state.Manager.set("settings-nav", show);
    (new YAHOO.util.Anim("northArrow", { opacity: { to: ((show) ? 1: 0) } }, 0.5, YAHOO.util.Easing.easeNone)).animate();
}

function showResultsLoading() {
    resetToolbar();
    findElement("LoadingResults", "div").innerHTML = findElement("pnlLoading","div").innerHTML;
    portal.showResultsTab();
}

function hideResultsLoading() {
    resetToolbar();
    findElement("LoadingResults", "div").innerHTML = "";
    portal.showResultsTab();
}

// AJAX call via YAHOO connection manager
function getResults(type, str) {
    ShowLoadingMap();
    //activate the results window
    var url = "search.ashx" + "?" + type + "=" + str;
    
    //------------------------------------------------------------------
    //Modified by Akinmade 01/31/2008
    //Connect to the RESTful webservice and return information as JSON    
    //var url = "http://gi65dev01/RESTService/Service1.svc/rest/json/Location/" + str;
    
    
    
    //------------------------------------------------------------------
    
    showResultsLoading();
    YAHOO.util.Connect.asyncRequest("GET", url, {
        success: showResults
    }, null);
}



// callback function that displays the results from the AJAX call vai getResults
function showResults(o) {
    var results = o.responseText;
    var searchString = "zoomToPoint(";
    var start = results.indexOf(searchString);
    if (start > -1) {
        start += searchString.length;
        var end = results.indexOf(");", start);
        if (end > -1) {
            var zoomArgs = results.substr(start, (end - start)).split(",");  
            zoomToPoint(zoomArgs[0], zoomArgs[1], zoomArgs[2]);
        }        
    }
    showResults2(results)
}
function showResults2(content) {
    // remove all click handlers from previous results
    removeOldResultsEventHandlers();
    // display new results
    findElement("pnlNotificationResults", "div").innerHTML = content;
    // add click handlers
    addResultsEventHandlers();
    // check to see if we have an invalid search and hide the 'loading map' graphic
    if (content.indexOf("Please try again") > 0) {
        HideLoadingMap();
    }
}
function removeOldResultsEventHandlers() {
    var elements = YAHOO.util.Dom.getElementsByClassName("DISPLAY-ON-MAP", "div", "rootUL");
    elements.concat(YAHOO.util.Dom.getElementsByClassName("DISCLAIMER", "input", "rootUL"));
    elements.concat(YAHOO.util.Dom.getElementsByClassName("collapsed-tree", "span", "rootUL"));
    for (var i = 0; i < elements.length; i++) {
        YAHOO.util.Event.removeListener(elements[i], "click");
    }
    elements = null;
}
function addResultsEventHandlers() {
    var elements = YAHOO.util.Dom.getElementsByClassName("DISPLAY-ON-MAP", "div", "rootUL");
    for (var i = 0; i < elements.length; i++) {
        YAHOO.util.Event.on(elements[i], "click", function(ev, obj) {
            zoomToFeature(obj.getAttribute("displayname"), obj.getAttribute("value"));
        }, elements[i]);
    }
    elements = YAHOO.util.Dom.getElementsByClassName("DISCLAIMER", "input", "rootUL");
    for (var i = 0; i < elements.length; i++) {
        YAHOO.util.Event.on(elements[i], "click", function(ev, obj) {
            portal.showPassiveDisclaimerDialog(obj.getAttribute("disclaimertext"));
        }, elements[i]);
    }
    elements = YAHOO.util.Dom.getElementsByClassName("collapsed-tree", "span", "rootUL");
    for (var i = 0; i < elements.length; i++) {
        YAHOO.util.Event.on(elements[i], "click", Toggle, elements[i]);
    }
    elements = null;
}

/*
===============================================================
Returns the form element that contains the specified string
in its ID and tag
===============================================================
*/
function findElement(str, tagName)
{
	var allElements = document.getElementsByTagName(tagName);
	var obj;
	for (var i=0;i<allElements.length;i++)
	{
		if (allElements[i].id.indexOf(str)>-1)
		{
			obj = allElements[i];
			break;
		}		
	}
	return obj;
}
      
/*
==============================================================================
Manage Tree Toggle
==============================================================================
*/

function Toggle(ev, node){
    // Unfold the branch if it isn't visible
    if (node.nextSibling.style)	{		
	    if (node.childNodes.length > 0)	{
	        if (YAHOO.util.Dom.hasClass(node, "collapsed-tree")) {
	            YAHOO.util.Dom.replaceClass(node, "collapsed-tree", "expanded-tree");
			    node.nextSibling.style.display = 'block';
	        } else {
	            YAHOO.util.Dom.replaceClass(node, "expanded-tree", "collapsed-tree");
			    node.nextSibling.style.display = 'none';
	        }
	    }		
    }
}

function processIdentifyCallbackResult(returnmessage, context) {
    document.getElementById("IdentifyLoading").style.display = "none";
    processCallbackResult(returnmessage, context);
    // check for 'Clear All' link
    var clearLink = document.getElementById("TaskResults1").getElementsByTagName("a");
    if (clearLink.length == 1) {
        YAHOO.util.Event.addListener(clearLink[0], "click", function() {
            // remove IdentifyLocation
            var identLocation = document.getElementById("IdentifyLocation");
            if (identLocation) {
                identLocation.parentNode.removeChild(identLocation);
            }
            HideLoadingMapForIdentify();
        });
    }
}

function MapMouseMoveLocal(e) {
    MapMouseMove(e);
    if (YAHOO.ext.util.Browser.isIE) {
        // stop propagating the event so that it doesn't conflict with YUI drag/drop
        e = window.event;
        YAHOO.util.Event.stopEvent(e);
    }
}

/*=======================================================================
SHOW AND HIDE MAP LOADING ANIMATED GIF
=======================================================================*/
var fromIdentify = false;
function ShowLoadingMap() {
    var loadDiv = document.getElementById("pnlLoadingMap");
	if (loadDiv != null) loadDiv.style.visibility = "visible";
    if (map) {
        if (fromIdentify) {
            fromIdentify = false;
            window.setTimeout("HideLoadingMap();", 2000);
        }
    }
}

function HideLoadingMapForIdentify() {
    if (YAHOO.ext.util.Browser.isIE) {
        fromIdentify = true;
    }
}

function HideLoadingMap() {
    var loadDiv = document.getElementById("pnlLoadingMap");
    if (loadDiv != null) loadDiv.style.visibility = "hidden";
}

/*=======================================================================
CREATE MAP PDF
=======================================================================*/
function createMap()
{
    document.getElementById("btnGeneratePrintout").disabled = true;
    document.getElementById("btnCancelPrint").disabled = true;
    var message = "GeneratePrint";
   // message += "," + (document.getElementById("printLandscape").checked ? "landscape" : "portrait");
    message += ":" + document.getElementById("lblprintMapTitle").value;
    var context = "";
    document.getElementById("imgGenPrintout").style.visibility = "visible";
    WebForm_DoCallback('__Page',message,processPrintCallbackResult,context,postBackError,true) ;     
   // GeneraWebForm_DoCallback('__Page',message,processPrintCallbackResult,context,postBackError,true) ;    
}

function processPrintCallbackResult(returnmessage, context)
{
    document.getElementById("printlink").href = returnmessage;
    cancelPrint(true);
}

function cancelPrint(dontClose)
{
    if (!dontClose)
    {
        portal.closePrintDialog();
    }
    document.getElementById("printlinkarea").style.visibility = "visible";
    document.getElementById("imgGenPrintout").style.visibility = "hidden";
    document.getElementById("btnGeneratePrintout").disabled = false;
    document.getElementById("btnCancelPrint").disabled = false;
}

/*var printDialog; 	    
function showPrintDialog()
{
    if (!printDialog)
    {
        printDialog = new YAHOO.ext.BasicDialog("dlgPrintContainer",
        {
            autoTabs:true,
            width:500,
            height:300,
            shadow:true,
            minWidth:300,
            minHeight:250,
            proxyDrag: true,
            constraintoviewport: true,
            viewport: document.body
		});
        //add close button
        //printDialog.addButton('Close', printDialog.hide, printDialog);
    }
    

    var printHypLink  = document.getElementById("UcPrint2_hypViewMap");
    //alert(printHypLink);
    if (printHypLink!=null)
    {
        document.getElementById("UcPrint2_hypViewMap").style.visibility = "hidden";
    }
    //tie to the maintoolbar object
    var tlbr;
    tlbr = getEl('UcHeader1_btnPrint');
    printDialog.show(tlbr.dom);
    printDialog.show();
}*/

/*
 * this is a copy of the function from esri's display_navigation.js
 * needed to make a small change dues scrolling issues
 */
function navMouseDownLocal(e, controlName) {
    if (getSessionLapse() < maximumLapseTime) {
	    if (!navDragOn) {
	        panner = NavControls[controlName];
	        map = Maps[panner.buddyName];
	        if (map!=null) {
		        var box = calcElementPosition(map.divId);
	            var box2 = calcElementPosition(map.containerDivId); 
				panStartLeft = box.left - box2.left;
				panStartTop = box.top - box2.top;
		        map.dragImage = true;
		        getXY(e);
				var navRegion = YAHOO.util.Dom.getRegion(document.getElementById(panner.divId).getElementsByTagName("img"));
                initialMouseX = navRegion[0].left + Math.round((navRegion[0].right - navRegion[0].left) / 2);
                initialMouseY = navRegion[0].top + Math.round((navRegion[0].bottom - navRegion[0].top) / 2);
		        getNavDirection(e);
		        nav_active = true;
		        panner.divObject.onmousemove = navMouseMove;
		        panner.divObject.onmouseup = navMouseUp;
		        panner.tempMoveFunction = document.onmousemove;
				document.onmousemove = navMouseMove;
				document.onmouseup = navMouseUp;
		        
		        var chkInterval = 6
		        if (isNav) chkInterval /= 2;
		        navControlCheckInterval = window.setInterval("checkNavDirection( navDir);",chkInterval);
		        tempToolMode = map.mode;
		        map.mode = "MapPan";
        	    if (map.vectorObject!=null) map.vectorObject.restart();
        	
		    }
	    }
	} else
	    showLapseAlert();
	return false;
}

//=============================================
// Performs the search
//  - Address
//  - Neighborhood Name
//  - Click location
//  Added by Akinmade 2/25/2008
//==============================================
function performSearch(type,x,y)
{
    //var d = document;
    var f;
    
    if (YAHOO.ext.isIE)
    {
        f = d.frames ? d.frames['ResultsFrame'] : d.getElementById('ResultsFrame');
    }else{
        f = window.frames.ResultsFrame;    
    }   
    if (f)
    {
        switch(type)
        {
            //--------------------------
            // Find Neighborhood by Address
            //--------------------------
          case "address":
                 var address = findElement("txtAddress", "input").value;    
                if (address != "")
                {  
                    f.findNeighborhoodByAddressWCF(address);
                }else{
                    alert("Type in your address");
                }    
                break;
            //--------------------------
            // Find Neighborhood by Name
            //--------------------------
          case "name":    
                var ddlNeighborhood = findElement("ddlNeighborhoods", "select").value;
                if (ddlNeighborhood != "")
                {  
                    f.findNeighborhoodByNameWCF(ddlNeighborhood);
                }else{
                    alert("Choose a neighborhood");
                }    
                break;
            //--------------------------
            // Find Neighborhood by XY
            //--------------------------            
          case "xy":      
                f.findNeighborhoodByXYWCF(x,y);
                break;
          default:
                break;                    
        }
    }
}
//=============================================
// Get the list of neighborhoods
// Added by Akinmade 3/4/2008
//==============================================
function getNeighborhoods()
{
    var f;
    if (YAHOO.ext.isIE)
    {
        f = d.frames ? d.frames['ResultsFrame'] : d.getElementById('ResultsFrame');
    }else{
        f = window.frames.ResultsFrame;    
    }   
    if (f) 
    {
        //get the neighborhoods
        f.getNeighborhoods();
    }
}

function handleCandidateSelection() {
    //Get address selected
    var list = document.getElementById("ddlCandidates");
    var index = list.selectedIndex;
    if (index == -1) return;
    var address = list[index].value;
    var f;
    
    if (YAHOO.ext.isIE)
    {
        f = d.frames ? d.frames['ResultsFrame'] : d.getElementById('ResultsFrame');
    }else{
        f = window.frames.ResultsFrame;    
    }
    if (f) {
        //f.findNeighborhoodByAddressWCF(address);
        //var values = address.split('||');
        //f.findNeighborhoodByXYWCF(values[1], values[2]);
        var values = address.split('||');
        f.findNeighborhoodByAddressCandidate(values[1], values[2], values[0]);
    }
    //candidateDialog.hide();
    portal.hideCandidatesDialog();
}