/*関数名
isNotEmpty(elem, msg)			フィールドに文字列が記入されているか検証---<elem>検証対象のID名 <msg>falseの場合に表示するメッセージ <return>true or false
isNumber(elem, msg)				フィールドの文字列が整数値または負数値であるか検証---<elem>検証対象のID名 <msg>falseの場合に表示するメッセージ <return>true or false
isEmailAddr(elem, msg)		フィールドがメールアドレスの形式かどうか検証---<elem>検証対象のID名 <msg>falseの場合に表示するメッセージ <return>true or false
getArray(xdata, separator)指定した区切り文字で分割して配列を返す---<xdata>対象となる文字列　<separator>区切り文字　<return>配列(Array[])
numeralsOnly(evt)					数値のみ入力可能とする---<evt>キーイベント　<return>true or false <利用例>onkeypress="return numeralsOnly(event)"
delComma(xstr)						カンマ区切りのデータから数値のみ取り出す---<xstr>カンマを含む数値データ <return>数値(float型)
insertComma(str)					数値にカンマを含める---<str>数値データ <return>カンマ付き数値(文字列型)
strToNum(xstr)						文字列から数値のみを取り出す---<xstr>数値を含む文字列 <return>数値(int型) ISP000345 → 345
Fulltohalf(data)					全角数値を半角数値に変換---<data>全角数値 <return>半角数値
*/

function isNotEmpty(elem, msg){
	//フィールドの文字列が１文字以上含まれている事を検証
	//<elem>要素のID</elem>
	//<msg>falseの場合に表示するメッセージ</msg>
	var str = document.getElementById(elem).value;
	if(str == null || str.length == 0){
		alert(msg);
		return false;
	} else {
		return true;
	}
}

function isNumber(elem, msg) {
	//入力された文字が整数値または負数値である事を検証
	//<elem>要素のID</elem>
	//<msg>falseの場合に表示するメッセージ</msg>
	var str = document.getElementById(elem).value;
	var oneDecimal = false;
	var oneChar = 0;
	//値が数値データ型にキャストされていないようにする
	str = str.toString();
	for(var i=0; i<str.length; i++){
		oneChar = str.charAt(i).charCodeAt(0);
		//最初の文字としての負号はOK
		if(oneChar == 45){
			if(i == 0){
				continue;
			} else {
				alert(msg);
				return false;
			}
		}
		//小数点１つはOK
		if(oneChar == 46){
			if(!oneDecimal){
				oneDecimal = true;
				continue;
			}else{
				alert(msg);
				return false;
			}
		}
		//0から9以外の文字はNG
		if(oneChar < 48 || oneChar > 57){
			alert(msg);
			return false;
		}
	}
	return true;
}

function isEmailAddr(elem, msg){
	//メールアドレス形式の文字列である事を検証
	//<elem>要素のID</elem>
	//<msg>falseの場合に表示するメッセージ</msg>
	var str = document.getElementById(elem).value;
	str = str.toLowerCase();
	if(str.indexOf("@") > 1) {
		var addr = str.substring(0, str.indexOf("@"));
		var domain = str.substring(str.indexOf("@") + 1, str.length);
		//少なくとも最上位ドメインが１つ必要
		if(domain.indexOf(".") == -1){
			alert(msg);
			return false;
		}
		//アドレス部分を１文字ずつ解析する
		for(var i=0; i<addr.length; i++){
			oneChar = addr.charAt(i).charCodeAt(0);
			//最初の位置にドットやハイフンは許されない。最後にドットは許されない。
			if((i == 0 && (oneChar == 45 || oneChar == 46)) || (i == addr.length -1 && oneChar == 46)){
				alert(msg);
				return false;
			}
			//利用可能な文字(- . 0-9 a-z)
			if(oneChar == 45 || oneChar == 46 || oneChar == 95 || (oneChar > 47 && oneChar < 58) || (oneChar > 96 && oneChar < 123)){
				continue;
			} else {
				alert(msg);
				return false;
			}
		}
		//ドメイン部分を１文字ずつ解析する
		for(i=0; i<domain.length; i++){
			oneChar = domain.charAt(i).charCodeAt(0);
			if((i == 0 &&(oneChar == 45 || oneChar == 46)) || ((i == domain.length -1 || i == domain.length - 2) && oneChar == 46)){
				alert(msg);
				return false;
			}
			if(oneChar == 45 || oneChar == 46 || oneChar == 95 || (oneChar > 47 && oneChar < 58) || (oneChar > 96 || oneChar < 123)){
				continue;
			} else {
				alert(msg);
				return false;
			}
		}
		return true;
	}
	alert(msg);
	return false;
}

function getArray(xdata, separator){
	//カンマ区切りの文字列を配列で返す
	//使用方法 xArray = getArray("a,b,c", ",");
	//結果 xArray[0]="a" xArray[1]="b" xArray[2]="c"
	var myArray = new Array();
	var xfirst = 0;
	var xlast = 0;
	var i = 0;

	while(xlast >= 0){
		xlast = xdata.indexOf(separator, xfirst);
		if(xlast > 0){
			myArray[i] = xdata.substring(xfirst, xlast);
			xfirst = xlast + 1;
			i++;
		}
		else{
			myArray[i] = xdata.substring(xfirst);
		}
	}
	return myArray;
}

function numeralsOnly(evt){
	//数字のみ入力許可
	//使用方法 onkeypress="return numeralsOnly(event);"
	evt = (evt) ? evt : event;
	var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode : ((evt.which) ? evt.which : 0));
	if(charCode > 31 && (charCode < 48 || charCode > 57) && charCode != 46 && charCode != 45){
		return false;
	}
	return true;
}

function delComma(xstr){
	//カンマ区切りの数値から数値のみを取り出し、Float型に変換
	matchstr = new RegExp("[^\,]", "g");
	strArray = xstr.match(matchstr);
	r_str = strArray.join("");
	return parseFloat(r_str);
}

function insertComma(str) {
	if(! isNaN(str)) {
		str = str.toString();
	}
	//カンマを追加する
	var temp1 = str.match(/./g).reverse().join("");
	temp1 = temp1.replace(/(\d{3})/g,"$1,");
	temp1 = temp1.match(/./g).reverse().join("").replace(/^,/,"");
	return temp1;
}

function strToNum(xstr){
	//数値のみを取り出してInt型に変換
	matchstr = new RegExp("[0-9]+", "g");
	strArray = xstr.match(matchstr);
	if(strArray == null) {
		r_str = "0";
	} else {
		r_str = strArray.join("");
	}
	return parseInt(r_str);
}

//全角数字配列
var char1 = new Array("１","２","３","４","５","６","７","８","９","０");
//半角数字配列
var char2 = new Array(1,2,3,4,5,6,7,8,9,0);
var count;
function Fulltohalf(data){
	while(data.match(/[０-９]/)){
		//入力データに全角数字がある場合
		for(count = 0; count < char1.length; count++){
			//入力データを全角数字から半角数字に置換する
			data = data.replace(char1[count], char2[count]);
		}
	}
	return data;
}