/*******************************************************************************
* 全モード共通使用可能なJavascript群
*******************************************************************************/

/*******************************************************************************
* tool関数
*******************************************************************************/
/**
 * テーブル関係のツール関数
 */
tableTools = {
    /**
     * 配列データからテーブルを作成
     */
    tableCreate : function(rows){
        // テーブルを作成
        var table = document.createElement("table");
        //table.setAttribute("className", "waitMsg");
        // テーブルのBodyを作成
        var tbody = document.createElement("tbody");
        // Bodyをテーブルに入れ子する
        table.appendChild(tbody);
        // 行でLoop
        for (var rowIdx = 0; rowIdx < rows.length; rowIdx++) {
            var cols = rows[rowIdx];
            // 行を作成
            var tr = document.createElement("tr");
            // Bodyに入れ子する
            tbody.appendChild(tr);
            // 列でLoop
            for (var colIdx = 0; colIdx < cols.length; colIdx++) {
                // 列を作成
                var td = document.createElement("td");
                // 行に入れ子する
                tr.appendChild(td);
                // 行に入れ込むオブジェクトの形式で分岐
                if (typeof cols[colIdx] == "object") {
                    // 行に入れ子する
                    td.appendChild(cols[colIdx]);
                } else {
                    // 文字オブジェクトを作成
                    var tdStr = document.createTextNode(cols[colIdx]);
                    // 行に入れ子する
                    td.appendChild(tdStr);
                }
            }
        }
        // 出来上がったテーブルを返す
        return table;
    }
};

/**
 * 画面操作関数群
 */
screenTools = {
	displayErrMsg : function(id, msg, remainFlg) {
		var target = document.getElementById(id);
		// 既存のエラー表示があるかチェック
		if (undefined == remainFlg || false == remainFlg) {
			var chk = target.hasChildNodes();
			if (chk) {
				// 既存のエラー表示を削除
				for (var i = target.childNodes.length - 1; i >= 0; i--) {
					while (target.childNodes[i].hasChildNodes()) {
						target.childNodes[i].removeChild(target.childNodes[i].firstChild);
					}
					target.removeChild(target.lastChild);
				}
			}
		}
		var errExist = false;
		// 表示するエラーを作成
		var p = document.createElement('p');
		for (var i = 0; i < msg.length; i++) {
			var txt = document.createTextNode(msg[i]);
			p.appendChild(txt);
			var br = document.createElement('br');
			p.appendChild(br);
			errExist = true;
		}
		// 作成したエラーを表示領域に入れ込む
		target.appendChild(p);
		if (errExist) {
			document.location = '#' + id;
		}
	},
	/**
	 * hiddenに共通パラメータを設定
	 */
	setComparam : function(form_id, param) {
		var formTag = document.getElementById(form_id);
		for (var i = 0; i < param.length; i++) {
			// hiddenを作成
			var elm = document.createElement('input');
			elm.type = 'hidden';
			elm.name = param[i][0];
			elm.id = param[i][0] + i;
			elm.value = param[i][1];
			// formタグへ追加
			formTag.appendChild(elm);
		}
	}
};

/*******************************************************************************
* パス操作関数
*******************************************************************************/
pathUtil = {
	// ファイル名を取得
	// exFlg：true : 拡張子付き　false : 拡張子なし
	getFileName : function(path, exFlg) {
		if (undefined == exFlg || null == exFlg) {
			exFlg = true;
		}
		var proc = path.split("/").join("\\");
		proc = proc.split("\\");
		if (exFlg) {
			return proc[proc.length - 1];
		} else {
			// 拡張子付きファイル名を取得
			var proc2 = proc[proc.length - 1];
			var splits = proc2.split('.');
			if (1 >= splits.length) {
				return '';
			}
			var ret = '';
			for (var i = 0; i < splits.length - 1; i++) {
				ret += splits[i];
			}
			return ret;
		}
	},
	// 拡張子を取得する
	getFileExtension : function(path) {
		if (undefined == path || null == path || 0 >= path.length) {
			return '';
		}
		var splits = path.split('.');
		if (1 >= splits.length) {
			return '';
		}
		return splits[splits.length - 1].toLowerCase();
	}
}

/*******************************************************************************
* 各種入力チェック
*******************************************************************************/
/*var regexpEmail = /^([\w]+)(\.[\w]+)*@([\w\-]+\.){1,5}([A-Za-z]){2,4}$/;*/
var regexpEmail = /^([\w\-]+)(\.[\w\-]+)*@([\w\-]+\.){1,5}([A-Za-z]){2,4}$/;
var regexpUrl = /http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w-.\/?%&=]*)?/;
var regexpAlpha = /^[a-zA-Z_]+$/;
var regexpAlphanum = /^[a-zA-Z0-9_]+$/;
var regexpIp = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
var regexpTmpFile = /doc|docx|xls|xlsx|ppt|pptx|pdf/g;
var regexpImgFile = /jpg|gif|png|bmp|jpeg|jpe/g;
// 2010.06.18 Aoki
var regexpImgFileHd = /jpg|gif|png|bmp|jpeg|jpe|swf/g;
var regexpCsvFile = /csv|CSV/g;

InputChk = {
	// 拡張子チェック（CSVファイル）
	checkCsvFile : function(fileType) {
		var chk = fileType.match(regexpCsvFile);
		if (undefined != chk && null != chk && 0 < chk.length) {
			return '';
		}
		return '使用できないファイル形式（拡張子）です。';
	},
	// 拡張子チェック（添付ファイル）
	checkTmpFile : function(fileType) {
		var chk = fileType.match(regexpTmpFile);
		if (undefined != chk && null != chk && 0 < chk.length) {
			return '';
		}
		return '使用できないファイル形式（拡張子）です。';
	},
    // 拡張子チェック（画像ファイル＋Flash）
    checkImgFileHd : function(fileType) {
        var chk = fileType.match(regexpImgFileHd);
        if (undefined != chk && null != chk && 0 < chk.length) {
            return '';
        }
        return '使用できないファイル形式（拡張子）です。';
    },
	// 拡張子チェック（画像ファイル）
	checkImgFile : function(fileType) {
		var chk = fileType.match(regexpImgFile);
		if (undefined != chk && null != chk && 0 < chk.length) {
			return '';
		}
		return '使用できないファイル形式（拡張子）です。';
	},
	// E-Mailアドレスとして正しいかチェック
	checkMail : function(value) {
		if (regexpEmail.test(value)) {
			return '';
		}
		return 'メールアドレスを"user@domain.com"の形式で入力してください。';
	},

	// URLとして正しいかをチェックする
	checkUrl : function(value) {
		/* 形式を正規表現でチェック */
		if (!regexpUrl.test(value)) {
			return 'URLを"http:/'+'/www.domain.com"の形式で入力してください。';
		}
		// 入力禁止文字のチェック
		var text = value;
		var badChr = '';
		for (var j=0; j < text.length; j++) {
			var chr = text.charAt(j);
			if (-1 != '<>()$"\'\\|{}[]*!,;'.indexOf(chr)) {
				badChr += chr;
			}
		}
		if (0 < badChr.length) {
			return 'URLを"http:/'+'/www.domain.com"の形式で入力してください。';
		}
		return '';
	},

	// IPアドレスとして正しいかをチェックする
	checkIp : function(value) {
		if (regexpIp.test(value)) {
			return '';
		}
		return 'IPアドレスの形式で入力してください。';
	},

	// 英字として正しいかをチェックする
	checkAlpha : function(value) {
		if (regexpAlpha.test(value)) {
			return '';
		}
		return '半角英字と"_"のみです。';
	},

	// 英数字として正しいかをチェックする
	checkAlphanum : function(value) {
		if (regexpAlphanum.test(value)) {
			return '';
		}
		return '半角英数と"_"のみです。';
	},

	// 禁止文字の入力チェック
	// 禁止文字がなければ -1 が返る
	checkTaboo : function(chr) {
		/* 「,」「.」を許可(英文対応) return '<>()&$#%"\'\\|{}[]+-*=/!?,.;:'.indexOf(chr);*/
		// 2010/03/11 return '<>()&$#%"\'\\|{}[]+-*=/!?;:'.indexOf(chr);
		return '<>()&$#%"\'\\|{}[]+*=/!?;:'.indexOf(chr);
	},

	// Trim
	// 半角スペース、全角スペースを排除する
	checktrim : function(value) {
//		str = new RegExp("&nbsp;","g");
//		value = value.replace(str,"");
		return String(value).replace(/^[\s　]+|[\s　]+$/g, '');
	},

	// テキストエリアの場合(Extのバグ?)
	// 区切り文字を排除する
	escapeCntlCode : function(value) {
		var text = value;
		var str = '';
		var chr = '';
		// 制御文字を排除
		for (var j=0; j < text.length; j++) {
			var str = text.charAt(j);
			var ch = text.charCodeAt(j);
			if (('8203' != ch) && ('32' != ch)) {
				chr += str;
			}
		}

		return chr;
	}
};

/* 入力文字のチェック */
function modelDependenceChk(text) {
	var badChr = '';
	for (var j=0; j < text.length; j++) {
		var chr = text.charAt(j);
		var c = text.charCodeAt(j);
		/* 機種依存文字チェック */
		if (c < 128) {
			// 半角英数字はパス
		} else if (-1 == JISX0208.indexOf(chr)){
			badChr += chr;
		}
		/* 入力禁止文字チェック */
		if (-1 != InputChk.checkTaboo(chr)) {
			badChr += chr;
		}
	}
	return badChr;
}

