
//-------------------------------------------------------------
// 日付の自動補完
//-------------------------------------------------------------
function onDateChanged(dt){
	if (dt.value.length == 0){
		return "";
	}
	// セパレータ、不正データチェック
	var ret = dt_format(dt.value);
	if (ret == false || ret == "" || ret == "m" || ret == "d" ){
		return fieldError("「"+ dt.value +"」は日付として不正です。\n「年/月/日」「月/日」「日」のみのいずれかで正しい日付を指定してください。", dt);
	}
	dt.value = ret;
}

//-------------------------------------------------------------
// 日付をフォーマットする
//-------------------------------------------------------------
function dt_format(dt){
	if (!dt || dt.length == 0){
		return "";
	}

	var sep = "/";
	var sizeYear = 4;
	var opt = "i";
	var y;
	var m;
	var d;

	var today = new Date();
	if (dt.match(sep) != null){ // セパレータあり
		var ar = dt.split(sep);
		if (opt != "i"){ // 挿入以外なら削除
			sep = "";
		}
		if (ar.length == 3){
			y = parseInt(ar[0],10);
			m = parseInt(ar[1],10);
			d = parseInt(ar[2],10);
		}else{
			y = today.getFullYear();
			m = parseInt(ar[0],10);
			d = parseInt(ar[1],10);
		}
	}else{ // セパレータなし
		if (opt == "r"){ // 削除なら削除
			sep = "";
		}
		var len = dt.length;
		if (len <= 2){
			y = today.getFullYear();
			m = today.getMonth() + 1;
			d = parseInt(dt,10);
		}else if (len == 4){
			y = today.getFullYear();
			m = parseInt(dt.substr(0,2),10);
			d = parseInt(dt.substr(2,2),10);
		}else if (len == 6){
			y = parseInt(dt.substr(0,2),10);
			m = parseInt(dt.substr(2,2),10);
			d = parseInt(dt.substr(4,2),10);
		}else if(len == 8){
			y = parseInt(dt.substr(0,4),10);
			m = parseInt(dt.substr(4,2),10);
			d = parseInt(dt.substr(6,2),10);
		}
	}

	if (y < 100){
		y += (y < 70 ? 2000 : 1900);
	}

	var endDay = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
	if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)){
		endDay[2] = 29;
	}
	if (!(m >0 && m < 13)){
		return "m";
	}
	if (!(d >0 && m < 32)){
		return "d";
	}else if (d > endDay[m]){
		return "d";
	}

	if (sizeYear == 2){
		y = parseInt(y.toString(10).substr(y.toString(10).length-2,2),10);
	}
	return fill_zero(y,sizeYear,"0","f") + sep + fill_zero(m,2,"0","f") + sep + fill_zero(d,2,"0","f");
}

//-------------------------------------------------------------
// 数値の桁数をそろえる
// n：数値
// w：桁数
// c：埋め込み文字（"0", " ", ...）
// z：ゼロ書式 "n"：何も表示しない、"f"：桁数分0で埋めて表示、"r"：右寄せで0を表示する
//-------------------------------------------------------------
function fill_zero(n, w, c, z){
	n = n.toString(10).replace(/[\,\-\ ]/g,"");
	if (isNaN(n)){
         return n;
	}
	if (n == 0){
		if (z == "n"){
			return "";
		}else if (z == "f"){
			c = "0";
		}else if( z == "r" ){
			c = " ";
		}
	}

	s = (n==0 ? "0" : n.toString(10));
	if (c.substr(1,1) == ","){
		s = ins_comma(s);
	}
	if (c.substr(1,1) == ","){
		c = ' ';
	}

	cnt = w - s.length;
	for (   ; cnt>0; cnt--){
		s = c+s;
	}
	return s;
}

//-------------------------------------------------------------
// エラー項目に関するアラート表示とフォーカス設定を行う
//-------------------------------------------------------------
function fieldError(msg, obj){
	alert(msg);
	if (obj.type.match("text") != null){
		obj.value = '';
	}
	document.getElementById(obj.id).focus();
	return false;
}


