/*
	Web経審　Common Javascriptファイル
	ファイル名：common.js
	バージョン情報：0.0.1
	更新日：2008/02/25
	
	Copyright (C) 2008 Japan Multimedia Equipment, inc. All Rights Reserved.
*/

/* DOMチェック */
/*
	DocumentID取得確認
	
	@return	boolen	DocumentID取得の真偽
*/
function checkId() {
	if(document.getElementById) {
		return true;
	} else {
		return false;
	}
}

/* Window処理 */
/*
	PopUp Window表示
	
	@param	string	u	表示URL
	@param	string	t	表示Windowのtarget属性
	@param	number	w	Windowの幅
	@param	number	h	Windowの高さ
	@param	number	x	Windowの縦位置
	@param	number	y	Windowの横位置
	@param	boolen	s	スクロールバー有効・無効の真偽
*/
function popupWin(u, t, w, h, x, y, s) {
	var param = 'width='+w+', height='+h+', left='+x+', top='+y;
	if(s) {
		param += ', scrollbars';
	}
	document.window.open(u, t, param);
}

/*
	色変更
	
	@param	string	id	ID名
	@param	string	c	色指定
*/
function setFGColor(id, c) {
	if(checkId()) {
		document.getElementById(id).style.color = c;
		return true;
	} else {
		return false;
	}
}

/*
	背景色変更
	
	@param	string	id	ID名
	@param	string	c	色指定
*/
function setBGColor(id, c) {
	if(checkId()) {
		document.getElementById(id).style.backgroundColor = c;
		return true;
	} else {
		return false;
	}
}

/*
	メールアドレス確認
*/
function chkRegEmail(str){
  /* E-mail形式の正規表現パターン */
  /* @が含まれていて、最後が .(ドット)でないなら正しいとする */
    var erg=/[!#-9A-~]+@+[a-z0-9]+.+[^.]$/i;
  /* 入力された値がパターンにマッチするか調べる */
  if(str!=''){
    if(str.match(erg)){
      return true;
    }else{
      alert('メールアドレスの形式が不正です');
      return false;
    }
  }else{
    /* 何も入力されていない場合はアラート表示 */
    alert('メールアドレスを入力してください');
    return false;
  }
}

/* フォームのボタン処理 */
/*
	フォーム送信
	
	@param	string	fid	送信フォームID名
	@param	string	pid	ボタンID名
*/
function submitForm(fid, bid) {
	if(checkId()) {
		// buttonの2度押し防止
		//disableButton(fid, bid, true);
		
		document.getElementById(fid).submit();
		return true;
	} else {
		return false;
	}
}
/*
	確認付きフォーム送信
	
	@param	string	fid	送信フォームID名
	@param	string	pid	ボタンID名
*/
function submitCheckForm(fid, bid) {
	if(checkId()) {
		// buttonの2度押し防止
		disableButton(fid, bid, true);
		
		// 送信確認ダイアログ
		cf = confirm('この内容で送信してよろしいでしょうか？');
		
		if(cf) {
			document.getElementById(fid).submit();
			return true;
		} else {
			disableButton(fid, bid, false);
			return false;
		}
	} else {
		return false;
	}
}
/*
	未選択確認付きフォーム送信
	
	@param	string	fid	送信フォームID名
	@param	string	pid	ボタンID名
	@param	array	rid	未選択確認するIDの配列
*/
function submitSelectCheckForm(fid, bid, rid) {
	if(checkId()) {
		// buttonの2度押し防止
		//disableButton(fid, bid, true);
		
		for(var i=0; i<rid.length; i++) {
			if(document.getElementById(rid[i]).value == 'false') {
				window.alert("未選択の項目があります。");
				return false;
			}
		}
		document.getElementById(fid).submit();
		return true;
	} else {
		return false;
	}
}
/*
	確認付きフォームクリア
	
	@param	string	fid	送信フォームID名
*/
function clearCheckForm(fid){
	if(checkId()) {		
		// 確認ダイアログ
		cf = confirm('全て元に戻してよろしいでしょうか？');
		if(cf) {
			document.getElementById(fid).reset();
			return true;
		} else {
			return false;
		}
	} else {
		return false;
	}
}
/*
	フォームクリア
	
	@param	string	fid	送信フォームID名
*/
function clearForm(fid){
	if(checkId()) {
		document.getElementById(fid).reset();
		return true;
	} else {
		return false;
	}
}
/*
	指定IDリセット付フォームクリア
	
	@param	string	fid	送信フォームID名
	@param	array	rid	リセットするIDの配列
*/
function clearCheckReset(fid, rid){
	if(checkId()) {
		// 確認ダイアログ
		cf = confirm('初期化してよろしいでしょうか？');
		if(cf) {
			document.getElementById(fid).reset();
			for(var i=0; i<rid.length; i++) {
				setBGColor(rid[i], '#FFFFFF');
			}
			return true;
		} else {
			return false;
		}
	} else {
		return false;
	}
}
/*
	指定IDリセット付フォームクリア
	
	@param	string	fid	送信フォームID名
	@param	array	rid	リセットするIDの配列
*/
function clearReset(fid, rid){
	if(checkId()) {
		document.getElementById(fid).reset();
		for(var i=0; i<rid.length; i++) {
			setBGColor(rid[i], '#FFFFFF');
    	}
		return true;
	} else {
		return false;
	}
}

/*
	ボタンの有効・無効化
	
	@param	string	fid	送信フォームID名
	@param	string	pid	ボタンID名
	@param	boolen	flg	有効・無効の真偽
*/
function disableButton(fid, bid, flg) {
	if(flg) {
		document.getElementById(bid).disabled = true;
	} else {
		document.getElementById(bid).disabled = false;
	}
}


/*
	入力漏れチェック
	
	@param	string	fid	送信フォームID名
	@param	string	cid	チェック対象ID名
	@return	boolen	入力有無の真偽
*/
function checkForm(fid, cid){
	if(checkId()) {
		if(document.getElementById(fid).getElementById(cid).value == "") {
			return false;
		} else {
			return true;
		}
	}
}


/* 数値処理 */
/*
	Form数値取得
	
	@param	string	id	ID名
	@return	number	フォームの取得数値（数値でない場合は0）
*/
function getFormNum(id) {
	var val = 0;
	if(checkId()) {
		var tmp = separatorClear(document.getElementById(id).value);
		tmp = Number(tmp);
		if(isNaN(tmp)) tmp = 0;
		val = tmp;
	}
	return val;
}
/*
	合計算出
	
	@param	number	演算したい数値（可変長）
	@return	number	合計値（引数が0の場合は0）
*/
function sum() {
  var s = 0;
  for (var i = 1; i < arguments.length; i++) {
	  if(arguments.length != 0) {
	    for (var i = 1; i < arguments.length; i++) {
				s += arguments[i];
	    }
	  }
  }
  return s;
}
/*
	配列合計算出
	
	@param	array		arg	演算したい数値の配列
	@return	number	合計値（引数が0の場合は0）
*/
function sumArray(arg) {
  var s = 0;
  if((typeof arg) == "undefined" || arg.length == 0) {
    s = 0;
  } else {
    for(var i=0; i<arg.length; i++) {
		s += arg[i];
    }
  }
  return s;
}
/*
	背景色変更付数値入力
	
	@param	string	id	ID名
	@param	string	c	色指定
*/
function setnumform(id, c) {
	if(checkId()) {
		document.getElementById(id).style.imeMode = 'disabled';
		setBGColor(id, c);
		return true;
	} else {
		return false;
	}
}
/*
	カンマ区切り表記
	
	@param	string	id	ID名
	@return	boolen	成否判定
*/
function numform(id){
	if(checkId()) {
		var n = document.getElementById(id).value;
		
		//カンマの消去
		n = separatorClear(n);
		var tmp = Number(n);
		if(isNaN(tmp)) {
			alert("半角数字で入力してください。");
			setBGColor(id, '#FFEEEE');
			document.getElementById(id).focus();
			return false;
		}
		if(tmp < -99999999999 || tmp > 99999999999 || n.lastIndexOf('.') != -1) {
			alert("金額は、整数で以下の範囲で入力してください。\n-99,999,999,999～99,999,999,999");
			setBGColor(id, '#FFEEEE');
			document.getElementById(id).focus();
			return false;
		}
		if(tmp < 0) {
			setFGColor(id, '#FF0000');
		} else {
			setFGColor(id, '#000000');
		}
		//カンマの追加
		n = separator(n);
		
		//整形済み整数部と、待避してあった小数部を連結
		document.getElementById(id).value = n;
		setBGColor(id, '#FFFFFF');
	}
	return true;
}
/*
	カンマ区切り表記
	
	@param	number	n	数値
	@return	string	書式付数値
*/
function separator(n){
	n += '';
	
	//カンマの消去
	n = separatorClear(n)
	
	//小数点を探し、小数点以下と整数部を分割して保持
	var dp = n.lastIndexOf('.');
	if (dp == -1){
		var d = '';
		var i = n + '';
	} else {
		var d = n.substring(dp, n.length) + '';
		var i = n.substring(0, dp) + '';
	}
	//整数部の文字列長を3の倍数にする。足りない分は手前に' 'を埋め込む
	var b = i.length % 3;
	if (b != 0) {
		for (var buf = 0; 3 - b > buf ; buf++){
			i = ' ' + i;
		}
	}

	//整数文字列先頭から3文字おきにカンマを挿入
	//先頭がマイナス符号の時は負数として処理
	var fi = i.substring(0, 3);
	var j = 2;
	if (i.charAt(2) == '-') {
		fi = fi + i.substring(3, 6);
		j=4;
	}
	for (buf = j; i.length > buf ; buf++){
		if (buf % 3 == 0) {
			fi = fi + ',' + i.substring(buf, buf + 3);
		}
	}

	//臨時に入れておいた' 'を削除する
	while (fi.charAt(0) == ' ') {
		fi = fi.substring(1, fi.length);
	}

	//整形済み整数部と、待避してあった小数部を連結
	return fi + d;
		
}
/*
	カンマ区切り消去
	
	@param	string	id	ID名
	@return	number	数値
*/
function separatorClear(fn){
    var n = fn;

    var s = n.indexOf(',',0);
    while (s != -1){
        n = n.substring(0, s) + n.substring(s + 1, n.length);
        s = n.indexOf(',' ,0);
    }
    return n;
}

/* CSS処理 */
/*
	Block領域の表示
	
	@param	string	id		ID名
*/
function openBlock(id) {
	if(checkId()) {
		document.getElementById(id).style.display = 'block';
		return true;
	} else {
		return false;
	}
}
/*
	Block領域の非表示
	
	@param	string	id		ID名
*/
function closeBlock(id) {
	if(checkId()) {
		document.getElementById(id).style.display = 'none';
		return true;
	} else {
		return false;
	}
}
/*
	Layer表示
	
	@param	string	id		ID名
	@param	string	id		表示ID名
*/
function popupLayer(obj, id) {
	var w = 16;
	var h = 16;
	var elm = document.getElementById(id);
	elm.style.display = 'block';
	elm.style.position = 'absolute';
	if(document.all) {
		elm.style.filter = 'alpha(opacity=95)';
	} else {
		elm.style.MozOpacity = '0.95';
		elm.style.opacity = '0.95';
	}
	
	elm.style.left = (getOffsetLeft(obj) + w) + "px";
	elm.style.top = (getOffsetTop(obj) + h) + "px";
}
/*
	Layer非表示
	
	@param	string	id		ID名
*/
function popdownLayer(id) {
	if(checkId()) {
		document.getElementById(id).style.display='none';
		return true;
	} else {
		return false;
	}
}
/*
	ID縦位置取得
	
	@param	string	id		ID名
*/
function getOffsetTop(id) {
	var y = 0;
	var elm = document.getElementById(id);
	while(elm.offsetParent.tagName.toLowerCase() != "body") {
		y += elm.offsetTop;
		elm = elm.offsetParent;
		
	}
	y += elm.offsetTop;
	return y;
}
/*
	ID横位置取得
	
	@param	string	id		ID名
*/
function getOffsetLeft(id) {
	var x = 0;
	var elm = document.getElementById(id);
	while(elm.offsetParent.tagName.toLowerCase() != "body") {
		x += elm.offsetLeft;
		elm = elm.offsetParent;
	}
	x += elm.offsetLeft;
	return x;
}


/*
	画面中央表示用Layer表示
	
	@param	string	id		ID名
	@param	number	w		表示幅
	@param	number	h		表示高さ
*/
function middleLayer(id, w, h) {
	if(checkId()) {
		var elm = document.getElementById(id);
		var x = 0;
		var y = 0;
		if(document.all) {
			x = (document.body.clientWidth - w) / 2;
			y = (document.body.clientHeight - h) / 2;
		} else {
			x = (window.innerWidth - w) / 2;
			y = (window.innerHeight - h) / 2;
		}
		elm.style.display = 'block';
		elm.style.position = 'absolute';
		elm.style.width = w + "px";
		elm.style.height = h + "px";
		
		elm.style.left = x + "px";
		elm.style.top = y + "px";
		return true;
	} else {
		return false;
	}
}
function waitout(msg, ow) {
	if(!popdownLayer(msg)) {
		window.alert("Error PopDownLayer.");
		return false;
	}
	if(!openBlock(ow)) {
		window.alert("Error OpenBlock.");
		return false;
	}
	return true;
}