var controller = null;
var bookmarkController = null;
var connections = null;
var databaseID = "";
var bDragging = false;
var dropAcceptable = "none";
var bHeaderDrop = false;
var dragSource = null;
var directID = "";
var dragSourceID = "";
var connectionsDragData = "";

function pageLoad(dbID, recordType, recordUID)
{
  if (controller != null)
    return;
   
/*
  try
  {
    var dispatcher = new ActiveXObject('TelephoneManager.Connection');
    var cnxDisplay = dispatcher.DisplayRecord(dbID, recordType, recordUID);
    if (cnxDisplay != "")
    {
//		window.close();
    }
    else
    {
		if (event.ctrlKey == true)
		{
			alert("Fire Connections:" + dbID);
		}
    }
  }catch(err){};
 */
}


var bMouseDown = false;
function SetBookmarkController(ctrl)
{
	bookmarkController = ctrl;
}

function SetController(ctrl, dbID, conn, scaleFactor)
{
  var pageOrigin = "";
  try
  {
	pageOrigin = document.all("PageFooter").innerText;
	if ((pageOrigin.indexOf("CNXGDS:" + dbID) == 0) || (pageOrigin.indexOf("infoDNA:" + dbID) == 0))
	{
		controller = ctrl;
		bookmarkController = ctrl;
		databaseID = dbID;
		connections = conn;
		SetZoom(scaleFactor);
		try{document.all("HeaderTable").all("ExternalViewerButton").style.display = "block";}catch(err){};
		try{document.all("HeaderTable").all("AuditCalendarButton").style.display = "block";}catch(err){};
		try{document.all("ThePoint").style.display = "block";}catch(err){};
		try{document.all("TheGrid").style.display = "block";}catch(err){};
		try{document.all("AllFields").style.display = "block";}catch(err){};
		try{document.all("ExtConnection").style.display = "block";}catch(err){};
		try{document.all("ExpandNotes").style.display = "block";}catch(err){};
		try{document.all("BookmarkNavTo").style.display = "block";}catch(err){};
	}
  }catch(err){};
}

function ScriptEval(code)
{
	eval(code);
}

function ShowQueryGrid()
{
  if (controller == null)
    return;
  try
  {
	controller.ShowQueryGrid();
  }
  catch(err)
  {
	alert("Results Grid is not available in this Connections Application."); 
  }
  
}

function ExternalViewer()
{
  if (controller == null)
    return;

  bMouseDown = false;
  event.cancelBubble = true;
  if (controller.recordType != "Query")
  	controller.PageClick(GetSignificantParent(), databaseID, true);
  else
  	controller.EditQuery();
}

function RefreshBasePage()
{
	controller.ConnectToHeader("", "");
}

function ShowCalendar()
{
	controller.ShowCalendar();
}

function PassClick()
{
  if (controller == null)
    return;

  dragSourceID = "";
  bMouseDown = false;
  bForeignNav = false;
  event.cancelBubble = true;

  controller.PageClick(GetSignificantParent(), databaseID);
}

function TestAccelerator()
{
  if (controller == null)
    return;
  var bHandled = false;
  try{bHandled = controller.TestAccelerator("xxxx", event.keyCode);}catch(err){};
  event.returnValue = !bHandled;
}

function NavigateToBookmark(recordType, recordUID, proposedType, proposedUID, fileName, category, index, ordinal)
{
  if (bookmarkController == null)
	return;

  if (bookmarkController.NavigateToBookmark(recordType, recordUID, proposedType, proposedUID, fileName, category, index, ordinal) == true)
  {
	event.cancelBubble = true;
	dragSourceID = "";
	bMouseDown = false;
	bForeignNav = false;
  }
  else
  {
	PassClick();
//	window.navigate(proposedType + "_" + proposedUID + ".htm");
  }
}

function GenerateHierarchy()
{
  if (controller == null)
    return;

  bMouseDown = false;
  event.cancelBubble = true;

  controller.GenerateHierarchy(databaseID);
}

var bForeignNav = false;
function ForeignNav()
{
  if (controller == null)
    return;
  bForeignNav = true;
  controller.ForeignNav(true);
}

function GetSignificantParent(seedObj)
{
	var nodeParent = event.srcElement;
	if (seedObj != undefined)
		nodeParent = seedObj;
	if (nodeParent != null)
	{
		var id = nodeParent.id;
		if (id == "")
		{
			id = nodeParent.id;
			while ((nodeParent != null) && (id == ""))
			{
				nodeParent = nodeParent.parentNode;
				try{id = nodeParent.id;}catch(err){};
			}
		}
	}
	
	if (nodeParent == null)
	{
		nodeParent = document.body;
	}
	return nodeParent;
}

function SetDragSource(type, UID, directIDIn)
{
  event.returnValue = false;
  event.cancelBubble = true;
  if (controller == null)
    return;
  dragSource = GetSignificantParent();

  content.recordType = type;
  content.recordUID = UID;
  directID = directIDIn;
  dragSourceID = directIDIn;
  bMouseDown = true;
}

function SetFieldDragSource(table, field)
{
  event.returnValue = false;
  event.cancelBubble = true;
  if (controller == null)
    return;
  dragSource = GetSignificantParent();
  bMouseDown = true;
}

var lastTipType = "";
var lastTipUID = "";
function MouseTip(recordType, recordUID)
{
  event.returnValue = false;
  event.cancelBubble = true;
  if ((lastTipType != recordType) && (lastTipUID != lastTipUID))
	controller.MouseTip(databaseID, recordType, lastTipUID);
}

function StartDrag()
{
  if (controller == null)
    return;
  event.returnValue = false;
  event.cancelBubble = true;
    
  MouseTip("", "");
  
  if ((bMouseDown == true) && (content.recordType != "Association"))
  {
    bMouseDown = false;
    content.dragDrop();
  }
  

}

var bFieldDrag = false;
function StartFieldDrag()
{
  event.returnValue = false;
  event.cancelBubble = true;
  if (controller == null)
    return;
    
  MouseTip("", "");
  
  if (bMouseDown == true)
  {
    bMouseDown = false;
    bFieldDrag = true;
    dragSource.dragDrop();
  }
  

}

function DragStart()
{
  if (controller == null)
    return;
    
  controller.ForeignNav(false);
  if (event.srcElement.nodeName == "A")
  {
	if (bForeignNav == true)
	{
		bForeignNav = false;
		return;
	}
	event.returnValue = false;
	if (content.recordType != "")
		content.dragDrop();
  }
  

  try
  {
  if (bFieldDrag == false)
  {
	  var dragData = controller.DragDataFromExportLink(content.recordType, content.recordUID, databaseID, dragSource);
	  dragSource = null;
	  document.selection.empty();
	  event.dataTransfer.setData("Text", dragData);
	  event.dataTransfer.effectAllowed = "copyMove";
//	  bDragging = true;
  }
  else
  {
       bFieldDrag = false;
  var dragSelection = document.selection.createRange();
  var dragTextSelection = dragSelection.text;
	document.selection.empty();
       var fieldComparison = "=";
       var value = dragSource.parentNode.all("FieldValue").innerText;
	if ((dragTextSelection != "") && (dragTextSelection != value))
	{
		if (value.indexOf(dragTextSelection) == 0)
			fieldComparison = "StartsWith";
		else
			fieldComparison = "Contains";
		value = dragTextSelection;
	}
	var dragData = "<dragAssociation Object1Type=\"" + "DetailField" + "\" Object1=\"" + dragSource.field + "\" Object2Type=\"\" Object2=\"\" modifier=\"" + dragSource.table + "\" fieldType=\"" + dragSource.fieldType + "\" database=\"" + databaseID;
		dragData = dragData + "\" fieldComparison=\"" + fieldComparison  + "\" fieldValue=\"" + value + "\"/>";
	dragSource = null;
	dragData = dragData.replace("&", "&amp;");
	event.dataTransfer.setData("Text", dragData);
	event.dataTransfer.effectAllowed = "copyMove";
  }
  }catch(err){};
}

function DragEnd()
{
  content.recordType = "";
  content.recordUID = "";
  dragSourceID = "";
  bDragging = false;
}

function DragEnter()
{
	if ((controller == null) || (bDragging == true))
		return;

	var dragData = event.dataTransfer.getData("Text");
	if (dragData != null)
	{
		if (dragData.indexOf("<dragAssociation") < 0)
		{
		//		DragOverTip(true);
		//		return;
			if ((dragData.indexOf("E+:") < 0) && ((dragData.indexOf("http:") == 0) || (dragData.indexOf("file:") == 0)))
			{
//				dropAcceptable = "move";
//				event.dataTransfer.dropEffect = dropAcceptable;
				return;
			}
			var dragType = "Keyword";
			var tempKeyword = "temporaryKeyword='Dynamic'";
			if (dragData.indexOf("E+:") == 0)
			{
				dragType = "FileIndex";
				tempKeyword = "";
			}
			var dragUID = connections.GetDynamicKeyword(dragData);
			if (dragUID.indexOf("_") > 0)
			{
				dragType = dragUID.substr(0, dragUID.indexOf("_"));
				dragUID = dragUID.substr(dragUID.indexOf("_") + 1, dragUID.length);
			}
			if (dragUID <= 0)
				return;
			var xmlRecord = connections.GetRecord(dragType, dragUID, true);
			dragData = "<dragAssociation Object1Type='" + dragType + "' Object1='" + dragUID + "' Object2Type='' Object2='' modifier='" + "" + "' fieldType='" + "" + "' database='" + databaseID + "' assocDrag='" + "" + "' " + tempKeyword + ">" + xmlRecord + "</dragAssociation>";
		}
		try{dropAcceptable = controller.DropAcceptableToExportPage(dragData);}catch(err){};
		  
		connectionsDragData = "";
		if (dropAcceptable == "copy")
  			connectionsDragData = dragData;

		event.dataTransfer.dropEffect = "none";
	}
	event.returnValue = false;
	
 
}

function DragOver(recordType, recordUID, header, directIDIn)
{
  if ((controller == null) || (bDragging == true))
    return;
    
//  var dragData = event.dataTransfer.getData("Text");
  try
  {
    if (controller.DragOverAssociation(recordType, recordUID, connectionsDragData) == true)
  	return;
  }catch(err){};

  bHeaderDrop = false;
  if (header == "Header")
    bHeaderDrop = true;

  if ((recordType != "") && (recordUID != "") && (dropAcceptable != "none"))
  {
    content.recordType = recordType;
    content.recordUID = recordUID;
    directID = directIDIn;
  }
  else
  {
    if ((event.srcElement.id == "ExternalViewerButtonImage") && (connectionsDragData != ""))
    	dropAcceptable = "copy";
    else
    	dropAcceptable = "none";
  }
 
  event.dataTransfer.dropEffect = dropAcceptable;
  event.cancelBubble = true;
  event.returnValue = false;
//  window.clipboardData.setData("Text", event.srcElement.id);

}

function Drop()
{
  event.cancelBubble = true;

  var dragData = event.dataTransfer.getData("Text");
  if (dragData == null)
	return;
  if ((dragData.indexOf("E+:") < 0) && ((dragData.indexOf("http:") == 0) || (dragData.indexOf("file:") == 0)))
	return;
  event.returnValue = false;
  if (content.recordType == "")
		return;
  if ((controller == null) || (bDragging == true) || (content.recordType == ""))
    return;
  dragData = connectionsDragData; //event.dataTransfer.getData("Text");
  var recordType = content.recordType;
  content.recordType = "";
  controller.ConnectToExport(recordType, content.recordUID, dragData, bHeaderDrop, databaseID);
}

function HeaderDrop()
{

  if ((controller == null) || (bDragging == true))
    return;

  var dragData = "";
  try{dragData = event.dataTransfer.getData("Text");}catch(err){return;};
  if (dragData == null)
  	return;
  try{controller.ConnectToHeader(dragData, databaseID);}catch(err){};
}

function LabelConnection(recordType, recordUID, AssUID)
{
  if ((controller == null) || (bDragging == true))
    return;

  event.returnValue = false;
  event.cancelBubble = true;
  controller.LabelConnection(recordType, recordUID, AssUID);
}

function SetZoom(zoomLevel)
{
	document.body.style.zoom = zoomLevel;
}

function SetCheckMouseMoveTarget(bMode)
{
	bCheckMouseMoveTarget = bMode;
}

var bCheckMouseMoveTarget = false;
function checkMouseMoveTarget()
{
	if (bCheckMouseMoveTarget == true)
	{
		bCheckMouseMoveTarget = false;
		controller.CheckFileDropTarget(GetSignificantParent());
	}
}

function ExpandHierarchy(bExpand, hierarchyIndex)
{
	bMouseDown = false;
	event.cancelBubble = true;
	var objParent = GetSignificantParent(event.srcElement.parentNode);
	if (bExpand == true)
	{
		objParent.all('childNodes' + hierarchyIndex).style.display = "block" ;
		objParent.all('CollapseChildNode' + hierarchyIndex).style.display = "block" ;
		objParent.all('ExpandChildNode' + hierarchyIndex).style.display = "none" ;
	}
	else
	{
		objParent.all('childNodes' + hierarchyIndex).style.display = "none" ;
		objParent.all('CollapseChildNode' + hierarchyIndex).style.display = "none" ;
		objParent.all('ExpandChildNode' + hierarchyIndex).style.display = "block" ;
	}
}

function EditConnectionLabel(recordType, recordUID, AssUID)
{
  if ((controller == null) || (bDragging == true))
    return;

  event.returnValue = false;
  event.cancelBubble = true;
  controller.LabelConnection(recordType, recordUID, AssUID, true);
}

function PrintPage()
{
	window.print();
}

function ShowConnectionsOfType(table)
{
  if (controller == null)
    return;
  controller.ShowConnectionsOfType(table);
}

function UpdateExtLink(recordType, recordUID, direction)
{
  if (connections == null)
    return;
  
  event.returnValue = false;
  event.cancelBubble = true;
    
    if (connections.ExternalUpdate(recordType, recordUID, direction) == true)
    	controller.ExportRecord();
}

function DisplayExtLink(dbID, recordType, recordUID)
{
  if (connections == null)
    return;
  
  event.returnValue = false;
  event.cancelBubble = true;
    
  connections.DisplayExternalLink(dbID, recordType, recordUID);
}

function ShowConnectionsInPopup(recordType, recordUID)
{
	try{controller.ShowConnectionsInPopup(recordType, recordUID);}catch(err){};
}

function ShowAllFields()
{
  if (connections == null)
    return;
	try{controller.ShowAllFields();}catch(err){};
}

function ExpandNotes()
{
  if (connections == null)
    return;
	try{controller.ExpandNotes();}catch(err){};
}
