﻿/*関数名
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
getObjectHeight(obj)			要素の高さを取得---<obj>検索対象のID名 <return>高さ(px)
getObjectWidth(obj)				要素の幅を取得---<obj>検索対象のID名 <return>幅(px)
getObjectTop(obj)					要素のY座標を取得---<obj>検索対象のID名 <return>Y座標(px)
shiftTo(obj, x, y)				要素を指定の位置に移動---<obj>移動する要素のID名 <x>移動するX座標 <y>移動するY座標
getInsideWindowHeight()		ブラウザウィンドウの高さを取得---<return> ウィンドウの高さ(px)
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
blockEnter(evt)						Enterキーを無効にする---<evt>キーイベント　<return>true(Enterキー以外) or false(Enterキー)
*/

var isCSS, isW3C, isIE4, isNN4, isIE6CSS;

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 initDHTMLAPI(){
	if(document.images){
		isCSS = (document.body && document.body.style) ? true : false;
		isW3C = (isCSS && document.getElementById) ? true : false;
		isIE4 = (isCSS && document.all) ? true : false;
		isNN4 = (document.layers) ? true : false;
		isIE6CSS = (document.compatMode && document.compatMode.indexOf("CSS1") >= 0) ? true : false;
	}
}

function seekLayer(doc, name){
	var theObj;
	for(var i=0; i<doc.layers.length; i++){
		if(doc.layers[i].name == name){
			theObj = doc.layers[i];
			break;
		}

		if(doc.layers[i].document.layers.length > 0){
			theObj = seekLayer(document.layers[i].document, name);
		}
	}

	return theObj;
}

function getRawObject(obj){
	var theObj;
	if(typeof obj == "string"){
		if(isW3C){
			theObj = document.getElementById(obj);
		} else if(isIE4){
			theObj = document.all(obj);
		} else if(isNN4){
			theObj = seekLayer(document, obj);
		}
	}else{
		theObj = obj;
	}

	return theObj;
}

function getObject(obj){
	var theObj = getRawObject(obj);
	if (theObj && isCSS){
		theObj = theObj.style;
	}

	return theObj;
}

function getObjectHeight(obj){
	//要素の高さを取得
	var elem =getRawObject(obj);
	var result = 0;
	if(elem.offsetHeight){
		result = elem.offsetHeight;
	}else if(elem.clip && elem.clip.height){
		result = elem.clip.height;
	}else if(elem.style && elem.style.pixelHeight){
		result = elem.style.pixelHeight;
	}

	return parseInt(result);
}

function getObjectWidth(obj){
	//要素の幅を取得
	var elem = getRawObject(obj);
	var result = 0;
	if(elem.offsetWidth){
		result = elem.offsetWidth;
	} else if(elem.clip && elem.clip.width){
		result = elem.clip.width;
	} else if(elem.style && elem.style.pixelWidth){
		reslt = elem.style.pixelWidth;
	}

	return parseInt(result);
}

function getObjectTop(obj){
	//要素のY座標を取得
	var elem = getRawObject(obj);
	var result = 0;
	if(document.defaultView){
		var style = document.defaultView;
		var cssDecl = style.getComputedStyle(elem, "");
		result = cssDecl.getPropertyValue("top");
	} else if(elem.currentStyle){
		result = elem.currentStyle.top;
	}	else if(elem.style){
		result = elem.style.top;
	} else if(isNN4){
		result = elem.top;
	}

	return parseInt(result);
}

function shiftTo(obj, x, y){
	//要素を移動
	var theObj = getObject(obj);
	if(theObj){
		if(isCSS){
			var units = (typeof theObj.left == "string") ? "px" : 0;
			theObj.left = x + units;
			theObj.top = y + units;
		} else if(isNN4){
			theObj.moveTo(x,y);
		}
	}
}

function getInsideWindowHeight(){
	//ブラウザのウインドウの高さを取得
	if(window.innerHeight){
		return window.innerHeight;
	} else if(isIE6CSS){
		return document.body.parentElement.clientHeight;
	} else if(document.body && document.body.clientHeight){
		return document.body.clientHeight;
	}

	return 0;
}

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) {
	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);
	r_str = strArray.join("");
	return parseInt(r_str);
}

function blockEnter(evt){
	evt = (evt) ? evt : event;
	var charCode = (evt.charCode) ? evt.charCode : ((evt.which) ? evt.which : evt.keyCode);
	if(charCode == 13 || charCode == 3){
		return false;
	}else{
		return true;
	}
}


