// server
var serverURL         = document.URL.slice(0,document.URL.indexOf("/",9));
var serverURLMapDir   = document.URL.slice(serverURL.length);
    serverURLMapDir   = serverURL+serverURLMapDir.slice(0,serverURLMapDir.indexOf("/",1));
var serverURLCacheDir = serverURLMapDir+"/cache/";

var map, mapcenter, mapOptions, zoom = 2, currentFeature;
//var bldgs, campus, selectControl, layerSwitcher, queryString;

var baseStyle, nonbaseStyle, hoverStyle, currentSelection;

/* Google overlays aren't working correctly...remove for now...
var GoogleKey='<'+'script type="text/javascript" src="http://maps.google.com/maps?file=api&v=2&key=';
if(serverURLMapDir == "https://maps.cpc-fis.vanderbilt.edu/map") {
   // https://maps.cpc-fis.vanderbilt.edu/map/
   GoogleKey+='ABQIAAAAyudI-Fg6MZtgZKuIxy27-BT_s-_ahKNRtIr-4TQbna4lW4inShTCYRdvuWryCV52ZAj4muJ2RNtzfg';
} else if(serverURLMapDir == "http://www.vanderbilt.edu/map") {
   // G00GLE Maps API key for www.vanderbilt.edu/map
   GoogleKey+='ABQIAAAAyudI-Fg6MZtgZKuIxy27-BSHlXaXYedbTbMKXkjaSTHGNLZ9iRTc9N_K3t7X47osUoZx6Y1vpbRGpQ';
   serverURLCacheDir = "http://www.vanderbilt.edu/map/cache/","http://vanderbilt.edu/map/cache/"
} else if(serverURLMapDir == "http://www.vanderbilt.edu/map_beta") {
   // G00GLE Maps API key for www.vanderbilt.edu/map_beta
   GoogleKey+='ABQIAAAAn3b74QaByVAT3aNd9KtUWhQLf-tFSheOBIrsdrAoNQRvdEpifBRVU2h0Yagr817SwxFZo3qmlmgFsw';
   serverURLCacheDir = "http://www.vanderbilt.edu/map_beta/cache/","http://vanderbilt.edu/map_beta/cache/"
}
GoogleKey+='"><'+'/script'+'>';
document.write(GoogleKey);
*/

// avoid pink tiles
OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;
OpenLayers.Util.onImageLoadErrorColor = "transparent";
OpenLayers.ProxyHost = "/cgi-bin/map/proxy.cgi?url=";

var bldg;

function initMap() {
   genLinks('map-more-info');
   sideBar();  // get a random image for the sidebar.
   mapOptions = {
         projection: new OpenLayers.Projection("EPSG:900913"),
         displayProjection: new OpenLayers.Projection("EPSG:4326"),
         units: "m",
         numZoomLevels: 5,
         maxResolution:11.212121212,
         maxExtent: new OpenLayers.Bounds(-9669000,4310000,-9657918,4326000),
         controls:[]
   };
   map = new OpenLayers.Map( 'map-content', mapOptions);
   bldgs = new OpenLayers.Control.Bookmark( {'map': map, 'allowRemove': false, 'limit': 0} );
   var scalebar = new OpenLayers.Control.ScaleBar({ displaySystem: "english" });
   map.addControl(scalebar);

   baseStyle = new OpenLayers.StyleMap({strokeColor:'#9fc195',
                                        strokeWidth:0,
                                        strokeOpacity:0,
                                        fillOpacity: 0.0,
                                        fillColor: '#9fc195'});

   nonBaseStyle = new OpenLayers.StyleMap({strokeColor:'#9fc195',
                                           strokeWidth:0.5,
                                           strokeOpacity:0,
                                           fillOpacity: 0.75,
                                           fillColor: '#9fc195'});

   hoverStyle = {strokeColor:'#0000ff',strokeWidth:0,strokeOpacity:0,fillOpacity: 0.3,fillColor: '#0000ff'};

   baselayers();
   Orthos();
   //Google(); // problem with google atm. ie doesn't function properly.

   // probable bug here.  if find result is not in the facility information, building
   // pulldown does not finish loading.
   urlParams=OpenLayers.Util.getParameters();
   if(urlParams.find != undefined) {
      cnt=urlParams.cnt != undefined ? urlParams.cnt : 0;
      loadGML(urlParams.find,cnt);
   } else {
      loadGML();
   }

   controls();

   // cached layers
   AddOverlay('artwork');
   //AddOverlay('visitorparking');
   AddOverlay('emergencyphones');

   genOverlays('map-options-overlays');
   genBaseLayers('map-options-layers');

   if(!urlParams.zoom){
      map.setCenter(new OpenLayers.LonLat(-9662989.66493102,4320249.501962396), 2);
      setBaseLayer('Campus GIS');
   }
}

function parsebldgs( div, initializeOn, initalizeCnt ) {
   var div = document.getElementById(div);
   if(typeof div == "undefined" || div == null) return;
   loadBookmarks(query, bldgs, initializeOn, initalizeCnt);
   var selectElem = document.createElement("select");
       selectElem.id = "selBldgList";
       selectElem.name = "selBldgList";
       selectElem.onchange = function(){ bldgs.zoomToId(this.value); };
   var opt = new Option();
       opt.setAttribute("selected", true);
   var optText = document.createTextNode("Building");
       opt.appendChild(optText);
   selectElem.appendChild( opt );
   for( var i=0; i<bldgs.stack.length; i++ ) {
      var opt = new Option();
      var optText = document.createTextNode(bldgs.stack[i].label);
          opt.appendChild(optText);
          opt.value = bldgs.stack[i].id;
      selectElem.appendChild(opt);
   }
   div.appendChild(selectElem);
}

function newElement(type,att,evts,appendToObj){
   var elem;
   if(isNameQuirk() && att.name != null){
      elem = document.createElement('<'+type+' id="'+att.id+'" name="'+att.name+'">');
   }else{
      elem = document.createElement(type);
   }
   for(var prop in att){
      elem.setAttribute(prop,att[prop]);
   }
   if(evts){
      for(var evt in evts){
         elem[evt] = evts[evt];
      }
   }
   if(appendToObj) appendToObj.appendChild(elem);
   return elem;
}

function isNameQuirk(){
   var elem1 = document.createElement("div");
   var elem2 = document.createElement("input");
   elem2.type = "hidden";
   elem2.name = "testName";
   elem1.appendChild(elem2);
   var isQuirk = (elem1.innerHTML.indexOf("test") == -1);
   isNameQuirk = function() {return isQuirk;}
   return isNameQuirk();
}

function genOverlays( div, mode ) {
   div = document.getElementById(div);
   var br = document.createElement("br");
   var space = document.createTextNode(" ");
   var olayer = map.getLayersBy("displayInLayerSwitcher",true);
   for( var i=0; i<olayer.length; i++) {
      if( olayer[i].isBaseLayer ) continue;
      div.appendChild(newElement("input",
                                 {type:"checkbox",
                                 id:"input_"+olayer[i].name,
                                 value:"",
                                 name:olayer[i].name
                                 },
                                 {onclick:function(){toggleLayer(this.name);}}));
      var labelElem = document.createElement("label");
          labelElem.htmlFor = document.getElementById("input_"+olayer[i].name);
          labelElem.appendChild(document.createTextNode(olayer[i].name.toUpperCase()));
      div.appendChild(labelElem);
   }
}

function genBaseLayers( div ) {
   var div = document.getElementById(div);
   if(typeof div == "undefined" || div == null) return;
   var baselayers = map.getLayersBy("isBaseLayer",true);
   var selectElem = document.createElement("select");
       selectElem.id = "setBaseLayer";
       selectElem.name = "setBaseLayer";
       selectElem.onchange = function () { setBaseLayer(this.value); };
   for( var i=0; i<baselayers.length; i++ ) {
      var opt = new Option();
          opt.value = baselayers[i].name;
      var optText = document.createTextNode(baselayers[i].name);
          opt.appendChild(optText);
      selectElem.appendChild(opt);
   }
   div.appendChild(selectElem);
}

function setBaseLayer( blayer ) {
   query.styleMap = (blayer == 'Campus GIS' ? baseStyle : nonBaseStyle);
   blayer = map.getLayersByName(blayer)[0];
   map.setBaseLayer(blayer);
}

function loadBookmarks(features, bookmarks, initializeOn, initalizeCnt) {
   for(var i=0; i<features.features.length; i++) {
      if(features.features[i].attributes.TYPE == "FACILITY") {
         var bookmarkname = features.features[i].attributes.FACILITY_NAME != undefined
                            ? features.features[i].attributes.FACILITY_NAME
                            : "";
         bookmarks.add( bookmarkname,
                        features.features[i].geometry.getBounds().toBBOX(),
                        idFeature,
                        features.features[i].id );
      }
   }
   bookmarks.sortStack("label");
   bookmarks.reindex();
   if(initializeOn) {
      initalizeCnt = parseInt(initalizeCnt) > 0 ? parseInt(initalizeCnt)-1 : 0;
      bookmarks.zoomToLabel(bookmarks.find(initializeOn)[initalizeCnt]);
   }
}

function idFeature(feature) {
   feature = query.getFeatureById(feature);
   hoverControl.select(feature,"click");
   //setTimeout( 'hoverControl.unselect(feature)', 10000);
}
