// -*- coding: utf-8; -*-
// $Id: ajax.js,v 1.11 2009/02/28 12:50:58 isao Exp $
// misimaServlet Ajax control
// 2007(c) isao yasuda, All Rights Reserved.
var req;
// misima 変換処理を実行する
function misimaconvert() { 
	// 対象テキストを取り出す
	var it  = document.getElementById("obj").value;
	if (it.length == 0) {
		alert("対象テキストを指定してください");
		return;
	}
	// XMLHttpRequest オブジェクトを生成する
	if (window.XMLHttpRequest) { 
		req = new XMLHttpRequest(); 
	} else if (window.ActiveXObject) { 
		req = new ActiveXObject("Msxml2.XMLHTTP"); 
		if (!req) {
			req = new ActiveXObject("Microsoft.XMLHTTP"); 
		}
	} else {
		alert("このブラウザではサービスを利用できません");
		return;
	}
	// misima オプション + テキスト(改行文字変換) で電文を作成する
	var ps = parameter();
	var pt = /-x /;
	var le = "";
	if (pt.test(ps)) {
		le = it.replace(/\r?\n/g, " :#;~" );
	} else {
		le = it.replace(/\r?\n/g, ":#;~");
	}
	var ss  = "<misima_param>" + ps + "</misima_param>" + le;
	// レングスチェック
	if (!lencheck(ss)) {
		delete req;
		return;
	}
	// POST メソッドでクエリーを送信し，コールバックを非同期で待機する
	var url = "/misimaservlet/convert";
	document.getElementById("running").innerHTML = "misima 処理中...";
	req.open("POST", url, true); 
	req.setRequestHeader("content-type",
						 "application/x-www-form-urlencoded; charset=UTF-8");
	req.onreadystatechange = callback; 
	req.send("obj=" + encodeURI(ss));
}
// misima オプションを組み立てる
function parameter() {
	var params = "-q";
	// 旧字/旧仮名/用字/単純変換
	switch (document.getElementById("bopt").selectedIndex) {
	case 0:  params = params + " -kyit -s"; break;
	case 1:  params = params + " -kyt -s";  break;
	case 2:  params = params + " -kt -s";   break;
	case 3:  params = params + " -t -s";    break;
	default: break;
	}
	// 旧字変換 JIS 第一・第二 / Unicode
	if (document.getElementById("jopt").checked) {
		params = params + " j";
	} else {
		params = params + " c";
	}
	// TeX 変換
	if (document.getElementById("topt").checked) {
		params = params + " -x kuit -g";
	}
	// 仮名反転
	if (document.getElementById("nopt").checked) {
		params = params + " -n";
	}
	return params;
}
// レングスチェック
function lencheck(pstr) {
	var esc = "";
	var estr = "";
	var count = 0;
	var max = 8000;
	for (i = 0; i < pstr.length; i++)	{
		esc = escape(pstr.charAt(i));
		if (esc.length < 4) {
			count++; 
		} else {
			if (esc.substr(2, 4) >= "0800") 
				count += 3;
			else 
				count += 2;
		}
		// estr += esc;
	}
	if (count > max) {
		alert("入力制限値 " + max + " バイトを越えています。\n" +
			  "全角 (漢字・仮名) " + Math.floor((max-56)/3) + 
			  " 文字以内で入力してください。\n" +
			  "このとき改行文字は 4 文字扱いとなっています。\n" +
			  "入力制限値にはオプション文字数も含まれます。");
		return(false);
	}
	return(true);
}
// Ajax コールバック
function callback() {
    if (req.readyState == 4) {
		if (req.status == 200) {
			var res = req.responseText.replace(/</g, "&lt;");
			res = res.replace(/>/g, "&gt;");
			res = res.replace(/:#;~/g, "<br />");
			document.getElementById("out").innerHTML = res;
			document.getElementById("running").innerHTML = "";
		} 
    }
}
// 入力テキストをクリアする
function cleartxt() {
    document.getElementById("obj").value=""; 
}
// 入力テキストエリアにカーソルを位置づける
function focusIn() { 
    document.getElementById("obj").focus();
}
// オプションを Cookie に保存する
function savecookie() {
	// 要素データを "id:値, ..." 形式で取り出す
	var opts = "misimaopts=bopt:";
	opts += document.getElementById("bopt").selectedIndex + ",topt:";
	opts += document.getElementById("topt").checked + ",jopt:";
	opts += document.getElementById("jopt").checked + ",nopt:";
	opts += document.getElementById("nopt").checked + ";expires=";
	// expire date を生成する
	var expd = new Date();
	expd.setFullYear(expd.getFullYear() + 10);
	opts += expd.toGMTString();
	// cookie に保存する
	document.cookie = opts;
}
// Cookie を読み出してオプションにセットする
function readcookie() {
	// Cookie 文字列をオプション配列に分割する
	var mc  = document.cookie;
	var stp = mc.indexOf("=", 0) + 1;
	var art = mc.substr(stp, mc.length - stp);
	var ar  = art.split(",");
	// オプションに応じて値をセットする
	for (i=0; i<ar.length; i++) {
		var optp = ar[i].split(":");
		if (optp[0] == "bopt") {
			document.getElementById(optp[0]).selectedIndex = optp[1];
		} else {
			document.getElementById(optp[0]).checked
				= (optp[1] == "true") ? true : false;
		}
	}
}
// Cookie を削除する．
function delcookie() {
	document.cookie = "misimaopts=;expires=" 
		+ (new Date("Jan 1, 1970")).toGMTString();
}
// テキスト表示・非表示を切替る
function show_contents(layer) {
	var elml = document.getElementById("layer_" + layer);
	if(elml.className == "close") {
		elml.style.display = "block";
		elml.className = "open";
	} else {
		elml.style.display = "none";
		elml.className = "close";
	}
}
