(function ($) {

    $.fn.attachBubble = function()
    {
	var _tid;
	var _flag;
	var _text = "Loading...";
	var _markup = '\
	    <div class="dg_bubble"> \
	    <div class="relative"> \
  	      <div class="bubble_top"></div> \
	      <div class="bubble_center">Loading...</div> \
	      <div class="bubble_bottom"></div> \
	    </div> \
	    </div>';

	$(this).find('.remove_alt').removeAttr('title');

	return $(this).mouseenter(function () {
	    openBubble(this);
	}).mouseleave(function () {
	    closeBubble(this);
	});

	function openBubble(elem)
	{
	    $('.dg_bubble').remove();

	    _flag = 1;
	    _tid  = setTimeout(function ()
	    {
		_markup = '\
		    <div class="dg_bubble"> \
		    <div class="relative"> \
  	    	      <div class="bubble_top"></div> \
	    	      <div class="bubble_center">Loading...</div> \
	    	      <div class="bubble_bottom"></div> \
		    </div> \
		    </div>';

	    var _elem     = $(elem).find('.dg_tooltip_content');
	    var _ajaxpath = $(_elem).attr('rel');
	    var _obj      = elem;

	    if (!_flag) { closeBubble(elem); return; }
	    if (!_ajaxpath)
	    {
		_text = $(_elem).html();
		createTextBubble(elem);
		return 0;
	    }
		var arr;
		arr = ($(elem).parent().attr('type'))
		_ajaxpath = (arr == 'review') ? (_ajaxpath + '/review') : _ajaxpath;
		_ajaxpath = (arr == 'collectors') ? (_ajaxpath + '/collectors') : _ajaxpath;
		
    	    $.ajax(
    	    {
		type: 'POST',
    		url:  _ajaxpath,

    		success: function(_text)
		{
		    if (!_flag) { closeBubble(elem); return; }

		    var _popup = $(_markup.replace('Loading...', _text));

		    _popup.css('opacity', 0);
		    _popup.appendTo(_obj);

		    var coord  = new Array();
		    var offset = $(_obj).offset();

		    client_height
			   = document.compatMode == 'CSS1Compat' && !window.opera
			   ? document.documentElement.clientHeight
			   : document.body.clientHeight;

		    coord["top"]  = parseInt(offset.top) - 20;
		    coord["left"] = parseInt(offset.left) +
				    parseInt($(_obj).width()) - 60;

		    height   = $(_popup).height() - $(_popup).find('img').height() + 145;
		    scrl_top = self.pageYOffset ||
			    (document.documentElement &&
			     document.documentElement.scrollTop) ||
			    (document.body && document.body.scrollTop);

		    diff   = client_height - (coord["top"] - scrl_top) - height;

		    if (diff < 0)
		    {
			coord["top"] += diff;
			pos = Math.abs(diff);
			max_pos = height - 120;

			if (pos > max_pos) pos = max_pos;

			$('.bubble_center').css('background-position',
						'left ' + pos + 'px');
		    }

		    if (!_flag) { closeBubble(elem); return; }

		    _popup.css({
		        top:  coord["top"],
		        left: coord["left"],
		        display: 'block'
		    }).animate({
		        top: '+=10px',
		        opacity: 1
		    }, 250, 'swing');

		    return false;
		}
	    });
	}, 500);
    }

    function createTextBubble(_obj)
    {
	var _popup = $(_markup.replace('Loading...', _text));

	_popup.css('opacity', 0);
	_popup.appendTo(_obj);

	var coord  = new Array();
	//var offset = $(_obj).offset();
	var offset = $(_obj).position();

	client_height
	   = document.compatMode == 'CSS1Compat' && !window.opera
	   ? document.documentElement.clientHeight
	   : document.body.clientHeight;

	coord["top"]  = parseInt(offset.top) + 10;
	coord["left"] = parseInt(offset.left) + parseInt($(_obj).width()) - 20;

	height   = $(_popup).height();
	scrl_top = self.pageYOffset ||
	    (document.documentElement &&
	     document.documentElement.scrollTop) ||
	    (document.body && document.body.scrollTop);

	$('.dg_bubble').addClass('bubble_mini');

	if (!_flag) { closeBubble(_obj); return; }

	_popup.css({
	    top:  coord["top"],
	    left: coord["left"],
	    display: 'block'
	}).animate({
	    top: '+=10px',
	    opacity: 1
	}, 250, 'swing');

	return false;
    }

    function closeBubble(elem)
    {
	popup = $(elem).find('.dg_bubble');

	if (popup)
	{
	    popup.animate({
	        top: '-=10px',
	        opacity: 0
	    }, 250, 'swing', function () {
	        popup.remove();
	    });
	}

	clearTimeout(_tid)
	_flag = 0;

	return false;
    }
};
})(jQuery);


$(document).ready(function() {
    $('.dg_tooltip').each(function(){
	$(this).attachBubble();
    });
});

