/**
 * [c]Copyright: newmagic datensysteme gmbH[/c]
 * [a]Autor:     Matthias Eipeldauer[/a]
 * [cre]Datum:     25.09.2008[/cre]
 * [desc]
 * mm8Floater.js stellt eine Klasse für die Benutzerinteraktion (mm8UIControl) zur Verfügung.
 * Diese Objekte stellen "Fenster" dar, die über dem normalen Content der Seite schweben.
 * [/desc]
 **/

//----
include ("mm8UIControl.js");

/*class*/function mm8Floater(id)/*extends mm8UIControl*/
{
  this.superclass=new mm8UIControl(id);
  for (x in this.superclass) (x!="superclass")?this[x]=this.superclass[x]:"";
  this.superclass.childClass = this;
  this.type.push("mm8Floater");
  
  this.CanOverflow = false;
  
  this.mm8ContentElem = "Content";
  LoadStylesheet("mm8Floater.css");

  /*public*/this.title     = "";                                        // String. Der Titel des Floaters.
  /*public*/this.baseClass = "mm8Floater";                              // String. Die CSS Basisklasse
  this.CanPin    = true;                                                // Standard: KANN angepinnt werden.
  this.iPosX     = 0;
  this.iPosY     = 0;
  
  
  this.rawCode   = "<div id='{xID}' class='{xBaseClass}' style='width:{xTotalW}px;height:{xTotalH}px;left:{xPosX}px;top:{xPosY}px;' {xMoveEvent} {xResizeEvent} ondblclick='log(\"Floater Header Double Click!\")'>";
  this.rawCode  += "   <div id='{xID}MainContent' class='{xBaseClass}MainContent'>";
  this.rawCode  += "       <div id='{xID}TitleBar' class='{xBaseClass}TitleBar' {xMove} {xTitleBarIEStyle}>";
  this.rawCode  += "           <img id='{xID}Icon'      class='{xBaseClass}Icon' src='{xIcon}' {xMove}></img>";
  this.rawCode  += "           <div id='{xID}Title'     class='{xBaseClass}Title' {xMove}>{xTitle}</div>";
  this.rawCode  += "       </div>";
  this.rawCode  += "       <div id='{xID}Content' class='{xBaseClass}Content' style='{xOverflow}'>";
  this.rawCode  += "       </div>";
  this.rawCode  += "   </div>";
  this.rawCode  += "   {xControlMin}";
  this.rawCode  += "   {xControlMax}";
  this.rawCode  += "   <div id='{xID}PinContainer' class='{xBaseClass}PinContainer'>{xRawPin}</div>";
  this.rawCode  += "   {xControlClose}";
  this.rawCode  += "   <div id='{xID}CurveLT' class='{xBaseClass}CurveLT' {xResizeLT}></div>";
  this.rawCode  += "   <div id='{xID}CurveRT' class='{xBaseClass}CurveRT' {xResizeRT}></div>";
  this.rawCode  += "   <div id='{xID}CurveLB' class='{xBaseClass}CurveLB' {xResizeLB}></div>";
  this.rawCode  += "   <div id='{xID}CurveRB' class='{xBaseClass}CurveRB' {xResizeRB}></div>";
  this.rawCode  += "   <div id='{xID}LineL' class='{xBaseClass}LineL' {xResizeL}></div>";
  this.rawCode  += "   <div id='{xID}LineR' class='{xBaseClass}LineR' {xResizeR}></div>";
  this.rawCode  += "   <div id='{xID}LineT' class='{xBaseClass}LineT' {xResizeT}></div>";
  this.rawCode  += "   <div id='{xID}LineB' class='{xBaseClass}LineB' {xResizeB}></div>";
  this.rawCode  += "</div>";


  this.rawPin   = "<img id='{xID}Pin'       class='{xBaseClass}Pin'      {xPinAction}   src='{xPinBtn}'>";
  
  /* Erstellt den HTML Code für den DOM.
   * Liefert den Inhalt als String.
   */
  /*public*/this.Render = function()
  {
    if (!this.CanMinimize)
    {
      this.ActionMinimize = '';
      this.rawControlMinimize = "";
    }
    if (!this.CanMaximize)
    {
      this.ActionMaximize = '';
      this.rawControlMaximize = "";
    }
    if (!this.CanClose)
    {
      this.ActionClose = '';
      this.rawControlClose = "";
    }
    if (!this.CanResize)
    {
      for(x in this.resizers)
      {
        this.resizers[x] = '';
      }
    }

    this.sHTMLCode = this.rawCode;
    if (this.CanPin)
    {
      this.sHTMLCode = this.sHTMLCode.replace(/\{xRawPin\}/g, this.rawPin);
    }
    else
    {
      this.sHTMLCode = this.sHTMLCode.replace(/\{xRawPin\}/g, "");    
    }
    this.sHTMLCode = this.sHTMLCode.replace(/\{xPinAction\}/g, this.ActionPin);
    this.sHTMLCode = this.sHTMLCode.replace(/\{xControlMin\}/g, this.rawControlMinimize);
    this.sHTMLCode = this.sHTMLCode.replace(/\{xControlMax\}/g, this.rawControlMaximize);
    this.sHTMLCode = this.sHTMLCode.replace(/\{xControlClose\}/g, this.rawControlClose);
    this.sHTMLCode = this.sHTMLCode.replace(/\{xID\}/g, this.id);
    this.sHTMLCode = this.sHTMLCode.replace(/\{xBaseClass\}/g, this.baseClass);
    this.sHTMLCode = this.sHTMLCode.replace(/\{xPosX\}/g, this.iPosX);
    this.sHTMLCode = this.sHTMLCode.replace(/\{xPosY\}/g, this.iPosY);
    this.sHTMLCode = this.sHTMLCode.replace(/\{xTotalW\}/g, this.width);
    this.sHTMLCode = this.sHTMLCode.replace(/\{xTotalH\}/g, this.height);
    this.sHTMLCode = this.sHTMLCode.replace(/\{xIcon\}/g, this.icon!=""?"{mm8WebDbImgPath}"+this.icon:"{mm8WebDbImgPath}null.png");
    this.sHTMLCode = this.sHTMLCode.replace(/\{xTitle\}/g, this.title);

    for(key in this.resizers)
    {
      this.sHTMLCode = this.sHTMLCode.replace("{" + key + "}", this.resizers[key]);
    }
    this.sHTMLCode = this.sHTMLCode.replace(/\{xMove\}/g, "onmousedown='StartMove(\"" + this.id + "\")'");

    this.sHTMLCode = this.sHTMLCode.replace(/\{xMinAction\}/g, this.ActionMinimize);
    this.sHTMLCode = this.sHTMLCode.replace(/\{xMinBtn\}/g, (this.CanMinimize?"{mm8WebDbImgPath}minimize.png":"{mm8WebDbImgPath}null.png"));

    this.sHTMLCode = this.sHTMLCode.replace(/\{xMaxAction\}/g, this.ActionMaximize);
    this.sHTMLCode = this.sHTMLCode.replace(/\{xMaxBtn\}/g, (this.CanMaximize?"{mm8WebDbImgPath}maximize.png":"{mm8WebDbImgPath}null.png"));

    this.sHTMLCode = this.sHTMLCode.replace(/\{xCloseAction\}/g, this.ActionClose);
    this.sHTMLCode = this.sHTMLCode.replace(/\{xCloseBtn\}/g, (this.CanClose?"{mm8WebDbImgPath}exit.png":"{mm8WebDbImgPath}null.png"));

    this.sHTMLCode = this.sHTMLCode.replace(/\{xPinBtn\}/g, "{mm8WebDbImgPath}pin.png");

    this.sHTMLCode = this.sHTMLCode.replace(/\{xMoveEvent\}/g, "onmove='mm8UIControl_move(\"" + this.id + "\", EventArgs)'");
    this.sHTMLCode = this.sHTMLCode.replace(/\{xResizeEvent\}/g, "onresize='mm8UIControl_resize(\"" + this.id + "\", dX, dY, type)'");
    
    this.sHTMLCode = this.sHTMLCode.replace(/\{mm8WebDbImgPath\}/g, mm8WebDbImgPath);

    sOverflow = "";
    if (this.CanOverflow)
    {
      sOverflow = "overflow-x: scroll;overflow-y:scroll;";    
    }
    this.sHTMLCode = this.sHTMLCode.replace(/\{xOverflow\}/g, sOverflow);

    return this.sHTMLCode;
  };
  
  /*public*/this.AttachMM8Object = function(mm8Object)
  {
    if (this.sHTMLCode == "") return;
    xElem = document.getElementById(this.id + "Content");
    mm8Object.width = xElem.offsetWidth;
    mm8Object.height = xElem.offsetHeight;
    xElem.innerHTML = mm8Object.Render();
  }
  
  /*public abstract */this.EventPin = function(EventArgs)
  {
    if (!this.CanPin) return;
    this.IsPinned = !this.IsPinned;
    imgSrc = mm8WebDbImgPath;
    if (this.IsPinned)
    {
      imgSrc += "Pinned.png";
    }
    else
    {
        imgSrc += "Pin.png";
    }
    xElem = document.getElementById(this.id + "Pin");
    xElem.src = imgSrc;
  };
  
};

function CreateFloatBox(url, sizex, sizey, posx, posy, title)
{
  xObj = new mm8Floater("xFloater");
  if (sizex) xObj.width = sizex;
  else xObj.width = 320;
  if (sizey) xObj.height = sizey;
  else xObj.height = 240;
  
  if (!sizex || !sizey) xObj.CanOverflow = true;
  if (posx != null && posy != null)
  {
    xObj.SetPosition(posx, posy);
  }
  if (title!=null)
  {
    xObj.title = title;
  }
  else
  {
    xObj.title = "Magic Matrix 8.1";
  }
  xObj.RenderToTarget("mm8Compounds");

  xObj.SetContent(url);
  return xObj;
}


mm8Callback("mm8Floater.js");
