/**
 * [c]Copyright: newmagic datensysteme gmbH[/c]
 * [cre]  Datum: 25.09.2008[/cre]
 * [a]    Autor: Matthias Eipeldauer, newmagic datensysteme gmbh[/a]
 *
 * [desc]
 * Magic Matrix 8.1 advanced JavaScript Kernel for Applications.
 *
 * In dieser Datei erfolgt die Vorwärtsdefinition (Forwarding) für alle Kernel Variablen und Funktionen, die zu einem späteren Zeitpunkt benögtigt werden.
 * [/desc]
 **/

//
// CORE FLAGS
//

/*private core flag*/ var PRAGMA_LOAD_KERNEL_FROM_VIEW = false;         // Applikations Flag. Lädt die Kernelmodule aus der sysWebfiles-View (true) oder aus .nsf/{File} (false)
/*private core flag*/ var PRAGMA_OPEN_DOCUMENTS_AS_TAB = true;          // Applikations Flag. Öffnet Dokumente als Tab (true) oder als Floater (false)

//
// FORWARD DEFINITIONS
//

/*public*/ var mm8IsLocalDebug       = false;                           // Kernel Flag. Schaltet zwischen Debug/Relese Version um, erzeugt mehr Log-Nachrichten (true)
/*public*/ var mm8IsMSIE             = false;                           // Kernel Flag. Zeigt an, ob der Kern in einem Internet Explorer ausgeführt wird. READ ONLY!
/*public*/ var mm8IsOpera            = false;                           // Kernel Flag. Zeigt an, ob der Kern in einem Opera ausgeführt wird. READ ONLY!
/*public*/ var mm8IsMAC              = false;                           // Kernel Flag. Zeigt an, ob der Kern auf einem Apple Mac ausgeführt wird.
/*public*/ var mm8IsLINUX            = false;                           // Kernel Flag. Zeigt an, ob der Kern auf einem Linux Betriebssystem ausgeführt wird.
/*public*/ var mm8IsPC               = false;                           // Kernel Flag. Zeigt an, ob der Kern auf einem PC ausgeführt wird (Windows)
/*public*/ var mm8WebDbName          = "";                              // Kernel Objekt. Der Name der aktuellen Webdatenbank
/*public*/ var mm8WebDbUrl           = "";                              // Kernel Objekt. Die URL der aktuellen Datenbank
/*public*/ var mm8LogObj             = null;                            // Kernel Objekt. Hier werden die Lognachrichten abgesetzt.
/*public*/ var mm8WebDbImgPath       = "";                              // Kernel Objekt. Die URL zum Laden der Bilder
/*public*/ var mm8WebDbCssPath       = "";                              // Kernel Objekt. Die URL zum Laden der Stylesheets
/*public*/ var mm8WebDbJsPath        = "";                              // Kernel Objekt. Die URL zum Laden der JavaScripts / Kernelfunktionen
/*private*/var mm8Events             = new Object();                    // Kernel Objekt. Magic Matrix 8.1 Kernelverwaltungsobjekt. Zuständig für die Verwaltung der Eventhandler/Pointer.

//
// Drag, Drop, Move, Resize Forwarding
//

/*public*/ var sMoveID               = "";                              // Kernel Objekt. Die ID des aktuell verschiebbaren Objekts
/*public*/ var sDragID               = "";                              // Kernel Objekt. Die ID des aktuellen Elements mit dem Drag&Drop Status.
/*public*/ var sResizeID             = "";                              // Kernel Objekt. Die ID des aktuellen Elements mit dem Resize Status.
/*public*/ var sFocusID              = "";                              // Kernel Objekt. Die ID des aktuellen Elements mit dem Magic Matrix 8.1 Fokus.
/*public*/ var iPX                   = 0;                               // Kernel Objekt. Aktuelle Zeigerposition, X Achse. READ ONLY!
/*public*/ var iPY                   = 0;                               // Kernel Objekt. Aktuelle Zeigerposition, Y Achse. READ ONLY!
/*public*/ var iDX                   = 0;                               // Kernel Objekt. Vorausdefinition für Delta-X.
/*public*/ var iDY                   = 0;                               // Kernel Objekt. Vorausdefinition für Delta-Y
/*public*/ var dX                    = 0;                               // Kernel Objekt. Delta X
/*public*/ var dY                    = 0;                               // Kernel Objekt. Delta Y
/*public*/ var type                  = "";                              // Kernel Objekt. Type Buffer für die Übergabe zwischen eval() Funktionen
/*public*/ var lLastUserInteraction  = new Date().getTime();            // Kernel Objekt. Speichert den Zeitpunkt der letzten Benutzerinteraktion.
/*public*/ var EventArgs             = null;                            // Kernel Objekt. Vorausdefinition für die Übergabe von Ereignisdaten an eval() Funktionen

//
// Module-Loader Definition
//

/*public*/var mm8Callbacks          = new Object();                     // Kernel Objekt. Verwaltet die geladenen Scripts/Kernelmodule. Notwendig für include().

//
// Forward-Definition von Eventhandler
//

/*public*/function RegisterEventHandler(){}                             // Kernel Funktion. Funktions-Vorwärtsdeklaration
/*public*/function SetLastUserInteraction(){}                           // Kernel Funktion. Funktions-Vorwärtsdeklaration

/*
 * Get the Database's Web Information
 */
function GetWebInfo()
{
  // http://123.23.34.45/web/webdb.nsf/myagent?OpenAgent -> http://123.23.34.45/web/webdb.nsf
  if (document.getElementById("BASEREF"))
  {
    sTemp = document.getElementById("BASEREF").value;
    mm8WebDbUrl = sTemp.substring(0, sTemp.indexOf(".nsf") + 4);
  }
  else
  {
    mm8WebDbUrl = window.location.href.substring(0, window.location.href.indexOf(".nsf")+4);
  }
  sTemp = mm8WebDbUrl.replace("https://", "").replace("http://", "");
  //123.23.34.45/web/webdb.nsf/ -> web/webdb.nsf
  mm8WebDbName = sTemp.substring(sTemp.indexOf("/")+1);
  mm8WebDbImgPath = mm8WebDbUrl + "/sysWebfiles/backend.grafik/$file/";
  mm8WebDbCssPath = mm8WebDbUrl + "/sysWebfiles/";
  mm8WebDbJsPath  = mm8WebDbUrl + "/sysWebfiles/";

  if (window.location.href.substring(0, 7) == "file://")
  {
    mm8WebDbUrl = "";
    mm8WebDbName = "";
    mm8IsLocalDebug = true;
    mm8WebDbImgPath = "imgs/";
    mm8WebDbCssPath = "css/";
    mm8WebDbJsPath  = "mm8kernel/";
  }

  // IE or Rest of the World?
  mm8IsMSIE  = (navigator.appName.indexOf("Internet Explorer") > -1);
  mm8IsOpera  = (navigator.appName.indexOf("Opera") > -1);
  mm8IsPC    = (navigator.userAgent.indexOf("Windows") > -1);
  mm8IsLINUX = (navigator.userAgent.indexOf("Linux") > -1);
  mm8IsMAC   = !(mm8IsLINUX || mm8IsPC);
}


/* MM8 Module Loader
 *
 */
function mm8Callback(id)
{
  mm8Callbacks[id] = true;
}

/* MM8 Module Loader
 * Includiert einen Header oder eine Superklasse.
 * Wichtig dabei ist eigentlich nur, dass die geladene Klasse als letztes!!! ein mm8Callback(filename) macht.
 */
function include(file)
{
  if (!mm8Callbacks[file])
  {
    oHeader = document.getElementsByTagName("head")[0];
    xElem = document.createElement("script");
    xElem.setAttribute("id", file);
    if (PRAGMA_LOAD_KERNEL_FROM_VIEW)
    {
      xElem.setAttribute("src", mm8WebDbUrl + "/wqoWebfile?OpenAgent&file=" + file);
    }
    else
    {
      xElem.setAttribute("src", mm8WebDbUrl + "/" + file);
    }
    if (!mm8IsMSIE)
      xElem.setAttribute("type", "text/javascript");
    xElem.setAttribute("language", "JavaScript");
    oHeader.appendChild(xElem);
    iCount = 0;
    while(!mm8Callbacks[file] && iCount < 1000)
    {
      try
      {
        xElem = document.getElementById(file);
        break;
      }
      catch(ex)
      {}
      iCount++;
    }
  }
}

/* MM8 Module Loader
 * Includiert einen Header oder eine Superklasse aus der Datenbank (dh. via wqo_webfile).
 * Wichtig dabei ist eigentlich nur, dass die geladene Klasse als letztes!!! ein mm8Callback(filename) macht.
 */
function dbinclude(file)
{
  sLink = mm8WebDbUrl + "/wqoWebfile?OpenAgent&file=" + file;
  sCode = mm8AxCore.SGet(sLink);
  if (sCode != "")
  {
    eval(sCode);
  }
}

/* MM8 Module Loader
 * Lädt ein Stylesheet nach.
 */
function LoadStylesheet(name)
{
  oHeader = document.getElementsByTagName("head")[0];
  xElem = document.createElement("link");
  xElem.setAttribute("rel", "stylesheet");
  xElem.setAttribute("href", mm8WebDbUrl + "/wqoWebfile?OpenAgent&file=" + name);
  xElem.setAttribute("type", "text/css");
  oHeader.appendChild(xElem);
}

// ----------------------------------------------------------------------------
// LOG
// ----------------------------------------------------------------------------

// --
// Logs the given Message to the global defined Log-Object (HTML Output, eg. mm8_AdvFloater or
// something like this.
include("mm8Floater.js");
/*public*/function log(sMessage)
{
  if (mm8LogObj)
  {
    cl = "";
    try
    {
      cl = log.caller.toString();
      cl = cl.substring(0, cl.indexOf("(")) + "()";
      mm8LogObj.Write(cl + "->" + sMessage + "<br/>");
    }
    catch(ex)
    {}
  }
}

// Auto-Start
GetWebInfo();

// Firebug integration
/*
if (!mm8IsMSIE)
{
  if (!console)
  {
    console = new Object();
    console.log = new function(sMsg)
    {
      log(sMsg);
    }
  }
}
*/


include("coreAjax.js");
include("coreEvents.js");
include("coreInteractionHelper.js");
include("coreDragDrop.js");
include("coreMove.js");
include("coreResize.js");
