var defaultMenuWidth="150px"; //set default menu width.

var linkset=new Array();

var ie4=document.all && !window.opera;
var ns6=document.getElementById;

var INITOP = 0.9;  // ポップアップメニューの透過指定（1.0で透過なし）

var menudisplay = 0;
var nowarea = 0;

document.write('<div id="popmenu" onMouseover="popupmouseover()" onMouseout="dynamichide(event)"></div>');

function iecompattest(){
	return (document.compatMode && document.compatMode.indexOf("CSS")!=-1)? document.documentElement : document.body;
}

// メニュー表示
function showmenu(e, which, optWidth, menucount){
	if (!document.all&&!document.getElementById)
		return
	window.document.onmouseup = popup_onmousedown;
		
	clearhidemenu();

	menuobj=ie4? document.all.popmenu : document.getElementById("popmenu");
	menuobj.innerHTML=which;
	menuobj.style.width=(typeof optWidth!="undefined")? optWidth : defaultMenuWidth;
	menuobj.contentwidth=menuobj.offsetWidth;
	menuobj.contentheight=menuobj.offsetHeight;
	if(menucount > 16){
		menuobj.style.height=306;
		menuobj.overflow='auto';
	}else{
		menuobj.style.height=18*menucount;
	}
	eventX=ie4? event.clientX : e.clientX;
	eventY=ie4? event.clientY : e.clientY;

	var rightedge=ie4? iecompattest().clientWidth-eventX : window.innerWidth-eventX;
	var bottomedge=ie4? iecompattest().clientHeight-eventY : window.innerHeight-eventY;

//	alert("rightedge="+rightedge+" menuobj.contentwidth="+menuobj.contentwidth+" window.innerWidth="+window.innerWidth+" eventX="+eventX+" iecompattest().clientWidth="+iecompattest().clientWidth+" menuobj.style.width="+menuobj.style.width)
//	if (rightedge<menuobj.contentwidth)
	if (rightedge<parseInt(menuobj.style.width)){
		menuobj.style.left=ie4? iecompattest().scrollLeft+eventX-parseInt(menuobj.style.width)+5+"px" : window.pageXOffset+eventX-parseInt(menuobj.style.width)+5+"px";
//		alert("1 menuobj.style.left"+menuobj.style.left+" window.pageXOffset="+window.pageXOffset+" eventX="+eventX)
	}else{
		menuobj.style.left=ie4? iecompattest().scrollLeft+eventX+5+"px" : window.pageXOffset+eventX+5+"px";
//		alert("2 menuobj.style.left"+menuobj.style.left+" window.pageXOffset="+window.pageXOffset+" eventX="+eventX)
	}
	
	if (bottomedge<menuobj.contentheight){
		if(ie4){
			if(iecompattest().scrollTop+eventY-menuobj.contentheight < 0)
				menuobj.style.top= "5px";
			else
				menuobj.style.top= iecompattest().scrollTop+eventY-menuobj.contentheight+5+"px";
		}else{
			if(window.pageYOffset+eventY-menuobj.contentheight < 0)
				menuobj.style.top= "5px";
			else
				menuobj.style.top= window.pageYOffset+eventY-menuobj.contentheight+5+"px";
		}
	}else{
		if(ie4){
			if(iecompattest().scrollTop+event.clientY < 0)
				menuobj.style.top= "5px";
			else
				menuobj.style.top= iecompattest().scrollTop+event.clientY+5+"px";
		}else{
			if(window.pageYOffset+eventY < 0)
				menuobj.style.top= "5px";
			else
				menuobj.style.top= window.pageYOffset+eventY+5+"px";
		}
	}

	menuobj.style.display="block";
	initOpacity("popmenu",INITOP);
	menudisplay = 0;
	return false;
}

function contains_ns6(a, b) {
	//Determines if 1 element in contained in another- by Brainjar.com
	while (b.parentNode)
		if ((b = b.parentNode) == a)
			return true;
	return false;
}

function hidemenu(){
	if (window.menuobj){
		menuobj.style.display="none";
		clearOpacity();
	}
}

function popupmouseover(){
	clearhidemenu();
}

function popupmouseout(){
	nowarea = 0;
	popup_onmousedown();
}

function areamouseover(areano){
	if(areano != nowarea){
		popup_onmousedown();
	}else{
		clearhidemenu();
	}
	nowarea = areano;
}

function areamouseout(areano){
//	nowarea = areano;
	popup_onmousedown();
}

function openmenu(){
}

function dynamichide(e){
	if (ie4&&!menuobj.contains(e.toElement)){
//		hidemenu();
		delayhidemenu();
	}else if (ns6&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget)){
//		hidemenu();
		delayhidemenu();
	}
}

function popup_onmousedown(evt){
	target = dragGetTarget(evt);
	if(target != null) {
		if(target.id == "popmenu")
			return;
	}
	delayhidemenu()
}

function delayhidemenu(){
	if(menudisplay == 1) return;
	menudisplay = 1;
	fadeOpacity('popmenu',-1,0.0,30,7);
	delayhide=setTimeout("hidemenu()",500);
}

function clearhidemenu(){
	if (window.delayhide){
		clearTimeout(delayhide);
		initOpacity("popmenu",INITOP);
	}
	menudisplay = 0;
}

//if (ie4||ns6)
//	document.onclick=hidemenu;


//---------------------------------------------------------------------------------------------------------
winid=null; // オープン中のポップアップ（複数起動しないため）

function getposOffset(overlay, offsettype){
	var totaloffset=(offsettype=="left")? overlay.offsetLeft : overlay.offsetTop;
	var parentEl=overlay.offsetParent;
	while (parentEl!=null){
		totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
		parentEl=parentEl.offsetParent;
	}
	return totaloffset;
}

// ポップアップウィンドウ表示
function overlaystart(curid, subid, dragid){
//	alert("close id="+document.getElementById("subcontent5").id)
//	alert("close id="+document.getElementById("dragheader5").id)
//	alert("close id="+document.getElementById("fromcontname").id)
	return overlaystart_sub(curid, subid, dragid, 1, 0,0);
}

// ポップアップウィンドウ表示
function overlaystart_sub(curid, subid, dragid, mode, xofset,yofset){
	if (document.getElementById){
		hidemenu();
		if(mode == 1){
			if(winid != null){
				overlayclose(winid);
			}
		}
//		alert("ofset="+ofset);
		winid = subid;
		subobj=document.getElementById(subid);
		curobj=document.getElementById(curid);
		left = getposOffset(curobj, "left")+xofset;
		subobj.style.left=left+"px";
		
		y=getposOffset(curobj, "top")+yofset;
		
		subobj.style.top=y+"px";
// 		setOpacity(subid,0)  //終了
		subobj.style.display="block";
//		fadeOpacity(subid,1,0.0,5,0);
		setDragId(subid);
//		alert("dragid="+document.getElementById(dragid).id)
		dragInit(document.getElementById(dragid));
		return false;
	}
	else
		return true;
}

// ポップアップウィンドウクローズ
function overlayclose(subid){
	document.getElementById(subid).style.display="none";
	loadDragId();
	winid = null;
}

//---------------------------------------------------------------------------------------------------------
// ドラッグ対象オブジェクト情報
dragObj = new Object();
dragObj.dragFlag = false;
dragObj.offsetX = dragObj.offsetX = 0;
dragObj.scrollX = dragObj.scrollX = 0;
dragObj.mouseX = dragObj.mouseY = 0;
dragObj.targetObj = null;
dragObj.dragId = "";
dragObj.saveDragId = "";
dragObj.savesaveDragId = "";
dragObj.savesavesaveDragId = "";
;

function setDragId(subid){
//	alert("set dragid="+dragObj.dragId+" saveid="+dragObj.saveDragId+" savesaveid="+dragObj.savesaveDragId)
	dragObj.savesavesaveDragId = dragObj.savesaveDragId;
	dragObj.savesaveDragId = dragObj.saveDragId;
	dragObj.saveDragId = dragObj.dragId;
	dragObj.dragId = subid;
}

function loadDragId(){
//	alert("load dragid="+dragObj.dragId+" saveid="+dragObj.saveDragId+" savesaveid="+dragObj.savesaveDragId)
	dragObj.dragId = dragObj.saveDragId;
	dragObj.saveDragId = dragObj.savesaveDragId;
	dragObj.savesaveDragId = dragObj.savesavesaveDragId;
}


// ひとつのウィンドウのみをドラッグ対象にする場合。
function dragInit(subObj)
{
	
// イベントハンドラなどを設定
	subObj.onmousedown = dragStart;	
	window.document.onmousemove = dragProc;
	window.document.onmouseup = dragEnd;
}

// ドラッグ開始処理
function dragStart(evt)
{
	target = dragGetTarget(evt);
	if(target == null) return;

	target.style.left=getposOffset(target, "left")+"px";
	target.style.top=getposOffset(target, "top")+"px";

//	alert("id="+target.id+"left="+target.style.left+" top="+target.style.top);

	return dragSetTarget(target);
}

function dragGetTarget(evt)
{
	if(window.addEventListener)
	{
		if(evt){
			target = evt.target;
		}else{
			return null;
		}
	}else{
		if(event){
			target = event.srcElement;
		}else{
			return null;
		}
	}
	for(i = 0;i < 15;i++){ // 無限にならないように適当にネスト制御しておく
		if(target == null) return null;
		str = target.id;
		if(str == null || str.indexOf(dragObj.dragId,0) == -1)
			target =  target.parentNode;
		else
			break;
	}
	
	if(target == null) return null;
	str = target.id;
	if(str == null) return null;
	if(target.id.indexOf(dragObj.dragId,0) == -1){
		return null;
	}
	
	return target;
}

function dragGetTargetID(evt,id)
{
	if(window.addEventListener)
	{
		target = evt.target;
	}else{
		target = event.srcElement;
	}
	for(i = 0;i < 15;i++){ // 無限にならないように適当にネスト制御しておく
		if(target == null) return null;
		str = target.id;
		if(str == null || str.indexOf(id,0) == -1)
			target =  target.parentNode;
		else
			break;
	}
	
	if(target == null) return null;
	str = target.id;
	if(str == null) return null;
	if(target.id.indexOf(id,0) == -1){
		return null;
	}
	
	return target;
}

function dragSetTarget(target)
{
	dragObj.targetObj = target;
	dragObj.offsetX = dragObj.mouseX - parseInt(target.style.left); // 通常座標の補正
	dragObj.offsetY = dragObj.mouseY - parseInt(target.style.top); // 通常座標の補正
	dragObj.scrollX = getWinXOffset(); // ウィンドウスクロール時の補正
	dragObj.scrollY = getWinYOffset(); // ウィンドウスクロール時の補正
	dragObj.dragFlag = true;
	
	if(navigator.family == "gecko"){
		return true;
	}else{
		return false;
	}
}

// ドラッグ終了処理
function dragEnd()
{
	dragObj.dragFlag = false;
}

function getDragObj()
{
	return dragObj.targetObj;
}

// ドラッグ中の処理
function dragProc(evt)
{
	var mouseX,mouseY;
	if (document.all)
	{
		mouseX = event.x;
		mouseY = event.y;
	}else{
		mouseX = evt.pageX;
		mouseY = evt.pageY;
	}
	dragObj.mouseX = mouseX;
	dragObj.mouseY = mouseY;
	if (!dragObj.dragFlag) return;
	
	X = getWinXOffset();
	Y = getWinYOffset();
	dragObj.targetObj.style.left = mouseX - dragObj.offsetX + (X - dragObj.scrollX);
	dragObj.targetObj.style.top = mouseY - dragObj.offsetY + (Y - dragObj.scrollY);
	return false;
}

//---------------------------------------------------------------------------------------------------------
// スクロール修正幅（X座標）
function getWinXOffset(){
  if(window.scrollX){
	 return 0; // Moziila
  }
  if(window.pageXOffset){
	 return window.pageXOffset; // Opera, NN4
  }
  if(document.documentElement && document.documentElement.scrollLeft){ // 以下 IE
   return document.documentElement.scrollLeft;
  }
  else if(document.body && document.body.scrollLeft){
   return document.body.scrollLeft;
  }
  return 0;
}

 
// スクロール修正幅（Y座標）
function getWinYOffset(){
  if(window.scrollY){
	 return 0; // Mozilla
  }
  if(window.pageYOffset){
	 return window.pageYOffset; // Opera, NN4
  }
  if(document.documentElement && document.documentElement.scrollTop){ // 以下 IE
   return document.documentElement.scrollTop;
  }
  else if(document.body && document.body.scrollTop){
   return document.body.scrollTop;
  }
  return 0;
}

// DIVの高さを獲得
function getDivHeight(nodeObj){
  return document.layers?
         nodeObj.clip.height:(nodeObj.offsetHeight||nodeObj.style.pixelHeight||0);
}

function getElById2(idVal) {
	if (document.getElementById != null)
		return document.getElementById(idVal);
	if (document.all != null)
		return document.all[idVal];
	
	alert("ElementID が獲得できません!!");
	return null;
}

var timeoutid = null;
function fadeOpacity(layName,swt,stopOpacity,fadetime,delay){
    if(!window.fadeOpacity[layName]) //カウンター初期化
      fadeOpacity[layName] =0 

    //フェイドスイッチ引数省略時初期値(不透明から透明へ)
    if(!arguments[1]) swt = -1
  
    //引数swtが -1 なら不透明から透明へ
    //           1 なら透明から不透明へフェイドする
    
    if(swt==-1)        var f  = "9876543210"
    else if(swt==1)    var f  = "0123456789"
    else               var f  = "9876543210"
  
    var x = "";
    for(i = 0;i < delay;i++){
		x += "X";
	}
	f = x+f;
    //停止不透明度引数省略時初期値
    if(!arguments[2] && swt==-1)     stopOpacity = 0
    else if(!arguments[2] && swt==1) stopOpacity = 10

    //フェイド処理    
    if( fadeOpacity[layName] < f.length-1 ){
  
      //カウンター番目の文字列を取り出す
      if(f.charAt(fadeOpacity[layName]) != 'X'){
	    var opa = f.charAt(fadeOpacity[layName])/10

      //終了時不透明度なら終了
    	if( opa == stopOpacity ){
    		setOpacity(layName,stopOpacity)  //終了
        	fadeOpacity[layName] = 0     //リセット
			menudisplay = 0;
        	return
      	}
      	// 不透明度変更を実行する
      	setOpacity(layName,opa)
      	// カウンターを加算
	  }
      fadeOpacity[layName]++
      //--50/1000秒後にfadeOpacityを再実行
      timeoutid = setTimeout('fadeOpacity("'+layName+'","'+swt+'","'+stopOpacity+'","'+fadetime+'","'+delay+'")',fadetime)
    } else {
      //終了
      setOpacity(layName,stopOpacity)
      //--リセット
      fadeOpacity[layName] = 0
		menudisplay = 0;
    }
    return timeoutid;
}

function clearOpacity() {
	if(timeoutid != null){
		clearTimeout(timeoutid);
		timeoutid = null;
	}
}

function initOpacity(layName,arg) {
	clearOpacity();
	setOpacity(layName,arg);
}

//--不透明度set 
function setOpacity(layName,arg) {
    //arg は 0透明 1不透明
    //n4やmac-e4などopacity未対応は0以下で代替処理としてhiddenする
    var ua = navigator.userAgent

    if( window.opera ) return          //o6,o7
    if( document.layers ){              //n4
           var oj = document.layers[layName]
    }else if( document.all ){            //e4,e5,e6
           var oj = document.all(layName).style
    }else if( document.getElementById ){ //n6,n7,m1,s1
           var oj =document.getElementById(layName).style
	}
	
    if(document.layers ||
       ua.indexOf('Mac_PowerPC') !=-1 && document.all ||
       ua.indexOf('Safari') !=-1 ) {   //n4,mac-e4,mac-e5,s1
        //opacityの使えないブラウザ用代替処理
        if(arg>0)       oj.visibility='visible'
        else if(arg<=0) oj.visibility='hidden'
    } else if(document.all) {          //win-e4,win-e5,win-e6
        document.all(layName).style.filter="alpha(opacity=0)"
        document.all(layName).filters.alpha.Opacity  = (arg * 100)
    } else if(ua.indexOf('Gecko')!=-1){ //n6,n7,m1
        document.getElementById(layName).style.MozOpacity = arg
    }
}


