Something like this perhaps?
<!DOCTYPE html>
<html>
<head>
<style>
#showMe
{
width: 200px;
height: 75px;
border: solid 3px red;
}
</style>
<script>
function byId(e){return document.getElementById(e);}
var isVisible = false;
function btnClick(e)
{
var tgt = document.getElementById('showMe');
switch (isVisible)
{
case false:
tgt.style.display = '';
isVisible = true;
break;
default:
tgt.style.display = 'none';
isVisible = false;
}
}
function bodyClick(e)
{
e = e || event;
var tgt = document.getElementById('showMe');
if ( ( e.srcElement != byId('showMe')) && (e.srcElement != byId('mBtn')) )
{
tgt.style.display = 'none';
isVisible = false;
document.removeEventListener('click', bodyClick, true);
byId('mBtn').addEventListener('click', btnClick, true);
}
}
function myInit()
{
byId('mBtn').addEventListener('click', btnClick, true);
byId('mBtn').addEventListener(
'mouseover',
function()
{
if (isVisible)
{
document.removeEventListener('click', bodyClick, true);
byId('mBtn').addEventListener('click', btnClick, true);
}
},
true);
byId('mBtn').addEventListener(
'mouseout',
function()
{
if (isVisible)
{
document.addEventListener('click', bodyClick, true);
byId('mBtn').removeEventListener('click', btnClick, true);
}
},
true);
}
</script>
</head>
<body onload='myInit();'>
<input id='mBtn' type='button' value='Show/Hide'/>
<div id='showMe' style='display: none;'>
I contain hidden content. Pop-me-up!
</div>
<br>
<input type='button' onclick='alert("Hello World!");' value='test alert(...)'/>
</body>
</html>