
// Firebug logging tool
if (!window.console) {
	window.console = {
		log: function() { }
	}
}

function popupwindow(p_strURL,p_strTitle,p_strFeatures) { //v2.0
  window.open(p_strURL,p_strTitle,p_strFeatures);
} 

$FK = {
	editorCount: 0,
	editors: { },
	oldCSS: [ ],
	
	createEditor: function(name, w, h, toolbarId, config, toolbarSet) {
		var key,tb,fck = new FCKeditor(name), start='';
		
		var textArea = document.getElementById( name ) ;
		var byName = document.getElementsByName( name ) ;
		for (var i=0,e;(e=byName[i]);i++) {
			if (textArea) break;
			if (e.tagName.toLowerCase()=='textarea') textArea=e;
		}
		if (textArea) start = textArea.value;
		fck.Height = h;
		fck.Width = w;
		
		if (toolbarId && (tb=DOM.get(toolbarId))) {
			fck.Config.ToolbarLocation = 'Out:'+toolbarId;
			fck.Config.ToolbarCanCollapse = false;
		}
		if (config) for (key in config) fck.Config[key] = config[key];
		
		if (toolbarSet) fck.ToolbarSet=toolbarSet;
		
		fck.ReplaceTextarea();
		
		this.editors[name] = { instance: null, toolbar: tb, start: start };
	},
	
	getEditor: function(name) { return this.editors[name]; },
	
	removeEditor: function(name) {
		if (this.editors[name] && this.editors[name].tb) this.editors[name].tb.__FCKToolbarSet = null;
	},
	
	setFckStatus: function(name,state){
		if (state){
			var ieState=true;
			var ffState='on';
		}else{
			var ieState=false;
			var ffState='off';
		}
		if (!this.editors[name]) return '';
		this.editors[name].instance = this.editors[name].instance || FCKeditorAPI.GetInstance(key);
		
		if (!this.editors[name].instance) { return ''; }
		
		try{
			if (DHTML.ie)
				this.editors[name].instance.EditorDocument.body.contentEditable = ieState;
			else
				this.editors[name].instance.EditorDocument.designMode=ffState;
		}
		catch (e){
			return false;
		}
	
		return true;
	},
	
	doingUpdate: function(name,ustatus){
		if (!this.editors[name]) return '';
		this.editors[name].instance = this.editors[name].instance || FCKeditorAPI.GetInstance(key);
		
		if (!this.editors[name].instance) { return ''; }
		
		this.editors[name].ustatus = ustatus;
	},
	
	checkFckStatus: function(name){
		if (!this.editors[name]) return '';
		this.editors[name].instance = this.editors[name].instance || FCKeditorAPI.GetInstance(key);
		
		if (!this.editors[name].instance) { return ''; }
		
		return this.editors[name].ustatus;
	},
	
	disableFCK: function(name,disableToolbarButtons){
		
		if (!this.editors[name]) return '';
		this.editors[name].instance = this.editors[name].instance || FCKeditorAPI.GetInstance(key);
		
		if (!this.editors[name].instance) { return ''; }
		
		try{
			if (DHTML.ie)
				this.editors[name].instance.EditorDocument.body.contentEditable = false;
				//this.editors[name].instance.EditorDocument.body.disabled = true;
			else
				this.editors[name].instance.EditorDocument.designMode="off";
		}
		catch (e){
			return false;
		}
		
		if (disableToolbarButtons !=""){
			var toolbarButtons=disableToolbarButtons.split(",");
			for(var i=0;i<toolbarButtons.length;i++){
				this.editors[name].instance.EditorWindow.parent.FCKToolbarItems.LoadedItems[toolbarButtons[i]].Disable();		
			}
		
			this.editors[name].buttonRefreshStateClone = this.editors[name].instance.EditorWindow.parent.FCKToolbarButton.prototype.RefreshState;
			this.editors[name].specialComboRefreshStateClone = this.editors[name].instance.EditorWindow.parent.FCKToolbarSpecialCombo.prototype.RefreshState;
			this.editors[name].instance.EditorWindow.parent.FCKToolbarButton.prototype.RefreshState = function(){return false;};
			this.editors[name].instance.EditorWindow.parent.FCKToolbarSpecialCombo.prototype.RefreshState = function(){return false;};
		}
		return true;
	},
	
	enableFCK: function(name,disableToolbarButtons){
		if (!this.editors[name]) return '';
		this.editors[name].instance = this.editors[name].instance || FCKeditorAPI.GetInstance(key);
		
		if (!this.editors[name].instance) { return ''; }
		
		try{
			if (DHTML.ie)
				this.editors[name].instance.EditorDocument.body.contentEditable = true;
				//this.editors[name].instance.EditorDocument.body.disabled = false;
			else
				this.editors[name].instance.EditorDocument.designMode="on";
		}
		catch(e){
			return false;
		}	
		
		if (disableToolbarButtons !=""){
			this.editors[name].instance.EditorWindow.parent.FCKToolbarButton.prototype.RefreshState = this.editors[name].buttonRefreshStateClone;
			this.editors[name].instance.EditorWindow.parent.FCKToolbarSpecialCombo.prototype.RefreshState = this.editors[name].specialComboRefreshStateClone;

			var toolbarButtons=disableToolbarButtons.split(",");
			
			for(var i=0;i<toolbarButtons.length;i++){
				try {
					this.editors[name].instance.EditorWindow.parent.FCKToolbarItems.LoadedItems[toolbarButtons[i]].Enable();		
				} catch(e) { }
			}
		}
		this.editors[name].instance.EditorWindow.focus();
		return true;
	},
	
	switchModeFromSource:function(name){
		if (!this.editors[name]) return '';
		this.editors[name].instance = this.editors[name].instance || FCKeditorAPI.GetInstance(key);
		
		if (!this.editors[name].instance) { return ''; }
		
		if (this.editors[name].instance.EditMode==1){
			
			this.editors[name].instance.SwitchEditMode();
		}
		return ;
	},
	
	SetConfig: function(name, config) {
		var key,editor = this.editors[name];
		if (!editor || !editor.instance) return;
		
		for (key in config) editor.instance.Config[key] = config[key];
	},
	
	GetXHTML: function(name) {
		var editor = this.editors[name]
		if (!editor) return '';
		if (editor.cache && editor.cache.active) { return editor.cache.html; }
		
		editor.instance = editor.instance || FCKeditorAPI.GetInstance(key);
		if (!editor.instance) { return editor.start; }
		
		var xHTML = '';
		
		xHTML = editor.instance.GetXHTML();
		
		var host = document.location.href.replace(/(http:\/\/[^\/]+)\/.*/, '$1').replace('//', '\\/\\/');
		eval('var rgxp = /'+host+'/g');
		xHTML = xHTML.replace(rgxp, '');
		
		return xHTML;
	},
	
	SetHTML: function(name, html) {
		var editor = this.editors[name];
		if (!editor) return false;
		if (editor.cache && editor.cache.active) { editor.cache.html = html; return; }

		if (!editor.instance) editor.start = editor.set = html;
		else {
			if (DHTML.ie) {	
				editor.instance.Commands.GetCommand('SelectAll').Execute();	
				editor.instance.Selection.GetSelection().clear();
				editor.instance.Commands.GetCommand('SelectAll').Execute();	
				editor.instance.InsertHtml(html);
			} else {
				editor.instance.SetData(html);
			}
		}
	},
	
	removeCSSMatching: function(name, match) {
		if (!this.editors[name]) return false;
		var head = this.editors[name].instance.EditingArea.Document.getElementsByTagName('head')[0];
		var links = head.getElementsByTagName('link');
		
		for (var i=0,e;(e=links[i]);i++) { 
			if (e.href.indexOf(match) != -1) { 
				head.removeChild(e); 
				i--; 
			}
		}
	},
	
	cacheEditor: function(name) {
		var editor = this.editors[name];
		
		if (!editor||!editor.instance||editor.cache) return;
		
		editor.cache = {
			html: editor.instance.GetXHTML(),
			active: true
		}
		
	},
	
	restoreEditor: function(name) {
		var editor = this.editors[name];
		
		if (!editor||!editor.instance||!editor.cache) return;
		var cache = editor.cache;
		
		editor.cache = null;
		
		this.SetHTML(name, cache.html);
		//if (cache.css) this.updateCSS(name, cache.css.match, cache.css.css);
		editor.cache = null;
	},
	
	setCSS: function(name, css) {
		if (!this.editors[name]) return false;
		var head = this.editors[name].instance.EditingArea.Document.getElementsByTagName('head')[0];
		var sheet = DOM.structure( { t: 'link', e: { rel: 'stylesheet', media: 'all', type: 'text/css', href: css } } );
		
		head.innerHTML += '<link rel="stylesheet" media="all" type="text/css" href="'+css+'" ></link>';
	},
	
	updateCSS: function(name, match, css) {
		var editor = this.editors[name];
		if (!editor) return false;
		if (!editor.instance) return false;
		//if (editor.cache && editor.cache.active) { editor.cache.css = { match: match, css: css }; return; }
		
		var head = editor.instance.EditingArea.Document.getElementsByTagName('head')[0];
		var links = head.getElementsByTagName('link');
		
		for (var i=0,e;(e=links[i]);i++) { 
			if (e.href.indexOf(match) != -1) {
				e.href = css;
				editor.instance.Config.EditorAreaCSS = [e.href];
				return;
			}
		}
	},
	
	
	load: function(type, mess) {
		if (!this.editorCount) { 
			this.editorJS = CC.content.installJS('/js/fckeditor/fckeditor.js', type, mess);
		} else { 
			$DM(100, type, mess);
		}
		this.editorCount++;
	},
	
	unload: function() {
		var ele;
		while (ele=document.body.childNodes[document.body.childNodes.length-1]) {
			if (ele.tagName!='IFRAME') break;
			document.body.removeChild(ele);
		}
	},
	
	completeLoads: function() {
		var key,e;
		for (key in this.editors) {
			e = this.editors[key];
			if (!e.instance) e.instance = FCKeditorAPI.GetInstance(key);
			if (e.instance && e.set) { e.instance.SetHTML(e.set); }
			e.set = null;
		}
	}
}

function DoSomething(editorInstance){
	$FK.doingUpdate(editorInstance.Name,false);
}

function FCKeditor_OnComplete( editorInstance )
{
	//console.log('fckDialog', FCKDialog);
   editorInstance.Events.AttachEvent( 'OnAfterSetHTML', DoSomething ) ;
   $FK.completeLoads();
   $CM('fckEditorMonitor', 'loadedEditor', editorInstance.Name);
}

function reportWin(report)

{
	var report = JSON.stringify(report);
	
	reportWindow = window.open('/_direct/console_log.cfm?rep='+report, 'reportWin');
}
