// Tooltip Class
FB_overlay_Tooltip = function(element, markup, options) {
	if (0 < $(element).length) {
	  this.init(element, markup, options);
	}
}

$.extend(FB_overlay_Tooltip.prototype, {
	// object variables
	element: {},
	container: {},
	pageX: 0,
	pageY: 0,

	init: function(element, markup, options) {
		// do initialization here
		this.delay = 500;
		this.element = element;
		this.timeout = null;
		this.visible = false;
		this.options = $.extend({
			start: 'focus',
			stop: 'blur',
			useTitle: false,
			sticky: false,
			position: 'left'
			}, options);
		
		this.backdrop = $('<div></div>');
		this.backdrop.css({position: 'absolute', zIndex: 999, left: '0px', top: '0px', width: '291px', height: '260px'});
		this.backdrop.addClass('fb_overlay_tooltip_backdrop');
		this.backdrop.addClass('pngfix');
		this.backdrop.hide();
		$(document.body).append(this.backdrop);
		
		this.container = $('<div></div>');
		this.container.css({position: 'absolute', zIndex: 1000, left: '0px', top: '0px', width: '291px', height: '260px'});
		this.container.addClass('fb_overlay_tooltip');
		
		this.container.hide();
		$(document.body).append(this.container);
		
		var obj = this;
		
		$(this.element).bind(this.options.start, function() {obj.showDelayed(this);});
		$(this.element).bind(this.options.stop, function() {obj.hide(this);});
		
		$(this.container).bind(this.options.start, function() {obj.show(this, obj.options.sticky);});
		$(this.container).bind(this.options.stop, function() {obj.hide(this);});

		
		if ($(this.element).hasClass('select')) {
		   $(this.element).bind('mousedown', function() {obj.hide(this);});
		   $(this.element).bind('mouseup', function() {obj.hide(this);});
		}

		/*$(document).mousemove(function(e) {
			obj.pageX = e.pageX;
			obj.pageY = e.pageY;
		});*/
   
		var title = (this.options.useTitle) ? $(this.element).attr('title') : '';
		if ('' != title) {
			this.set(title);
		} else if ('' != markup) {
			this.set(markup);
		}
   },

   set: function(markup) {
	// set container content
	var f = '';
	/*if($.browser.msie && $.browser.version=="6.0") {
	  f = '<iframe class="tooltip_iframe" src="/incl/ed/iframe.html" frameborder="0" style="filter: progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0); z-index: -1"></iframe>';
	}*/
    this.container.html(f+'<div class="content">'+markup+'</div>');
	//this.markup = '<div class="header"></div><div class="content">'+markup+'</div>';
   },

   showDelayed: function(element, sticky) {
	  var obj = this;
	  if (this.visible) {
		 this.timeout = setTimeout(function(){ obj.show(element, sticky) }, this.delay);
	  } else {
		obj.show(element, sticky);
	  }
   },

	show: function(element, sticky) {
		 if($.browser.msie && $.browser.version=="6.0") {
			// do nothing
		 }
		 else {
			/*if ($(element).is(":focus")) {//< does not work for IE6 (crash)
			   return;
			}*/
		 }

		 if (this.visible)
			return;
		 
		// show layer
		if (element && null == sticky) {

			//this.container.contents().find('#tooltip').html(this.markup);
			
			// position next to element
			var p = $(element).offset();
			switch(this.options.position)
			{
			case 'right': // right
				p.left = p.left + $(element).width() + 15;
			break;

			case 'top':
				p.left = p.left - this.container.width() / 2 + $(element).width() / 2;
				//p.top = p.top - this.container.height() + 5;
				p.top = p.top - this.container.height() + 10;
			break;
			
			case 'bottom':
			   p.left = p.left - this.container.width() / 2 + $(element).width() / 2;
			   p.top = p.top + $(element).height() + 5;
			break;

			default: // left
				p.left = p.left - this.container.width() - 15;
			break;
			}
			
			this.backdrop.css({left: p.left+'px', top: p.top+'px'});
			this.container.css({left: p.left+'px', top: p.top+'px'});
		}

		this.backdrop.show();		
		this.container.show();
		//this.container.height(parseInt(this.container.contents().find('body').get(0).offsetHeight + 25));
		this.visible = true;
   },
   
	hide: function() {
		// hide layer
		clearTimeout(this.timeout);
		this.container.hide();
		this.backdrop.hide();
		this.visible = false;
   }
});


