/// @file spw_popup.js
/// @brief Popup Class for Javascript \n
///        Intelligent popups with automatic positioning of popup menu \n
/// fill array popupMenu[<id of object>] with content of popup menu. \n
/// set popupframe to temporary object where to put popup menus to. \n
/// call with: <div id="foo" onmouseover="popme(true,this);"  onmouseout="popme(false,this);"></div>\n
///
/// Example: 
/// @verbatim
/// javacode:
/// 
///     function loadme() {
///         popupframe = document.getElementById( "popupframe" );
///         popupMenu["leo1"] = "ganz langer text der aber nicht umgebrochen wird<br />sollte automatisch ausgerichtet werden.";
///     }
///
/// htmlcode:
///
///     <body onload="loadme();">
///     <div class="leoclass" id="leo1" onmouseover="popme(true,this);" onmouseout="popme(false,this);" onclick="">foobar</div>
///     <div id="popupframe"></div>
///
/// @endverbatim
///
/// @author Leo Eibler
/// @date 20051217 le@sprossenwanne.at \n
///                created \n
///
/// This Software is for free use.
///
/// got from: http://www.eibler.at/
///


var popupMenu = new Array();

var keeppopup = true;
var curelement = "-1";
var popupframe;

function getDocumentHeight() {
    if( window.innerHeight ) {
        return window.innerHeight;
    } else {
        if( document.documentElement.clientHeight ) {
            return document.documentElement.clientHeight;
        } else {
            return document.body.clientHeight;
        }
    }
}

function getDocumentWidth() {
    if( window.innerWidth ) {
        return window.innerWidth;
    } else {
        if( document.documentElement.clientWidth ) {
            return document.documentElement.clientWidth;
        } else {
            return document.body.clientWidth;
        }
    }
}

function popme( show, where ) {
    if( popupMenu[where.id] ) {
        var what = popupMenu[where.id];
    } else {
        return;
    }
    var d = where;
    var id = where.id.substr( 2 );
    if( show ) {
        var p = where;
        var le = p.offsetLeft+p.offsetParent.offsetLeft;
        var to = p.offsetTop+p.offsetParent.offsetTop+p.offsetHeight;
        popupframe.innerHTML = "<div class=\"popup\" id=\"popup"+where.id+"\" style=\"position:absolute; white-space:nowrap;\">"+
                               what+
                               "</div>";
        var popupwindow = document.getElementById( "popup"+where.id );
        if( (le+popupwindow.offsetWidth) > getDocumentWidth() ) {
            le = getDocumentWidth()-popupwindow.offsetWidth
        }
        if( (to+popupwindow.offsetHeight) > getDocumentHeight() ) {
            to = getDocumentHeight()-popupwindow.offsetHeight-p.offsetHeight;
        }
        popupwindow.style.position = "absolute";
        popupwindow.style.top = to+"px";
        popupwindow.style.left = le+"px";

        curelement = where;
        keeppopup = true;
        document.onmousemove = mousewatcher;
    } else {
        if( !keeppopup ) {
            popupframe.innerHTML = "";
            curelement = "-1";
            document.onmousemove = null;
        }
    }
}

function mousewatcher( e ) {
    var posx = 0;
    var posy = 0;
    if (!e) var e = window.event;
    if (e.pageX || e.pageY)
    {
      posx = e.pageX;
      posy = e.pageY;
    }
    else if (e.clientX || e.clientY)
    {
      posx = e.clientX + document.body.scrollLeft;
      posy = e.clientY + document.body.scrollTop;
    }
    // posx and posy contain the mouse position relative to the document
    // Do something with this information

    if( curelement == "-1" ) {
    } else {
        var d = curelement;
        var dle = d.offsetLeft+d.offsetParent.offsetLeft;
        var dto = d.offsetTop+d.offsetParent.offsetTop;
        var dwi = d.offsetWidth;
        var dhe = d.offsetHeight;
        var p = document.getElementById( "popup"+curelement.id );
        var ple = p.offsetLeft+p.offsetParent.offsetLeft;
        var pto = p.offsetTop+p.offsetParent.offsetTop;
        var pwi = p.offsetWidth;
        var phe = p.offsetHeight;
        dto = dto - 3; // ein bissl spielraum
        dhe = dhe + 3; // ein bissl spielraum
        pto = pto - 13; // ein bissl spielraum
        phe = phe + 3; // ein bissl spielraum

        if( ( (posy > pto) && (posy < (pto+phe)) &&
              (posx > ple) && (posx < (ple+pwi)) ) ||
            ( (posy > dto) && (posy < (dto+dhe)) &&
              (posx > dle) && (posx < (dle+dwi)) ) ) {
        } else {
            keeppopup = false;
            popme( false, curelement );
        }
    }
}
