// contextual help.. 
// written by brandon burkett for elementblend
// may 1, 2006

//globals
var CURRENT_ELEM;
var STANDARD_WIDTH = 160;
var delay;
var interval = 0.60;
var termClass = "defineTerm";
var labelClass = "labelHelp";
var termBG = "termbg.jpg";
var labelBG = "labelbg.jpg";

// change these to whatever entity you wish (that has a title)
var entityType = new Array();
entityType.push('img');

// Simple Browser sniffer
function Browser()
	{
	var ua, s, i;

	this.isIE = false;
	this.isNS = false;
	this.version = null;

	ua = navigator.userAgent;

	s = 'MSIE';
	if ((i = ua.indexOf(s)) >= 0)
		{
		this.isIE = true;
		this.version = parseFloat(ua.substr(i + s.length));
		return;
		}

	s = 'Netscape6/';
	if ((i = ua.indexOf(s)) >= 0)
		{
		this.isNS = true;
		this.version = parseFloat(ua.substr(i + s.length));
		return;
		}

	// treat any other 'Gecko' browser as NS 6.1.
	s = 'Gecko';
	if ((i = ua.indexOf(s)) >= 0)
		{
		this.isNS = true;
		this.version = 6.1;
		return;
		}

	s = 'Safari';
	if ((i = ua.indexOf(s)) >= 0)
		{
		this.isSA = true;
		this.version = 2.0;
		return;
		}
}


// form structure

var contextualHelp = 
{
	// will add an event to id/element
	addEvent: function(elem, eventType, funct)
	{
		if(elem.addEventListener)
		{
			elem.addEventListener(eventType,funct,false);
		}
		else if(elem.attachEvent)
		{
			elem.attachEvent('on'+eventType, funct);
		}
		else
		{
			elem['on'+eventType] = funct;
		}

		

	},

	// initalizer function
	init: function(entity)
	{
		for(i=0; i<entity.length; i++)
		{
			if(document.getElementsByTagName(entity[i]))
			{
				var elements = document.getElementsByTagName(entity[i]);

				for(x=0; x<elements.length; x++)
				{
					var thisElem = elements[x];

					if(thisElem.className == 'staffImage' || thisElem.className == 'navImage')
					{
						var thisTitle = $(thisElem).attr('title');					

						// remove title and add new attribute
						$(thisElem).attr('contextualhelp', thisTitle);
						$(thisElem).attr('title','');
						
						// add events for item
						$(thisElem).bind('mouseover',function() { contextualHelp.show($(this)); });
						$(thisElem).bind('mouseout', function() { contextualHelp.hide($(this)); });
						//contextualHelp.addEvent(thisElem,'focus',contextualHelp.delay);
						//contextualHelp.addEvent(thisElem,'blur',contextualHelp.hide);
					}

				}
			}

		}
			
		
	},

	position: function (elem)
	{
		if (elem.offsetParent)
		{
			for (var posX = 0, posY = 0; elem.offsetParent; elem = elem.offsetParent)
			{
				posX += elem.offsetLeft;
				posY += elem.offsetTop;
			}
			return [posX, posY];
		}
		else
		{
			return [elem.x, elem.y];
		}
	},



	getParent: function (el, pTagName)
	{
		if (el == null)
		{
			return null;
		}
		// gecko bug, supposed to be uppercase
		else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase())
		{
			return el;
		}
		else
		{
			return getParent(el.parentNode, pTagName);
		}
	},

	show: function(elem)
	{

		if (CURRENT_ELEM) contextualHelp.hide(CURRENT_ELEM);
    	if (!document.getElementsByTagName) return;

		// check class names
		if($(elem).attr('class') == 'staffImage' || $(elem).attr('class') == 'navImage')
		{
			var contextual_help = $(elem).attr('contextualhelp');    
		    var newDiv = document.createElement('div');
			var innerText = '';

			if($(elem).attr('class') == 'staffImage')
			{
	    		newDiv.className = 'staffImageLarge';
				innerText = '<div><img src="staffImages/'+contextual_help+'" alt="large Image" height="300" width="300" /></div>';
				
				mpos = contextualHelp.position($(elem).get(0));
			    mx = mpos[0];
			    my = mpos[1];

			    newDiv.style.left = (mx+75) + 'px';
			    newDiv.style.top = (my-200) + 'px';		
			}
			if($(elem).attr('class') == 'navImage')
			{			
				newDiv.className = labelClass;
				innerText = "<div>"+contextual_help.replace(/\r\r|\n\n|\r\n\r\n/g, "</div><div>")+"</div>";
				
				mpos = contextualHelp.position($(elem).get(0));
			    mx = mpos[0];
			    my = mpos[1];

			    newDiv.style.left = (mx+15) + 'px';
			    newDiv.style.top = (my+55) + 'px';						
			}		    

			newDiv.innerHTML = innerText;
			var w = ($(elem).attr('class') == 'navImage') ? STANDARD_WIDTH : 315;			        
		    newDiv.style.width = w + 'px';		    
			
		    if (window.innerWidth && ((mx+w) > (window.innerWidth-45)))
			{
		       newDiv.style.left = (window.innerWidth - w - 45) + 'px';
			}
		    if (document.body.scrollWidth && ((mx+w) > (document.body.scrollWidth-30)))
			{
		        newDiv.style.left = (document.body.scrollWidth - w - 45) + 'px';
			}

			newDiv.style.display = 'none';    
			document.getElementsByTagName('body')[0].appendChild(newDiv);		
		    $(newDiv).show();
		
		    CURRENT_ELEM = newDiv;			
		}
	},

	hide: function (elem)
	{
		if (delay) clearTimeout(delay);
		if (CURRENT_ELEM)
		{
			$(CURRENT_ELEM).hide();
			CURRENT_ELEM = null;
		}

	}

}

// add to document after dom is loaded
$(document).ready(function() { contextualHelp.init(entityType); });
