/*********************************************************************
 * 
 * 
 * 
*********************************************************************/

/******************************************************
 * 定数
******************************************************/
var GB_COLOR_NG = "#fef2f4";								// 入力エリアの背景色(異常時)
var GB_COLOR_OK = "#ffffff";								// 入力エリアの背景色(正常時)

var STRLIST_HIRAGANA = "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをんがぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽゃゅょぁぃぅぇぉっ";
var STRLIST_KATAKANA_ZEN = "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴャュョァィゥェォッー";
var STRLIST_KATAKANA_HAN = "ｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜｦﾝﾞﾟｬｭｮｧｨｩｪｫｯｰ";
var STRLIST_NUMBER_ZEN = "０１２３４５６７８９";
var STRLIST_NUMBER_HAN = "0123456789";
var STRLIST_ALPHABET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var STRLIST_NGWORD = "\"',?!";

/******************************************************
 * function name	:setFocus
 *					 フォーカスをセットする
 * param			:フォームオブジェクト
 * return			:
******************************************************/
function setFocus(objForm) {
	objForm.focus();
	return false;
}

/******************************************************
 * function name	:setBackGroundColor
 *					 バッググラウンドのスタイルを設定する
 * param			:エレメント
 * 					 カラー値
 * return			:
******************************************************/
function setBackGroundColor(objElement, val) {
	objElement.style.backgroundColor = val;
	return false;
}

/******************************************************
 * function name	:setInnerText
 *					 インナーテキストを設定する
 * param			:エレメント
 * 					 文字列
 * return			:
******************************************************/
function setInnerText(objElement, val) {
	if (typeof objElement.textContent != "undefined") {
		if ( objElement.textContent == "" && val == "" ) return false;

		objElement.textContent = val;
	} else {
		if ( objElement.innerText == "" && val == "" ) return false;

		objElement.innerText = val;
	}
	return false;
}

/******************************************************
 * function name	:getInnerText
 *					 インナーテキストを取得する
 * param			:エレメント
 * 					 文字列
 * return			:
******************************************************/
function getInnerText(objElement) {
	if (typeof objElement.textContent != "undefined") {
		val = objElement.textContent;
	} else {
		val = objElement.innerText;
	}
	return val;
}


/******************************************************
 * function name	:getMessage
 *					 指定したメッセージを取得する
 * param			:メッセージ
 * 					 変換文字列
 * return			:
******************************************************/
function getMessage(messageId, repstr1, repstr2, repstr3, repstr4, repstr5) {
	var msg = msgList[messageId];
	if ( !isEmpty(msg) ) {
		msg = msg.replace('%1%', repstr1);
		msg = msg.replace('%2%', repstr2);
		msg = msg.replace('%3%', repstr3);
		msg = msg.replace('%4%', repstr4);
		msg = msg.replace('%5%', repstr5);
	}
	return msg;
}

/******************************************************
 * function name	:getSelectValue
 *					 セレクトボックスの値を取得する
 * param			:セレクトボックスオブジェクト
 * return			:
******************************************************/
function getSelectValue(objSelect) {
	return objSelect.options[objSelect.selectedIndex].value;
}

/******************************************************
 * function name	:isMatch
 *					 指定した文字列だけで構成されているか確認する
 * param			:指定文字列
 * 					 文字列
 * return			:
******************************************************/
function isMatch(target, val) {
	for ( i = 0; i < val.length; i++ ) {
		if ( target.indexOf(val.substring(i, i+1)) < 0 ) {
			return false;
		}
	}
	return true;
}

/******************************************************
 * function name	:isMatch
 *					 指定した文字列が含まれているか確認する
 * param			:指定文字列
 * 					 文字列
 * return			:
******************************************************/
function isContains(target, val) {
	for ( i = 0; i < val.length; i++ ) {
		if ( 0 <= target.indexOf(val.substring(i, i+1)) ) {
			return true;
		}
	}
	return false;
}


/******************************************************
 * function name	:isMail
 *					 メールアドレス判定
 * param			:文字列
 * return			:
******************************************************/
function isMail(val) {
	return val.match(/^[0-9A-Za-z._-]+@[\w-]+\.+[\w\.-]+\w{1,}$/);
}

/******************************************************
 * function name	:isZenkakuKana
 *					 全角カナ判定
 * param			:文字列
 * return			:
******************************************************/
function isZenkakuKana(val) {
	return isMatch(STRLIST_KATAKANA_ZEN, val);
}

/******************************************************
 * function name	:isNum
 *					 半角数値チェック
 * param			:文字列
 * return			:
******************************************************/
function isNummeric(val) {
	return isMatch(STRLIST_NUMBER_HAN, val);
//	return val.match(/[^0-9]/g);
}

/******************************************************
 * function name	:isNumAlph
 *					 半角英数値チェック
 * param			:文字列
 * return			:
******************************************************/
function isNumAlph(val) {
	return isMatch(STRLIST_ALPHABET + STRLIST_NUMBER_HAN, val);
//	return val.match(/^[a-zA-Z0-9]+$/);
}

/******************************************************
 * function name	:getByte
 *					 バイト数を取得する
 * param			:文字列
 * return			:バイト数
******************************************************/
function getByte(val) {
	var count = 0;
	for ( var i = 0; i < val.length; ++i ) {
		var sub = val.substring(i, i + 1);
		if( isZenkaku(sub) ){
			count += 2;
		} else {
			count += 1;
		}
	}
	return count;
}

/******************************************************
 * function name	:getByte
 *					 バイト数を取得する
 * param			:文字列
 * return			:
******************************************************/
function isZenkaku(val) {
	for (var i = 0; i < val.length; ++i) {
		var c = val.charCodeAt(i);
		//  半角カタカナは不許可
		if (c < 256 || (c >= 0xff61 && c <= 0xff9f)) {
			return false;
		}
	}
	return true;
}


/******************************************************
 * function name	:searchHankakuKana
 *					 半角カナを検索する
 * param			:文字列
 * return			:
******************************************************/
function searchHankakuKana(val) {
	for (var i = 0; i < val.length; ++i) {
		var c = val.charCodeAt(i);
		//  半角カタカナは不許可
		if (c >= 0xff61 && c <= 0xff9f) {
			return true;
		}
	}
	return false;
}


/******************************************************
 * function name	:isNGWord
 *					 NGワードが含まれていないか確認する
 * param			:文字列
 * return			:
******************************************************/
function isNGWord(val) {
	return isContains(STRLIST_NGWORD, val);
}

/******************************************************
 * function name	:isAllowLen
 *					 指定した文字列が許容範囲の桁数か確認する
 * param			:文字列
 *					 最小桁数
 *					 最大桁数
 * return			:
******************************************************/
function isAllowLen(val, minlen, maxlen) {
	return ( minlen <= val.length && val.length <= maxlen);
}

/******************************************************
 * function name	:isEmpty
 *					 文字列が空か確認する
 * param			:文字列
 * 					 trimする／しない
 * return			:
******************************************************/
function isEmpty(val, flg) {
	if ( flg ) {
		val = val.replace(/(^\s+)|(\s+$)/g, "");
	}
	return ( val == '' );
}

/******************************************************
 * function name	:isDate
 *					 日付の妥当性チェック
 * param			:年
 *					 月
 *					 日
 * return			:
******************************************************/
function isDate(y, m, d) {
	m--;		// Javascriptは、0-11で表現

	if ( m >= 0 && m <= 11 && d >= 1 && d <= 31 ) {
		var dt = new Date(y, m, d);

		if ( isNaN(dt) ) {
			return false;
		} else if( dt.getFullYear() == y && dt.getMonth() == m && dt.getDate() == d){
			return true;
		}else{
			return false;
		}
	}else{
		return false;
	}
}

/******************************************************
 * function name	:repHankakuNum
 *					 全角数値を半角数値に変換する
 * param			:文字列
 * return			:変換後文字列
******************************************************/
function repHankakuNum(val) {

	if ( isEmpty(val, true) ) return val;

	var ret = "";
	for (i=0; i < val.length; i++) {
		idx = STRLIST_NUMBER_ZEN.indexOf(val.substring(i, i+1));
		if ( 0 <= idx ) {
			ret += STRLIST_NUMBER_HAN.substring(idx, idx+1);
		} else {
			ret += val.substring(i, i+1)
		}
	}

	return ret;
}


/******************************************************
 * function name	:stopSubmit
 *					:EnterKeyでSubmitさせないようにする
 * param			:文字列
 * return			:変換後文字列
******************************************************/
function stopSubmit(e) {
	if (!e) var e = window.event;
	if(e.keyCode == 13) return false;
}

/******************************************************
 * function name	:money_format
 *					:金額フォーマット返還
 * param			:文字列
 * return			:変換後文字列
******************************************************/
function money_format(val) {
	var newval = "";
	if ( !isNummeric(val) ) return;

	var num = new String(val).replace(/,/g, "");
	while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
	return num;
}
