﻿// JScript File
//GENERAL CONSTANTS

var map = null;
var currentLayer = 0;
var intServiceLoop = 0;
var timerRef = null;
var intervalRef = "";
var objFeedbackArea = null;
var intRefreshRate = 5*60000; //value multiplied by 60000 to equal minutes
//Normal Processing, this is replaced in tripplanning
//var ArrayEvents=new Array("/VA511/webServices/GeoRSSFeed.asmx/GetGeorssPointLayer","/VA511/webServices/GeoRSSFeed.asmx/GetGeorssCPointLayers","/VA511/webServices/GeoRSSFeed.asmx/GetGeorssLineLayer","/VA511/webServices/GeoRSSFeed.asmx/GetGeorssCLineLayers");

//var ArrayEvents=new Array("webServices/GeoRssFeed.asmx/GetGeorssEvents","webServices/GeoRSSFeed.asmx/GetGeorssPointLayer","webServices/GeoRssFeed.asmx/GetGeorssBridges");
//Without weather conditions.
var ArrayEvents = new Array("webServices/GeoRssFeed.asmx/GetGeorssCLineLayers", "webServices/GeoRssFeed.asmx/GetGeorssCPointLayers", "webServices/GeoRssFeed.asmx/GetGeorssEvents", "webServices/GeoRSSFeed.asmx/GetGeorssPointLayer", "webServices/GeoRssFeed.asmx/GetGeorssBridges");

var boolFeedRunning = false;
var boolHasCentered = false;

///This method sets the interval to call the webservices and plot points

function startLayers(){
	//GeoRSSFeed.GetGeorssPointLayer(SucceededCallback, FailedCallback);

	intServiceLoop = 0;
	objFeedbackArea = document.getElementById("dvResult");
	objFeedbackArea.innerHTML= "&nbsp;&nbsp;<img src='./Images/ajax-loader.gif' height='16' width='16' title='loading' />&nbsp;Refreshing Map";
	intervalRef = window.setInterval('AddMyLayer()',100);
}

//function SucceededCallback(result){
//	//tried to add the xmldoc returned into a shape layer and no luck.
//	//virtual earth requires a link to an xml doc, even if it is a webservice returning the xml data
//}

//  Display any errors that occur
//function FailedCallback(result)
//{
//    var message = error.get_message();
//    alert('An unhandled exception has occurred:\n' + message);
//}

var remoteTileURL = "";
var showTile = true;

function AddORCITile()
{
    if (showTile == true)
    {
        //var tileLayerURL = 'http://192.168.100.9:8080/geoserver/gwc/service/ve?quadkey=%4&format=image/png&layers=dg:RouteWeatherReports';
        //var tileLayerURL = 'http://209.96.234.113:8080/geoserver/gwc/service/ve?quadkey=%4&format=image/gif&layers=dg:RouteWeatherReportsSorted';
        var tileLayerURL = 'http://209.96.234.67:8080/geoserver/gwc/service/ve?quadkey=%4&format=image/png&layers=dg:RouteWeatherReportsSorted';

        if (remoteTileURL != "")
        {
            tileLayerURL = remoteTileURL
        }

        var now = new Date();
        tileLayerURL = tileLayerURL + "&t=" + now.getTime();
        //alert("url=" + tileLayerURL);

        var tileSourceSpec = new VETileSourceSpecification('RouteWeatherReports', tileLayerURL);
        tileSourceSpec.Opacity = 1;
        tileSourceSpec.NumServers = 1;
        tileSourceSpec.MinZoomLevel = MinMapZoomLevel;
        tileSourceSpec.MaxZoomLevel = MaxMapZoomLevel;
        tileSourceSpec.ZIndex = 100;

        map.AddTileLayer(tileSourceSpec, true);
    }
}


function RefreshMap()
{
    DeleteShapeLayer("RouteWeatherReports");
	AddORCITile();
    startLayers();
}


function AddMyLayer()
{
    if (boolHasCentered == false)
    {
        if (zoomLat != 0 && zoomLon != 0)
        {
            centerZoom(zoomLat, zoomLon, 12);
        }
    }
    boolHasCentered = true;
    //var objCO = new VEClusteringOptions();
    
	if (boolFeedRunning == false){
		boolFeedRunning = true;
		DeleteShapeLayer("feedLayer" + (intServiceLoop + 1));
		
		//Create feedlayer
		eval("feedLayer" + (intServiceLoop + 1) + " = new VEShapeLayer();");
		//eval("feedLayer" + (intServiceLoop + 1) + ".SetClusteringConfiguration(VEClusteringType.Grid, objCO)");
		//Set the title of the layer so it can be found when looping over the layerlist
		eval("feedLayer" + (intServiceLoop + 1) + ".SetTitle('feedLayer' + (intServiceLoop+1))");
		//eval("feedLayer" + (intServiceLoop + 1) + ".SetClusteringConfiguration(VEClusteringType.Grid)");
		
		try
		{
			var veLayerSpec = new VEShapeSourceSpecification(VEDataType.GeoRSS, ArrayEvents[(intServiceLoop)], eval("feedLayer"+(intServiceLoop+1)));
			map.ImportShapeLayerData(veLayerSpec, onFeedLoad, false);
		}
		catch(e)
		{
			objFeedbackArea.innerHTML= "&nbsp;&nbsp;There was a problem collecting data. Please try again in 15 minutes.";
		}

    }
}
function ShapeLayerInfo()
 {
    var currLayer = null
    if (map.GetShapeLayerCount() > 1){
		for(var i=0;i<=map.GetShapeLayerCount();i++){
			 currLayer = map.GetShapeLayerByIndex(i);
			 objFeedbackArea.innerHTML+= "  : " + i + " : " + currLayer.GetTitle() + " : ";
		}
    }
    //objFeedbackArea.innerHTML+= "<br/>";
 }
function DeleteShapeLayer(strLayerName)
{
	try
	{
		var currLayer = null;
		//Loop over layers
		for(var i=1;i<map.GetShapeLayerCount();i++){
			currLayer =map.GetShapeLayerByIndex(i);
			//find the right layer to delete
			if (currLayer.GetTitle() == strLayerName){
				map.DeleteShapeLayer(currLayer);
				break;
			}
		}
	}
	catch(e)
	{
		objFeedbackArea.innerHTML= "&nbsp;&nbsp;There was a problem collecting data. Please try again in 15 minutes.";
	}

}

function onFeedLoad(feed)
{
    var numShapes = feed.GetShapeCount();
    //Loop over loaded elements and set icons
    for(var i=0; i < numShapes; ++i)
    {
		try
		{
			var s = feed.GetShapeByIndex(i);
			//Splitting IcondId because line color is in this field as well
			//georss references <icon> to virtual earths IconId property
			//so we are piggybacking values here
			//value should look like this "./imgref.gif|244|245|128|.5|8"
			//where format is "Image|R|G|B|Alpha|LineThickness"
			var v = s.IconId.split("|");
			s.SetCustomIcon("<img src='"+ v[0]+"'/>");

			if (v[1] != undefined){
				//RGB values and alpha for transparency
			  var lineColor = new VEColor(v[1],v[2],v[3],v[4]);
			  s.SetLineWidth(v[5]);
			  s.SetLineColor(lineColor);
			}
		 }catch(e){
			//alert('error: ' + e.message);
			//fail silently
		 }
    }
    boolFeedRunning = false;
    //Increment the service loop and move to the next
    intServiceLoop++;
    //If not the last feed, let the next feed load automatically.
    if (intServiceLoop >= ArrayEvents.length)
    {
        //No more feeds.

		//objFeedbackArea.innerHTML= "&nbsp;Map will refresh every " + intRefreshRate/60000 + " Minutes<br/>";
		objFeedbackArea.innerHTML= "";
		window.clearInterval(intervalRef);
		intervalRef=""
		timerRef = setTimeout('RefreshMap()',intRefreshRate);


        //Feeds are loaded.  Check for center and zoom.
        if (zoomLat != 0 && zoomLon != 0)
        {
            centerAndShowInfo(zoomLat, zoomLon)
        }
    }

}

function onFeedFail(result)
{
    var message = error.get_message();
//    alert('An unhandled exception has occurred:\n' + message);
	objFeedbackArea.innerHTML= "&nbsp;&nbsp;<img src='./Images/ajax-loader.gif' height='16' width='16' title='loading' />&nbsp;"+message;

}

//Clean up all objects
function MapDispose()
{
    if (map!=null)
    {
        map.Dispose();
        map = null;
    }
}

////set map to run onload and dispose on exit
//if (window.attachEvent) {
//	window.attachEvent("onload", GetMap);
//	window.attachEvent("onunload", MapDispose);
//} else {
//	window.addEventListener("load", GetMap, false);
//	window.addEventListener("unload", MapDispose, false);
//}
if (typeof(Sys) !== "undefined") Sys.Application.notifyScriptLoaded();
