function toggleDivVisibility( referenceNode ) {
  var children = referenceNode.parentNode.childNodes;
  var numberOfChildren = children.length;
  var nextVisible = false;

  toggleCorrespondingImage( referenceNode );

  for ( i=0; i<numberOfChildren; i++ ) {
    var current = children[i];

    if ( current.nodeName.toLowerCase() == 'div' ) {
      var classValue = current.getAttribute( 'class' );
      if ( classValue == null || ( classValue.indexOf( 'dontToggle' ) < 0 && classValue.indexOf( 'csc-header' ) &&
           classValue.indexOf( 'paragraphReplacement' ) < 0 ) ) {
	if ( nextVisible == true ) {
	  var currentVisibility = current.style.display;
	  if ( currentVisibility == 'block' ) {
	    current.style.display='none';
	  }
	  else {
	    current.style.display='block';
	  }
	  nextVisible = false;
	}
	else {
	  current.style.display='none';
	}
      }
    }

    if ( current == referenceNode ) {
      nextVisible = true;
    }
  }
}

function toggleCorrespondingImage( referenceNode ) {
  var children = referenceNode.childNodes;
  var numberOfChildren = children.length;

  for ( i=0; i<numberOfChildren; i++ ) {
    var currentChild = children[i];
    if ( currentChild.nodeName.toLowerCase() == 'a' ) {
      var grandchildren = currentChild.childNodes;
      var numberOfGrandchildren = grandchildren.length;
      for ( j=0; j<numberOfGrandchildren; j++ ) {
	var currentGrandchild = grandchildren[j];
	if ( currentGrandchild.nodeName.toLowerCase() == 'img' ) {
	  var theSource = currentGrandchild.src;
	  if ( theSource.indexOf( "_down" ) >= 0 ) {
	    theSource = theSource.replace(/_down/,"");
	  }
	  else {
	    theSource = theSource.replace(/\.gif$/,"_down.gif");
	  }
	  currentGrandchild.src = theSource;
	  break;
	}
      }
      break;
    }
  }
}

function switchToStyle( styleType ) {
  document.cookie = "sitestyle=font_" + styleType + ".css" +
                  "; max-age=" + (60*60*24*365);
}



function filterEntries( id ) {
  var selectElement = document.getElementById( id );
  var numberOfOptions = selectElement.options.length;
  var selected = new Array();

  for ( var i=0; i<numberOfOptions; i++ ) {
    var currentOption = selectElement.options[i];
    if ( currentOption.selected ) {
      selected.push( currentOption.value );
    }
  }

  var allSpans = document.getElementsByTagName('span');
  var numberOfSpans = allSpans.length;
  for ( var i=0; i<numberOfSpans; i++ ) {
    var currentSpan = allSpans[i];
    var className = currentSpan.getAttribute('class');
    
    if ( className != null && className.indexOf('saMember') >= 0 ) {
    
      if ( selected.length == 0 ) {
        currentSpan.parentNode.style.display = 'block';
      }
      else {
	var visible = false;
	for( var j=0; j<selected.length && ! visible; j++ ) {
	  if ( className.indexOf( selected[j] ) >= 0 ) {
	    visible=true;
	  }
	}
	if ( visible ) {
	  currentSpan.parentNode.style.display = 'block';
	}
	else {
	  currentSpan.parentNode.style.display = 'none';
	}
      }
    }
  }
}


// Borrowed from
//   http://kkaefer.com/blog/javascript-position-bestimmen
function getPosition(obj) {
  var pos = { x:0, y:0 };

  do {
    pos.x += obj.offsetLeft;
    pos.y += obj.offsetTop;
  } while (obj = obj.offsetParent);

  return pos;
}


function do_tick() {
  
  if ( ! this.isPaused ) {
    var currentScrollValue = this.toMove.scrollLeft;

    this.toMove.scrollLeft += this.offset;
    if ( currentScrollValue >= this.skipPosition ) {
      this.toMove.scrollLeft = this.startPosition;
    }
  }
}
function set_pause( trueOrFalse ) {
  this.isPaused = trueOrFalse;
}


function Ticker( referenceId ) {
  this.toMove= document.getElementById( referenceId );
  this.offset = 1;
  this.startElement = document.getElementById( 'startPoint' );
  this.startPosition = getPosition( this.startElement ).x;
  this.skipElement = document.getElementById( 'skipPoint' );
  this.skipPosition = getPosition( this.skipElement ).x;
  this.isPaused = false;

  this.doTick = do_tick;
  this.setPause = set_pause;
}
