/**
 * Flex TEMPLATE HTMLEditor
 * @author OtakiToshiya
 * ckeditor前提です
 */

FXEDITOR_TEMPLATE = Class.create();
FXEDITOR_TEMPLATE.prototype = Object.extend(new FXEDITOR, {

	//==========================================================================
	// variables
	//==========================================================================
	
	//==========================================================================
	// properties
	//==========================================================================
	
	/** 色情報などが含まれたデータ */
	embedContent: null,
	
	//==========================================================================
	// constractor
	//==========================================================================
	initialize: function () {
		this.id = "fxeditor_template";
		this._ckconfig = '../../config/config_template.js';
	},
	
	//==========================================================================
	// public method
	//==========================================================================
	
	/**
	 * @inherits
	 */
	notifyChange: function(isNotifyFlex, interval) {
		var fxeditor = this;
		if (isNotifyFlex == null) {
			isNotifyFlex = true;
		}
		if (interval == null) {
			interval = 100;
		}
		setTimeout(function() {
				if ($(fxeditor.editNodeId) != null) {
					var html = "";
					
					// body追加
					if (fxeditor.initData != null) {
						html += fxeditor.initData;
						fxeditor.initData = null;
					} else {
						html += fxeditor.getContent();
					}
					
					if (html == "<br />" || html == "") {
						html = "入力して下さい";
					}
					
					
					// 埋め込まれたデータに変更を通知します。
					var embedEditNodeId = fxeditor.editNodeId.slice(2);
					$(embedEditNodeId).innerHTML = html;
					
					
					html = FXEDITOR.replaceImage(html, fxeditor.career);
					
					// プレビューに変更を通知します。
					fxeditor._preview.updateContentAt(fxeditor.editNodeId, html);
					
					var embedContentTbody = $$("table#embedContentTable tbody");
					var embeddata = (embedContentTbody != null && embedContentTbody.length == 3) ?
						// header,footerあり
						embedContentTbody[1].innerHTML:
						embedContentTbody[0].innerHTML;
					var htmlSize = FXEDITOR.getContentSize(embeddata, fxeditor.career);
					
					/*if (isNotifyFlex) {
						$("main").updateContentHandler(embeddata);
					}*/
					$("main").updateSize(htmlSize);
					
				}
		
		}, interval);
	},
	
	/**
	 * Headerの内容をセットします。
	 * @param value
	 */
	setHeaderContent: function (value) {
		this.header = value;
		this._initializePreview();
	},
	
	/**
	 * Footerの内容をセットします。
	 * @param value
	 */
	setFooterContent: function (value) {
		this.footer = value;
		this._initializePreview();
	},
	
	/**
	 * @inherits
	 */
	setContent: function (value) {
		this.embedContent = value;
		this._initializePreview();
	},
	
	getTempContent: function () {
		var embedContentTbody = $$("table#embedContentTable tbody");
		var embeddata = (embedContentTbody != null && embedContentTbody.length == 3) ?
			// header,footerあり
			embedContentTbody[1].innerHTML:
			embedContentTbody[0].innerHTML;
		return embeddata;
	},
			
	/**
	 * @inherits
	 */
	setForms: function (value) {
		this.forms = value;
		this._initializePreview();
	},
	
	/**
	 * @inherits
	 */
	setDiaries: function (value) {
		this.diaries = value;
		this._initializePreview();
	},
	
	//==========================================================================
	// private method
	//==========================================================================
	
	_initializePreview: function() {
		
		var bbody = document.getElementsByTagName("body").item(0);
		
		if (!$('embedContent')) {
			// 色情報などが埋め込まれたデータ領域
			var embedContentDiv = document.createElement("div");
			embedContentDiv.setAttribute("id", "embedContent");
			embedContentDiv.style.display = "none";
			bbody.appendChild(embedContentDiv);
		}
		$('embedContent').innerHTML = 
			"<table id='embedContentTable'>" + this.embedContent + "</table>";
		
		// プレビュー用にデータを作成する
		var previewContent = this.embedContent;
		
		var html = "";
		if (this.header != "") {
			// header追加
			html += this.header;
		}
		
		// body追加
		html += previewContent;
		
		if (this.footer != "") {
			// footer追加
			html += this.footer;
		}
		
		var htmlSize = FXEDITOR.getContentSize(html, this.career);
		$("main").updateSize(htmlSize);
		
		this._preview.updateContent(
			FXEDITOR.replaceImage("<table id='edit'>" + html + "</table>", this.career));
		
		var eventowner = this;
		var snodes = $A($("fxeditor_preview").getElementsByTagName('span'));
		snodes.each (function(node) {
			if (node.id && node.id != "" && node.id != "notedit") {
				
				// 実際のデータにあるIDとプレビューにあるIDがかぶるとだめなので
				// プレビュー側に変更を加える
				node.setAttribute("id", "__" + node.id);
				
				Event.observe(node, 'dblclick', function(e) {
					eventowner.editNodeId = node.id;
					var editNodeId = node.id.slice(2);
					
					if ($(editNodeId)) {
						eventowner.initData = $(editNodeId).innerHTML;// なぜかこのあとgetContentがはしらないから
						eventowner._editor.setData($(editNodeId).innerHTML);
						eventowner.notifyChange(false);
						// チキンでやめた
						//node.innerHTML = impactFront + node.innerHTML + impactRear;
						node.innerHTML = node.innerHTML;
					}
				});
			}
		});
		
		var tnodes = $A($("fxeditor_preview").getElementsByTagName('td'));
		tnodes.each (function(node) {
			if (node.id && node.id != "" && node.id != "notedit") {
			
				// 実際のデータにあるIDとプレビューにあるIDがかぶるとだめなので
				// プレビュー側に変更を加える
				node.setAttribute("id", "__" + node.id);
			
				Event.observe(node, 'dblclick', function() {
					eventowner.editNodeId = node.id;
					var editNodeId = node.id.slice(2);
					if ($(editNodeId)) {
						eventowner.initData = $(editNodeId).innerHTML;// なぜかこのあとgetContentがはしらないから
						eventowner._editor.setData($(editNodeId).innerHTML);
						eventowner.notifyChange(false);
						// チキンでやめた
						//node.innerHTML = impactFront + node.innerHTML + impactRear;
						node.innerHTML = node.innerHTML;
					}
				});
			}
		});
	},

	_createPreview: function () {
		return new FXEDITOR_TEMPLATE_PREVIEW();
	}
});

var impactFront = '<div style="border-style:outset;">';
var impactRear  = '</div>';

