function addEvent(obj,type,fn)
{ 
	if(obj.attachEvent)
	{
		obj['e'+type+fn] = fn;
		obj[type+fn] = function(){obj['e'+type+fn](window.event);}
		obj.attachEvent('on'+type,obj[type+fn]);
	}    
	else
		obj.addEventListener(type,fn,false);
}   
  
function showObj(ob)
{   
    var obj; 
    if(typeof ob == "string")obj = document.getElementById(ob); // it is a string;
    else  obj = ob; // it is a object;
    if(obj == undefined) return;
    
    obj.style.IsOver=1;
	obj.style.display = 'block';
	
	debug("show the '" + obj.id + "'");
}
function hideFunc(id) {
    var obj = document.getElementById(id);
    
    if(obj == undefined || obj.style == undefined ) return;
    if(obj.style.IsOver == undefined || obj.style.IsOver == 0) // while timer is waiting the time, the 'IsOver' can be assigned 1 by 'showObj'
    {	  
        obj.style.display = 'none';
        obj.style.IsOver = 0;
        
        debug("hiding the '" + obj.id + "'");        
    }
    else    debug("not hiding the '" + obj.id + "'");
    
    if( obj.id.substring(0,5) == "tmpID" ) obj.id = undefined;
}    

function hideObj(ob)
{    
    var obj; 
    if(typeof ob != "string") obj = ob; // it is a object;
    else obj = document.getElementById(ob); // it is a string;
    if(obj == undefined) return;
        
    obj.style.IsOver = 0;
    obj.style.display = 'none';
    debug("hiding the '" + obj.id + "'");   
}		

function hideObj(ob, time)
{   
    var obj; 
    if(typeof ob != "string") obj = ob; // it is a object;
    else obj = document.getElementById(ob); // it is a string;
    if(obj == undefined) return;
        
    obj.style.IsOver = 0;
    
    if( obj.id == undefined ) obj.id = "tmpID" + Math.random();
    setTimeout("hideFunc('" +obj.id+ "')", time);
}		


function overToOther(tar_obj, mov_obj, left_offset, top_offset)
{
    var obp = tar_obj;
    var x = tar_obj.offsetLeft;
    var y = tar_obj.offsetTop;
        
    debug("tar_obj tag : " + tar_obj.nodeName + ", id : " + tar_obj.id +", left : " + tar_obj.offsetLeft + ", top : " + tar_obj.offsetTop);
    debug("mov_obj tag : " + mov_obj.nodeName + ", id : " + mov_obj.id +", left : " + mov_obj.offsetLeft + ", top : " + mov_obj.offsetTop);
    
    for(obp = obp.offsetParent; obp; obp = obp.offsetParent)
    {
        x = x + obp.offsetLeft;
        y = y + obp.offsetTop;
        
        debug("parent tag : " + obp.nodeName + ", left : " + obp.offsetLeft + ", top : " + obp.offsetTop + 
            ", x : " + x + ", y : " + y);        
    }
    
    
	  x = x + left_offset;
	  y = y + top_offset;
	  if(x < 0) x = 0;
	  if(y < 0) y = 0;
    mov_obj.style.left = x +"px";
    mov_obj.style.top =  y +"px"; 
    
    debug("mov_obj tag : " + mov_obj.nodeName + ", x : " + x + ", y : " + y);
    debug("\n");
}

var CurtainDiv = null;
var CurtainDivBody = null;
var CurtainDivTable = null;
var CurtainDivTD = null;
function showCurtainDiv(msg, closeWithClick){ 
	
	if(CurtainDiv == null){
		CurtainDiv = document.createElement("div");		
		CurtainDiv.id = 'CurtainDiv';
		
		CurtainDiv.style.top = "0px";
		CurtainDiv.style.left = "0px";
		
		CurtainDiv.style.opacity = 0.3;
	  CurtainDiv.style.filter = "alpha(opacity:"+ CurtainDiv.style.opacity * 100+")";
		CurtainDiv.style.position = "absolute"; 
		CurtainDiv.style.border = "solid 0px black";
		CurtainDiv.style.background = "#999999"; 
		
		CurtainDiv.show = showCurtainDiv;
		CurtainDiv.hide = hideCurtainDiv;	
		document.body.appendChild(CurtainDiv);	
		
				
		CurtainDivTable = document.createElement("table");
		document.body.appendChild(CurtainDivTable);			
		CurtainDivTable.style.display = 'none';  
		
		CurtainDivTable.border = 0;
		CurtainDivTable.style.borderCollapse = "collapse";
		CurtainDivTable.style.position = "absolute"; 		
		CurtainDiv.style.top = "0px";
		CurtainDiv.style.left = "0px";
		
		CurtainDivTable.style.top = "0px";
		CurtainDivTable.style.left = "0px";
		CurtainDivTable.style.width = "100%";
		
		var mTr = CurtainDivTable.insertRow( 0 );
		CurtainDivTD = mTr.insertCell(0);
		
		CurtainDivTD.align = "center";
		CurtainDivTD.vAlign = "middle";
		
		
		addEvent(window, 'resize', resizeCurtainDiv);
	}
	
	CurtainDiv.style.width = document.body.scrollWidth;
	CurtainDiv.style.height = document.body.scrollHeight;	
	CurtainDiv.style.display='inline';  
		
	if(msg){
			
		if(CurtainDivTD.firstChild) CurtainDivTD.removeChild(CurtainDivTD.firstChild);	
		
		if(closeWithClick) CurtainDivTD.onclick = hideCurtainDiv;
		else CurtainDivTD.onclick = null;
		
		if(typeof msg == "string") { 
			
			CurtainDivTD.innerHTML = "<table border=0><tr><td style='background:#DDDDFF;border:solid 2px black' align=center>" + msg + "</td></tr></table>"; 
		}
		else {
			CurtainDivTD.innerHTML = "&nbsp;";
			CurtainDivTD.appendChild(msg);	
		}
		
		//setTimeout("showCurtainDivTable()", 200);
		CurtainDivTD.style.width = document.body.scrollWidth;
		CurtainDivTD.style.height = document.body.scrollHeight;
		CurtainDivTable.style.display = 'block';
		//showCurtainDivTable();
	}
}
function showCurtainDivTable(){
		
		//alert(document.body.clientWidth + ", " + CurtainDivTable.clientWidth + ", " + document.body.clientHeight + ", " + CurtainDivTable.offsetHeight);
		//CurtainDivTable.style.left = (document.body.clientWidth-CurtainDivTable.offsetWidth)/2;
		//CurtainDivTable.style.top = (document.body.clientHeight-CurtainDivTable.offsetHeight)/2;
		//alert(CurtainDivTable.style.top + ", " + CurtainDivTable.style.left);
		CurtainDivTable.style.display = 'block';
}

function hideCurtainDiv(){
	CurtainDiv.style.display='none'; 
	CurtainDivTable.style.display = 'none';
}

function resizeCurtainDiv(){
	if(CurtainDiv.style.display != 'none'){
		CurtainDiv.style.width = document.body.scrollWidth;
		CurtainDiv.style.height = document.body.scrollHeight;
		if(CurtainDivTable.style.display != 'none'){
			CurtainDivTD.style.width = document.body.scrollWidth;
			CurtainDivTD.style.height = document.body.scrollHeight;
		}
	}
}

function menuOver(obj)
{
	if(obj == null || obj.tagName == null) obj = this;
	obj.style.background = '#BBCCFF';
}

function menuOut(obj)
{
	if(obj == null || obj.tagName == null) obj = this;
	obj.style.background = 'buttonface';
}


function debug(str)
{
    var debug_txt = document.getElementById('debug_txt');
    if(debug_txt == undefined) return;
    
    if(debug_txt.value.length > 0) debug_txt.value = debug_txt.value + "\n" + str;
    else debug_txt.value = str;
}

function setDebug()
{
    var bodyElement = document.documentElement.getElementsByTagName("body")[0];
    var obj = document.createElement("textarea");
    obj.id = 'debug_txt';
    obj.cols = 100;
    obj.rows = 10;
    bodyElement.appendChild(obj);
}

