
sinoidal = function(pos){ 	return ((-Math.cos(pos*Math.PI)/2) + 0.5); }



function handleEditLinkClick(e) {
  var el;
  if (window.event && window.event.srcElement) {
    el = window.event.srcElement;
  }
  if (e && e.target) {
    el = e.target;
  }
  if (!el) return;
  
  while (el.nodeName.toLowerCase() != 'a' && el.nodeName.toLowerCase() != 'body') {
    el = el.parentNode;
  }
  
  // Do it here
  if (treeedit && treeedit.showPane) {
  
    treeedit.showPane(el.href);
  
    if (window.event) {
      window.event.cancelBubble = true;
      window.event.returnValue = false;
    }
    if (e && e.stopPropagation && e.preventDefault) {
      e.stopPropagation();
      e.preventDefault();
    }
  
  }
}

function cancelClick() {
  if (treeedit && treeedit.doEditPerson2) {
    return false;
  }
  else {
    return true;
  }
}

var all_effects = new Array();

function EffectCallback() {
  for (var i=0; i<all_effects.length; i++) {
    if (all_effects[i] && all_effects[i].el) {
    
      var newvalue = all_effects[i].value + all_effects[i].delta;
      var finished = false;
      
      if (newvalue <= 50) {
        newvalue = 50 ;
        finished = true;
      }
      if (newvalue >= 100) {
        newvalue = 99.99;
        finished = true;
      }

      
      result = all_effects[i].fn(newvalue*0.01) * 100;
         
      all_effects[i].el.style.opacity = result * 0.01;
      all_effects[i].el.style.filter = "alpha(opacity=" + result + ")";
      
      if (finished) {
        all_effects[i] = {};
      }
      else {
        all_effects[i].value = newvalue;
      }
    }
  }
}

function SetEffect(el, delta, fn) {
  var j=0;
  for (var i=0; i<all_effects.length; i++) {
    if (all_effects[i] && all_effects[i].el && all_effects[i].el==el) {
      all_effects[i].delta = delta;
      return;
    }
    if (!all_effects[i]) { j = i; }
  }
  if (!j) { j = all_effects.length; }
  
  var value=0;
  if (delta < 0) { value=100; }
  all_effects[j] = { el: el, value: value, delta: delta, fn:fn };
}

function handleNodeEnter(e) {
  var el;
  if (window.event && window.event.srcElement) {
    el = window.event.srcElement;
  }
  if (e && e.target) {
    el = e.target;
  }
  if (!el) return;
  while (el.nodeName.toLowerCase() != 'div' && el.nodeName.toLowerCase() != 'body') {
    el = el.parentNode;
  }
  
  var links = el.getElementsByTagName("a");
  for (var j=0; j<links.length; j++) {
    var link = links[j];
    
    if (hasClassName(link, "editlink") || hasClassName(link, "biolink")) {
      SetEffect(links[j], 5, sinoidal);
    }
  }
}

function handleNodeExit(e) {
  var el;
  if (window.event && window.event.srcElement) {
    el = window.event.srcElement;
  }
  if (e && e.target) {
    el = e.target;
  }
  if (!el) return;
  while (el.nodeName.toLowerCase() != 'div' && el.nodeName.toLowerCase() != 'body') {
    el = el.parentNode;
  }
  
  var links = el.getElementsByTagName("a");
  for (var j=0; j<links.length; j++) {
    var link = links[j];
    if (hasClassName(link, "editlink") || hasClassName(link, "biolink")) {
      SetEffect(links[j], -5, sinoidal);
    }
  }
}

var effects = new Array();

function TreeEditor() {
  this.attach      = $("treeframe");
  
  this.editPane = document.createElement("iframe");
  this.editPane.id = "treeFrameEdit";
  this.editPane.name = "treeFrameEdit";
  this.editPane.src = "about:blank";
  this.editPane.frameBorder = "no";
  this.editPane.style.cssText = "position: absolute; left: -10000px; top: 50px; width: 80%; height: 80%;";
  this.attach.appendChild(this.editPane);
  
  this.hidePanel = function() {
    $("treeFrameEdit").style.left = "-10000px";
  }
  
  this.showPane = function(url) {
    var editPane = this.editPane;
    editPane.src = url;
    editPane.style.left = (editPane.parentNode.offsetWidth/2 - editPane.offsetWidth/2) + "px";
    editPane.style.top  = (editPane.parentNode.offsetHeight/2 - editPane.offsetHeight/2) + "px";
    editPane.focus();
    
    addEvent(this.attach, "click", this.hidePanel);
  }
  
  this.resizePane = function(w, h) {
    var editPane = this.editPane;
    editPane.src = url;
    editpane.style.width = w + "px";
    editpane.style.height = h + "px";
    editPane.style.left = (editPane.parentNode.offsetWidth/2 - editPane.offsetWidth/2) + "px";
    editPane.style.top  = (editPane.parentNode.offsetHeight/2 - editPane.offsetHeight/2) + "px";
  }
  /*
  
  var links = document.getElementsByTagName("a");
  for (var i=0; i<links.length; i++) {
    var link = links[i];
    if (link.pathname.match(/\/editperson\.php$/)) {
      addEvent(links[i], 'click', handleEditLinkClick, false);
      links[i].onclick = cancelClick;
    }
    
    if (link.pathname.match(/\/biopopup\.php$/)) {
      addEvent(links[i], 'click', handleEditLinkClick, false);
      links[i].onclick = cancelClick;
    }
  }
  
  */
  
  var nodes = document.getElementsByTagName("div");
  for (var i=0; i<nodes.length; i++) {
    if (hasClassName(nodes[i], "node")) {
    
      var node = nodes[i];
      addEvent(nodes[i], 'mouseover', handleNodeEnter, false);
      addEvent(nodes[i], 'mouseout' , handleNodeExit , false);
      
      var links = node.getElementsByTagName("a");
      for (var j=0; j<links.length; j++) {
        var link = links[j];
        if (hasClassName(link, "editlink") || hasClassName(link, "biolink")) {
          link.style.opacity = .5;
          link.style.filter = "alpha(opacity=50)";
        }
      }
    }
  }
  
  this.refreshTree = function() {
    //alert("Refreshing Tree...");
    window.history.go(0);
  }
  
  setInterval(function() { EffectCallback(); }, 50);
}

var treeedit;

addEvent(window, "load", function() { treeedit = new TreeEditor(); } );

