// 
// 大当たり JavaScript 2006
//
// JavaScript 1.2 の機能だけで動作するように配慮し、
// ブラウザ依存の機能は極力排除しています
//
// このファイルは HTML の <head> 内で以下のように書いてインクルードします。
//		<script language="JavaScript">var isJS12 = false;</script>
//		<script language="JavaScript1.2">isJS12 = true;</script>
//		<script language="JavaScript" src="oatari.js"></script>
//
// 初期化のために body 要素には onload 属性を設定します。	
//		<body onload="InitOatari()">
//
// ページ上に以下のようなフォームが必要です
//		<form id="OatariForm">
//
// そしてこのフォームの配下に以下のコントロールが必要です
//
//	懸賞選択ドロップダウン：		<select id="PrizeSelect" name="PrizeSelect">
//	懸賞情報表示エリア：			<textarea id="PrizeInfoArea" name="PrizeInfoArea" wrap rows="10" cols="40"></textarea>
//	数字入力フィールド：			<input id="InputArea" name="InputArea" size="4">
//	結果表示エリア：				<textarea id="ResultArea" name="ResultArea"	wrap rows="15" cols="40"></textarea>
//	入力回数表示フィールド：		<input id="InputCount" name="InputCount" size="3">
//	当り回数表示フィールド：		<input id="WinCount" name="WinCount" size="3">
//	当りかも回数表示フィールド：	<input id="HitCount" name="HitCount" size="3">
//
//	各コントロールの型とid, name 属性はこのとおりでなくてはなりませんが、
//	表示スタイルは自由に決めることが出来ます
//
//	フォームの配下に、以下の object タグも必要です
//	Netscape では、width, height を 0 にすると動作せず、 1 にすると
//	最大サイズになってしまうので 2 とします。
//
//			<OBJECT ID="MediaPlayer" WIDTH=0 HEIGHT=0
//					CLASSID="CLSID:22D6F312-B0F6-11D0-94AB-0080C74C7E95"
//					STANDBY="Loading Windows Media Player components..."
//					TYPE="application/x-oleobject" VIEWASTEXT>
//				<PARAM NAME="FileName" VALUE="tada.wav">
//			</OBJECT>
//

//
//懸賞情報テーブル
//  ＊当選番号の先頭に「0」（ゼロ）がある場合は、それを取って入力すること。
//
var tables =
[ 
	{
		name: "2007(平成19)年 お年玉年賀はがき",
		prizeList : [
			new PrizeInfo( "1等", "わくわくハワイ旅行,にこにこ国内旅行,ノートPC,DVD＋ホームシアターセット,デジタル一眼レフカメラ+プリンタセット", 6, [157788,457190] ),
			new PrizeInfo( "2等", "地域の特産品小包1個", 4, [5161,7093,7485,9614] ),
			new PrizeInfo( "3等", "お年玉切手シート", 2, [64,79] )
		]
	}
	,
	{
		name: "2006(平成18)年 夏のおたより",
		prizeList : [
			new PrizeInfo( "Ａ賞", "地域の特産品小包1個", 4, [2188,2406,1333] ),
			new PrizeInfo( "Ｂ賞", "地域の特産品小包1個", 3, [50] )
		]
	}
];	

//
// PrizeInfo クラスコンストラクタ
//
function PrizeInfo( name, prize, cDigits, numberList )
{
	var cFullDigits = 6;	//総桁数
	
	this.name = "["+name+"]";
	this.prize = prize;
	
	var prefix = "";
	for( var i=cDigits; i<cFullDigits; i++ )
		prefix += "*";
		
	this.hitNumbers = new Array();
	for( var i=0; i<numberList.length; i++ )
	{
		var num = numberList[i];
		var str = num.toString();
		if( str.length > cDigits )
			alert( name + "の当たり番号は"+cDigits+"桁です:" + str );
		for( var j=str.length; j<cDigits; j++ )
			str = "0" + str;
			
		var hitNumber = new Object();
		hitNumber.num = num;			//当選番号　数値
		hitNumber.str = str;			//当選番号　0 pad した文字列
		hitNumber.wcstr = prefix+str;	//当選番号　* を付けた文字列
		hitNumber.rem100 = num%100;		//下位２桁	数値
		this.hitNumbers[i] = hitNumber;
	}
	this.winIfHit = (cDigits==2)? true:false;
}

//
//グローバル変数
//
var isIE = (navigator.appName.indexOf("Microsoft") != -1);			
var isNN4 = (navigator.appName.indexOf("Netscape") != -1 && navigator.appVersion[0] == '4');	
var isWin = (navigator.platform.indexOf("Win32") != -1 );	

var inputCount = 0;
var winCount = 0;
var hitCount = 0;
var curPrizeList = tables[0].prizeList;

var PrizeSelect;
var PrizeInfoArea;
var InputArea;
var ResultArea;
var InputCount;
var WinCount;
var HitCount;

//
//初期化処理
//
function InitOatari()
{
	PrizeSelect = document.OatariForm.PrizeSelect;
	PrizeInfoArea = document.OatariForm.PrizeInfoArea;
	InputArea = document.OatariForm.InputArea;
	ResultArea = document.OatariForm.ResultArea;
	InputCount = document.OatariForm.InputCount;
	WinCount = document.OatariForm.WinCount;
	HitCount = document.OatariForm.HitCount;
	
	for( var i=0; i<tables.length; i++ )
	{
		var table = tables[i];
		if( table == null )	continue;
		PrizeSelect.options[i] = new Option( table.name );
	}
	PrizeSelect.selectedIndex = 0;

	InitPrizeInfo();

	//各コントロールのイベントハンドラ	
	PrizeSelect.onchange = InitPrizeInfo;	
	InputArea.onkeydown  = OnKeyDown;
	InputArea.onkeypress = OnKeyPress;
	
	PrizeInfoArea.onfocus = RefuseFocus;
	ResultArea.onfocus  = RefuseFocus;
	InputCount.onfocus =  RefuseFocus;
	WinCount.onfocus =  RefuseFocus;
	HitCount.onfocus =  RefuseFocus;
	
	if( !isJS12 )	// HTML の head部分で定義した変数
	{
		InputArea.ResultArea.value = "JavaScript 1.2 以上が必要です。\nこのブラウザでは正しく動作しない\n可能性があります。\n";
	}
	
}

//
//懸賞情報の初期化（懸賞が選択されたときに呼ばれる）
//
function InitPrizeInfo()
{
	curPrizeList = tables[PrizeSelect.selectedIndex].prizeList;
	var info = "";
	for( var i=0; i<curPrizeList.length; i++ )
	{
		var prizeInfo = curPrizeList[i];
		if( prizeInfo == null )		continue;
		info += prizeInfo.name;
		for( var j=0; j<prizeInfo.hitNumbers.length; j++ )
		{
			var hitNumber = prizeInfo.hitNumbers[j];
			info += (" "+hitNumber.str);
		}
		info += ("\n");
		info += (prizeInfo.prize + "\n");
	}
	info += "\n\n[JavaScript版大当たり Ver 1.02]\n";
	PrizeInfoArea.value = info;

	ResultArea.value = "";	
	
	inputCount = 0;
	winCount = 0;
	hitCount = 0;
	UpdateCounters();
	
	//初期フォーカス設定
	InputArea.focus();
}

//
//集計情報の更新
//
function UpdateCounters()
{
	InputCount.value = inputCount;
	WinCount.value = winCount;
	HitCount.value = hitCount;
}

//
//フォーカスを入力コントロールに戻す
//  フォーカスを拒否したいコントロールの onfocus で呼ぶ
//
function RefuseFocus()
{
	InputArea.focus();
}

//キーイベントに関する注意
//　Netscape7 では通常とは逆順にイベントが発生する
//		TextField への入力 -> KeyPress -> KeyDown
//　	したがって、false で返してもキーを無視できない
//

//
//←キーの入力を拒否する
//　入力を受け付けるコントロールの onkeydown で呼ぶ
//
function OnKeyDown( e )
{
	if( isIE )	e = window.event;
		
	var charCode;
	if( isIE )	charCode = e.keyCode;
	else		charCode = e.which;

	if( charCode == 0x25 )	//←キー
	{
		if( isIE )	e.returnValue = false;
		return false;
	}
	else
		return true;
}

//
//キーの入力を処理する（数字キーだけ受付）
//　入力を受け付けるコントロールの onkeypress で呼ぶ
//
function OnKeyPress( e )
{
	if( isIE )	e = window.event;
		
	var charCode;
	if( isIE )	charCode = e.keyCode;
	else		charCode = e.which;
	
	if( charCode >= 0x30 && charCode <= 0x39 )
		AppendChar( charCode );
	else
	{
		InputArea.value = inputStr;
		PlaySound("chord.wav");
	}
		
	if( isIE )	e.returnValue = false;
	return false;
}

//
//数字を２桁ためてから当選をチェックする
//
var inputStr = "";
function AppendChar( charCode )
{
	inputStr += String.fromCharCode(charCode);
	if ( inputStr.length >= 2 )
	{
		ShowResult( inputStr );	
		inputStr = "";	
	}
	InputArea.value = inputStr;
}

//
//当選チェックと結果表示
//
function ShowResult( str )
{
	inputCount++;
	var isAnyHit = false;
	var prefix = str + "　";
	
	for( var i=0; i<curPrizeList.length; i++ )
	{
		var prizeInfo = curPrizeList[i];
		if( prizeInfo == null )		continue;
		
		for( var j=0; j<prizeInfo.hitNumbers.length; j++ )
		{
			var hitNumber = prizeInfo.hitNumbers[j];
			if( hitNumber.rem100 == str )
			{
				isAnyHit = true;
				
				if ( prizeInfo.winIfHit )
				{
					WriteResultLine( prefix+"大当たり　"+prizeInfo.name );
					winCount++;
					PlaySound("tada.wav");
				}
				else					
				{
					WriteResultLine( prefix+"当たり？　"+ hitNumber.wcstr +" なら"+prizeInfo.name );
					hitCount++;
					PlaySound("ding.wav");
				}
			}
		}
	}
	if( !isAnyHit )
		WriteResultLine( prefix+"はずれ" );
	
	UpdateCounters();
}

//
//結果行を表示する
//
function WriteResultLine( resultStr )
{
	var line = resultStr + "\n";
	
	if( isIE && !isWin )	// Mac IE だけは下に追加
		ResultArea.value = ResultArea.value+line;
	else
		ResultArea.value = line+ResultArea.value;
	
}

//
//音を鳴らす
//
function PlaySound( filename )
{
	if ( isIE && OatariForm.MediaPlayer!=null )
		OatariForm.MediaPlayer.FileName = filename
		
	//NetScape では音は鳴らさない。（<enbe> タグも書かない）
	//Netscape6,7 では、MediaPlayer のプラグインはあって音は鳴るが、
	//JavaScript からのコントロールができない。
	//Netscape4 では、JavaScript からのコントロールもできるが
	// Java 経由になるようで、Java Runtime がロードされて
	// 起動に時間がかかる。
}

