// Methods for handling layers
// Requires cookies.js
function findObj(n, d) { 
  var p,i,x;  
  if(!d) d=document; 
  if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);
  }

  if(!(x=d[n])&&d.all) x=d.all[n]; 
  for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); 
  return x;
}

function tmt_findObj(n){
  var x,t; 
  if((n.indexOf("?"))>0&&parent.frames.length){
    t=n.split("?");
    x=eval("parent.frames['"+t[1]+"'].document.getElementById('"+t[0]+"')");
  } else {
    x=document.getElementById(n)
  }
  return x;
}

/*
 * Args:
 * Layer name
 * ???
 * show | hide
 * x
 * y
 */
function showHideLayers() { 
  var i,p,v,obj,x,y,args=showHideLayers.arguments;
  if(document.getElementById){
     for (i=0; i<(args.length-2); i+=5) { 
       obj=tmt_findObj(args[i]);v=args[i+2];
       v=(v=='show')?'visible':(v='hide')?'hidden':v;
       if(obj) { 
         obj.style.visibility=v;
         x = args[i+3];
         y = args[i+4];
         if (x) {
           obj.style.left = x;
         }
         if (y) {
           obj.style.top = y;
         }
       } 
     }
  } else {
    for (i=0; i<(args.length-2); i+=5) { 
      if ((obj=findObj(args[i]))!=null) { 
         v=args[i+2];
         if (obj.style) { 
            obj=obj.style; 
            v=(v=='show')?'visible':(v='hide')?'hidden':v; 
         }
         obj.visibility=v; 
         if (x && y) {
            obj.moveToAbsolute(x,y);
         }
      }
    }
  }
}

N = (document.all) ? false : true;
var overPanel = null;
var panelToMove = null;
var top=1;

 function hideLayer(layer) {
   showHideLayers(layer, '', 'hide');
 }

 function showLayer(layerId) {
    layerObj = document.getElementById(layerId);
    showLayerObject(layerObj);
 }

 function showLayerObject(layerObj) {
    layerObj.style.zIndex=++top;
    layerObj.style.visibility = "visible";
 }

 function makeTopLayer(layer) {
    layerObj = document.getElementById(layer);
    layerObj.style.zIndex=++top;
 }

 function isMovable(layer) {
    if (layer.getAttribute("movable")) return layer.getAttribute("movable") != "false";
    return (layer.className && layer.className=="hiddenPanel");
 }

 function getTopLayer() {
    topZ = 0;
    topLayer = null;
    layers = document.getElementsByTagName("div");
    if (layers) {
       for (i=0; i < layers.length; i++) {
           if (isMovable(layers[i]) &&
               layers[i].style.visibility == "visible" && 
               layers[i].style.zIndex > topZ) {
               topZ = layers[i].style.zIndex;
               topLayer = layers[i];
           }
       }
    }
    return topLayer;
 }

 function setDivEventHandlers() {
    layers = document.getElementsByTagName("div");
    if (layers) {
       for (i=0; i < layers.length; i++) {
           if (isMovable(layers[i])) {
              layers[i].onclick = function() { this.style.zIndex = ++top; }
              windowBar = document.getElementById(layers[i].id + "WindowBar");
              windowBar.onmouseover=function() {overPanel=this.getAttribute('layerId'); }
              windowBar.onmouseout=function() {overPanel=null; }
           }
       }
    }
 }

 function hideTopLayerOnEsc(e) {
    var key=0;
    if (window.event) {
       e = window.event;
    }
    if (e.which) {
       key = e.which;
    } else {
       key = e.keyCode;
    }
    if (key == 27) {
       layer = getTopLayer();
       if (layer) {
          hideLayer(layer.id);
          if (e.stopPropagation) {
             e.stopPropagation();
          }
          return false;
       }
    } else if ((layer =findLayerForKeyCode(key, e.altKey, e.ctrlKey))) {
       showLayerObject(layer);
       if (e.stopPropagation) {
          e.stopPropagation();
       }
       return false;
    }
    //alert("Key: " + key + " ALt: " + e.altKey + " Ctrl: " + e.ctrlKey);
 }

 function setShortcuts() {
    layers = document.getElementsByTagName("div");
    if (layers) {
       for (i=0; i < layers.length; i++) {
           if (isMovable(layers[i]) && !layers[i].shortcut) {
              if (N) {
                 layers[i].keyCode = layers[i].id.toUpperCase().charCodeAt(0);
              } else {
                 layers[i].keyCode = layers[i].id.toUpperCase().charCodeAt(0) - 64;
              }
              layers[i].ctrlKey = true;
           }
       }
    }
 }

 function setLayerShortcut(layerId, key, alt, ctrl) {
    layer = document.getElementById(layerId);
    if (layer) {
       layer.keyCode = key;
       if (alt) {
          layer.altKey = true;
       }
       if (ctrl) {
          layer.ctrlKey = true;
       }
    }
 }

 function findLayerForKeyCode(key, alt, ctrl) {
    foundLayer = null;
    layers = document.getElementsByTagName("div");
    if (layers) {
       for (i=0; i < layers.length; i++) {
           if (isMovable(layers[i]) && layers[i].keyCode == key && 
              ((!alt && !layers[i].altKey) || (alt && layers[i].altKey)) &&
              ((!ctrl && !layers[i].ctrlKey) || (ctrl && layers[i].ctrlKey))) {
               foundLayer = layers[i];
               break;
           }
       }
    }
    return foundLayer;
 }

 function setPanelToMove(panel) {
  if (panel) {
     panelToMove = document.getElementById(panel);
  } else {
     panelToMove = null;
  }
 }

function MD(e) {
  if (window.event) {
     e = window.event;
  }
  if (overPanel) {
    setPanelToMove(overPanel);
    if (N) {
       X=e.layerX;
       Y=e.layerY;
       return false;
    } else {
       X=e.offsetX;
       Y=e.offsetY;
    }
  }
}

function MM(e) {
  if (window.event) {
     e = window.event;
  }
  if (panelToMove) {
    if (N) {
      panelToMove.style.top = e.pageY-Y;
      panelToMove.style.left = e.pageX-X;
      panelToMove.style.position = "absolute";
    }
    else {          
      panelToMove.style.pixelLeft = e.clientX-X + document.body.scrollLeft;
      panelToMove.style.pixelTop = e.clientY-Y + document.body.scrollTop;
      panelToMove.style.position = "absolute";
      return false;
    }
  }
}

function positionLayer(layer, e) {
    if (N) {
      layer.style.top = e.pageY - 100;
      layer.style.left = e.pageX - 150;
      layer.style.position = "absolute";
      layer.style.pixelLeft = e.pageX - 150;
      layer.style.pixelTop = e.pageY - 100;
    }
    else {
      layer.style.pixelLeft = e.clientX + document.body.scrollLeft - 150;
      layer.style.pixelTop = e.clientY + document.body.scrollTop - 100;
      layer.style.position = "absolute";
    }
}


function MU() {
  if (panelToMove && panelToMove.getAttribute("savePosition")) {
     savePosition(panelToMove.id);
  }
  panelToMove = null;
}

function enablePanelMovement() {
  if (N) {
    document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP | Event.KEYPRESS );
  }
  document.onmousedown = MD;
  document.onmousemove = MM;
  document.onmouseup   = MU;
  document.onkeypress  = hideTopLayerOnEsc;

  setDivEventHandlers();
  setShortcuts();
}

function popupShow(layer, messageId, messageText) {
  var field = document.getElementById(messageId);
  if (field && field != null) {
     children = field.childNodes;
     for (i=0; i < children.length; i++) {
         field.removeChild(children.item(i));
     }
     field.appendChild(document.createTextNode(messageText));
     showLayer(layer);
  }
}

function popupHide(layer) {
  hideLayer(layer);
}


// This method requires cookies.js
function savePosition(layerId) {
  var layer = document.getElementById(layerId);
  var boardCookie=new Cookie(document, layerId, 8640);
  boardCookie.load();
  boardCookie.left = layer.style.left;
  boardCookie.top  = layer.style.top;
  boardCookie.store();
}


function setLayerPosition(layerId, defaultX, defaultY) {
  var boardCookie=new Cookie(document, layerId, 8640);
  var layer = document.getElementById(layerId);

  if (boardCookie.load() && boardCookie.left) {
     if (layer != null) {
        layer.style.left = boardCookie.left;
        layer.style.top  = boardCookie.top;
     }
  } else if (layer != null) {
     layer.style.left = defaultX;
     layer.style.top  = defaultY;
  }
}
