  //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  // Event Registrations
  //


//ALTERNATE Event Registration and Removal   eg: Event.add(rows[i],'mouseover',function() { ZebraTable.mouseover(this); });
/*
var Event = {
  add: function(obj,type,fn) {
    if (obj.attachEvent) {
      obj['e'+type+fn] = fn;
      obj[type+fn] = function() { obj['e'+type+fn](window.event); }
      obj.attachEvent('on'+type,obj[type+fn]);
    } else
    obj.addEventListener(type,fn,false);
  },
  remove: function(obj,type,fn) {
    if (obj.detachEvent) {
      obj.detachEvent('on'+type,obj[type+fn]);
      obj[type+fn] = null;
    } else
    obj.removeEventListener(type,fn,false);
  }
}



   <script language="javascript" type="text/javascript">
    addEvent(window, 'load', productbodyflip('pb_body', 'pb_overview'), false);
  </script>


*/

  var EventCache = function() {
                     var listEvents = [];
                     return {
                       listEvents : listEvents,
                              add : function(node, sEventName, fHandler) {
                                      listEvents.push(arguments);
                                    },
                            flush : function() {
                                      var i, item;
                                      for(i = listEvents.length - 1; i >= 0; i = i - 1) {
                                        item = listEvents[i];
                                        if(item[0].removeEventListener)     { item[0].removeEventListener(item[1], item[2], item[3]); };
                                        if(item[1].substring(0, 2) != "on") { item[1] = "on" + item[1]; };
                                        if(item[0].detachEvent)             { item[0].detachEvent(item[1], item[2]); };
                                        item[0][item[1]] = null;
                                      };
                                    }
                     };
                   }();

  function addEvent(obj, type, fn, useCapture) {
    if (obj.addEventListener) {                             // check for addEventListener, Mozilla
      if (!useCapture) useCapture = false;               // default bubbling
      obj.addEventListener(type, fn, useCapture);
      EventCache.add(obj, type, fn);
    }
    else if (obj.attachEvent) {                            // Otherwise, check for IE, attachEvent
      obj["e" + type + fn] = fn;
      obj[type + fn] = function() { obj['e' + type + fn]( window.event); }
      obj.attachEvent('on' + type, obj[type + fn]);
      EventCache.add(obj, type, fn);
    }
    else {
      obj['on' + type] = obj['e' + type + fn];
    }
  }

  addEvent(window, 'unload', EventCache.flush);



  function quick_addEvent(target, tasktype, functionref){
    if (target.addEventListener)
      target.addEventListener(tasktype, functionref, false);
    else if (target.attachEvent)
      target.attachEvent('on'+tasktype, function(){ return functionref.call(target, window.event); } )
  }



  //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  // Event Helpers
  //
  function __StopEventPropagation(e)
  {
    if (!e) var e = window.event;
    e.cancelBubble = true;
    if (e.stopPropagation) e.stopPropagation();
  }



  //---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  // Mouse Events
  //
  //var EVENTS_WANT_MOUSEMOVE = false;
  //var EVENTS_WANT_MOUSEMOVE_ANCHORS = false;
  var mouseX;
  var mouseY;

  //function InitMouseMoveHandler() {
  //    addEvent(document, 'mousemove', handleMouseMove, false);
  //}

  function handleMouseMove(evt) {
    if(! evt) evt = window.event;
    mouseX = evt.clientX;
    mouseY = evt.clientY;
  }

