メニューを押すとウィンドウが開いたり

Javascriptで開いたウィンドウを閉じたい Javascriptで、メニュ… - 人力検索はてなに対する回答を行いました。

質問:Javascriptで開いたウィンドウを閉じたい

Javascriptで、メニューを押すとウィンドウが開いたり、閉じたりするものを書きました。
http://1st.geocities.yahoo.co.jp/gl/barreko00/view/20110611

これを、灰色のフォームウィンドウが開いた状態のときに、灰色以外の部分をクリックしたときに
ウィンドウを非表示に切り替えるにはどうしたらよいでしょうか
(ただし、灰色のウィンドウの中をクリックしたときには、ウィンドウは閉じない)

回答

フォーカスと消去フラグ、
setTimeoutとclearTimeoutによる時間差イベントの発生とキャンセル
をすべて連動させると実現できます。

動作確認ブラウザ:IE8, Firefox3.5, Chrome
【動作サンプルおよびソースコード
http://hp.vector.co.jp/authors/VA034687/sample/js_dhtml.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<script type="text/javascript" language="javascript">
<!--
contents=false;
tid=null;
flg_hide=true;

function show() {
	var elm=document.getElementById('contents');
	if (contents) {
		elm.style.display='none';
	} else {
		elm.style.display='block';
		focusInput();
	}
	contents=!contents;
}
function focusInput(){
	document.getElementById('text_input').focus();
	if(tid != null){
		clearTimeout(tid);
	}
}
function myHide(){
	
	if( flg_hide ){
		document.getElementById('contents').style.display='none';
		contents=false;
	}
}
function hide_on(){
	flg_hide=true;
}
function hide_off(){
	flg_hide=false;
}
-->
</script>

</head>
<body>

	<span id="menu" onclick="show();" style="cursor:pointer"  />メニュー</span>
	<div id="contents" onclick="hide_off();focusInput();" onmouseout="hide_on()" style="background:#CCCCCC;display:none;padding:10px;width:180px" >
		<form>
		<input type="text" id="text_input" name="text" onfocus="hide_off()" onblur="tid=setTimeout(function(){myHide()}, 200)" style="width:160px" />
		<br />
		<input type="submit" onfocus="hide_off()" name="submit" value="OK" />
		</form>
	</div>
</body>
</html>