﻿dojo.require("esri.map");
dojo.require("esri.tasks.query");
dojo.require("esri.toolbars.navigation");
dojo.require("dijit.form.Button");
dojo.require("dijit.Toolbar");
dojo.require("esri.tasks.identify");
dojo.require("dijit.layout.TabContainer");
dojo.require("dijit.layout.ContentPane");
dojo.require("esri.tasks.query");
dojo.require("esri.tasks.find");

var supportedBrowsers = "Internet Explorer, Firefox or Safari";
var browser;
var initCheck = false;
function init(){
    browser = getBrowser();
    if (supportedBrowsers.indexOf(browser) == -1){
        alert( browser + " is not a supported browser for this site. \r\n Please use "+ supportedBrowsers + " to view this site.");
        document.getElementById('pageBody').innerHTML = "Unsupported browser";
        return;
    }
    var init = true;
    dojo.byId("mapAndTabBody").style.height = getH() - (dojo.byId("toolBarBody").clientHeight + dojo.byId("headerBody").clientHeight) +"px";
    parseXML();
    
    initMap();
    //navToolbar = new esri.toolbars.Navigation(map);
    dojo.connect(navToolbar, "onExtentHistoryChange", extentHistoryChangeHandler);
    currentMapTool = esri.toolbars.Navigation.PAN;
    var initCheck = false;
}

function accordionize(elementid, buttonid)
{
    accordionElement = document.getElementById(elementid);
    buttonelement = document.getElementById(buttonid);
    if(accordionElement.style.display == 'none')
    {
        accordionElement.style.display = 'block';
        buttonelement.innerHTML = '&#9650;&nbsp;';
    }
    else
    {
        accordionElement.style.display = 'none';
        buttonelement.innerHTML = '&#9660;&nbsp';
    }
}
function populateMapDDL(mapXMLElements){
    for (i = 0; i < mapXMLElements.childNodes.length; i++) {
        var mapOption = document.createElement('option');
        if (mapXMLElements.childNodes[i].nodeName.indexOf("Map") != -1)
        {
            mapOption.text = mapXMLElements.childNodes[i].getElementsByTagName('Title')[0].childNodes[0].nodeValue;
            mapOption.value = mapXMLElements.childNodes[i].getElementsByTagName('Url')[0].childNodes[0].nodeValue;       
            
            //use appendChild instead of add - add does not work for fire fox.  
            if(navigator.appName == "Microsoft Internet Explorer"){
                dojo.byId("mapDocumentddl").add(mapOption); 
            }  else{
                dojo.byId("mapDocumentddl").appendChild(mapOption);
            }              
            
            
        }
    }
}
function parseXML()
{

    xmlDoc = getXMLDoc("data/settings.xml");
    var mapServices = xmlDoc.getElementsByTagName("Maps")[0];
    var navButtons = xmlDoc.getElementsByTagName("Navigation")[0];
    buildNavToolBar(navButtons);
    populateMapDDL(mapServices);
   
}
function getXMLDoc(documentPath) {
    browser = getBrowser();
    if (browser == "Internet Explorer"){
        xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async=false;
        if(!documentPath){
            return xmlDoc;
        }
        else{
            xmlDoc.load(documentPath);
            return xmlDoc;
        }
    }
    else if (browser == "Firefox"){
        xmlDoc=document.implementation.createDocument("","",null);
        xmlDoc.async=false;
        if(!documentPath){
            return xmlDoc;
        }
        else{
            xmlDoc.load(documentPath);
            return xmlDoc;
        }
    }
    else if (browser == "Safari"){
        xmlDoc=document.implementation.createDocument("","",null);
        xmlDoc.async=false;
        if(!documentPath){
            return xmlDoc;
        }
        else{
            var xmlReq = new XMLHttpRequest();
            //xmlReq.onreadystatechange = xmlHandler;
            xmlReq.open("GET", documentPath, false);
            xmlReq.send();
            xmlDoc = xmlReq.responseXML; 
            return xmlDoc;
        }   
    } 
        
}

function placeLoadingElement(){
    var mapDiv = document.getElementById("mapdiv")
    loading = document.getElementById("loadingImg");
    loading.style.left = mapDiv.clientWidth - 220 + "px";
    loading.style.top= mapDiv.clientHeight - 20 + "px";
}
function showLoading() {
    //placeLoadingElement();
    loading = document.getElementById("loadingImg");
    loading.style.display = 'block';
    map.disableMapNavigation();
    map.hideZoomSlider();
    if(currentMapTool != "")
        navToolbar.deactivate();
    map.disablePan();
}

function hideLoading() {
    layersLoaded++;
    if (layersLoaded === map.layerIds.length) {
        loading = document.getElementById("loadingImg");
        loading.style.display = 'none';
        map.enableMapNavigation();
        map.showZoomSlider();
        layersLoaded = 0;
        
        navToolbar.activate(currentMapTool);
    }
}

function resizeGo()
{
    var height = getH() - (dojo.byId("toolBarBody").clientHeight + dojo.byId("headerBody").clientHeight);
    var width = getW();
    
    document.getElementById("mapAndTabBody").style.height = height + "px";
    
    // This is the only way I could get rid of the horizontal scroll bar is by setting
    // the map div to a fixed width.  I tried setting overflow: hidden with a 100% 
    // width to no avail...
    var newWidth = width - document.getElementById("tabs").style.width.replace("px", "") - 2;
    document.getElementById("mapdiv").style.width = newWidth + "px";
    document.getElementById("mapdiv").style.height = height + "px";
    if (document.getElementById("tabs")){
         var newHeight = height - 25;
         document.getElementById("tabs").style.height = newHeight + "px";
    }
    if ( document.getElementById("LegendTab") )
    {
      var newHeight = height - 25;
      document.getElementById("LegendTab").style.height = newHeight + "px";
      document.getElementById("LocatorTab").style.height = newHeight + "px";
      document.getElementById("IdentifyTab").style.height = newHeight + "px";
    }
    if (map)
    {
      map.resize();
    }
    
}
var timer;

function resize()
{
    //clear any existing resize timer
    clearTimeout(timer);
    //create new resize timer with delay of 500 milliseconds
    setTimeout(resizeGo, 500);
   
    //getW();
    //placeLoadingElement();
}



function getW(){
    var w;
    if(document.innerWidth){ 
        w=document.innerWidth;
    } 
    else if(document.documentElement.clientWidth)
    { 
        w=document.documentElement.clientWidth;
    } 
    else if(document.body){
        w=document.body.clientWidth; 
    }
    return w;
}
function getH(){
    var h;
    if(document.innerHeight){ 
        h=document.innerHeight;
    } 
    else if(document.documentElement.clientHeight){ 
        h=document.documentElement.clientHeight;
    } 
    else if(document.body){ 
        h=document.body.clientHeight; 
    }
    return h;
}

function SwitchImage(image, action){
  switch (action.toLowerCase())
  {
    case "on":
      image.src = image.src.replace(/window_close.gif/, "window_close_mouseover.gif");
      break;
    case "out":
      image.src = image.src.replace(/window_close_mouseover.gif/, "window_close.gif");
      break;
    case "disable":
      image.src = image.src.replace(/window_close.gif/, "window_close_Disabled.gif");
      break;
    case "enable":
      image.src = image.src.replace(/window_close_Disabled.gif/, "window_close.gif");
      break;
  }
}

function getBrowser() {
    var agt=navigator.userAgent.toLowerCase();
    
    if (agt.indexOf("opera") != -1) 
        return 'Opera';
    if (agt.indexOf("staroffice") != -1) 
        return 'Star Office';
    if (agt.indexOf("webtv") != -1) 
        return 'WebTV';
    if (agt.indexOf("beonex") != -1) 
        return 'Beonex';
    if (agt.indexOf("chimera") != -1) 
        return 'Chimera';
    if (agt.indexOf("netpositive") != -1) 
        return 'NetPositive';
    if (agt.indexOf("phoenix") != -1) 
        return 'Phoenix';
    if (agt.indexOf("firefox") != -1) 
        return 'Firefox';
    if (agt.indexOf("safari") != -1) 
        return 'Safari';
    if (agt.indexOf("skipstone") != -1) 
        return 'SkipStone';
    if (agt.indexOf("msie") != -1) 
        return 'Internet Explorer';
    if (agt.indexOf("netscape") != -1) 
        return 'Netscape';
    if (agt.indexOf("mozilla/5.0") != -1) 
        return 'Mozilla';
    if (agt.indexOf('\/') != -1) 
    {
        if (agt.substr(0,agt.indexOf('\/')) != 'mozilla') 
        {
            return navigator.userAgent.substr(0,agt.indexOf('\/'));
        }
        else 
            return 'Netscape';
    } 
    else if (agt.indexOf(' ') != -1)
        return navigator.userAgent.substr(0,agt.indexOf(' '));
    else 
        return navigator.userAgent;
}
   
MapProperties = function(title){
    this.properties = new Array();
    var xmlDoc = getXMLDoc("data/settings.xml");
    var mapServices = xmlDoc.getElementsByTagName("Maps")[0];
    for (i = 0; i < mapServices.childNodes.length; i++) {
        if (mapServices.childNodes[i].nodeName.indexOf("Map") != -1)
        {
            if (mapServices.childNodes[i].getElementsByTagName('Title')[0].childNodes[0].nodeValue == title){
                this.properties['Title'] = mapServices.childNodes[i].getElementsByTagName('Title')[0].childNodes[0].nodeValue;
                this.properties['Url'] = mapServices.childNodes[i].getElementsByTagName('Url')[0].childNodes[0].nodeValue;
                this.properties['Legend'] = mapServices.childNodes[i].getElementsByTagName('Legend')[0].childNodes[0].nodeValue;
                this.properties['IdentifiableLayers'] = new Array();
                var identifiableLayers = mapServices.childNodes[i].getElementsByTagName('Identify');
                for(j=0; j < identifiableLayers.length; j++){
                    var layerName = identifiableLayers[j].getElementsByTagName('LayerName')[0].childNodes[0].nodeValue;
                    this.properties['IdentifiableLayers'][layerName] = new Array();
                    this.properties['IdentifiableLayers'][layerName]['DisplayField'] = identifiableLayers[j].getElementsByTagName('FieldName')[0].childNodes[0].nodeValue;
                    this.properties['IdentifiableLayers'][layerName]['UniqueField'] = identifiableLayers[j].getElementsByTagName('UniqueField')[0].childNodes[0].nodeValue;
                    this.properties['IdentifiableLayers'][layerName]['LayerId'] = identifiableLayers[j].getElementsByTagName('LayerId')[0].childNodes[0].nodeValue;
                    this.properties['IdentifiableLayers'][layerName]['LayerUrl'] = this.properties['Url'] + "/" + this.properties['IdentifiableLayers'][layerName]['LayerId'];
                }
            }
        }
    }
    return this.properties;
  }

  function stripExcessSpace(item) {
    var tmp = "";
    var itemLength = item.length;
    var itemLengthMinus1 = item.length - 1;
    for (i = 0; i < itemLength; i++) {
      if (item.charCodeAt(i) > 32) {
        tmp += item.charAt(i);
//      } else {
//        if (tmp.length > 0) {
//          if (item.charCodeAt(i + 1) > 32 && i != itemLengthMinus1) {
//            tmp += item.charAt(i);
//          }
//        }
      }
    }
    item = tmp;
    return (item);
  }
