// インタラクティブスタディ　v1.0 20030508
//
	// ブラウザ判定
	if(document.all&&!document.getElementById){document.getElementById=document.all;}
	// Keyイベント初期化
	window.document.onkeydown = checkCRKey;
	if (document.getElementById) {
		if (document.all){//マウスイベント
			document.onmousedown=mouseDown;
		}else{
			document.onmouseup=mouseDown;}
	}
	// 変数初期化
	var ctrl=0;//Ctrlキー変数の初期化
	var startf=0; //開始可能フラグ
	var stm=-1;
	var stopping=0;//メッセージウェイト用句読点処理変数
	var str2='';
	var str1;
	var nx_url = ""; // 次のＵＲＬ
	var tm = 0; // 回答待ち時間フラグ
	var tmm = 0;// メッセージ提示時間
	var tma = 0;//回答禁止時間
	var apf = 0;// クリック再生フラグ
	var m_7_x = "";   // クリック回答用バッファ
	var msgAf = 0;    // メッセージエリア有無フラグ
	var entf = 0;     // Enter受付フラグ
	var In_no=0;
	var KaiF=0;//クリック回答用禁止フラグ
	// 回答判定メソッド
	function decisionAnswer(mode) {
		if( startf==0 ){	if(stm==0){startf=1;} return false;}//準備が整っていないので受付けない
		if( tma!=0 ){	return false;}// 回答禁止状態では無視
		if( apf!=0 ){	apf=0;audioPlay('');} // クリック再生を止める
		if( tm!=0 ){
			clearTimeout(tm);}
		if( tmm!=0 ){
			clearTimeout(tmm);}
		tm = 0;
		tmm = 0;
		fg = 0;
		fg = document.SharpCAI.setNumberOfQuestions();
		switch( fg ){ // 試行
		case 0: // 回答チェック
		case 5: // メッセージ領域のない問題での回答チェック
		if( mode!=0 ){ document.SharpCAI.setClearTryNo();}
		nx_url = allAnswercolumnTrans();
		clickradio(1);	//メッセージ表示している間は回答不可				
		setUnsetFocusAnswercolumn(); // フォーカスを外す
		if(msgAf==1){ // メッセージエリアがある場合にメッセージ表示する
			if(messageView(document.SharpCAI.getSstV('SPD')*10)==0){
				decisionAnswer(mode);
				return false;
			}
		}
		if( nx_url.match("finished.") ){ // End
			fg=1;
		}
		if( nx_url.match("relogin.") ){ // Errセッション切れ
			nx_url=reloginmsg();
			fg=1;
		}
		if(fg==0 || nx_url.match("Invalid")){
		break;}
		case 1: // 次URLに進む
		if( nx_url.match("relogin.") ){ // Errセッション切れ
			nx_url=reloginmsg();
		}
		if( nx_url.match("finished.") ){ // End
			top.system.finishedCourse();
			break;
		}
		clickradio(1); // 回答不可
		location.replace(nx_url);
		break;
		case 2: // 説明画面用
		userAppletExt();//ユーザ作成アプレットからSST設定
		nx_url = getNextFrame();
		if( nx_url.match("relogin.") ){ // Errセッション切れ
			nx_url=reloginmsg();
		}
		if( nx_url.match("finished.") ){
			top.system.finishedCourse();
			break;
		}
		if( nx_url.match("Invalid") ){
			alert("パスワードが違います。");
			document.pass.word.value="";
			break;
		}
		location.replace(nx_url);
		break;
		default:
		if(fg!=4){
			setAllclearAnswercolumn();}
		clickradio(0);	// 回答許可//回答欄readオンリーフラグをはずすメソッド…メッセージが表示されていない時は記入可
		//メッセージ消去
		replaceHtml('studymsg',' ');
		retrialInit();
		entf = 0;
		break;
		}
		return false;
	}
	function reloginmsg(){
		alert("管理コンピュータとやり取りが出来なくなっています。\n再度ログインからやり直してください。");
		return "finished.";
	}
	//説明画面用次URL
	function getNextFrame() {
		for(i=document.forms.length;i>0;i--){
			if( document.forms[i-1].name=='pass' ){
				break;
			}
		}
		if( i ){	//先生を呼びなさい
			nx_url = document.SharpCAI.getNextFrame(document.pass.word.value);
		}else{	//通常
			nx_url = document.SharpCAI.getNextFrame();}
		return nx_url;
	}
	//メッセージエリアチェック
	function chkMessagecolumn() {
		msgAf=0;
		for(i=document.forms.length;i>0;i--){
			if( document.forms[i-1].name=='messagecolumn' ){
				document.SharpCAI.setMsgArea(true);
				msgAf=1;
				break;
			}
		}
		if( msgAf==0 ){ // メッセージエリアが無いので説明画面エンターを受付可に
			entf=1;}
	}
	// 回答禁止時間の初期化メソッド
	function setAnswerProhibitionTime() {
		t = document.SharpCAI.getAnswerProhibitionTime();
		if ( t>0 ) {
			clickradio(1); // 回答不可
			tma = setTimeout('clickradio(0)', t);
		}
	}
	// 画面内変数設定用メソッド必要な場合はtext.html内のJavaScriptに記述する
	function screenVariable() {
		// 画面内変数を使用しない画面でエラーを出さない為のダミー
	}
	function userAppletIni() {//ユーザアプレットの初期化ダミー
	}
	function userAppletExt() {//ユーザアプレットでSST設定ダミー
	}
	var ln_no;
	function chkQNo(e_name) {
		if(e_name.match('m_9_') || e_name.match('m_10') ){
			n=parseFloat(e_name.substring(e_name.indexOf('_',2)+1))+(parseFloat(e_name.substring(e_name.lastIndexOf('_')+1))-1)+In_no;
			if((parseFloat(e_name.substring(e_name.lastIndexOf('_')+1))-1)==0){
			 ln_no=0;
			 for(mj=0;mj<document.answercolumn.elements.length;mj++){
			  if( document.answercolumn.elements[mj].name.substring(0,e_name.lastIndexOf('_'))==e_name.substring(0,e_name.lastIndexOf('_')) ){
				ln_no++;
			  }
			 }
			}
			if((parseFloat(e_name.substring(e_name.lastIndexOf('_')+1)))==ln_no){
			 In_no += (ln_no-1);
			}
			return (n);
		}
//alert(parseFloat(e_name.substring(e_name.indexOf('_',2)+1)) +":"+In_no);
		return parseFloat(e_name.substring(e_name.indexOf('_',2)+1))+In_no;
	}
	// 全ての回答欄の値をアプレットに渡すメソッド
	function allAnswercolumnTrans() {
		r = "";
		for(fi=document.forms.length;fi>0;fi--){
			if( document.forms[fi-1].name=='answercolumn' ){
				e_name = "";
				no=0;
				for(ej=0;ej<document.answercolumn.elements.length;ej++){
					if( document.answercolumn.elements[ej].name.substring(0,2)!='m_' ){
						continue; //回答欄でない場合はスキップ
					}
					if( e_name==document.answercolumn.elements[ej].name ){
						continue;
					}else{
						e_name = "";}
					no++;
					m_name = document.answercolumn.elements[ej].name.substring(0,4);
					if( m_name=='m_1_' ){
						// ラジオボタン
						e_name = document.answercolumn.elements[ej].name;
						r = document.SharpCAI.judgment(chkQNo(e_name),getRadioBox(document.answercolumn,e_name));
					}else	if( m_name=='m_2_' ){
						// チェックボックス
						e_name = document.answercolumn.elements[ej].name;
						r = document.SharpCAI.judgment(chkQNo(e_name),getCheckBox(document.answercolumn,e_name));
					}else	if( m_name=='m_8_' ){
						// リスト複数
						e_name = document.answercolumn.elements[ej].name;
						r = document.SharpCAI.judgment(chkQNo(e_name),getMulListBox(document.answercolumn.elements[ej]));
					}else	if( m_name=='m_6_' ){
						// 複数行
						e_name = document.answercolumn.elements[ej].name;
						r = document.SharpCAI.judgment(chkQNo(e_name),getMulLine(document.answercolumn.elements[ej].value));
					}else{
						e_name = document.answercolumn.elements[ej].name;
						r = document.SharpCAI.judgment(chkQNo(e_name),document.answercolumn.elements[ej].value);
					}
				}
				break;
			}
		}
		userAppletExt();//ユーザ作成アプレットからSSTを設定する
		//自前アプレット回答部品からの回答値取得
		for(fi=0;fi<document.applets.length;fi++){
			try{	str=document.applets[fi].getCaiAnswer();}
			catch(e){continue;}
//			alert( document.applets[fi].name );
			no++;
			r = document.SharpCAI.judgment(chkQNo(document.applets[fi].name),str);
		}
		if( m_7_x!="" ){
			//クリック回答
			no++;
			r = document.SharpCAI.judgment(no,m_7_x);
			m_7_x = "";
		}
		// 全ての回答欄の情報をアプレットに渡す是正処理
		while (r=="Tray"){
			no++;
			r=document.SharpCAI.judgment(no,"");
		}
		// 回答をアプレットに送信していない場合
		if( no==0 ){
			r = document.SharpCAI.judgment(1,"");
		}
		In_no=0;
		return r;
	}
	// 回答欄チェック
	function chkAnswercolumn() {
		UnAnswerF=0;
		for(fi=document.forms.length;fi>0;fi--){
			if( document.forms[fi-1].name=='answercolumn' ){
				e_name = "";
				for(ej=0;ej<document.answercolumn.elements.length;ej++){
					if( document.answercolumn.elements[ej].name.substring(0,2)!='m_' ){
						continue; //回答欄でない場合はスキップ
					}
					if( e_name==document.answercolumn.elements[ej].name ){
						continue;
					}else{
						e_name = "";}
					m_name = document.answercolumn.elements[ej].name.substring(0,4);
					if( m_name=='m_1_' ){
						// ラジオボタン
						e_name = document.answercolumn.elements[ej].name;
						r = getRadioBox(document.answercolumn,e_name);
						if( r=="")	{
							UnAnswerF=1;
							document.answercolumn.elements[ej].focus();
							break;
						}
					}else	if( m_name=='m_2_' ){
						// チェックボックス
						e_name = document.answercolumn.elements[ej].name;
						r = getCheckBox(document.answercolumn,e_name);
						if( r=="")	{
							UnAnswerF=1;
							document.answercolumn.elements[ej].focus();
							break;
						}
					}else	if( m_name=='m_8_' ){
						r = getMulListBox(document.answercolumn.elements[ej]);
						if( r=="")	{
							document.answercolumn.elements[ej].focus();
							UnAnswerF=1;
							break;
						}

					}else{
						if( document.answercolumn.elements[ej].value=="" ){
							UnAnswerF=1;
							document.answercolumn.elements[ej].focus();
							break;
						}
					}
				}
				break;
			}
		}
		return UnAnswerF;
	}
	// 学習者が再試行時に先に回答した全ての回答欄の値を消す
	function setAllclearAnswercolumn() {
		for(fi=document.forms.length;fi>0;fi--){
			if( document.forms[fi-1].name=='answercolumn' ){
				for(ej=document.answercolumn.elements.length;ej>0;ej--){
					if( document.answercolumn.elements[ej-1].name.substring(0,2)!='m_' ){
						continue; //回答欄でない場合はスキップ
					}
					m_name = document.answercolumn.elements[ej-1].name.substring(0,4);
					if( m_name=='m_1_' ){
						// ラジオボタン
						e_name = document.answercolumn.elements[ej-1].name;
						clearRadioBox(document.answercolumn,e_name);
					}else	if( m_name=='m_2_' ){
						// チェックボックス
						e_name = document.answercolumn.elements[ej-1].name;
						clearCheckBox(document.answercolumn,e_name);
					}else	if( m_name=='m_8_' ){
						// リストボックス複数
						clearMulListBox(document.answercolumn.elements[ej-1]);
					}else{
						document.answercolumn.elements[ej-1].value="";
					}
				}
				break;
			}
		}
		userAppletIni();//ユーザ作成アプレットの初期化
	}
	// 回答欄のフォーカスを外す
	function setUnsetFocusAnswercolumn(){								
		for(i=document.forms.length;i>0;i--){
			if( document.forms[i-1].name=='answercolumn' ){
				for(j=document.answercolumn.elements.length;j>0;j--){
					document.answercolumn.elements[j-1].blur();
				}
				break;
			}
		}
	}
	function userAppletPermission(flag){
		//ユーザ作成アプレット入力許可不許可読出し設定があれば実行
		for(fi=document.applets.length;fi>0;fi--){
			try{	document.applets[fi-1].setCaiPermission(flag);}
			catch(e){continue;}
		}
	}
	// 回答不可、許可の設定
	function clickradio(obj){								
		var flag=obj;
		if( tma!=0 ){
			clearTimeout(tma);}
		tma=0;
		KaiF=obj;
		for(i=document.forms.length;i>0;i--){
			if( document.forms[i-1].name=='answercolumn' ){
				for(j=0;document.answercolumn.elements.length>j;j++){
					if( document.answercolumn.elements[j].name.substring(0,2)!='m_' ){
						continue; //回答欄でない場合はスキップ
					}
					document.answercolumn.elements[j].disabled=flag;	// readオンリーのフラグを設定する
				}
				break;
			}
		}
		userAppletPermission(flag);//ユーザ作成アプレット入力許可不許可読出しflag=0なら許可flag!=0不許可
		if( obj<1 ){//許可時はフォーカスを設定する
			setFocusAnswercolumn();
		}
	}
	// フォーカス設定する回答欄を探してフォーカスを設定する
	function setFocusAnswercolumn() {
		for(i=0;document.forms.length>i;i++){
			if( document.forms[i].name=='answercolumn' ){
				for(j=0;document.answercolumn.elements.length>j;j++){
					if( document.answercolumn.elements[j].name.substring(0,2)!='m_' ){
						continue; //回答欄でない場合はスキップ
					}
					document.answercolumn.elements[j].focus();
					break;//最初を設定したら抜ける
				}
				break;
			}
		}
	}
	// 回答待ち時間の初期化メソッド
	function setInputWaitTimer() {
		t = document.SharpCAI.getInputTimer();
		if (t > 0) {
			tm = setTimeout('decisionAnswer(1)', t);
		}
	}
	//再試行準備メソッド
	function retrialInit() {
		setFocusAnswercolumn();
		setInputWaitTimer();
	}
	// 初期化用メソッド
	function setStartFlg() {
		document.SharpCAI.setBgColor(document.bgColor);
		startf=1;
		clearTimeout(stm);
		stm=0;
		if( tma==0){
			clickradio(0);}// 回答可
	}
	// 初期化用メソッド
	function frameInit() {
		clickradio(1); // 回答不可
		stm = setTimeout('setStartFlg()', 1);
		setAllclearAnswercolumn();
//		userAppletIni();//ユーザ作成アプレットの初期化
		screenVariable();
		window.focus();
		chkMessagecolumn(); // メッセージエリア有無確認
		setAnswerProhibitionTime();
		if( tma==0 && stm==0){//回答待ち時間が無ければフォーカス設定
			setFocusAnswercolumn();}
		setInputWaitTimer();
	}
	// 画面内変数表示メソッド。（レイヤー書き換え）
	function replaceHtml(id,html){
		if(document.getElementById){
			if(document.getElementById(id)){
				document.getElementById(id).innerHTML=html;}
		}else{
			if(document.layers){
				with(document.layers[id].document){open();write(html);close();}}
		}
	}
	// チェックボックス用初期化メソッド
	function getCheckBox( form,name ) {
		max = form.elements.length;
		for(s=j=i=0;i<max;i++){
			if( j==0 )	s = i;
			if( form.elements[i].name==name ){
				j++;}
		}
		if( j ){
			a="";
			for(i=s;i<(s+j);i++){
				if( form.elements[i].checked==true ){
					if( a!="" ){
						a += ",";}
					a += ('"'+form.elements[i].value+'"');
				}
			}
			return a;
		}
		return "";
	}
	// ラジオボタン用初期化メソッド
	function getRadioBox( form,name ){
		max = form.elements.length;
		for(s=j=i=0;i<max;i++){
			if( j==0 ){	s = i;}
			if( form.elements[i].name==name ){
				j++;}
		}
		if( j ){
			ans=0;
			for(i=s;i<(s+j);i++){
				if( form.elements[i].checked==true ){
					ans=1;
					break;
				}
			}
			if( ans ){
				return form.elements[i].value;
			}else{
				return "";}
		}
		return "";
	}
	//
	function getMulLine( str ) {
		max = str.length;
		a = '"';
		for(j=i=0;i<max;i++){
			if(str.charAt(i)=='\n'){
				a += (str.substring(j,i-1)+'"');
				j = i+1;
				if(max>j){	a += ',"';
				}else{	break;}
			}
		}
		if( str.substring(j).length>0 ){
			a += (str.substring(j)+'"');}
//alert( a );
		return a;
	}
	// リストボックス（複数）用初期化メソッド
	function getMulListBox( form ) {
		max = form.options.length;
		a="";
		for(i=0;i<max;i++){
			if( form.options[i].selected==true ){
				if( a!="" ){
					a += ",";}
				a += ('"'+form.options[i].value+'"');
			}
		}
		return a;
	}
	// チェックボックス用clearメソッド
	function clearCheckBox( form,name ) {
		max = form.elements.length;
		for(s=j=i=0;i<max;i++){
			if( j==0 ){	s = i;}
			if( form.elements[i].name==name ){
				j++;}
		}
		if( j ){
			a="";
			for(i=s;i<(s+j);i++){
				if( form.elements[i].checked==true ){
					 form.elements[i].checked=false;
				}
			}
			return;
		}
		return;
	}
	// ラジオボタン用clearメソッド
	function clearRadioBox( form,name ){
		max = form.elements.length;
		for(s=j=i=0;i<max;i++){
			if( j==0 ){	s = i;}
			if( form.elements[i].name==name ){
				j++;}
		}
		if( j ){
			ans=0;
			for(i=s;i<(s+j);i++){
				if( form.elements[i].checked==true ){
					form.elements[i].checked=false;
					break;
				}
			}
			return;
		}
		return;
	}
	// リストボックス（複数）用clearメソッド
	function clearMulListBox( form ) {
		max = form.options.length;
		for(i=0;i<max;i++){
			if( form.options[i].selected==true ){
				form.options[i].selected=false;
			}
		}
		return;
	}
	// クリック回答用
	function ClickAnswer(val) {
	 if(KaiF==0){
		if(startf==1){
		m_7_x = val;
		decisionAnswer(0);
		}
	 }
	}
	// クリック再生 Netscapeは要プラグイン
	function audioPlay(audio){
		apf=1;
		if (navigator.appName == "Netscape") {
			html = "<embed src='"+audio+"' autostart='true' volume='50' width='1' height='1' loop='false' controls='console' type='audio/midi'>";
		} else {
			html = "<bgsound src='"+audio+"' autostart='true' volume='50' width='1' height='1' loop='false' controls='console' type='audio/midi'>";
		}
		top.audio.document.open();top.audio.document.write(html);top.audio.document.close();
	}
	// イメージの差換え（クリック再生で使用）
	function imageChange(id,html) {
		replaceHtml(id,html);
	}
	// クリック描画 Netscapeは要プラグイン
	function execWinObject(title,img) {
		window.open(img, title);
	}
	// enter key 確認
	function checkCRKey(evt) {
		if( startf==0 ){	return false;}//準備が整っていないので受付けない[Enter]も無効にする
		var a=0;
		if(navigator.appName.charAt(0)!='N'){
			// IE用
			k = event.keyCode; 
			a = event.altKey; 
		}else{
			// NN6用
			k = evt.which;
			a = evt.altKey; 
		}
		if(k==36 && a==true){
			alert( "[Alt]+[Home]は使えません" );
			return false;
		}
		if(a==true)	return false;
		if(k==17){//Ctrl
			ctrl=k;
		}else if( k==13 ){ // エンターなら次へ
			if(document.activeElement.name!=null){//説明画面やクリック回答のみの画面は該当しない
			if(document.activeElement.name.substring(0,4)=='m_6_'){	return true;}//複数入力欄なら判定しない
			if(chkAnswercolumn()>0){//未回答エリアあり！！フォーカスを移動して
				return false;
			}}
			decisionAnswer(0); // ダブル読出しになるので外した。return でsubmitされる
			return false;
		}else if(k==8){//BS
			//テキストボックス以外は効かない様にする。（戻るになるから）
			var ele = document.activeElement.type;

			if(ele==null || !(ele.substring(0,4)=='text' || ele.substring(0,4)=='pass')){
				event.keyCode=0;
				return false;
			}
		}else if(k==82 && ctrl==17){
			event.keyCode=0;
			return false;
		}else if(k==116){//F5
			event.keyCode=0;
			return false;
		}else{
			ctrl=0;
		}
	}
	function setMessageViewTime(){
		entf=1;
		t = document.SharpCAI.getMessageViewTimer();
		if (t > 0) {
			tmm = setTimeout('decisionAnswer(0)', t);
		}
		window.focus();
	}
	function messageView(w){
		startf=0;
		str1 = document.SharpCAI.getMessage();
		if( w>50 ){str2='';//初期化
			tma=1;//メッセージ表示終わるまでは次に行かないようにする為
			startWaitMsg();//表示開始まで間が開くので最初に呼ぶ
			timerIDtype = setInterval('startWaitMsg()',w);
		}else{
			replaceHtml('studymsg',str1);
			setMessageViewTime();
		}
		startf=1;
		return str1.length;
	}
	function startWaitMsg(){
		if(stopping>0){stopping--;}
		else{
			if(str1.charAt(0)=='<'){
				var i = str1.indexOf('>',0)+1;
				str2+=str1.substring(0,i);
				str1 = str1.substring(i);
			}else{
				str2+=str1.charAt(0);
				switch(str1.charAt(0)){
					case "。":stopping=12;break;
					case "、":stopping=6;break;
					case "！":stopping=15;break;
					case "？":stopping=15;break;
					case "　":stopping=7;break;
					case ".":stopping=12;break;
					case ",":stopping=6;break;
					case "!":stopping=15;break;
					case "?":stopping=15;break;
					case " ":stopping=2;break;
				}
				str1=str1.substring(1);
			}
		}
		replaceHtml('studymsg',str2);
		if(str1==''){
			clearInterval(timerIDtype);str2='';
			tma=0;//次へ進んでも良いようにフラグを落とす。
			setMessageViewTime();
			return false;
		}
	}
function mouseDown(e){
	if (document.all) {//IE
		if (event.button == 2 || event.button == 3){
			window.alert("左ボタンをクリックしてね");
			return false;
		}
	} else {//NN
		if (e.which == 3){
			window.alert("左ボタンをクリックしてね");
			return false;
		}
	}
}
