;
(function ($) { // $ will refer to jQuery within this closure
	$.fn.tooltip = function (options) 
	{
		var o = $.extend({}, $.fn.tooltip.defaults, options);
		
        return this.each(function()
        	{ //returns the element chain
            this.onmousemove = function(ev)
            {
                var e = (ev) ? ev : window.event;
                var that = this;
                var title; 
                var timeout; 
                var timeout2; 
                var iId; 
                var over = {}; 
                var firstMove = true; 
                var hovered = false; 
                var maxed = false; 
                var tooltip = document.createElement('div'); 
                var ie6 = (typeof document.body.style.maxWidth == "undefined") ? true : false; 
                var talk = (typeof $.talk == "function" && typeof $.listen == "function") ? true : false;
                var over = this; //tracks the event trigger in the plugin-global "over"
                if (true) {
                    var scrollY = $(window).scrollTop(); 
                    var scrollX = $(window).scrollLeft(); 
                    var top = e.clientY + scrollY + o.offsetY; 
                    var left = e.clientX + scrollX + o.offsetX; 
                    var outerH = $(o.appendTip).outerHeight(); 
                    var innerH = $(o.appendTip).innerHeight(); 
                    var maxLeft = $(window).width() + scrollX - $(tooltip).outerWidth(); 
                    var maxTop = $(window).height() + scrollY - $(tooltip).outerHeight();
                    
                    top = (outerH > innerH) ? top - (outerH - innerH) : top; //if appended area (usually BODY) has a border on top, adjust
                    maxed = (top > maxTop || left > maxLeft) ? true : false;
                    
                    console.log(top);
                    
                    if (left - scrollX <= 0 && o.offsetX < 0) 
                        left = scrollX;
                    else 
                        if (left > maxLeft) 
                            left = maxLeft;
                    if (top - scrollY <= 0 && o.offsetY < 0) 
                        top = scrollY;
                    else 
                        if (top > maxTop) 
                            top = maxTop;
                    
                    tooltip.style.top = top + "px";
                    tooltip.style.left = left + "px";
                    //firstMove = false;
                }
            }
            
            this.onmouseout = function()
            {
                clearTimeout(timeout);
                var that = this;                
                if (!o.follow || maxed || (o.offsetX < 0 && o.offsetY < 0)) {
                    setTimeout(function(){
                        iId = setInterval(function(){
                            offConditions(that)
                        }, 1)
                    }, 1);
                }
                else {
                    offConditions(this);
                }
            }            
            if (typeof o.clickAction == "function") 
            {
                this.onclick = function(){
                    o.clickAction(tooltip, this);
                }
            }            	
         })	
	};
	

	// expose defaults
	$.fn.tooltip.defaults = {
		id: 0,
		minWidth: 9,
		// requires em unit.
		maxWidth: 25,
		// requires em unit.
		extraWidth: 0 // extra width can ensure lines don't sometimes turn over due to slight browser differences in how they round-off values
	};

})(jQuery); // plugin code ends
