﻿// ********************************************************
// File      : AmtFramework.js                            *
// Date      : 19-08-2008                                 *
// Copyright : Asysco Software BV (http://www.asysco.com) *
// Product   : Asysco Migration Technology                *
// ********************************************************
// JScript File

// Constructor AmtFrameworkMenu

if (typeof (window.AmtFramework) == "undefined") {
  window.AmtFramework = new Object();
  AmtFramework.closeAllDone = false;
  AmtFramework.authorized = false;
  AmtFramework.menuPresent = true;
  AmtFramework.menuDocked = false;
  AmtFramework.rootUrl = null;
  AmtFramework.activeFrameId = null;
  AmtFramework.activeAppObject = null;
  AmtFramework.appObjects = new Array;
  AmtFramework.busyResizing = false;
};

AmtFramework.Init = function() {
  o_nav = document.getElementById("navigationContainer");
  if (o_nav) {
    AmtFramework.menuPresent = true;
  } else {
    AmtFramework.menuPresent = false;
  }
}

/// Close all sessions
/// if the user closes the framework by using ALT-F4 or clicking the 'X'- exit button the close all
/// sessions started in the framework.
AmtFramework.CloseAll = function(event) {
  // The 'onunload' event is especially for Opera, because Opera doesn't support the 'onbeforeunload' event
  if ((event.type == "unload") && (navigator.appName != 'Opera')) {
    return;
  }

  if (AmtFramework.closeAllDone || !AmtFramework.authorized) {
    return;
  }
  AmtFramework.closeAllDone = true;
  if (document.useAjaxToCloseSession) {
    closeRequest = AmtFramework.CreateXMLHttpRequest();
    if (closeRequest) {
      var params = "Close=True";
      closeRequest.open("POST", 'Logout.aspx?Close=True', true);
      closeRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
      closeRequest.setRequestHeader("Content-length", params.length);
      closeRequest.setRequestHeader("Connection", "close");
      window.status = "Sending logoff station request..."
      closeRequest.send(params);
    }
    if (document.screenCloseMessage) {
      alert(document.screenCloseMessage);
    }
    var sleeping = true;
    var now = new Date();
    var alarm;
    var startingMSeconds = now.getTime();
    while (sleeping) {
      alarm = new Date();
      alarmMSeconds = alarm.getTime();
      if (alarmMSeconds - startingMSeconds > 1500) {
        sleeping = false;
      }
      if (closeRequest.readyState == 4) {
        sleeping = false;
      }
    }
  } else {
    var closewindow = window.open('logout.aspx?Close=True', 'CLOSEALL', 'top=200, left=200, width=320, height=20, fullscreen=0, menubar=0, titlebar=0, toolbar=0, status=0, resizable=0, scrollbars=0');
    for (; ; ) {
      if (closewindow != null) {
        break;
      }
    }
  }
}


// Minimize the menu
AmtFramework.NavigationDock = function() {
  var o_navContainer = document.getElementById("navigationContainer");
  var o_content = document.getElementById("contentContainer");
  var o_navMin = document.getElementById("navMin");
  var o_navHeader = document.getElementById("navigationHeader");
  var o_nav = document.getElementById("navigation");
  var o_navFooter = document.getElementById("navigationFooter");
  if (o_content.className == 'contentContainer') {
    o_navContainer.className = 'navigationContainer_Min';
    o_content.className = 'contentContainer_Max';
    o_navMin.style.display = 'block';
    o_navHeader.style.display = 'none';
    o_nav.style.display = 'none';
    o_navFooter.style.display = 'none';
    AmtFramework.menuDocked = true;
  } else {
    o_navContainer.className = 'navigationContainer';
    o_content.className = 'contentContainer';
    o_navMin.style.display = 'none';
    o_navHeader.style.display = 'block';
    o_nav.style.display = 'block';
    o_navFooter.style.display = 'block';
    AmtFramework.menuDocked = false;
  }
}


// Constructor AppObject
function AppObject(appId) {
  this.AppId = appId;
  this.FirstTime = true;
}

// Add the IFRAME element dynamically
AmtFramework.AddFrame = function(frameName) {
  var o_div = document.getElementById(frameName);
  if (o_div != null) {
    try {
      // Syntax for IE. In IE you can't specify the name in the setAttribute so it must be done this way.
      var s_Frame = "<iframe frameborder=\"0\" class=\"iframe\" id=\"I" + frameName + "\" name=\"I" + frameName + "\"/>";
      var o_frame = document.createElement(s_Frame);
    } catch (e) {
      // FireFox doesn't allow the html syntax in createElement. 
      var o_frame = document.createElement("iframe");
      o_frame.setAttribute("frameborder", "0");
      o_frame.setAttribute("class", "iframe");
      o_frame.setAttribute("id", "I" + frameName);
      o_frame.setAttribute("name", "I" + frameName);
    }
    o_div.appendChild(o_frame);
  }
}

// function to create the userinfo and appobjects
AmtFramework.CreateAppObject = function(appId) {
  var appObject = new AppObject(appId);
  AmtFramework.appObjects[appObject.AppId] = appObject;
}
// Bring the DIV element into front
AmtFramework.BringToFront = function(frameId) {
  var o_div = document.getElementById(frameId);
  if (o_div != null) {
    o_div.style.display = 'block';
  }
}

// Send the DIV element to the background
AmtFramework.SendToBack = function(frameId) {
  var o_div = document.getElementById(frameId);
  if (o_div != null) {
    o_div.style.display = 'none';
  }
}

// Activate the frame  
AmtFramework.ActivateFrame = function(frameId) {
  if (AmtFramework.activeFrameId != frameId) {
    var o_frame = document.getElementById("I" + frameId);
    if (o_frame == null) {
      AmtFramework.AddFrame(frameId);
    }
    if (AmtFramework.activeFrameId != null) {
      AmtFramework.SendToBack(AmtFramework.activeFrameId);
    }
    AmtFramework.activeFrameId = frameId;
    AmtFramework.BringToFront(frameId);
    //AmtFramework.ResizeFrame(frameId);
  }
}

// Set the frame URL. i.e. screen, jobs, messages...
AmtFramework.SetActiveFrameUrl = function(frameId, url) {
  var o_frame = document.getElementById("I" + frameId);
  if (o_frame != null) {
    o_frame.src = url;
  }
}

// Deactivate the current application 
AmtFramework.deActivateCurrentApp = function() {
  AmtFramework.activeAppObject = null;
}

// Activate the Application
AmtFramework.ActivateApp = function(appId) {
  if (AmtFramework.appObjects[appId] != null) {
    AmtFramework.ActivateFrame("appFrame" + AmtFramework.appObjects[appId].AppId);
    AmtFramework.activeAppObject = AmtFramework.appObjects[appId];
    if (AmtFramework.activeAppObject.FirstTime) {
      AmtFramework.SetActiveFrameUrl("appFrame" + AmtFramework.activeAppObject.AppId, AmtFramework.rootUrl + "Lion/redirect.aspx?appId=" + AmtFramework.activeAppObject.AppId);
      AmtFramework.activeAppObject.FirstTime = false;
    }
  }
}

// Select screen
AmtFramework.SelectAppForm = function(formName) {
  if (AmtFramework.activeAppObject != null) {
    AmtFramework.ActivateFrame("appFrame" + AmtFramework.activeAppObject.AppId);
    AmtFramework.SetActiveFrameUrl("appFrame" + AmtFramework.activeAppObject.AppId, AmtFramework.rootUrl + "Lion/redirect.aspx?appId=" + AmtFramework.activeAppObject.AppId + "&formName=" + formName);
  }
}

// Select language
AmtFramework.SelectAppLanguage = function(language) {
  if (AmtFramework.activeAppObject != null) {
    AmtFramework.ActivateFrame("usrFrame" + AmtFramework.activeAppObject.AppId);
    AmtFramework.SetActiveFrameUrl("usrFrame" + AmtFramework.activeAppObject.AppId, AmtFramework.rootUrl + "Lion/usersettings/selectlanguage.aspx?appId=" + AmtFramework.activeAppObject.AppId + "&language=" + language);
  }
}

// Menu handler. Activates the frame corresponding to the menu.
AmtFramework.OnClientItemClickedHandler = function(sender, eventArgs) {
  if (eventArgs.Item.Level == 1) {
    if (AmtFramework.activeAppObject != null) {
      if (eventArgs.Item.Value == "Screens") {
        if (eventArgs.Item.Parent.ExpandedItem) {
          eventArgs.Item.Parent.ExpandedItem.Collapse();
        }
        AmtFramework.ActivateFrame("selFrame" + AmtFramework.activeAppObject.AppId);
        AmtFramework.SetActiveFrameUrl("selFrame" + AmtFramework.activeAppObject.AppId, AmtFramework.rootUrl + "Lion/application/selectform.aspx?appId=" + AmtFramework.activeAppObject.AppId);
      } else if (eventArgs.Item.Value == "Prints") {
        if (eventArgs.Item.Parent.ExpandedItem) {
          eventArgs.Item.Parent.ExpandedItem.Collapse();
        }
        AmtFramework.ActivateFrame("prnFrame" + AmtFramework.activeAppObject.AppId);
        AmtFramework.SetActiveFrameUrl("prnFrame" + AmtFramework.activeAppObject.AppId, AmtFramework.rootUrl + "Lion/prints/prints.aspx?appId=" + AmtFramework.activeAppObject.AppId);
      } else if (eventArgs.Item.Value == "Jobs") {
        AmtFramework.ActivateFrame("jobFrame" + AmtFramework.activeAppObject.AppId);
      } else if (eventArgs.Item.Value == "Messages") {
        AmtFramework.ActivateFrame("msgFrame" + AmtFramework.activeAppObject.AppId);
      } else if (eventArgs.Item.Value == "UserSettings") {
        if (eventArgs.Item.Parent.ExpandItem) {
          eventArgs.Item.Parent.ExpandedItem.Collapse();
        }
        AmtFramework.ActivateFrame("usrFrame" + AmtFramework.activeAppObject.AppId);

      } else {
        AmtFramework.ActivateFrame("appFrame" + AmtFramework.activeAppObject.AppId);
      }
    } else {
      if (eventArgs.Item.Value != "Applications") {
        alert("Please select an application first! (click Applications)");
      }
    }
  } else {
    if (eventArgs.Item.Parent.Value == "Jobs") {
      if (AmtFramework.activeAppObject != null) {
        AmtFramework.ActivateFrame("jobFrame" + AmtFramework.activeAppObject.AppId);
        if (eventArgs.Item.Value == "StartJob") {
          AmtFramework.SetActiveFrameUrl("jobFrame" + AmtFramework.activeAppObject.AppId, AmtFramework.rootUrl + "Lion/jobs/startjob.aspx?appId=" + AmtFramework.activeAppObject.AppId);
        } else if (eventArgs.Item.Value == "ProcessJob") {
          AmtFramework.SetActiveFrameUrl("jobFrame" + AmtFramework.activeAppObject.AppId, AmtFramework.rootUrl + "Lion/jobs/processjob.aspx?appId=" + AmtFramework.activeAppObject.AppId);
        }
      } else {
        alert("Please select an application first! (click Applications)");
      }
    } else if (eventArgs.Item.Parent.Value == "Messages") {
      if (AmtFramework.activeAppObject != null) {
        AmtFramework.ActivateFrame("msgFrame" + AmtFramework.activeAppObject.AppId);
        if (eventArgs.Item.Value == "Alerts") {
          AmtFramework.SetActiveFrameUrl("msgFrame" + AmtFramework.activeAppObject.AppId, AmtFramework.rootUrl + "Lion/messages/viewmessages.aspx?appId=" + AmtFramework.activeAppObject.AppId);
        } else if (eventArgs.Item.Value == "Requests") {
          AmtFramework.SetActiveFrameUrl("msgFrame" + AmtFramework.activeAppObject.AppId, AmtFramework.rootUrl + "Lion/messages/viewrequests.aspx?appId=" + AmtFramework.activeAppObject.AppId);
        } else if (eventArgs.Item.Value == "Waitings") {
          AmtFramework.SetActiveFrameUrl("msgFrame" + AmtFramework.activeAppObject.AppId, AmtFramework.rootUrl + "Lion/messages/viewwaitings.aspx?appId=" + AmtFramework.activeAppObject.AppId);
        }
      } else {
        alert("Please select an application first! (click Applications)");
      }
    } else if (eventArgs.Item.Parent.Value == "UserSettings") {      
      if (AmtFramework.activeAppObject != null) {
        AmtFramework.ActivateFrame("usrFrame" + AmtFramework.activeAppObject.AppId);
        if (eventArgs.Item.Value == "SelectLanguage") {
          AmtFramework.SetActiveFrameUrl("usrFrame" + AmtFramework.activeAppObject.AppId, AmtFramework.rootUrl + "Lion/usersettings/selectlanguage.aspx?appId=" + AmtFramework.activeAppObject.AppId);
        }
      }
    }
  }
}

//Menu handler for control center
AmtFramework.OnClientItemClickedCCHandler = function(sender, eventArgs) {
  if (eventArgs.Item.Level == 1) {
    AmtFramework.ActivateFrame(eventArgs.Item.Value);
    if (eventArgs.Item.Value == "prints") {
      //Prints does not have any children
      if (eventArgs.Item.Parent.ExpandedItem) {
        eventArgs.Item.Parent.ExpandedItem.Collapse();
      }
      AmtFramework.SetActiveFrameUrl("prints", AmtFramework.rootUrl + "Lion/prints/prints.aspx");
    }
  } else if (eventArgs.Item.Level == 2) {
    AmtFramework.SetActiveFrameUrl(eventArgs.Item.Parent.Value, AmtFramework.rootUrl + eventArgs.Item.Value);
  }
}

// if no request could be created return false.
AmtFramework.CreateXMLHttpRequest = function() {
  var newRequest;
  // branch for native XMLHttpRequest object
  if (window.XMLHttpRequest) {
    try { newRequest = new XMLHttpRequest(); }
    catch (e) { newRequest = false; }
  } else if (window.ActiveXObject) {
    // branch for IE/Windows ActiveX version
    try { newRequest = new ActiveXObject("Msxml2.XMLHTTP"); }
    catch (e) {
      try { newRequest = new ActiveXObject("Microsoft.XMLHTTP"); }
      catch (e) { newRequest = false; }
    }
  }
  //reminder: current implementation of MsXmlHttp object
  //does not support soap 1.2, so work with 1.1
  return newRequest;
}

// Reconnect function call a dummy page through ajax to prevent session timeouts
// Usage:
// window.setInterval('AmtFramework.Reconnect();', (sessionTimeout * 60000) - 30000);
// where sessionTimeout is Session.Timeout in minutes
// This will trigger the reconnect function 30 seconds before session timeout
AmtFramework.Reconnect = function() {
  var url = AmtFramework.rootUrl + 'Reconnect.aspx';
  xmlHttp = AmtFramework.CreateXMLHttpRequest();
  xmlHttp.open('GET', url, true);
  xmlHttp.send(null);
}

// CheckRequests function call a page through ajax to get the number of open requests (ACCEPTS)
AmtFramework.CheckRequest = function() {
  var url = AmtFramework.rootUrl + '/Lion/Jobs/CheckRequest.aspx';
  request = AmtFramework.CreateXMLHttpRequest();
  request.open("POST", url, true);
  request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
  //request.setRequestHeader("Content-length", params.length);
  request.setRequestHeader("Connection", "close");
  request.onreadystatechange = processCheckRequest;
  request.send(null);
}

AmtFramework.processCheckRequest = function() {
  /// <summary>
  /// process the readyState changes of a XMLHTTPRequest.
  if (request.readyState == 4) {
    // only if "OK"
    if (request.status == 200) {
      //Was a JSON object returned?
      if (request.responseText.charAt(0) == '{') {
        var requestObj = eval("(" + request.responseText + ")");
        if (requestObj.HaveRequests == false) {
          window.setInterval('AmtFramework.CheckRequest();', 10000);
        } else {
          alert("There are new request");
        }
      }
    } else if (request.status == 500) {
      location.href = "../../AmtUnhandledExceptionPage.aspx?DisplayError=True";
    } else {
      alert("An error occured on the server:\nStatus: \"" + request.statusText + "\"\nValue: \"" + request.responseText + "\"");
    }
  }
}

