// LabAPI
var currPage;
var currPageContainer;
var previousPage;
var vispage;
var globalPage;
var appFileRoot = "eksamen";
var appId = "dnkogpinsebeveg";
var appName = "dnkogpinsebeveg";
var ext = ".htm";
var ie = document.all ? true : false;
var nav = false;
function versionChecker() {
  var agt = navigator.userAgent.toLowerCase();
  var appVer = navigator.appVersion.toLowerCase();
  var app = navigator.appName;
  if ((agt.indexOf("mozilla") != -1) || (agt.indeOf("netscape")))
    nav = true;
  if (navigator.platform.indexOf("Mac") != -1)
    ie = false;
  if (!ie)
    setGeckoSpecific();
}
function setGeckoSpecific() {
  eval("HTMLElement.prototype.innerText setter = geckoSetInnerText;");
  eval("HTMLElement.prototype.innerText getter = geckoGetInnerText;");
  Node.prototype.swapNode = function (node) {
    var nextSibling = this.nextSibling;
    var parentNode = this.parentNode;
    node.parentNode.replaceChild(this, node);
    parentNode.insertBefore(node, nextSibling);
  }
}
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 == "velkomst")
    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();
}
function setObjectMethods(obj) {
  if (obj.id) {
    obj.incWidth = methodIncWidth;
    obj.incHeight = methodIncHeight;
    obj.incLeft = methodIncLeft;
    obj.incTop = methodIncTop;
    obj.rescale = methodRescale;
    obj.getAttr = methodGetAttr;
    obj.setAttr = methodSetAttr;
    obj.oldStyle = new oldStyle(obj);
    obj.resetStyle = getOldStyle;
  }
}
function methodIncWidth(w) {
  var width = ie ? this.currentStyle.width : document.defaultView.getComputedStyle(this, null).width;
  var w2 = parseInt(width) + w;
  if (w2 >= 0)
    this.style.width =  w2 + "px";
}
function methodIncHeight(h) {
  var height = ie ? this.currentStyle.height : document.defaultView.getComputedStyle(this, null).height;
  var h2 = parseInt(height) + h;
  if (h2 >= 0)
    this.style.height = h2 + "px";
}
function methodIncLeft(l) {
  var left = ie ? this.currentStyle.left : document.defaultView.getComputedStyle(this, null).left;
  var l2 = parseInt(left) + l;
  if (l2 >= -32768)
    this.style.left = l2 + "px";
}
function methodIncTop(t) {
  var top = ie ? this.currentStyle.top : document.defaultView.getComputedStyle(this, null).top;
  var t2 = parseInt(top) + t;
  if (t2 >= -32768)
    this.style.top = t2 + "px";
}
function methodRescale(wh) {
  this.incWidth(wh*2);
  this.incHeight(wh*2);
  this.incLeft(-wh);
  this.incTop(-wh);
}
function methodGetAttr(attrName) {
  var attrVal;
  if (visObj(this.id)) {
    try {
      attrVal = eval("this.style." + attrName);
    } catch (e) {}
  }
  return attrVal;
}
function methodSetAttr(attrName, attrVal) {
  if (visObj(this.id)) {
    try {
      eval("this.style."+attrName+" = '"+attrVal+"';");
    } catch (e) {}
  }
}
function getSender() {
  try {
    return (ie ? window.event.srcElement : getObject(event.target));
  } catch (e) {  return null; }
}
function hideObject(object) {
  if ((visObj(object.id)) && (object.style.visibility != "hidden")) {
    if (isMediaObject(object))
      object.stop();
    if (ie) {
      if ((object.filters.length > 0)) {
        object.style.visibility="visible";
        playTransition(object);
      }
      else
        object.style.visibility="hidden";
    }
    else
      object.style.visibility="hidden";
  }
}
function showObject(object) {
  if (visObj(object.id)) {
    if (ie) {
      if ((object.filters.length > 0)) {
        object.style.visibility="hidden";
        object.style.display="block";
        playTransition(object);
      }
      object.style.visibility="visible";
    }
    else {
      object.style.visibility="visible";
      object.style.display="block";
    }
  }
}
function moveToTop(object) {
  if (visObj(object.id)) {
    var z = 0;
    for (var i=0; i < vispage.childNodes.length; i++) {
      try {
        var cZ = vispage.childNodes[i].getAttr("zIndex");
        if (cZ > z)
          z = cZ;
      }
      catch(e) {}
    }
    var zIndex = object.getAttr("zIndex");
    if (zIndex <= z) {
      object.setAttr("oldzIndex", zIndex);
      object.setAttr("zIndex", z + 1);
    }
  }
}
function removeObject(object) {
  try {
    if (visObj(object.id))
      deleteObject(object.id);
  } catch (e) {}
}
function newSize(object, width, height) {
  if (visObj(object.id)) {
    object.style.width = width + "px";
    object.style.height = height + "px";
  }
}
function newPos(object, left, top) {
  if (visObj(object.id)) {
    object.style.left = left + "px";
    object.style.top = top + "px";
  }
}
function redrawPage() {
  if (currPage.id != "page")
    jumpToPage(currPage.id);
  else
    document.location.href = document.location.href;
}
function resetObject(object) {
  if (visObj(object.id))
    object.resetStyle();
}
function changeTextColor(object, color) {
  if (visObj(object.id))
    object.style.color = color;
}
function changeBorderColor(object, color) {
  if (visObj(object.id))
    object.style.borderColor = color;
}
function changeBackgroundColor(object, color) {
  if (visObj(object.id))
    object.style.backgroundColor = color;
}
function changeOpacity(object, msopac, nsopac) {
  if (visObj(object.id)) {
    if (ie)
      object.style.filter += "alpha(opacity=" + msopac + ")";
    else
      object.style.opacity = nsopac / 100;
  }
}
function changeVolume(object, volume) {
  if (isMediaObject(object)) {
    var vol = object.player.settings.volume;
    vol += volume;
    if ((vol >= 0) && (vol <= 100))
      object.player.settings.volume = vol;
  }
}
function changeBalance(object, balance) {
  if (isMediaObject(object)) {
    var bal = object.player.settings.balance;
    bal += balance;
    if ((bal >= -100) && (bal <= 100))
      object.player.settings.balance = bal;
  }
}
function setVolume(object, volume) {
  if (isMediaObject(object))
    object.player.settings.volume = volume;
}
function setBalance(object) {
  if (isMediaObject(object))
    object.player.settings.balance = balance;
}
var pImageList = new Array();
function preloadImage(file) {
  var cnt = pImageList.length;
  pImageList[cnt] = new Image();
  pImageList[cnt].src = file;
}
function geckoSetInnerText(src) {
  var r = this.ownerDocument.createRange();
  r.selectNodeContents(this);
  r.deleteContents();
  var df = r.createContextualFragment(src);
  this.appendChild(df);
  return src;
}
function geckoGetInnerText() {
  var str = "";
  re = /\<.*?\>/g;
  str = this.innerHTML;
  return str.replace(re,'');
}
function collectAllNodes(node) {
  var all = new Array();
  var nodes = node.childNodes;
  for (var i=0; i < nodes.length; i++) {
    if (nodes[i].hasChildNodes())
      collectAllNodes(nodes[i]);
      document.all[document.all.length] = nodes[i];
  }
}
function geckoInsertHTML(node, src) {
  var range = document.createRange();
  range.setStartAfter(node.lastChild);
  var docFrag = range.createContextualFragment(src);
  node.appendChild(docFrag);
}
function objClassMember(obj, cName) {
  return (obj.className ? (obj.className.match(cName) != null) : false);
}
function createMedia(isSound) {
  var str = new String();
  if (ie)
    str = "<object id='" + this.id + "Object' classid='" + this.clsid +
          "' width='" + this.width + "' height='" + this.height + "' class='mtype'>"
  else
    str = "<object id='" + this.id + "Object' type='" + this.type +
          "' data='" + fixURL(this.url) +
          "' width='" + this.width + "' height='" + this.height + "' class='mtype'>";
  for (var i=0; i < this.params.length; i++)
    str += this.params[i];
  str += "</object>";
  if (isSound)
    str = str.replace(/mtype/,"soundObject")
  else
    str = str.replace(/mtype/,"mediaobject");
  if (ie)
    this.insertAdjacentHTML("beforeEnd",str)
  else
    geckoInsertHTML(this,str);
  this.player = document.getElementById(this.id + "Object");
  this.copyTo = moveMedia;
  if (isSound)
    this.player.style.visibility = "hidden";
}
function mediaAddParam(name, value) {
  this.params[this.params.length] =
    "<param name='" + name + "' value='" + value + "'/>";
}
function stopAudioVideo() {
  var pChildren = vispage.childNodes;
  for (var i = (pChildren.length - 1); i >= 0; i--) {
    var child = pChildren[i];
    if (objClassMember(child,"media"))
      child.stop();
  }
}
function fixURL(url) {
  var bref = document.location.href;
  if (bref.match(/^file\:\/\//)) {
    var re = /(\.\.)/g;
    var str = url.match(re);
    if (str) {
      url = url.replace(/\.\.\//g,"");
      var cnt = str.length;
      if (cnt != null) {
        var re = new RegExp("(.*\/)(.*?\/){"+cnt+"}(.*?$)");
        str = re.exec(bref);
        return unescape(str[1] + url);
      }
    }
  }
  return url;
}
