///////////////////////////////////////////////////////////////////////////////
//                    PCH View script
//                                          (C)ＳＩＮ (sin@vc-net.ne.jp)
//
// v1.00 2002/01/26: pchview()関数による再生を実装
// v1.01 2002/05/15: 速度指定しつつキャンバスサイズを省略可能に変更
// v1.10 2002/05/15: pchform()/pchformset()で任意ファイルの再生を実装
// v1.11 2002/06/15: pchformで固有フォーム名を使わないように仕様変更
// v1.20 2002/07/20: デフォルトをPCHViewer.jar側に変更(汎用性重視)
//                 : 速度変更フォームのON/OFF設定追加
//                 : 速度変更フォームを展開表示型に変更
//                 : 速度変更フォームを英字表記化(文字化け(消極的…)対策))
//                 : pchformの速度指定をtext/selectから選択可能に対応
//                 : BODYタグ内容を設定可能に対応
// v1.30 2003/03/16: Layer表示ON/OFF機能を搭載
// v1.40 2003/04/05: PCHViewer.jarとPaintBBS.jarの組み合わせに対応
// v1.50 2003/04/05: PCHファイルのDownloadリンク表示に対応
// v1.51 2003/04/05: NNおよびOperaで速度変更が動作しなかったバグ修正
//
// v2.00 2003/11/11: ShiPainter(SPCH)対応
//                 : アプレット別ディレクトリ設置に対応
//                 : 画像並列表示に対応
//                 : 再生ウインドウのラベル表示機能を追加
// v2.01 2004/02/06: pchformをファイル参照対応
//                 : フル記述で動作させると以降はデフォルト値が変わるバグ修正
//
///////////////////////////////////////////////////////////////////////////////
//--------------------------- 設定項目 ----------------------------------------

sii_viewer = 1;			// 0:再生にPaintBBS.jarを使う
				// 1:PCHViewer.jar(ShiPainter対応版)を使う
				// 2:PCHViewer.jar(旧)とMgLine.zipを使う
				// 3:PCHViewer.jar(旧)とPaintBBS.jarを使う

sii_width = 300;		// 横幅デフォルト値
sii_height= 300;		// 縦幅デフォルト値
sii_speed = 0;			// 再生スピードデフォルト値
sii_layer = 3;			// SPCHレイヤー数デフォルト値
sii_ext = '.spch';		// 拡張子省略時の補完拡張子(.pch / .spch)

speedfunc = 1;			// 再生速度切替フォームを表示する(0:off 1:on)
layerfunc = 1;			// Layer表示切替フォームを表示する(0:off 1:on)
downfunc  = 0;			// ファイルDownloadリンクを表示する(0:off 1:on)

fileform  = 0;			// pchformのファイル名入力方法(0:入力 1:参照)
speedform = 0;			// pchformの速度入力方法(0:入力 1:選択)

htmltitle = 'アニメ再生';		// 再生ウインドウのタイトル文字列
htmlbody = 'bgcolor="#cccccc"';		// 再生ウインドウのBODYタグの中身
htmllabel = '';				// 再生ウインドウのラベル文字列

appdir = '';			// アプレット設置ディレクトリ(末尾に / 必須)

//------------------------- 設定項目ここまで ----------------------------------
//-----------------------------------------------------------------------------

cr = "\n";
speedlist = 
  '<option value="-1">(-1)Very Fast</option>' + cr
+ '<option value="0" >　|</option>' + cr
+ '<option value="1" >(&nbsp;1)Fast</option>' + cr
+ '<option value="3" >　|</option>' + cr
+ '<option value="5" >(&nbsp;5)Middle</option>' + cr
+ '<option value="10">　|</option>' + cr
+ '<option value="20">(20)Slow</option>' + cr
+ '<option value="40">　|</option>' + cr
+ '<option value="99">(99)Very Slow</option>' + cr;
ff = '<font face="Osaka, Impact, Arial Black" size="2">';
fr = '</font>';

//-------------------------------------
function pchinit(pch) {
	spch_mode = (pch.match(/\.spch$/i))? 1: 0;
	if(spch_mode) { sii_viewer = 1; }

	if(sii_viewer == 0) {
	// 通常の"PaintBBS.jar"を用いる場合
		sii_code = 'pbbs.PaintBBS.class';
		sii_archive = appdir + 'PaintBBS.jar';
		appaddHeight = 0;
	} else if(sii_viewer == 1){
	// PCH再生専用の"PCHViewer.jar"(ShiPainter対応版)を用いる場合
		sii_code = (spch_mode)	? 'pch2.PCHViewer.class'
					: 'pch.PCHViewer.class';
		sii_archive = appdir + 'PCHViewer.jar';
		appaddHeight = 26;
	} else if(sii_viewer == 2){
	// PCH再生専用の"PCHViewer.jar"(旧版)を用いる場合
		sii_code = 'pch.PCHViewer.class';
		sii_archive = appdir + 'PCHViewer.jar,' + appdir + 'MgLine.zip';
		appaddHeight = 26;
	} else {
	// "PCHViewer.jar"と"PaintBBS.jar"を用いる場合
		sii_code = 'pch.PCHViewer.class';
		sii_archive = appdir + 'PCHViewer.jar,' + appdir + 'PaintBBS.jar';
		appaddHeight = 26;
	}
	codebase = './';

	if(speedfunc == 1) {		// 速度切り替えフォーム
		htmlspeed
		= '<script language="JavaScript">' + cr
		+ '<!--' + cr
		+ 'function setSpeed(s){' + cr
		+ '	var speed = eval(s.options[s.selectedIndex].value);' + cr
		+ ((sii_viewer)
		  ? '	document.paintbbs.setSpeed(speed);'
		  : '	document.paintbbs.speed = speed;') + cr
		+ '}' + cr
		+ '//-->' + cr
		+ '</script>' + cr
		+ ff + 'SPEED' + fr + '<br>' + cr
		+ '<select class=button name="speed" size="9"'
		+ ' onchange="setSpeed(this)">' + cr
		+ speedlist + '<br></select><br>' + cr;
	} else {
		htmlspeed = '';
	}

	if(layerfunc == 1 && sii_viewer >= 1) {	// レイヤ切り替えフォーム
		htmllayer
		= '<script language="JavaScript">' + cr
		+ '<!--' + cr
		+ 'function setLayer(n, s){' + cr
		+ '	var v = (s.checked)? 0xff: 0;'+ cr
		+ '	document.paintbbs.setVisit(n, v);' + cr
		+ '}' + cr
		+ '//-->' + cr
		+ '</script>' + cr;
		var lc = (spch_mode)? spch_layer: 2;
		for(i = lc - 1; i >= 0; i --) {
			var d = ff + 'Layer ' + i + ' DISP&nbsp;' + fr + cr
			+ '<input name="layer' + i + '" type=checkbox checked'
			+ ' onclick="setLayer(' + i + ', this)"><br>' + cr;
			htmllayer += d;
		}
	} else {
		htmllayer = '';
	}

	htmlclose = ff + '<a href="javascript:window.close()">[close]</a>' + fr + cr;

	htmltop = '<html>' + cr
		+ '<head><title>' + htmltitle + '(' + pch + ')' + '</title>' + cr
		+ '<body ' + htmlbody + '><center>' + htmllabel + cr;
	htmlbtm = '<p>' + cr + htmlclose + '</center></html>';
}
//-----------------------------------------------------------------------------
function pchforminit() {
	pch_form = '<form name="PCHFORM" onsubmit="pchform(this)">' + cr
		+ '■filename'
		+ ((fileform == 0)
		? '<input class=button type="text" name="filename">'
		: '<input class=button type="file" name="filepath">' +
		  '<input type="hidden" name="filename">')
		+ '■' + cr
		+ '<input class=button type=submit value="アニメ再生"><br>' + cr
		+ 'width:<input class=button type=text name="width" size="4" value="' + sii_width +'">' + cr
		+ 'height:<input class=button type=text name="height" size="4" value="' + sii_height + '">' + cr
		+ 'layer:<input class=button type=text name="layer" size="2" value="' + sii_layer + '">' + cr
		+ ((speedform == 0)
		? 'speed(-1〜99):<input class=button type=text name="speed" size="2" value="' + sii_speed + '">'
		: 'speed:<select class=button name="speed">' + speedlist + '</select>')
		+ cr + '</form>' + cr;
}
//-------------------------------------
function pchview(pch) {
	if(pch.indexOf('.') == -1) {
		pch = pch + sii_ext;
	}
	var image = '';
	var width  = sii_width;
	var height = sii_height;
	var speed  = sii_speed;
	spch_layer = sii_layer;
	var i, j;
	j = 0;
	for(i = 1; i < pchview.arguments.length; i ++) {
		var p = pchview.arguments[i];
		if(image == '' && p.toString().indexOf('.') >= 0) {
			image = p;
			continue;
		}
		if(isNaN(p)) {
			htmllabel = p;
			continue;
		}
		j ++;
		var n = parseInt(p);
		if(j == 1) { width  = (n > 0)? n: width; }
		if(j == 2) { height = (n > 0)? n: height; }
		if(j == 3) { speed  = n; }
		if(j == 4) { spch_layer  = (n > 0)? n: spch_layer; }
	}

	pchinit(pch);

	var winwidth = width + 200 + ((image)? width: 0);
	var winheight = height + 120;
	var appwidth = width;
	var appheight = height + appaddHeight;

	var win = window.open('', 'pch'
		, "width=" + winwidth
		+ ",height=" + winheight
		+ ",resizable=yes"
		+ ",menubar=no"
		+ ",status=yes");
	var appstr = 
		'<APPLET code="' + sii_code + '"'
		+ ' codebase="' + codebase + '"'
		+ ' NAME="paintbbs"'
		+ ' width=' + '"' + appwidth + '"'
		+ ' height=' + '"' + appheight + '"'
		+ ' archive="' + sii_archive + '" MAYSCRIPT>' + cr
		+ ((spch_mode)
		? '<param name="res.zip" value="' + appdir + 'res/res.zip">' + cr
		+ '<param name="tt.zip" value="' + appdir + 'res/tt.zip">' + cr
		: '')
		+ '<param name=image_width value="' + width + '">' + cr
		+ '<param name=image_height value="' + height + '">' + cr
		+ '<param name=viewer value="true">' + cr
		+ '<param name=pch_file value="' + pch + '">' + cr
		+ '<param name=speed value="' + speed + '">' + cr
		+ '<param name="buffer_canvas" value="false">' + cr
		+ '</APPLET>' + cr;
	var speedselect = (speedfunc == 0)? ''
		: '<script language="javascript">' + cr
		+ '<!--' + cr
		+ 'var s = document.funcmenu.speed;' + cr
		+ 'for(i = 0; i < s.options.length; i ++) {' + cr
		+ '	if(eval(s.options[i].value) >= ' + speed + ') {' + cr
		+ '		s.options[i].selected = true; break;' + cr
		+ '	}' + cr
		+ '}' + cr
		+ '//-->' + cr
		+ '</script>' + cr;
	var download = (downfunc == 0)? ''
		: ff + '<a href="' + pch + '">[PCH DOWNLOAD]</a>' + fr + cr;

	win.document.write(htmltop + '<table border=0><tr>' + cr
		+ ((image)? '<td valign="top"><img src="' + image + '"></td>': "")
		+ '<td>' + appstr + '</td><td>' + cr
		+ '<form name="funcmenu">' + htmlspeed + htmllayer + '</form>'
		+ speedselect + download + '</td></tr></table>' + htmlbtm);
	win.document.close();
}

function pchform(form){
	if(form.filepath) {
		var path = form.filepath.value;
		if(navigator.userAgent.indexOf("Mac") >= 0 && path.indexOf(":") >= 0) {
			path = path.split(":"); path = path.join("/");
			if(path.indexOf("\"") == 0) { path = path.substr(1); }
		}
		path = "file://" + ((path.indexOf("/") == 0)? "": "/") + path;
		form.filename.value = path;
	}
	pchview(form.filename.value,
		parseInt(form.width.value), parseInt(form.height.value),
		parseInt(form.speed.value), parseInt(form.layer.value) );
}

function pchformset() {
	pchforminit();
	document.open();
	document.write(pch_form);
	document.close();
}
