﻿//-----------------------------------------------------------------------------
// IDV Testing Code
//-----------------------------------------------------------------------------

// Reference to SL application
var gMapViewer;
var gBrowserIsIE = false;


// Register for scroll wheel events
if(window.addEventListener) {
	window.addEventListener('DOMMouseScroll', OnScrollWheel, true);
	gBrowserIsIE = true;
} else {
	window.onmousewheel = document.onmousewheel = OnScrollWheel;
}


// Creates the SL application
function WriteEmbedTag(source)
{
	Silverlight.createObjectEx({
		source: source,
		parentElement: document.getElementById("SilverlightControlHost"),
		id: "SilverlightControl",
		properties: {
			width: "100%",
			height: "100%",
			version: "2.0",
			enableHtmlAccess: "true",
			isWindowless: "false"
		},
		events: {
			onLoad: HandleLoaded,
			onError: HandleError
		}
	});
}


// Handles errors from Silverlight
function HandleError(sender, args)
{
   var newNode;
   var parNode;

   // ignore image errors
   if(args.errorType == "ImageError") {
      return;
   }
      
   // create new text area element
   newNode = document.createElement("textarea");
   newNode.appendChild(document.createTextNode(CreateDefaultErrMsg(args)));
   newNode.setAttribute("wrap", "off");
   newNode.setAttribute("cols", "100");
   newNode.setAttribute("rows", "50");
   
   // update Silverlight control host
   parNode = document.getElementById("SilverlightControlHost");
   parNode.removeChild(parNode.firstChild);
   parNode.appendChild(newNode);

   // clear map viewer reference
   gMapViewer = null;
}


// Message for runtime failure
function CreateDefaultErrMsg(args)
{
   if(args.errorType == "ParserError" && args.errorCode == 5014) {
      return (
         "In order to complete the Silverlight plug-in "+
         "installation you must first close your browser "+
         "and then re-open this URL:\r\n"+
         "http://silverlight.idvsolutions.com"
      );
   } else {
      return (
         "Silverlight Error\r\n"+
         "Error Type:    " + args.errorType    +"\r\n"+
         "Error Code:    " + args.errorCode    +"\r\n"+
         "Error Message: " + args.errorMessage +"\r\n"
      );
   }
}


// Called when the SL control is loaded
function HandleLoaded(sender, args)
{
   gMapViewer = sender.Content.IdvSpatialWiki;
}


// Gets path of container page
function GetBaseAddress()
{
   var loc = window.location;
   var prt = (loc.port == null || loc.port.length == 0)? "":(":"+loc.port);
   var str = (loc.protocol +"//"+ loc.hostname +prt+ loc.pathname);
   return str.substring(0, str.lastIndexOf('/')+1);
}


// Called when scroll wheel is used
function OnScrollWheel(event)
{
   var intDelta = 0;

   // quit now if map viewer invalid   
   if(gMapViewer == null) return;

   // get scroll wheel event
   event = (event)? event : window.event

   // get actual scroll wheel value
   if(event.wheelDelta) {
      if(window.opera) {
         intDelta = -event.wheelDelta;
      } else {
         intDelta =  event.wheelDelta;
      }
   } else if(event.detail) {
      intDelta = -event.detail;
   }
   
   // process scroll wheel event
   intDelta = (intDelta > 0)? 1 : -1;
	gMapViewer.OnScrollWheel(intDelta);

   // handle the mouse event
	if(gBrowserIsIE) {
		event.preventDefault();
		event.stopPropagation();
	} else {
		event.returnValue = false;
	}
}
