///////////////////////////// WysiwygEditor共通モジュールここから /////////////////////////////

// エディタを生成するごとに管理されるオブジェクト
var WysiwygEditorObject = {
	/* 初期設定 */
	InitialyzeVariable: function() {
		var variable=new WysiwygEditorObject.Variable();
		
		variable.path="./";
		variable.frame_path="./iframe.html";
		variable.return_path="./";
		variable.width="480";
		variable.height="320";
		variable.max_width="600";
		variable.max_height="480";
		variable.border_type="solid";
		variable.border_width="1";
		variable.border_color="#000000";
		variable.logo_position=false;
		variable.logo_move_px="10";
		variable.editor_id="editor";
		variable.iframe_id="iframe";
		variable.data_id="editor_data";
		variable.html_mode=true;
		variable.align="left";
		variable.background="";
		variable.color="";
		variable.include_css="";
		variable.include_js="";
		
		return variable;
	},
	Variable: function(){
		this.path;
		this.frame_path;
		this.return_path;
		this.width;
		this.height;
		this.max_width;
		this.max_height;
		this.default_width;
		this.default_height;
		this.border_type;
		this.border_width;
		this.border_color;
		this.logo_position;
		this.logo_move_px;
		this.editor_id;
		this.iframe_id;
		this.data_id;
		this.color;
		this.font;
		this.size;
		this.html_mode;
		this.align;
		this.background;
		this.color;
		this.include_css;
		this.include_js;
	}
}

// 共通関数郡
var WysiwygEditor = {
	currentID: null,
	selectionBackup: null,
	iframeBackup: null,
	objectBackup: null,
	browseIE: document.all ? true : false,
	browseOpera: navigator.appName == "Opera" ? true : false,
	browseOther: !this.browseOpera && !this.browseIE,
	iframeList: new Array(),
	iframeVariableList: new Array(),
	View: function(variable) {
		var innerHTML=WysiwygEditor.CreateWysiwygEditor(variable);
		document.getElementById(variable.editor_id).innerHTML=innerHTML;
		WysiwygEditor.pushId(variable.iframe_id);
		WysiwygEditor.pushVariable(variable.iframe_id,variable);
	},
	CreateWysiwygEditor: function(variable) {
		if(document.getElementById(variable.data_id)){
			document.getElementById(variable.data_id).style.display='none';
		}
		
		var innerHTML="";
		
		var align="";
		if(variable.align=="center"){
			align=" margin: 0 auto;";
		}else if(variable.align=="right"){
			align=" margin: 0 0 0 auto;";
		}
		
		/* table layout */
		innerHTML+="<table style='width:"+variable.width+"px;"+align+"' id='"+variable.editor_id+"_toolbar_header' class='wysiwyg_editor_table'>";
		innerHTML+="<tbody>";
		innerHTML+="<tr id='"+variable.editor_id+"_toolbar_1'>";
		innerHTML+="<td id='"+variable.editor_id+"_toolbar_1_td' style='background: url("+variable.path+"image/wysiwyg_bg.jpg) repeat-x 0 0;padding: 4px;width:"+variable.width+"px;border-left: "+variable.border_type+" "+variable.border_width+"px "+variable.border_color+";border-right: "+variable.border_type+" "+variable.border_width+"px "+variable.border_color+";border-top: "+variable.border_type+" "+variable.border_width+"px "+variable.border_color+";'>";
		innerHTML+="<img src='"+variable.path+"image/wysiwyg_start.gif' />";
		// IE で非推奨のため
		//innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_undo_off.gif' alt='戻る' title='戻る' onclick='WysiwygEditor.setFontCommand(\""+variable.iframe_id+"\",\"undo\",null);' />";
		//innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_redo_off.gif' alt='進む' title='進む' onclick='WysiwygEditor.setFontCommand(\""+variable.iframe_id+"\",\"redo\",null);' />";
		//innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_separator.gif' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_bold_off.gif' alt='太字' title='太字' onclick='WysiwygEditor.setFontCommand(\""+variable.iframe_id+"\",\"bold\",null);' id='"+variable.iframe_id+"_bold_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_italic_off.gif' alt='斜体' title='斜体' onclick='WysiwygEditor.setFontCommand(\""+variable.iframe_id+"\",\"italic\",null);' id='"+variable.iframe_id+"_italic_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_underline_off.gif' alt='下線' title='下線' onclick='WysiwygEditor.setFontCommand(\""+variable.iframe_id+"\",\"underline\",null);' id='"+variable.iframe_id+"_underline_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_strike_off.gif' alt='打ち消し線' title='打ち消し線' onclick='WysiwygEditor.setFontCommand(\""+variable.iframe_id+"\",\"strikethrough\",null);' id='"+variable.iframe_id+"_strike_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_separator.gif' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_left_off.gif' alt='左寄せ' title='左寄せ' onclick='WysiwygEditor.setTextIndent(\""+variable.iframe_id+"\",\"left\");' id='"+variable.iframe_id+"_left_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_center_off.gif' alt='中央寄せ' title='中央寄せ' onclick='WysiwygEditor.setTextIndent(\""+variable.iframe_id+"\",\"center\");' id='"+variable.iframe_id+"_center_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_right_off.gif' alt='右寄せ' title='右寄せ' onclick='WysiwygEditor.setTextIndent(\""+variable.iframe_id+"\",\"right\");' id='"+variable.iframe_id+"_right_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_separator.gif' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_indent_off.gif' alt='インデントを増やす' title='インデントを増やす' onclick='WysiwygEditor.setFontCommand(\""+variable.iframe_id+"\",\"indent\");' id='"+variable.iframe_id+"_indent_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_outdent_off.gif' alt='インデントを減らす' title='インデントを減らす' onclick='WysiwygEditor.setFontCommand(\""+variable.iframe_id+"\",\"outdent\");' id='"+variable.iframe_id+"_outdent_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_ul_off.gif' alt='箇条書き' title='箇条書き' onclick='WysiwygEditor.insertList(\""+variable.iframe_id+"\",\"list\");' id='"+variable.iframe_id+"_ul_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_ol_off.gif' alt='リスト' title='リスト' onclick='WysiwygEditor.insertList(\""+variable.iframe_id+"\",\"number\");' id='"+variable.iframe_id+"_ol_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_separator.gif' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_color_off.gif' alt='文字色' title='文字色' onclick='WysiwygEditor.showDialog(event,\"color\",\""+variable.iframe_id+"\");' id='"+variable.iframe_id+"_color_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_backcolor_off.gif' alt='背景色' title='背景色' onclick='WysiwygEditor.showDialog(event,\"backcolor\",\""+variable.iframe_id+"\");' id='"+variable.iframe_id+"_backcolor_button' class='click_point' />";
		innerHTML+="</td>";
		innerHTML+="</tr>";
		innerHTML+="<tr id='"+variable.editor_id+"_toolbar_2'>";
		innerHTML+="<td id='"+variable.editor_id+"_toolbar_2_td' style='background: url("+variable.path+"image/wysiwyg_bg.jpg) repeat-x 0 0;padding: 4px;width:"+variable.width+"px;border-left: "+variable.border_type+" "+variable.border_width+"px "+variable.border_color+";border-right: "+variable.border_type+" "+variable.border_width+"px "+variable.border_color+";border-top: "+variable.border_type+" "+variable.border_width+"px "+variable.border_color+";'>";
		innerHTML+="<img src='"+variable.path+"image/wysiwyg_start.gif' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_size_off.gif' alt='文字サイズ' title='文字サイズ' onclick='WysiwygEditor.showDialog(event,\"size\",\""+variable.iframe_id+"\");' id='"+variable.iframe_id+"_size_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_font_off.gif' alt='書体' title='書体' onclick='WysiwygEditor.showDialog(event,\"font\",\""+variable.iframe_id+"\");' id='"+variable.iframe_id+"_font_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_separator.gif' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_image_off.gif' alt='画像' title='画像' onclick='WysiwygEditor.showDialog(event,\"image\",\""+variable.iframe_id+"\");' id='"+variable.iframe_id+"_image_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_movie_off.gif' alt='動画' title='動画' onclick='WysiwygEditor.showDialog(event,\"movie\",\""+variable.iframe_id+"\");' id='"+variable.iframe_id+"_movie_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_link_off.gif' alt='リンク' title='リンク' onclick='WysiwygEditor.showDialog(event,\"link\",\""+variable.iframe_id+"\");' id='"+variable.iframe_id+"_link_button' class='click_point' />";
		//innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_emoji_off.gif' alt='絵文字' title='絵文字' onclick='WysiwygEditor.showDialog(event,\"emoji\",\""+variable.iframe_id+"\");' id='"+variable.iframe_id+"_emoji_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_separator.gif' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_removeformat_off.gif' alt='文字装飾をなくす' title='文字装飾をなくす' onclick='WysiwygEditor.setFontCommand(\""+variable.iframe_id+"\",\"removeformat\",null);' id='"+variable.iframe_id+"_removeformat_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_area_off.gif' alt='拡大' title='拡大' onclick='WysiwygEditor.setWysiwygArea(\""+variable.iframe_id+"\");' id='"+variable.iframe_id+"_area_button' class='click_point' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_separator.gif' />";
		innerHTML+="&nbsp;<img src='"+variable.path+"image/wysiwyg_source_off.gif' alt='直接編集' title='直接編集' onclick='WysiwygEditor.changeMode(\""+variable.iframe_id+"\");' id='"+variable.iframe_id+"_source_button' class='click_point' />";
		innerHTML+="</td>";
		innerHTML+="</tr>";
		innerHTML+="<tr id='"+variable.editor_id+"_toolbar_3' style='display: none'>";
		innerHTML+="<td id='"+variable.editor_id+"_toolbar_3_td' style='background: url("+variable.path+"image/wysiwyg_bg_view.jpg) repeat-x 0 0;padding: 4px;width:"+variable.width+"px;border-left: "+variable.border_type+" "+variable.border_width+"px "+variable.border_color+";border-right: "+variable.border_type+" "+variable.border_width+"px "+variable.border_color+";border-top: "+variable.border_type+" "+variable.border_width+"px "+variable.border_color+";'>";
		innerHTML+="<img src='"+variable.path+"image/wysiwyg_start.gif' />";
		innerHTML+="&nbsp;<a href='javascript:WysiwygEditor.changeMode(\""+variable.iframe_id+"\");'>HTML表示に戻す</a>&nbsp;&nbsp;<span style='font-size: 90%; color: #d96666;'>*HTMLタグの入力ミスにご注意ください</span>";
		innerHTML+="</td>";
		innerHTML+="</tr>";
		innerHTML+="</tbody>";
		innerHTML+="</table>";
		
		/* iframe layout */
		/* iframe がキャッシュされないよう、GET値に現在日付を付加 */
		/* iframe の width は collapse による 2px を考慮 */
		var datetime="clear";
		var now=new Date();
		var iframe_width=variable.width-(variable.border_width*2);
		if(WysiwygEditor.browseIE && navigator.userAgent.match('MSIE 6.0')){
			iframe_width-=2;
		}
		datetime+=String(now.getFullYear())+String(now.getMonth()+1)+String(now.getDate())+String(now.getHours())+String(now.getMinutes())+String(now.getSeconds());
		innerHTML+="<iframe frameborder='0' allowtransparency='true' height='"+variable.height+"' width='"+iframe_width+"' id='"+variable.iframe_id+"' style='border: "+variable.border_type+" "+variable.border_width+"px "+variable.border_color+";'></iframe>";
		
		/* logo position layout */
		if(variable.logo_position){
			innerHTML+="<table style='width:"+variable.width+"px;"+align+"' id='"+variable.editor_id+"_toolbar_footer'>";
			innerHTML+="<tbody>";
			innerHTML+="<tr>";
			innerHTML+="<td id='"+variable.editor_id+"_toolbar_footer_td' style='background: url("+variable.path+"image/wysiwyg_bg.jpg) repeat-x 0 0;padding: 4px;border-left: "+variable.border_type+" "+variable.border_width+"px "+variable.border_color+";border-right: "+variable.border_type+" "+variable.border_width+"px "+variable.border_color+";border-bottom: "+variable.border_type+" "+variable.border_width+"px "+variable.border_color+";width:"+variable.width+"px;'>";
			innerHTML+="<img src='"+variable.path+"image/wysiwyg_start.gif' />";
			innerHTML+="<img src='"+variable.path+"image/wysiwyg_logo.gif' alt='ロゴの配置' title='ロゴの配置' />";
			innerHTML+="<img src='"+variable.path+"image/wysiwyg_separator.gif' />";
			innerHTML+="<img src='"+variable.path+"image/logo_position_right_off.gif' width='20' height='20' onclick=\"WysiwygEditor.logoMove('"+variable.iframe_id+"','right',"+variable.logo_move_px+");\" id='"+variable.iframe_id+"_position_right_button' class='click_point' />&nbsp;&nbsp;";
			innerHTML+="<img src='"+variable.path+"image/logo_position_bottom_off.gif' width='20' height='20' onclick=\"WysiwygEditor.logoMove('"+variable.iframe_id+"','bottom',"+variable.logo_move_px+");\" id='"+variable.iframe_id+"_position_bottom_button' class='click_point' />&nbsp;&nbsp;";
			innerHTML+="<img src='"+variable.path+"image/logo_position_left_off.gif' width='20' height='20' onclick=\"WysiwygEditor.logoMove('"+variable.iframe_id+"','left',"+variable.logo_move_px+");\" id='"+variable.iframe_id+"_position_left_button' class='click_point' />&nbsp;&nbsp;";
			innerHTML+="<img src='"+variable.path+"image/logo_position_top_off.gif' width='20' height='20' onclick=\"WysiwygEditor.logoMove('"+variable.iframe_id+"','top',"+variable.logo_move_px+");\" id='"+variable.iframe_id+"_position_top_button' class='click_point' />&nbsp;&nbsp;";
			innerHTML+="<img src='"+variable.path+"image/logo_position_fix_off.gif' width='70' height='20' onclick=\"WysiwygEditor.logoMove('"+variable.iframe_id+"','fix',0);\" id='"+variable.iframe_id+"_position_fix_button' class='click_point' />&nbsp;&nbsp;";
			innerHTML+="</td>";
			innerHTML+="</tr>";
			innerHTML+="</tbody>";
			innerHTML+="</table>";
		}
		
		return innerHTML;
	},
	getDocument: function (iframe_id) {
		var iframe_doc=null;
		if(WysiwygEditor.browseIE){
			iframe_doc=document.getElementById(iframe_id).contentWindow.document;
		}else{
			iframe_doc=document.getElementById(iframe_id).contentDocument;
		}
		return iframe_doc;
	},
	getWindow: function (iframe_id) {
		var iframe_win=null;
		if(WysiwygEditor.browseIE){
			iframe_win=document.getElementById(iframe_id).contentWindow.document;
		}else{
			iframe_win=document.getElementById(iframe_id).contentWindow;
		}
		return iframe_win;
	},
	getCommandWindow: function (iframe_id) {
		return document.getElementById(iframe_id).contentWindow;
	},
	pushId: function (iframe_id) {
		var length=WysiwygEditor.iframeList.length;
		WysiwygEditor.iframeList[length]=iframe_id;
	},
	pushVariable: function (iframe_id,variable) {
		WysiwygEditor.iframeVariableList[iframe_id]=variable;
	},
	logoMove: function (iframe_id, type, move_px) {
		var iframe_doc=WysiwygEditor.getDocument(iframe_id);
		if(type=='fix' && confirm('ロゴの配置を初期に戻します。よろしいですか？')){
			iframe_doc.body.style.backgroundPosition='0px 0px';
			if(document.getElementById('logo_x') && document.getElementById('logo_y')){
				document.getElementById('logo_x').value='0';
				document.getElementById('logo_y').value='0';
			}
		}else{
			var after_position="";
			var before_position=iframe_doc.body.style.backgroundPosition;
			var positions=before_position.split(' ');
			var top=positions[1].replace('px','');
			var left=positions[0].replace('px','');
			if(type=='top'){
				if(top>0){
					top=parseInt(top,10)-parseInt(move_px,10);
				}
			}
			if(type=='right'){
				left=parseInt(left,10)+parseInt(move_px,10);
			}
			if(type=='bottom'){
				top=parseInt(top,10)+parseInt(move_px,10);
			}
			if(type=='left'){
				if(left>0){
					left=parseInt(left,10)-parseInt(move_px,10);
				}
			}
			after_position=left+"px "+top+"px";
			iframe_doc.body.style.backgroundPosition=after_position;
			if(document.getElementById('logo_x') && document.getElementById('logo_y')){
				document.getElementById('logo_x').value=left;
				document.getElementById('logo_y').value=top;
			}
		}
	},
	showDialog: function (event,type,iframe_id) {
		WysiwygEditor.currentID=iframe_id;
		// 念のためselectionをバックアップ
		WysiwygEditor.selectionBackup=WysiwygEditor.getSelection(iframe_id);
		if(document.getElementById("wysiwyg_"+type+"_dialog")){
			var dialog_object=document.getElementById("wysiwyg_"+type+"_dialog");
			WysiwygEditor.setMouseCursorPosition(event,dialog_object);
			WysiwygEditor.onButtonImage(type,iframe_id);
			dialog_object.style.display='block';
			WysiwygEditor.showOverlay();
		}
		WysiwygEditor.hideIframe(iframe_id);
	},
	hideIframe: function (iframe_id) {
		WysiwygEditor.iframeBackup=new Array();
		WysiwygEditor.objectBackup=new Array();
		var iframe_doc=WysiwygEditor.getDocument(iframe_id);
		var iframes=iframe_doc.getElementsByTagName('iframe');
		if(iframes.length){
			for(var i=0; i<iframes.length; i++){
				WysiwygEditor.iframeBackup[i]=iframes[i];
				var div=iframe_doc.createElement('div');
				div.setAttribute('id','hideIframe'+i);
				var width=0;
				var height=0;
				if(iframes[i].style.width){
					width=iframes[i].style.width;
					height=iframes[i].style.height;
				}else{
					width=iframes[i].width+'px';
					height=iframes[i].height+'px';
				}
				div.setAttribute('style','width: '+width+'; height: '+height+'; border: dotted 3px #cccccc; background-color: #e3e3e3;');
				div.innerHTML='&nbsp;';
				iframes[i].parentNode.replaceChild(div,iframes[i]);
			}
		}
		var objects=iframe_doc.getElementsByTagName('object');
		if(objects.length){
			for(var i=0; i<objects.length; i++){
				WysiwygEditor.objectBackup[i]=objects[i];
				var div=iframe_doc.createElement('div');
				div.setAttribute('id','hideObject'+i);
				var width=0;
				var height=0;
				if(objects[i].style.width){
					width=objects[i].style.width;
					height=objects[i].style.height;
				}else{
					width=objects[i].width+'px';
					height=objects[i].height+'px';
				}
				div.setAttribute('style','width: '+width+'; height: '+height+'; border: dotted 3px #cccccc; background-color: #e3e3e3;');
				div.innerHTML='&nbsp;';
				objects[i].parentNode.replaceChild(div,objects[i]);
			}
		}
	},
	closeDialog: function (type) {
		if(document.getElementById("wysiwyg_"+type+"_dialog")){
			var dialog_object=document.getElementById("wysiwyg_"+type+"_dialog");
			WysiwygEditor.offButtonImage(type,WysiwygEditor.currentID);
			dialog_object.style.display='none';
			WysiwygEditor.closeOverlay();
			WysiwygEditor.displayIframe(WysiwygEditor.currentID);
		}
	},
	displayIframe: function (iframe_id) {
		var iframe_doc=WysiwygEditor.getDocument(iframe_id);
		var iframes=WysiwygEditor.iframeBackup;
		if(iframes.length){
			for(var i=0; i<iframes.length; i++){
				if(iframe_doc.getElementById('hideIframe'+i)){
					var div=iframe_doc.getElementById('hideIframe'+i);
					div.parentNode.replaceChild(iframes[i],div);
				}
			}
		}
		WysiwygEditor.iframeBackup=null;
		var objects=WysiwygEditor.objectBackup;
		if(objects.length){
			for(var i=0; i<objects.length; i++){
				if(iframe_doc.getElementById('hideObject'+i)){
					var div=iframe_doc.getElementById('hideObject'+i);
					div.parentNode.replaceChild(objects[i],div);
				}
			}
		}
		WysiwygEditor.objectBackup=null;
	},
	showOverlay: function () {
		var page_size=WysiwygEditor.getPageSize();
		var overlay_object=document.getElementById("wysiwyg_overlay");
		overlay_object.style.top=0;
		overlay_object.style.left=0;
		overlay_object.style.width=page_size[0]+"px";
		overlay_object.style.height=page_size[1]+"px";
		overlay_object.style.display="block";
	},
	closeOverlay: function () {
		var overlay_object=document.getElementById("wysiwyg_overlay");
		overlay_object.style.top=0;
		overlay_object.style.left=0;
		overlay_object.style.width=0;
		overlay_object.style.height=0;
		overlay_object.style.display="none";
	},
	setMouseCursorPosition: function (event,dialog_object) {
		dialog_object.style.left=wysiwyg_x_position+"px";
		dialog_object.style.top=wysiwyg_y_position+"px";
	},
	onButtonImage: function (type,iframe_id) {
		if(document.getElementById(iframe_id+"_"+type+"_button")){
			var button_object=document.getElementById(iframe_id+"_"+type+"_button");
			button_object.src=button_object.src.replace('_off','_on');
		}
	},
	offButtonImage: function (type,iframe_id) {
		if(document.getElementById(iframe_id+"_"+type+"_button")){
			var button_object=document.getElementById(iframe_id+"_"+type+"_button");
			button_object.src=button_object.src.replace('_on','_off');
		}
	},
	onRolloverButtonImage: function (button_id) {
		if(document.getElementById(button_id)){
			var button_object=document.getElementById(button_id);
			if(button_object.src.match('_on')){
				button_object.src=button_object.src.replace('_on','_off');
			}else{
				button_object.src=button_object.src.replace('_off','_on');
			}
		}
	},
	onRolloverBackgroundColor: function (object_id,color) {
		if(document.getElementById(object_id)){
			var object=document.getElementById(object_id);
			object.style.backgroundColor=color;
		}
	},
	
	/* Office の関数を継承 */
	getPageSize: function () {
		var xScroll, yScroll;
		if (window.innerHeight && window.scrollMaxY) {	
			xScroll = window.innerWidth + window.scrollMaxX;
			yScroll = window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
			xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}
		var windowWidth, windowHeight;
		if (self.innerHeight) {	// all except Explorer
			if(document.documentElement.clientWidth){
				windowWidth = document.documentElement.clientWidth; 
			} else {
				windowWidth = self.innerWidth;
			}
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) { // other Explorers
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}	
		// for small pages with total height less then height of the viewport
		if(yScroll < windowHeight){
			pageHeight = windowHeight;
		} else { 
			pageHeight = yScroll;
		}
		// for small pages with total width less then width of the viewport
		if(xScroll < windowWidth){
			pageWidth = xScroll;
		} else {
			pageWidth = windowWidth;
		}
		return [pageWidth,pageHeight];
	},
	blurEditor: function (e) {
		var iframe_id=WysiwygEditor.getEventObject(e);
		if(document.getElementById(iframe_id+"_toolbar_header")){
			document.getElementById(iframe_id+"_toolbar_header").style.display="none";
		}
		if(document.getElementById(iframe_id+"_toolbar_footer")){
			document.getElementById(iframe_id+"_toolbar_footer").style.display="none";
		}
	},
	focusEditor: function (e) {
		var iframe_id=WysiwygEditor.getEventObject(e);
		if(document.getElementById(iframe_id+"_toolbar_header")){
			document.getElementById(iframe_id+"_toolbar_header").style.display="block";
		}
		if(document.getElementById(iframe_id+"_toolbar_footer")){
			document.getElementById(iframe_id+"_toolbar_footer").style.display="block";
		}
	},
	getEventObject: function (e) {
		var iframe_id;
		if (e.target) {
			object=e.target;
			if(object.document){
				iframe_id=object.document.body.id.replace('_body','');
			}else{
				iframe_id=object.id.replace('_toolbar_header','');
				iframe_id=iframe_id.replace('_toolbar_footer','');
			}
		}else if (window.event.srcElement) {
			iframe_id=window.event.srcElement.id.replace('_toolbar_header','');
			iframe_id=iframe_id.replace('_toolbar_footer','');
		}
		return iframe_id;
	},
	setEventObject: function (object_id) {
		var object=document.getElementById(object_id);
		if(object.contentWindow && object.contentWindow.addEventListener){
			object.contentWindow.addEventListener('blur',WysiwygEditor.blurEditor,false);
			object.contentWindow.addEventListener('focus',WysiwygEditor.focusEditor,false);
		}else if(object.addEventListener){
			object.addEventListener('blur',WysiwygEditor.blurEditor,false);
			object.addEventListener('focus',WysiwygEditor.focusEditor,false);
		}else if(object.attachEvent){
			object.attachEvent('onblur',WysiwygEditor.blurEditor);
			object.attachEvent('onfocus',WysiwygEditor.focusEditor);
		}else{
			object['onblur']=WysiwygEditor.blurEditor;
			object['onfocus']=WysiwygEditor.focusEditor;
		}
	},
	setTextIndent: function (iframe_id, align) {
		WysiwygEditor.getCommandWindow(iframe_id).document.execCommand("justify"+align,false,null);
	},
	setFontCommand: function (iframe_id, command, value) {
		WysiwygEditor.getCommandWindow(iframe_id).document.execCommand(command,false,value);
		// IE
		if(WysiwygEditor.browseIE){
			WysiwygEditor.getDocument(iframe_id).body.innerHTML=WysiwygEditor.getDocument(iframe_id).body.innerHTML.replace(/<STRONG>/g,'<STRONG style="font-weight: bold;">');
			WysiwygEditor.getDocument(iframe_id).body.innerHTML=WysiwygEditor.getDocument(iframe_id).body.innerHTML.replace(/<EM>/g,'<EM style="font-style: italic;">');
			WysiwygEditor.getDocument(iframe_id).body.innerHTML=WysiwygEditor.getDocument(iframe_id).body.innerHTML.replace(/<U>/g,'<U style="text-decoration: underline;">');
		}
	},
	setDialogCommand: function (type, command, value) {
		var iframe_id=WysiwygEditor.currentID;
		if(type=='font'){
			if(value=='gothic'){
				value="'ＭＳ ゴシック',Osaka,sans-serif,Arial";
			}else if(value=='mincho'){
				value="'ＭＳ 明朝','Times New Roman',serif,Arial";
			}else if(value=='pop'){
				value="'HGS創英角ﾎﾟｯﾌﾟ体','Comic Sans MS','Impact',Arial";
			}else if(value=='cursive_jp'){
				value="'HGP行書体',Arial";
			}else if(value=='cursive_en'){
				value="'Rage Italic',Arial";
			}else if(value=='fantasy'){
				value="'Monotype Corsiva','Edwardian Script ITC',Arial";
			}
		}
		if(type=='backcolor' && WysiwygEditor.browseOther && !WysiwygEditor.browseIE){
			command='hilitecolor';
		}
		WysiwygEditor.getCommandWindow(iframe_id).document.execCommand(command,false,value);
		WysiwygEditor.closeDialog(type);
	},
	getClickCurrentData: function (iframe_id) {
		var parent_node=null;
		var selection=WysiwygEditor.getSelection(iframe_id);
		if(selection){
			var range=WysiwygEditor.getRange(selection);
			if(range){
				parent_node=WysiwygEditor.getTag(range);
			}
		}
		return parent_node;
	},
	getSelection: function(iframe_id) {
		var iframe_doc=WysiwygEditor.getWindow(iframe_id);
		var selection=null;
		if(iframe_doc.getSelection){
			selection=iframe_doc.getSelection();
		}else if(iframe_doc.selection){
			selection=iframe_doc.selection;
		}
		return selection;
	},
	getRange: function(selection) {
		var range=null;
		if(selection.createRange){
			range=selection.createRange();
		}else if(selection.getRangeAt(0)){
			range=selection.getRangeAt(0);
		}else{
			range=selection.length;
		}
		return range;
	},
	getTag: function(range) {
		var tag=null;
		if(WysiwygEditor.browseIE){
			if(range.length>0){
				tag=range.item(0);
			}else if(range.parentElement()){
				tag=range.parentElement();
			}
		}else{
			var node=range.startContainer;
			var position=range.startOffset;
			if(node.nodeType!=3){
				node=node.childNodes[position];
			}
			if(node.nodeName && node.nodeName.search(/#/)!=-1){
				tag=node.parentNode;
			}
		}
		return tag;
	},
	smartRolloverList: {
		"bold": [true],
		"italic": [true],
		"underline": [true],
		"strike": [true],
		"left": [true],
		"center": [true],
		"right": [true],
		"indent": [true],
		"outdent": [true],
		"ul": [true],
		"ol": [true],
		"color": [true],
		"backcolor": [true],
		"size": [true],
		"font": [true],
		"image": [true],
		"movie": [true],
		"link": [true],
		"emoji": [true],
		"removeformat": [true],
		"area": [true],
		"source": [true],
		"position_left": [true],
		"position_right": [true],
		"position_top": [true],
		"position_bottom": [true],
		"position_fix": [true]
	},
	setWysiwygArea: function(iframe_id){
		var variable=WysiwygEditor.iframeVariableList[iframe_id];
		var editor_id=variable.editor_id;
		if(document.getElementById(iframe_id).height==variable.max_height){
			document.getElementById(iframe_id).height=variable.default_height;
			document.getElementById(iframe_id).width=variable.default_width;
			if(document.getElementById(editor_id+'_toolbar_header')){
				document.getElementById(editor_id+'_toolbar_header').style.width=variable.width+'px';
				if(document.getElementById(editor_id+'_toolbar_1_td')){
					document.getElementById(editor_id+'_toolbar_1_td').style.width=variable.width+'px';
				}
				if(document.getElementById(editor_id+'_toolbar_2_td')){
					document.getElementById(editor_id+'_toolbar_2_td').style.width=variable.width+'px';
				}
				if(document.getElementById(editor_id+'_toolbar_3_td')){
					document.getElementById(editor_id+'_toolbar_3_td').style.width=variable.width+'px';
				}
			}
			if(document.getElementById(editor_id+'_toolbar_footer')){
				document.getElementById(editor_id+'_toolbar_footer').style.width=variable.width+'px';
			}
		}else{
			variable.default_height=document.getElementById(iframe_id).height;
			variable.default_width=document.getElementById(iframe_id).width;
			document.getElementById(iframe_id).height=variable.max_height;
			var iframe_width=variable.max_width-(variable.border_width*2);
			if(WysiwygEditor.browseIE && navigator.userAgent.match('MSIE 6.0')){
				iframe_width-=2;
			}
			document.getElementById(iframe_id).width=iframe_width;
			if(document.getElementById(editor_id+'_toolbar_header')){
				document.getElementById(editor_id+'_toolbar_header').style.width=variable.max_width+'px';
				if(document.getElementById(editor_id+'_toolbar_1_td')){
					document.getElementById(editor_id+'_toolbar_1_td').style.width=variable.max_width+'px';
				}
				if(document.getElementById(editor_id+'_toolbar_2_td')){
					document.getElementById(editor_id+'_toolbar_2_td').style.width=variable.max_width+'px';
				}
				if(document.getElementById(editor_id+'_toolbar_3_td')){
					document.getElementById(editor_id+'_toolbar_3_td').style.width=variable.max_width+'px';
				}
			}
			if(document.getElementById(editor_id+'_toolbar_footer')){
				document.getElementById(editor_id+'_toolbar_footer').style.width=variable.max_width+'px';
			}
		}
	},
	insertLink: function(name,url,type){
		var iframe_id=WysiwygEditor.currentID;
		var doc=WysiwygEditor.getDocument(iframe_id);
		var selection=WysiwygEditor.getSelection(iframe_id);
		if(selection){
			var range=WysiwygEditor.getRange(selection);
			var tag=doc.createElement("a");
			tag.setAttribute('href',url);
			tag.setAttribute('target','_blank');
			tag.innerHTML=name;
			if(WysiwygEditor.browseIE){
				if(range.htmlText.length){
					range.pasteHTML(tag.outerHTML);
				}else{
					doc.body.innerHTML=doc.body.innerHTML+tag.outerHTML;
				}
			}else{
				WysiwygEditor.insertTagSelection(tag,iframe_id,doc);
			}
		}
		WysiwygEditor.closeDialog(type);
	},
	insertEmoji: function(path,type){
		var iframe_id=WysiwygEditor.currentID;
		var doc=WysiwygEditor.getDocument(iframe_id);
		var selection=WysiwygEditor.getSelection(iframe_id);
		if(selection){
			var range=WysiwygEditor.getRange(selection);
			var tag=doc.createElement("img");
			tag.setAttribute('src','/_lib/wysiwyg/emoji/emoji'+path+'.gif');
			if(WysiwygEditor.browseIE){
				if(range.htmlText.length){
					range.pasteHTML(tag.outerHTML);
				}else{
					doc.body.innerHTML=doc.body.innerHTML+tag.outerHTML;
				}
			}else{
				WysiwygEditor.insertTagSelection(tag,iframe_id,doc);
			}
		}
		WysiwygEditor.closeDialog(type);
	},
	insertList: function(iframe_id,type){
		var doc=WysiwygEditor.getDocument(iframe_id);
		var selection=WysiwygEditor.getSelection(iframe_id);
		if(selection){
			var range=WysiwygEditor.getRange(selection);
			if(type=='list'){
				var tag=doc.createElement("ul");
				tag.setAttribute('style','list-style: disc none inside;');
			}else{
				var tag=doc.createElement("ol");
				tag.setAttribute('style','list-style: decimal none inside;');
			}
			var list=doc.createElement("li");
			list.innerHTML="&nbsp";
			tag.appendChild(list);
			if(WysiwygEditor.browseIE){
				if(range.htmlText.length){
					range.pasteHTML(tag.outerHTML);
				}else{
					doc.body.innerHTML=doc.body.innerHTML+tag.outerHTML;
				}
			}else{
				WysiwygEditor.insertTagSelection(tag,iframe_id,doc);
			}
		}
		WysiwygEditor.closeDialog(type);
	},
	insertImage: function(src,type){
		var iframe_id=WysiwygEditor.currentID;
		WysiwygEditor.getCommandWindow(iframe_id).document.execCommand('insertimage',false,src);
		WysiwygEditor.closeDialog(type);
	},
	insertMovie: function(src,type){
		var iframe_id=WysiwygEditor.currentID;
		var doc=WysiwygEditor.getDocument(iframe_id);
		doc.body.innerHTML=doc.body.innerHTML+src;
		WysiwygEditor.closeDialog(type);
	},
	insertTagSelection: function(tag,iframe_id,doc){
		var selection=WysiwygEditor.getSelection(iframe_id);
		if(selection){
			var range=WysiwygEditor.getRange(selection);
			selection.removeAllRanges();
			range.deleteContents();
			var container=range.startContainer;
			var pos=range.startOffset;
			range=doc.createRange();
			
			if(container.nodeType==3 && tag.nodeType==3){
				container.insertData(pos, tag.data);
				range.setEnd(container, pos+tag.length);
				range.setStart(container, pos+tag.length);
			}else{
				var afterNode;
				var beforeNode;
				if(container.nodeType==3){
					var textNode=container;
					container=textNode.parentNode;
					var text=textNode.nodeValue;
					var textBefore=text.substr(0,pos);
					var textAfter=text.substr(pos);
					
					beforeNode=document.createTextNode(textBefore);
					afterNode=document.createTextNode(textAfter);
					
					container.insertBefore(afterNode, textNode);
					container.insertBefore(tag, afterNode);
					container.insertBefore(beforeNode, tag);
					container.removeChild(textNode);
				}else{
					afterNode=container.childNodes[pos];
					container.insertBefore(tag, afterNode);
				}
				try{
					range.setEnd(afterNode, 0);
					range.setStart(afterNode, 0);
				}catch(e){
				}
			}
			selection.addRange(range);
		}
	},
	changeMode: function(iframe_id){
		var variable=WysiwygEditor.iframeVariableList[iframe_id];
		if(variable.html_mode){
			WysiwygEditor.viewSource(iframe_id,variable);
			variable.html_mode=false;
		}else{
			WysiwygEditor.viewHtml(iframe_id,variable);
			variable.html_mode=true;
		}
	},
	viewSource: function(iframe_id,variable){
		var doc=WysiwygEditor.getDocument(iframe_id);
		if(WysiwygEditor.browseIE){
			var html=doc.body.innerHTML;
			doc.body.innerText=html;
		}else{
			var html=doc.body.innerHTML;
			html=document.createTextNode(html);
			doc.body.innerHTML="";
			doc.body.appendChild(html);
	  	}

		var editor_id=variable.editor_id;
		if(document.getElementById(editor_id+'_toolbar_1')){
			document.getElementById(editor_id+'_toolbar_1').style.display='none';
		}
		if(document.getElementById(editor_id+'_toolbar_2')){
			document.getElementById(editor_id+'_toolbar_2').style.display='none';
		}
		if(document.getElementById(editor_id+'_toolbar_3')){
			document.getElementById(editor_id+'_toolbar_3').style.display='block';
		}
	},
	viewHtml: function(iframe_id,variable){
		var doc=WysiwygEditor.getDocument(iframe_id);
		if(WysiwygEditor.browseIE){
			var text=doc.body.innerText;
			doc.body.innerHTML=text;
		}else{
			var html=doc.body.ownerDocument.createRange();
			html.selectNodeContents(doc.body);
			doc.body.innerHTML=html;
		}

		var editor_id=variable.editor_id;
		if(document.getElementById(editor_id+'_toolbar_1')){
			document.getElementById(editor_id+'_toolbar_1').style.display='block';
		}
		if(document.getElementById(editor_id+'_toolbar_2')){
			document.getElementById(editor_id+'_toolbar_2').style.display='block';
		}
		if(document.getElementById(editor_id+'_toolbar_3')){
			document.getElementById(editor_id+'_toolbar_3').style.display='none';
		}
	},
	setCSSFile: function(iframe_doc,href){
		var head=iframe_doc.getElementsByTagName("head");
		var link=iframe_doc.createElement('link');
		link.setAttribute('href',href);
		link.setAttribute('rel','stylesheet');
		link.setAttribute('type','text/css');
		for(var i=0;i<head.length;i++) {
			head[i].appendChild(link);
		}
	},
	setJSFile: function(iframe_doc,src){
		var head=iframe_doc.getElementsByTagName("head");
		var script=iframe_doc.createElement('script');
		script.setAttribute('src',src);
		script.setAttribute('type','text/javascript');
		for(var i=0;i<head.length;i++) {
			head[i].appendChild(script);
		}
	}
}

///////////////////////////// WysiwygEditor共通モジュールここまで /////////////////////////////

