var TIP_WIDTH = 180;
var XOFFSET = 20;
var YOFFSET = -45;
var YOFFSETRIGHT = 30;
var FADEIN_DELAY = 300;
var FADEOUT_DELAY = 300;

var rolledIn = false;

var activeTip = "";
var timer;
var storedTips = new Object;


jQuery(document).ready(JT_init);

function JT_init()
{    
    jQuery("body").append("<div id='JT'><div id='tiptop'></div><div id='tipmid'></div><div id='tipbot'></div></div>");//right side
    jQuery('#JT').css({left: -1000+"px", top: -1000+"px"});

   jQuery("a.jTip")
   .hover(
        function()
        {
            //console.log("rolled in link");
            clearTimeout(timer);
            rolledIn = true;
            
            if(activeTip == this.href)
                return;
            activeTip = this.href;
            
            jQuery('#JT').css({left: -1000+"px", top: -1000+"px"});            
            JT_show(this.href,this.id,this.id);
            
            
        },
        function()
        {
            //console.log("rolled out link");
            timer = setTimeout("hideToolTip()",FADEOUT_DELAY);           
        })
   .click(function(){return false});
   
   jQuery("#JT")
   .hover(
        function()
        {
            rolledIn = true;
            //console.log("rolled in jtip");
            clearTimeout(timer);
        },
        function()
        {
            rolledIn = false;
            //console.log("rolled out jtip");
            timer = setTimeout("hideToolTip()",FADEOUT_DELAY); 
           
        });
   	   
 jQuery("#tipmid").ajaxComplete(function(event, request, settings)
 {
    //console.log("ajaxComplete");
    
    if(activeTip)
    {
        storedTips[activeTip] = jQuery("#tipmid").html();
        //console.log('storedTips['+activeTip+'] = '+storedTips[activeTip]);
    }
 });

}

function hideToolTip()
{
    //console.log("hideToolTip()");
    rolledIn = false;
    activeTip = "";
    
    if(jQuery.browser.msie)
    {
        jQuery('#JT').hide();
    }            
    else
    {
        jQuery('#JT').fadeOut("fast",function callback() 
        {
            if(!rolledIn)
                jQuery('#JT').css({left: -1000+"px", top: -1000+"px"});
        });
    }
}


function JT_show(url,linkId,title)
{
	if(title == false)
	    title = "TATRC";
	var de = document.documentElement;
	var w = self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
	var hasArea = w - getAbsoluteLeft(linkId);
	
	
	var queryString = url;
	var params = parseQuery( queryString );
	if(params['width'] === undefined)
	{
	    params['width'] = TIP_WIDTH;
	};
	if(params['link'] !== undefined)
	{
	    jQuery('#' + linkId).bind('click',function(){window.location = params['link']});
	    jQuery('#' + linkId).css('cursor','pointer');
	}
	
	jQuery('#tiptop').html(fix(title));
		
	var clickElementx = getAbsoluteLeft(linkId) + XOFFSET;
	var clickElementy = getAbsoluteTop(linkId) + getElementHeight(linkId) + YOFFSET;
	
	var onRight = hasArea <= ((params['width']*1)+75);
	if(onRight)
	{
	    jQuery('#tiptop').addClass('right');
	    clickElementx -= ((params['width']*1) - YOFFSETRIGHT);
	}
	else
	{
	    jQuery('#tiptop').removeClass('right');
	}   

	jQuery('#JT').css({left: clickElementx+"px", top: clickElementy+"px"});
	
	
	
	if(jQuery.browser.msie)
    {
        jQuery('#JT').show();
    }            
    else
    {
	    jQuery('#JT').fadeIn("normal");
	}

	if(storedTips[activeTip] != null)
	   jQuery('#tipmid').html(storedTips[url]);
	else
    	jQuery('#tipmid').load(url);
}

function fix(str)
{
    str = str.replace(/_/g, " ");
    str = str.replace(/QQ/g, "?");
    return "TATRC "+str;
}

function getElementWidth(objectId) {
	x = document.getElementById(objectId);
	return x.offsetWidth;
}
function getElementHeight(objectId) {
	x = document.getElementById(objectId);
	return x.offsetHeight;
}

function getAbsoluteLeft(objectId) {
	// Get an object left position from the upper left viewport corner
	o = document.getElementById(objectId)
	oLeft = o.offsetLeft            // Get left position from the parent object
	while(o.offsetParent!=null) {   // Parse the parent hierarchy up to the document element
		oParent = o.offsetParent    // Get parent object reference
		oLeft += oParent.offsetLeft // Add parent left position
		o = oParent
	}
	return oLeft
}

function getAbsoluteTop(objectId) {
	// Get an object top position from the upper left viewport corner
	o = document.getElementById(objectId)
	oTop = o.offsetTop            // Get top position from the parent object
	while(o.offsetParent!=null) { // Parse the parent hierarchy up to the document element
		oParent = o.offsetParent  // Get parent object reference
		oTop += oParent.offsetTop // Add parent top position
		o = oParent
	}
	return oTop
}

function parseQuery ( query ) {
   var Params = new Object ();
   if ( ! query ) return Params; // return empty object
   var Pairs = query.split(/[;&]/);
   for ( var i = 0; i < Pairs.length; i++ ) {
      var KeyVal = Pairs[i].split('=');
      if ( ! KeyVal || KeyVal.length != 2 ) continue;
      var key = unescape( KeyVal[0] );
      var val = unescape( KeyVal[1] );
      val = val.replace(/\+/g, ' ');
      Params[key] = val;
   }
   return Params;
}

function blockEvents(evt) {
              if(evt.target){
              evt.preventDefault();
              }else{
              evt.returnValue = false;
              }
}
