var curSelectRegion = 1;
var defaultSelectRegion = 1;
var predefinedRegionLen = 0;
var predefineHideTitle = "HIDE";
var selectionRegionDiv = "selectionRegion";

 function initExt(){
        map1.showLoading();
        var params = "mapZoom=mapZoom&fullExt=fullExt&formId=" + map1.formId + "&mapId=" + map1.id;
        params +="&" + EsriUtils.buildRequestParams(map1.formId);
        var xh = EsriUtils.sendAjaxRequest(EsriUtils.getServerUrl(map1.formId), params, false, function () {refresh(xh);} );
 }
  
// check map layer on and off information of default service  
function createBaseLayerCheckBox(){

    for (var i=0; i < baselayersId.length; i++){
         var text = "<input type=checkbox  value='" +
                    baselayersId[i] + "' id=baselayers"+i + " >";
         var icon = "<span class=colourBlock>";
         if (baselayersIcon[i]){
            icon += "<img src='/gis/images/legend/" + baselayersIcon[i] + "' >";
         }
         icon += "</span>";
    
         icon += baselayersname[i];
         document.writeln(text);
         document.writeln(icon);
        
          if (baselayersname[i] == 'ABMI Sites')
            document.writeln("(<a title='Zoom to the ABMI site display level' href='javascript: mapSlider.setValue(4, true);'>zoom</a>)");
      
        document.writeln("<br><div class='break'></div>\n"); 
    }
}

function showhideLayerSimpleByCheckBox(){
    var show = new Array();
    var hide = new Array();
    var showInd = 0;
    var hideInd = 0;

    for (var i=0; i < baselayersId.length; i++){
        var chkbox = document.getElementById("baselayers"+i);
        if (chkbox){
            if (chkbox.checked){
                show[showInd]= chkbox.value;
                showInd ++;
            }
            else{
                hide[hideInd]=chkbox.value;
                hideInd ++;
            }
        }
    }
    showhideLayerComplete(show,hide);
    
}

function showhideLayerComplete(showlayerId, hideLayerId) {
    
    map1 = EsriControls.maps[mapId];
    map1.showLoading();
  
    var params = "showhideLayer=showhideLayer&formId=" + 
    map1.formId + "&mapId=" + map1.id;

    for (var i=0; i < showlayerId.length; i++){
        params  +=  "&showlayerId=" + showlayerId[i];
    }
    
    for (var i=0; i < hideLayerId.length; i++){
        params  +=  "&hidelayerId=" + hideLayerId[i];
    }

    params += checkShowHideWmsLayer();
    params += "&" + EsriUtils.buildRequestParams(map1.formId);
    params += "&redraw=redraw";
   
    var xh = EsriUtils.sendAjaxRequest(EsriUtils.getServerUrl(map1.formId), params, false, function() { refresh(xh); });
}

/* show and hide a layer by passing a layerid */
function showhideLayerSimple(layerId, toShow) {
    map1 = EsriControls.maps[mapId];
    map1.showLoading();
    
    var params = "showhideLayer=showhideLayer&formId=" + 
                map1.formId + "&mapId=" + map1.id;
    if (toShow)
        params  +=  "&showlayerId=" + layerId;
    else
        params  +=  "&hidelayerId=" + layerId;
 
    params += "&" + EsriUtils.buildRequestParams(map1.formId);
  
    var xh = EsriUtils.sendAjaxRequest(EsriUtils.getServerUrl(map1.formId), params, false, function() { refresh(xh); });
}

function refresh(xh){
 if (xh != null && xh.readyState == 4 && xh.status == 200) {
    redrawMap(map1);    // zoom and layer option need to redrawmap
  }
}

function initStatus(){
    var params = "showlayerlist=showlayerlist&formId="+ map1.formId + "&mapId=" + map1.id;
    params +="&" + EsriUtils.buildRequestParams(map1.formId);
    
    var xh = EsriUtils.sendAjaxRequest(EsriUtils.getServerUrl(map1.formId), params, false, function() {updateSelectionBox(xh); });
  }
  
 function updateSelectionBox(xh){
   if (xh != null && xh.readyState == 4 && xh.status == 200) {
        var xml = EsriUtils.getXmlDocument(xh);
         if (testExpire(xh))
        return;
        // add in wms layer information     
        
        resultTags = xml.getElementsByTagName("wmslayers");
        var wmsLayer = document.getElementById("wmsLayers");
        var select = document.getElementById("layer");
       
        for(var j=0; j <resultTags.length; j++) {
            var layername = resultTags.item(j);
            var name = layername.getAttribute("name");
            var title = layername.getAttribute("title");
            if (title==predefineHideTitle)
                continue;
           
            var status = layername.getAttribute("status");        
         
            var text = "<input type=checkbox";
            if (status == "shown"){
                    text += " checked"; 
                }
            text += " value='" + name + "' id='" + name + "' ";
            text += " > <label> (WMS) " + title + "</label>";
       
            var span = wmsLayer.appendChild(document.createElement("div"));
            span.innerHTML = text;

            var  divd = wmsLayer.appendChild(document.createElement("div"));
            divd.className = "break";

        }
    
    
      var resultTags = xml.getElementsByTagName("layerids");
     
     
      var selectlen = select.options.length;
      var selectSet = false;
      for(var j=0; j <resultTags.length; j++) {
        //if results found, display 1st result
        
            layerid = resultTags.item(j).firstChild.nodeValue;
           if (selectSet == false){
                for (var i =0; i < selectlen; i++){
                    if (select.options[i].value == layerid){
                        select.selectedIndex = i;     
                        selectSet = true;
                        break;
                    }
             
                }
          } // end of if selectSet
            
        for (var k =0; k < baselayersId.length; k++){
            var checkbox = document.getElementById("baselayers"+k);
            
            if (checkbox.value == layerid){
                checkbox.checked = true;
            }
         }
      }
      
      if (select.options[select.selectedIndex].text.indexOf("WMS") == -1)
            showhideLayer( select, false);  
      
      // set selectio checkbox;  
      var checkBox = document.getElementById("taskSelectDeselect");
        if (checkBox){
            var bSelect = xml.getElementsByTagName("selectOrDeselect").item(0).firstChild.nodeValue;
            if (bSelect == "true"){
                 checkBox.checked = true;
            }
            else
                checkBox.checked = false;  
        }
    }
      
  }
  
  function checkShowHideWmsLayer() {
    var wmsLayer = document.getElementById("wmsLayers");    
    var aChkBox = wmsLayer.getElementsByTagName("input");
    var  params = "";
    for (var i=0; i < aChkBox.length; i++){
        var chk = aChkBox[i];    
        if (chk.type == "checkbox"  && chk.disabled == false){
            if (chk.checked){
                params += "&showwmslayerId=" + chk.value ;
            }
            else
              params  +=  "&hidewmslayerId=" + chk.value ;
         }
        }
        
        return params;
     
}

function showhideLayer(select, redraw) {
    var len = select.options.length;
    var params = "showhideLayer=showhideLayer&region=region&formId="+ map1.formId + "&mapId=" + map1.id;
    if (redraw ) {
        params += "&redraw=redraw";
     }
    
    for (var i =0; i < len; i++){
        if( select.options[i].value == '-1')
                continue;
        if (select.selectedIndex != i && select.options[i].value != '-1'){
                if ( select.options[i].text.indexOf("WMS")!= -1)
                    params += "&hidewmslayerId=" + select.options[i].value ;
                else
                    params += "&hidelayerId=" + select.options[i].value ;
        
        }
        else{
             if ( select.options[i].text.indexOf("WMS")!= -1)
                    params += "&showwmslayerId=" + select.options[i].value ;
                else
                    params += "&showlayerId=" + select.options[i].value ;
                
            }
           
         }
   

    map1.showLoading();

    params +="&" + EsriUtils.buildRequestParams(map1.formId);
    var xh = EsriUtils.sendAjaxRequest(EsriUtils.getServerUrl(map1.formId), params, false, function() {showLegends(xh);  });
 // map1.resize(map1.width, map1.height);
}


function showLegends(xh){
   
    if (xh != null && xh.readyState == 4 && xh.status == 200) {
        var xml = EsriUtils.getXmlDocument(xh);

        if (testExpire(xh))
            return;
        
        var resultTags = xml.getElementsByTagName("result");
        var tbdiv = document.getElementById(selectionRegionDiv);
        
        for (var i = tbdiv.childNodes.length-1; i>=0 ;i--)
          tbdiv.removeChild(tbdiv.lastChild);
    //request graphics update
      
        redrawMap(map1); // has to be redraw
        var regionTypeTag = xml.getElementsByTagName("regionType");
        var regionType = "main";
        if (regionTypeTag.length > 0){
            regionType = regionTypeTag.item(0).firstChild.nodeValue;
        }
    
        for(var j=0; j <resultTags.length; j++) {
            //if results found, display 1st result
            var resultTag = resultTags.item(j);
            var id = resultTag.getAttribute("id");
            var details = resultTag.getElementsByTagName("detail");
            var pDiv = tbdiv.appendChild(document.createElement("div"));
            pDiv.id = "singleRegion";
            // first icon
            var pCheckBox = pDiv.appendChild(document.createElement("p"));
            pCheckBox.className = "items";
        
            
           // checkbox
            if (regionType == "main"){
                var   htmStr = "<input type=checkbox class='checkbox' name='region"+j + "'" +
                " id ='region" + j + "' value=" + id;
               
                if (name && name.length <= 1)
                    htmStr += " disabled ";

                htmStr += ">";
                
                pCheckBox.innerHTML = htmStr; 
           }
           
            var pIcon = pDiv.appendChild(document.createElement("p"));    
            var name = resultTag.getAttribute("name");
            var icon = document.createElement('img');
            icon.src="/gis/images/legend/" + resultTag.getAttribute("icon");
            icon.alt=" icon for " + resultTag.getAttribute("name");
            icon.className = "colourBlock";
            
            pIcon.appendChild(icon);  
            pIcon.className = "items";
            
            var pLabel = pDiv.appendChild(document.createElement("p"));   
            pLabel.id="label" + j;
            pLabel.className =  "iconlabel";
            pLabel.appendChild(document.createTextNode(name));
          
            var divheight = "38";
           if (name.length < 30)
                divheight = "25";
           else if(name.length < 55)
                divheight = "31";
            
            EsriUtils.setElementStyle(pDiv, "height:" + divheight + "px;");
            // "subregion" link
            if (details && details.length > 0){
                var pArrow = pDiv.appendChild(document.createElement("p"));   
                pLabel.className = "items";
                var text = document.createElement("span");
                htmText = "<a align=right href=\"javascript:toggleWindowHTML('subregiontb"+j + "');\" >subregions<img src='/gis/images/subregionArrow_down.gif' alt='' width='20' height='10'></a>";
                
                text.innerHTML = htmText;
                
                pArrow.appendChild(text);
                
                var subtablediv = tbdiv.appendChild(document.createElement("div"));
                subtablediv.id='subregiontb' + j;
                if (regionType == "main"){
                    subtablediv.style.display='none';    
                }
                subtablediv.className="subSelectionRegion";
                
            }
    
        //display attributes
        
        for (var i=0;i<details.length;i++) {
                var detail = details.item(i);
                linerDiv = subtablediv.appendChild(document.createElement("div"));
                linerDiv.className = "subRegionItemsDiv";
                var subP = linerDiv.appendChild(document.createElement("p"));
                var subicon = document.createElement('img');
                subicon.src="/gis/images/legend/" + detail.getAttribute("icon");
                subicon.alt=" icon for " + detail.getAttribute("name");
                //   alert("images/legends/" + resultTag.getAttribute("icon"));
                subicon.className = "colourBlock";
                subicon.id = "icon"+j+i;
                
                EsriUtils.setElementStyle(subicon, "margin:0 0 0 10px;");
                if (regionType == "sub"){
                    var subInput = document.createElement('input');
                    subInput.type = 'checkbox';
                    subInput.name = "subregion" + j;
                    subInput.value=  detail.getAttribute("id");
                    subInput.id =  "region"+j+i;	
                    subInput.className = "checkbox";
                    subP.appendChild(subInput);
                }
                subP.appendChild(subicon);  
                var sublabel  = document.createElement("span");
                sublabel.className = "subiconlabel";
                sublabel.appendChild(document.createTextNode(detail.getAttribute("name")));
                
                subP.appendChild(sublabel);
        }
        
        if (details.length > 0){
            var spaceDiv = subtablediv.appendChild(document.createElement("div"));
             EsriUtils.setElementStyle(spaceDiv, "height:10px;");
        }
      
      }
      
    
    
      var predefinedRegionLen = resultTags.length;
      var highlightButton = tbdiv.appendChild(document.createElement("div"));
      highlightButton.innerHTML = ' <p>  <input name="highlight" type="button" '+ 
                                ' onclick ="highLight(' + predefinedRegionLen + ');" ' + 
                           ' value="HighLlight Selected Regions" '+ 
                           ' /> '+
                  '</p>';
                  
        if (tabSelected != 1) 
            return;
        var submitButton = document.getElementById('regionSubmitButton');     
        removeNode(submitButton);
         
        var container  = document.getElementById("submitButton");
        if (mapSourceType == 'raw'){
            container.innerHTML = ' <p>  <input name="getDetail" type="button" '+ 
                           ' id="regionSubmitButton" '+ 
                            ' onclick ="sendBioIndexQuery(' + predefinedRegionLen + ');" ' + 
                           ' value="Get detailed raw data" '+ 
                           ' class="getDetailedBioInfo"/> '+
                  '</p>';
        }
          else{
              container.innerHTML = ' <p>  <input name="getDetail" type="button" '+ 
                           ' id="regionSubmitButton" '+ 
                            ' onclick ="sendBioIndexQuery(' + predefinedRegionLen + ');" ' + 
                           ' value="Get detailed biodiversity information" '+ 
                           ' class="getDetailedBioInfo"/> '+
                  '</p>';
        }
        
    }// end of loop
}
    

function regionSubRegionSelection(len){
    var regionStr = "";
    var div = document.getElementById(selectionRegionDiv);
    var aChkBox = div.getElementsByTagName("input");
    checkboxName  = "region";
    for (var i=0; i < aChkBox.length; i++){
        var chk = aChkBox[i];    
        if (chk.type == "checkbox" && chk.id.indexOf(checkboxName) != -1 && chk.disabled == false){
            if (chk.checked){
                 regionStr += "regionId=" + chk.value + "&";
            }
        }
    }   // end of for
  
      return regionStr;
        
}
/**
**/
function sendBioIndexQuery(len) {
    map1.showLoading();
    var params = "formId=" + map1.formId + "&mapId=" + map1.id +
                "&queryBioIndex=queryBioIndex&action=predefined&";
    params += regionSubRegionSelection(len);
    params += EsriUtils.buildRequestParams(map1.formId);
    
    var xh = EsriUtils.sendAjaxRequest(EsriUtils.getServerUrl(map1.formId), params, false, function() { redirect (xh); });
}
    
function sendBioIndexQueryBySinglePredefineRegion(regionid) {
    map1.showLoading();
    
    var params = "formId=" + map1.formId + "&mapId=" + map1.id +
                "&queryBioIndex=queryBioIndex&action=predefined&";
    params += "regionId=" + regionid + "&";
    params += EsriUtils.buildRequestParams(map1.formId);
       
    var xh = EsriUtils.sendAjaxRequest(EsriUtils.getServerUrl(map1.formId), params, false, function() { redirect (xh); });
}

