/**
 * Custom hover function.  Adds/removes the "hover" class
 * from the class attribute of the primary target.
 *  
 * @param e : Event
 * @param o : Element
 * @return boolean
 */
function hoverFunc(e, o)
{
  var jsx_object = jsx.object;
  var jsx_dom = jsx.dom;
  
  if (e && o)
  {
    var
      relatedTarget = jsx_object.getProperty(e, "relatedTarget", null),
      currentTarget = jsx_object.getProperty(e, "currentTarget", null);

    if (!relatedTarget || !currentTarget)
    {
      var
        srcElement = jsx_object.getProperty(e, "srcElement", null),
        fromElement = jsx_object.getProperty(e, "fromElement", null),
        toElement = jsx_object.getProperty(e, "toElement", null);
    
//      if (jsx_object.isMethod(jsx.global.console, "log"))
//      {
//        console.log("type=" + e.type,
//          " srcElement=",  jsx_object.getProperty(srcElement  || {}, "tagName", null),
//          " fromElement=", jsx_object.getProperty(fromElement || {}, "tagName", null),
//          " toElement=",   jsx_object.getProperty(toElement   || {}, "tagName", null));
//      }
      
      if (srcElement != o || fromElement == null || toElement == null)
      {
        return false;
      }
      
      if (e.type == "mouseover")
      {
        if (toElement != o
            || !jsx_dom.isAncestor(fromElement, toElement))
        {
          return false;
        }
      }
      else if (e.type == "mouseout")
      {
        if (fromElement != o
            || !jsx_dom.isAncestor(toElement, fromElement))
        {
          return false;
        }
      }
    }
                 
    if (e.type == "mouseover")
    {
      /* TODO: Does this even make sense? */
//      var me = arguments.callee;
//      if (typeof me.lastHover != "undefined" && me.lastHover != o)
//      {
//        /* 
//         * For quick pointer movements:
//         * Leave only one element in hover-on state
//         */
//        me({type: "mouseout", currentTarget: o}, me.lastHover);
//      }
//      
//      hoverFunc.lastHover = o;

       jsx_dom.addClassName(o, "hover");
    }
    else if (e.type == "mouseout")
    {
      jsx_dom.removeClassName(o, "hover");
    }
  }
  
  return true;
}
hoverFunc.delay = 50;
