//--------------------------------------------------------------------------------
//	Copyright 2010-2011 Sitoo AB
//--------------------------------------------------------------------------------
//--------------------------------------------------------------------------------
//	Wrapper for tiny mce...
//--------------------------------------------------------------------------------
//	Assume jQuery...
//	Assume tinyMCE exists as global var...

if(typeof(g_sd_admin_tinymce_wrapper_strings) != "object") { g_sd_admin_tinymce_wrapper_strings = { s: function(o) { return o; } } }

function SdTinyMceInit(strVarName, objSettings)
{
	objSettings.self = strVarName;
	eval(strVarName + " = objSettings;");

	objSettings.objSdResourcePicker	= null;
	objSettings.objESCF				= new ESCF();

	if(typeof(tinyMCE) != "object") return false;

	{
		//	Add theme...
		tinyMCE.create('tinymce.themes.SitooTheme', {
			init : function(ed, url) {
				var t = this; s = ed.settings; t.editor = ed;

				ed.onInit.add(function() {
					ed.onNodeChange.add(function(ed, cm, n, co, ob) {
						var controls = ed.getParam("theme_sitoo_controls");
						t.AddUpdateHandlers(ed, cm, n, co, ob, controls);
					});
					ed.dom.loadCSS(g_strSdBoUrl + "css/sd_editor_content.css");
					var automataclass = ed.getParam("theme_sitoo_automataclass");
					if(automataclass) $(ed.dom.getRoot()).addClass(automataclass);
				});
				tinyMCE.DOM.loadCSS(g_strSdBoUrl + "css/sd_editor_ui.css");
			}

			, getParent: function(name, ob) 
				{
					var i, parents = ob.parents, func = name;
					if (typeof(name) == 'string') {
						func = function(node) {
							return node.nodeName == name;
						};
					}

					for (i = 0; i < parents.length; i++) {
						if(func(parents[i])) return parents[i];
					}
				}

			, AddUpdateHandlers: function(ed, cm, n, co, ob, controls) 
				{
					if(!controls) return;
					
					var strRet = "";
					for(var i = 0; i < controls.length; ++i) {
						var c = controls[i];
						if(c.type == 'group') {
							strRet += this.AddUpdateHandlers(ed, cm, n, co, ob, c.controls);
						} else {
							if(c.autoupdatestate) {
								var con = cm.get(c.id);
								switch(c.id) {
									case 'image':	{ var p = this.getParent('IMG', ob); con.setActive(!!p && n.className.indexOf('mceItem') == -1); } break;
									case 'link':	{ var p = this.getParent('A', ob); if (!p || !p.name) { con.setDisabled(!p && co); con.setActive(!!p); }} break;
									case 'unlink':	{ var p = this.getParent('A', ob); con.setDisabled(!p); } break;
									case 'undo':	{ con.setDisabled(!ed.undoManager.hasUndo() && !ed.undoManager.typing); } break;
									case 'redo':	{ con.setDisabled(!ed.undoManager.hasRedo()); } break;
									default:		{ con.setActive(ed.queryCommandState(c.id)); } break;
								}
							}
						}
					}
				}

			, renderUI : function(o) 
				{
					var t = this, n = o.targetNode, ic, tb, ed = t.editor, cf = ed.controlManager, sc;

					n = tinyMCE.DOM.insertAfter(tinyMCE.DOM.create('span', {id : ed.id + '_container', 'class' : 'mceEditor ' + ed.settings.skin + 'SitooSkin'}), n);
					n = sc = tinyMCE.DOM.add(n, 'div');

					// Create toolbar
					tb = t.toolbar = cf.createToolbar("tools1");
					
					var strHtml = "";		
					strHtml += '<div>'
					strHtml += '<table class="sd_grid" cellpadding="0" cellspacing="0" border="0">';
					strHtml += '<tbody>';
					strHtml += '<tr>';
					strHtml += '<td class="sd_td sd_tl">&nbsp;</td>';
					strHtml += '<td class="sd_td sd_t"><p>' + ed.getParam("theme_sitoo_title") + '</p></td>';
					strHtml += '<td class="sd_td sd_tr">&nbsp;</td>';
					strHtml += '</tr>';
					strHtml += '<tr>';
					strHtml += '<td class="sd_td sd_c" colspan="3">';
					
					strHtml += '<div class="sd_main">';

					//	Toolbar...
					strHtml += '<div class="mceToolbar" id="' + ed.id + '_mceToolbar">';
					
					var controls = ed.getParam("theme_sitoo_controls");
					strHtml += this.BuildControls(cf, tb, controls);
					
					strHtml += '<div class="mceToolbar_clear"></div>';
					strHtml += '</div>';
					//	End Toolbar...

					strHtml += '<div class="mceLayout" style="clear:both;">'
					strHtml += '	<div class="mceIframeContainer"></div>'
					strHtml += '</div>';

					strHtml += '</div>'

					strHtml += '</td>';
					strHtml += '</tr>';
					strHtml += '<tr>';
					strHtml += '<td class="sd_td sd_bl">&nbsp;</td>';
					strHtml += '<td class="sd_td sd_b">&nbsp;</td>';
					strHtml += '<td class="sd_td sd_br"><a id="' + ed.id + '_resize">&nbsp;</a></td>';
					strHtml += '</tr>';
					strHtml += '</tbody>';
					strHtml += '</table>';
					strHtml += '</div>'

					$(n).html(strHtml);
					
					if(tinyMCE.isIE) {
						$("#" + ed.id + "_mceToolbar")
							.bind("mousedown", function(e) { sitoobookmark = ed.selection.getBookmark(); })
							.bind("mouseup", function(e) { ed.selection.moveToBookmark(sitoobookmark); });
					}

					this.FixResize();
					
					return {
						iframeContainer : $('#' + ed.id + '_container .mceIframeContainer')
						, editorContainer : ed.id + '_container'
						, sizeContainer : null
		//				, sizeContainer : sc
		//				, deltaHeight : -20
					};
				}
			
			, BuildControls: function(cf, tb, controls) 
				{
					var strRet = "";
					for(var i = 0; i < controls.length; ++i) {
						var c = controls[i];
						if(c.type == 'group') {
							strRet += '<div class="sd_group">';
							strRet += this.BuildControls(cf, tb, c.controls);
							strRet += '</div>'
						}
						if(c.type == 'control' || c.type == 'button') {
							a = cf.createControl(c.id);
							if(!a) a = cf.createButton(c.id, { title: c.title, cmd: c.cmd });
							if(typeof(c.shortcut) == 'string' && c.shortcut != '') {
								this.editor.addShortcut(c.shortcut, c.title, c.cmd);
							}

							strRet += a.renderHTML();
							tb.add(a);
						}
					}
					return strRet;	
				}

			, resizeTo : function(w, h, store) 
				{
					var ed = this.editor, e = tinyMCE.DOM.get(ed.id + '_tbl'), ifr = tinyMCE.DOM.get(ed.id + '_ifr');
					// Boundery fix box
					w = Math.max(100, w);
					h = Math.max(100, h);
					w = Math.min(0xFFFF, w);
					h = Math.min(0xFFFF, h);

					// Resize iframe and container
					tinyMCE.DOM.setStyle(e, 'height', '');
					tinyMCE.DOM.setStyle(ifr, 'height', h);

					// Store away the size
					if(store) {
						tinyMCE.util.Cookie.setHash("TinyMCE_" + ed.id + "_size", {
							cw : w,
							ch : h
						});
					}
				}
			
			, FixResize : function() 
				{
					var t = this, ed = t.editor;
					
					ed.onPostRender.add(function() {
						var o = tinyMCE.util.Cookie.getHash("TinyMCE_" + ed.id + "_size");
						if(!!o) {
							t.resizeTo(o.cw, o.ch);
						} else {
							var init_height = ed.getParam("theme_sitoo_initial_height");
							if(!init_height) init_height = 200;
							init_height += 20;
							t.resizeTo(0, init_height, false);
						}

						$('#' + ed.id + '_resize')
							.bind('click', function(e) { e.preventDefault(); })
							.bind('mousedown', function(e) 
								{ 
									var startX, startY, startWidth, startHeight, width, height, ifrElm;

									function resizeOnMove(e) {
										e.preventDefault();
										t.resizeTo(startWidth + (e.screenX - startX), startHeight + (e.screenY - startY));
									};

									function endResize(e) {
										e.preventDefault();
										t.resizeTo(startWidth + (e.screenX - startX), startHeight + (e.screenY - startY), true);
										$(tinyMCE.DOM.doc).add(ed.getDoc()).unbind('mousemove', resizeOnMove).unbind('mouseup', endResize);
									};

									e.preventDefault();

									// Get the current rect size
									startX = e.screenX;
									startY = e.screenY;
									ifrElm = tinyMCE.DOM.get(ed.id + '_ifr');
									startWidth = width = ifrElm.clientWidth;
									startHeight = height = ifrElm.clientHeight;
							
									// Register envent handlers
									$(tinyMCE.DOM.doc).add(ed.getDoc()).bind('mousemove', resizeOnMove).bind('mouseup', endResize);
								});
						});
				}

			, destroy : function() 
				{
					$('#' + this.editor.id + '_resize').unbind('click').unbind('mousedown');
				}

		});

		tinyMCE.ThemeManager.add('sitoo', tinyMCE.themes.SitooTheme);
	}
	
	if(objSettings.arrStyles instanceof Array && objSettings.arrStyles.length > 0) {
		//	Add styles...
		objSettings.sdstyles = "sitoostyles_" + objSettings.self;
		tinyMCE.create('tinymce.plugins.SitooStyles' + objSettings.self + 'Plugin', {
			createControl: function(n, cm) {
				if(n != objSettings.sdstyles) return null;
				var mlb = cm.createListBox(objSettings.sdstyles, {
					title: g_sd_admin_tinymce_wrapper_strings.s("editor_styles_title")
					, onselect: function(v) {
						tinyMCE.activeEditor.undoManager.add();
						tinyMCE.execCommand("mceCleanup", false);
						var objStart	= tinyMCE.activeEditor.selection.getStart();
						var objEnd		= tinyMCE.activeEditor.selection.getEnd();
						if(objStart === objEnd) {
							$(tinyMCE.activeEditor.selection.getNode()).removeClass();
						} else {
							$(objStart).removeClass().nextAll("p, h1, h2, h3, h4, h5, h6").each(function(nIndex) {
								$(this).removeClass();
								if(this === objEnd) {
									return false;
								}
							});
						}
						tinyMCE.activeEditor.formatter.apply(v);
						tinyMCE.activeEditor.undoManager.add();
						tinyMCE.activeEditor.nodeChanged();
					}
				});

				for(var i = 0; i < objSettings.arrStyles.length; ++i) {
					mlb.add(objSettings.arrStyles[i].n, objSettings.arrStyles[i].i, objSettings.arrStyles[i].o);
				}

				// Return the new listbox instance
				return mlb;
			}
		});
		tinyMCE.PluginManager.add(objSettings.sdstyles, tinyMCE.plugins['SitooStyles' + objSettings.self + 'Plugin']);
	}
	
	//<marker>

	objSettings.GetMceSettings = function()
	{
		var objRet = {
			mode: "none"
			, theme: "sitoo"
			, plugins: objSettings.sdstyles
			, editor_selector: objSettings.editor_selector ? objSettings.editor_selector : "sw_mce_editor"
			, theme_sitoo_title: objSettings.editor_title ? objSettings.editor_title : 'Live Edit'
			, theme_sitoo_controls: 
				[
					{ type: 'group', controls: [
							{ type: 'button',		id: 'save',						cmd: 'mceSave',					shortcut: 'ctrl+s',			title: g_sd_admin_tinymce_wrapper_strings.s("editor_btn_save")					}
							, { type: 'button',		id: 'cancel',					cmd: 'mceCancel',				shortcut: '',				title: g_sd_admin_tinymce_wrapper_strings.s("editor_btn_cancel")				}
					]}
					, { type: 'group', controls: [
							{ type: 'button',		id: 'undo',						cmd: 'Undo',					shortcut: 'ctrl+z',			title: g_sd_admin_tinymce_wrapper_strings.s("editor_btn_undo"),					autoupdatestate: true }
							, { type: 'button',		id: 'redo',						cmd: 'Redo',					shortcut: 'ctrl+y',			title: g_sd_admin_tinymce_wrapper_strings.s("editor_btn_redo"),					autoupdatestate: true }
					]}
					, { type: 'group', controls: [
							{ type: 'control',		id: objSettings.sdstyles,	s: {title : g_sd_admin_tinymce_wrapper_strings.s("editor_btn_sdstyles") } }
						]}
					, { type: 'group', controls: [
							{ type: 'button',		id: 'bold',						cmd: 'Bold',					shortcut: 'ctrl+b',			title: g_sd_admin_tinymce_wrapper_strings.s("editor_btn_bold"),					autoupdatestate: true }
							, { type: 'button',		id: 'italic',					cmd: 'Italic',					shortcut: 'ctrl+i',			title: g_sd_admin_tinymce_wrapper_strings.s("editor_btn_italic"),				autoupdatestate: true }
							, { type: 'button',		id: 'underline',				cmd: 'Underline',				shortcut: 'ctrl+u',			title: g_sd_admin_tinymce_wrapper_strings.s("editor_btn_underline"),			autoupdatestate: true }
							, { type: 'button',		id: 'removeformat',				cmd: 'Removeformat',			shortcut: '',				title: g_sd_admin_tinymce_wrapper_strings.s("editor_btn_removeformat")			}
					]}
					, { type: 'group', controls: [
							{ type: 'button',		id: 'insertunorderedlist',		cmd: 'insertunorderedlist',		shortcut: '',				title: g_sd_admin_tinymce_wrapper_strings.s("editor_btn_insertunorderedlist"),	autoupdatestate: true }
							, { type: 'button',		id: 'insertorderedlist',		cmd: 'insertorderedlist',		shortcut: '',				title: g_sd_admin_tinymce_wrapper_strings.s("editor_btn_insertorderedlist"),	autoupdatestate: true }
					]}										
					, { type: 'group', controls: [
							{ type: 'button',		id: 'image',					cmd: 'mceImage',				shortcut: '',				title: g_sd_admin_tinymce_wrapper_strings.s("editor_btn_image"),				autoupdatestate:true }
//							, { type: 'button',		id: 'blocks',					cmd: 'mceBlocks',				shortcut: '',				title: g_sd_admin_tinymce_wrapper_strings.s("editor_btn_blocks")				}
					]}
					, { type: 'group', controls: [
							{ type: 'button',		id: 'link',						cmd: 'mceLink',					shortcut: 'ctrl+l',			title: g_sd_admin_tinymce_wrapper_strings.s("editor_btn_link"),					autoupdatestate: true }
							, { type: 'button',		id: 'unlink',					cmd: 'unlink',					shortcut: '',				title: g_sd_admin_tinymce_wrapper_strings.s("editor_btn_unlink"),				autoupdatestate: true }
					]}										
					, { type: 'group', controls: [
							{ type: 'button',		id: 'charmap',					cmd: 'mceCharmap',				shortcut: '',				title: g_sd_admin_tinymce_wrapper_strings.s("editor_btn_charmap")				}
							, { type: 'button',		id: 'code',						cmd: 'mceCode',					shortcut: '',				title: g_sd_admin_tinymce_wrapper_strings.s("editor_btn_code")					}
					]}										
				]
			, theme_sitoo_initial_height: objSettings.theme_sitoo_initial_height
			, execcommand_callback: objSettings.self + ".CallbackExecCommandHandler"
			, init_instance_callback: objSettings.self + ".CallbackInitInstance"
			, setup: function(ed) 
				{
					ed.addShortcut('ctrl+shift+l', '', 'mceLorem');
					
					ed.onNodeChange.add(function(ed, cm, e) {
						var mlb = cm.get(objSettings.sdstyles);
						var nLength = mlb.getLength();
						for(var i = 0; i < objSettings.arrStyles.length; ++i) {
							tinyMCE.activeEditor.formatter.register(objSettings.arrStyles[i].i, objSettings.arrStyles[i].o);
						}
						for(var i = nLength - 1; i >= 0; --i) {
							var strSelector = mlb.items[i].value;
							if(mlb.items[i].classes == "") {
								strSelector = mlb.items[i].block;
							}
							if(tinyMCE.activeEditor.formatter.match(strSelector)) {
								mlb.selectByIndex(i);
								break;
							}
						}
					});
				}
			, cleanup: true
			, convert_urls: false
			, fix_table_elements: true 
			, extended_valid_elements: 'script[type|src],iframe[src|style|width|height|scrolling|marginwidth|marginheight|frameborder]'
		};

		if(objSettings.theme_sitoo_automataclass) objRet.theme_sitoo_automataclass = objSettings.theme_sitoo_automataclass;

		//	Generic override...
		if(typeof(objSettings.settingsoverride) == "object") {
			for(var i = 0; i < objSettings.settingsoverride.length; ++i) {
				objRet[objSettings.settingsoverride[i].attribute] = objSettings.settingsoverride[i].value;
			}
		}

		return objRet;
	}

	tinyMCE.init(objSettings.GetMceSettings());

	//	Add to onload...
	$(document).ready(function(e) {
		$("." + objSettings.editable_div_class).each(function(index) {
			objSettings.AppendEditButton($(this));
		});
	});

	objSettings.CallbackInitInstance = function(inst)
	{
		$("#" + inst.id + "_ifr").attr("allowtransparency", "allowtransparency");
		if(typeof(objSettings.onload) == "function") {
			objSettings.onload(objSettings, inst.editorId); 
		}
	}

	objSettings.CallbackExecCommandHandler = function(editor_id, elm, command, user_interface, value)
	{
		switch(command) {
			case "mceSave":		{ if(typeof(objSettings.onsave) == "function")					{ objSettings.onsave(objSettings, editor_id); } return true; }
			case "mceCancel":	{ if(typeof(objSettings.oncancel) == "function")				{ objSettings.oncancel(objSettings, editor_id); } return true; }
			case "mceImage":	{ if(typeof(objSettings.SitooImageCallback) == "function")		{ objSettings.SitooImageCallback(tinyMCE.get(editor_id)); } return true; }
			case "mceLink":		{ if(typeof(objSettings.SitooLinkCallback) == "function")		{ objSettings.SitooLinkCallback(tinyMCE.get(editor_id)); } return true; }
			case "mceCharmap":	{ if(typeof(objSettings.SitooCharMapCallback) == "function")	{ objSettings.SitooCharMapCallback(tinyMCE.get(editor_id)); } return true; }
			case "mceBlocks":	{ if(typeof(objSettings.SitooBlocksCallback) == "function")		{ objSettings.SitooBlocksCallback(tinyMCE.get(editor_id)); } return true; }
			case "mceCode":		{ if(typeof(objSettings.SitooCodeCallback) == "function")		{ objSettings.SitooCodeCallback(tinyMCE.get(editor_id)); } return true; }
			case "mceLorem":	{ if(typeof(objSettings.SitooLoremCallback) == "function")		{ objSettings.SitooLoremCallback(tinyMCE.get(editor_id)); } return true; }
		}
		
		return false; // Pass to next handler in chain
	}	

	objSettings.OpenMCE = function(strId)
	{
		var strMceId = strId + "_mce";

		$objDiv = $("#" + strId);
		objSettings.theme_sitoo_initial_height = $objDiv.outerHeight();

		$objDiv.hide()
		.before("<textarea id=\"" + strMceId + "\" style=\"width:100%;\" class=\"" + objSettings.editor_selector + "\"></textarea>");

		tinyMCE.settings = objSettings.GetMceSettings();
		s = '';
		$('link[type="text/css"][href!=""]').each(function(index, elem) { if(s != '') s += ','; s += $(elem).attr('href'); });
		tinyMCE.settings.content_css = s;

		tinyMCE.execCommand("mceAddControl", false, strMceId);
	}

	objSettings.CloseMCE = function(strId, bUpdate)
	{
		var strMceId	= strId + "_mce";
		var ed			= tinyMCE.get(strMceId);
		var $objDiv		= $("#" + strId);

		if(bUpdate) {
			$objDiv.html(ed.getContent());
			objSettings.AppendEditButton($objDiv);
		}

		tinyMCE.execCommand("mceRemoveControl", false, strMceId);
		$("#" + strMceId).remove();
		$objDiv.show();
	}

	objSettings.AppendEditButton = function($obj)
	{
		$obj.addClass("sd_admin_liveedit")
			.prepend('<div class="sd_admin_liveedit_frame_border_top"></div>')
			.prepend('<div class="sd_admin_liveedit_frame_border_bottom"></div>')
			.prepend('<div class="sd_admin_liveedit_frame_border_left"></div>')
			.prepend('<div class="sd_admin_liveedit_frame_border_right"></div>')
			.prepend('<div class="sd_admin_liveedit_button"></div>')
		;
		$("#" + $obj.attr("id") + " .sd_admin_liveedit_button").click(function(e) { objSettings.OpenMCE($obj.attr("id")); });
	}
	
	//	Helpers...
	objSettings.HelperLoadFromServiceByGet = function(strMceId, load_args)
	{
		var strId = strMceId.replace(/\_mce/, "");
		
		var ed = tinyMCE.get(strMceId);
		ed.setProgressState(1); // Show progress

		$objDiv = $("#" + strId);
		var strAttrRel  = $objDiv.attr("rel");
		var strAttrName = $objDiv.attr("name");
		var strUrlFinal = (load_args.service_url + load_args.service_args).replace(/ATTR\_REL/, strAttrRel).replace(/ATTR\_NAME/, strAttrName);

		$.get(strUrlFinal, function(data, strStatus, objHttpXmlRequest) {
			objSettings.objESCF.XMLDoc = objHttpXmlRequest.responseXML;
			var arr = objSettings.objESCF.NodesGetByTagName(load_args.node_container);
			if(arr.length == 1 && arr[0].GetAttribute("status") == "ok") {
				var arr2 = objSettings.objESCF.NodesGetByTagName(load_args.node_data);
				if(arr2.length >= 1) {
					var strData = arr2[0].ChildGetAllText();
					ed.setContent(strData, {format : 'raw'});
					ed.undoManager.clear();
					ed.nodeChanged();
					ed.focus();
					if(tinyMCE.isGecko) {
						ed.getDoc().designMode = 'Off';
						ed.getDoc().designMode = 'On';
					}
				}
			}
			ed.setProgressState(0); // Hide progress
			$("#" + strMceId).mouseup();
		});
	}

	objSettings.HelperSaveToServiceByPost = function(strMceId, save_args)
	{
		var ed = tinyMCE.get(strMceId);
		ed.setProgressState(1); // Show progress

		var strId = strMceId.replace(/\_mce/, "");
		$objDiv = $("#" + strId);
		var strAttrRel = $objDiv.attr("rel");
		var strAttrName = $objDiv.attr("name");
		var objPost = save_args.service_args;
		for(var i = 0; i < save_args.service_argsdyn.length; ++i) {
			var strValue = save_args.service_argsdyn[i].value;
			if(strValue == "ATTR_REL") strValue = strAttrRel;
			if(strValue == "ATTR_NAME") strValue = strAttrName;
			if(strValue == "ATTR_CONTENT") strValue = ed.getContent();
			objPost[save_args.service_argsdyn[i].field] = strValue;
		}

		$.post(save_args.service_url, objPost, function(data, strStatus, objHttpXmlRequest) {
			objSettings.objESCF.XMLDoc = objHttpXmlRequest.responseXML;
			var arr = objSettings.objESCF.NodesGetByTagName(save_args.node_container);
			ed.setProgressState(0); // Hide progress
			objSettings.CloseMCE(strId, true);
		});
	}

	//--------------------------------------------------------------------------------
	// Resourcepicker
	//--------------------------------------------------------------------------------
	objSettings.SitooShowResPicker = function(strResType, strSrc, funcCallback)
	{
		if(objSettings.objSdResourcePicker == null) {
			objSettings.objSdResourcePicker = new SdResourcePicker(objSettings.self + ".objSdResourcePicker");
		}
		objSettings.objSdResourcePicker.Show({ id: objSettings.self + "_rp_" + strResType, packagename: objSettings.packagename, restype: strResType, admin_relpath: objSettings.admin_relpath, src: strSrc }, funcCallback);
	}

	//--------------------------------------------------------------------------------
	// Image
	//--------------------------------------------------------------------------------
	objSettings.SitooImageScale = function(o, oMax)
	{
		var nDelta = o.height / o.width;
		if(o.width > oMax.width || o.height > oMax.height) {
			if(o.width > o.height) {
				o.width		= oMax.width;
				o.height	= Math.round(oMax.width * nDelta);
			} else {
				nDelta = o.width / o.height;
				o.height	= oMax.height;
				o.width		= Math.round(oMax.height * nDelta);
			}
		}
		return o;
	}

	objSettings.SitooImageUpdatePreview = function(strSrc)
	{
		$("#swsitooimage_form").find("[name=\"src\"]").attr("value", strSrc);

		if(strSrc == "") {
			$("#si_preview_image").hide();
			$("#si_preview_image_fallback").show();
			return;
		}
		$("#si_preview_image_fallback").hide();
		$("#si_preview_image").css({ "height": "", "width": ""}).fadeOut(100, function() {
			$(this).bind("load", function(e) {
				var nIconWidth	= 160;
				var nIconHeight	= 120;
				$("#si_preview_image").css({ "margin-top": Math.round((nIconHeight - $("#si_preview_image").height()) / 2) + "px", "margin-left": Math.round((nIconWidth - $("#si_preview_image").width()) / 2) + "px", "width": $("#si_preview_image").width() + "px", "height": $("#si_preview_image").height() + "px" }).fadeIn(100);
				$(this).unbind("load");
			});
			$(this).attr("src", strSrc);
		});
	}

	objSettings.SitooImageHandlePicker = function(o)
	{
		bSaveAlt = true;
		objSettings.SitooImageUpdatePreview(o.src);
		o = objSettings.SitooImageScale(o, { width:400, height:300 });
		$("#swsitooimage_form").find("[name=\"title\"]").attr("value",	o.title		+ "");
		$("#swsitooimage_form").find("[name=\"width\"]").attr("value",	o.width		+ "px");
		$("#swsitooimage_form").find("[name=\"height\"]").attr("value",	o.height	+ "px");
	}

	objSettings.SitooImageCallback = function(ed)
	{
		var strId = "swsitooimage"; 	// Singleton, can only show one form at a time
		var attrs = {
			src:			""
			, title:		""
			, alt:			""
			, width:		""
			, height:		""
			, margintop:	""
			, marginright:	""
			, marginbottom:	""
			, marginleft:	""
			, floatval:		""
		};

		var n = ed.selection.getNode();
		if(n.nodeName == 'IMG') {
			attrs.src			= ed.dom.getAttrib(n,	"src",				attrs.src);
			attrs.title			= ed.dom.getAttrib(n,	"title",			attrs.title);
			attrs.alt			= ed.dom.getAttrib(n,	"alt",				attrs.alt);
			attrs.width			= ed.dom.getStyle(n,	"width",			false);
			attrs.height		= ed.dom.getStyle(n,	"height",			false);
			attrs.margintop		= ed.dom.getStyle(n,	"margin-top",		false);
			attrs.marginright	= ed.dom.getStyle(n,	"margin-right",		false);
			attrs.marginbottom	= ed.dom.getStyle(n,	"margin-bottom",	false);
			attrs.marginleft	= ed.dom.getStyle(n,	"margin-left",		false);
			attrs.floatval		= ed.dom.getStyle(n,	"float",			false);
			
			if(attrs.width == "")	attrs.width		= ed.dom.getAttrib(n,	"width",	attrs.width);
			if(attrs.height == "")	attrs.height	= ed.dom.getAttrib(n,	"height",	attrs.height);
			
			bSaveAlt = attrs.alt != attrs.title;
		}

		var strContent = "";
		strContent += '<div class="sd_c_gen">';
		strContent += '<form action="#" id="' + strId + '_form">';
		strContent += '<table border="0" cellpadding="0" cellspacing="0">';
		strContent += '<tbody>';
		strContent += '<tr><td colspan="4"><div class="si_preview"><img src="#" alt="" id="si_preview_image" /><div id="si_preview_image_fallback">' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.dlgimage_image_fallback) + '</div><div class="sd_hint"></div></div></td></tr>\r\n';
		strContent += '<tr><td colspan="4" class="sd_space">&nbsp;</td></tr>';
		strContent += '<tr><td colspan="4" class="sd_heading"><p>' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_title_src")) + '</p></td></tr>';
		strContent += '<tr><td colspan="4" class="sd_full"><input type="text" name="src" value="" /></td></tr>';
		strContent += '<tr><td colspan="4" class="sd_space">&nbsp;</td></tr>';
		strContent += '<tr><td colspan="4" class="sd_heading"><p>' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_title_title")) + '</p></td></tr>';
		strContent += '<tr><td colspan="4" class="sd_full"><input type="text" name="title" value="" /></td></tr>';
		strContent += '<tr><td colspan="4" class="sd_space">&nbsp;</td></tr>';
		strContent += '<tr><td colspan="4" class="sd_sep">&nbsp;</td></tr>';
		strContent += '<tr><td colspan="4" class="sd_heading"><p>' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_title_size")) + '</p></td></tr>';
		strContent += '<tr>';
		strContent += '	<td class="sd_heading2 sd_c1"><p>' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_title_size_width")) + '</p></td>';
		strContent += '	<td class="sd_input2"><input type="text" name="width" value="" /></td>';
		strContent += '	<td class="sd_heading2"><p>' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_title_size_height")) + '</p></td>';
		strContent += '	<td class="sd_input2 sd_c4"><input type="text" name="height" value="" /></td>';
		strContent += '</tr>';
		strContent += '<tr><td colspan="4" class="sd_space">&nbsp;</td></tr>';
		strContent += '<tr><td colspan="4" class="sd_sep">&nbsp;</td></tr>';
		strContent += '<tr><td colspan="4" class="sd_heading"><p>' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_title_margin")) + '</p></td></tr>';
		strContent += '<tr>';
		strContent += '	<td class="sd_heading2 sd_c1"><p>' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_title_margin_left")) + '</p></td>';
		strContent += '	<td class="sd_input2"><input type="text" name="marginleft" value="" /></td>';
		strContent += '	<td class="sd_heading2"><p>' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_title_margin_right")) + '</p></td>';
		strContent += '	<td class="sd_input2 sd_c4"><input type="text" name="marginright" value="" /></td>';
		strContent += '</tr>';
		strContent += '<tr>';
		strContent += '	<td class="sd_heading2 sd_c1"><p>' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_title_margin_top")) + '</p></td>';
		strContent += '	<td class="sd_input2"><input type="text" name="margintop" value="" /></td>';
		strContent += '	<td class="sd_heading2"><p>' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_title_margin_bottom")) + '</p></td>';
		strContent += '	<td class="sd_input2 sd_c4"><input type="text" name="marginbottom" value="" /></td>';
		strContent += '</tr>';
		strContent += '<tr><td colspan="4" class="sd_space">&nbsp;</td></tr>';
		strContent += '<tr><td colspan="4" class="sd_sep">&nbsp;</td></tr>';
		strContent += '<tr><td colspan="4" class="sd_heading"><p>' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_title_float")) + '</p></td></tr>';
		strContent += '<tr><td colspan="4" class="sd_full"><select name="floatval">';
		strContent += '<option value="">'			+ SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_float_default"))	+ '</option>';
		strContent += '<option value="left">'		+ SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_float_left"))		+ '</option>';
		strContent += '<option value="right">'		+ SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_float_right"))	+ '</option>';
//		strContent += '<option value="inherit">'	+ SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_float_inherit"))	+ '</option>';
		strContent += '<option value="none">'		+ SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_float_none"))		+ '</option>';
		strContent += '</select></td></tr>';
		strContent += '<tr><td colspan="4" class="sd_space">&nbsp;</td></tr>';
		strContent += '<tr><td colspan="4" class="sd_sep">&nbsp;</td></tr>';
		strContent += '<tr><td colspan="4" class="sd_space">&nbsp;</td></tr>';
		strContent += '<tr><td colspan="4" style="text-align:right;"><input type="submit" class="sd_btn" value="' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgbtn_ok")) + '" /><input type="button" class="sd_btn" value="' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgbtn_cancel")) + '" onclick="g_sd_admin_dialog.DialogEnd(\'' + strId + '\');" /></td></tr>';
		strContent += '</tbody>';
		strContent += '</table>';
		strContent += '</form>';
		strContent += '</div>';

		g_sitooplugin_sel_bookmark = ed.selection.getBookmark();
		g_sd_admin_dialog.DialogStart(strId, strContent, 240, 100, g_sd_admin_tinymce_wrapper_strings.s("dlgimage_title"), function(id) { return true; });

		objSettings.SitooImageUpdatePreview(attrs.src);

		$("#" + strId + "_form").find("[name=\"title\"]").attr("value",			attrs.title);
		$("#" + strId + "_form").find("[name=\"width\"]").attr("value",			attrs.width);
		$("#" + strId + "_form").find("[name=\"height\"]").attr("value",		attrs.height);
		$("#" + strId + "_form").find("[name=\"margintop\"]").attr("value",		attrs.margintop);
		$("#" + strId + "_form").find("[name=\"marginright\"]").attr("value",	attrs.marginright);
		$("#" + strId + "_form").find("[name=\"marginbottom\"]").attr("value",	attrs.marginbottom);
		$("#" + strId + "_form").find("[name=\"marginleft\"]").attr("value",	attrs.marginleft);
		$("#" + strId + "_form").find("select[name=\"floatval\"] option[value=\"" + attrs.floatval + "\"]").attr("selected", "selected");
		$("#" + strId + "_form").find("[name=\"src\"]").change(function(e) { objSettings.SitooImageUpdatePreview($(this).attr("value")); });
		$("#" + strId + "_form div.si_preview").click(function(e) { objSettings.SitooShowResPicker("image", $("#" + strId + "_form").find("[name=\"src\"]").attr("value"), objSettings.SitooImageHandlePicker); });
		$("#" + strId + "_form").submit(function(e) {
			// Save data to editor...
			attrs.src			= $(this).find("input[name=\"src\"]").attr("value");
			attrs.title			= $(this).find("input[name=\"title\"]").attr("value");
			if(!bSaveAlt) attrs.alt = attrs.title;
			attrs.width			= $(this).find("input[name=\"width\"]").attr("value");
			attrs.height		= $(this).find("input[name=\"height\"]").attr("value");
			attrs.margintop		= $(this).find("input[name=\"margintop\"]").attr("value");
			attrs.marginright	= $(this).find("input[name=\"marginright\"]").attr("value");
			attrs.marginbottom	= $(this).find("input[name=\"marginbottom\"]").attr("value");
			attrs.marginleft	= $(this).find("input[name=\"marginleft\"]").attr("value");
			attrs.floatval		= $(this).find("select[name=\"floatval\"] option:selected").attr("value");

			ed.selection.moveToBookmark(g_sitooplugin_sel_bookmark);
			var n = ed.selection.getNode();
			if(attrs.src == "") {
				if(n && n.nodeName == 'IMG') {
					ed.dom.remove(n);
					ed.execCommand('mceRepaint');
				}
				g_sd_admin_dialog.DialogEnd(strId);
				return false;
			}

			if(tinymce.isWebKit) {
				ed.getWin().focus();
			}
			
			if(attrs.width != ""		&& attrs.width.search(/[^0-9]/) == -1)			attrs.width			+= "px";
			if(attrs.height != ""		&& attrs.height.search(/[^0-9]/) == -1)			attrs.height		+= "px";
			if(attrs.margintop != ""	&& attrs.margintop.search(/[^0-9]/) == -1)		attrs.margintop		+= "px";
			if(attrs.marginright != ""	&& attrs.marginright.search(/[^0-9]/) == -1)	attrs.marginright	+= "px";
			if(attrs.marginbottom != ""	&& attrs.marginbottom.search(/[^0-9]/) == -1)	attrs.marginbottom	+= "px";
			if(attrs.marginleft != ""	&& attrs.marginleft.search(/[^0-9]/) == -1)		attrs.marginleft	+= "px";

			var strStyle = "";
			strStyle += "width:"			+ attrs.width			+ ";";
			strStyle += "height:"			+ attrs.height			+ ";";
			strStyle += "margin-top:"		+ attrs.margintop		+ ";";
			strStyle += "margin-right:"		+ attrs.marginright		+ ";";
			strStyle += "margin-bottom:"	+ attrs.marginbottom	+ ";";
			strStyle += "margin-left:"		+ attrs.marginleft		+ ";";
			strStyle += "float:"			+ attrs.floatval		+ ";";

			attrs.width = attrs.height = attrs.margintop = attrs.marginright = attrs.marginbottom = attrs.marginleft = attrs.floatval = "";
			attrs.style = strStyle;

			if(n && n.nodeName == "IMG") {
				ed.dom.setAttribs(n, attrs);
			} else {
				ed.execCommand("mceInsertContent", false, "<img id=\"sd_sitooimage_temp\" />", {skip_undo: 1});
				ed.dom.setAttribs("sd_sitooimage_temp", attrs);
				ed.dom.setAttrib("sd_sitooimage_temp", "id", "");
				ed.undoManager.add();
			}

			g_sd_admin_dialog.DialogEnd(strId);
			return false;
		});
	}

	//--------------------------------------------------------------------------------
	// Link
	//--------------------------------------------------------------------------------
	objSettings.SitooLinkHandlePicker = function(o)
	{
		$("#swsitoolink_form").find("[name=\"href\"]").attr("value", o.src);
	}

	objSettings.SitooLinkCallback = function(ed)
	{
		var strId = "swsitoolink"; 	// Singleton, can only show one form at a time
		var attrs = {
			href:			""
			, target:		""
		};

		if(e = ed.dom.getParent(ed.selection.getNode(), 'A')) {
			attrs.href			= ed.dom.getAttrib(e,	'href',				attrs.href);
			attrs.target		= ed.dom.getAttrib(e,	'target',			attrs.target);
		}
		var strContent = "";
		strContent += '<div class="sd_c_gen">';
		strContent += '<form action="#" id="' + strId + '_form">';
		strContent += '<table border="0" cellpadding="0" cellspacing="0">';
		strContent += '<tbody>';
		strContent += '<tr><td colspan="4" class="sd_heading"><p>' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_title_hrefhelper")) + '</p></td></tr>';
		strContent += '<tr><td colspan="4" class="sd_full"><select name="hrefhelper">';
		strContent += '<option value="">' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_hrefhelper_select")) + '</option>';
		for(var i = 0; i < objSettings.arrLinks.length; ++i) {
			strContent += '<option value="' + objSettings.arrLinks[i].href + '">' + objSettings.arrLinks[i].name + '</option>';
		}
		strContent += '<option value="sd_respicker">' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_hrefhelper_respicker")) + '</option>';
		strContent += '</select></td></tr>';
		strContent += '<tr><td colspan="4" class="sd_space">&nbsp;</td></tr>';
		strContent += '<tr><td colspan="4" class="sd_heading"><p>' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlglink_title_href")) + '</p></td></tr>';
		strContent += '<tr><td colspan="4" class="sd_full"><input type="text" name="href" value="" /></td></tr>';
		strContent += '<tr><td colspan="4" class="sd_space">&nbsp;</td></tr>';
		strContent += '<tr><td colspan="4" class="sd_space">&nbsp;</td></tr>';
		strContent += '<tr><td colspan="4" class="sd_full"><input type="checkbox" name="target" id="sl_target" /><label for="sl_target">' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgimage_target_openinnewwin")) + '</label></td></tr>';
		strContent += '<tr><td colspan="4" class="sd_space">&nbsp;</td></tr>';
		strContent += '<tr><td colspan="4" class="sd_sep">&nbsp;</td></tr>';
		strContent += '<tr><td colspan="4" class="sd_space">&nbsp;</td></tr>';
		strContent += '<tr><td colspan="4" style="text-align:right;"><input type="submit" class="sd_btn" value="' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgbtn_ok")) + '" /><input type="button" class="sd_btn" value="' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgbtn_cancel")) + '" onclick="g_sd_admin_dialog.DialogEnd(\'' + strId + '\');" /></td></tr>';
		strContent += '</tbody>';
		strContent += '</table>';
		strContent += '</form>';
		strContent += '</div>';

		g_sitooplugin_sel_bookmark = ed.selection.getBookmark();
		g_sd_admin_dialog.DialogStart(strId, strContent, 240, 100, g_sd_admin_tinymce_wrapper_strings.s("dlglink_title"), function(id) { return true; });

		$("#" + strId + "_form").find("input[name=\"href\"]").attr("value", attrs.href);
		$("#" + strId + "_form").find("input[name=\"target\"]").attr("checked", attrs.target != "" ? "checked" : "");
		$("#" + strId + "_form").find("select[name=\"hrefhelper\"] option[value=\"" + attrs.href + "\"]").attr("selected", "selected");
		$("#" + strId + "_form").find("select[name=\"hrefhelper\"]").change(function(e) {
			var strVal = $(this).find("option:selected").attr("value");
			if(strVal == "") return;
			if(strVal == "sd_respicker") {
				objSettings.SitooShowResPicker("file", $("#" + strId + "_form").find("[name=\"href\"]").attr("value"), objSettings.SitooLinkHandlePicker);
				$("#" + strId + "_form").find("select[name=\"hrefhelper\"] option:selected").attr("selected", "");
			} else {
				$("#" + strId + "_form").find("[name=\"href\"]").attr("value", strVal);
			}
		});

		$("#" + strId + "_form").submit(function(e) {
			// Save data to editor...
			attrs.href		= $(this).find("input[name=\"href\"]").attr("value");
			attrs.target	= $(this).find("input[name=\"target\"]").is(":checked") ? "_blank" : "";

			ed.selection.moveToBookmark(g_sitooplugin_sel_bookmark);
			e = ed.dom.getParent(ed.selection.getNode(), 'A');

			if(attrs.href == "") {
				if(e) {
					ed.execCommand("mceBeginUndoLevel");
					b = ed.selection.getBookmark();
					ed.dom.remove(e, 1);
					ed.selection.moveToBookmark(b);
					ed.execCommand("mceEndUndoLevel");
				}
				g_sd_admin_dialog.DialogEnd(strId);
				return false;
			}

			ed.execCommand("mceBeginUndoLevel");

			if(e == null) {
				ed.getDoc().execCommand("unlink", false, null);
				ed.execCommand("CreateLink", false, "#sitoolink_href_temp#", {skip_undo : 1});

				tinymce.each(ed.dom.select("a"), function(n) {
					if(ed.dom.getAttrib(n, 'href') == '#sitoolink_href_temp#') {
						e = n;
						return false;
					}
				});
			}
			ed.dom.setAttribs(e, attrs);
			if(e && e.childNodes.length != 1 || e.firstChild.nodeName != 'IMG') {
				ed.focus();
				ed.selection.select(e);
				ed.selection.collapse(0);
			}
			ed.execCommand("mceEndUndoLevel");

			g_sd_admin_dialog.DialogEnd(strId);
			return false;
		});
	}

	//--------------------------------------------------------------------------------
	// Insert Char
	//--------------------------------------------------------------------------------
	objSettings.SitooCharMapCallback = function(ed)
	{
		var strId = "swsitoocharmap"; 	// Singleton, can only show one form at a time

		if(!(objSettings.vecCodePoints instanceof Array)) {
			objSettings.vecCodePoints = [];
			for(var i = 0xA1; i <= 0x24F; ++i)		objSettings.vecCodePoints.push(i);
			for(var i = 0x20a0; i <= 0x20b5; ++i)	objSettings.vecCodePoints.push(i);	// Currency
			for(var i = 0x2200; i <= 0x22ff; ++i)	objSettings.vecCodePoints.push(i);	// Mathematical symbols
			for(var i = 0x2190; i <= 0x21ff; ++i)	objSettings.vecCodePoints.push(i);	// Arrows
			for(var i = 0x391; i <= 0x3ff; ++i)		objSettings.vecCodePoints.push(i);
		}

		var strContent	= '';
		strContent += '<div class="sd_c_gen">';
		strContent += '<div id="' + strId + '_div" class="sd_charmap">';
		strContent += '<table border="0" cellpadding="0" cellspacing="1"><tbody><tr>';
		var nNum = 0;
		var nNumCols = 20;
		for(var i = 0; i < objSettings.vecCodePoints.length; ++i) {
			strContent += '<td class="sd_charpick" rel="' + objSettings.vecCodePoints[i] + '" title="&amp;#' + objSettings.vecCodePoints[i] + ';">&#' + objSettings.vecCodePoints[i] + ';</td>';
			if(nNum % nNumCols == nNumCols - 1) strContent += "</tr><tr>";
			++nNum;
		}
		nNum = nNum % nNumCols;
		if(nNum > 0) {
			for(var i = nNum; i < nNumCols; ++i) {
				//	Fill last row...
				strContent += '<td>&nbsp;</td>';
			}
		}
		strContent += '</tr></tbody></table>';
		strContent += '</div>';
		strContent += '</div>';

		g_sitooplugin_sel_bookmark = ed.selection.getBookmark();
		g_sd_admin_dialog.DialogStart(strId, strContent, 440, 100, g_sd_admin_tinymce_wrapper_strings.s("dlgcharmap_title"), function(id) { return true; });

		$("#" + strId + "_div td.sd_charpick").click(function(e) {
			var chr = $(this).attr("rel");

			ed.selection.moveToBookmark(g_sitooplugin_sel_bookmark);
			ed.execCommand('mceInsertContent', false, '&#' + chr + ';');

			g_sd_admin_dialog.DialogEnd(strId);
			return false;
		});
	}

	//--------------------------------------------------------------------------------
	// Insert Block
	//--------------------------------------------------------------------------------
	objSettings.SitooBlocksCallback = function(ed)
	{
		var strId = "swsitooblock"; 	// Singleton, can only show one form at a time

		var strContent	= '';
		strContent += '<div class="sd_c_gen">';
		strContent += '<div id="' + strId + '_div" class="sd_sitooblocks">';
		for(var i = 0; i < objSettings.arrBlocks.length; ++i) {
			strContent += '<div class="sd_blockitem">';
			strContent += '<div class="sd_blockpick" rel="' + i + '" title="' + objSettings.arrBlocks[i].title + '">';
			strContent += '<img src="' + objSettings.arrBlocks[i].iconsrc + '" alt="" />';
			strContent += '</div>';
			strContent += '<p>' + objSettings.arrBlocks[i].title + '</p>';
			strContent += '</div>';
		}
		strContent += '</div>';
		strContent += '</div>';

		g_sitooplugin_sel_bookmark = ed.selection.getBookmark();
		g_sd_admin_dialog.DialogStart(strId, strContent, 416, 100, g_sd_admin_tinymce_wrapper_strings.s("dlgblocks_title"), function(id) { return true; });

		$("#" + strId + "_div div.sd_blockpick").click(function(e) {
			var index = $(this).attr("rel");

			if(index >= 0 && index < objSettings.arrBlocks.length) {
				ed.selection.moveToBookmark(g_sitooplugin_sel_bookmark);
				ed.execCommand('mceInsertContent', false, objSettings.arrBlocks[index].html);
			}

			g_sd_admin_dialog.DialogEnd(strId);
			return false;
		});
	}

	//--------------------------------------------------------------------------------
	// Code
	//--------------------------------------------------------------------------------
	objSettings.SitooCodeCallback = function(ed)
	{
		if(tinymce.isGecko) document.body.spellcheck = false; //ed.getParam("gecko_spellcheck");

		var strId		= "swsitoocode"; 	// Singleton, can only show one form at a time
		var strContent	= '';
		strContent += '<div class="sd_c_gen sd_sitoocode">';
		strContent += '<form action="#" id="' + strId + '_form">';
		strContent += '<textarea name="htmlsource" id="htmlsource" rows="15" cols="100" dir="ltr" wrap="soft" class="mceFocus"></textarea>';
		strContent += '<div class="sd_bottom"><input type="submit" class="sd_btn" value="' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgbtn_save")) + '" /><input type="button" class="sd_btn" value="' + SDQuoteForJs(g_sd_admin_tinymce_wrapper_strings.s("dlgbtn_cancel")) + '" onclick="g_sd_admin_dialog.DialogEnd(\'' + strId + '\');" /></div>';
		strContent += '</form>';
		strContent += '</div>';

		g_sitooplugin_sel_bookmark = ed.selection.getBookmark();
		g_sd_admin_dialog.DialogStart(strId, strContent, 650, 100, g_sd_admin_tinymce_wrapper_strings.s("dlgcode_title"), function(id) { return true; });

		document.getElementById('htmlsource').value = ed.getContent();
		$("#htmlsource").focus();

		$("#" + strId + "_form").submit(function(e) {
			ed.setContent($("#htmlsource").attr("value"), {format : 'raw'});
			g_sd_admin_dialog.DialogEnd(strId);
			return false;
		});
	}

	//--------------------------------------------------------------------------------
	// Code
	//--------------------------------------------------------------------------------
	objSettings.SitooLoremCallback = function(ed)
	{
		objSettings.nLoremIpsumCount = objSettings.nLoremIpsumCount ? objSettings.nLoremIpsumCount + 1 : 3;
		var strLorem = "";
		switch(objSettings.nLoremIpsumCount % 3) {
			case 1:
				strLorem += 'Duis ut gravida dolor. Phasellus convallis, nulla a elementum fermentum, est nisi molestie massa, et congue erat massa accumsan nisi. ';
				strLorem += 'Sed feugiat urna sed massa molestie et semper est bibendum. Suspendisse a erat dui, ac ullamcorper sapien. Etiam sit amet sagittis felis.';
				break;

			case 2:
				strLorem += 'Praesent ac est at arcu porttitor consectetur quis eget est. Phasellus tempus quam velit, ac condimentum libero. Praesent tortor mi, ultrices ';
				strLorem += 'vel ultrices sed, auctor id mauris. Donec aliquam commodo ante sed tristique. Donec dui arcu, tincidunt vel egestas ut, interdum nec neque. ';
				strLorem += 'Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.';
				break;

			default:
				strLorem += 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc non justo eget dui rhoncus sagittis sit amet consequat tellus. ';
				strLorem += 'Fusce pellentesque sapien et massa congue vulputate. Suspendisse fringilla sollicitudin purus non tincidunt.';
				break;
		}
		ed.execCommand('mceInsertContent', false, strLorem);
	}
	return true;
}


