//=============================================================================
// edit_main_control.js
// 説明：HTMLエディット可能なテキストエリアを作成・管理する
//     ：ブラウザ識別jsファイルをインクルードする必要がある
//     ：コンテンツ定義であるicon_palette.jsファイルをインクルードする必要がある
// 　　：絵文字パレットのターゲットフォームは本文だけ
//=============================================================================


//-----------------------------------------------------------------------------
// グローバル変数
//-----------------------------------------------------------------------------

var _DEBUG_			= false;
var _FONTCOLOR_		= false;

var STRING_SPLIT_COLOR = "/";	//	クッキーデータのスプリット文字列

var CONTENT_IFRAME_ID = "iframe_content_id";
var CONTENT_TEXT_ID = "text_content_id";
var EDIT_COLOR_ID	= "edit_color_id";

var COLOR_ARRAY = new Array('000000','FF0000','FF9C00','DEE10B','40E707','09E5BB','076EE8','D608E7');

var g_imageExt		= ".gif";			// イメージの拡張子

var g_contentPath		= "";			// コンテンツルートパス
var g_bCommonPage	= false;			// 共通ページかどうか
var g_iconPath		= "";				// アイコンファイルまでのパス
var g_skinPath		= "";				// 背景やタブ画像等のスキンファイルまでのパス

var g_nCurTabIndex	= 0;							// 表示中のタブインデックス
var g_listCurTabID	= new Array(g_tabCountShow);	// 表示中のタブのIDを保持
var g_strSelectTabName	= "";						// 選択中のタブインデックス

var g_strInitDesc		= "";			// 初期文字列
var g_gckContentElement = null;			// コンテンツ本文のエレメント

var g_strIconTag	= "(IC";
var g_maxContent	= 1000;
var g_maxIconID		= 4;		// (IC????) ←ID何桁か

var g_bUseTextArea	= false;			// 通常のテキストエリアを使っているか

var g_CurrentColor		= "000000";			// 現在の色

var g_defFontTag = "(FC";		// (FC??????) ?は１６進数
var g_FontStartFlag = false;
var g_DesignFlag = false;
var g_FixedColor = "";			// 固定カラー値

var g_TimerId = null;


var DUMMY_TAG = "*dmy*";

var COOKIE_NAME_PEN = "cookie_pen";		// クッキー名

//*****************************************************************************
// アクセッサ
//*****************************************************************************

//-----------------------------------------------------------------------------
// 絵文字入力欄の初期化
// 説明：
// 引数：contentroot - コンテンツのルートディレクトリ名
//     ：content_width - 本文入力欄の幅
//     ：content_height - 本文入力欄の高さ
//     ：maxlength - 本文入力欄の最大入力文字数
//     ：strDesc - 本文の初期値
//     ：bCommon - コンテンツ共通ページかどうか
//-----------------------------------------------------------------------------
function InitializeEdit( contentroot, content_width, content_height, maxlength, strDesc, bCommon )
{
	g_contentPath	= "/" + contentroot;
	g_maxContent	= maxlength;
	g_strInitDesc	= strDesc;
	g_bCommonPage	= bCommon;

	// アイコン類のパスを求める
	g_iconPath = g_contentPath + g_strPathContent + "icon/";
	if ( g_bCommonPage == true )
		g_iconPath = g_contentPath + g_strPathCommon + "icon/";

	// その他パレット類のパスを求める
	g_skinPath = g_contentPath + g_strPathContent + "skin/";

	if ( content_width == 0 || content_height == 0 )
		return;

	if ( browser.isIE5up )
	{
		if ( browser.isMac )
		{
			CreateTextarea();
		}
		else
		{
			CreateContentFrame( content_width, content_height );
		}
	}
	else if ( browser.isGecko )
	{
		CreateContentFrame( content_width, content_height );
	}
	else
	{
		CreateTextarea();
	}

}

//-----------------------------------------------------------------------------
// フォーム送信前チェック
// 説明：formタグのonSubmitで呼び出すコト。<form onSubmit="return CheckSubmit();">
//-----------------------------------------------------------------------------
function CheckSubmit()
{
	// 妙なイメージを叩き込まれていれば削除
	var strDocContent = "";
	var strRdiContent = "";
	if ( g_bUseTextArea == false )
	{
		strDocContent = g_gckContentElement.contentWindow.document.body.innerHTML;
	
		strRdiContent = RemoveDropImage( strDocContent );
		if ( strRdiContent.length != strDocContent.length )
			alert("フォームに不適切なイメージが混在していたため排除します。");
		strDocContent = strRdiContent;

		// 更新しとく
		g_gckContentElement.contentWindow.document.body.innerHTML = strDocContent;

		// IMGタグをIconIDタグに変換
		strDocContent = ConvertImageSrcToId( strDocContent );

		// <BR>タグと<IconID_>タグ以外のタグを削除する
		strDocContent = removeTag( strDocContent );

		// 空白だけの場合はテキストを削除する
		if (strDocContent == "&nbsp;"){
			strDocContent = "";
		}

		// 改行だけの場合はテキストを削除する
		if (strDocContent == "(BR)" || strDocContent == "(br)"){
			strDocContent = "";
		}
		
		// 現在設定されている色を設定する
		strDocContent = ConvertFontTagToSrc( strDocContent );
		
	}
	else
	{
		strDocContent = document.getElementById( CONTENT_TEXT_ID ).value;
	}

	// 禁則文字変換
	strDocContent = strReplace(strDocContent,"&nbsp;"," ");
	strDocContent = strReplace(strDocContent,"&lt;","<");
	strDocContent = strReplace(strDocContent,"&gt;",">");
	strDocContent = strReplace(strDocContent,"&amp;","&");
//	strDocContent = strReplace(strDocContent,String.fromCharCode(34),"'");
//	strDocContent = strReplace(strDocContent,String.fromCharCode(13,10),"");

	// 文字数チェック
	if ( strDocContent.length > g_maxContent )
	{
		alert("本文のサイズは"+g_maxContent+"文字以内です。");
		return false;
	}

	// テキストエリアにコピー
	document.getElementById( CONTENT_TEXT_ID ).value	= strDocContent;

//	alert("strDocContent = "+strDocContent);
//	alert("editColor = "+document.getElementById( EDIT_COLOR_ID ).value);

	if ( _DEBUG_ )
	{
		alert("送信! str = "+strDocContent);
		return false;
	}

	return true;
}

//-----------------------------------------------------------------------------
// html中の(IC????)タグを<IMG>タグへ変換
// 説明：クライアントへ送るHTMLデータを<IMG>タグ付きにコンバートする
// 引数：strDoc - HTMLソース
//     ：bCommon - コンテンツ共通ページかどうか
// 戻値：String - 変換されたHTML文
//-----------------------------------------------------------------------------
function ConvertImageIdToSrc( strDoc, bCommon )
{
	var idx = 0;
	var strContentPath = g_contentPath + g_strPathContent + "icon/";
	if ( bCommon == true)
		strContentPath = g_contentPath + g_strPathCommon + "icon/";

	// (IC????)を<IMG>に変換
	while ( (idx = strDoc.indexOf( g_strIconTag, idx )) != -1 )
	{
		var id_idx = idx;
		var right_idx = strDoc.indexOf( ")", idx );
		var imgNum = strDoc.substr( idx + g_strIconTag.length, g_maxIconID );
		var strImg = strContentPath + imgNum + g_imageExt;

		// 引っこ抜く
		var str1 = strDoc.substring( 0, idx );
		var str2 = strDoc.substring( right_idx+1, strDoc.length );
		strDoc = str1 + "<img id="+imgNum+" src='"+strImg+"'>" + str2;

		idx = right_idx;
	}

	// (br)を<br>に変換
	strDoc = strReplace( strDoc, "(br)", "<br>" );
	strDoc = strReplace( strDoc, "(BR)", "<BR>" );

	return strDoc;
}

//-----------------------------------------------------------------------------
// フォントタグを変換
// @param strDoc	内容
// @param mode		デザインモード TRUE：デザイン可 FALSE：デザイン不可
//-----------------------------------------------------------------------------
function ConvertFontSrcToTag( strDoc , mode)
{
	// (FC??????)からカラーを取得する
	var reg = new RegExp("\\((FC)([0-9]|[A-F]){6}\\)");
	var regend = new RegExp("\\(/FC\\)");

try{
	var idx = strDoc.search( reg );
	if (idx != -1){	
		// カラーを取得する
		g_CurrentColor = strDoc.substr(idx + 3,6);

		// (FC??????)と(/FC)を取り除く
		strDoc = strDoc.replace(reg,"");
		strDoc = strDoc.replace(regend,"");
		
		// <span>タグを追加しておくか
		if (!mode){
			strDoc = "<span style='color:" + g_CurrentColor + "'>" + strDoc + "</span>"
		}
		
	}
}catch(e){
	alert("error:" + e);
}	

	// カラーを設定
	if (mode){
		g_gckContentElement.contentWindow.document.body.style.color = g_CurrentColor;
	}

	return strDoc;	
}

//-----------------------------------------------------------------------------
// クッキーから指定した名前のデータを取得する
//-----------------------------------------------------------------------------
function getCookie(arg){
	var cookieString = document.cookie;
	var aCookie = cookieString.split(";");
	// クッキー名が一致しているものを探す
	for(var i=0;i < aCookie.length;i++){
		var CookieValue = new String(aCookie[i]);
		var nIndex = CookieValue.indexOf(arg);
		if (nIndex >= 0){
			// 発見！！
			return CookieValue.substr(arg.length+2);
		}
	}
	return null;
}

function setFixedColor(color){
	g_FixedColor = color;
}

//-----------------------------------------------------------------------------
// 初期で設定する色を取得する
//-----------------------------------------------------------------------------
function getFirstColor(strColorArray){

	if (strColorArray == null){
		return "";
	}
	// カラーデータの解析
	var astrColor = strColorArray.split(STRING_SPLIT_COLOR);
	var colorCount = astrColor[0];
	var aColorData = new Array();
	for(var i=1,j=0;i < astrColor.length;i+=2,j++){
		aColorData[astrColor[i]] = astrColor[i+1];
	}

	var contentColor = "";	
	var reg = new RegExp("\\((FC)([0-9]|[A-F]){6}\\)");
	var idx = g_strInitDesc.search( reg );
	if (idx != -1){
		// カラーを取得する
		contentColor = g_strInitDesc.substr(idx + 3,6);
		// 文章内のカラーを設定
		if (aColorData[contentColor] > 0){
			return contentColor;
		}
	}
	
	// 優先度の高いカラーを選択する
	for(var i=0;i < COLOR_ARRAY.length;i++){
		var count = aColorData[COLOR_ARRAY[i]];
		if (count != null && count > 0){
			return COLOR_ARRAY[i];
		}
	}

	return "";
}

//-----------------------------------------------------------------------------
// ツールバーを挿入
// 説明：コールした箇所にツールバーを挿入する
//-----------------------------------------------------------------------------
function InsertToolbar()
{
	// アイコンパレット作成
	var strBackImageURL = g_skinPath + g_paletteBaseName + g_imageExt;
	var strFontImageURL = g_skinPath + "PencilSelect.swf";
	
	// フラッシュのクエリー生成
	var strColorArray = getCookie(COOKIE_NAME_PEN);
	var strQuery = "pen=" + strColorArray;
	var strCurrentColor = getFirstColor(strColorArray);
	strQuery += "&color=" + strCurrentColor;
		
	ChangeTextColor(strCurrentColor);
	
	var html = '';

	html += "<div style='width:"+ (g_paletteWidth+g_fontPaletteWidth )+"; height:"+g_paletteHeight+"; background-repeat:no-repeat; margin:2'>";
	html += "<IMG SRC='"+strBackImageURL+"' alt='' onmouseup='onClickIconBack()'";
	html += "style='position:absolute; margin:0; border:solid 0px; padding:0'>";

	// タブ
	html += CreateCategoryTab();

	// アイコン
	html += CreateIconPalette();

	html += "<div align='right'>";

	html += "<OBJECT classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000'";
	html += 	" codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' ";
	html += 	" width='" + g_fontPaletteWidth + "' ";
	html += 	" height='" + g_fontPaletteHeight + "' ";
	html += ">";
	html += "<param name='movie' value='" + strFontImageURL + "' />";
	html += "<PARAM NAME=flashvars VALUE='" + strQuery + "'>";
	html += "<PARAM NAME=scale VALUE=noscale>";
	html += "<PARAM NAME=wmode VALUE=transparent>";
	html += "<embed src='" + strFontImageURL + "'"
	html += 	" width='" + g_fontPaletteWidth + "' ";
	html += 	" height='" + g_fontPaletteHeight + "' ";
	html += 	" scale=noscale ";
	html += 	" wmode='transparent' ";
	html += 	" FLASHVARS='" + strQuery + "'";
	html += 	" type='application/x-shockwave-flash' ";
	html += 	" pluginspage='http://www.macromedia.com/go/getflashplayer' ";
	html += "/>";
	html += "</OBJECT>";
	
	html += "</div>";
	
	html += "</div>";

	document.writeln(html);

	// 最初のアイコン群を表示
	CategoryMouseDown( 0 );

	// タブ
	ScrollTab( 0 );
}

//-----------------------------------------------------------------------------
// アイコンパレットのみ表示
//-----------------------------------------------------------------------------
function InsertToolbarIconOnly(){
	// アイコンパレット作成
	var strBackImageURL = g_skinPath + g_paletteBaseName + g_imageExt;
	
	var html = '';

	html += "<div style='width:"+ (g_paletteWidth+g_fontPaletteWidth )+"; height:"+g_paletteHeight+"; background-repeat:no-repeat; margin:2'>";
	html += "<IMG SRC='"+strBackImageURL+"' alt='' onmouseup='onClickIconBack()'";
	html += "style='position:absolute; margin:0; border:solid 0px; padding:0'>";

	// タブ
	html += CreateCategoryTab();

	// アイコン
	html += CreateIconPalette();

	html += "</div>";

	document.writeln(html);

	// 最初のアイコン群を表示
	CategoryMouseDown( 0 );

	// タブ
	ScrollTab( 0 );
}

//*****************************************************************************
// 内部関数
//*****************************************************************************

//-----------------------------------------------------------------------------
// カテゴリータブの挿入
//-----------------------------------------------------------------------------
function CreateCategoryTab()
{
	var html = "";

	// ※FireFoxで確認した不具合で、z-indexを設定しないとロードした画像のサイズ分
	// だけマウスヒットしない見えない領域が発生してしまう
	// これを回避するために画面左側に配置される画像のプライオリティをより高く設定する・・

	// 前へボタン
	var strID = g_prevBtnName;
	var strFileName = g_skinPath + strID + "_n" + g_imageExt;
	html += "<div style='position:absolute; float:left; border:solid 0px; z-index:1001'>";
	html += "<IMG id='"+strID+"' SRC='"+strFileName+"'onmouseover='ScrollRollOver(\""+strID+"\")'";
	html += "onmouseup='ScrollRollOver(\""+strID+"\")' onmousedown='ScrollMouseDown(\""+strID+"\",-2)'";
	html += "onmouseout='ScrollRollOut(\""+strID+"\")' alt=''";
	html += "style='position:relative; margin:0; border:solid 0px; padding:0; left:"+g_prevTab_X+"; top:"+g_prevTab_Y+"'>";
	html += "</div>";
	// 次へボタン
	strID = g_nextBtnName;
	strFileName = g_skinPath + strID + "_n" + g_imageExt;
	html += "<div style='position:absolute; float:left; border:solid 0px; z-index:1000'>";
	html += "<IMG id='"+strID+"' SRC='"+strFileName+"'onmouseover='ScrollRollOver(\""+strID+"\")'";
	html += "onmouseup='ScrollRollOver(\""+strID+"\")' onmousedown='ScrollMouseDown(\""+strID+"\",2)'";
	html += "onmouseout='ScrollRollOut(\""+strID+"\")' alt=''";
	html += "style='position:relative; margin:0; border:solid 0px; padding:0; left:"+g_nextTab_X+"; top:"+g_nextTab_Y+"'>";
	html += "</div>";

	// 初期タブ
	for ( var i = 0; i < g_tabCountShow; i++ )
	{
		var strID = g_listTabBtnName[i];
		var strFileName = g_skinPath + strID + "_n" + g_imageExt;
		
		var _x = g_listTab_X[i];
		var _y = g_listTab_Y[i];

		// 表示中のタブIDを保持
		g_listCurTabID[i] = strID;

		var tabID = "i_tab_"+i;
		var z = 1000-i;
		html += "<div style='position:absolute; float:left; border:solid 0px; z-index:"+z+"'>";
		html += "<IMG id='"+tabID+"' SRC='"+strFileName+"'onmouseover='CategoryRollOver(\""+i+"\")'";
		html += "onmouseup='CategoryRollOver(\""+i+"\")' onmousedown='CategoryMouseDown(\""+i+"\")'";
		html += "onmouseout='CategoryRollOut(\""+i+"\")' alt=''";
		html += "style='position:relative; margin:0; border:solid 0px; padding:0; left:"+_x+"; top:"+_y+"'>";
		html += "</div>";
	}

	return html;
}

//-----------------------------------------------------------------------------
// スクロールボタンロールオーバー＆マウスアップ
//-----------------------------------------------------------------------------
function ScrollRollOver( id )
{
	// もし、Disable状態なら無視
	if ( document.getElementById( id ).bEnable == false )
		return;

	var path = g_skinPath + id + "_o" + g_imageExt;
	document.getElementById( id ).src = path;
}

//-----------------------------------------------------------------------------
// スクロールロールアウト
//-----------------------------------------------------------------------------
function ScrollRollOut( id )
{
	// もし、Disable状態なら無視
	if ( document.getElementById( id ).bEnable == false )
		return;

	var path = g_skinPath + id + "_n" + g_imageExt;
	document.getElementById( id ).src = path;
}

//-----------------------------------------------------------------------------
// スクロールボタンクリックダウン
//-----------------------------------------------------------------------------
function ScrollMouseDown( id, nAdd )
{
	// もし、Disable状態なら無視
	if ( document.getElementById( id ).bEnable == false )
		return;

	var path = g_skinPath + id + "_p" + g_imageExt;
	document.getElementById( id ).src = path;
	// 処理
	ScrollTab( nAdd );
}

//-----------------------------------------------------------------------------
// カテゴリーボタンロールオーバー＆マウスアップ
//-----------------------------------------------------------------------------
function CategoryRollOver( nNum )
{
	var id = "i_tab_"+nNum;
	var strName = g_listCurTabID[nNum];
	if ( g_strSelectTabName == strName )
		return;
	var path = g_skinPath + strName + "_o" + g_imageExt;
	document.getElementById( id ).src = path;
}

//-----------------------------------------------------------------------------
// カテゴリーボタンロールアウト
//-----------------------------------------------------------------------------
function CategoryRollOut( nNum )
{
	var id = "i_tab_"+nNum;
	var strName = g_listCurTabID[nNum];
	if ( g_strSelectTabName == strName )
		return;
	var path = g_skinPath + strName + "_n" + g_imageExt;
	document.getElementById( id ).src = path;
}

//-----------------------------------------------------------------------------
// カテゴリーボタンクリックダウン
//-----------------------------------------------------------------------------
function CategoryMouseDown( nNum )
{
	var id = "i_tab_"+nNum;
	var strName = g_listCurTabID[nNum];
	if ( g_strSelectTabName == strName )
		return;
	var path = g_skinPath + strName + "_p" + g_imageExt;
	document.getElementById( id ).src = path;
	// 処理
	OpenIconTab( strName );
}

//-----------------------------------------------------------------------------
// タブ内のアイコン群を挿入
//-----------------------------------------------------------------------------
function CreateIconPalette()
{
	var html = "";

	// もし共通フォルダ参照であれば最後の項目(コンテンツ依存)のものは表示しない
	var len = g_listTabBtnName.length;
	if ( g_bCommonPage == true )
		len = g_nCommonTabCnt;

	for ( var i = 0; i < len; i++ )
	{
		var id = "i_pal_"+g_listTabBtnName[i];
		var z = i+1;
		html += "<div id='"+id+"' style='position:absolute; visibility:hidden; z-index:"+z+"; border:solid 0px'>";

		var list = g_listIconFile[i];
		var nItem = list.length;

		for ( var n = 0; n < nItem; n++ )
		{
			var strName = list[n];
			if (strName == null || strName.length == 0){
				continue;
			}
			var strPath = g_iconPath + strName + g_imageExt;
			var _x = g_listIcon_X[n];
			var _y = g_listIcon_Y[n];
			html += "<div style='position:absolute; border:solid 0px'>";
			html += "<IMG id='"+strName+"' src='"+strPath+"' onmouseup='InsertImageToTextArea(\""+strName+"\")' alt=''";
			html += "style='position:relative; margin:0; border:solid 0px; padding:0; left:"+_x+"; top:"+_y+"; cursor:pointer'>";
			html += "</div>";
		}

		html += "</div>";
	}

	return html;
}

//-----------------------------------------------------------------------------
// 背景がクリックされた(ダミー)
//-----------------------------------------------------------------------------
function onClickIconBack()
{
}

//-----------------------------------------------------------------------------
// 本文をHTMLエディットできる形で生成
//-----------------------------------------------------------------------------
function CreateContentFrame( width, height )
{
	var str = '';
	var url = g_contentPath + g_strPathHTML + "blank_iframe.html";
	str += '<iframe id="' + CONTENT_IFRAME_ID + '" name="' + CONTENT_IFRAME_ID + '" style="width: '+width+'px; height: '+height+'px" src="'+url+'" frameborder="1" onload="InitDocument()" onChange="onChangeContet()"></iframe>';
//	str += '<iframe id="' + CONTENT_IFRAME_ID + '" name="' + CONTENT_IFRAME_ID + '" style="width: '+width+'px; height: '+height+'px" src="'+url+'" frameborder="1" ></iframe>';
	// 送信用の不可視テキストエリア。送信時にiFrameからコピーする
	str += '<textarea style="display:none"  id="'+CONTENT_TEXT_ID+'" name="'+CONTENT_TEXT_ID+'" value=""></textarea>';

	document.writeln( str );

//	setTimeout( InitDocument, 10 );

}

//-----------------------------------------------------------------------------
// 本文を通常のテキストエリアで生成
//-----------------------------------------------------------------------------
function CreateTextarea()
{
	g_bUseTextArea = true;
//	document.writeln('<textarea style="id="'+CONTENT_TEXT_ID+'" name="'+CONTENT_TEXT_ID+'" value=""></textarea>');
	document.writeln('<textarea id="'+CONTENT_TEXT_ID+'" name="'+CONTENT_TEXT_ID+'" value=""></textarea>');
}

//-----------------------------------------------------------------------------
// 時間差で初期化
//-----------------------------------------------------------------------------
function InitDocument()
{
	g_gckContentElement = document.getElementById( CONTENT_IFRAME_ID );

	setTimeout( UpdateDesignMode, 10 );

}

//-----------------------------------------------------------------------------
// デザインモードを設定
//-----------------------------------------------------------------------------
function UpdateDesignMode()
{
	try
	{
		if ( browser.isIE5up )
		{
			// IEの場合はEnterキーによる<p>タグの排除用にonkeydownを監視
			frames[CONTENT_IFRAME_ID].document.designMode = "On";
			frames[CONTENT_IFRAME_ID].document.body.style.margin = 2;
			frames[CONTENT_IFRAME_ID].document.onkeydown = onKeyDownContent_IE;
//			frames[CONTENT_IFRAME_ID].document.onkeyup = onKeyUpContent_IE;
		}
		else
		{
			g_gckContentElement.contentDocument.designMode = "On";
			g_gckContentElement.contentDocument.body.style.margin = 2;
//			g_gckContentElement.contentDocument.onKeydown = onKeyDownContent_FF;
			g_gckContentElement.contentWindow.addEventListener("keydown",onKeyDownContent_FF,true);
//			g_gckContentElement.contentWindow.addEventListener("keyup",onKeyDownContent_FF,true);
//			alert(g_gckContentElement.contentDocument.onKeydown);
		}
		// 文字列の初期値をセットする
		var initContentString = ConvertImageIdToSrc( g_strInitDesc, g_bCommonPage );
		initContentString = ConvertFontSrcToTag( initContentString , true);
		g_gckContentElement.contentWindow.document.body.innerHTML = initContentString;
	
		g_DesignFlag = true;
		
		g_CurrentColor = getFirstColor(getCookie(COOKIE_NAME_PEN));
		ChangeTextColor(g_CurrentColor);
	}
	catch (e)
	{
		setTimeout( UpdateDesignMode, 10 );
		return;
	}

}

//-----------------------------------------------------------------------------
// 改行チェック
// 説明：<br>タグが存在するかどうか
// 引数：strDoc - 検査する文章
//-----------------------------------------------------------------------------
function CheckBr( strDoc )
{
	var strBr;
	if ( browser.isIE5up )			strBr = "<BR>";
	else if ( browser.isGecko )		strBr = "<br>";
	if ( strDoc.indexOf( strBr, 0 ) != -1 )
		return true;

	return false;
}

function onChangeContet(){
	alert("文章が変更されました");
}

//-----------------------------------------------------------------------------
// 本文のキーダウンイベント
//-----------------------------------------------------------------------------
function onKeyDownContent_IE()
{
	
	// Enterキーで<p>タグが入らないようにしてやる
	var kc = g_gckContentElement.contentWindow.event.keyCode;

//	alert("down:" + kc + " content:" + g_gckContentElement.contentWindow.document.body.innerHTML);

	var ret = onKeyDownProcess(kc);
	return ret;

}

//-----------------------------------------------------------------------------
// 本文のキーアップイベント
//-----------------------------------------------------------------------------
function onKeyUpContent_IE()
{
	
	// Enterキーで<p>タグが入らないようにしてやる
	var kc = g_gckContentElement.contentWindow.event.keyCode;
	
	alert("up:" + kc + " content:" + g_gckContentElement.contentWindow.document.body.innerHTML);
	
	var ret = onKeyDownProcess(kc);
	return ret;

}

//-----------------------------------------------------------------------------
// 本文のキーダウンイベント
//-----------------------------------------------------------------------------
function onKeyDownContent_FF(e)
{
	// Enterキーで<p>タグが入らないようにしてやる
	return onKeyDownProcess(e.which);
}

//-----------------------------------------------------------------------------
//	キーイベントの処理
//-----------------------------------------------------------------------------
function onKeyDownProcess(key){
	if(browser.isIE5up){
		if ( key == "13" ){
			// ENTERキー
			pasteHTML2( g_gckContentElement, "<br>" );
			return false;
		}
				
	}
	
/*	
	// 入力位置にダミータグを挿入する
	var strDummyTag = DUMMY_TAG;
//	var strDummyTag = "";
	pasteHTML2( g_gckContentElement, strDummyTag);
	
	// 入力された位置を取得する（できる？）
	var strNowString = g_gckContentElement.contentWindow.document.body.innerHTML;
	var astrString = strNowString.split(DUMMY_TAG);
	if (astrString.length > 1){
//		alert(astrString[0]);
//		alert(astrString[1]);
//		alert(astrString[0].length);
		
		g_gckContentElement.contentWindow.document.body.innerHTML = astrString[0] + astrString[1];
	}else{
//		alert(astrString.length);
		g_gckContentElement.contentWindow.document.body.innerHTML = astrString[0];
	}
	
	// 入力された位置の前後にタグがあるかを調べる
	
	// タグがある場合は入力された文字の前後にタグをつける
	
	if(g_FontStartFlag){
		var strHtml = g_gckContentElement.contentWindow.document.body.innerHTML;
		strHtml = "<span style='color: "+ g_CurrentColor +"'>" + strHtml + "</span>";
		pasteHTML2( g_gckContentElement, strHtml);
	
//		alert("font start");
		alert(g_gckContentElement.contentWindow.document.body.innerHTML);
		g_FontStartFlag = false;
	}
	
//	alert(g_gckContentElement.contentWindow.document.body.innerHTML);
*/	
	return true;

}

//-----------------------------------------------------------------------------
// 文字列を置き換える
//-----------------------------------------------------------------------------
function strReplace( strContent, str1, str2 )
{
	while ( strContent.indexOf( str1, 0 ) != -1 )
		strContent = strContent.replace( str1, str2 );
	return strContent;
}

//-----------------------------------------------------------------------------
// 不要なタグをすべて取り除く
//-----------------------------------------------------------------------------
function removeTag( strDoc )
{
	// <br>タグと<IconID_>タグは残す!

	var str1 = "<";
	var str2 = ">";
	var idx = 0;
	while ( (idx = strDoc.indexOf( str1, idx )) != -1 )
	{
		var strCheck = strDoc.substr( idx, 4 );
		if ( strCheck == "<br>" || strCheck == "<BR>" )
		{
			idx++;
			continue;
		}
		strCheck = strDoc.substr( idx, g_strIconTag.length );
		if ( strCheck == g_strIconTag )
		{
			idx++;
			continue;
		}
		var endIdx = strDoc.indexOf( str2, idx );
		if ( idx < endIdx )
		{
			// 抜く！
			var doc1 = strDoc.substr( 0, idx );
			var doc2 = strDoc.substr( endIdx+1, strDoc.length );
			strDoc = doc1 + doc2;
		}
	}

	return strDoc;
}

//-----------------------------------------------------------------------------
// カラーパレットオープン
// 説明：カラーパレット領域を表示する
//-----------------------------------------------------------------------------
function OpenColorPalette()
{
	if ( _FONTCOLOR_ )
	{
		CloseImagePalette();
		document.getElementById( "c_pal" ).style.visibility = "visible";
	}
}

//-----------------------------------------------------------------------------
// イメージパレットオープン
// 説明：イメージパレット領域を表示する
//-----------------------------------------------------------------------------
function OpenImagePalette()
{
	CloseColorPalette();
	document.getElementById( "c_pal" ).style.visibility = "visible";
	OpenIconTab( "" );
}

//-----------------------------------------------------------------------------
// カラーパレットクローズ
// 説明：カラーパレット領域を非表示する
//-----------------------------------------------------------------------------
function CloseColorPalette()
{
	if ( _FONTCOLOR_ )
		document.getElementById( "c_pal" ).style.visibility = "hidden";
}

//-----------------------------------------------------------------------------
// イメージパレットクローズ
// 説明：イメージパレット領域を非表示する
//-----------------------------------------------------------------------------
function CloseImagePalette()
{
	document.getElementById( "c_pal" ).style.visibility = "hidden";
	OpenIconTab( "" );
}

//-----------------------------------------------------------------------------
// タブスクロール
//-----------------------------------------------------------------------------
function ScrollTab( nAdd )
{
	var nIdx = g_nCurTabIndex + nAdd;
	var nTabMax = g_listTabBtnName.length;
	if ( g_bCommonPage == true )
		nTabMax = g_nCommonTabCnt;

	var bEnablePrev = true;
	var bEnableNext = true;
	var strEnableNext = "_n";
	var strEnablePrev = "_n";
	var prevBtn = document.getElementById( g_prevBtnName );
	var nextBtn = document.getElementById( g_nextBtnName );

	if ( nIdx <= 0 )
	{
		nIdx = 0;
		// Disable
		bEnablePrev = false;
		strEnablePrev = "_d";
	}
	else if ( nIdx >= nTabMax - g_tabCountShow )
	{
		nIdx = nTabMax - g_tabCountShow;
		// Disable
		bEnableNext = false;
		strEnableNext = "_d";
	}

	// 矢印のEnable
	prevBtn.bEnable = bEnablePrev;
	prevBtn.src = g_skinPath + g_prevBtnName + strEnablePrev + g_imageExt;
	nextBtn.bEnable = bEnableNext;
	nextBtn.src = g_skinPath + g_nextBtnName + strEnableNext + g_imageExt;

	g_nCurTabIndex = nIdx;

	// 表示中ID更新
	for ( var i = 0; i < g_tabCountShow; i++ )
	{
		var strName = g_listTabBtnName[nIdx+i];
		g_listCurTabID[i] = strName;

		// 画像更新
		var strPath = g_skinPath + strName + "_n" + g_imageExt;
		if ( g_strSelectTabName == strName )
			strPath = g_skinPath + strName + "_p" + g_imageExt;
		document.getElementById( "i_tab_"+i ).src = strPath;
	}
}

//-----------------------------------------------------------------------------
// アイコンのタブ切り替え
//-----------------------------------------------------------------------------
function OpenIconTab( strName )
{
	var len = g_listTabBtnName.length;
	if ( g_bCommonPage == true )
		len = g_nCommonTabCnt;
	for ( var i = 0; i < len; i++ )
	{
		var name = g_listTabBtnName[i];
		if ( strName != name )
		{
			document.getElementById( "i_pal_"+name ).style.visibility = "hidden";
		}
		else
		{
			document.getElementById( "i_pal_"+name ).style.visibility = "visible";
			// 現在選択していたタブが表示されていれば通常状態に戻す
			for ( var n = 0; n < g_tabCountShow; n++ )
			{
				if ( g_strSelectTabName == g_listCurTabID[n] )
				{
					var strID = "i_tab_"+n;
					var path = g_skinPath + g_strSelectTabName + "_n" + g_imageExt;
					document.getElementById( strID ).src = path;
					break;
				}
			}
			// 選択タブを保持
			g_strSelectTabName = name;
		}
	}

}

//-----------------------------------------------------------------------------
// 色をつける
//-----------------------------------------------------------------------------
function ChangeTextColor( strColor )
{

	var strChangeColor = g_FixedColor;
	if (g_FixedColor.length > 0){
		// 固定カラーなので変更できない
		strChangeColor = g_FixedColor; 
	}else{
		strChangeColor = strColor;
	}
	
	if (!g_DesignFlag){
		g_CurrentColor = strChangeColor;
	}else{
		// ボディのスタイルを変える
		var prevColor = g_CurrentColor;
		g_gckContentElement.contentWindow.document.body.style.color = strChangeColor;
		g_CurrentColor = strChangeColor;

		g_gckContentElement.contentWindow.document.body.focus();

		// IEのみカーソルを移動させる
		if ( browser.isIE )
		{
			var content = g_gckContentElement.contentWindow.document.body.innerHTML;
			setCursor(1);
			setCursor(content.length);
		}

	}

/*
//	var selection = g_gckContentElement.contentWindow.getSelection();
//	var range = selection.getRangeAt( 0 );
//	range.surroundContents(node);
	
	// 前後に<span>タグを入れる
	var strHtml = g_gckContentElement.contentWindow.document.body.innerHTML;
	strHtml = "<span style='color: "+ prevColor +"'>" + strHtml + "</span>";
//	pasteHTML2( g_gckContentElement, strHtml);

	g_gckContentElement.contentWindow.document.body.innerHTML = strHtml;

	g_FontStartFlag	= true;
//	g_gckContentElement.contentWindow.document.body.innerHTML = strHtml;

//	alert(g_gckContentElement.contentWindow.document.body.innerHTML);
	
	// 送信フォームにも入れとく
//	document.getElementById( EDIT_COLOR_ID ).value = strColor;

	// カラーパレット閉じる
//	CloseColorPalette();
*/

}

//-----------------------------------------------------------------------------
// 絵文字を挿入する
// 説明：イメージパレットで選択されたアイコンを挿入する
//-----------------------------------------------------------------------------
function InsertImageToTextArea( id )
{
//window.open("emozi.html");

//window.alert("ああああ");
	var strImage = g_iconPath + id + g_imageExt;

	// 本文のIframeオブジェクトにアイコンを埋め込む
	pasteHTML2( g_gckContentElement, "<img id='"+id+"' src='"+strImage+"'>");

	// アイコンパレット閉じる
//	CloseImagePalette();
}

//-----------------------------------------------------------------------------
// pasteHTML
//-----------------------------------------------------------------------------
function pasteHTML2( obj, html )
{
	if ( browser.isIE )
	{
		if ( obj )
		{
			try
			{
			g_gckContentElement.contentWindow.document.body.focus();

			var curRange = document.selection.createRange();		// 現在選択中のレンジ
			if ( curRange.parentElement().tagName != "BODY" )
			{
			}
//			var objRange = obj.contentWindow.document.body.createTextRange();		// フォーカス中のオブジェクトのレンジ
//			objRange.setEndPoint( "StartToStart", curRange );		// 始点を合わせる
//			objRange.setEn+dPoint( "EndToEnd", curRange );			// 終点を合わせる
			curRange.pasteHTML( html );								// ペースト
			g_gckContentElement.contentWindow.document.body.unfocus();
			}
			catch ( e )
			{
			}
		}
	}
	else
	{
		// 選択している場所を見つけて
		var selection = g_gckContentElement.contentWindow.getSelection();
		var range = selection.getRangeAt( 0 );
		var div = g_gckContentElement.contentWindow.document.createElement( 'DIV' );
		div.innerHTML = html;
		range.deleteContents();

		while ( div.firstChild )
		{
			range.insertNode( div.firstChild );
		}

	}
}

//-----------------------------------------------------------------------------
// 余計なIMGタグを省く
// 説明：ドラッグ＆ドロップによってiframに投下されたイメージを破棄する。
// 　　：ほんとはドラッグ＆ドロップ自体を制限したいんだけど・・
// 引数：strDoc - 検査する文章
//-----------------------------------------------------------------------------
function RemoveDropImage( strDoc )
{
	// HTML検索
	if ( browser.isIE5up )
	{
		var strSearch = "<IMG ";
		var start_id = 4;
	}
	else
	{
		var strSearch = "<img ";
		var start_id = 5;
	}
	var idx = 0;
	while ( (idx = strDoc.indexOf( strSearch, idx )) != -1 )
	{
		var src_idx = strDoc.indexOf( "src=", idx );
		var right_idx = strDoc.indexOf( ">", src_idx );
		if ( idx < src_idx && src_idx < right_idx )
		{
			// IEはid=aaa,FireFoxはid="aaa"となっている
			var quo_left_idx = src_idx + start_id;
			var quo_right_idx = strDoc.indexOf( '"', quo_left_idx+1 );
			var strSrc = strDoc.substring( quo_left_idx, quo_right_idx );
			if ( strSrc.indexOf( g_iconPath, 0 ) != -1 )
			{
				// 正規のアイコンなら残す
				idx = right_idx;
				continue;
			}
		}

		// 引っこ抜く
		var str1 = strDoc.substring( 0, idx );
		var str2 = strDoc.substring( right_idx+1, strDoc.length );
		strDoc = str1 + str2;
	}

	return strDoc;
}

//-----------------------------------------------------------------------------
// html中の<IMG>タグを(IC????)タグへ変換
//-----------------------------------------------------------------------------
function ConvertImageSrcToId( strDoc )
{
	// HTML検索
	if ( browser.isIE5up )
	{
		var strSearch = "<IMG ";
		var start_id = 3;
		var end_char = ' ';
	}
	else
	{
		var strSearch = "<img ";
		var start_id = 4;
		var end_char = '"';
	}
	var idx = 0;
	while ( (idx = strDoc.indexOf( strSearch, idx )) != -1 )
	{
		var id_idx = strDoc.indexOf( "id=", idx );
		var right_idx = strDoc.indexOf( ">", id_idx );
		var icon_id = strDoc.substr( id_idx + start_id, g_maxIconID );

		// 引っこ抜く
		var str1 = strDoc.substring( 0, idx );
		var str2 = strDoc.substring( right_idx+1, strDoc.length );
		strDoc = str1 + g_strIconTag + icon_id + ")" + str2;

	}

	// <br>を(br)に変換
	strDoc = strReplace( strDoc, "<br>", "(br)" );
	strDoc = strReplace( strDoc, "<BR>", "(BR)" );


	strDoc = strReplace( strDoc, "\r\n", "(BR)" );	// 改行コード1
	strDoc = strReplace( strDoc, "\n\r", "(BR)" );	// 改行コード2
	strDoc = strReplace( strDoc, "\n", "(BR)" );		// 改行コード3
	strDoc = strReplace( strDoc, "\r", "(BR)" );		// 改行コード4

	return strDoc;
}

//-----------------------------------------------------------------------------
// html中のフォントスタイルを(FC??????)タグへ変換
//-----------------------------------------------------------------------------
function ConvertFontTagToSrc( strDoc )
{
	return "(FC" + g_CurrentColor + ")" + strDoc + "(/FC)";
}

//-----------------------------------------------------------------------------
// ショップ画面への遷移
//-----------------------------------------------------------------------------
function jumpToShop(){
	window.open("/mypage/sns/servlet/shop.ShopFrame","_top");
}


function setCursor(position){

	var elm = g_gckContentElement.contentWindow.document.body;
	elm.focus(); // Operaの為(IEでは無くても大丈夫)

	// HTML検索
	if ( browser.isIE5up )
	{
		var range = elm.createTextRange();
		range.move('character', position);
		range.select();		
	}
	else
	{
		elm.setSelectionRange(position, position);
	}

}

function getContentLength(strContent){

	var str1 = "<";
	var str2 = ">";
	var idx = 0;
	while ( (idx = strDoc.indexOf( str1, idx )) != -1 )
	{
		var endIdx = strDoc.indexOf( str2, idx );
		if ( idx < endIdx )
		{
			// 抜く！
			var doc1 = strDoc.substr( 0, idx );
			var doc2 = strDoc.substr( endIdx+1, strDoc.length );
			strDoc = doc1 + doc2;
		}
	}

	return strDoc.length;
}


