function ncDateSerial(strY,strM,strD)
{
//別々に入力された年月日を西暦の文字列に変換する
//strY･･･年
//strM･･･月
//strD･･･日
//strN･･･年号
	
	if(strY==""||strM==""||strD=="")
	{
		return "";
	}
	else
	{
		return strY+"/"+strM+"/"+strD;
	}	
}

function ncRev(blnFlag)
{
//引数のboolean属性を反転する

	if(blnFlag==true)
	{
		blnFlag=false;
	}
	else
	{
		blnFlag=true;
	}
	return blnFlag;
}

function ncAlter(){with(document.frmMain)
{
	blnAlter.value=1;
}}

function ncSelect(strName){with(document.frmMain)
{
	if(elements(strName).type!="hidden")
	{
		elements(strName).select();
	}
}}

function ncArray(n)
{
	this.length=n;
	for(var i=0;i<=n;i++)
	{
		this[i]=0;
	}
	return this;
}

//----- 数値整形	（数値形式→貨幣形式） -----
function osFormatCurrency(value)
{
	var Count;
	var Rest;		
	var Add;
	var idx;
	var Point;
	var strTarget;
	var strReturn;
	var strPre;
	var ret;
	
	strTarget=new String(value);
	strReturn='';
	strPre='';
		
	// マイナス数値の場合の処理
	if(strTarget.charAt(0)=="-")
	{
		strPre='-';
		strTarget=strTarget.slice(1,99);
	}
	// 数値が４桁以上の場合のみ実行
	if(strTarget.length>3)
	{
		Rest=strTarget.length%3					//３桁ずつ区切ったときの余り
		if(Rest==0){Add=0;}else{Add=3-Rest;}	//頭に付加する仮文字の数
		idx=Add
		for(idx=1;idx<=Add;idx++)				// ３桁で区切れるように'Q'を頭に付加
		{	strTarget='Q'+strTarget;	}
		Count=(strTarget.length)/3;				// 区切りの数を算出
		Point=0;
		for(idx=1;idx<=Count-1;idx++)
		{
			strReturn+=strTarget.substring(Point,Point+3)+',';	// ３桁毎にカンマを付加
			Point+=3
		}
		strReturn+=strTarget.slice(Point,99);	// 最後の３桁を付加
		strReturn=strReturn.slice(Add,99);		// 頭の'Q'をとる
		strReturn=strPre+strReturn;				// マイナス数値の場合は'-'を付加
	}
	else
	{
		strReturn=strPre+strTarget;				// マイナス数値の場合は'-'を付加
	}
		
	return strReturn;
}

//----- 数値整形	（貨幣形式→数値形式） -----
function osFormatNumber(value)
{
	var Head;		//検索開始位置
	var Tail;		//検索終了位置
	var strReturn;	//返値文字列	
	
	if((value!='')&&(value!=null))
	{
		strReturn='';
		Head=0;
	
		while(value.indexOf(',',Head)!=-1)
		{
			Tail=value.indexOf(',',Head);
			strReturn+=value.slice(Head,Tail);
			Head=Tail+1;
		}
		strReturn+=value.slice(Head,99);
	}	
	else
	{
		strReturn=0;
	}
	return strReturn;
}

//----- 数値整形（mm/dd→yyyy/mm/ddの日付形式文字列）
function ncjFormatDateTime(value)
{
	var aryValue;	//スラッシュで分割された要素を格納する配列
	var strValue;	//処理中の日付文字列を一時格納
	var varRet;
		
	strValue=value;
	aryValue=strValue.split('/');
	varRet='';
	
	if(ncjCheckDate(strValue)==true)
	{
		if(strValue.split('/').length==2)
		{
			strValue=new Date().getFullYear()+'/'+strValue;
			strValue=ncjBookDateModify(strValue);
		}
		varRet=osGetDate(new Date(strValue));
	}
		
	return varRet;
}

//----- 入力チェック
function CheckInput(Field,Disp,Format)
//【機　能】入力チェック
//【引　数】	Field	：検査するコントロールオブジェクト
//			Disp	：エラー時の表示用コントロール名称
//			Format	：検査の種類
//						Date			日付かどうかチェックする
//						Numeric			数値かどうかチェックする
//						Is				未入力かどうかチェックする
//						任意の文字列		検査データが文字列と同じ値の場合に、
//										Disp引数の文字列をそのまま表示する
//										例）CheckInput(txt1,"だめ","0")->txt1="0"の場合、"だめ"と表示
//【戻り値】	boolean型
//【備　考】エラーメッセージを含む
//【履　歴】	00/01/28	Arikata	新規	
//			00/02/09	Arikata フォーカス移動しないよう修正
{
	var blnReturn=true;
	var Value;
	var aryValue;	//スラッシュで分割された要素を格納する配列

	if (Field == null) {return blnReturn;}  //チェックするべきフィールドが存在しない場合はtrueを返し、次のチェックへ

	switch(Format)
	{
		case "Date":	//日付チェック
			Value = ncjTrim(Field.value);
			aryValue=Value.split('/');
	
			if(aryValue.length!=2&&aryValue.length!=3)
			{
				//年月日または月日以外はエラー
				alert(Disp+"が日付として正しくありません");
				blnReturn	=false;
			}
			else
			{			
				if(aryValue.length==2)
				{
					//月日のみの形式の場合は日付と認識しないので引数に現年を付加
					Value=new Date().getFullYear()+'/'+Value;
				}
				if(new Date(Value)=='NaN')
				{
					alert(Disp+"が日付として正しくありません");
					blnReturn	=false;
				}
			}
			break;
		case "Numeric":	//数値チェック
			//Value=parseInt(ncjTrim(Field.value));
			if(isNaN(Field.value)==true)
			{
				alert(Disp+"には半角数値で入力して下さい");
				blnReturn	=false;
			}
			break;
		case "Is":		//未入力チェック
			if(ncjTrim(Field.value)=="")
			{
				alert(Disp+"を入力してください");
				blnReturn	=false;
			}
			break;
		default:		//内容チェック
			if(ncjTrim(Field.value)==Format)
			{
				alert(Disp);
				blnReturn	=false;
			}
			break;
	}	
	return blnReturn;
}


//---------------------------
//機能：日付かどうかのチェック
function ncjCheckDate(value)
{// エラーメッセージありバージョン
	var aryValue;	//スラッシュで分割された要素を格納する配列
	var strValue;	//処理中の日付文字列を一時格納
	var dtmValue;	//処理対象文字を
	var i;
	var intDay;
		
	strValue=value;
	aryValue=strValue.split('/');
	
	if(aryValue.length!=2&&aryValue.length!=3)
	{
		//--- 年月日または月日以外はエラー
		alert('日付が正しくありません。');
		return false;
	}
		
	if(aryValue.length==2)
	{
		//--- 「月日」形式
		strValue=new Date().getFullYear()+'/'+strValue;
		//引数に現年を付加
	}		

	if(new Date(strValue)=='NaN')
	{
		alert('日付が正しくありません。');
		return false;
	}
	else
	{
		return true;
	}
}
//---------------------------
//機能：数値かどうかのチェック
function isNumeric(vField){
	var	vValue ;
	
	vValue = vField.value 
	if( vValue != "") {
		
		if(isNaN(vValue)) {
			alert("数値ではありません。 [半角数値で入力してください]");
			vField.focus() ;
			return ;
		}
		else {
			vField.value = +vValue ;
		}
	}
}

//------------------------------------
//  時刻チェック
function CheckTime(Field,Mode) {
	vbsCheckTime(Field)
	return ;
}
//-------------------------------
//	引数がゼロならば空白を返す
function osBlank(intValue) {
	var ret ;	
	ret = intValue ; 
	if (isNaN(intValue)) {
		ret = "" ;
	}
	return ret ;
}
//-------------------------------
//	引数がゼロまたはNaNならばゼロ１桁に整形して返す
function osZero(intValue) {
	var ret ;
	ret = intValue ;

	if ((intValue == 0) || (isNaN(intValue))) {
		ret = "0" ;
	}
	return ret ;
}
//-------------------------------
//	引数文字列の長さがゼロならば空白を返す
function osLength(intValue) {
	var ret ;
	ret = intValue ; 
	if (intValue.length == 0) { ret = "" ;	}
	return ret ;
}
//------------------------------------
//	１桁日付の編集
//	【例】"3" →　"03"
function osAddZero(strValue) { 

	var varRet ;

	if (strValue <= 9) {
		varRet = "0" + strValue ;
	}
	else {
		varRet = strValue ;
	}
	return varRet ;
}
//-------------------------------------
//	年月を求める
function osGetMonth(objDate){
	var vRet ;
	var PreChk ; 

	//戻り値がNaNだった場合、後ろに何か文字列をつけないと If(xx == NaN)が有効にならない
	//のちほど調査要　　2000/10/17 Sakurai
	//引数チェックにparseIntを使ってみた	00.11.20 Arikata
	
	//PreChk = objDate.getFullYear() + "?" ;
	PreChk = objDate.getFullYear();

	//if (PreChk == NaN + "?"){
	if (!(parseInt(PreChk)>0)){
		vRet = false ;
	}
	else {
		vRet  = objDate.getFullYear() + "/";
		vRet += osAddZero(objDate.getMonth() + 1);
	}
	return vRet ;
}
//------------------------------------
//	年月日を求める
function osGetDate(objDate){

	var vRet ;
	var PreChk ;
	
	//PreChk = objDate.getFullYear() + "?" ;
	PreChk = objDate.getFullYear();

	//if (PreChk == NaN + "?") {
	if (!(parseInt(PreChk)>0)){
		vRet = false ;
	}
	else {
		vRet  = objDate.getFullYear() + "/";
		vRet += osAddZero(objDate.getMonth() + 1) + "/";
		vRet += osAddZero(objDate.getDate()) ;
	}
	return vRet ;
}
//------------------------------------
//	年月日 時分秒まで求める
function osGetTime(objDate){

	var vRet ;
	var PreChk ;
	
	//PreChk = objDate.getFullYear() + "?" ;
	PreChk = objDate.getFullYear();

	//if (PreChk == NaN + "?") {
	if (!(parseInt(PreChk)>0)){
		vRet = false ;
	}
	else {
		vRet  = objDate.getFullYear() + "/";
		vRet += osAddZero(objDate.getMonth() + 1) + "/";
		vRet += osAddZero(objDate.getDate()) + " " ;
		vRet += osAddZero(objDate.getHours()) + ":" ;
		vRet += osAddZero(objDate.getMinutes()) + ":" ;
		vRet += osAddZero(objDate.getSeconds()) ;
	}
	return vRet ;
}
//------------------------------------
//	日の加算減算
function ncjDateAdd(strAddType,intInterval,objDate){

	var intYear;
	var intMonth;
	var intDay;
	
	intYear	 = objDate.getFullYear();
	intMonth = objDate.getMonth()+1;
	intDay	 = objDate.getDate();
	
	switch(strAddType)
	{
		case 'y':intYear+=intInterval;	break;
		case 'm':intMonth+=intInterval;	break;
		case 'd':intDay+=intInterval;	break;
	}
	
	//--- 加算により日がその月の最終日を越えた ---
	if(intDay>osGetLastDay(objDate))
	{	
		intMonth++;
		intDay-=osGetLastDay(objDate);
	}
	//--- 減算により日が0以下になった ---
	if(intDay<1)
	{	
		var objD;
		
		intMonth--;
		if(intMonth>12)	
		{
			intYear++;
			intMonth-=12;	
		}
		objD=new Date(intYear,intMonth,intDay)
		intDay+=osGetLastDay(objD);
	}
	
	//--- 減算により月が12月を越えた ---
	if(intMonth>12)	
	{
		intYear++;
		intMonth-=12;	
	}
	
	//--- 減算により月が0以下になった ---
	if(intMonth<1)	
	{
		intYear--;
		intMonth+=12;	
	}
				
	return intYear+'/'+intMonth+'/'+intDay;
	
}
//------------------------------------
//	閏年かどうかチェックする
function ncjCheckLeap(objDate){

//閏年の判定
//　１．西暦年が4で割り切れる年は閏年
//　２．１であっても、西暦年が100で割り切れる場合は閏年でない
//　３．２であっても、西暦年が400で割り切れる場合は閏年

	var intYear;
	intYear	 = objDate.getFullYear();
	
	if(intYear%4==0)
	{
		if(intYear%100==0)
		{
			if(intYear%400==0)
			{
				return true;
			}
			else
			{
				return false;
			}
		}
		else
		{
			return true;
		}
	}
	else
	{
		return false;
	}
}
//------------------------------------
//	その月の最終日を返す
function osGetLastDay(objDate)
{
	var intYear;
	var intMonth;
	var intDay;
	
	intYear	 = objDate.getFullYear();
	intMonth = objDate.getMonth()+1;
	intDay	 = objDate.getDate();

	switch(intMonth)
	{
		case 1:return 31;break;
		case 3:return 31;break;
		case 4:return 30;break;
		case 5:return 31;break;
		case 6:return 30;break;
		case 7:return 31;break;
		case 8:return 31;break;
		case 9:return 30;break;
		case 10:return 31;break;
		case 11:return 30;break;
		case 12:return 31;break;
		case 2:
				if(ncjCheckLeap(objDate))
				{
					return 29;
				}
				else
				{
					return 28;
				}
				break;
	}
}

function ncjAge(varBirthDay)
{
	var dtmB;
	var dtmT;
	var monthB;
	var monthT;
	var intYear;
	
	dtmB=new Date(varBirthDay);
	dtmT=new Date();
	monthB=dtmB.getMonth();
	monthT=dtmT.getMonth();
	intYear=dtmT.getFullYear()-dtmB.getFullYear()-1;
	
	if(monthB<monthT)
	{
		intYear++;
	}
	else if(monthB==monthT)
	{
		if(dtmB.getDate()<=dtmT.getDate())
		{
			intYear++;
		}
	}
	return intYear;
}

function ncjBirthday(varAge,dtmOld)
{
	var intYear;
	var intMonth;
	var intDay;
	var varOld;
	var varNow;
	
	varNow=new Date();
	intYear=varNow.getFullYear()-varAge;
	
	if(dtmOld=='')
	{
		varOld= new Date(ncDateSerial(intYear,1,1));
	}
	else
	{
		varOld=new Date(dtmOld);
	}
	intMonth=varOld.getMonth()+1;
	intDay=varOld.getDate();
	
	if(ncDateSerial(intYear,intMonth,intDay)>Date())
	{
		intYear--;
	}
	
	return ncDateSerial(intYear,intMonth,intDay);
}

//キーコード変換
window.document.onkeydown = ncjKeyCodeTrans ;
function ncjKeyCodeTrans()
{
	if( event.keyCode == 8 )	event.keyCode = 0 ;		// BackSpaceを無効化
//	if( event.keyCode == 13 )	event.keyCode = 9 ;		// ENTERをTABへ
}

//右クリック禁止
//document.onmousedown=ncjRightClickStop;
//if(document.layers)document.captureEvents(Event.MOUSEDOWN);
//function ncjRightClickStop()
//{
//    if(document.all){
//        if(event.button == 2){
//            alert("右クリックは使用できません");
//            return false;
//        }
//    }
//    if(document.layers){
//        if(eve.which == 3){
//            alert("右クリックは使用できません");
//            return false;
//        }
//    }
//}

function ncjTrim(str)
{
	var blnOut;
	blnOut=false;
	do
	{
		if(str==''){blnOut=true;}
		else
		{
			if(str.indexOf(' ',0)==0||str.indexOf('　',0)==0)	//先頭が空白
			{
				str=str.substr(1,99)
			}
			else
			{
				blnOut=true;
			}
		}
	}
	while(blnOut==false)
	
	blnOut=false;
	do
	{
		if(str==''){blnOut=true;}
		else
			{
			if(str.lastIndexOf(' ',str.length)==(str.length-1)||str.lastIndexOf('　',str.length)==(str.length-1))	//うしろが空白
			{
				str=str.substr(0,str.length-1)
			}
			else
			{
				blnOut=true;
			}	
		}
	}
	while(blnOut==false)
	
	return str;

}

function ncjBookDateModify(BKDate)
{
//【機能】	引数の日付(予約の出発日)と、予約日の日付を比較して
//			出発日の年度を修正する。
//【引数】	BKDate ･･･ 予約日(として入力された値)文字列
//【戻値】	修正された日付文字列
//【備考】	Accessではｼｽﾃﾑの日付が使用されるため、日付の入力形式を
//			｢m/d｣にした場合､年末年始の日付の調整が必要。
//			(例えば、98/01/02に｢12/30｣と入力すると､出発日は98/12/31になってしまう。)
//【履歴】	Arikata	ncBMSより
//			01-05-24	Arikata	先日付のみ取得する引数を追加（Web予約に特化するため）
//          03-01-23    Ariakta 先日付処理削除（手仕舞日設定機能追加で不要）
//　　　　　 03-08-19	Arujata javascriptに移植

	var varRet;
	
	varRet=BKDate;
	
	if(new Date(BKDate).getTime() > new Date(ncjDateAdd('m',  8, new Date())).getTime())
	{
		varRet = ncjDateAdd('y', -1, new Date(BKDate));
	}
	
	if(new Date(BKDate).getTime() < new Date(ncjDateAdd('m', -4, new Date())).getTime())
	{
		varRet = ncjDateAdd('y',  1, new Date(BKDate));
	}
			
	return varRet;
}

function ncjCheckMail(strValue)
{
	//メールアドレスの整合性チェック
	if(strValue.length==0){return;}	//未入力の場合は終了
	
	var str = new String(strValue);
	var data = str.match(/^\S+@\S+\.\S+$/);
	//var data = str.match(/[0-9A-Za-z_\x2D.]+@[0-9A-Za-z_\x2D.]+\.[0-9A-Za-z_\x2D]+/);
	
	return (data!=null);
}