/* (c) 2007 by triplemind.com
 *
 * This is the root site's library with functions useful for all sites.
 * It is inherited by almost every child site.
 *
 * Author: cgaffga
 * Author: $Author: cgaffga $
 * Version: $Id: functions.js,v 1.1.2.12 2007-07-06 00:31:44 cgaffga Exp $
 */

/*
 * Toggle visibility of an element.
 */
function toggle(id, event) {
  if(event) {
    if(event.stopPropagation) event.stopPropagation();
    else event.cancelBubble=true;
  }
  elem=document.getElementById(id);
  if(elem.style.display=='') {
    elem.style.display='none';
    return false;
  } else {
    elem.style.display='';
    return true;
  }
}

/*
 * Folding/unfolding folders
 */
function fold(id, event) {
  var target = event.srcElement || event.target;
  if(target.tagName=='A') return false;
  if(toggle(id+'-ul', event)) {
    elem=document.getElementById(id+'-li');
    elem.className=elem.className.replace(/folded/g,'') + ' unfolded';
  } else {
    elem=document.getElementById(id+'-li');
    elem.className=elem.className.replace(/unfolded/g,'') + ' folded';
  }  
}

/*
 * Show a help bubble.
 */
var lastHelpBubble = null;
function helpBubble(event, id, show,position) {
  elem = document.getElementById(id); if(elem == null) return;
  oldStatus = elem.style.display;

  // show/hide the bubble...
  if(show == null) {
    if (elem.style.display == 'none') {
      elem.style.display = '';
      if(lastHelpBubble) {
        lastHelpBubble.style.display = 'none';
      }
      lastHelpBubble = elem;
    } else {
      elem.style.display = 'none';
      lastHelpBubble = null;
    }
  } else { // show not given...
    if(show && elem.style.display == 'none') {
      if(lastHelpBubble) {
        lastHelpBubble.style.display = 'none';
      }
      elem.style.display = '';
    } else {
      elem.style.display = 'none';
      lastHelpBubble = null;
    }
  }
  
  // position
  if(event != null && oldStatus == 'none' && elem.style.display == '' && (position==null || position)) {
    // get the mouse position...
    if (event.pageX || event.pageY) {
      posx = event.pageX;
      posy = event.pageY;
    } else if (event.clientX || event.clientY) {
      posx = event.clientX;
      posy = event.clientY;
    }
    if(elem.offsetParent){
    	posx-=getX(elem.offsetParent);
    	posy-=getY(elem.offsetParent);
    }
    // move the bubble to the correct position when we show it...
    elem.style.left = (posx - 10) + 'px';
    elem.style.top = (posy - elem.offsetHeight + 2) + 'px';
  }
}

function getY( oElement ){var iReturnValue = 0;while( oElement != null ) {iReturnValue += oElement.offsetTop;oElement = oElement.offsetParent;}return iReturnValue;} function getX( oElement){var iReturnValue = 0;while( oElement != null ){iReturnValue += oElement.offsetLeft;oElement = oElement.offsetParent;}return iReturnValue;}
