
/**
 * Create an EsriAction which creates a  and does a callback every time the
 * timer completes.
 */
function RegionIdentifyAction(tout) {
  this.inheritsFrom(new EsriAction());
        var element, callback, bounds;
        
        var self = this;
        
        this.activate = function(elem, cb) {
        element = elem;
        callback = cb;
        element.style.cursor = "pointer";
        
        element.onmousedown = processMouseDown;
  }

  this.deactivate = function() {
    
    if (element != null) {
      element.onmousemove = null;
      element.style.cursor = "default";
    }
    element = bounds = callback = null;
  }

  function processMouseDown(e) {
    var lefttclick;
	if (!e) var e = window.event;
	if (e.which) {
        lefttclick = (e.which == 1);}
        
	else if (e.button) {
        
        lefttclick = (e.button == 1);}
        
    if (!lefttclick)
        return;

    bounds = EsriUtils.getElementPageBounds(element);
  
    var pt = EsriUtils.getXY(e).offset(-bounds.left, -bounds.top);
    
    callback(pt);
  }

  
}

/**
 * Create an EsriToolItem which uses the HoverTipsAction and on callback, sends
 * a request to the server to the attributes for the map tip.
 */
function RegionIdentifyTool(id, toolName, tout) {
  this.inheritsFrom(new EsriMapToolItem(id, toolName, new RegionIdentifyAction(tout), true));
   var self = this;

  this.init = function() { }

  this.deactivate = function() {
    if (this.action) this.action.deactivate();
    this.isActive = false;
  }

  this.update = function() { self = this; }

  /**
   * Send request to server to retrieve attribute information for the point
   */
  this.postAction = function(point) {
    self.update();
    var select = document.getElementById('layer');
    var i = select.selectedIndex;
    var layername = select.options[i].text;
    var params = "";
     if ( layername.indexOf("(WMS)")!= -1){
      
       alert("Sorry, can not identify WMS regions");
       return;
//        layername = select.options[i].value;
    }
    
    var map = self.control;
    var formId = map.formId;
    var url = EsriUtils.getServerUrl(formId);
    map.showLoading();
    point = point.offset(-map.viewBounds.left, -map.viewBounds.top);
    //build request params for processing in HoverTipsPhaseListener
   
    params = "layerId="+layername ;    
//    var params = "regionidentify=regionidentify&formId=" + formId + "&mapId=" + map.id + "&layerId=" + encodeURIComponent(document.getElementById('layer').value); 
    params += "&regionidentify=regionidentify&formId=" + formId + "&mapId=" + map.id; // + "&layerId=" + encodeURIComponent(document.getElementById('layer').value); 
   
   params += "&x=" + point.x + "&y=" + point.y + "&" + EsriUtils.buildRequestParams(formId);
    //send AJAX request to server and pass callback function
    var xh = EsriUtils.sendAjaxRequest(url, params, true, function() { response(xh, point, map.id); });
  }

  /**
   * Process response from server and display attributes in tip window
   */
  function response(xh, point, mapId) {
    if (xh != null && xh.readyState == 4 && xh.status == 200) {
        var xml = EsriUtils.getXmlDocument(xh);
        //      var xml = xh.responseXML;
        
        var errorTags = xml.getElementsByTagName(errorTag);
        var map = self.control;
        map.hideLoading();
      
        if (errorTags.length > 0){
            alert(errorTags.item(0).firstChild.nodeValue);
            return;
        }
       var popup =  gloablAreaWin.pageElement.divObject;;
       removeNodeContent(popup);
       var resultTags = xml.getElementsByTagName("querydetail");
     
      if (resultTags && resultTags.length > 0) {
      //if results found, display 1st result
          showRegionDetails(popup, resultTags, 0, 'predefined'); 
                  
//                  
      }
      else{ 
          resultTags = xml.getElementsByTagName("result");
        //if results found, display 1st result
            var resultTag = resultTags.item(0);
            var details = resultTag.getElementsByTagName("detail");
            var tb = self.tipTb;
            for (var i=tb.childNodes.length-1;i>=0;i--)
                tb.removeChild(tb.lastChild);
                 //display attributes
            //        map1.hideLoading();
           
            for (var i=0;i<details.length;i++) {
                    var detail = details.item(i);
                    var h3 = popup.appendChild(document.createElement("p"));
                     h3.appendChild(document.createTextNode(detail.getAttribute("key") + ": " + detail.getAttribute("value" )));
        
                   
                      
             }
             
              if ( resultTags.length ==0){
                    var h2 = popup.appendChild(document.createElement("H2"));
                    h2.appendChild(document.createTextNode("No region"));
                }
        }
        
         
//        //request graphics update
        var map = EsriControls.maps[mapId];
        var mapSourceNames = map.mapSourceNames;
        if (! map.isFuseGraphics) {
          for (var i=0;i<mapSourceNames.length;i++)
            map.updateWebGraphics();
        }
      
        //display tip window
        gloablAreaWin.moveTo( 405, 275);
        gloablAreaWin.show();
        gloablAreaWin.fit();
        
      
    }
  }

  
}


/**
 * Create an EsriToolItem which uses the HoverTipsAction and on callback, sends
 * a request to the server to the attributes for the map tip.
 */
function UserRegionIdentifyTool(id, toolName, tout) {
  this.inheritsFrom(new EsriMapToolItem(id, toolName, new RegionIdentifyAction(tout), true));
  this.userAreaWin;
  this.userAreaTb;
  this.divId;
  var self = this;
  
  this.init = function() {
  }

  this.deactivate = function() {
    if (this.action) this.action.deactivate();
    this.isActive = false;
    //hide tip windows when tool deactivated
    }

  this.update = function() { self = this; }

  /**
   * Send request to server to retrieve attribute information for the point
   */
  this.postAction = function(point) {
    self.update();
    var map = self.control;
    var formId = map.formId;
       map.showLoading();
    var url = EsriUtils.getServerUrl(formId);
    point = point.offset(-map.viewBounds.left, -map.viewBounds.top);
    //build request params for processing in HoverTipsPhaseListener
    var params = "userdefinedarea=userdefinedarea&action=identify&formId=" + formId + "&mapId=" + map.id +  "&x=" + point.x + "&y=" + point.y + "&" + EsriUtils.buildRequestParams(formId);
    //send AJAX request to server and pass callback function
    var xh = EsriUtils.sendAjaxRequest(url, params, true, function() { response(xh, point, map.id); });
  }

  /**
   * Process response from server and display attributes in tip window
   *
   <
			<hr />
			<h3>1,237,960 hectares</h3>
			<table>
				<tr>
					<td><strong>693</strong></td><td>ABMI Test Sites</td>
				<tr>
				<tr>
					<td><strong>100%</strong></td><td>of Alberta's boreal forest</td>
				<tr>	
								<tr>
					<td><strong>12%</strong></td><td>of North America's Boreal Forest</td>
				<tr>
				<tr>
					<td><strong>12%</strong></td><td>of North America's Boreal Forest is in Alberta</td>
				<tr>	
			</table>
			<table class="popupFeatureTable">
				<tr>
					<td><strong>Species Intactness</strong><br />92%</td>
					<td><strong>Habitat Intactness</strong><br />89%</td>
					<td><strong>Human Footprint Disturbance</strong><br />12%</td>
				</tr>
			</table>
			<p><input name="getDetail" type="submit" value="Get detailed biodiversity information" /></p>
			<p><input name="zoomIntoSubregions" type="submit" value="Zoom into the subregions" /></p>
			<p class="closePopupButton"><a href="void">Close</a></p>
			<p class="closePopupIcon"><a href="void"><img src="images/close.gif" /></a></p>
		  </div>
                  */
  function response(xh, point, mapId) {
    if (xh != null && xh.readyState == 4 && xh.status == 200) {
            var xml = EsriUtils.getXmlDocument(xh);
            //        var xml = xh.responseXML;
            var resultTags = xml.getElementsByTagName("region");
            var popup =  gloablAreaWin.pageElement.divObject;
            removeNodeContent(popup);
            map1.hideLoading();
             var errorTags = xml.getElementsByTagName(errorTag);
            if (errorTags.length > 0){
                alert(errorTags.item(0).firstChild.nodeValue);
                return;
            }
            for(var j=0; j <resultTags.length; j++) {
                 showRegionDetails(popup, resultTags, j, 'userdefined');
            }
      
      if ( resultTags.length ==0){
            var h2 = popup.appendChild(document.createElement("H2"));
            h2.appendChild(document.createTextNode("No region"));
        }
//        //request graphics update
        var map = EsriControls.maps[mapId];
        var mapSourceNames = map.mapSourceNames;
        if (! map.isFuseGraphics) {
              map.updateWebGraphics();
        }

        //display tip window
       gloablAreaWin.moveTo( 405, 275);
        gloablAreaWin.show();
        gloablAreaWin.fit();
       
     
     }
    }  

}

function showRegionDetails(popup, resultTags, j, type){
                var regionTag = resultTags.item(j);
                    if (tabSelected == 1){
                        var h2 = popup.appendChild(document.createElement("H3"));
                        var select = document.getElementById("layer");
//                       var tdtext = select.options[select.selectedIndex].text;
                         tdtext = regionTag.getAttribute("regionType");
                        h2.appendChild(document.createTextNode(tdtext));
                    }
                    
                    var h2 = popup.appendChild(document.createElement("H2"));
                    var tdtext = regionTag.getAttribute("name");
                    
                    h2.appendChild(document.createTextNode(tdtext));
                    
                    var h3 = popup.appendChild(document.createElement("h3"));
                    EsriUtils.setElementStyle(h3, "text-align:left");
                    var strongFont = document.createElement("strong");
                    strongFont.appendChild(document.createTextNode(regionTag.getAttribute("area") + " km"));
                    var sup = strongFont.appendChild(document.createElement("sup"));
                    sup.appendChild(document.createTextNode("2"));
                    h3.appendChild(strongFont);
//                    h3.appendChild(document.createTextNode(regionTag.getAttribute("area") + " KM^2"));
                    
                    var tb = popup.appendChild(document.createElement("table"));
                    EsriUtils.setElementStyle(tb, "width: 90%; text-align:left");
                    var tbody = tb.appendChild(document.createElement("tbody"));
                    var trsiteno = tbody.appendChild(document.createElement("tr"));
                    var tdsiteno = trsiteno.appendChild(document.createElement("td"));
                    tdsiteno.appendChild(document.createTextNode(regionTag.getAttribute("siteno") + " ABMI sites in this region"));
                   
                    trsiteno = tbody.appendChild(document.createElement("tr"));
                    tdsiteno = trsiteno.appendChild(document.createElement("td"));
                    tdsiteno.appendChild(document.createTextNode(regionTag.getAttribute("percentage") + "% (" +regionTag.getAttribute("sampledSite") + ") sites surveyed in this region, from " + 
                    regionTag.getAttribute("rotation") + "."));
                                   
                    var proNo = regionTag.getAttribute("protectedPercent");
                    if (proNo != "-1") {
                        var trsiteno = tbody.appendChild(document.createElement("tr"));
                        var tdsiteno = trsiteno.appendChild(document.createElement("td"));
                        tdsiteno.appendChild(document.createTextNode(regionTag.getAttribute("protectedPercent") + "% of area in parks"));
                  
                  }
                  var id = regionTag.getAttribute("id");
                  if (type=='predefined' ){
                    
                    if (id ){
                        var pItem = popup.appendChild(document.createElement("p"));
                        pItem.innerHTML = '<input name="getDetail" type="button" value="Get detailed biodiversity information" onclick="javascript:sendBioIndexQueryBySinglePredefineRegion('+id + ');"/>';
                    }
                }
                else{
                  var id = regionTag.getAttribute("id");
                    if (id ){
                        var pItem = popup.appendChild(document.createElement("p"));
                        pItem.innerHTML = '<input name="getDetail" type="button" value="Get detailed biodiversity information" onclick ="javascript:sendBioIndexQueryBySingleCustomArea(' + id +');" />';
                    }
                }
                
                   popup.appendChild(document.createElement("hr"));
}     

  /** high light regions from checkbox **/
    function highLight(len) {
        var params = "formId=" + map1.formId + "&mapId=" + map1.id +
        "&highlightidentifypreregion=highlightidentifypreregion&";
        params += regionSubRegionSelection(len);
        
        map1.showLoading();
        params += EsriUtils.buildRequestParams(map1.formId);
        
        var xh = EsriUtils.sendAjaxRequest(EsriUtils.getServerUrl(map1.formId), params, false, function() { responseRegionHighlight (xh); });
    }
    
    
function responseRegionHighlight(xh) {
    if (xh != null && xh.readyState == 4 && xh.status == 200) {
    
            var xml = EsriUtils.getXmlDocument(xh);
            //        var xml = xh.responseXML;
            
            var popup =  document.getElementById(pe.divId);
            
            removeNodeContent(popup);
            map1.hideLoading();
            var errorTags = xml.getElementsByTagName(errorTag);
            if (errorTags.length > 0){
                alert(errorTags.item(0).firstChild.nodeValue);
                return;
            }
            
            var resultTags = xml.getElementsByTagName("querydetail");
            
            for (var i = 0; i < resultTags.length ; i++) {
                //if results found, display 1st result
                showRegionDetails(popup, resultTags, i, 'predefined'); 
            }
            
            if ( resultTags.length ==0){
                var h2 = popup.appendChild(document.createElement("H2"));
                h2.appendChild(document.createTextNode("No region"));
            }
            //        //request graphics update
            var map = EsriControls.maps[mapId];
            var mapSourceNames = map.mapSourceNames;
            if (! map.isFuseGraphics) {
                 map.updateWebGraphics();
            }
            
            //display tip window
            
            gloablAreaWin.fit();
            gloablAreaWin.moveTo( 405, 275);
            gloablAreaWin.show();
        
         }
     
    }    

//Initialize HoverTipsTool item.
var regionIdentifyTool;
var userRegionIdentifyTool;

function initRegionIdentifyTool() {


  regionIdentifyTool = new RegionIdentifyTool("regionIdentifyTool", "Region Identify", 500);
  

  userRegionIdentifyTool = new UserRegionIdentifyTool("userregionIdTool", "UserRegion Identify", 500);
}  
    
    
    
    
