var dynamicMapServiceLayer;
var RoadLayerID;
var PostCodeLayerID;
var TreeLayer;
var MonumentLayer;
var MonumentBufferLayer;
var ListedBuildingLayer;
var BuildingControlLayer;
var PlanningLayer;
var CurrentLayerID;
var MapIsShowing = false;
var MapIsShowing2 = false;
var SearchTxt = "";
var Pcode = "";

function init() {
  var layersLoaded = 0; 
  loading = dojo.byId("loadingImg");
	esri.hide(loading);
  Searching = 0;
  //esriConfig.defaults.map.slider = { left:"10px", top:"10px", width:null, height:"100px" };
  //esriConfig.defaults.map.sliderLabel = null; 
  Tool = "Pan"  
  SearchTool = "PostCodeSearch"  
  map = new esri.Map("MapDiv");
  
  hideLoading();  
  navToolbar = new esri.toolbars.Navigation(map);
  AddEvents();
  dynamicMapServiceLayer = new esri.layers.ArcGISDynamicMapServiceLayer(MapServicePath);  
  map.addLayer(dynamicMapServiceLayer);
  Update_Event = dojo.connect(dynamicMapServiceLayer, "onUpdate", hideLoading);//must be after addlayer or onclick event fails !  
  dojo.connect(window, "onresize", function() {
    clearTimeout(timer);                                      //clear any existing resize timer
    timer = setTimeout(function() { map.resize(); }, 500);    //create new resize timer with delay of 500 milliseconds
  });
  SearchTypeClick("Postcode");
  SetButtonBorder(Tool,'1');
  Loaded = true
  window.resizeBy(1,1); 
  window.resizeBy(-1,-1);    

  
  
  if   (dynamicMapServiceLayer.loaded) 
  {
  LayerID(dynamicMapServiceLayer);
  }
  else
  {
  dojo.connect(dynamicMapServiceLayer, "onLoad", LayerIDWait);
  }
}//-----------------------------------------------------------------------------------------
function LayerIDWait(Layer) {
  //if (MapIsShowing2) 
    {LayerID(Layer);
		map.hideZoomSlider();
		map.disableScrollWheelZoom();}
  //else
  //  {clearTimeout(timer);                                        
  //  timer = setTimeout(function() { LayerIDWait(Layer) }, 250);}  
    
    
    
    
    
    
  //while (MapIsShowing2 == false)
	//	{
	//	
	//	}
	//{LayerID(Layer);
	//map.hideZoomSlider();
	//map.disableScrollWheelZoom();}
     
}//-----------------------------------------------------------------------------------------
function LayerID(Layer) {
  var infos = Layer.layerInfos, info;  
  SetTool('Pan');
  for (var i=0, il=infos.length; i<il; i++) {
    info = infos[i];          
    if (info.name.toLowerCase() == "pcode") { PostCodeLayerID = info.id;}
    if (info.name.toLowerCase() == "roads") { RoadLayerID = info.id;}    
    if (info.name.toLowerCase() == "road_polygons") { RoadLayerID = info.id;}    
    if (info.name.toLowerCase() == "protected_trees") { TreeLayer = info.id;}
    if (info.name.toLowerCase() == "listed_monuments") { MonumentLayer = info.id;}
    if (info.name.toLowerCase() == "listed_monuments_3mbuffer") { MonumentBufferLayer = info.id;}
    if (info.name.toLowerCase() == "listed_buildings") { ListedBuildingLayer = info.id;}
    if (info.name.toLowerCase() == "buildingcontrol") { BuildingControlLayer = info.id;}
    if (info.name.toLowerCase() == "planning") { PlanningLayer = info.id;}    
  }
    
	//alert(  
  //   " BC = " + BuildingControlLayer + 
  //   " P = " + PlanningLayer +
  //   " R = " + RoadLayerID +
  //   " PC = " + PostCodeLayerID  +
  //   " LB = " + ListedBuildingLayer  +
  //   " PTD = " + TreeLayer  +
  //   " LM = " + MonumentLayer  +
  //   " LMB = " + MonumentBufferLayer
	//);
  
  // zoom to command line
  var ZoomToLayer = GetParameter("layer");
  var Key = GetParameter("key");  
  var ZoomToLayer = ZoomToLayer.toLowerCase();
  var Key = Key.toLowerCase();
  var Layer = ""  
  if (ZoomToLayer > "") {   
    if (ZoomToLayer == "road")         {Layer = "Road"};
    if (ZoomToLayer == "postcode")     {Layer = "PostCode"};
    if (ZoomToLayer == "planning")     {Layer = "Planning"};
    if (ZoomToLayer == "building")     {Layer = "Building"};
    if (ZoomToLayer == "tree")         {Layer = "Tree"};
    if (ZoomToLayer == "monument")     {Layer = "Monument"};
    if (Layer > "") {
      SearchTypeClick(Layer);
      document.PCodeForm.PCode.value = Key; 
      ShowByID("SelectSearchTypeDiv",false);
      FindLocation();
      } 
  }     
}//-----------------------------------------------------------------------------------------
function AddEvents() {
  Extent_Event = dojo.connect(navToolbar, "onExtentHistoryChange", extentHistoryChangeHandler);
  Load_Event   = dojo.connect(map, "onLoad", showLoading);
  Zoom_Event   = dojo.connect(map, "onZoomStart", showLoading);
  Pan_Event    = dojo.connect(map, "onPanStart", showLoading);  
  Click_Event  = dojo.connect(map, "onClick", OnMapClick); 
  Unload_Event = dojo.connect(map, "onUnload", RemoveEvents);  
}//-----------------------------------------------------------------------------------------
function RemoveEvents() {
  dojo.disconnect(Extent_Event);
  dojo.disconnect(Load_Event);
  dojo.disconnect(Zoom_Event);
  dojo.disconnect(Pan_Event);
  dojo.disconnect(Click_Event);
  dojo.disconnect(Update_Event);
  dojo.disconnect(Unload_Event);
}//-----------------------------------------------------------------------------------------
function killsubmit(){  
  FindLocation();
  return false;
}//-----------------------------------------------------------------------------------------
function extentHistoryChangeHandler() {
  dijit.byId("zoomprev").disabled = navToolbar.isFirstExtent();
  dijit.byId("zoomnext").disabled = navToolbar.isLastExtent();
}//-----------------------------------------------------------------------------------------
function left(str, n){
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0,n);
}//-----------------------------------------------------------------------------------------
function right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}//-----------------------------------------------------------------------------------------
function RoadSearch() {
  Pcode = SearchTxt;         
  findTask = new esri.tasks.FindTask(MapServicePath);
  findParams = new esri.tasks.FindParameters();
  findParams.returnGeometry = true;
  findParams.layerIds = [RoadLayerID] ; 
  findParams.searchFields = ["ROAD"];
  findParams.searchText = Pcode;    
  Searching = 1 ;
  ShowSearching();        
  findTask.execute(findParams,showRoadResults);
}//-----------------------------------------------------------------------------------------
function RoadClick(Index) {
    var curFeature = RoadResults[Index];
    var graphic = curFeature.feature;
    var theExtent = curFeature.feature.geometry.getExtent();
    theExtent.xmax = theExtent.xmax + 100
    theExtent.ymax = theExtent.ymax + 100
    theExtent.xmin = theExtent.xmin - 100
    theExtent.ymin = theExtent.ymin - 100
    map.setExtent(theExtent);
    HilightRoad(graphic);
    ShowByID("RoadChoiceDiv",false);
    document.PCodeForm.PCode.focus();
}//-----------------------------------------------------------------------------------------
function showRoadResults(results)    {
  //find results return an array of findResult.      
  map.graphics.clear();
  var dataForGrid = [];
  var Factor = 200; 
  var content = "" ;
  var Max = 10;
  var Warn = false ;
  
  var theDiv = document.getElementById("RoadChoiceDiv");
  var height = theDiv.offsetHeight;
  var Max = 0;
  var MaxItems = (height-80) / 25;
    
  ShowByID("RoadChoiceDiv",true);
  RoadResults = results ;
  if (RoadResults.length > 0) { // more than one result    
    ShowByID("NoneFoundDiv",false); 
    
    content = content + "<div style='position: absolute; top:3px; right:3px;'>"
    content = content + " <img src='/images/CloseButton.gif' onclick='HideSearch();' align='right' />"
    content = content + "</div>"
    content = content + "<table height='25px' width='100%'>"
    content = content + "  <tr bgcolor=#2F67A0 style='text-align:center; color:white;'>"
    content = content + "    <td align='center' width='250'>"
    content = content + "      Search results click one "
    content = content + "    </td>"
    content = content + "  </tr>"
    content = content + "</table>"  
    
    content = content + "<table width='100%'>"      
    
    Max = results.length;
    if (Max > (MaxItems-2))  { 
      Max = MaxItems-2;
      content = content + "<tr><td align='center' bgcolor='red' onclick='HideSearch();'>Too many results, refine your search</td></tr>" ;
    }
    for (var i=0, il=Max; i<il; i++)
      {
      var curFeature = results[i];
      attribs = curFeature.feature.attributes;   
      content = content + "<tr><td align='center' onclick='RoadClick(" + i + ");'>" +  attribs.ROAD + " - " + attribs.PARISH + "</td></tr>" ;
            
			var graphic = curFeature.feature;
			symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_NULL, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0,255,255]), 4), new dojo.Color([0,255,255,0.25]));
			graphic.setSymbol(symbol);
			map.graphics.add(graphic);
      }
    content = content + "</table>"    
    resulttxt = document.getElementById("RoadChoiceDiv");
    resulttxt.innerHTML = content;     
    document.PCodeForm.button.focus()
		} else {   
      ShowByID("NoneFoundDiv",true);
      ShowByID("RoadChoiceDiv",false);
    }  
   if (RoadResults.length == 1) { // one result only
      ShowByID("NoneFoundDiv",false);
      RoadClick(0);
      }
  if (Searching > 0) { Searching = 0 ; }  
  ShowSearching();     
}//----------------------------------------------------------------------------------------- 
  function ShowSearching() { 
    //if (Searching > 0) {
    //  ShowByID("SearchImg",true);
    //} else {
    //  ShowByID("SearchImg",false);
    //}
}//-----------------------------------------------------------------------------------------
function PostCodeSearch() {  
  Pcode = SearchTxt.replace(/ /g,"");  
  if (String(Pcode).length == 6) {
		findTask = new esri.tasks.FindTask(MapServicePath);
		findParams = new esri.tasks.FindParameters();
		findParams.returnGeometry = true;
		findParams.layerIds = [PostCodeLayerID] ; // [4] ; //
		findParams.searchFields = ["POSTCODE"];
		findParams.searchText = Pcode;
		findTask.execute(findParams,showPostCodeResults);
		Searching = 1 ;
		ShowSearching();  
  } else {
		alert("Postcode must be 6 letters & numbers.");
  } 
	ShowByID("RoadChoiceDiv",false);
}//-----------------------------------------------------------------------------------------
function showPostCodeResults(results)    {
  map.graphics.clear();
  var dataForGrid = [];
  var thejson;
  var Factor = 200; 
  var curFeature = results[0];
    
  if (results.length > 0) 
    {
    var graphic = curFeature.feature;
    thejson = graphic.geometry.toJson();
    var thepoint = new esri.geometry.Point( thejson);
    var customExtent = new esri.geometry.Extent(thepoint.x-Factor ,thepoint.y-Factor ,thepoint.x+Factor ,thepoint.y+Factor , new esri.SpatialReference({wkid: 3108}));
    map.setExtent(customExtent );         
    ShowByID("NoneFoundDiv",false);
    }
  else
    {
    ShowByID("NoneFoundDiv",true);
    }   
  if (Searching > 0) { Searching = 0 ; }
  ShowSearching();     
}//----------------------------------------------------------------------------------------- 
function OnMapClick(evt) {
	if (Tool == "Question")	{FindKeys(evt);}
}//----------------------------------------------------------------------------------------- 
function ShowByID(ID,HideShow){
    var value
    if (HideShow)
    {value = 'visible';} 
    else
    {value = 'hidden';}   
    if (document.getElementById) 
    {document.getElementById(ID).style.visibility = value;} 
}//-----------------------------------------------------------------------------------------
function showLoading() {
  //esri.show(loading);
  //map.hideZoomSlider();
}//-----------------------------------------------------------------------------------------
function hideLoading() {
  //esri.hide(loading);
  //map.showZoomSlider();
  if (MapIsShowing == false) 
    {MapIsShowing = true} 
   else
    {if (MapIsShowing2 == false) {MapIsShowing2 = true}
    }  
}//-----------------------------------------------------------------------------------------
function SetTool(ToolClicked){
  SetButtonBorder(Tool,'0')  
  Tool = ToolClicked  ;
  SetButtonBorder(Tool,'1')  
       if (ToolClicked == "Pan") {navToolbar.activate(esri.toolbars.Navigation.PAN);			}  
  else if (ToolClicked == "In")  {navToolbar.activate(esri.toolbars.Navigation.ZOOM_IN);	}  
  else if (ToolClicked == "Out") {navToolbar.activate(esri.toolbars.Navigation.ZOOM_OUT);	}
  else if (ToolClicked == "Question") 
		{
		navToolbar.deactivate();	
		map.disableScrollWheelZoom();													
		}
}//----------------------------------------------------------------------------------------- 
  function SetButtonBorder(Button,Size) { 
    var Border;    
    if (document.getElementById) {
      Border = Size + "px groove #FFFFFF"
      document.getElementById(Button).style.border = Border;
    } 
    if (Loaded) {document.PCodeForm.PCode.focus();}  
}//-----------------------------------------------------------------------------------------
function SelectSearchType() {
    ShowByID("SelectSearchTypeDiv",true);
}//-----------------------------------------------------------------------------------------    
function HideSearch() {
  ShowByID("RoadChoiceDiv",false);
}//-----------------------------------------------------------------------------------------
function HideResultTableDiv() {
  ShowByID("ResultTableDiv",false);
}//-----------------------------------------------------------------------------------------
function buildLayerList(layer) {
  var infos = layer.layerInfos, info;
  var Content = dojo.byId("SelectSearchTypeDiv").innerHTML +  " <br />" ;   
   
  for (var i=0, il=infos.length; i<il; i++) 
    {
    info = infos[i];
    Content = Content + info.id + "=" + info.name + " <br />" ;   
    }
    dojo.byId("SelectSearchTypeDiv").innerHTML = Content;
}//-----------------------------------------------------------------------------------------
function Hilight(Graphic) {
  //symbol = new esri.symbol.SimpleFillSymbol(
	//	esri.symbol.SimpleFillSymbol.STYLE_CROSS, 
	//	new esri.symbol.SimpleLineSymbol(
	//	esri.symbol.SimpleLineSymbol.STYLE_DASHDOT, new dojo.Color([255,255,0]), 4),
	//	new dojo.Color([255,255,0,0.25]));
	symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_NULL, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0,255,255]), 4), new dojo.Color([0,255,255,0.25]));
  map.graphics.clear();
  Graphic.setSymbol(symbol);
  map.graphics.add(Graphic);
}//-----------------------------------------------------------------------------------------
function HilightRoad(Graphic) {
  symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_NULL, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0,255,255]), 4), new dojo.Color([0,255,255,0.25]));
	map.graphics.clear();
  Graphic.setSymbol(symbol);
  map.graphics.add(Graphic);
}//-----------------------------------------------------------------------------------------
function GetParameter( name ){  
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );  
  if( results == null )    return "";
  else    return results[1];
}//-----------------------------------------------------------------------------------------
function ShowBlankResult(){
  var theDiv = document.getElementById("RoadChoiceDiv");
  var content = "" ;  
  ShowByID("RoadChoiceDiv",true);
  ShowByID("NoneFoundDiv",false);
  content = content + "<div style='position: absolute; top:3px; right:3px;'>"
  content = content + " <img src='/images/CloseButton.gif' onclick='HideSearch();' align='right' />"
  content = content + "</div>"
  content = content + "<table height='25px' width='100%'>"
  content = content + "  <tr bgcolor=#2F67A0 style='text-align:center; color:white;'>"
  content = content + "    <td align='center' width='250'>"
  content = content + "      Search results, click one "
  content = content + "    </td>"
  content = content + "  </tr>"
  content = content + "</table>"  
  resulttxt = document.getElementById("RoadChoiceDiv");
  resulttxt.innerHTML = content;   
}//-----------------------------------------------------------------------------------------
