//
// Event Messager Class
//
///////////////////////////////
//
// Author: Aaron
// Date: Oct. 16/07
//

/**
  * Constructor for a EventMessager object.
  * Enables a popup menu to display text when
  * you hover over an HMTL entity.
  *
  */

function EventMessager(id, a) {
  this.id = id;
  this.a = a;
  this.year = 0;
  this.month = 0;
  this.defmsg = "";
  this.addMessage = addMessage;
  this.inmouse = inmouse;
  this.clickmouse = clickmouse;
  this.outmouse = outmouse;
  this.msgs = new Array();
  this.addWheel = addWheel;
  this.confWheel = confWheel;
  this.xmlAction = xmlAction;
}

function addWheel(id) {
  if(window.opera) {
    if(!event)
      event = window.event;
  }
  if(window.addEventListener)
    $(id).addEventListener('DOMMouseScroll', wheel, false);
  $(id).onmousewheel = wheel;
  mythis = this;
  function wheel(event) {
    if(!event)
      event = window.event;
    if(event.wheelDelta) {
      delta = event.wheelDelta/120;
      if(window.opera)
        delta = -delta;
    } else if(event.detail) {
      delta = -event.detail/3;
    }
    var ref = "http://www.heartlight.ca/calendar/xml";
    ref = ref + "?year=" + mythis.year + "&month=" + (parseInt(mythis.month) - delta);
    makeRequest(ref, "", mythis);
  }
}

function confWheel(month, year) {
  this.year = year;
  this.month = month;
}

function xmlAction(data) {
  // reset this var better
  // trace it and remove mouse events
  for(var i in this.msgs) {
    $(i).onmouseover = "";
    $(i).onmouseout = "";
  }
  $(this.id).innerHTML = "";
//  $S(this.id).display = "block";
  this.msgs = new Array ();
  this.confWheel(data["month"], data["year"]);
  $("verb").innerHTML = data["monthtext"] + " " + data["year"];
  for(var i = 1; i < 7; i++) {
    var x = $("vet").rows[i].cells;
    for(var j = 0; j < 7; j++) {
      var z = ((i - 1) * 7) + j - data["firstday"] + 1;
      if((i == 1 && j < data["firstday"]) || z > data["numdays"]  ) {
        x[j].innerHTML = "<br>";
        x[j].className = "outcal";
        x[j].id = "";
       } else {
        x[j].innerHTML = z;
        x[j].id = "incal" + z;
        x[j].className = "incal";
      }
    }
  }
  for(var i = 1; data["events"]["event"+i]; i++) {
    var base = data["events"]["event"+i];
    var id = "incal" + base["day"];
    var str = "<a href=\"/calendar/print?year=" + data["year"];
    str += "&month=" + data["month"];
    str += "&day=" + base["day"] + "\">";
    str += base["day"] + "</a>";
    $(id).innerHTML = str;
    this.addMessage(id, base["text"]);
  }
}

function addMessage(id, msg) {
  // Set action triggers
  var mythis = this;
  $(id).onmouseover =
    function() {
      mythis.inmouse(id);
    }
  $(id).onmousedown =
    function() {
      mythis.clickmouse(id);
    }
  $(id).onmouseout =
    function() {
      mythis.outmouse(id);
    }

  // Add the message to that id
  if(this.msgs[id]) {
    var ind = this.msgs[id].length;
    this.msgs[id][ind] = msg;
  } else {
    this.msgs[id] = new Array ();
    this.msgs[id][0] = msg;
  }
}

function inmouse(id) {
  // Set the display box
  if(!this.msgs[id]) {
    return;
  }
  var myhtml = "<div class=\"event\">";
  myhtml += this.msgs[id].join("</div><div class=\"event\">");
  myhtml += "</div>";
  $(this.id).innerHTML = myhtml;
//  $S(this.id).display = "block";

  // Add listener for right or left click
  function click(e) {
    if(navigator.appName == 'Netscape' && e.which == 3) {
      alert("no right click please")
      return false;
    } else {
      if(navigator.appName == 'Microsoft Internet Explorer' &&
         event.button==2) {
        alert("no right click please")
        return false;
      }
    }
  }
  if(this.a == 0) {
//    $(id).onmousedown = click;
  }

  // Add listener for mouse motion
  var myid = $S(this.id);
//  document.onmousemove = drag;
  // What is zindex?
//  myid.zIndex = 20;
//  var offsetx = 20;
//  var offsety = 1;

  function drag(e) {
    if(browser("msie") > 0) {
    // Can't seem to adjust for scroll position in IE
//      myid.left = (event.clientX + mybody.scrollLeft + offsetx) + "px";
//      myid.top = (event.clientY + mybody.scrollTop + offsety) + "px";
      myid.left = (event.clientX + offsetx) + "px";
      myid.top = (event.clientY + offsety) + "px";
//      myide.innerHTML = myid.left + "," + myid.top;
    } else {
      myid.left = (e.pageX + offsetx) + "px";
      myid.top = (e.pageY + offsety) + "px";
    }
  }
}

function clickmouse(id) {
  this.defmsg = $(this.id).innerHTML;
}

function outmouse(id) {
  // Remove listener for mouse motion
//  document.onmousemove = "";
//  $(id).onmousedown = "";

  // Unset the display box
  if(this.msgs[id]) {
    $(this.id).innerHTML = this.defmsg;
//    $S(this.id).display = "none";
  }
}

