﻿var map = null;

//if we enter page with query string to display (a) datapoint(s) we need to delete all these before
//normal functioning of the page otherwise some pins will turn on and off at the wrong time
var deletepoint = false;

var singlepoint = false;


function OnLoad(sender, eventArgs)
{
   DataService.GetCountyData(1, onGetCountyDataComplete)
   ShowData();
}

function onGetCountyDataComplete(countyData)
{
   map = new VEMap('map');
   map.LoadMap(new VELatLong(countyData.Lat, countyData.Lon), countyData.Zoom,'r' , false);     
   map.SetScaleBarDistanceUnit(VEDistanceUnit.Kilometers);    
   map.AttachEvent("oncontextmenu", ShowPopupMenu);   
   ResizeMap();
}

function ShowData()
{
   window.gQueryString = new QueryString();
   gQueryString.Read();
   
   var routeId = gQueryString.GetValue("routeId");   
   var dataId = gQueryString.GetValue("dataId");   
   var serviceId = gQueryString.GetValue("serviceId");   
   var townId = gQueryString.GetValue("townId");   

   if ((serviceId != null))
   {
        GetMapData(serviceId);
   }
   
   
//   if ((serviceId != null))
//   {
//       if (dataId != null) 
//           singlepoint = true;
//       GetMapData(serviceId, dataId);
//       deletepoint = true; 
//   }
   
   if (townId != null)
   {
       GetTownData(townId);
   }
}

function GetTownData(townId)
{
    DataService.GetTownData(townId, onGetTownDataComplete);
}
            
function onGetTownDataComplete(townData)
{
    map.SetCenterAndZoom(new VELatLong(townData.Lat, townData.Lon), townData.Zoom);            
}


//-------------------Adding Pins-------------------------------- 

function GetMapData(serviceId, dataId)
{
    if (deletepoint)
    {
       ClearPins();
       deletepoint = false;      
    }
    DataService.GetMapData(serviceId, dataId, onGetMapDataComplete);
    
}

function onGetMapDataComplete(mapdatas)
{
    DoPin(mapdatas)
}

 function DoPin(mapdatas)
 {  
   
   for (var n = 0; n < mapdatas.length; n++)
   {
        //don't add if there already
        var pinElement = document.getElementById(mapdatas.getItem(n).Id);

        if (pinElement == null)   
        {
            var pin = new VEPushpin(mapdatas.getItem(n).Id, 
                        new VELatLong(mapdatas.getItem(n).Lat, mapdatas.getItem(n).Lon), 
                        mapdatas.getItem(n).ServiceImage, 
                        mapdatas.getItem(n).Title, 
                        mapdatas.getItem(n).Description
                        );
            map.AddPushpin(pin);
            
            
            if (singlepoint)
            {
                map.SetCenterAndZoom(new VELatLong(mapdatas.getItem(n).Lat, mapdatas.getItem(n).Lon), mapdatas.getItem(n).Zoom);            
                singlepoint = false;
            }
            
        }
        else
        if (pinElement != null)   
        {
            map.DeletePushpin(mapdatas.getItem(n).Id);   
        }
   }
 }  

 function ClearPins()
 {  
   deleteRoute(); 
   map.DeleteAllPushpins();
 }
 
function GoToArea(areaID, zoom)
{
	box = document.form1.selArea;
	coords = box.options[box.selectedIndex].value;
	
    if (coords == -1)
    {
        return; //do nothing
    }
	
    var coords_array=coords.split(",");
    
    map.SetCenterAndZoom(new VELatLong(coords_array[0], coords_array[1]), coords_array[2]);            
   
}


 //adds a polygon to the map - here for demo purposes

 function AddPolygon()
 {   
    var points = new Array(
      new VELatLong(53,-7.32),
      new VELatLong(53,-7.34),
      new VELatLong(52.99,-7.34),
      new VELatLong(52.99,-7.32),
      new VELatLong(52.995,-7.3),
      new VELatLong(53,-7.32)
      );

   poly = new VEPolygon('polygon1',points);
   poly.SetOutlineWidth(1);
   poly.SetOutlineColor(new VEColor(0,150,100,1.0));
   poly.SetFillColor(new VEColor(0,150,100,0.5));
   map.AddPolygon(poly);
   //map.SetMapView(points); 
 }   
 
 //finds the route between 2 points - here for demo purposes
 
 function GetRoute()
 {
 
    //   53.01699167, -7.30623333
    //  53.0000000000, -7.3200000000


    map.GetRoute(new VELatLong(53.01363189769785,-7.311442941427245),
             new VELatLong(53.03221672695557, -7.299583554267883),
             VEDistanceUnit.Kilometers,
             null,
             onGotRoute);   
}


function onGotRoute(route)
{
   var routeinfo="Route info:\n\n";
    routeinfo+="Total distance: ";
    routeinfo+=   route.Itinerary.Distance+" ";
    routeinfo+=   route.Itinerary.DistanceUnit+"\n";
    
    var steps="";
    var len = route.Itinerary.Segments.length;
       for(var i = 0; i < len ;i++)
       {
          steps+=route.Itinerary.Segments[i].Instruction+" -- (";
          steps+=route.Itinerary.Segments[i].Distance+") ";
          steps+=route.Itinerary.DistanceUnit+"\n";
       }
    routeinfo+="Steps:\n"+steps;
    alert(routeinfo);
}

function ResizeMap() //resize
{

    map.Resize(Width(),Height()); 
  
}

function Width()
{
    var x;
    if (self.innerHeight) // all except Explorer
    {
        x = self.innerWidth;
    }
    else if (document.documentElement && document.documentElement.clientHeight)
    // Explorer 6 Strict Mode
    {
        x = document.documentElement.clientWidth;
    }
    else if (document.body) // other Explorers
    {
        x = document.body.clientWidth;
    }
    
    x = x-200;
    
    return x;
}

function Height()
{
    var y;
    if (self.innerHeight) // all except Explorer
    {
        y = self.innerHeight;
    }
    else if (document.documentElement && document.documentElement.clientHeight)
    // Explorer 6 Strict Mode
    {
        y = document.documentElement.clientHeight;
    }
    else if (document.body) // other Explorers
    {
        y = document.body.clientHeight;
    }
 
 return y-150;
}

function UnloadMap() //dispose map etc
{
  if (map != null)
  {
    map.Dispose();
  }
} 
 
//used for processing query string elements - see http://www.codeproject.com/jscript/JSCookieQueryStrWrapper.asp
function QueryString() {
	var data = [];
	this.Read = function() 
	{
		var aPairs, aTmp;
		var queryString = new String(window.location.search);
		queryString = queryString.substr(1, queryString.length); //remove "?"
		aPairs = queryString.split("&");	
		
		for (var i=0 ; i<aPairs.length; i++)
		{
			aTmp = aPairs[i].split("=");
			data[aTmp[0]] = aTmp[1];
		}
	}
	
	this.GetValue = function( key )
	{
		return data[key];
	}
	this.SetValue = function( key, value )
	{
		if (value == null)
			delete data[key];
		else 
			data[key] = value;
	}
	this.ToString = function()
	{
		var queryString = new String(""); 
		
		for (var key in data)
		{	
			if (queryString != "")
				queryString += "&"
			if (data[key])
				queryString += key + "=" + data[key];		
		}
		if (queryString.length > 0)
			return "?" + queryString;
		else
			return queryString;
	}
	this.Clear = function()
	{
		delete data;
		data = [];
	}
}


//-------------------Directions-------------------------------- 





// map.AttachEvent("onclick", OnMapClick);
//   function OnMapClick(e)
//   {
//     // document.getElementById('lblTest').innerHTML = 'Latitude = ' + e.view.latlong.latitude + ', Longitude = ' + e.view.latlong.longitude + ', Zoom=' + e.view.zoomLevel;
//      alert('Latitude = ' + e.view.latlong.latitude + ', Longitude = ' + e.view.latlong.longitude + ', Zoom=' + e.view.zoomLevel);
//   }



//-------------------Navigation start--------------------------------
var toggleMenu = {
	init : function(sContainerClass, sHiddenClass) {
		if (!document.getElementById || !document.createTextNode) {return;} // Check for DOM support
		var arrMenus = this.getElementsByClassName(document, 'ul', sContainerClass);
		var arrSubMenus, oSubMenu, oLink;
		for (var i = 0; i < arrMenus.length; i++) {
			arrSubMenus = arrMenus[i].getElementsByTagName('ul');
			for (var j = 0; j < arrSubMenus.length; j++) {
				oSubMenu = arrSubMenus[j];
				oLink = oSubMenu.parentNode.getElementsByTagName('a')[0];
				oLink.onclick = function(){toggleMenu.toggle(this.parentNode.getElementsByTagName('ul')[0], sHiddenClass); return false;}
				this.toggle(oSubMenu, sHiddenClass);
			}
		}
	},
	toggle : function(el, sHiddenClass) {
		var oRegExp = new RegExp("(^|\\s)" + sHiddenClass + "(\\s|$)");
		el.className = (oRegExp.test(el.className)) ? el.className.replace(oRegExp, '') : el.className + ' ' + sHiddenClass; // Add or remove the class name that hides the element
	},
/* addEvent function from http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html */
	addEvent : function(obj, type, fn) {
		if (obj.addEventListener)
			obj.addEventListener(type, fn, false);
		else if (obj.attachEvent) {
			obj["e"+type+fn] = fn;
			obj[type+fn] = function() {obj["e"+type+fn](window.event);}
			obj.attachEvent("on"+type, obj[type+fn]);
		}
	},
/*
Written by Jonathan Snook, http://www.snook.ca/jonathan Add-ons by Robert Nyman, http://www.robertnyman.com */
	getElementsByClassName : function(oElm, strTagName, strClassName){
	    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
	    var arrReturnElements = new Array();
	    strClassName = strClassName.replace(/\-/g, "\\-");
	    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	    var oElement;
	    for(var i=0; i<arrElements.length; i++){
	        oElement = arrElements[i];      
	        if(oRegExp.test(oElement.className)){
	            arrReturnElements.push(oElement);
	        }   
	    }
	    return (arrReturnElements)
	}
};
toggleMenu.addEvent(window, 'load', function(){toggleMenu.init('menu','hidden');});

//-------------------Navigation end-------------------------------- 




