/*
 * jQuery Hintbox Plugin
 * Copyright (c) 2011 Mental Workout
 * Version: 1.1 (03/01/2011)
 * Requires: jQuery v1.4 or later
 */
(function($) {
    $.fn.hintbox = function(options) {
    
    	// setup default settings
    	var defaults = {
    		closeTipBtn: 'hintboxCloseBtn',
    		followMouse: false,
    		inSpeed: 400,
    		tipContent: '',
    		toolTipClass: 'hintbox',
    		xOffset: -15,
    		yOffset: 1,
			arrowPosition: 'left',
			width: 400,
			delay: 400
    	},
    
    	// This makes it so the users custom options overrides the default ones
    	settings = $.extend({}, defaults, options);

		if (settings.arrowPosition == 'right')
			settings.xOffset = -settings.width - 12;
		else if (settings.arrowPosition == 'center')
			settings.xOffset = -settings.width / 2 - 12;

    	return this.each(function() {
			var obj = $(this);
			if(obj.attr('title')){
				var tipContent = obj.attr('title');
			} else {
				var tipContent = settings.tipContent;
			}
						
			if(tipContent){	
				var timeout = false;
				obj.attr({title: ''});
				
				obj.hover(function(el){
					if (timeout) clearTimeout(timeout);
					timeout = setTimeout(showPopup, settings.delay);
			    },
				function(){
					if (timeout) clearTimeout(timeout);
					$('.' + settings.toolTipClass).stop().hide().remove();
			    });
		    }
		
			function showPopup()
			{
				if (obj.offset().left + obj.outerWidth() / 2 + settings.xOffset + settings.width + 30 > $(window).width())
				{
					settings.xOffset = -settings.width - 12;
					settings.arrowPosition = "right";
				}
				if (obj.offset().left + obj.outerWidth() / 2 + settings.xOffset < 0)
				{
					settings.xOffset = -15;
					settings.arrowPosition = "left";
				}
				
				var clss = settings.toolTipClass + " hintbox-" + settings.arrowPosition + "Arrow";					  
				$('body').append("<div class='" + clss + "' style='display: none;width: " + settings.width + "px;'><div class='hintboxJustForCenterArr'><div class='hintboxInner'><div class='hintboxContent'><div class='hintboxContentInner'><div>"+ tipContent +"</div></div></div></div></div></div>");
				
				var diff = obj.offset().top - $('body').get(0).scrollTop - $('.' + settings.toolTipClass).outerHeight();
				if (diff < 0)
					$('body').get(0).scrollTop = $('body').get(0).scrollTop + diff;
				
				$('.' + settings.toolTipClass).css({
					position: 'absolute',
					display: 'none',
					zIndex: '50000',
					top: (obj.offset().top - $('.' + settings.toolTipClass).outerHeight() - settings.yOffset) + 'px',
					left: (obj.offset().left + obj.outerWidth() / 2 + settings.xOffset) + 'px'
				}).stop();
				if ($.browser.msie)
					$('.' + settings.toolTipClass).show();
				else
					$('.' + settings.toolTipClass).fadeIn(settings.inSpeed);
			}
		    
		    // Follow mouse if followMouse is false and click is false
		    if(settings.followMouse && !settings.clickIt){
				obj.mousemove(function(el){
					$('.' + settings.toolTipClass).css({
						top: (el.pageY - $('.' + settings.toolTipClass).outerHeight() - settings.yOffset),
						left: (el.pageX + settings.xOffset)
					})
				});
			}
		    		  
		}); // END: return this
		
		// returns the jQuery object to allow for chainability.  
        return this;
    };
})(jQuery);
