/*
 * Jaba common library for jQuery 0.5.1 : ToolTip
 * (based on Jtip)
 *
 * Copyright (c) 2007 Jaba Multimedia (www.jaba.com.au)
 * Built upon jQuery 1.1.3.1 (http://jquery.com)
 * 
 * [Expected HTML structure for this control]
    <script type="text/javascript">
        $(function(){
            $('tooltip').JabaToolTip({});
        });
    </script>
    
    
 *
 */
$(document).ready(function() {
  $(".tooltip").JabaToolTip({});
});

(function($){

    // main initializer
    $.fn.JabaToolTip = function(settings) {  
        var isMouseOverLink = null;
        var isMouseOverPanel = null;
        var m_config = {
			    emptycontent : false,
			    contenttarget : null,
                width : 185,
                eventhandler : null,
                timeout : 0,
                forcelinkdown : true
            };
            
        m_config = $.extend(m_config, settings); 
        
        function show_tooltip(obj, left, top) {
            $('#JT').remove();        
            var options = {};
            eval('options = ' + $(obj).attr("jconfig")); 
            options = $.extend($.extend({}, m_config), options); 
            var title = $(obj).attr("name");
	        var w = self.innerWidth || (document.documentElement && document.documentElement.clientWidth) || document.body.clientWidth;
	        var hasArea = w - getAbsoluteLeft(obj);
	        var clickElementy = getAbsoluteTop(obj) - 3; //set y position
            
			var divWaiting = "<div class='JT_loader'><div>";
			var divBody = "<div id='JT_copy'>" + divWaiting + "</div>";
			if (m_config.emptycontent)
				divBody = "";
	        if(hasArea>((options['width'])+75)){
		        $("body").append("<div id='JT' style='width:"+options['width']*1+"px'><div id='JT_arrow_left'></div><div id='JT_close_left'>"+title+"</div>" + divBody + "</div>");//right side
		        var arrowOffset = getElementWidth(obj) + 11;
		        var clickElementx = getAbsoluteLeft(obj) + arrowOffset; //set x position
	        }else{
		        $("body").append("<div id='JT' style='width:"+options['width']*1+"px'><div id='JT_arrow_right' style='left:"+((options['width']*1)+1)+"px'></div><div id='JT_close_right'>"+title+"</div>" + divBody + "</div>");//left side
		        var clickElementx = getAbsoluteLeft(obj) - ((options['width']*1) + 15); //set x position
	        }
	        
	        if (obj.tagName.toLowerCase() == 'area' && left != -999 && top != -999)
	        {
	            clickElementx = left + 20;
	            clickElementy = top - 5;
	        }
	        
        	$('#JT').css("left", clickElementx+"px");
	        $('#JT').css({left: clickElementx+"px", top: clickElementy+"px"});
	        $('#JT').hover(
	            function() {
	                isMouseOverPanel = this;
	            },
	            function() {
	                isMouseOverPanel = null;
                    setTimeout(function() {
                        if (isMouseOverLink == null && isMouseOverPanel == null)
                            $('#JT').remove();
                        }, m_config.timeout);
	            });
	        $('#JT').show();
			if (m_config.emptycontent)
			{
			}
			else if (options.contenttarget != null)
			{
				$('#JT_copy').html($('#' + options.contenttarget).html());
				setTimeout(afterLoading, 0);
			}
			else
			{
			    var link = obj.href.toLowerCase();
			    if (link.indexOf(".jpg") > 0 ||
			        link.indexOf(".gif") > 0 ||
			        link.indexOf(".png") > 0 ||
			        link.indexOf(".tiff") > 0
			        ) {
			        $('#JT_copy').html("<img src='" + obj.href + "'/>");
			        window.setTimeout(function() {
			                afterLoading();
			            }, 0);
			    }
			    else {    
				$('#JT_copy').load(obj.href, afterLoading);
				}
		    }
        }
        
        function afterLoading() {
            $("#JT").bgiframe({});
        }
        
        function hide_tooltip() {
            $('#JT').remove();
        }
        
        function getElementWidth(obj) {
	        return obj.offsetWidth;
        }

        function getAbsoluteLeft(obj) {
	        o = obj;
	        oLeft = o.offsetLeft;
	        while(o.offsetParent!=null) {
		        oParent = o.offsetParent;
		        oLeft += oParent.offsetLeft;
		        o = oParent;
	        }
	        return oLeft;
        }

        function getAbsoluteTop(obj) {
	        o = obj;
	        oTop = o.offsetTop;
	        while(o.offsetParent!=null) {
		        oParent = o.offsetParent;
		        oTop += oParent.offsetTop;
		        o = oParent;
	        }
	        return oTop;
        }
            
	    return this.each(function(){
            // main logic
            $(this).hover(
                function(e) {
                    if (isMouseOverLink == this) return;
                    isMouseOverLink = this;
                    if (m_config.eventhandler != null) m_config.eventhandler({target:this, command:'show'});
                    show_tooltip(this, e.pageX, e.pageY);
                }, 
                function(e) {
                    isMouseOverLink = null;
                    if (m_config.eventhandler != null) m_config.eventhandler({target:this, command:'hide'});
                    setTimeout(function() {
                        if (isMouseOverLink == null && isMouseOverPanel == null)
                            hide_tooltip();
                        }, m_config.timeout);
                });
                
            $(this).click(function() {if (m_config.forcelinkdown) return false; });

			this.TriggerEvent = function(command) {
			    switch(command) {
			        case "show" : 
                        if (m_config.eventhandler != null) m_config.eventhandler({target:this, command:'show'});
				        show_tooltip(this, -999 , -999); break;
				    case "hide" :
                        if (m_config.eventhandler != null) m_config.eventhandler({target:this, command:'hide'});
				        hide_tooltip(); break;
				}
			}
            
	    });

    }
   
    
})(jQuery);

