//SCRIPT COMPONENTS
//HOPUP HTML ver1.1x系

	//v1.0b3の動作原理 (ユーザースタイルシート情報の更新アルゴリズム)
	//１:stylesheetが入っている場合は !dv_main.style.left とはならないので、もともとルーチンには入らず、
	//   ＤＩＶ位置が書き換えられることは無い
	//２:stylesheetが入っていない場合は !dv_...=true となるのでルーチンに入る
	//   この際、stylesheetが記入されるが、同時にSS_offXにもＤＩＶ番号が記録される
	//３:stylesheetが入っていても、SS_offXがＴＲＵＥである場合は、最初にスタイルシートが記載されていなかった
	//   事を示しているので、ルーチンにはいり、値を更新する
	//※同様の動作はSS_offYでも動作する


//スクリプト解説は www.calm-web.com へ

	var setStartTime = new Array()
	var scriptVer = "ver1.13 [ FREE ] 20030225" //バージョン情報

//■■■■■  デフォルト情報  ■■■■■// (通常は変更する必要はありません)
//この設定情報は初期値であり、setH_ID@ の情報が存在した場合は使用されません

	setStartTime[1] =  5; //ホップアップＯＮのタイム  1/10秒 = 1
	setStartTime[2] =  7; //マウスが対象ＤＩＶ全てから外れてから、実際にＤＩＶが消えるまでのタイム
	setStartTime[3] =  8; //マウスが対象階層から外れたときに、そのＤＩＶが消えるまでのタイム（0でOFF)
	hostIDname = "Hopup"; //ＤＩＶのＩＤ識別判定文字列（ 標準 : Hopup ）
	offsetXcheck =  15     //２階層目以降のＤＩＶのＸ位置を自動調整する　(0=false / 0!=true 重なり値を入力)
	offsetYcheck = -8     //２階層目以降のＤＩＶのＹ位置を自動調整する　(0=false / 0!=true マウス位置からの移動量)
	mousedowncheck = true //ＤＩＶ外でマウスクリックしたときに、表示しているＤＩＶを削除する( false / true)

	alphaStatus = true    //アルファフィルタを使用する（ IE5 以降でのみ動作 ） ( false / true )
	alphaLast   = 90      //アルファフィルタの最終値 (0=透明 〜 100=不透明)
	alphaTimer  = 30      //値更新のタイミング ( ns ) １更新で値が１０更新されます

	firstDIVx   = 1       //１階層のレイヤーＸ位置を規定（マウス位置＋数値）  0=false 1=>true
	firstDIVy   = 1       //１階層のレイヤーＸ位置を規定（マウス位置＋数値）  0=false 1=>true
	
//■■■■■■■■■■■■■■■■■■■//

//↓↓これ以降は実動作プログラム部です

//ブラウザチェック (is[ブラウザ] OK=true / NG= false )
	var VarUsrAgt = navigator.userAgent.toLowerCase();
	isMac = (navigator.appVersion.indexOf("Mac") != -1);
	isWin = (navigator.appVersion.indexOf("Win") != -1);
	isX11 = (navigator.appVersion.indexOf("x11") != -1);
	isNS4 = (document.layers) ? 1 : 0;
	isNS6 = VarUsrAgt.indexOf("netscape6") != -1;
	isNS7 = VarUsrAgt.indexOf("netscape/7.") != -1;
	isIE5 = VarUsrAgt.indexOf("msie 5.") != -1;
	isIE6 = VarUsrAgt.indexOf("msie 6.") != -1;
	isOP6 = VarUsrAgt.indexOf("opera 6.") != -1;
	isOP7 = VarUsrAgt.indexOf("opera/7.") != -1;
	isMZ1 = navigator.appName.indexOf("Netscape") != -1 && navigator.appVersion.charAt(0)   == 5;
		//OPERA7 は製品版を待ちます(2002-12現在) いい感じで動きそうです
		//if (isOP7) {isOP7=false; isIE6=false; isIE5=false }

	//IE5,IE6=WinOnly  NS6,NS7(Mozilla),OPERA7=Win or MAC
	//isJS = ((isIE5 && !isMac) || (isIE6 && !isMac) || isNS6 || isNS7 || isOP7 || isMZ1) && (!isOP6 && !isNS4) && (isWin || isMac)
	
	isJS = ( (isIE5 && !isMac) || (isIE6 && !isMac) || isNS6 || isNS7 || isOP7 || isMZ1)


	//StyleSheetSetting (DIV:display=none)
	if (isJS || isOP6 || isNS4){ 
		document.write("<style type=\"text/css\">");
		document.write("DIV { display:none }");
		document.write("</style>");
	}

var timercount = 0;
var layData = new Array()
var timerID,startwindowcheck
var SS_offX="",SS_offY=""

//動作メインアルゴリズム @ スクリプト最適化 v2.00
//zone laynum power がともに０の場合は、ウインドウリセットを行う
//power =0 OFF / 1 ON(タイマー起動) / 2 ON(即効起動)
//ＩＤオプション(DivOption)チェックスクリプト搭載版（将来の拡張に備える為）
var DivOption=""
function Hopdiv(zone,laynum,power){
	if (!isJS) return;
	if (!startwindowcheck) startwindow(); //OnLoadで指定してない場合

	//タイマー関数が動作していた場合はリセットを行う
	if (timercount != 0){ ClearTimer(timerID) }
	//アルファチャンネルが動作中であった場合は
	//数値をリセットする
	if ( alphacount >0){
		ClearTimer(a_filter)
		alphacount = 0;
			if (isIE5 || isIE6){
				dv_main.style.filter = "alpha(opacity="+alphaLast+",style=0)"
			} else if(isNS6 || isNS7){
				div_data.style.MozOpacity= alphaLast+"%"
			}
	}

	timercount = 1; //時間軸情報を初期化
	if (power==2) { timercount = setStartTime[1] }; //power=2 の場合は時間軸を早送り
	layData[1] = zone;layData[2] = laynum;layData[3] = power

	DivOption="";DivData=0
	//DIVのIDにオプション識別番号がある場合はそちらを抽出する（将来の拡張用）
	if (!isNaN(layData[1]) && !isNaN(layData[2]) &&(zone+laynum+power!=0 )){
		DivData = div_id.indexOf(layData[1]+"_"+layData[2]) + String.valueOf(layData[1]).length + String.valueOf(layData[2]).length +1 //対象ＤＩＶのdiv_idの終端位置
		for (i=DivData;i<=div_id.length; i++){
			if ( div_id.substr(i,1) == "@" ) break;
		}
		if (i>DivData) i=DivData
		DivOption=div_id.substr(DivData,i-DivData)
	}
	timerID = setInterval("HopTimer()",100);
}

//タイマー稼動時間軸
//    setStartTime[n]/10 秒経過時に指定のスクリプトを動作させる
//    割り当て引数  layData[0] 〜 [2]
function HopTimer(){
	if (!isJS) return;
	timercount ++ //時間の加算
	
	if (layData[3] >= 1){ //ＤＩＶ描画
		if (timercount >= setStartTime[1]){
			//表示対象より低い階層のＤＩＶを閉じる
			ClearTimer(timerID);
			DivZonePreset(layData[1],1);
			
			//ＤＩＶを描画する (id判定ルーチン付)
			var dd=""
			for (i=0; i<=div_count; i++){
				div_data = document.getElementsByTagName('div')[i];
				
				//if (div_data) dd +=div_data.id+"="+layData[2] + DivOption+"? // "; status = dd
				//status = layData[2] + "|" + DivOption
				if (div_data && div_data.id == hostIDname +layData[1]+"_"+layData[2] + DivOption){

					dv_main = document.getElementById(hostIDname + layData[1]+"_"+layData[2] + DivOption);
					if (layData[1] > 1){ //ＤＩＶ位置情報をoffsetwidthより算出し代入する //２階層目以降
						dv_offset = document.getElementById(nowDIV); //現ＤＩＶ情報の取得
						if (offsetXcheck && ( !dv_main.style.left || SS_offX.indexOf(layData[1]+"_"+layData[2])!=-1 ) ){ //スタイルシートの値を優先
							if (!dv_main.style.left) SS_offX += layData[1]+"_"+layData[2] +"/";
							dv_main.style.left = dv_offset.offsetWidth + parseInt(dv_offset.style.left) - offsetXcheck
						}
						if (offsetYcheck && ( !dv_main.style.top || SS_offY.indexOf(layData[1]+"_"+layData[2])!=-1 ) ){  //スタイルシートの値を優先
							if (!dv_main.style.top) SS_offY += layData[1]+"_"+layData[2] +"/";
							dv_main.style.top  = mouseY + offsetYcheck;
						}
					} else { //１階層目は必要に応じて初期位置を代入する　スタイルシートの値を優先
						if (firstDIVx!=0 && firstDIVy!=0 && ( !dv_main.style.left || SS_offX.indexOf(layData[1]+"_"+layData[2])!=-1 ) && ( !dv_main.style.top || SS_offY.indexOf(layData[1]+"_"+layData[2])!=-1 ) ){
							dv_offset = document.getElementById(nowDIV); //現ＤＩＶ情報の取得
							if(!dv_main.style.left && !dv_main.style.top){
								SS_offX += layData[1]+"_"+layData[2] +"/";
								SS_offY += layData[1]+"_"+layData[2] +"/";
							}
							dv_main.style.left = mouseX + firstDIVx
							dv_main.style.top  = mouseY + firstDIVy
						}
					}


					//アルファチャンネル指定部 (IE5/IE6 ただしMACは除く)
					if ( (isIE5 || isIE6 || isNS6 || isNS7) && alphaStatus && !isMac && !isOP7){
						alphacount = 0;
						if (isIE5 || isIE6){
							dv_main.style.filter = "alpha(opacity=0,style=0)"
						} else if(isNS6 || isNS7){
							div_data.style.MozOpacity= "0%"
						}
						a_filter = setInterval("alphafilter()",alphaTimer);
					}
					dv_main.style.display= "block";
					break;
				}
			}
		}
	}else{ //表示クリア命令
		if (layData[1] + layData[2] + layData[3] ==0){ //全表示をクリア
			if (timercount >= setStartTime[2]){
				ClearTimer(timerID); DivZonePreset(0,0);
			}
		}else{ //指定階層以降のＤＩＶをクリア
			if (timercount >= setStartTime[3] ){
				//マウスが削除対象ＤＩＶ上に乗っていない場合にのみ発動
				if ( parseInt( nowDIV.substr(hostIDname.length ,3)) < layData[1] ){
					DivZonePreset(layData[1],1);
				}
				ClearTimer(timerID);
			}else if(setStartTime[3] ==0){
				ClearTimer(timerID);
			}
		}
	}
}

//アルファフィルタの適応
var alphacount =0
function alphafilter(){
	if (!isJS) return;
	alphacount +=10
	if (isIE5 || isIE6){
		dv_main.style.filter = "alpha(opacity="+alphacount+",style=0)"
	} else if(isNS6 || isNS7){
		div_data.style.MozOpacity= alphacount + "%"
	}
	if (alphacount>=alphaLast) { 
		ClearTimer(a_filter) ;alphacount=0
		if (isIE5 || isIE6){
			dv_main.style.filter = "alpha(opacity="+alphaLast+",style=0)"
		} else if(isNS6 || isNS7){
			div_data.style.MozOpacity= alphaLast + "%"
		}
	}


}

//タイマーの初期化
function ClearTimer(clearid){
	if (!isJS) return;
	if (clearid){
		clearInterval(clearid);timercount = 0;
	}
}

//指定階層(zone)以降のＤＩＶデータのクリア (v2.0)
//mode  0 非表示対象に指定階層を含む / 1 指定階層を含まない
//終了識別子＠を使用した軽量チェックバージョン
function DivZonePreset(zone,mode){
	if (!isJS) return;
	var k=0;
	for (i=0; i<=div_id.length; i++){
		switch (div_id.substr(i,1)){
			case "/":k=i;break; //開始識別子
			case "@":    		//終了識別子
				div_num = div_id.substr(k+1,(i) - (k+1) ) 
				if (parseInt(div_num)  > zone - mode){
					dv = document.getElementById(hostIDname + div_num);
					dv.style.display= "none";
				}
				break;
			default:break;
		}
	}
}

var mousedata=0;
var div_x=0;div_y=0
function mousemove(myEvents){
	if (!isJS) return;

	if (isIE5 || isIE6 || isOP7){ // mouseX ,Y 絶対座標
		mouseX  = window.event.clientX + document.body.scrollLeft; 
		mouseY  = window.event.clientY + document.body.scrollTop; 
		windowX = document.body.clientWidth
		windowY = document.body.clientHeight
	} else if (isNS6 || isNS7 || isMZ1) {
		mouseX  = myEvents.pageX; mouseY  = myEvents.pageY;
		windowX = innerWidth
		windowY = innerHeight
	}

	//マウスがＤＩＶ上から外れた場合の処理
	if (nowDIV =="BODY" && mousedata==1){
		mousedata=0;Hopdiv(0,0,0);
	} else if (nowDIV !="BODY" && mousedata==0){
		mousedata=1;ClearTimer(timerID);
	}

	nowDIVlocation() //現在のマウスの情報を取得

	//ＤＩＶ移動によって自動的に階層以降のＤＩＶを非表示にする
	if (nowDIV != oldDIV) {
		divzone = parseInt( nowDIV.substr(hostIDname.length ,3) )
		//受け渡し情報は +1 加算する
		//これは、閉じるＤＩＶがマウスの現階層より深いものに限るためである
		if (divzone != isNaN) Hopdiv(divzone+1,0,0); //BODY等の数字以外の情報のときは非発動
	}
}

//マウスクリックダウン時の動作
//クリックダウンした場所がＤＩＶでない場合は、ＤＩＶを即時クリア
//（ただし、mousedowncheck = TRUE である場合に限る）
function mousedown(myEvents){
	if (!isJS || !mousedowncheck) return;
	if (nowDIV =="BODY"){ ClearTimer(timerID);DivZonePreset(0,0);}
}


//マウスカーソルの位置がＤＩＶ上にあるかどうかの判定式
//ＤＩＶ情報抽出機能ＩＥ対応
//ブラウザ統合版 v2.20a ファンクション化
//  マウスが相互に重なったレイヤー上である場合は、後検出したＤＩＶ位置を実位置として使用する
var nowDIV="-",oldDIV="-";
function nowDIVlocation(){
	if (!isJS) return;
	oldDIV = nowDIV; nowDIV ="BODY";div_num="";
	for (i=0; i<div_id.length; i++){
		switch (div_id.substr(i,1)){
			case "/": k=i ;break
			case "@": 
				divoffset = document.getElementById(hostIDname + div_id.substr(k+1,(i) - (k+1)));
				ofW = divoffset.offsetWidth;ofH = divoffset.offsetHeight; //オフセット値
				dvY = parseInt(divoffset.style.top);dvX = parseInt(divoffset.style.left);
				if (mouseX >= dvX && mouseY >= dvY && mouseX <= dvX+ofW && mouseY <= dvY+ofH){
					nowDIV = hostIDname + div_id.substr(k+1,(i) - (k+1));
				}
				break;
			default:break;
		}
	}
}



var div_data , div_id="/" ,div_count =0;
var div_lastZone=0,div_checkZone=0;
var div_arrange = new Array()
function startwindow(){
	if (!isJS) return;

	//DIVタグ作成されたオブジェクト情報の取得と格納
	//DIVタグスタイルシートへ初期情報を挿入
	for (i = 0 ; i <= 500; i ++){
		div_data = document.getElementsByTagName('div')[i];

		//DIVが存在し、id識別子が合致し、id識別子の後ろが数字である場合
		if (div_data  && div_data.id.substr(0,hostIDname.length)==hostIDname && !isNaN(parseInt(div_data.id.charAt(hostIDname.length)))){
			//DIV情報を配列へ一時格納する
			div_arrange[i] = div_data.id.substr(hostIDname.length,20)
			//DIV初期値格納 (style情報を優先する)
			dv = document.getElementById(div_data.id);
			if(!dv.style.display)  dv.style.display= "none";
			if(!dv.style.position) dv.style.position = "absolute";
			dv.style.zIndex = parseInt(div_data.id.substr(hostIDname.length,7)) //zIndexにレイヤー階層値を代入

			//DIV最終階層を検出
			div_checkZone = parseInt(div_data.id.substr(hostIDname.length,7))
			if (div_checkZone >= div_lastZone) div_lastZone = div_checkZone;

		} else if (!div_data){ //divを読み終えた場合
			div_count =i
			break; //FOR終了
		}

		if (div_data){
			//ＨＴＭＬ埋め込みされた情報の呼び出しフラグを認識した場合
			div_data.style.display= "none";
			div_data.position = "absolute";
			if (div_data.id.substr(0,8) =="setH_ID@") ComponentsDivData(div_data.id)
		}
	}
	//マウス移動イベントの取得
	if (isJS){
		document.onmousemove = mousemove; //マウス移動
		document.onmousedown = mousedown; //マウスクリック
	}

	//div_idの作成（zIndex階層昇順へ並び替えを行う）
	for(i=0; i<=div_checkZone+1; i++){   //ＤＩＶ最終階層までのループ
		for (k=0 ; k<=div_count-1; k++){ //ＤＩＶ合計数のループ
			if ( parseInt(div_arrange[k]) == i){
				div_id += div_arrange[k] + "@/"
			}
		}
	}
	//status = div_id
	
	div_id+="EOF"
	startwindowcheck=true; //startwindow()が呼び出されましたよ〜
}

//コンポーネント情報引き渡し用ＤＩＶ解析部
checkData=""
function ComponentsDivData(data){
	for (di = 0 ; di <= data.length ; di++){
		if ( data.substr(di,1) == "@" || data.substr(di,1) == "," || data.substr(di,1) == ";"){
			checkData = data.substr(di+1,2)
			for (dk = di+1 ; dk <= data.length ; dk++){ //識別子チェッカー
				if ( data.substr(dk,1) == "=" || data.substr(dk,1) == ":" ) break;
				if ( data.substr(dk,1) == "@" || data.substr(dk,1) == "," || data.substr(dk,1) == ";"){
					 dk=0;break;
				}
			}
			numberData = parseInt(data.substr(dk+1,8))
			if (!isNaN(numberData)){
				switch (checkData){
					case "T1":setStartTime[1] = numberData;break; 
					case "T2":setStartTime[2] = numberData;break; 
					case "T3":setStartTime[3] = numberData;break;
					case "oX":offsetXcheck = numberData;break;
					case "oY":offsetYcheck = numberData;break;
					case "mC":mousedowncheck = numberData;break;
					case "aS":alphaStatus = numberData;break;
					case "aL":alphaLast   = numberData;break;
					case "aT":alphaTimer  = numberData;break;
					case "Fx":firstDIVx   = numberData;break;
					case "Fy":firstDIVy   = numberData;break;
					default:break;
				}
			}
		}
	}
}


//h_script.js//////////////////////////////////////////
//  Copyright(c) 2002-2003 Calm all rights reserved. //
//  フリー配布 商用利用可 事前事後許諾非強制         //
//  詳細は www.calm-web.com へどうぞ。               //
///////////////////////////////////////////2003-02-25//

//上記コメントは削除可です（残しておいてくれると助かりますが...）


