// 某所からの移植モノなので切り分けてみた
// いずれ差し替え予定

	// 指定位置に指定文字列挿入
	// 引数：targetStr 挿入される文字列
	//	   ：insertStr 挿入する文字列
	//	   ：index 挿入する位置
	// 戻り値：指定文字列を挿入された文字列
	function insertStr(targetStr,insertStr,index){
		var buf = "";
		buf += targetStr.substring(0,index);
		buf += insertStr;
		buf += targetStr.substring(index,targetStr.length);
		return buf;
	}

	// 数値フィールドのチェック処理と書式変換
	// 引数 object チェック対象のテキストフィールドオブジェクト
	//		minValue 許容最小値
	//		maxValue 許容最大値
	//		decCnt	 有効小数点以下桁数
	//		formatType 0:なし
	//				   1:-123,456.78
	//				   2:123,456.78-
	//				   3:\-123,456.78
	//				   4:\123,456.78-
	// 戻り値 true:正常 false:エラー
	function checkNumericTextField(object, minValue, maxValue, decCnt, formatType) {
		var temp = object.value.replace(/[' 　,']/g,"");
		if (temp == "") {
			object.value = "";
			object.defaultValue = "";
			return true;
		}
		if (temp == "-" || temp == "." || temp == ".-" || temp == "-.") {
			alert("数値を入力してください");
			object.value = object.defaultValue;
			object.focus();
			return false;
		}
		var flag = (decCnt == 0) ? false : true;
		// 数値かどうかのチェック
		if (isNumeric(temp, flag) == false) {
			alert("数値を入力してください");
			object.value = object.defaultValue;
			object.focus();
			return false;
		}
		// 値範囲チェック
		var num = toNumber(temp, !flag);
		if (minValue > num || maxValue < num) {
			alert(editNumber(formatType, minValue) + "〜" + editNumber(formatType, maxValue) + "の範囲で入力してください");
			object.value = object.defaultValue;
			object.focus();
			return false;
		}
		// 書式設定
		if (formatType > 0) {
			num = editNumber(formatType, num);
		}
		// 小数点以下の桁数揃え
		if (flag) {
			num = addZero(num, decCnt);
		}

		object.value = num;
		object.defaultValue = num;
		return true;
	}

	// 数値かどうか
	// flag  true:小数点を許可する false:小数点を許可しない
	function isNumeric(val, flag) {
		var f = false;		 // [-]でてきたよフラグ
		var f2= false;		 // [.]でてきたよフラグ

		for(i=0; i<val.length; i++){
			if (flag) {
				if ((val.substring(i, i+1)>="0" && val.substring(i, i+1)<="9") || (val.substring(i, i+1)==",") || (val.substring(i, i+1)=="-") || (val.substring(i, i+1)==".")){
					if ((val.substring(i, i+1)=="-")) {
						if (f) {
							return false;
						} else {
							f = true;
						}
					}
					if ((val.substring(i, i+1)==".")) {
						if (f2) {
							return false;
						} else {
							f2 = true;
						}
					}
					continue;
				} else {
					return(false);
				}
			} else {
				if ((val.substring(i, i+1)>="0" && val.substring(i, i+1)<="9") || (val.substring(i, i+1)==",") || (val.substring(i, i+1)=="-")){
					if ((val.substring(i, i+1)=="-")) {
						if (f) {
							return false;
						} else {
							f = true;
						}
					}
					continue;
				} else {
					return false;
				}
			}
		}
		return true;
	}

	// 書式付けされた数値文字列から数値部を得る
	// val 数値化する文字列
	// flag 	True:小数点を許可する False:小数点を許可しない
	// 戻り値  結果 false:数値ではない
	function toNumber(val, flag){
		var v_result = "";
		var v_offset = val.length;
		var v_point;			// decimal point

		if (val.charAt(0) == "\\"){val = val.substring(1, val.length);}// delete \ sign from the top
		if (val.charAt(val.length - 1) == "-"){v_offset = val.length - 1;}// check if back sign
		v_point = val.lastIndexOf(".", v_offset);			// search decimal point

		if (v_point >=0){
			v_result = val.substring(v_point + 1, v_offset);
			if (isNumeric(v_result, flag) == true){
				v_result = "." + v_result;
				v_point = v_point - 1;
			} else {
				return(false)
			}
		} else {
			v_point = v_offset - 1;
		}

		for (var i=v_point; i>=0;){
			for (var j=0; j<3; j++){
				if ((isNumeric(val.charAt(i), flag) == true) || ((val.charAt(i) == "-") && (i == 0))){
					v_result = val.charAt(i--) + v_result;
				} else{
					return(false);					// illegal value
				}
				if (i < 0){break;}
			}
			if ((j == 3) && (val.charAt(i) == ",")){i = i - 1;}
		}
		if (v_offset == val.length - 1){			// back sign
			if (v_result.charAt(0) != "-"){
				v_result = "-" + v_result;
			} else {
				return(false);
			}
		}
		v_result = parseFloat(v_result);
		return(v_result);
	}

	// 小数点以下の桁数を揃える
	// num 対象の数値文字列
	// decCnt 小数点以下の桁数
	// 戻り値 小数点以下の桁数を揃えた数値文字列
	function addZero(num, decCnt) {
		var zero = "";
		if (decCnt==0) {
			return num;
		}
		for (i=0;i < decCnt;i++) {
			zero += "0";
		}
		// ピリオド検索 見つからなければ文字列の最後にピリオド付加
		var flag = false;
		for (i=0;i < num.length;i++) {
			if (num.substring(i) == ".") {
				flag = true;
				break;
			}
		}
		if (flag) {
			n = num;
		} else {
			n = num + ".";
		}
		n = n.split(".")[0] + "." + (n.split(".")[1]+zero).substring(0,decCnt);
		return n;
	}

	// 数値の書式付け処理
	// p_format:1:-123,456.78  2:123,456.78-  3:\-123,456.78  4:\123,456.78-
	// return 書式付けされた文字列
	function editNumber(p_format, p_number){
		var v_result = "";
		var v_offset = 0;		// 0:>=0, 1:<0
		var v_point;			// decimal point

		p_number = "" + parseFloat(p_number);			// eliminate spaces
		if (p_number < 0){v_offset = 1;}				// check if negative
		v_point = p_number.indexOf(".", 0); 			// search decimal point

		if (v_point >=0){
			v_result = p_number.substring(v_point, p_number.length);
			v_point = v_point - 1;
		} else {
			v_point = p_number.length - 1;
		}

		for (var i=v_point; i>=v_offset;){
			for (var j=0; j<3; j++){
				v_result = p_number.charAt(i--) + v_result;
					if (i < v_offset){break;}
			}
			if (j == 3){v_result = "," + v_result;}
		}

		if (p_format == 1){ 							// -123,456
			if (v_offset == 1){v_result = "-" + v_result;}
		}
		if (p_format == 2){ 							// 123,456-
			if (v_offset == 1){v_result = v_result + "-";}
		}
		if (p_format == 3){ 							// \-123,456
			if (v_offset == 1){v_result = "-" + v_result;}
			v_result = "\\" + v_result;
		}
		if (p_format == 4){ 							// \123,456-
			if (v_offset == 1){v_result = v_result + "-";}
			v_result = "\\" + v_result;
		}
		return(v_result);
	}

	// 日付かどうかのチェック(空ならチェックしない : true)
	// defaultvalue 設定しない
	// 引数 	日付のテキストフィールドオブジェクト
	// 戻り値 true:正常 false:エラー
	function checkDateTextField(object) {
		object.value = object.value.replace(/[' 　']/g,"");
		var d = covDateField(object.value);
		var wk = d;
		if (d == "") {
			return true;
		}
		var s=d.split("/");
		if (s.length!=3) {
			alert("日付を入力してください");
			object.value = object.defaultValue;
			object.focus();
			return false;
		}
		var y=s[0];
		var m=s[1];
		var d=s[2];

		if (isNaN(y) || isNaN(m) || isNaN(d) || !isNumeric(y,false) || !isNumeric(m,false) || !isNumeric(d,false)) {
			alert("数字以外の文字が含まれています");
			object.value = object.defaultValue;
			object.focus();
			return false;
		} else {
			if (y.length != 4) {
				alert("年は西暦4桁で入力してください");
				object.value = object.defaultValue;
				object.focus();
				return false;
			} else {
				if (y < 1) {
					alert("年は西暦4桁で入力してください");
					object.value = object.defaultValue;
					object.focus();
					return false;
				} else if (m < 1 || m > 12) {
					alert("月は1〜12の数字を入力してください");
					object.value = object.defaultValue;
					object.focus();
					return false;
				} else {
					if (d<=0 || d>30+((m==4||m==6||m==9||m==11)?0:1) || (m==2&&d>28+(((y%4==0&&y%100!=0)||y%400==0)?1:0)) ) {
						alert(y+"年"+m+"月"+d+"日"+"は不正な日付です");
						object.value = object.defaultValue;
						object.focus();
						return false;
					}
				}
			}
		}
		object.value = wk;
		object.defaultValue = object.value;
		return true;
	}

	// 日付かどうかのチェック(空ならチェックしない : true)
	// defaultvalue 設定しない
	// 引数 	日付のテキストフィールドオブジェクト
	// 戻り値 true:正常 false:エラー
	function checkDateTextField4YM(object) {
		object.value = object.value.replace(/[' 　']/g,"");
		var tmpDate = object.value;
		var d = covDateField4YM(tmpDate);
		var wk = d.substring(0,7);
		if (d == "") {
			return true;
		}
		var s=d.split("/");
		if (s.length!=2) {
			alert("日付を入力してください");
			object.value = object.defaultValue;
			object.focus();
			return false;
		}
		var y=s[0];
		var m=s[1];

		if (isNaN(y) || isNaN(m) || !isNumeric(y,false) || !isNumeric(m,false)) {
			alert("数字以外の文字が含まれています");
			object.value = object.defaultValue;
			object.focus();
			return false;
		} else {
			if (y.length != 4) {
				alert("年は西暦4桁で入力してください");
				object.value = object.defaultValue;
				object.focus();
				return false;
			} else {
				if (y < 1) {
					alert("年は西暦4桁で入力してください");
					object.value = object.defaultValue;
					object.focus();
					return false;
				} else if (m < 1 || m > 12) {
					alert("月は1〜12の数字を入力してください");
					object.value = object.defaultValue;
					object.focus();
					return false;
				}
			}
		}
		object.value = wk;
		object.defaultValue = object.value;
		return true;
	}

	// 日付変換 yyyymmdd → yyyy/mm/dd, yymmdd → yyyy/mm/dd
	//			yy-mm-dd → yyyy/mm/dd, yyyy-mm-dd → yyyy/mm/dd
	//			(年が2桁の場合yy>30で"19",yy<=30で"20"を付加しています。)
	// 戻り値：書式変換した日付文字列
	function covDateField(value){
		var doc = value;
		var str = "";
		var buf = "";
		if(value != ""){
			// マッチングチェック
			str = value.match(/^\d{1,4}\/\d{1,2}\/\d{1,2}$/);
			if(str != null){
				str = str.toString();
				buf = str;
				buf = buf.replace(/^(\d{1}|\d{2}|\d{4})\/(\d{1,2})\/(\d{1,2})$/, "$1/$2/$3");
				if (RegExp.$1.length <= 2){
					if(RegExp.$1.length == 1){
						buf = insertStr(buf.toString(),"0",0);
					}
					if(parseInt(buf, 10) <= 30){
						buf = "20" + buf;
					} else {
						buf = "19" + buf;
					}
				}
				if (RegExp.$2.length == 1){
					buf = insertStr(buf.toString(),"0",5);
				}
				if (RegExp.$3.length == 1){
					buf = insertStr(buf.toString(),"0",8);
				}
				return buf;
			}
			str = value.match(/^\d{1,4}-\d{1,2}-\d{1,2}$/);
			if(str != null){
				str = str.toString();
				buf = str;
				buf = buf.replace(/^(\d{1}|\d{2}|\d{4})-(\d{1,2})-(\d{1,2})$/, "$1/$2/$3");
				if (RegExp.$1.length <= 2){
					if(RegExp.$1.length == 1){
						buf = insertStr(buf.toString(),"0",0);
					}
					if(parseInt(buf, 10) <= 30){
						buf = "20" + buf;
					} else {
						buf = "19" + buf;
					}
				}
				if (RegExp.$2.length == 1){
					buf = insertStr(buf.toString(),"0",5);
				}
				if (RegExp.$3.length == 1){
					buf = insertStr(buf.toString(),"0",8);
				}
				return buf;
			}
			str = value.match(/^\d{6}$|^\d{8}$/);
			if(str != null){
				buf = str.toString();
				if(buf.length == 6){
					if(parseInt(buf.substring(0,2), 10) <= 30){
						buf = "20" + buf;
					} else {
						buf = "19" + buf;
					}
				}
				buf = insertStr(buf.toString(),"/",4);
				buf = insertStr(buf,"/",7);
				return buf;
			}
		}
		return value;
	}

	// 日付変換 yyyymm → yyyy/mm, yymm    → yyyy/mm
	//			yy-mm  → yyyy/mm, yyyy-mm → yyyy/mm
	//			(年が2桁の場合yy>30で"19",yy<=30で"20"を付加しています。)
	// 戻り値：書式変換した日付文字列
	function covDateField4YM(value){
		var doc = value;
		var str = "";
		var buf = "";
		if(value != ""){
			// マッチングチェック
			str = value.match(/^\d{1,4}\/\d{1,2}$/);
			if(str != null){
				str = str.toString();
				buf = str;
				buf = buf.replace(/^(\d{1}|\d{2}|\d{4})\/(\d{1,2})$/, "$1/$2");
				if (RegExp.$1.length <= 2){
					if(RegExp.$1.length == 1){
						buf = insertStr(buf.toString(),"0",0);
					}
					if(parseInt(buf, 10) <= 30){
						buf = "20" + buf;
					} else {
						buf = "19" + buf;
					}
				}
				if (RegExp.$2.length == 1){
					buf = insertStr(buf.toString(),"0",5);
				}
				return buf;
			}
			str = value.match(/^\d{1,4}-\d{1,2}$/);
			if(str != null){
				str = str.toString();
				buf = str;
				buf = buf.replace(/^(\d{1}|\d{2}|\d{4})-(\d{1,2})$/, "$1/$2");
				if (RegExp.$1.length <= 2){
					if(RegExp.$1.length == 1){
						buf = insertStr(buf.toString(),"0",0);
					}
					if(parseInt(buf, 10) <= 30){
						buf = "20" + buf;
					} else {
						buf = "19" + buf;
					}
				}
				if (RegExp.$2.length == 1){
					buf = insertStr(buf.toString(),"0",5);
				}
				return buf;
			}
			str = value.match(/^\d{4}$|^\d{6}$/);
			if(str != null){
				buf = str.toString();
				if(buf.length == 4){
					if(parseInt(buf.substring(0,2), 10) <= 30){
						buf = "20" + buf;
					} else {
						buf = "19" + buf;
					}
				}
				buf = insertStr(buf.toString(),"/",4);
				return buf;
			}
		}
		return value;
	}

    // 時刻かどうかのチェック(空ならチェックしない : true)
    // defaultvalue 設定しない
    // 引数   時刻のテキストフィールドオブジェクト
    // 戻り値 true:正常 false:エラー
    function checkTimeTextField(object) {
        object.value = object.value.replace(/[' 　']/g,"");
        var val = object.value;
        if (val == "") return true;
        if (val.search(/^\d{1,2}:\d{1,2}$/) != -1) {
            var s = val.split(":");
            if (s[0] < 0 || 23 < s[0]) {
                alert("時は0〜23の数字を入力してください");
                object.value = object.defaultValue;
                object.focus();
                return false;
            }
            if (s[1] < 0 || 59 < s[1]) {
                alert("分は0〜59の数字を入力してください");
                object.value = object.defaultValue;
                object.focus();
                return false;
            }
            if (s[0].length == 1) s[0] = '0' + s[0];
            if (s[1].length == 1) s[1] = '0' + s[1];
            object.value = s[0] + ':' + s[1];
            return true;
        } else if (val.search(/^\d{4}$/) != -1) {
            var s = {};
            s[0] = val.substring(0,2);
            s[1] = val.substring(2,2);
            if (s[0] < 0 || 23 < s[0]) {
                alert("時は0〜23の数字を入力してください");
                object.value = object.defaultValue;
                object.focus();
                return false;
            }
            if (s[1] < 0 || 59 < s[1]) {
                alert("分は0〜59の数字を入力してください");
                object.value = object.defaultValue;
                object.focus();
                return false;
            }
            val = insertStr(val, ":", 2);
            object.value = val;
            return true;
        } else {
            alert("時刻を入力してください");
            object.value = object.defaultValue;
            object.focus();
            return false;
        }
    }
