﻿/*****************************************************
これは乳幼児の発育状態を知る目安であるカウプ指数を計算し記録するプログラムです
注意点としては「判定結果」はあくまでも「目安」であるということ！
たとえ「太りすぎ」となっても実際は５歳未満の場合肥満の判定はできないそうです
また出産直後は通常「やせすぎ」であり、その後急速に体重が増加しますので
生後３ヶ月以内の判定は無視してください
少々太ったりやせたりしても健康で元気ならよいのではないでしょうか・・・

インターネットコミュニティ　やまねこ　作
「カウプ指数(KAUP)計算フォーム　ＤＸ」
このプログラムはフリーウェアです、ご自由にお使いください
この表示を消さなければ転載もＯＫです
ご意見はメールにてお気軽にどうぞ！
www.cityjp.com
www.internetcommunity.jp
webmaster@cityjp.net

長男誕生をきっかけに作ったカウプ指数計算フォームも２年半が経ち
この度、長女が生まれましたのでデラックス版を開発し
計算結果を記録できるようにしました
2004/04/26

追記（アロエベラウェブショップ）
製作者様の許可を得て、HTML記述部分のjavascriptを
外部ファイルに変更しています。（一部オブジェクト名も変更）
2008/03/22
*****************************************************/

//カウプ指数計算
function Keisan(Ovj01){
	if (	!Ovj01.Shintyou.value.match(/[^0-9.]/)
		&& Ovj01.Shintyou.value.match(/[0-9.]/)
		&& !Ovj01.Taijyu.value.match(/[^0-9]/)
		&& Ovj01.Taijyu.value.match(/[0-9]/)){
		var S = parseFloat(Ovj01.Shintyou.value);
		var T = parseFloat(Ovj01.Taijyu.value);
		var C = parseInt(((T/(S*S)*1000)+.5)+'')/100;
		var MSG = '';
		if (C < 13)			MSG = 'やせすぎ';
		else if (C >= 13 && C < 15)	MSG = 'やせぎみ';
		else if (C >= 15 && C < 19)	MSG = '標準';
		else if (C >= 19 && C < 22)	MSG = '太りぎみ';
		else if (C >= 22)		MSG = '太りすぎ';
		else				MSG = 'エラー';
		Ovj01.KaupValue.value = C;
		Ovj01.KaupHantei.value = MSG;
	} else alert('エラー\n「身長」「体重」のいずれかが無効です');
}

//クッキー保存日数
var ReserveDay = 365;

//クッキー取得処理
function getCookie(cName){
	var Cookies = document.cookie.replace(/ /g,'');
	var Cookie = Cookies.split(';');
	var Ret_C = '';
	for (i in Cookie){
		if (Cookie[i].indexOf('=') < 0){
			Cookie[i]+='=';
		}
		Chop_C = Cookie[i].split('=');
		if (Chop_C[0] == escape(cName)){
			Ret_C = unescape(Chop_C[1]);
			break;
		}
	}
	return Ret_C;
}

//クッキー登録処理
function setCookie(pName,pValue){
	if(pValue != null){
		var setDay = new Date();
		setDay.setTime(setDay.getTime() + (ReserveDay * 86400000));
		expDay = setDay.toGMTString().replace(/UTC/,'GMT');
		document.cookie = escape(pName) + '=' + escape(pValue) + ';expires='+expDay;
		return true;
	}
	return false;
}

//記録保存
function SaveKaup(Ovj02){
	if (	!Ovj02.Now.value.match(/[^0-9-]/)
		&& Ovj02.Now.value.match(/[0-9-]/)
		&& Ovj02.Now.value.length == 10
		&& !Ovj02.KaupValue.value.match(/[^0-9.]/)
		&& Ovj02.KaupValue.value.match(/[0-9.]/)
		&& !Ovj02.Shintyou.value.match(/[^0-9.]/)
		&& Ovj02.Shintyou.value.match(/[0-9.]/)
		&& !Ovj02.Taijyu.value.match(/[^0-9]/)
		&& Ovj02.Taijyu.value.match(/[0-9]/)){
		var TempCookie = getCookie('KaupRireki');
		setCookie('KaupRireki',getCookie('KaupRireki')+Ovj02.Now.value+','+Ovj02.Shintyou.value+','+Ovj02.Taijyu.value+','+Ovj02.KaupValue.value+'\n');
		if (TempCookie.length > getCookie('KaupRireki').length){
			alert('クッキーが容量オーバーのため処理を中止しました');
			setCookie('KaupRireki',TempCookie);
		}
		location.replace(location.pathname);
	} else alert('エラー\n「身長」「体重」「計算結果」「年月日」のいずれかが無効です');
}

//記録表示
function LoadKaup(){
	var Rireki = getCookie('KaupRireki').replace(/\n$/,'').split('\n').sort().reverse();
	if(getCookie('KaupRireki')){
		document.write('<div class="dxTb3"><span>※他のパソコンに下記内容は表示されません</span>\n');
		document.write('<table>\n<tr>\n<th colspan="5">成　長　記　録</th>\n</tr>\n<tr>\n<th>年月日</th>\n<th>身長(cm)</th>\n<th>体重(g)</th>\n<th>KAUP</th>\n<th>　</th>\n</tr>\n');
		for (var i in Rireki){
			var ValueS = Rireki[i].split(',');
			document.write('<tr>\n<td>'+ValueS[0]+'</td>\n<td align="right">'+ValueS[1]+'</td>\n\n<td align="right">'+ValueS[2]+'</td>\n\n<td align="right">'+ValueS[3]+'</td>\n<td><input type="button" value="削除" onclick="DelValue(\''+Rireki[i]+'\');"></td>\n</tr>\n');
		}
		document.write('</table></div>\n');
	}
}

//日付フォーム表示
function LodaAction(){
	var NowTemp = new Date();
	var NowYear = NowTemp.getFullYear();
	var NowMonth = NowTemp.getMonth()+1;
	NowMonth = (NowMonth<10?'0'+NowMonth:NowMonth);
	var NowDate = NowTemp.getDate();
	NowDate = (NowDate<10?'0'+NowDate:NowDate);
	document.Kaup.Now.value = NowYear+'-'+NowMonth+'-'+NowDate;
}

//記録削除
function DelValue(Str01){
	if (confirm('DATE:'+(Str01.split(','))[0]+'\n身長:'+(Str01.split(','))[1]+'\n体重:'+(Str01.split(','))[2]+'\nKAUP:'+(Str01.split(','))[3]+ '\n\nデータを削除します\nよろしいですか？')){
		setCookie('KaupRireki',getCookie('KaupRireki').replace(Str01+"\n",''));
		location.replace(location.pathname);
	}
}

//データ保存
function SaveData(Ovj01){
	var Msg = '復元しました';
	Ovj01.KaupData.value = (Ovj01.KaupData.value+'\n').replace(/\r\n/g,'\n').replace(/\r/g,'\n').replace(/[^0-9.,\n-]/g,'').replace(/\n+/g,'\n').replace(/^\n+/,'');
	if (Ovj01.KaupData.value.length < 20){
		if (!confirm('復元するデータが正しくない可能性があります\nデータが消えてしまうかもしれません\nよろしいですか？')){
			return;
		}
		Msg = '実行しました';
	}
	setCookie('KaupRireki',Ovj01.KaupData.value.replace(/\r\n/g,'\n').replace(/\r/g,'\n'));
	alert(Msg);
	Ovj01.KaupData.value = "";
}

//データ表示
function RelodaAction(Ovj02){
	Ovj02.KaupData.value = getCookie('KaupRireki').split("\n").sort().reverse().join("\n");
	Ovj02.KaupData.focus();
	Ovj02.KaupData.select();
}

//タグ出力
function Kauptag(){
	var Rireki = getCookie('KaupRireki').replace(/\n$/,'').split('\n').sort().reverse();
	var Tag = '';
	if(getCookie('KaupRireki')){
		Tag +=	'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\n'+
			'<html>\n'+
			'<head>\n'+
			'  <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">\n'+
			'  <title>成長記録</title>\n'+
			'</head>\n'+
			'<body>\n'+
			'<table border="1" cellspacing="0" cellpadding="1">\n'+
			'  <tr>\n'+
			'    <th colspan="4">成　長　記　録</th>\n'+
			'  </tr>\n'+
			'  <tr>\n'+
			'    <th>年月日</th>\n'+
			'    <th>身長(cm)</th>\n'+
			'    <th>体重(g)</th>\n'+
			'    <th>KAUP</th>\n'+
			'  </tr>\n';

		for (var i in Rireki){
			var ValueS = Rireki[i].split(',');
			Tag +=	'  <tr>\n'+
				'    <td>'+ValueS[0]+'</td>\n'+
				'    <td align="right">'+ValueS[1]+'</td>\n'+
				'    <td align="right">'+ValueS[2]+'</td>\n'+
				'    <td align="right">'+ValueS[3]+'</td>\n'+
				'  </tr>\n';

		}
		Tag +=	'</table>\n'+
			'</body>\n'+
			'</html>\n';

		document.KaupHtml.KaupData.value = Tag;
		document.KaupHtml.KaupData.focus();
		document.KaupHtml.KaupData.select();
	}
}

//表示日数制限（パソコンの過負荷保護）
var MaxDate = 500;

//スキップ選択フォーム処理
var DateSkip = 1;
if (getCookie('Skip')) DateSkip = parseInt(getCookie('Skip'));
var SkData = new Array('1_１分の１日','2_２分の１日','3_３分の１日','5_５分の１日','10_１０分の１日','30_３０分の１日','365_３６５分の１日')
var OptTag = '';
for (var l in SkData){
	OptTag += '<option value="'+SkData[l].split('_')[0]+'"'+(SkData[l].split('_')[0]==getCookie('Skip')?' selected':'')+'>'+SkData[l].split('_')[1]+'</option>\n';
}

//グラフ表示
function Kaupgraph(){
	var Rireki = getCookie('KaupRireki').replace(/\n$/,'').split('\n').sort();
	var DateS = 0;
	var DataS1,DataS2,DataS3;
	var j = 0;
	var k = 0;
	var DC = 0;
	var GrImg1 = '';
	var GrImg2 = '';
	var G1 = 1;
	var G2 = 1;
	var G3 = 1;
	var EndFlg = true;
	var Tag1 = '<table border="0" cellspacing="0" cellpadding="0"><tr><td valign="bottom"><img src="gr_s.gif" width="40" height="125"></td><td valign="bottom" background="bg30.gif" nowrap>';
	var Tag2 = '<table border="0" cellspacing="0" cellpadding="0"><tr><td valign="bottom"><img src="gr_t.gif" width="40" height="200"></td><td valign="bottom" background="bg30.gif" nowrap>';
	var Tag3 = '<table border="0" cellspacing="0" cellpadding="0"><tr><td valign="bottom"><img src="gr_k.gif" width="40" height="150"></td><td valign="bottom" background="bg30.gif" nowrap>';
	if(getCookie('KaupRireki')){
		for (var i in Rireki){
			if (i != 0){
				if (!EndFlg) break;
				var ValueS1 = Rireki[i-1].split(',');
				var ValueS2 = Rireki[i].split(',');
				var Date1 = new Date();
				Date1.setTime(0);
				Date1.setDate((ValueS1[0].split('-'))[2]);
				Date1.setMonth((ValueS1[0].split('-'))[1]-1);
				Date1.setYear((ValueS1[0].split('-'))[0]);
				var Date2 = new Date();
				Date2.setTime(0);
				Date2.setDate((ValueS2[0].split('-'))[2]);
				Date2.setMonth((ValueS2[0].split('-'))[1]-1);
				Date2.setYear((ValueS2[0].split('-'))[0]);
				DateS = (Date2.getTime()-Date1.getTime())/86400000;
				DataS1 = (parseFloat(ValueS2[1])-parseFloat(ValueS1[1]))/DateS;
				DataS2 = (parseInt(ValueS2[2])-parseInt(ValueS1[2]))/DateS;
				DataS3 = (eval(ValueS2[3]+'*5')-eval(ValueS1[3]+'*5'))/DateS;
				for (j=0;j<DateS;j++){
					if (k++ % DateSkip) continue;
					DC++;
					if (DC > MaxDate){
						alert('パソコンの過負荷防止のため表示処理を中断しました\n「グラフ表示日数間隔」を変更してください');
						EndFlg = false;
						break;
					}
					G3 = parseInt(eval(ValueS1[3]+'*5')+(DataS3*j)+.49999999);
					if (j == 0 && DateSkip == 1){
						GrImg1 = '22b.gif';
						GrImg2 = '2b'+(parseInt((G3/25)+'')*25)+'.gif';
					} else {
						GrImg1 = '22r.gif';
						GrImg2 = '2r'+(parseInt((G3/25)+'')*25)+'.gif';
					}
					Tag1 += '<img src="'+GrImg1+'" width="1" height="'+parseInt(parseFloat(ValueS1[1])+(DataS1*j)+.49999999)+'" alt="'+parseInt(parseFloat(ValueS1[1])+(DataS1*j)+.5)+'">';
					Tag2 += '<img src="'+GrImg1+'" width="1" height="'+parseInt(parseInt(parseInt(ValueS1[2])+(DataS2*j))/100)+'" alt="'+parseInt(parseInt(ValueS1[2])+(DataS2*j))+'">';
					Tag3 += '<img src="'+GrImg2+'" width="1" height="'+G3+'" alt="'+parseInt((parseFloat(ValueS1[3])+(DataS3*j/5))*100)/100+'">';
				}
			}
		}
		if (EndFlg){
			G3 = parseInt((parseFloat((Rireki[Rireki.length-1].split(','))[3])*5)+.49999999);
			if (DateSkip == 1){
				GrImg1 = '22b.gif';
				GrImg2 = '2b'+(parseInt((G3/25)+'')*25)+'.gif';
			} else {
				GrImg1 = '22r.gif';
				GrImg2 = '2r'+(parseInt((G3/25)+'')*25)+'.gif';
			}
			Tag1 += '<img src="'+GrImg1+'" width="1" height="'+(Rireki[Rireki.length-1].split(','))[1]+'" alt="'+(Rireki[Rireki.length-1].split(','))[1]+'">';
			Tag2 += '<img src="'+GrImg1+'" width="1" height="'+parseInt(parseFloat((Rireki[Rireki.length-1].split(','))[2])/100)+'" alt="'+(Rireki[Rireki.length-1].split(','))[2]+'">';
			Tag3 += '<img src="'+GrImg2+'" width="1" height="'+G3+'" alt="'+(Rireki[Rireki.length-1].split(','))[3]+'">';
		}
		Tag1 += '</td></tr></table><span style="font-size:10pt">■身長（期間：'+Rireki[0].split(',')[0]+'～'+Rireki[Rireki.length-1].split(',')[0]+'　縦罫線：'+(30*DateSkip)+'日間隔）</span><hr>\n';
		Tag2 += '</td></tr></table><span style="font-size:10pt">■体重（期間：'+Rireki[0].split(',')[0]+'～'+Rireki[Rireki.length-1].split(',')[0]+'　縦罫線：'+(30*DateSkip)+'日間隔）</span><hr>\n';
		Tag3 += '</td></tr></table><span style="font-size:10pt">■KAUP（期間：'+Rireki[0].split(',')[0]+'～'+Rireki[Rireki.length-1].split(',')[0]+'　縦罫線：'+(30*DateSkip)+'日間隔）</span><hr>\n';
		document.write(Tag1+Tag2+Tag3);
	}
}
