
//var PROGRAM_ID		= "CommonJs"		//プログラムID
//var PROGRAM_VERSION	= "1.0.2"		//プログラムバージョン
//var PROGRAM_NM		= "共通関数"	//プログラム名

/* ■■■ 送信・投稿・返信ボタン ■■■↓ */
function goEntry(cmdEntry, strFormID){
/* 引数1(省略可) ：	チェック対象の項目を指定(レスポンス対策) */
/* 戻り値：	なし */

	cmdEntry.disabled = true;	/* ボタン非活性化 */
	if (isErrItem(strFormID)) {
		cmdEntry.disabled = false;	/* ボタン活性化 */
		return;
	}
	
	/* Submit↓ */
	document.forms(strFormID).submit();
}

/* ■■■ 項目チェック ■■■↓ */
function isErrItem(strFormID) {

	var objTargetGroup = document.getElementById(strFormID);

	var strErrMsg = "";
	strErrMsg += isErrItem2(objTargetGroup, "input");
	strErrMsg += isErrItem2(objTargetGroup, "textarea");
//	strErrMsg += isErrItem2(objTargetGroup, "select");
	
	/* エラー表示↓ */
	if (strErrMsg != "") {
		alert(strErrMsg);
		return true; 
	} else {
		return false; 
	}
}
/* ■ 項目チェック2 ■↓ */
function isErrItem2(objTargetGroup, strTagName) {
	var strErrMsg = "";		//エラーメッセージ
	//var strElementNamesTest = "";
	var objTargetElements = objTargetGroup.getElementsByTagName(strTagName);
	for (var li=0, len=objTargetElements.length; li<len; li++){ 
		var objElement = objTargetElements[li]; 
		
		/* 各値取得↓ */
		var strItemNm = objElement.name;
		var strItemClassNm = objElement.className;
		
		//strElementNamesTest += strItemNm + "\n";
		/* 入力不可の項目は飛ばす↓ */
		if (strItemClassNm == "" || objElement.disabled == true || objElement.readOnly == true) {
			continue;
		}
		
		/* 各値取得↓ */
		var strValue = objElement.value;
		var strErrMsgWk = "";	//エラーメッセージ

		if(strValue == ""){ 
			/* 必須チェック↓ */
			if(strItemClassNm.indexOf("InputRequiredItem") >= 0){ 
				strErrMsgWk = "は必須項目です"; 
			}
		} else {
			if (strTagName == "textarea") {
//				if(strItemClassNm.indexOf("Name")>=0){ 
//					/* 名称系チェック↓ */
//					if(getStringNewLineCount(strValue) >= objElement.rows){ 
//						/* メッセージ変更(ST1-0115対応)(upd 20070615)↓ */
//						/* strErrMsgWk = "が最大改行数（" + (objElement.rows - 1) + "個、現在：" + getStringNewLineCount(strValue) + "個）をオーバーしています" ; */
//						strErrMsgWk = "が行数をオーバーしています" ;
//					} else if(getStringByteCount(strValue) > (objElement.cols * objElement.rows + 2 * (objElement.rows - 1))){ 
//						/* メッセージ変更(ST1-0115対応)(upd 20070615)↓ */
//						/* strErrMsgWk = "が最大バイト数（" + (objElement.cols * objElement.rows + 2 * (objElement.rows - 1)) + "バイト、現在：" + getStringByteCount(strValue) + "バイト）をオーバーしています" ; */
//						strErrMsgWk = "が文字数をオーバーしています" ;
//					}
//				}
			} else if (strTagName == "input") {
				if(strItemClassNm.indexOf("Name")>=0){ 
					/* 名称系チェック(add 20070711)↓ */
//					if(getStringByteCount(strValue) > objElement.maxLength ){ 
//						strErrMsgWk = "が文字数をオーバーしています" ;
//					}
				} else if(strItemClassNm.indexOf("Number")>=0){ 
					/* 数値チェック↓ */
					if(isNotNumber(strValue)){ 
						strErrMsgWk = "が数字ではありません" ; 
					}
				} else if(strItemClassNm.indexOf("Date")>=0){ 
//					/* 日付チェック↓ */
//					if (objElement.maxLength==6) {
//						if (isNotDate(cnvYymmdd2Yyyymmdd(strValue))) {
//							strErrMsgWk = "が日付ではありません"; 
//						}
//					} else if (objElement.maxLength==4) {
//						if (isNotDate(cnvYymmdd2Yyyymmdd(strValue + "01"))) {
//							strErrMsgWk = "が日付ではありません"; 
//						}
//					} else {
//						strErrMsgWk = "のmaxlengthプロパティが不正です(システムエラー)";
//					}
				} else if(strItemClassNm.indexOf("Time")>=0){ 
//					/* 時間チェック↓ */
//					if (isNotTime(strValue)){ 
//						strErrMsgWk = "が時間ではありません"; 
//					}
				} else if(strItemClassNm.indexOf("Mail")>=0){ 
					/* メールアドレスチェック↓ */
					if (isNotMail(strValue)){ 
						strErrMsgWk = "が有効なメールアドレスではありません"; 
					}
				} else if(strItemClassNm.indexOf("URL")>=0){ 
					/* URLチェック↓ */
					if (isNotURL(strValue)){ 
						strErrMsgWk = "が有効なURL(http://〜、https://〜)ではありません"; 
					}
				}
			}
		}
		
		/* エラー項目設定(upd 20070716)↓ */
		if (strErrMsgWk != "") {
			strItemClassNm = addClassName(strItemClassNm,"InputErrItem");	/* エラークラスを追加 */

			var strNm = objElement.title;
			if (strNm == "") { strNm = objElement.id; }
			
			if (strErrMsgWk != "") {
				strErrMsg += "[ " + strNm + " ] " + strErrMsgWk + "。\n";
			}
		} else {
			strItemClassNm = removeClassName(strItemClassNm,"InputErrItem");	/* エラークラスを削除 */
		}
		if (objElement.className != strItemClassNm) {
			objElement.className = strItemClassNm;	/* クラスを上書き(再描画はコストが高いので、変わった時だけ上書き(upd 20070601)) */
		}
	}
	//if(strElementNamesTest!="") { alert(strElementNamesTest); }
	
	return strErrMsg;
}


/* ■■■ 文字列のメールアドレス判定 ■■■↓ */
function isNotMail(strValue) {
	var intPos=strValue.indexOf('@');
	return !(intPos>0 && (strValue.length-intPos)>1 && strValue.substring(intPos+1).indexOf('@')==-1);
}

/* ■■■ 文字列のメールアドレス判定 ■■■↓ */
function isNotURL(strValue) {
	return !(strValue.indexOf('://')>0 && strValue.indexOf('.')>0);
}


/* ■■■ クラスの追加と削除、及びエラー項目チェック(ST1-0015対応)(add 20070621) ■■■↓ */
function addClassName(strClass,strAddClass) {
	return strClass + " " + strAddClass + " ";	/* エラークラスを追加 */
}
function removeClassName(strClass,strRemoveClass) {
	var objReg = new RegExp(" " + strRemoveClass + " ", "g");
	return strClass.replace(objReg,"");	/* エラークラスを削除 */
	//return strClass.replace(" " + strRemoveClass + " ","");	/* エラークラスを削除 */
	//return strClass.replace(/\bInputErrItem\b/g,"");
}
function isErrorClassName(strClass) {
	var objReg = new RegExp(" InputErrItem ", "g");
	return objReg.test(strClass);
}

/* ■■■ 数値からカンマ除去 ■■■↓ */
function removeComma(strValue) {
	strValue += "";	/* 文字列に変換 */
	strValue = strValue.replace(/,/g,"");
//	var strValueWk = "";
//	var strWk = "";
//	for (var li=0; li<strValue.length; li++) {
//		strWk = strValue.charAt(li) ;
//		if (isNaN(strWk)==false || strWk==".") {
//			strValueWk += strWk;
//		}
//	}
//	strValue = strValueWk;
	return strValue;
}
/* ■■■ 数値にカンマ付与 ■■■↓ */
function addComma(strValue) {
	strValue = Number(strValue);
	strValue += "";	/* 文字列に変換 */
	for (var li = 0; li < strValue.length/3; li++){
		strValue = strValue.replace(/^([+-]?\d+)(\d\d\d)/,"$1,$2");
	}
	return strValue;
}

/* ■■■ TextBoxの数値フォーマット ■■■↓ */
function formatNumber(objText) {
	window.status = "";
	objText.className = removeClassName(objText.className,"InputErrItem");	/* エラークラスを削除 */
	
	var strValue = objText.value;
	if (strValue == "") { return false; }
	
	/* カンマ除去↓ */
	strValue = removeComma(strValue);
	
	/* 数値チェック↓ */
	if (isNotNumber(strValue)) {
		objText.className = addClassName(objText.className,"InputErrItem");	/* エラークラスを追加 */
		window.status = "間違った数値が入力されています。";
		return false;
	}
	
	/* カンマ付与↓ */
	objText.value = addComma(strValue);
	return true;
}
/* ■■■ 文字列の数値判定 ■■■↓ */
function isNotNumber(strValue) {
	/* カンマ除去↓ */
	strValue = removeComma(strValue);
	
	/* マイナス除去↓ */
	strValue = strValue.replace("-","");

	if(isNaN(strValue)){ 
		return true;
	} else {
		return false;
	}
}
/* ■■■ TextBoxの時間フォーマット ■■■↓ */
function formatTime(objText) {
	with (objText) {
		var strValue = value;
		if (strValue=="") {
			return false;
		}
		if (isNaN(strValue)==false && strValue.length>=3) {
			var intHH = Number(strValue.substring(0,strValue.length-2));
			var strMI = strValue.substring(strValue.length-2);
			value = intHH + ":" + strMI;
		} else if (strValue.indexOf(":")>=0) {
			var aryValue = strValue.split(":");
			aryValue[0] = "00" + aryValue[0];
			aryValue[1] = "00" + aryValue[1];
			if (isNaN(aryValue[0])==false && isNaN(aryValue[1])==false) {
				var intHH = Number(aryValue[0]);
				var strMI = aryValue[1].slice(-2);
				value = intHH + ":" + strMI;
			}
		}
		if (isNotTime(value)) {
			className = addClassName(className,"InputErrItem");	/* エラークラスを追加 */
			window.status = "間違った時間が入力されています。";
			return false;
		} else {
			className = removeClassName(className,"InputErrItem");	/* エラークラスを削除 */
		}
		window.status = "";
		return true;
	}
}
/* ■■■ 文字列の時間判定 ■■■↓ */
function isNotTime(strValue) {
	var blnNotTime = false;
	var aryValue = strValue.split(":");
	if (aryValue.length!=2){ 
		blnNotTime = true;
	} else if (isNaN(aryValue[0]) || isNaN(aryValue[1])){ 
		blnNotTime = true;
	} else if ((aryValue[0]<0 || aryValue[0]>23) || (aryValue[1]<0 || aryValue[1]>59)){ 
		blnNotTime = true;
	}
	return blnNotTime;
}
/* ■■■ 文字列のバイト数取得 ■■■↓ */
function getStringByteCount(strValue) {
	//日本語は2バイト、英字は1バイトとして計算する(del 20070711)↓
//	var count = 0;
//	var strChar;
//	for (var li=0, len=strValue.length; li<len; li++) {
//		strChar = escape(strValue.charAt(li));
//		if (strChar.length < 4) {
//			count+=1;
//		} else {
//			count+=2;
//		}
//	}
	//全角は2バイト、半角は1バイトとして計算する(半角カタカナも1バイト)(add 20070711)↓
	var count = 0;
	for(i=0;i<strValue.length;i++) {
		if (strValue.charAt(i).match(/[｡-ﾟ]/) || escape(strValue.charAt(i)).length< 4) {
			count++
		} else {
			count+=2; 
		}
	}
	return count;
}
/* ■■■ 文字列の改行数取得 ■■■↓ */
function getStringNewLineCount(strValue) {
	var aryText = strValue.match(/\n/g);
	if (aryText == null) {
		return 0;
	} else {
		return aryText.length;
	}
}

/* ■■■ 文字列の日付判定 ■■■↓ */
function isNotDate(strValue) {
	var blnNotDate = false;
	if (strValue.length != 8) {
		blnNotDate = true;
	} else if (isNaN(strValue)){ 
		blnNotDate = true;
	} else {
		/* 日付オブジェクトにしてから元に戻したものと比べ、違う時は不正な日付とみなす↓ */
		if (strValue != cnvDate2Yyyymmdd(cnvYyyymmdd2Date(strValue,0,0))){ 
			blnNotDate = true;
		}
		//var intYYYY = Number(strValue.substring(0,4));
		//var intMM = Number(strValue.substring(4,6)) ;
		//var intDD = Number(strValue.substring(6,8));
		//if ((intYYYY<1000 || intYYYY>2999) || (intMM<1 || intMM>12) || (intDD<1 || intDD>31)){ 
		//	blnNotDate = true;
		//}
	}
	return blnNotDate;
}
/* ■■■ 年月日に日数加算(upd 20070605) ■■■↓ */
function setYYYYMMDD(strTxtDateID,intAdd){
	var txtDate = document.getElementById(strTxtDateID);
	var strValue = cnvYymmdd2Yyyymmdd(txtDate.value);
	if (intAdd == 0 || isNotDate(strValue)) {
		strValue = document.getElementById("hdnSysdate").value;
	}
	txtDate.value = cnvDate2Yyyymmdd(cnvYyyymmdd2Date(strValue,0,intAdd)).substring(2);
}
/* ■■■ 年月に月数加算(upd 20070605) ■■■↓ */
function setYYYYMM(strTxtDateID,intAdd){
	var txtDate = document.getElementById(strTxtDateID);
	var strValue = cnvYymmdd2Yyyymmdd(txtDate.value + "01");
	if (intAdd == 0 || isNotDate(strValue)) {
		strValue = document.getElementById("hdnSysdate").value;
	}
	txtDate.value = cnvDate2Yyyymmdd(cnvYyyymmdd2Date(strValue,intAdd,0)).substring(2,6);
}
/* ■■■ YYYYMMDD形式⇔Dateオブジェクト変換 ■■■↓ */
function cnvYyyymmdd2Date(strValue,intAddMonth,intAddDay){
	//null判定を追加(add 20070605)↓
	if (strValue == null || strValue == "") { return ""; }
	
	var intYYYY = Number(strValue.substring(0,4));
	var intMM = Number(strValue.substring(4,6)) - 1 ;
	var intDD = Number(strValue.substring(6,8));
	return new Date(intYYYY, intMM + intAddMonth, intDD + intAddDay );
}
function cnvDate2Yyyymmdd(dtValue){
	//null判定を追加(add 20070605)↓
	if (dtValue == null || dtValue == "") { return ""; }
	
	var intYYYY = dtValue.getYear();
	var intMM = dtValue.getMonth() + 1;
	var intDD = dtValue.getDate();

	var strPreMM = "";
	var strPreDD = "";
	if (intYYYY < 2000) intYYYY += 1900;
	if (intMM < 10) strPreMM = "0";
	if (intDD < 10) strPreDD = "0";
	return intYYYY + strPreMM + intMM + strPreDD + intDD;
}
function cnvYymmdd2Yyyymmdd(strValue) {
	//文字数判定を追加(upd 20070605)↓
	//return "20" + strValue;
	if (strValue.length == 6) { strValue = "20" + strValue; }
	return strValue;
}

/* ■■■ YYYYMM形式に月数加算 ■■■↓ */
function cnvDateAddMonth(strValue,intAddMonth){
	var intYYYY = Number(strValue.substring(0,4));
	var intMM = Number(strValue.substring(4,6)) - 1 ;
	return cnvDate2Yyyymmdd(new Date(intYYYY, intMM + intAddMonth, 1)).substring(0,6);
}



/* ■■■ 数値のみ入力制限(inputなどにonkeydown="inputOnlyNumber();"として使う) ■■■↓ */
function inputOnlyNumber(blnInputMinus, blnInputDot) {
/* 引数1(省略可) ：	マイナス入力を行うか(デフォルト:true) */
/* 引数2(省略可) ：	ドット入力を行うか(デフォルト:false) */
/* 戻り値：	なし */
	if (blnInputMinus == undefined) { blnInputMinus = true; }
	if (blnInputDot == undefined) { blnInputDot = false; }
	
	var strKeyCode = event.keyCode;
	window.status = strKeyCode;
	if (strKeyCode >= 48 && strKeyCode <= 57) {	/* 0〜9 */
	} else if (strKeyCode >= 96 && strKeyCode <= 105) {	/* Num0〜Num9 */
	} else if (strKeyCode >= 37 && strKeyCode <= 40) {	/* カーソルキー */
	} else if (strKeyCode == 8 || strKeyCode == 9 || strKeyCode == 45 || strKeyCode == 46) {	/* BackSpace、Tab、Insert、Delete */
	} else if (window.event.ctrlKey == true && (strKeyCode == 67 || strKeyCode == 86 || strKeyCode == 88)) {	/* Ctrl+C、Ctrl+V、Ctrl+X */
	} else if (blnInputMinus && (strKeyCode == 109 || strKeyCode == 189)) {	/* "-" */
	} else if (blnInputDot && (strKeyCode == 110 || strKeyCode == 190)) {	/* "." */
	} else {
		window.event.returnValue = false;	/* 入力取消 */
	}
}
/* ■■■ 日付のみの入力制限(inputなどにonkeydown="inputOnlyDate();"として使う) ■■■↓ */
function inputOnlyDate() {
	//var strKeyCode = event.keyCode;
	//if (strKeyCode == 111 || strKeyCode == 191) {	/* "/" */
	//} else {
		inputOnlyNumber();	/* 数値のみ入力制限 */
	//}
}
/* ■■■ 時間のみの入力制限(inputなどにonkeydown="inputOnlyTime();"として使う) ■■■↓ */
function inputOnlyTime() {
	var strKeyCode = event.keyCode;
	if (strKeyCode == 186 ) {	/* ":" */
	} else {
		inputOnlyNumber();	/* 数値のみ入力制限 */
	}
}

/* ■■■ マウス・キーボードの抑制 ■■■↓ */
document.oncontextmenu= disableMouseRight;	//マウス右クリック抑制
//document.onmousewheel	= disableMouseWheel;	//マウスホイール抑制
//document.onkeydown	= disableKeyboard;	//キーボード抑制

/* マウス右クリック抑制↓ */
function disableMouseRight() {
	window.status = "";
	with (window.event) {
		if(srcElement.tagName == "INPUT"){
			/* INPUTタグのtype=text,password,fileでは、使用可能↓ */
			if(srcElement.type == "text" ||
				srcElement.type == "password" ||
				srcElement.type == "file"){
				return true;
			}
		} else if(srcElement.tagName == "TEXTAREA"){
			/* TEXTAREAタグでは、使用可能↓ */
			return true;
		}
	}
	window.status = "右クリック操作は無効です。";
	return false;
}
/* マウスホイール抑制↓ */
function disableMouseWheel () {
	window.status = "";
	if ( window.event.shiftKey ) {
		window.status = "マウスホイールによるブラウザ操作は無効です。";
		//if (window.event.wheelDelta < 0) {alert("戻る禁止");} else {alert("進む禁止");}
		return false;
	}
	return true;
}
/* キーボード抑制↓ */
function disableKeyboard() {
	window.status = "";
	with (window.event) {
		if (keyCode == 114 || keyCode == 116){
			/* F3、F5の使用禁止↓ */
			window.status = "ファンクションキーによるブラウザ操作は無効です。";
			keyCode = 0;
			return false;
			
		} else if (keyCode == 8){
			/* バックスペースキーの使用禁止↓ */
			if(srcElement.tagName == "INPUT"  && srcElement.readOnly == false){
				/* 入力可能なinputタグのtype=text,password,fileでは、使用可能↓ */
				if(srcElement.type == "text" 
					|| srcElement.type == "password" 
					|| srcElement.type == "file" ){ 
							return true;
				}
			} else if(srcElement.tagName == "TEXTAREA" && srcElement.readOnly == false){
				/* 入力可能なTEXTAREAタグでは、使用可能↓ */
				return true;
			}
			window.status = "BackSpaceキーによるブラウザ操作は無効です。";
			keyCode = 0;
			return false;
			
		} else if(altKey == true && (keyCode == 37 || keyCode == 39)) { 
			/* Alt＋カーソルキーの使用禁止↓ */
			window.status = "Altキーによるブラウザ操作は無効です。";
			return false ; 

		} else if(ctrlKey == true && (keyCode == 66 
										 || keyCode == 68 
										 || keyCode == 69 
										 || keyCode == 72 
										 || keyCode == 73 
										 || keyCode == 76 
										 || keyCode == 78 
										 || keyCode == 83)) { 
			/* ショートカットキー(Ctrl＋*)の使用禁止↓ */
			// 66:「B」キー（お気に入りの整理を表示）
			// 68:「D」キー（お気に入りに追加）
			// 69:「E」キー（検索を表示）
			// 72:「H」キー（履歴を表示）
			// 73:「I」キー（お気に入りを表示）
			// 76:「L」キー（ファイルを開く）
			// 78:「N」キー（新規ウィンドウの表示）
			// 83:「S」キー（保存する）
			window.status = "ショートカットキーは無効です。";
			return false ; 
			
		//} else if(srcElement.tagName == "TEXTAREA" && srcElement.readOnly == false){
		//	var strValue = srcElement.value;
		//	window.status = keyCode;
		//	
		//	/* TextAreaチェック↓ */
		//	if(getStringNewLineCount(strValue) >= srcElement.rows - 1){ 
		//		//window.status = srcElement.title + "が最大改行数（" + (srcElement.rows - 1) + "個、現在：" + getStringNewLineCount(strValue) + "個）をオーバーしています" ;
		//		window.event.keyCode = 0;
		//		return false ; 
		//	} else if(getStringByteCount(strValue) >= (srcElement.cols * srcElement.rows + 2 * (srcElement.rows - 1))){ 
		//		//window.status = "が最大バイト数（" + (srcElement.cols * srcElement.rows + 2 * (srcElement.rows - 1)) + "バイト、現在：" + getStringByteCount(strValue) + "バイト）をオーバーしています" ;
		//		window.event.keyCode = 0;
		//		return false ; 
		//	}
		//	return true;
		}
	}
	return true;
}

/* 画像のプリロード↓ */
function imgPreLoad(strImgPath) {
	var imgWk = new Image();
	imgWk.src = strImgPath;
}

/* URL引数の取得↓ */
function getQueryStrings(){
	//使用サンプル↓
	//var aryReq = getQueryStrings();
	//if (aryReq["q"] != undefined){
	//	alert(aryReq["q");
	//}
	var q = location.search.slice(1).split("&");
	var h = new Array();
	for (var i=0 , c=q.length ; i < c ; i++) {
		var s = q[i].split("=");
		h[s[0]] = s[1];
	}
	return h;
}


