var submited = false;
/**
 * ２重サブミットチェック
 * @param	f	: フォーム
 */
function checkAndSubmit (f) {
	if (submited == true) {
		return false;
	}
	else {
		submited = true;
		f.submit();
		return false;
	}
}

/**
 * ラジオでチェックされた値を取得する
 * @param	sel	: ラジオ
 * @param	val	: フォーム
 */
function getRadioValue(rd) {
	var val = "";
	if (rd.length) {
		for (i = 0; i < rd.length; i++) {
			if (rd[i].checked) {
				val = rd[i].value;
			}
		}
	}
	else {
		if (rd.checked) {
			val = rd.value;
		}
	}
	return val;
}

/**
 * セレクトボックスを指定した値で選択状態にする
 * @param	sel	: セレクトボックス
 * @param	val	: フォーム
 */
function setSelectValue(sel, val) {
	var i=0;
	for (i=0; i<sel.options.length; i++) {
		if (sel.options[i].value==val) {
			sel.selectedIndex = i;
		}
	}
}

/**
 * パスからファイル名を取得する。
 */
function getFileName(path) {
	var fileName = "";
	
	// unix or URL 
	fileName = path.substring(path.lastIndexOf('/',path.length) +1,path.length);
	
	// windows系
	fileName = fileName.substring(fileName.lastIndexOf('\\',fileName.length) +1,fileName.length);
	return fileName;
}

/**
 * パス、ファイル名から拡張子を取得する。
 */
function getFileExt(fileName) {
	var ext = fileName.substring(fileName.lastIndexOf('.', fileName.length) + 1 , fileName.length);
	// 小文字にして返却
	return ext.toLowerCase();
}

/******************* HTML編集補助 ************************/

/**
 * 選択している文字列を取得する。
 * @param	text	: テキストボックス
 */
function getSelection (text) {
	if (document.selection != null) {
		return document.selection.createRange().text;
	}
	else if(text.selectionStart || text.selectionStart == '0') {
		var start = text.selectionStart;
		var end = text.selectionEnd;
		var str2 = text.value.substring(start,end);
		return str2;
	}
}

/**
 * 選択範囲にタグを適用する。
 * @param	text	: テキストボックス
 * @param	v	: 選択する値
 */
function setSelection (text, v) {
	// フォーカスを当てる
	text.focus();

	// 選択状態の場合
	if (document.selection != null) {
		document.selection.createRange().text = v;
	}
	else if (text.selectionStart || text.selectionStart == '0') {
		var start = text.selectionStart;
		var end = text.selectionEnd;
		var length = text.value.length;
		text.value = text.value.substring(0, start) + v + text.value.substr(end, length);
	}
	else {
		text.value += v;
	}
}

/**
 * 文字列選択されているかチェック
 * 動作不備のため使用しないでください
 */
function isSelection() {
	var canFormat = 0;
	if (document.selection) {
	    canFormat = 1;
	}
	
	var ua = navigator.userAgent;
	if (ua.indexOf('Gecko') >= 0 
	&&  ua.indexOf('Safari') < 0) {
	    canFormat = 1;
	}
	return canFormat;
}

/**
 * 文字列をフォーマットする。
 * @param	text	: テキストボックス
 * @param	openTag : 開始タグ
 * @param	closeTag : 終了タグ
 */
function formatString (text, openTag, closeTag, $alternative) {
	var str = getSelection(text);
	// 終了タグが入っていない場合(undefined)
	if (!closeTag) {
		setSelection(text, openTag);
	}
	else {
		// ネットスケープ以外の場合
		if (window.navigator.appName != 'Netscape') {	
			// 選択文字がある場合(これがあるとネスケで動かない)
			if (str) {
				setSelection(text, openTag + str  + closeTag);
			}
		}
		else {
			if ($alternative==null) {
				$alternative = "";
			}
			setSelection(text, openTag + $alternative + closeTag);
		}
	}
	return false;
}

/**
 * 選択した箇所にリンクを埋め込む。
 * @param	text		: テキストボックス
 * @param	isBlank	: target="_blank"の場合、true
 * @param	isMail	: メールの場合、true
 */
function insertLink (text, isBlank, option, isMail) {
	var str = getSelection(text);
	if (!str) return;
	var my_link = isMail ? prompt('Enter email address:') : prompt('Enter URL:', 'http://');
	if (isMail) my_link = 'mailto:' + my_link;
	if (my_link != null) {
		if (!option) {
			option = "";
		}
	
		if (!isBlank) {
			setSelection(text, '<a href="' + my_link + '" ' + option + '>' + str + '</a>');
		}
		else {
			setSelection(text, '<a href="' + my_link + '" target="_blank" ' + option + '>' + str + '</a>');
		}
	}
	return false;
}

/**
 * チェックボックスをすべてチェックする。
 * @param	name	: チェックボックス名
 * @param	v		: チェック状態(true or false)
 */
function doCheckAll (name, v) {
	var chk = document.getElementsByName(name);
	for (i=0; i<chk.length; i++) {
		chk.item(i).checked = v;
	}
}

/**
* チェックボックスのチェックされた数を返す
* @param	name	チェックボックス名
* return			チェックされた数
*/
function numChecked(name)
{
	var chk = document.getElementsByName(name);
	var count = 0;
	
	for (i=0; i<chk.length; i++)
	{
		if(chk.item(i).checked == true)
		{
			count++;
		} 
	}
	
	return count;
}

/**
* ラジオボタンのチェックされた値を返す
* @param	name	ラジオボタン名
* return			チェックされた値
*/
function getCheckRadioValue(name)
{
	//ラジオボタンの名前を取得
	var rdo = document.getElementsByName(name);
	
	var i;
	
	if(rdo.length)
	{
		for(i=0; i<rdo.length;i++)
		{
			if(rdo[i].checked)
			{
				return rdo[i]=value;
			}
		}
	}
	else
	{
		if(rdo.checked)
		{
			return rdo.value;
		}
	}
}


/******************* エラー表示系 ************************/


/**	指定したエラーコードのメッセージを生成します。
 *	@param errCode      エラーコード
 *	@param p1           パラメータ１
 *	@param p2           パラメータ２
 *	@param p3           パラメータ３
 *	@return メッセージ
 */
function createMessage(errCode, p1, p2, p3) {

	var params = new Array(p1, p2, p3);
	var i = 0;
	
	if (p1) {
		params[i] = p1;
		i++;
	}

	if (p2) {
		params[i] = p2;
		i++;
	}

	if (p3) {
		params[i] = p3;
		i++;
	}

	return createMessage2(errCode, params);
}

/**	指定したエラーコードのメッセージを生成します。
 *	@param errCode      エラーコード
 *	@param params       パラメータ配列
 *	@return メッセージ
 */
function createMessage2(errCode, params) {
	var msg = errorMsgAry[errCode];
	
	if (msg == "") {
		return "メッセージが定義されていません。("+ errCode +")";
	}
	else {
		for (i=0; i<params.length; i++) {
			var reg = new RegExp("{\\$" + (i+1) + "}", "ig");
			msg = msg.replace(reg, params[i]);
		}
		return msg;
	}
}





/**
 * 画像ファイル参照ダイアログを変更時に
 * 変更のラジオボタンに設定する。
 * 
 */
function chgFileOptionSet(radio) {
	// 変更にオプションを設定する
	var i;	
    for (i = 0; i < radio.length; i++) {
    	// 変更をチェックする
        if (radio[i].value==1) {
			radio[i].checked = true;
        }
        else {
			radio[i].checked = false;
		}        
    }
}




/*********************** 通常バージョン *************************/

/**
 * 文字色選択画面を開く
 */
function openBgColor(strText) {
	
	// 文字列が選択されているか
	var str = getSelection(eval(strText));
	if (!str) return;

	var openUrl;
	openUrl  = "bg_color.php?text=" + strText;

	retVal = window.open(
						openUrl,
						"ExemptionList",
						"width=400,height=250,location=no,scrollbars=yes,resizable=yes"
						);	
	retVal.focus();
}

/**
 * 文字選択画面で値をセットする際に呼ばれるメソッド
 * このファンクションは色選択画面から呼ばれます。
 */
function setFontColorTag(no, strText) {
	var text = eval(strText);
	formatString(text, '<font color="' + no + '">', '</ font>');
}

/**
 * 選択された文字列にタグを設定する。(フォント特大)
 */
function selStrXLargeTag(text) {
	formatString(text, '<span class="font_size_x-large">', '</ span>');
}
/**
 * 選択された文字列にタグを設定する。(フォント大)
 */
function selStrSmallTag(text) {
	formatString(text, '<span class="font_size_large">', '</ span>');
}
/**
 * 選択された文字列にタグを設定する。(フォント特小)
 */
function selStrXSmallTag(text) {
	formatString(text, '<span class="font_size_x-small">', '</ span>');
}

/**
 * 選択された文字列にタグを設定する。(フォント太字)
 */
function selStrBoldTag(text) {
	formatString(text, '<strong>', '</ strong>');
}

/**
 * 選択された文字列にタグを設定する。(フォント斜体)
 */
function selStrItalicTag(text) {
	formatString(text, '<span class="font_italic">', '</ span>');
}

/**
 * 選択された文字列にタグを設定する。(フォント打ち消し線)
 */
function selStrStrikeTag(text) {
	formatString(text, '<span class="font_strike">', '</ span>');
}

/**
 * 選択された文字列にタグを設定する。(フォント下線)
 */
function selStrUnderlineTag(text) {
	formatString(text, '<span class="font_underline">', '</ span>');
}

/**
 * 選択された文字列にタグを設定する。
 */
function selStrBlockquoteTag(text) {
	formatString(text, "<blockquote>", "</ blockquote>");
}

/**
 * 選択された文字列にタグを設定する。(target="_blank"をつける場合)
 */
function selStrLinkTag(text, option) {
	insertLink(text, true, option);
}

/**
 * 選択された文字列にタグを設定する。(target="_blank"をつける場合)
 */
function selStrLinkTagNoBlank(text, option) {
	insertLink(text, false, option);
}
/**
 * 選択された文字列にタグを設定する。
 */
function selStrAlignLTag(text) {
	formatString(text, '<p class="text_left">', '</ p>');
}

/**
 * 選択された文字列にタグを設定する。
 */
function selStrAlignCTag(text) {
	formatString(text, '<p class="text_center">', '</ p>');
}

/**
 * 選択された文字列にタグを設定する。
 */
function selStrAlignRTag(text) {
	formatString(text, '<p class="text_right">', '</ p>');
}

/**
 * 選択された文字列にタグを設定する。
 */
function setHrTag(text) {
//	text.value += '<hr size="1" />';
	formatString(text, '<hr size="1" />');
	text.focus();
}

/**
 * 選択された回り込み解除にタグを設定する。
 */
function setClearBrTag(text) {
	formatString(text, '<br style="clear:both" />');
	text.focus();
}

/*********************** 通常バージョン end *************************/

/*********************** 配列バージョン *************************/

/**
 * 選択された文字列にタグを設定する。(フォント特大)
 */
function selStrXLargeTagAry(textName, index) {
	var texts = document.getElementsByName(textName);
	formatString(texts.item(index), '<span class="font_size_x-large">', '</ span>');
}
/**
 * 選択された文字列にタグを設定する。(フォント大)
 */
function selStrSmallTagAry(textName, index) {
	var texts = document.getElementsByName(textName);
	formatString(texts.item(index), '<span class="font_size_large">', '</ span>');
}
/**
 * 選択された文字列にタグを設定する。(フォント特小)
 */
function selStrXSmallTagAry(textName, index) {
	var texts = document.getElementsByName(textName);
	formatString(texts.item(index), '<span class="font_size_x-small">', '</ span>');
}

/**
 * 選択された文字列にタグを設定する。(フォント太字)
 */
function selStrBoldTagAry(textName, index) {
	var texts = document.getElementsByName(textName);
	formatString(texts.item(index), '<strong>', '</ strong>');
}

/**
 * 選択された文字列にタグを設定する。(フォント斜体)
 */
function selStrItalicTagAry(textName, index) {
	var texts = document.getElementsByName(textName);
	formatString(texts.item(index), '<span class="font_italic">', '</ span>');
}

/**
 * 選択された文字列にタグを設定する。(フォント打ち消し線)
 */
function selStrStrikeTagAry(textName, index) {
	var texts = document.getElementsByName(textName);
	formatString(texts.item(index), '<span class="font_strike">', '</ span>');
}

/**
 * 選択された文字列にタグを設定する。(フォント下線)
 */
function selStrUnderlineTagAry(textName, index) {
	var texts = document.getElementsByName(textName);
	formatString(texts.item(index), '<span class="font_underline">', '</ span>');
}

/**
 * 選択された文字列にタグを設定する。
 */
function selStrBlockquoteTagAry(textName, index) {
	var texts = document.getElementsByName(textName);
	formatString(texts.item(index), "<blockquote>", "</ blockquote>");
}

/**
 * 選択された文字列にタグを設定する。(target="_blank"をつける場合)
 */
function selStrLinkTagAry(textName, index, option) {
	var texts = document.getElementsByName(textName);
	insertLink(texts.item(index), true, option);
}

/**
 * 選択された文字列にタグを設定する。(target="_blank"をつけない場合)
 */
function selStrLinkTagNoBlankAry(textName, index, option) {
	var texts = document.getElementsByName(textName);
	insertLink(texts.item(index), false, option);
}

/**
 * 選択された文字列にタグを設定する。
 */
function selStrAlignLTagAry(textName, index) {
	var texts = document.getElementsByName(textName);
	formatString(texts.item(index), '<p class="text_left">', '</ p>');
}

/**
 * 選択された文字列にタグを設定する。
 */
function selStrAlignCTagAry(textName, index) {
	var texts = document.getElementsByName(textName);
	formatString(texts.item(index), '<p class="text_center">', '</ p>');
}

/**
 * 選択された文字列にタグを設定する。
 */
function selStrAlignRTagAry(textName, index) {
	var texts = document.getElementsByName(textName);
	formatString(texts.item(index), '<p class="text_right">', '</ p>');
}

/**
 * 選択された文字列にタグを設定する。
 */
function setHrTagAry(textName, index) {
	var texts = document.getElementsByName(textName);
	formatString(texts.item(index), '<hr size="1" />');
	texts.item(index).focus();
}

/**
 * 選択された文字列にタグを設定する。
 */
function setClearBrTagAry(textName, index) {
	var texts = document.getElementsByName(textName);
	formatString(texts.item(index), '<br style="clear:both" />');
	texts.item(index).focus();
}

/*********************** 配列バージョン end *************************/


/**
 * 選択された文字列にタグを設定する。
 * @param file     ファイル名入力フィールド
 * @param align    位置指定リスト
 * @param baseUrl  イメージが置かれるベースＵＲＬ
 * @param exts     アップロード可能拡張子(|区切り)
 */
//function setImageTag(num, baseUrl, exts, text) {
function setImageTag(num, exts, text) {
	var file = document.getElementsByName("btn_view[]");
	var align = document.getElementsByName("img_align[]");

	if (file.item(num).value == "") return;
	// 画像ファイルかどうか
	if (!isExtValid(file.item(num).value, exts)) {
		file.item(num).focus();
		var msg = createMessage("STE0016")
		alert(msg);
		return;
	}
	
	// ファイル名を切り出す
	var fileName = getFileName(file.item(num).value);

	var classTag = "";
	// 左
	if (align.item(num).value =="1") {
		classTag = 'img_left';
	}
	// 中央
	else if (align.item(num).value =="2") {
		classTag = 'img_center';
	}	
	// 右
	else if (align.item(num).value =="3") {
		classTag = 'img_right';
	}
//	var str = '<img class="' + classTag + '" src="' + baseUrl + fileName +'" alt="' + fileName + '" border="0" />';
//	var str = '<img class="' + classTag + '" src="' + "[:file_name" + num + ":]" +'" alt="' + "[:file_name" + num + ":]" + '" border="0" />';
	var str = "[:file_name" + num + ":]";

//	text.value += str;
	formatString(text, str);
	text.focus();
}


/****************** 文字選択画面 ********************/

/**
 * 文字選択画面初期処理
 */
function onBgColorInit() {
	//window.resizeTo('400','400');
	//document.body.onkeypress = _CloseOnEsc;
	var color = window.dialogArguments;
	color = colorValid(color) || '000000';
	dispColor(color);
}


/**
 * パラメータで指定されたコードから色を表示する。
 *@param color カラーコード
 */
function dispColor(color) {
	document.getElementById("ColorPreview").style.backgroundColor = '#' + color;
	document.getElementById("ColorHex").value = '#' + color;
}


/**
 * 入力チェックをして親画面に値をセットする。
 */
function setColor(string) {
	var color = colorValid(string);
	if (color == null) {
		document.frm_color_tbl.ColorHex.focus();
		var msg = createMessage("STE0017", string)
		alert(msg);
	}
	else {
		dispColor(color);
		setMainText(color);
	}
}


/**
 * 呼び元のファンクションを呼び出しタグを設定する。
 * @param カラーコード
 */
function setMainText(no, strText){
	
	mode = '1';
	var oWin = window.opener;
	
	oWin.setFontColorTag(no, strText);
	
	oWin.focus();
	window.close();
}

/**
 * カラーコードが正しいかどうか
 * @param string カラーコード
 * @return 正しい場合カラーコード 不正の場合はnull
 */
 
function colorValid(string) {
	string = string || '';
	string = string + "";
	string = string.toUpperCase();
	var chars = '0123456789ABCDEF';
	var out   = '';

	// 不正な文字は削除する
	for (var i=0; i<string.length; i++) {
	var schar = string.charAt(i);
		if (chars.indexOf(schar) != -1) { 
			out += schar; 
		}
	}
	// 文字列の長さが不正の場合はnullを返却
	if (out.length != 6) return null;
	return out;
}

function onBgColorClose() {
	window.close();
}

/**
 * 日付のセレクトボックスで選択された日付を取り出す
 * @param		y		年
 *				m		月
 *				d		日
 * @return		日付データの配列
 **/
function getSelectboxDateArray(y, m, d)
{
	var day = new Array(3);
	
	//選択された年の取得
	for(i = 0; i < y.length; i++)
	{
		if(y.options[i].selected)
		{
			day[0] = y.options[i].value;
			break;
		}
	}
	//選択された月の取得
	for(i = 0; i < m.length; i++)
	{
		if(m.options[i].selected)
		{
			day[1] = m.options[i].value;
			break;
		}
	}
	//選択された日の取得
	for(i = 0; i < d.length; i++)
	{
		if(d.options[i].selected)
		{
			day[2] = d.options[i].value;
			break;
		}
	}
	
	return day;
}

/**
* パスワードが規定文字数ないかチェックする
* @params		password		パスワード
* @return		規定文字数以内	true
*				規定文字数以外	false
**/
function passwdNumCharValid(password, min_char, max_char)
{
	//パスワードの文字数を取得
	var char_num = getByteLen(password.value);
	
	if((char_num < min_char) || (char_num > max_char))
	{
		return false;
	}
	
	return true;
}

/**
* 削除確認メッセージを作成する
* @params		label	項目名
* @return				確認メッセージ
**/
function createDelConfMessage(label) {
	var msg = label + 'を削除します。よろしいですか？';
	
	return msg;
}



///

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
}

function Browser() {

  var ua, s, i;

  this.isIE    = false;  // Internet Explorer
  this.isNS    = false;  // Netscape
  this.version = null;

  ua = navigator.userAgent;

  s = "MSIE";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isIE = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  s = "Netscape6/";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  // Treat any other "Gecko" browser as NS 6.1.

  s = "Safari";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isSA = true;
    this.version = 1.0;
    return;
  }

  s = "Gecko";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = 6.1;
    return;
  }

}
var browser = new Browser();

function addColor(obj,color){
	
	//var tag='span style="color:'+color+'"';
	var startTag = '<span style="color:#'+color+'">';
	var endTag   = '</span>';
	//IE
	if (document.selection) {
		obj.focus();
		var str = document.selection.createRange().text;
		if(!str) {
			return;
		}
		document.selection.createRange().text = startTag + str + endTag;
		return;
	}
	//Mozilla
	else if ((obj.selectionEnd - obj.selectionStart) >0) {
		var startPos = obj.selectionStart;
		var endPos   = obj.selectionEnd;
		
		
		obj.value = obj.value.substring(0, startPos)
				  + startTag
				  + obj.value.substring(startPos, endPos)
				  + endTag
				  + obj.value.substring(endPos, obj.value.length);
		return;
	}
	//Other
	else {
		obj.value += startTag + endTag;
	}
}
function addTag(obj, tag) {
	
	var startTag = '<' + tag + '>';
	var endTag   = '</' + tag + '>';
	//IE
	if (document.selection) {
		obj.focus();
		var str = document.selection.createRange().text;
		if(!str) {
			return;
		}
		document.selection.createRange().text = '<' + tag + '>' + str + '</' + tag + '>';
		return;
	}
	//Mozilla
	else if ((obj.selectionEnd - obj.selectionStart) >0) {
		var startPos = obj.selectionStart;
		var endPos   = obj.selectionEnd;
		
		
		obj.value = obj.value.substring(0, startPos)
				  + startTag
				  + obj.value.substring(startPos, endPos)
				  + endTag
				  + obj.value.substring(endPos, obj.value.length);
		return;
	}
	//Other
	else {
		obj.value += startTag + endTag;
	}
}


function changeFontsize(obj, tag) {
	
	var startTag = '<span style=\"font-size:' + tag + '\;\">';
	var endTag   = '</span>';
	//IE
	if (document.selection) {
		obj.focus();
		var str = document.selection.createRange().text;
		if(!str) {
			return;
		}
		document.selection.createRange().text = startTag + str + endTag;
		return;
	}
	//Mozilla
	else if ((obj.selectionEnd - obj.selectionStart) >0) {
		var startPos = obj.selectionStart;
		var endPos   = obj.selectionEnd;
		
		
		obj.value = obj.value.substring(0, startPos)
				  + startTag
				  + obj.value.substring(startPos, endPos)
				  + endTag
				  + obj.value.substring(endPos, obj.value.length);
		return;
	}
	//Other
	else {
		obj.value += startTag + endTag;
	}
}


function addLink(obj) {
	var url = prompt('リンクするサイトのURLを入力してください。', 'http://');
	if (url == null) {
		return;
	}
	
	var startTag = '<a href="' + url + '" target="_blank">';
	var endTag   = '</a>';
	
	//IE
	if (document.selection) {
		obj.focus();
		var str = document.selection.createRange().text;
		if(!str) {
			return;
		}
		document.selection.createRange().text = startTag + str + endTag;
		return;
	}
	//Mozilla
	else if ((obj.selectionEnd - obj.selectionStart) >0) {
		var startPos = obj.selectionStart;
		var endPos   = obj.selectionEnd;
		
		
		obj.value = obj.value.substring(0, startPos)
				  + startTag
				  + obj.value.substring(startPos, endPos)
				  + endTag
				  + obj.value.substring(endPos, obj.value.length);
		return;
	}
	//Other
	else {
		obj.value += startTag + endTag;
	}
	
}

function switchObj(id){
	var obj = document.getElementById(id);
	if(obj.style.display=='none'){
		obj.style.display='block';
	}else{
		obj.style.display='none';
	}

}


/**
 * ＵＲＬの妥当性チェック
 * 引数 argurl    - ＵＲＬテキストボックス
 */
function urlcheck(argurl){
	if(argurl.value){
		if(argurl.value.match(/(http|ftp|https):\/\/[!#-9A-~]+\.+[a-z0-9]/i)){
			return true;
		}else{
			alert("入力されたURLは正しくありません");
			return false;
		}
	}
}	
	
/**
 * Enterキーが押されたかチェック
 * 引数 evt	イベントオブジェクト
 */
function checkEnterKey(evt) {

	//IEの場合
	if(document.all) {
		kc = event.keyCode;
	}
	//それ以外
	else {
		kc = evt.keyCode;
	}
	
	if(kc == 13) {
		return true;
	}
	return false;
} 
