//***********************************************************************
// 風船制御

//=======================================================================
// 定数

NUM_ANIMDIV = 9;

//=======================================================================
// 変数

s_tid = null;

// 各 div 毎のデータ
var s_arrAnimObj = new Array();
var s_divContents;
var s_leftContents;

// フレームデータ
var s_time = 0;

//=======================================================================
// 関数定義

// 初期化
function InitBalloon()
{
	// コンテンツ div を取得する
	s_divContents = Util_GetDivFromName('page');
	Uitl_InitDivPos(s_divContents);
	Util_InitDivSize(s_divContents);
		
	// 配列に各 div を入れる
	for(var i = 0; i < NUM_ANIMDIV; i++)
	{
		var div = Util_GetDivFromName('exlink_' + (i + 1));

		// 絶対位置座標に変更する
		div.style.position = "absolute";
		
		// 位置初期化
		Uitl_InitDivPos(div);
		Util_InitDivSize(div);
		
		// div 毎のオブジェクトを作成する
		var obj = new Object();
		obj.m_div = div;
		obj.m_x = Util_GetDivLeft(div);
		obj.m_y = Util_GetDivTop(div);
		obj.m_w = Util_GetDivWidth(div);
		obj.m_h = Util_GetDivHeight(div);
		obj.m_vx = 0;
		obj.m_vy = 0;
		obj.intvl = 0;
		s_arrAnimObj[i] = obj;
	}
	
	switch(s_browser)
	{
	case 1:	// NN6+
		window.addEventListener("mousemove", OnMouseMove, true);
		break;
	case 2:	// NN4
		window.captureEvents(Event.MOUSEMOVE);
		window.onmousemove = OnMouseMove;
		break;
	case 3:	// IE
	case 4: // Opera
	default:
		document.onmousemove = OnMouseMove;
		break;
	}
	
	// 初期値を求めるためにウインドウのリサイズ通知を呼んでおく
	OnResizeWindow();
	
	// アニメーション開始
	Animation();
}

// 後始末
function Cleanup()
{
	// タイマを止める
	if(s_tid)
	{
		clearTimeout(s_tid);
		s_tid = null;
	}
}

// アニメーション
function Animation()
{
	var xContents = Util_GetDivLeft(s_divContents);
	var yContents = Util_GetDivTop(s_divContents);
	var wContents = Util_GetDivWidth(s_divContents);
	var hContents = Util_GetDivHeight(s_divContents);
	
	// バルーンローカル座標に変換
	xContents -= s_leftContents;
	
	// 移動
	for(var i = 0; i < NUM_ANIMDIV; i++)
	{
		var obj = s_arrAnimObj[i];
		var div = obj.m_div;
		
		// 速度反映
		obj.m_x += obj.m_vx;
		obj.m_y += obj.m_vy;
		// 摩擦
		obj.m_vx *= 0.94;
		obj.m_vy *= 0.94;
		
		// コンテンツ div の端で跳ね返る
		if((obj.m_x + obj.m_w) > (xContents + wContents))	{	obj.m_vx = -Math.abs(obj.m_vx);	}
		else if(obj.m_x < xContents)						{	obj.m_vx = Math.abs(obj.m_vx);	}
		if((obj.m_y + obj.m_h)  > (yContents + hContents))	{	obj.m_vy = -Math.abs(obj.m_vy);	}
		else if(obj.m_y < yContents)						{	obj.m_vy = Math.abs(obj.m_vy);	}
		
		// 実座標移動
		var x = obj.m_x + (Math.cos((s_time + (i * 10)) * 0.3) * 1.5) + s_leftContents;
		var y = obj.m_y + (Math.sin((s_time + (i * 10)) * 0.2) * 1.5);
		Util_MoveDivTo(div, x, y);
		
		// インターバル更新
		if(obj.intvl > 0)	{	obj.intvl--;	}
	}
	
	s_time++;
	
	// タイマ設定
	s_tid = setTimeout("Animation()", 50);
}

// ２つの値が近いかどうかを調べる
function IsNear(v1, v2, diff)
{
	return ( (v1 - diff) <= v2 ) && ( v2 <= (v1 + diff) );
}

// ウインドウのリサイズ
function OnResizeWindow()
{
	var wWindow = Util_GetWindowWidth();
	var wContents = Util_GetDivWidth(s_divContents);
	
	// センタリング時のコンテンツ div の左位置
	s_leftContents = (wWindow - wContents) / 2;
	if(s_leftContents < 0)	{	s_leftContents = 0;	}
}

// マウス移動イベントハンドラ
function OnMouseMove(param)
{
	// マウス位置の取得
	var xMouse = 0;
	var yMouse = 0;
	switch(s_browser)
	{
	case 1:	// NN6+
		xMouse = Util_GetClientX(param.clientX);
		yMouse = Util_GetClientY(param.clientY);
		break;
	case 2:	// NN4
		xMouse = Util_GetClientX(param.x);
		yMouse = Util_GetClientY(param.y);
		break;
	case 3:	// IE
	case 4: // Opera
	default:
		xMouse = Util_GetClientX(event.clientX);
		yMouse = Util_GetClientY(event.clientY);
		break;
	}
	
	// バルーンローカル座標に変換
	xMouse -= s_leftContents;
	
	// 準備が出来ていない場合のみ処理
	if(s_arrAnimObj.length > 0)
	{
		// 速度を付加
		for(var i = 0; i < NUM_ANIMDIV; i++)
		{
			var obj = s_arrAnimObj[i];
			
			// マウスが近づいたら逃げる
			var hwObj = (obj.m_w / 2);
			var hhObj = (obj.m_h / 2);
			var xCenter = obj.m_x + hwObj;
			var yCenter = obj.m_y + hhObj;
			var near = 2;
			if(	(obj.intvl == 0) &&
				IsNear(xCenter, xMouse, hwObj + near) && 
				IsNear(yCenter, yMouse, hhObj + near) )
			{
				// 逃げる方向に加速する
				obj.m_vx -= (xMouse - xCenter) * 0.1;
				obj.m_vy -= (yMouse - yCenter) * 0.1;
				// 上限下限
				var SPEED_MAX = 10;
				if(obj.m_vx > SPEED_MAX)		{	obj.m_vx = SPEED_MAX;	}
				else if(obj.m_vx < -SPEED_MAX)	{	obj.m_vx = -SPEED_MAX;	}
				if(obj.m_vy > SPEED_MAX)		{	obj.m_vy = SPEED_MAX;	}
				else if(obj.m_vy < -SPEED_MAX)	{	obj.m_vy = -SPEED_MAX;	}
				// インターバルセット
				obj.intvl = 100;
			}
		}
	}
}

