//
// darkdata
//

var o_darkhelp = {
"02":{
       "title":"Total eurohours",
       "explanation":"Eur-hr takes into account the notional size of the order in Euros multiplied by the amount of time in seconds the order rests in the book over one hour."
    },
"03":{
       "title":"Total value of dark order rested",
       "explanation":"Total &euro; value of resting orders posted in the dark for any length of time<br/>"
    },
"04":{
       "title":"Price improvement in dark",
       "explanation":"Calculated vs EBBO<br/>"
     }
};


$(document).ready(_init_darkfloaters);

var i_dark_floater_fade_speed = 800;

var c_dark_floater_timeout    = 5000;
var i_dark_floater_timeout    = -1;

var b_fading                  = 0;

function _show_darkfloater(e)
{
  var s_target_id      = $(e.target).attr("id");
  var dark_explanation = _get_dark_explanation($(e.target).attr("id"));

  if (!b_fading
      &&
      dark_explanation)
  {
    if (i_dark_floater_timeout > -1)
    {
      clearTimeout(i_dark_floater_timeout);
    }

    $("span#dark_explanation_title").html(dark_explanation.title);
    $("span#dark_explanation_text").html(dark_explanation.explanation);

    b_fading = 1;
    $("div.dark_explanation").fadeIn(i_dark_floater_fade_speed,
                                     function()
                                     {
                                       b_fading      = 0;
                                       if (i_dark_floater_timeout > -1)
                                       {
                                         clearTimeout(i_dark_floater_timeout);
                                       }
                                         i_dark_floater_timeout = setTimeout("_cooked_hide_darkfloater()", c_dark_floater_timeout);
                                     });
  }

  e.stopPropagation();
  e.preventDefault();
  return false;
}


function _get_dark_explanation(s_target_id)
{
  var a_floatmatcher = s_target_id.match(/dark_[lr]_table([0-9]*)/);

  if (a_floatmatcher)
  {
    return o_darkhelp[a_floatmatcher[1]];
  }

  return false;
}


function _hide_darkfloater(e)
{
  if (!b_fading
      &&
      $("div.dark_explanation").css("display") != "none")
  {
    if (!e)
    {
      e = window.event;
    }

    var e_reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;


    // do not hide if mouse movement was inside floater
    if (e_reltg==undefined
        ||
        (e_reltg.className != "dark_explanation"
         &&
         e_reltg.className != "dark_inner_explanation"
         &&
         e_reltg.className != "darkleft"
         &&
         e_reltg.className != "darkright"))
    {
      b_fading = 1;
      _cooked_hide_darkfloater();
    }
  }

  e.stopPropagation();
  e.preventDefault();
  return false;
}


function _cooked_hide_darkfloater()
{
  $("div.dark_explanation").fadeOut(i_dark_floater_fade_speed,
                                    function(){ b_fading = 0 });
}


function _float_darkfloater(e)
{
  var s_container = "div.darksnapshot";
  var s_floatarea = s_container;
  var s_floater   = "div.dark_explanation";

  // y geometry
  var i_y_margin         = $(s_floater).height() + 10;
  var i_floatarea_height = $(s_floatarea).height();
  var i_floatarea_top    = $(s_floatarea).position().top;
  var i_floatarea_bottom = i_floatarea_top + i_floatarea_height;

  // x geometry
  var i_x_margin         = 5;
  var i_container_width  = $(s_container).width();
  var i_floater_width    = $(s_floater).width();
  var i_container_left   = $(s_container).position().left;
  var i_container_right  = i_container_left + i_container_width;

  var i_floater_max_left = i_container_left + i_container_width - i_floater_width;

  if (!e)
  {
    e = window.event;
  }

  if (e.pageX < i_container_left
      ||
      e.pageX > i_container_right
      ||
      e.pageY < i_floatarea_top
      ||
      e.pageY > i_floatarea_bottom)
  {
    e.stopPropagation();
    e.preventDefault();
    return _hide_darkfloater(e);
  }
  else
  {
    if (e.pageX > i_floater_max_left)
    {
      $(s_floater).css("left", i_floater_max_left);
    }
    else
    {
      $(s_floater).css("left", +e.pageX - i_x_margin);
    }
    $(s_floater).css("top",  +e.pageY - i_y_margin);

    if ($(e.target).hasClass("darkexspan")
        &&
        $(s_floater).css("display") == "none")
    {
      _show_darkfloater(e);
    }
  }

  e.stopPropagation();
  e.preventDefault();
  return false;
}


function _init_darkfloaters()
{
  $("table#darktable span.darkexspan").bind("mouseenter", _show_darkfloater)
                                      .bind("mouseout",   _hide_darkfloater);

  $(document).bind("mousemove", _float_darkfloater);
}

// eof darkdata
