//------------------------------------//
// Info button
//------------------------------------//

var infoBody = null;
var infoButton = null;

// 'i'画像のボタンを作ります
function createInfoButton(body, div, color) {

  // スタイルを設定します
  var backgroundUrl = "file:///System/Library/WidgetResources/ibutton/" + color + "_i.png";
  div.setAttribute("style", "opacity: 0.0; background: url(" + backgroundUrl + ") no-repeat top left;");
  
  // イベントハンドラを設定します
  body.addEventListener("mouseover", infoBodyMouseOver, true);
  body.addEventListener("mouseout", infoBodyMouseOut, true);
  
  // 渡されたノードを保持します
  infoBody = body;
  infoButton = div;
}

// マウスが入ってきたときのイベントハンドラです
function infoBodyMouseOver(event) {

  // フェードインアニメーションを開始します
  infoButtonStartAnimationInDirection(1);
}

function infoBodyMouseOut(event) {
  // フェードアウトアニメーションを開始します
  infoButtonStartAnimationInDirection(0);
}

// アニメーションのためのデータです
var infoAnimator = {

  // fromValue、toValue、currentValueは、'i'画像のopacityを表します
  // opacityの開始値です
  fromValue: 0.0, 
  
  // opacityの最終値です
  toValue: 1.0, 
  
  // opacityの現在値です
  currentValue: 0.0, 
  
  // アニメーションにかかる時間です。単位はミリ秒です
  duration: 500, 
  
  // フェードインかフェードアウトかを示します
  direction: 0, 
  
  // アニメーションの開始時間です
  startTime: 0, 
  
  // アニメーションのフレームレートです
  frameRate: 13, 
  
  // アニメーションで使うタイマーです
  timer: null
};

// フェードイン／アウトアニメーションを開始します
function infoButtonStartAnimationInDirection(direction) {
  if (direction != infoAnimator.direction) {
  
    // 現在のアニメーションを停止します
    infoButtonStopAnimate();
    
    // 開始時間を設定します
    infoAnimator.startTime = (new Date).getTime() - infoAnimator.frameRate;
    
    // opacityの開始値を設定します
    infoAnimator.fromValue = infoAnimator.currentValue;
    
    // フェードインかフェードアウトに合わせて、opacityの最終地を設定します
    direction == 0 ? infoAnimator.toValue = 0.0 : infoAnimator.toValue = 1.0;
    
    // フェードインかフェードアウトかを記憶しておきます
    infoAnimator.direction = direction;
    
    // タイマーをスタートします
    infoAnimator.timer = setInterval("infoButtonStepNextFrame();", infoAnimator.frameRate);
  }
}

// アニメーションを停止します
function infoButtonStopAnimate() {
  if (infoAnimator.timer) {
  
    // タイマーを停止します
    clearInterval(infoAnimator.timer);
    infoAnimator.timer = null;
  }
}

// アニメーションのためのハンドラです
// フェードイン／アウトを行います
function infoButtonStepNextFrame() {

  // アニメーション開始からの経過時間を計算します
  var elapsed = (new Date).getTime() - infoAnimator.startTime;
  if (elapsed < 0) elapsed = 0;
  if (elapsed > infoAnimator.duration) elapsed = infoAnimator.duration;
  
  // 経過時間がdurationを超えている場合、アニメーションを終了します
  if (elapsed >= infoAnimator.duration) {
  
    // アニメーションを停止します
    infoButtonStopAnimate();
    
    // opacityを最終値に設定します
    infoAnimator.currentValue = infoAnimator.toValue;
  }
  
  // アニメーションを行います
  else {
    // 経過時間からopacityの増分を計算します
    var scale = 0.5 - (0.5 * Math.cos(Math.PI * elapsed / infoAnimator.duration));
    infoAnimator.currentValue = infoButtonComputeNextFloat (infoAnimator.fromValue, infoAnimator.toValue, scale);
  }
  
  // 'i'画像のボタンにopacityを設定します
  infoButton.style.opacity = infoAnimator.currentValue;
}

// opacityの増分を計算します
function infoButtonComputeNextFloat (from, to, ease) {
    return from + (to - from) * ease;
}

//------------------------------------//
// Info rollie button
//------------------------------------//

var infoRollieButton = null;

// バックの丸画像ボタンを作ります
function createInfoRollieButton(div, color) {
  // スタイルを設定します
  var backgroundUrl = "file:///System/Library/WidgetResources/ibutton/" + color + "_rollie.png";
  div.setAttribute("style", "opacity: 0.0; background: url(" + backgroundUrl + ") no-repeat top left;");
  
  // イベントハンドラを設定します
  div.addEventListener("mouseover", infoRollieButtonMouseOver, true);
  div.addEventListener("mouseout", infoRollieButtonMouseOut, true);
  
  // 渡されたノードを保持します
  infoRollieButton = div;
}

// マウスが入ってきたときのイベントハンドラです
function infoRollieButtonMouseOver(event) {

  // opacityを設定して、丸画像を表示します
  infoRollieButton.style.opacity = "0.15";
}

// マウスが出ていくときのイベントハンドラです
function infoRollieButtonMouseOut(event) {

  // opacityを設定して、丸画像を隠します
  infoRollieButton.style.opacity = "0.0";
}

// 定期リロード関連（30分毎にリロード）
var lastCheckTime;
var timerID;
var interval = 10*60*1000;


// URLジャンプ
var jmaURI = "http://www.jartic.or.jp/main";
function openWWW() {
	var uri = jmaURI + ".html";

	if (window.widget) {
		widget.openURL(uri);
	} else {
		window.location.href = uri;
	}
}


// 裏を表示します
function showBackside(event) {

  // frontとbackを表すdiv要素を取得します
  var front = document.getElementById("front");
  var back = document.getElementById("back");
  
  // 反転の準備を行うことを、ウィジェットに通知します
  if (window.widget) widget.prepareForTransition("ToBack");
  
  // 表を隠し、裏を表示します
  front.style.display = "none";
  back.style.display = "block";
  
  // 反転を行います
  if (window.widget) setTimeout("widget.performTransition();", 0);
  
  // インフォボタンのバックの丸画像を隠します
  var infoRollie = document.getElementById("infoRollie");
  infoRollie.style.opacity = "0.0";
}

// 表を表示します
function showFrontside(event) {

  // frontとbackを表すdiv要素を取得します
  var front = document.getElementById("front");
  var back = document.getElementById("back");
  
  // 反転の準備を行うことを、ウィジェットに通知します
  if (window.widget) widget.prepareForTransition("ToFront");
  
  // 表を表示し、裏を隠します
  front.style.display = "block";
  back.style.display = "front";
  
  // 反転を行います
  if (window.widget) setTimeout("widget.performTransition();", 0);
}


  // ポップアップメニュー処理
function changeImg(){
	numpic=document.myForm.imgchange.selectedIndex;
	
	if(numpic==0){
		document.myPic.src="http://www.jartic.or.jp/traffic/highway/kousoku/rhp0001.gif";
		
	}else if(numpic==1){
		document.myPic.src="http://www.jartic.or.jp/traffic/highway/kousoku/rhp0014.gif";
		
	}else if(numpic==2){
		document.myPic.src="http://www.jartic.or.jp/traffic/highway/kousoku/rhp0002.gif";
		
	}else if(numpic==3){
		document.myPic.src="http://www.jartic.or.jp/traffic/highway/kousoku/rhp0015.gif";
		
	}else if(numpic==4){
		document.myPic.src="http://www.jartic.or.jp/traffic/highway/kousoku/rhp0016.gif";
		
	}else if(numpic==5){
		document.myPic.src="http://www.jartic.or.jp/traffic/highway/kousoku/rhp0003.gif";

	}else if(numpic==6){
		document.myPic.src="http://www.jartic.or.jp/traffic/highway/kousoku/rhp0004.gif";	

	}else if(numpic==7){
		document.myPic.src="http://www.jartic.or.jp/traffic/highway/kousoku/rhp0005.gif";
		
	}else if(numpic==8){
		document.myPic.src="http://www.jartic.or.jp/traffic/highway/kousoku/rhp0006.gif";

	}else if(numpic==9){
		document.myPic.src="http://www.jartic.or.jp/traffic/highway/kousoku/rhp0007.gif";

	}else if(numpic==10){
		document.myPic.src="http://www.jartic.or.jp/traffic/highway/kousoku/rhp0008.gif";

	}else if(numpic==11){
		document.myPic.src="http://www.jartic.or.jp/traffic/highway/kousoku/rhp0009.gif";

	}else if(numpic==12){
		document.myPic.src="http://www.jartic.or.jp/traffic/highway/kousoku/rhp0010.gif";

	}else if(numpic==13){
		document.myPic.src="http://www.jartic.or.jp/traffic/highway/kousoku/rhp0011.gif";

	}else if(numpic==14){
		document.myPic.src="http://www.jartic.or.jp/traffic/highway/kousoku/rhp0012.gif";

	}else if(numpic==15){
		document.myPic.src="http://www.jartic.or.jp/traffic/highway/kousoku/rhp0013.gif";

	}else if(numpic==16){
		document.myPic.src="http://www.jartic.or.jp/traffic/highway/kousoku/rhp0017.gif";


		  }
}



// 画像リサイズ
//

var ERR_MES = "";

// 初期状態での画像の情報
function classImgInfo()
{
	this.numWidth         = 0;	// 画像の幅
	this.numHeight        = 0;	// 画像の高さ
	this.numMagnification = 0;	// 現在の倍率

	this.Copy = function(cInfo)
	{
		this.numWidth         = cInfo.numWidth;
		this.numHeight        = cInfo.numHeight;
		this.numMagnification = cInfo.numMagnification;
	}
}

// ===== 変数 =================================================

var arrayImgFirstInfo = new Array();


// ===== 関数 =================================================

// 画像の拡大／縮小
//	numMagnification : 倍率
//	strImgId         : イメージのID
//
function ImgResize(numMagnification, strImgId)
{
	if( !document.getElementById )
	{
		alert(ERR_MES);
		return;
	}

	var objImg = document.getElementById(strImgId);

	if( !objImg.removeAttribute )
	{
		alert(ERR_MES);
		return;
	}

	if( numMagnification == 0 )
	{
		return;
	}

	if( !arrayImgFirstInfo[strImgId] )
	{


// 初期状態での「画像の幅と高さ」を保存
		arrayImgFirstInfo[strImgId]                  = new classImgInfo();
		arrayImgFirstInfo[strImgId].numWidth         = objImg.getAttribute("width");
		arrayImgFirstInfo[strImgId].numHeight        = objImg.getAttribute("height");
		arrayImgFirstInfo[strImgId].numMagnification = 1;
	}

	var cImgSize = new classImgInfo();
	cImgSize.Copy(arrayImgFirstInfo[strImgId]);
	if( numMagnification == cImgSize.numMagnification )
	{


// 変更の必要なし
		return;
	}else if( numMagnification != 1 ){


// 倍率1倍以外で現在のサイズと違う場合に、倍率変更後のサイズを計算

		cImgSize.numWidth  = Math.ceil(cImgSize.numWidth * numMagnification);
		cImgSize.numHeight = Math.ceil(cImgSize.numHeight * numMagnification);
		arrayImgFirstInfo[strImgId].numMagnification = numMagnification;
	}
	objImg.setAttribute("width", cImgSize.numWidth);
	objImg.setAttribute("height", cImgSize.numHeight);
	window.resizeTo(cImgSize.numWidth , cImgSize.numHeight);
}

