/*
 *
 */

// プロトタイプ
String.prototype.trim = function() {
return this.replace(/^\s+|\s+$/g, "");
}

/*
 *
 */

// 空白か？
function isBlank(src) {
	if(src == null || src.trim().length == 0) {
		return true;
	}
	return false;
}

// 空白でないか？
function isNotBlank(src) {
	return !isBlank(src);
}


/*
 *
 */

// 半角カナを全角カナに変換
var zen_table = new Array(
		"。", "「", "」", "、", "・", "ヲ", "ァ", "ィ", "ゥ", "ェ",
		"ォ", "ャ", "ュ", "ョ", "ッ", "ー", "ア", "イ", "ウ", "エ",
		"オ", "カ", "キ", "ク", "ケ", "コ", "サ", "シ", "ス", "セ",
		"ソ", "タ", "チ", "ツ", "テ", "ト", "ナ", "ニ", "ヌ", "ネ",
		"ノ", "ハ", "ヒ", "フ", "ヘ", "ホ", "マ", "ミ", "ム", "メ",
		"モ", "ヤ", "ユ", "ヨ", "ラ", "リ", "ル", "レ", "ロ", "ワ",
		"ン", "゛", "゜"
);

function iskana(c)   { return (c >= 65377 && c <= 65439); }
function is_ka_to(c) { return (c >= 65398 && c <= 65412); }
function is_ha_ho(c) { return (c >= 65418 && c <= 65422); }
function convertKanaHan2Zen(src) {
	var i, code, next;
	var str = new String;
	var len = src.length;
	for (i = 0; i < len; i++) {
		var c = src.charCodeAt(i);
		if (iskana(c)) {
			code = zen_table[c - 65377];
			if (i < len - 1) {
				next = src.charCodeAt(i+1);
				if (next == 65438 && c == 65395) {
					code = "ヴ";
					i++;
				} else if (next == 65438 && (is_ka_to(c) || is_ha_ho(c))) {
					code = String.fromCharCode(code.charCodeAt(0)+1);
					i++;
				} else if (next == 65439 && is_ha_ho(c)) {
					code = String.fromCharCode(code.charCodeAt(0)+2);
					i++;
				}
			}
			str += code;
		} else {
			str += src.charAt(i);
		}
	}
	return str;
}

// 全角英数記号を半角に変換
function convertAnsZen2Han(src) {
	var str = new String;
	var len = src.length;
	for (var i = 0; i < len; i++) {
		var c = src.charCodeAt(i);
		if (c >= 65281 && c <= 65374 && c != 65340) {
			str += String.fromCharCode(c - 65248);
		} else if (c == 8217) {
			str += String.fromCharCode(39);
		} else if (c == 8221) {
			str += String.fromCharCode(34);
		} else if (c == 12288) {
			str += String.fromCharCode(32);
		} else if (c == 65507) {
			str += String.fromCharCode(126);
		} else if (c == 65509) {
			str += String.fromCharCode(92);
		} else {
			str += src.charAt(i);
		}
	}
	return str;
}

// 文字列のノーマライズ
// 英数字は半角に
// 半角カナは全角に
function normalizeString(e) {
	// 対象エレメント取得
	var obj = e.target;
	if(obj == null) {
		obj = window.event.srcElement;
	}

	// 半角カナを全角に変換
	var str = convertKanaHan2Zen(obj.value);
	// 全角英数記号を半角に変換
	str = convertAnsZen2Han(str);

	obj.value = str.trim();
}

/*
 * AJax
 */
var xmlhttp = null;
function createXmlHttpRequest() {
	if (window.XMLHttpRequest) {             // Firefox,Opera,Safari,IE7
		return new XMLHttpRequest();
	} else if (window.ActiveXObject) {                 // IE6
		try {
			return new ActiveXObject("Msxml2.XMLHTTP");    // MSXML3
		} catch(e) {
			return new ActiveXObject("Microsoft.XMLHTTP"); // MSXML2まで
		}
	} else {
		return null;
	}
}

function ajaxQuery(url, params, func) {
	//XMLHttpRequestを生成する
	if(!xmlhttp) xmlhttp = createXmlHttpRequest();
	if(!xmlhttp || xmlhttp.readyState == 1
							|| xmlhttp.readyState == 2
							|| xmlhttp.readyState == 3) {
		return;
	}

	xmlhttp.open("POST", url, true);
	xmlhttp.setRequestHeader("content-type", "application/x-www-form-urlencoded;charset=UTF-8");
	xmlhttp.onreadystatechange = function() {
			if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
				func(eval(xmlhttp.responseText));
			}
			document.body.style.cursor = "default";
		}

	// パラメータ
	paramStr = "";
	for(i=0; i<params.length; i++) {
		if(paramStr.length > 0) paramStr += "&";
		paramStr += params[i]["name"] + "="+ params[i]["value"];
	}

	// リクエスト送信
	document.body.style.cursor = "wait";
	xmlhttp.send(paramStr);
}




/*
 *
 */

// イベント設定
function addEvent(elm, type, event) {
	if(elm.addEventListener) {
		elm.addEventListener(type, event, false);
	} else if(elm.attachEvent) {
		elm.attachEvent('on'+type, event);
	} else {
		elm['on'+type] = event;
	}
}

// 初期化
function initControls() {
	for (var i = 0; i < document.forms.length; ++i) {
		for (var f = 0; f < document.forms[i].length; f++) {
			var elm = document.forms[i][f];
			// ノーマライズ
			if(elm.type == "text" || elm.type == "textarea") {
				addEvent(elm, "blur", normalizeString);
			}
		}
	}
}

// 初期化イベント登録
addEvent(window, "load", initControls);
