//////////////////////////////////////////////////////////////////////
//
// utility.js
//
// Utility Javascript functions



// Bubble class
//
// Used to fade in/out the word bubbles on home page.  Provide a DIV id as input.
//
// EXAMPLE:
//
// onmouseover = "Bubble.show('bubble_summer_camp');"
// onmouseout  = "Bubble.hide('bubble_summer_camp');"
// 
// Based on code by  Michael Leigeber
// http://sixrevisions.com/tutorials/javascript_tutorial/create_lightweight_javascript_tooltip/


var Bubble=function() {
 var speed = 10;
 var timer = 20;
 var endalpha = 95;
// var alpha = 0;
 return {

	// fade in or out on an element
	fade:function(bubble, d){
		var a = bubble.style.opacity * 100;	
   		if ((a != endalpha && d == 1) || (a != 0 && d == -1)) {
    		var i = speed;
   			if(endalpha - a < speed && d == 1){
    			i = endalpha - a;
   			}
			else if(a < speed && d == -1){
     			i = a;
   			}
   			var alpha = a + (i * d);
   			bubble.style.opacity = alpha * .01;
   			bubble.style.filter = 'alpha(opacity=' + alpha + ')';
  		}
		else {
	    	clearInterval(bubble.timer);
    	 	if(d == -1) { bubble.style.display = 'none' }
	  	}
 	},


	// fish out the element with specified ID
	get_elem:function(id){
  		if( document.getElementById ) // this is the way the standards work
    		return document.getElementById( id );
  		else if( document.all ) // this is the way old msie versions work
      		return document.all[id];
 		else if( document.layers ) // this is the way nn4 works
    		return document.layers[id];
		else return null;
	},

	// fade in the element
	show:function(id) {
		var bubble = Bubble.get_elem(id);
	
		//debug
		// document.getElementById('debug_msg').innerHTML = id;
		
		// minor bug:
		// If object is already mid-fade, this makes it vanish completely.
		// Should really only set opacity 0 if object is hidden.
	    bubble.style.opacity = 0;
    	bubble.style.filter = 'alpha(opacity=0)';
		
	   	bubble.style.display = 'block';
	  	clearInterval(bubble.timer);
  		bubble.timer = setInterval(function(){Bubble.fade(bubble, 1)}, timer);
	},
	
	// fade out the element
	hide:function(id) {
		var bubble = Bubble.get_elem(id);
		
		// debug
		// document.getElementById('debug_msg').innerHTML = "(empty)";
		
	  	clearInterval(bubble.timer);
   		bubble.timer = setInterval(function(){Bubble.fade(bubble, -1)}, timer);
  	}

 };
}();


// simple versions for showing/hiding an element

//function showBubble(id) {
//	var elem;
//	
//  	if( document.getElementById ) // this is the way the standards work
//    	elem = document.getElementById( id );
//  	else if( document.all ) // this is the way old msie versions work
//      	elem = document.all[id];
// 	else if( document.layers ) // this is the way nn4 works
//    	elem = document.layers[id];
//
//	elem.style.display = "block";
//}
//
//function hideBubble(id) {
//	var elem;
//	
//  	if( document.getElementById ) // this is the way the standards work
//    	elem = document.getElementById( id );
//  	else if( document.all ) // this is the way old msie versions work
//      	elem = document.all[id];
// 	else if( document.layers ) // this is the way nn4 works
//    	elem = document.layers[id];
//
//	elem.style.display = "none";
//}
//



//////////////////////////////////////////////////////////////////////
//
// Function for displaying a tooltip when mousing over something.
// Code by Michael Leigeber
// http://sixrevisions.com/tutorials/javascript_tutorial/create_lightweight_javascript_tooltip/
//
// Example:
//
// onmouseover="tooltip.show('Testing  123 ', 200);"
// onmouseout="tooltip.hide();"

var tooltip=function(){
 var id = 'tt';
 var top = 3;
 var left = 3;
 var maxw = 300;
 var speed = 10;
 var timer = 20;
 var endalpha = 95;
 var alpha = 0;
 var tt,t,c,b,h;
 var ie = document.all ? true : false;
 return{
  show:function(v,w){
   if(tt == null){
    tt = document.createElement('div');
    tt.setAttribute('id',id);
    t = document.createElement('div');
    t.setAttribute('id',id + 'top');
    c = document.createElement('div');
    c.setAttribute('id',id + 'cont');
    b = document.createElement('div');
    b.setAttribute('id',id + 'bot');
    tt.appendChild(t);
    tt.appendChild(c);
    tt.appendChild(b);
    document.body.appendChild(tt);
    tt.style.opacity = 0;
    tt.style.filter = 'alpha(opacity=0)';
    document.onmousemove = this.pos;
   }
   tt.style.display = 'block';
   c.innerHTML = v;
   tt.style.width = w ? w + 'px' : 'auto';
   if(!w && ie){
    t.style.display = 'none';
    b.style.display = 'none';
    tt.style.width = tt.offsetWidth;
    t.style.display = 'block';
    b.style.display = 'block';
   }
  if(tt.offsetWidth > maxw){tt.style.width = maxw + 'px'}
  h = parseInt(tt.offsetHeight) + top;
  clearInterval(tt.timer);
  tt.timer = setInterval(function(){tooltip.fade(1)},timer);
  },
  pos:function(e){
   var u = ie ? event.clientY + document.documentElement.scrollTop : e.pageY;
   var l = ie ? event.clientX + document.documentElement.scrollLeft : e.pageX;
   tt.style.top = (u - h) + 'px';
   tt.style.left = (l + left) + 'px';
  },
  fade:function(d){
   var a = alpha;
   if((a != endalpha && d == 1) || (a != 0 && d == -1)){
    var i = speed;
   if(endalpha - a < speed && d == 1){
    i = endalpha - a;
   }else if(alpha < speed && d == -1){
     i = a;
   }
   alpha = a + (i * d);
   tt.style.opacity = alpha * .01;
   tt.style.filter = 'alpha(opacity=' + alpha + ')';
  }else{
    clearInterval(tt.timer);
     if(d == -1){tt.style.display = 'none'}
  }
 },
 hide:function(){
  clearInterval(tt.timer);
   tt.timer = setInterval(function(){tooltip.fade(-1)},timer);
  }
 };
}();

