/**
 *  jQuery Tooltip Plugin
 *@requires jQuery v1.2.6
 *  http://www.socialembedded.com/labs
 *
 *  Copyright (c)  Hernan Amiune (hernan.amiune.com)
 *  Dual licensed under the MIT and GPL licenses:
 *  http://www.opensource.org/licenses/mit-license.php
 *  http://www.gnu.org/licenses/gpl.html
 * 
 *  Version: 1.0
 */
 
(function($){ $.fn.tooltip = function(options){

    var defaults = {
        cssClass: "",     //CSS class or classes to style the tooltip
		delay : 0,        //The number of milliseconds before displaying the tooltip
        duration : 1000,   //The number of milliseconds after moving the mouse cusor before removing the tooltip.
        xOffset : 15,     //X offset will allow the tooltip to appear offset by x pixels.
        yOffset : 15,     //Y offset will allow the tooltip to appear offset by y pixels.
		opacity : 0,      //0 is completely opaque and 100 completely transparent
		fadeDuration: 1000 //[toxi20090112] added fade duration in millis (default = "normal")
	};
  
    var options = $.extend(defaults, options);
	
	
	return this.each(function(index) {
		
		var $this = $(this);

		//use just one div for all tooltips
		// [toxi20090112] allow the tooltip div to be already present (would break currently)
		$tooltip=$("#divTooltip");
		if($tooltip.length == 0){
			$tooltip = $('<div id="divTooltip"></div>');			
			$('body').append($tooltip);
			$tooltip.hide();
		}
		
		//displays the tooltip
		$this.get(0).onmouseover=function(e){
			//compatibility issue
			//console.debug("element mouseover");
			tooltipShow(e);
		}
		
		$tooltip.get(0).onmouseover=function(e){
		   //console.debug("tooltip_mousemove");
           	if(window.hideTimeoutId)
		   {
		        clearTimeout(window.hideTimeoutId);
		        //alert(window.hideTimeoutId);
		   } 
		   $tooltip.show();
		   //$this.unbind("mouseout");

		}
		
		$tooltip.get(0).onmouseout=function(e){
		   //console.debug("tooltip_mouseout");
		   
		     tooltipHide(e)
		   }
		   
		$this.get(0).onmouseout=function(e){
		   // console.debug("element mouseout");
            tooltipHide(e);
            
           
            
		}
		
		$this.click(function(e){
		    e.preventDefault();
		});
		function tooltipShow(e)
		{
			e = e ? e : window.event;
			//don't hide the tooltip if the mouse is over the element again
		    if(window.hideTimeoutId)
		   {
		        clearTimeout(window.hideTimeoutId);
		        //alert(window.hideTimeoutId);
		   }
			//set the tooltip class
			$tooltip.removeClass($tooltip.attr("class"));
			$tooltip.css("width","");
			$tooltip.css("height","");
			$tooltip.addClass(options.cssClass);
			$tooltip.css("opacity",1-options.opacity/100);
			$tooltip.css("position","absolute");			
			
			//save the title text and remove it from title to avoid showing the default tooltip
			$tooltip.data("title",$this.attr("title"));
			$this.attr("title","");
			$tooltip.data("alt",$this.attr("alt"));
			$this.attr("alt","");
			
			//set the tooltip content
			$tooltip.html($tooltip.data("title"));
			// [toxi20090112] only use ajax if there actually is an href attrib present
			var href=$this.attr("href");
			// [Peter] href!="" added
			if(href!=undefined && href!="" && href != "#")
			{
			    var tmpData=$this.attr("data");
			    if(tmpData!=undefined && tmpData!="")
			    {
			        $tooltip.html(tmpData);
			    }
			    else
			    {
			        $tooltip.html("正在加载...");
			        $.ajax({
			                url:$this.attr("href"),
			                success:function(html){
			                    $("#divTooltip").html(html);
			                },
			                error:function(o){
			                    $("#divTooltip").html("获取远程页面出错");
			                }

			            })
			   }
			}
			//set the tooltip position
			winw = $(window).width();
			w = $tooltip.width();
			xOffset = options.xOffset;
			
			//right priority
			var pos=getPos();
			if(w+xOffset+50 < winw-e.clientX)
			  $tooltip.css("left", pos.scrollLeft + e.clientX+xOffset);
			else if(w+xOffset+50 < e.clientX)
			  $tooltip.css("left", pos.scrollLeft + e.clientX-(w+xOffset));
			else{
			  //there is more space at left, fit the tooltip there
			  if(e.clientX > winw/2){
				$tooltip.width(e.clientX-50);
				$tooltip.css("left", pos.scrollLeft + 25);
			  }
			  //there is more space at right, fit the tooltip there
			  else{
				$tooltip.width((winw-e.clientX)-50);
				$tooltip.css("left", pos.scrollLeft + e.clientX+xOffset);
			  }
			}
			
			winh = $(window).height();
			h = $tooltip.height();
			yOffset = options.yOffset;
			//top position priority
			if(h+yOffset + 50 < e.clientY)
			  $tooltip.css("top", pos.scrollTop + e.clientY-(h+yOffset));
			else if(h+yOffset + 50 < winh-e.clientY)
			  $tooltip.css("top", pos.scrollTop + e.clientY+yOffset);
			else 
			  $tooltip.css("top", pos.scrollTop + 10);
			
			//start the timer to show the tooltip
			//[toxi20090112] modified to make use of fadeDuration option
			//$tooltip.data("showTimeoutId", setTimeout("$tooltip.fadeIn("+options.fadeDuration+")",options.delay));
			$tooltip.show();

		}
		function tooltipHide(e)
		{
			//restore the title
			$this.attr("title",$tooltip.data("title"));
			$this.attr("alt",$tooltip.data("alt"));
			//don't show the tooltip if the mouse left the element before the delay time
			//clearTimeout($tooltip.data("showTimeoutId"));
			//start the timer to hide the tooltip
			//[toxi20090112] modified to make use of fadeDuration option
			//$tooltip.unbind("mouseover");
			//$tooltip.unbind("mouseout");
			//$tooltip.data("hideTimeoutId", setTimeout("$tooltip.fadeOut("+options.fadeDuration+")",options.duration));
		    //$tooltip.data("hideTimeoutId",);
		    if(window.hideTimeoutId!=undefined || window.hideTimeoutId!=null)
		    {
		        clearTimeout(window.hideTimeoutId);
		     }
		         window.hideTimeoutId= setTimeout(function(){
                                                    //alert('element mouseout');"
                                                    if($tooltip.css("display")!="none")
                                                        $tooltip.hide();
                                                    }
                                                    ,500);
             
		    //$tooltip.hide();
		   // console.debug("hide");
		}

	});

}})(jQuery);

function getPos(){
   var  domBody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body
     
	    return {
	        scrollLeft:(document.all && !window.opera)?domBody.scrollLeft:window.pageXOffset,
	        scrollTop:(document.all && !window.opera)?domBody.scrollTop:window.pageYOffset 
	        };
   
}