/**
 * @author modified by dcesur
 */
 
//********* Pop up test to prompt users **************************
function PopupBlocked() {
    var PUtest = window.open(null,"","width=1,height=1,left=0,top=0");
    try 
    { 
        PUtest.close(); 
        return false; 
    }
    catch(e)
    { 
        return true;
    }
}


//**************************************************************** 
 
//global variable for address locator
var AddressResults = null; 


//******** function to toggle between street and aerial map 
function ToggleBaseMap(i)
{
	if (i == 1)
	{
		lyr_StreetMap.hide();
		lyr_AerialMapSARB.show();
		lyr_AerialMapBexar.show();
	}
	else
	{
		lyr_StreetMap.show();
		lyr_AerialMapSARB.hide();
		lyr_AerialMapBexar.hide();			
	}
}
//******** end function to toggle between street and aerial map 

//Function
function ExpandTabs(pTab)
{
	var vTabsDiv = dojo.byId('TabsDiv');
	if (pTab == "Themes")
	{
	    vTabsDiv.style.width="297";
	    vTabsDiv.style.left="725";	
	    vTabsDiv.style.backgroundImage = "url(images/RightTabs_ThemesOpen.png)";
	    vTabsDiv.setAttribute( 'style', 'background-image:url(images/RightTabs_ThemesOpen.png); background-repeat:no-repeat; position:relative; left:728px; top:-900px; width:297px; height:678px; z-index:79;' );	
    	
	    ShowThemeList();
	    HideWidgetList();

	}
	else
	{
	    vTabsDiv.style.width="297";
	    vTabsDiv.style.left="725";	
	    vTabsDiv.style.backgroundImage = "url(images/RightTabs_ToolsOpen.png)";
	    vTabsDiv.setAttribute( 'style', 'background-image:url(images/RightTabs_ToolsOpen.png); background-repeat:no-repeat; position:relative; left:728px; top:-900px; width:297px; height:678px; z-index:79;' );
    	
        HideThemeList();
        ShowWidgetList();
		
	}
	
}

function CloseTabs(pTab)
{
	var vTabsDiv = dojo.byId('TabsDiv');
	if (pTab == "Themes")
	{
	    vTabsDiv.style.width="33";
	    vTabsDiv.style.left="989";
	    vTabsDiv.style.backgroundImage = "url(images/RightTabs_ThemeClose.png)";	
	    vTabsDiv.setAttribute( 'style', 'background-image:url(images/RightTabs_ThemeClose.png); background-repeat:no-repeat; position:relative; left:992px; top:-900px; width:33px; height:678px; z-index:79;' );
    	
	    HideThemeList();
	    HideWidgetList();	
	
	}
	else
	{
	    vTabsDiv.style.width="33";
	    vTabsDiv.style.left="989";
	    vTabsDiv.style.backgroundImage = "url(images/RightTabs_ToolsClose.png)";	
	    vTabsDiv.setAttribute( 'style', 'background-image:url(images/RightTabs_ToolsClose.png); background-repeat:no-repeat; position:relative; left:992px; top:-900px; width:33px; height:678px; z-index:79;' );	
	
	    HideThemeList();
	    HideWidgetList();	
	}
		
}

function HideThemeList()
{
    var vShowThemeDiv = dojo.byId('MapLayerContent');
	vShowThemeDiv.style.display="none";
	vShowThemeDiv.setAttribute( 'style', 'display:none; font-size:10pt; font-weight:bold; width:260px; height:650px; overflow-y: scroll; color:black;' );

    dojo.byId('ThemesTab').setAttribute('onclick', 'ExpandTabs(\'Themes\')');
    dojo.byId('ThemesTab').onclick = function() {ExpandTabs('Themes');}
}

function ShowThemeList()
{
    var vShowThemeDiv = dojo.byId('MapLayerContent');
	vShowThemeDiv.style.display="block";
	vShowThemeDiv.setAttribute( 'style', 'display:block; font-size:10pt; font-weight:bold; width:260px; height:650px; overflow-y: scroll; color:black;' );

    dojo.byId('ThemesTab').setAttribute('onclick', 'CloseTabs(\'Themes\')');
    //to handle FF browser settings
    dojo.byId('ThemesTab').onclick = function() {CloseTabs('Themes');}
}

function HideWidgetList()
{
    var vShowWidgetDiv = dojo.byId('WidgetTools');
	vShowWidgetDiv.style.display="none";
	vShowWidgetDiv.setAttribute( 'style', 'display:none; font-size:8pt; font-weight:bold; width:260px; height:650px; overflow-y: scroll; color:black;' );
    dojo.byId('ToolsTab').setAttribute('onclick', 'ExpandTabs(\'Tools\')');
    dojo.byId('ToolsTab').onclick = function() {ExpandTabs('Tools');}}

function ShowWidgetList()
{
    var vShowWidgetDiv = dojo.byId('WidgetTools');
	vShowWidgetDiv.style.display="block";
	vShowWidgetDiv.setAttribute( 'style', 'display:block; font-size:8pt; font-weight:bold; width:260px; height:650px; overflow-y: scroll; color:black;' );
    dojo.byId('ToolsTab').setAttribute('onclick', 'CloseTabs(\'Tools\')');
    dojo.byId('ToolsTab').onclick = function() {CloseTabs('Tools');}
}


function GrabURLVars()
{
    var vars = [], hash;    
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');     
    
    for(var i = 0; i < hashes.length; i++)    
    {        
        hash = hashes[i].split('=');        
        vars.push(hash[0]);        
        vars[hash[0]] = hash[1];    
    }
    
    return vars;
}

//************* Reproject between state and latlon *******************************
function ReprojectAddrPoint(pX,pY,pWKID)
{
      myMap.graphics.clear();
      var symbol = new esri.symbol.SimpleMarkerSymbol().setStyle(esri.symbol.SimpleMarkerSymbol.STYLE_DIAMOND);
      if (pWKID == "StatePlane")
        {
        var outSR = new esri.SpatialReference({ wkid: 2278});
        var vPoint = new esri.geometry.Point(pX, pY, new esri.SpatialReference({wkid:4326}));
        }
      else
        {
        var outSR = new esri.SpatialReference({ wkid: 4326});
        var vPoint = new esri.geometry.Point(pX, pY, new esri.SpatialReference({wkid:2278}));        
        }
      
      var graphic = new esri.Graphic(vPoint, symbol);
      var projPoint;
      projPoint = geoServ.project([ graphic ], outSR, function(features) {
         AddressResults = features[0].geometry;
      });
      
}
//************** end reproject function *******************************************



//************* Address search function *****************************************
function GeocodeResult(addValue) {
	myMap.graphics.clear();

	vLocator = new esri.tasks.Locator("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Locators/ESRI_Geocode_USA/GeocodeServer");
        dojo.connect(vLocator, "onAddressToLocationsComplete", OutputGeocodeResults);
  
        var add = addValue.split(",");
        var address = {
          Address : add[0],
          City: add[1],
          State: add[2],
          Zip: add[3]
        };
        vLocator.addressToLocations(address);

}

function OutputGeocodeResults(candidates)
{
	var AddrList = "";
	var i;
	for (i=0;i<candidates.length;i++)
	{
		if (candidates[i].score > 60)
		{
			var LocX = candidates[i].location.x;
			var LocY = candidates[i].location.y;
			AddrList = AddrList + "<a onclick='ZoomToAddrResult(" + LocX + "," + LocY + ",\"" + candidates[i].address + "\");' style='cursor:pointer;'>";
			AddrList = AddrList + candidates[i].address;
			AddrList = AddrList + "</a><br><br>";
			//var blah = candidates[i].location.toJson
			//alert(candidates[i].address);		
		}
		
	}
	 
	var ShowIdentifyResult = "";
	ShowIdentifyResult = ShowIdentifyResult + "<div id='GeocodeForm' style='position:relative; left:100px; top:-1550px; width:200px; height:250px; z-index:100; display:block;'>";
    ShowIdentifyResult = ShowIdentifyResult + "<img src='images/ResultBG.png' style='opacity:0.9;filter:alpha(opacity=90)'>";
	ShowIdentifyResult = ShowIdentifyResult + "<div id='GeocodeFormContent' style='position:relative; left:10px; top:-482px; z-index:101; display:block; font-size:8pt; width:310px; height:465px; overflow-y: scroll; color:white;'>";
	ShowIdentifyResult = ShowIdentifyResult + "<table width=290><tr><td width=270 valign=top><h3 style='color:white;'>Address Search Results</h3></td>";
	ShowIdentifyResult = ShowIdentifyResult + "<td width=20 valign=top><img src='images/Close.png' onclick='ClearResultPanel();'></td></tr></table>";
	ShowIdentifyResult = ShowIdentifyResult + AddrList;
	ShowIdentifyResult = ShowIdentifyResult + "</div></div>"; 
	
	dojo.byId("WidgetResults").innerHTML = ShowIdentifyResult;
    
}

function ZoomToAddrResult(pX,pY,pAddr)
{

      myMap.graphics.clear();
      var symbol = new esri.symbol.SimpleMarkerSymbol().setStyle(esri.symbol.SimpleMarkerSymbol.STYLE_DIAMOND);
      var vWKID = myMap.spatialReference.wkid;
      var outSR = new esri.SpatialReference({wkid: vWKID});
      var vPoint = new esri.geometry.Point(pX, pY, new esri.SpatialReference({wkid:4326}));
      
      var graphic = new esri.Graphic(vPoint, symbol);
      geoServ.project([ graphic ], outSR, function(features) {
        var vLocate = features[0].geometry;
         
	    var LocPoint = new esri.geometry.Point(vLocate.x, vLocate.y, new esri.SpatialReference({ wkid: outSR }));
	    myMap.centerAndZoom(new esri.geometry.Point(vLocate.x, vLocate.y, new esri.SpatialReference({ wkid: outSR })),10);
	    var symbol1 = new esri.symbol.SimpleMarkerSymbol();
	    var infoTemplate = new esri.InfoTemplate("Location", "Address: ${address}");
        symbol1.setStyle(esri.symbol.SimpleMarkerSymbol.STYLE_DIAMOND);
        symbol1.setColor(new dojo.Color([255,0,0,0.75]));
        var attributes = { address: pAddr };
        var graphic1 = new esri.Graphic(LocPoint, symbol1, attributes, infoTemplate);
        myMap.graphics.add(graphic1);                
         
      });
	
}

//*************** end Address search function ***********************************



//************** Clear results panel *************
function ClearResultPanel()
{
    dojo.byId("WidgetResults").innerHTML = "";
}
//*************  end close results panel *********

//************** Clear results panel *************
function ClearDisclaimerPanel()
{
    dojo.byId("DisclaimerHolder").innerHTML = "";
}
//*************  end close results panel *********



//************* On page resize *********************************
//handles the case that when the user resizes the page, the click point is off.
function ReloadPage()
{
myMap.reposition();
}

//************ end on page resize *****************************



//************ Show Disclaimer pop up *****************************
function Support_PopDisclaimer()
{
    var htmlheight = document.body.parentNode.scrollHeight - 25; 
    var htmlwidth = document.body.parentNode.scrollWidth - 25; 
    var windowheight = window.innerHeight - 25; 
    var windowwidth = window.innerWidth - 25;
    if ( htmlheight < windowheight ) 
    {
        var OpenX = (windowwidth/2);
		var OpenY = (windowheight/2);
    }
    else
    {
        var OpenX = (htmlwidth/2);
		var OpenY = (htmlheight/2);
    }
	
	var URLparams = "width=800,height=600,left=" + OpenX + ",top=" + OpenY + ",scrollbars=yes";
	window.open("Disclaimer.html","DownloadWin",URLparams);

}
//*****************************************************************



//************ Drag Result window *********************************
// Global object to hold drag information.
function Browser() {
 
  var ua, s, i;
 
  this.isIE    = false;
  this.isNS    = false;
  this.version = null;
 
  ua = navigator.userAgent;
 
  s = "MSIE";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isIE = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }
 
  s = "Netscape6/";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }
 
  // Treat any other "Gecko" browser as NS 6.1.
 
  s = "Gecko";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = 6.1;
    return;
  }
}
 
var browser = new Browser();

var dragObj = new Object();
dragObj.zIndex = 0;
 
function dragStart(event, id) {
 
  var el;
  var x, y;
 
  // If an element id was given, find it. Otherwise use the element being
  // clicked on.
 
  if (id)
    dragObj.elNode = document.getElementById(id);
  else {
    if (browser.isIE)
      dragObj.elNode = window.event.srcElement;
    if (browser.isNS)
      dragObj.elNode = event.target;
 
    // If this is a text node, use its parent element.
 
    if (dragObj.elNode.nodeType == 3)
      dragObj.elNode = dragObj.elNode.parentNode;
  }
 
  // Get cursor position with respect to the page.
 
  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }
 
  // Save starting positions of cursor and element.
 
  dragObj.cursorStartX = x;
  dragObj.cursorStartY = y;
  dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);
  dragObj.elStartTop   = parseInt(dragObj.elNode.style.top,  10);
 
  if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
  if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;
 
  // Update element's z-index.
 
  dragObj.elNode.style.zIndex = ++dragObj.zIndex;
 
  // Capture mousemove and mouseup events on the page.
 
  if (browser.isIE) {
    document.attachEvent("onmousemove", dragGo);
    document.attachEvent("onmouseup",   dragStop);
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS) {
    document.addEventListener("mousemove", dragGo,   true);
    document.addEventListener("mouseup",   dragStop, true);
    event.preventDefault();
  }
}
 
function dragGo(event) {
 
  var x, y;
 
  // Get cursor position with respect to the page.
 
  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }
 
  // Move drag element by the same amount the cursor has moved.
 
  dragObj.elNode.style.left = (dragObj.elStartLeft + x - dragObj.cursorStartX) + "px";
  dragObj.elNode.style.top  = (dragObj.elStartTop  + y - dragObj.cursorStartY) + "px";
 
  if (browser.isIE) {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS)
    event.preventDefault();
}
 
function dragStop(event) {
 
  // Stop capturing mousemove and mouseup events.
 
  if (browser.isIE) {
    document.detachEvent("onmousemove", dragGo);
    document.detachEvent("onmouseup",   dragStop);
  }
  if (browser.isNS) {
    document.removeEventListener("mousemove", dragGo,   true);
    document.removeEventListener("mouseup",   dragStop, true);
  }
}

//************ End Window Drag ************************************

//************ Search Tweet Start *********************************
function SearchTweets()
{
    var currentTime = new Date();
    var month = currentTime.getMonth() + 1;
    var day = currentTime.getDate()-3;
    var year = currentTime.getFullYear();
    if (month < 10)
    {month = "0"+month;}
    if (day < 10)
    {day = "0"+day;}   
    var DateFormat = year + "-" + month + "-" + day;

    var currExtentX = (myMap.extent.xmax + myMap.extent.xmin) / 2;
    var currExtentY = (myMap.extent.ymax + myMap.extent.ymin) / 2; 
    var symbol = new esri.symbol.SimpleMarkerSymbol().setStyle(esri.symbol.SimpleMarkerSymbol.STYLE_DIAMOND);
    var outSR = new esri.SpatialReference({ wkid: 4326});
    var vPoint = new esri.geometry.Point(currExtentX, currExtentY, new esri.SpatialReference({wkid:2278}));        
      
      var graphic = new esri.Graphic(vPoint, symbol);
      var projPoint;
      projPoint = geoServ.project([ graphic ], outSR, function(features) {
         AddressResults = features[0].geometry;
    
        //var SearchTweetURL = "http://search.twitter.com/search.atom?geocode=" + AddressResults.y + "%2C" + AddressResults.x + "%2C10mi&q=&ands=&ors=flood rain environment mission museum river bexar&since=" + DateFormat;
        var SearchTweetURL = "http://search.twitter.com/search?q=flood+OR+rain+OR+environment+OR+Mission+OR+Museum+OR+river+OR+Bexar+near%3A%22" + AddressResults.y + "%2C+" + AddressResults.x + "%22+within%3A10mi";
	    var URLparams = "width=650,height=600,scrollbars=yes";
	    window.open(SearchTweetURL,"tweets",URLparams);         
         
      });
    
}
//************ end search Tweets **********************************

//************ Search Tweet Start *********************************
function fn_disclaimer()
{

	var ShowIdentifyResult = "";
	ShowIdentifyResult = ShowIdentifyResult + "<div id='divDisclaimer' style='position:relative; left:250px; top:-1550px; width:500px; height:550px; z-index:100; display:block;'>";
    ShowIdentifyResult = ShowIdentifyResult + "<img src='images/ResultBG_large.png' style='opacity:0.9;filter:alpha(opacity=90)'>";
    ShowIdentifyResult = ShowIdentifyResult + "<div id='divDisclaimerContent' style='position:relative; left:10px; top:-482px; z-index:101; display:block; font-size:8pt; width:450px; height:475px; color:white;'>";
	ShowIdentifyResult = ShowIdentifyResult + "<table width=500 align='center'><tr><td width=500 valign=top align='center'><h3 style='color:white;'>SARA GIS Disclaimer</h3></td></tr></table>";
	ShowIdentifyResult = ShowIdentifyResult + "<iframe src='disclaimer.html' width='475' height='400'></iframe>";
	ShowIdentifyResult = ShowIdentifyResult + "<table width=500 align='center'><tr><td width=500 valign=top align='center'><input type='button' value='Accept' onclick='ClearDisclaimerPanel();'></td></tr></table>";	
	ShowIdentifyResult = ShowIdentifyResult + "</div></div>"; 
	
	dojo.byId("DisclaimerHolder").innerHTML = ShowIdentifyResult;
    
}
//************ end search Tweets **********************************

// new function for geocoding using Google Maps

 function addAddressToMap(response, status) {
      //map.clearOverlays();
      if (status != google.maps.GeocoderStatus.OK) {
        alert("No Address found"); } 
       
       else {
 
 
        var place = new google.maps.Latlng();
 
 
        place = results[0].geometry.Location;
        
     
 
	var pX = place.lng;
	var pY = place.lat;
	

	
	ZoomToAddrResult(pX,pY,place.address)
	

	

 
     }
	
 }
    
 
    function showLocation() {    
  
      var addressN = document.getElementById("txtAddress").value;
      geocoder.geocode({ 'address': addressN }, function (results, status) {
          if (status == google.maps.GeocoderStatus.OK) {
              var newoutSR = new esri.SpatialReference({ "wkid": 2278 });
              var addpt;
              var addptX = results[0].geometry.location.lng();
              var addptY = results[0].geometry.location.lat();
              addpt = new esri.geometry.Point(addptX,addptY, new esri.SpatialReference({ "wkid": 4326 }));
              var geoServ2 = new esri.tasks.GeometryService("http://gis.sara-tx.org/SARAGIS/rest/services/efforts/Geometry/GeometryServer");
              geoServ2.project([addpt], newoutSR, projectedPoints,geoError);
          } else {
              alert("Geocode was not successful for the following reason: " + status);
          }

      });

  }
  function projectedPoints(projectedgeoms) {

      var newpt = projectedgeoms[0];
      myMap.centerAndZoom(newpt, 9);

      var symbol = new esri.symbol.SimpleMarkerSymbol();
      symbol.setStyle(esri.symbol.SimpleMarkerSymbol.STYLE_CIRCLE);
      symbol.setColor(new dojo.Color([255, 0, 0, 0.75]));

      var graphic2 = new esri.Graphic(newpt, symbol);
      myMap.graphics.add(graphic2);
  }

  function geoError(e) {
      var error = e;
      console.log(error);
  }
 
  
    function findLocation(address) {
      txtAddress.value = address;
      showLocation();
    }

// end Google Maps geocode
