/* Sticky Tooltip script (v1.0)
* Created: Nov 25th, 2009. This notice must stay intact for usage 
* Author: Dynamic Drive at http://www.dynamicdrive.com/
* Visit http://www.dynamicdrive.com/ for full source code
*/

(function($) {                                          // Compliant with jquery.noConflict()
	$.fn.YTC_SoTooltip = function(o) {	
        o = $.extend({
        targetElementSelector: null,
        tooltipcontainer: null,
        tooltipHeight: null,
        tooltipWidth: null,
        heightTitle:null,           
        moduleId:null           
        }, o || {});
                
	var stickytooltip={
		tooltipoffsets: [o.tooltipWidth, o.tooltipHeight], //additional x and y offset from mouse cursor for tooltips
		fadeinspeed: 200, //duration of fade effect in milliseconds
		rightclickstick: true, //sticky tooltip when user right clicks over the triggering element (apart from pressing "s" key) ?
		stickybordercolors: ["black", "darkred"], //border color of tooltip depending on sticky state
		stickynotice1: ["Press \"s\"", "or right click", "to sticky box"], //customize tooltip status message
		stickynotice2: "Click outside this box to hide it", //customize tooltip status message
        
		//***** NO NEED TO EDIT BEYOND HERE

		isdocked: false,

		positiontooltip:function($, $tooltip, e){
			var x=e.pageX+this.tooltipoffsets[0], y=e.pageY+this.tooltipoffsets[1]
			var tipw=$tooltip.outerWidth(), tiph=$tooltip.outerHeight(), 
			x=(x+tipw>$(document).scrollLeft()+$(window).width())? x-tipw-(stickytooltip.tooltipoffsets[0]*2) : x
			y=(y+tiph>$(document).scrollTop()+$(window).height())? $(document).scrollTop()+$(window).height()-tiph-10 : y
			$tooltip.css({left:x, top:y})
		},
		
		showbox:function($, $tooltip, e){
			$tooltip.fadeIn(this.fadeinspeed)
			this.positiontooltip($, $tooltip, e)
		},

		hidebox:function($, $tooltip){
			if (!this.isdocked){
				$tooltip.stop(false, true).hide()
				$tooltip.css({borderColor:'black'}).find('.stickystatus:eq(0)').css({background:this.stickybordercolors[0]}).html(this.stickynotice1)
			}
		},

		docktooltip:function($, $tooltip, e){
			this.isdocked=true
			$tooltip.css({borderColor:'darkred'}).find('.stickystatus:eq(0)').css({background:this.stickybordercolors[1]}).html(this.stickynotice2)
		},


		init:function(targetselector, tipid){		
			$jYtc(document).ready(function($){
				var $targets=$(targetselector)
				
				var $tooltip=$('#'+tipid).appendTo(document.body)
				if ($targets.length==0)
					return
				var $alltips=$tooltip.find('div.atip')
				if (!stickytooltip.rightclickstick)
					stickytooltip.stickynotice1[1]=''
				stickytooltip.stickynotice1=stickytooltip.stickynotice1.join(' ')
				stickytooltip.hidebox($, $tooltip)
				$targets.bind('mouseenter', function(e){
					$alltips.hide().filter('#'+$(this).attr('onclick')).show()
					stickytooltip.showbox($, $tooltip, e)
				})
				$targets.bind('mouseleave', function(e){
					stickytooltip.hidebox($, $tooltip)
				})
				$targets.bind('mousemove', function(e){
					if (!stickytooltip.isdocked){
						stickytooltip.positiontooltip($, $tooltip, e)
					}
				})
				$tooltip.bind("mouseenter", function(){
					stickytooltip.hidebox($, $tooltip)
				})
				$tooltip.bind("click", function(e){
					e.stopPropagation()
				})
				$(this).bind("click", function(e){
					if (e.button==0){
						stickytooltip.isdocked=false
						stickytooltip.hidebox($, $tooltip)
					}
				})
				$(this).bind("contextmenu", function(e){
					if (stickytooltip.rightclickstick && $(e.target).parents().andSelf().filter(targetselector).length==1){ //if oncontextmenu over a target element
						stickytooltip.docktooltip($, $tooltip, e)
						return false
					}
				})
				$(this).bind('keypress', function(e){
					var keyunicode=e.charCode || e.keyCode
					if (keyunicode==115){ //if "s" key was pressed
						stickytooltip.docktooltip($, $tooltip, e)
					}
				})
			}) //end dom ready
		}
	}
	stickytooltip.init(o.targetElementSelector, o.tooltipcontainer);
};
})($jYtc);



