/*
 +-------------------------------------------------------------------+
 |                      J S - M E M O   (v1.8)                       |
 |                                                                   |
 | Copyright Gerd Tentler               www.gerd-tentler.de/tools    |
 | Created: Jan. 26, 2002               Last modified: Feb. 10, 2007 |
 +-------------------------------------------------------------------+
 | This program may be used and hosted free of charge by anyone for  |
 | personal purpose as long as this copyright notice remains intact. |
 |                                                                   |
 | Obtain permission before selling the code for this program or     |
 | hosting this software on a commercial website or redistributing   |
 | this software over the Internet or in any other medium. In all    |
 | cases copyright must remain intact.                               |
 +-------------------------------------------------------------------+

======================================================================================================

 This script was tested with the following systems and browsers:

 - Windows XP: IE 6, NN 7, Opera 7 + 9, Firefox 2
 - Mac OS X:   IE 5, Safari 1

 If you use another browser or system, this script may not work for you - sorry.

------------------------------------------------------------------------------------------------------

 The memo function takes three arguments:

 1. The content of your memo-box, e.g. 'Just a test'
 2. The width of your memo-box in pixels, e.g. 150 (optional)
 3. The title of your memo-box, e.g. 'Info' (optional)

 EXAMPLE:

 <a href="javascript:memo('Just a test', 150, 'Info')">some text here</a>

======================================================================================================
*/
// -------------------------------------------------------------------------------------------------------
// Configuration
// -------------------------------------------------------------------------------------------------------

var titleFont = "Arial, Helvetica, sans-serif";  // title font family
var titleSize = 14;                         // title font size (pixels)
var titleColor = "#B7B7B7";                 // title color
var textFont = "Arial, Helvetica, sans-serif";   // text font family
var textSize = 13;                          // text font size (pixels)
var textColor = "white";                  // text color
var bgColor = "#6f1a2a";                    // background color
var borderColor = "#black";                // border color
var btnRaisedColor = "#7F150F";             // raised button color
var btnPressedColor = "#F00000";            // pressed button color
var fadeSpeed = 15;                         // fade speed (0 - 30; 0 = no fading)*

// * Fading was successfully tested only on Windows XP with IE 6, NN 7 and Firefox 1. It seems that
//   other browsers and systems do not support this feature.

// -------------------------------------------------------------------------------------------------------
// Get browser information
// -------------------------------------------------------------------------------------------------------

var OP = (navigator.userAgent.indexOf('Opera') != -1) ? true : false;
var IE = (navigator.userAgent.indexOf('MSIE') != -1 && !OP) ? true : false;
var GK = (navigator.userAgent.indexOf('Gecko') != -1) ? true : false;
var NN4 = document.layers;
var DOM = document.getElementById;

// -------------------------------------------------------------------------------------------------------
// Set styles
// -------------------------------------------------------------------------------------------------------

document.write('<style> .cssMemoText { ' +
               'font-family: ' + textFont + '; ' +
               'font-size: ' + textSize + 'px; ' +
               'color: ' + textColor + '; ' +
               '} .cssMemoTitle { ' +
               'font-family: ' + titleFont + '; ' +
               'font-size: ' + titleSize + 'px; ' +
               'font-weight: bold; ' +
               'color: ' + titleColor + '; ' +
               'padding: 2px; ' +
               'padding-left: 4px; ' +
               '} .cssMemoBtnRaised { ' +
               'font-family: Arial, Helvetica, sans-serif; ' +
               'font-size: ' + titleSize + 'px; ' +
               'font-weight: bold; ' +
               'color: #FFFFFF; ' +
               'background-color: ' + btnRaisedColor + '; ' +
               'border: 1px outset #FFFFFF; ' +
               'cursor: default; ' +
               'width: 16px; ' +
               'height: 16px; ' +
               'padding: 2px; ' +
               'text-align: center; ' +
               '} .cssMemoBtnPressed { ' +
               'font-family: Arial, Helvetica, sans-serif; ' +
               'font-size: ' + titleSize + 'px; ' +
               'font-weight: bold; ' +
               'color: #FFFFFF; ' +
               'background-color: ' + btnPressedColor + '; ' +
               'border: 1px inset #FFFFFF; ' +
               'cursor: default; ' +
               'width: 16px; ' +
               'height: 16px; ' +
               'padding-left: 3px; ' +
               'padding-top: 3px; ' +
               'padding-bottom: 1px; ' +
               'padding-right: 1px; ' +
               'text-align: center; ' +
               '} </style>');

// -------------------------------------------------------------------------------------------------------
// Set memo-box layer
// -------------------------------------------------------------------------------------------------------

document.write('<div id="divMemo" style="position:absolute; z-index:69; visibility:hidden"></div>');

if(DOM) {
  var obj = document.getElementById('divMemo');
  var sobj = obj.style;
}
else if(IE) {
  var obj = document.all.divMemo;
  var sobj = obj.style;
}
else if(NN4) {
  var obj = document.divMemo;
  var sobj = obj;
}

// -------------------------------------------------------------------------------------------------------
// Get mouse position, window height and scroll top
// -------------------------------------------------------------------------------------------------------

var mouseX = mouseY = winY = scrTop = 0;

if(NN4) document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = getMouseXY;

function getScrollLeft() {
  var scrLeft = 0;
  if(document.documentElement && document.documentElement.scrollLeft)
    scrLeft = document.documentElement.scrollLeft;
  else if(document.body && document.body.scrollLeft)
    scrLeft = document.body.scrollLeft;
  else if(window.pageXOffset) scrLeft = window.pageXOffset;
  return scrLeft;
}

function getScrollTop() {
  var scrTop = 0;
  if(document.documentElement && document.documentElement.scrollTop)
    scrTop = document.documentElement.scrollTop;
  else if(document.body && document.body.scrollTop)
    scrTop = document.body.scrollTop;
  else if(window.pageYOffset) scrTop = window.pageYOffset;
  return scrTop;
}

function getWindowHeight() {
  if(window.innerHeight)
    winY = window.innerHeight;
  else if(document.documentElement && document.documentElement.clientHeight)
    winY = document.documentElement.clientHeight;
  else if(document.body && document.body.clientHeight)
    winY = document.body.clientHeight;
  else winY = screen.height;
  scrTop = getScrollTop();
}

function getMouseXY(e) {
  if(e && e.pageX != null) {
    mouseX = e.pageX;
    mouseY = e.pageY;
  }
  else if(event && event.clientX != null) {
    mouseX = event.clientX + getScrollLeft();
    mouseY = event.clientY + getScrollTop();
  }
  if(mouseX < 0) mouseX = 0;
  if(mouseY < 0) mouseY = 0;
}

// -------------------------------------------------------------------------------------------------------
// Set opacity, fade-in/out
// -------------------------------------------------------------------------------------------------------

var timer = opacity = 0;

function setOpacity(opacity) {
  if(obj && !NN4) {
    obj.style.filter = 'alpha(opacity=' + opacity + ')';
    obj.style.mozOpacity = '0.9';
    if(obj.filters) obj.filters.alpha.opacity = opacity;
    if(!IE && obj.style.setProperty) obj.style.setProperty('-moz-opacity', opacity / 90, '');
  }
}

function fadeIn() {
  if(sobj) {
    sobj.visibility = 'visible';
    if(fadeSpeed && opacity < 100) {
      opacity += fadeSpeed;
      if(opacity > 100) opacity = 100;
      setOpacity(opacity);
      if(timer) clearTimeout(timer);
      timer = setTimeout('fadeIn()', 1);
    }
    else {
      opacity = 100;
      setOpacity(100);
    }
  }
}

function fadeOut() {
  if(sobj) {
    if(fadeSpeed && opacity > 0) {
      opacity -= fadeSpeed;
      if(opacity < 0) opacity = 0;
      setOpacity(opacity);
      if(timer) clearTimeout(timer);
      timer = setTimeout('fadeOut()', 1);
    }
    else {
      opacity = 0;
      setOpacity(0);
      sobj.visibility = 'hidden';
    }
  }
}

// -------------------------------------------------------------------------------------------------------
// Create the memo-box and view it
// -------------------------------------------------------------------------------------------------------

function memo(text, width, title) {
  if(width == null || width == 0) width = 200;
  if(title == null) title = '';

  var left = mouseX - width;
  if(left < 0) left = 0;

  var t = '<table border="0" cellspacing="0" cellpadding="1"><tr bgcolor="' + borderColor + '">' +
          '<td class="cssMemoTitle" style="width:' + (width - 16) + 'px" onClick="fadeOut()">' + title + '</td>' +
          '<td class="cssMemoBtnRaised" align="right" onClick="fadeOut()" onMouseDown="this.className=\'cssMemoBtnPressed\'" ' +
          'onMouseUp="this.className=\'cssMemoBtnRaised\'" onMouseOut="this.className=\'cssMemoBtnRaised\'">&times;</td>' +
          '</tr><tr><td bgcolor="' + borderColor + '" colspan="2">' +
          '<table border="0" cellspacing="0" cellpadding="4" width="' + width + '" bgcolor="' + bgColor + '"><tr>' +
          '<td><table border="0" cellspacing="0" cellpadding="0" align="center"><tr>' +
          '<td class="cssMemoText" onClick="fadeOut()">' + text + '</td></tr></table></td></tr></table></td></tr></table>';

  if(DOM || IE) {
    sobj.width = width + (NN4 ? '' : 'px');
    obj.innerHTML = t;
  }
  else if(NN4) {
    obj.document.write(t);
    obj.document.close();
  }

  var hght = 0;
  var top = mouseY;

  if(DOM) hght = obj.offsetHeight;
  else if(IE) hght = sobj.pixelHeight;
  else if(NN4) hght = sobj.clip.bottom;

  getWindowHeight();
  if(top + hght - scrTop > winY) {
    if(hght > top) top = 0;
    else top -= hght;
  }

  sobj.left = left + (NN4 ? '' : 'px');
  sobj.top = top + (NN4 ? '' : 'px');
  fadeIn();
}

// -------------------------------------------------------------------------------------------------------
