﻿// LabAPI
var currPage;
var currPageContainer;
var previousPage;
var vispage;
var globalPage;
var appFileRoot = "Utsmyckningar";
var appId = "Utsmyckningar";
var appName = "Utsmyckningar";
var ext = ".htm";
var ie = document.all ? true : false;
var nav = false;
function versionChecker() {
if (window.opera) {
ie = false;
} else {
  var agt = navigator.userAgent.toLowerCase();
  var appVer = navigator.appVersion.toLowerCase();
  var app = navigator.appName;
  if ((agt.indexOf("mozilla") != -1) || (agt.indexOf("netscape")))
    nav = true;
  if (navigator.platform.indexOf("Mac") != -1)
    ie = false;
/* innerText for Mozilla removed in MMLab 7.0
  if (!ie) setGeckoSpecific();
*/
}
}
 //A swapNode function for mozilla/w3c browsers
 if (window.Node && Node.prototype) {
 Node.prototype.swapNode = function (node) {
 var nextSibling = this.nextSibling;
 var parentNode = this.parentNode;
 node.parentNode.replaceChild(this, node);
 parentNode.insertBefore(node, nextSibling);
 }
 }
/* Removed in MMLab 7
function setGeckoSpecific() {
  eval("HTMLElement.prototype.innerText setter = geckoSetInnerText;");
  eval("HTMLElement.prototype.innerText getter = geckoGetInnerText;");
}
*/
function initPage() {
  versionChecker();
  // if (ie) { document.body.scroll = "%SCROLLBARS%"; }
  currPage = document.getElementById("page");
  globalPage = document.getElementById("page");
  vispage = document.getElementById("page");
  if (currPage.childNodes.length > 0) {
    if ((ie) && (currPage.filters.length > 0)) {
      for (var i=0; i < currPage.filters.length; i++) {
        currPage.filters[i].apply();
        currPage.style.visibility = "visible";
        currPage.filters[i].play();
      }
    }
    else
      currPage.style.visibility = "visible";
  }
  if (!ie) {
    document.all = new Array();
    collectAllNodes(document.body);
  }
  var child = document.all;
  //var child = ie ? document.all : document.body.childNodes;
  for (var i = 0; i < child.length; i++) {
    var candidate = child[i];
    setObjectMethods(candidate);
    if (isMediaObject(candidate))
      candidate.copyTo(null);
  }
  for (var i=0; i < vispage.childNodes.length; i++) {
    var child = vispage.childNodes[i];
    if (child.id) {
      if (ie) {
        if (objClassMember(child,"group")) {
          for (var j=0; j < child.childNodes.length; j++) {
            var grandChild = child.childNodes[j];
            setObjectMethods(grandChild);
            if (isMediaObject(grandChild))
              grandChild.copyTo(null);
            playTransition(grandChild);
          }
        }
        else
          playTransition(child);
      }
      else {
        setObjectMethods(child);
        child.oldStyle = new oldStyle(child);
        child.resetStyle = getOldStyle;
        if(child.hasChildren) {
          for (var j=0; j < child.childNodes.length; j++) {
            var grandChild = child.childNodes[j];
            setObjectMethods(grandChild);
            grandChild.oldStyle = new oldStyle(grandChild);
            grandChild.resetStyle = getOldStyle;
            if (objClassMember(child,"group"))
              grandChild.style.visibility = "visible";
          }
        }
        child.style.visibility = "visible";
      }
    }
  }
  setPageHeight();
  currPage.autoStart.run();
}
function setPageHeight() {
  var height = parseInt(ie ? vispage.currentStyle.height : document.defaultView.getComputedStyle(vispage,null).height);
  if ((!height) || (height <= 0)) {
    var totHeight = window.screen.height;
    var child = ie ? vispage.all : vispage.childNodes;
    for (var i=0; i < child.length; i++) {
      var candidate = child[i];
      if (candidate.id) {
        var candHeight = parseInt(ie ? candidate.currentStyle.height : document.defaultView.getComputedStyle(candidate,null).height);
        var candTop = parseInt(ie ? candidate.currentStyle.height : document.defaultView.getComputedStyle(candidate,null).height);
        var tmpHeight = candHeight + candTop;
        if (tmpHeight > totHeight)
          totHeight = tmpHeight;
      }
    }
    vispage.style.height = totHeight + "px";
  }
}
function getObject(id) {
  var ref = document.getElementById(id);
  if (ref)
    return ref
  else
    return document;
}
function visObj(id) {
  var ref;
  var ret = false;
  try {
    return document.getElementById(id) ? true : false;
  }
  catch (e) {
    return false;
  }
}
function deleteObject(id) {
  var obj = getObject(id);
  obj.parentNode.removeChild(obj);
}
function isSoundObject(obj) {
  if (objClassMember(obj,"media")) {
    var mObj = getObject(obj.id + "Object");
    return (mObj.className.match("soundObject"));
  }
  return false;
}
function isMediaObject(obj) {
  return (obj.className ? (obj.className.match("media$") != null) : false);
}
function renderHtmlOnPage(page,src) {
  var re = /id=\"(\w{1,})\"/i;
  var res = re.exec(src);
  var flag = false;
  if ((res != undefined) || (getObject(res[1]) == null)) {
    if (ie)
      vispage.insertAdjacentHTML("beforeEnd",src)
    else
      geckoInsertHTML(vispage,src);
    if (ie)
      playTransition(vispage.lastChild)
    else
      ;//vispage.lastChild.style.visibility = "visible";
    flag = true;
    setObjectMethods(vispage.lastChild);
  }
  return flag;
}
function playTransition(obj) {
  try {
    var vis;
    if ((obj.style.visibility == "visible") && (obj.filters.length > 0))
      vis = "hidden"
    else
      vis = "visible";
    for (var i=0; i < obj.filters.length; i++) {
      if (obj.filters[i] != obj.filters["alpha"]) {
        obj.filters[i].apply();
        obj.style.visibility = vis;
        obj.filters[i].play();
      }
    }
  }
  catch (e) {}
}
function jumpToPage(page) {
  if (page == "Menyutsmyckningar")
    document.location.href = appFileRoot + ext
  else
    document.location.href = appFileRoot + page + ext;
}
function historyBack() {
  history.go(-1);
}
function previousPage() {
  jumpToPage(appPreviousPage);
}
function nextPage() {
  jumpToPage(appNextPage);
}
function oldStyle(obj) {
  this.oldClassName = obj.className;
}
function getOldStyle() {
  this.className = "";
  this.style.cssText = "";
  this.className = this.oldStyle.oldClassName;
}
function autoStartObject() {
  this.lines = new Array();
  this.add = autoStartAdd;
  this.run = autoStartRun;
}
function autoStartRun() {
  for (var i=0; i < this.lines.length; i++)
    eval(this.lines[i]);
}
function autoStartAdd(line) {
  this.lines[this.lines.length] = line;
}
function moveMedia(destination) {
  if (!isSoundObject(this))
    this.player.className = "vmediaobject";
  if (this.autostart)
    this.play();
}
/**
 * @fileoverview
 * For global vars in multiple pages mode.
 * @author Stefan Cedervall
 */
var LabCache;  // "session" variable
/**
 * @private
 * @constructor
 */
function CachedVar(name,value) {
  /**
   * @private
   * @type string
   */
  this.name = name;
  /** @type string */
  this.value = value;
}
function LabCacheHandler() {
  var VarList = new Array();
  function getItemIndex(name) {
    var result = -1;
    if (VarList) {
      for (var i=0; i < VarList.length; i++) {
        if (VarList[i].name == name) {
          return i;
        }
      }
    }
    return result;
  }
  this.VarByName = function(name) {
    idx = getItemIndex(name);
    if (idx ==-1) {
      obj = new CachedVar(name, "");
      VarList.push(obj);
      return obj;
    }
    else
      return VarList[idx];
  }
}
/** @private */
function VarByName(name) {
  // create the session var if does not exists
  if (!LabCache)
    LabCache = new LabCacheHandler();
  return LabCache.VarByName(name);
}
/**
  * Adds or returns a variable to/from the cache
  * <p>
  * Usage: GlobalVarByName(name).value = value;
  * <br>       value = GlobalVarByName(name).value;
  * @return {@link CachedVar}
 */
function GlobalVarByName(name) {
  if (window.parent.VarByName)
    return window.parent.VarByName(name)
  else
    return VarByName(name);
}
/**************************  GlobalVarByName END *****************************/

