function getEditorDoc(elemId) {
	return document.getElementById(elemId).contentWindow.document;
}
function initEditor(iframeId) {
	var wysiwygDoc = getEditorDoc(iframeId);
	if (wysiwygDoc.designMode.toLowerCase() != 'on') {
		wysiwygDoc.designMode = 'On';

		// if you don't do this, Firefox won't let you delete or backspace
		// over any text before you insert something
		wysiwygDoc.designMode = 'Off';
		wysiwygDoc.designMode = 'On';

		// this is a FF-only command; IE doesn't use CSS by default
		if (!Controls.detectIE()) 
				wysiwygDoc.execCommand("useCSS", false, true);

		try {
			// sometimes there is an exception in ie here
			wysiwygDoc.body.style.fontFamily = 'sans-serif';
			wysiwygDoc.body.style.fontSize = '9pt';
		} catch (ex) { }
	}
	if (initText)
		setTimeout("setIFrameText('" + iframeId + "')", 250);
}
function setIFrameText(id) {
	getEditorDoc(id).body.innerHTML = initText;
	initText = '';
}
function editorCommand(editorFrameId, name, ui, data) {
	getEditorDoc(editorFrameId).execCommand(name, ui, data);
}
function toggleEditorView(containerId, editorFrameId, sourceAreaId, button) {
	var wysiwygDoc = getEditorDoc(editorFrameId);
	var wDiv = getEditorContainer(containerId, 'wysiwyg');
	var sDiv = getEditorContainer(containerId, 'source');
	var sea = document.getElementById(sourceAreaId);
	if (sDiv.style.display == 'none') {
		wDiv.style.display = 'none';
		sDiv.style.display = 'block';
		button.innerHTML = 'Editor View';
		sea.value = wysiwygDoc.body.innerHTML.replace(/<br>$/, '');
	} else {
		wDiv.style.display = 'block';
		sDiv.style.display = 'none';
		button.innerHTML = 'Source View';
		wysiwygDoc.body.innerHTML = sea.value;
	}
}
function getEditorContainer(ancestorId, which) {
	var wysiwygContainer = null;
	var className = 'commentEditor' + which.charAt(0).toUpperCase() + which.substring(1).toLowerCase() + 'View';
	var kids = document.getElementById(ancestorId).getElementsByTagName('div');
	for (var i = 0; i < kids.length; ++i)
		if (kids[i].className == className) {
			wysiwygContainer = kids[i];
			break;
		}
	return wysiwygContainer;
}
function getCommentText(baseId, commentId) {
	var editorText = '';
	var eccId = baseId + '-container';
	var cwiId = baseId + '-wysiwyg-iframe';
	var csaId = baseId + '-source-area';
	if (commentId) {
		eccId += '-' + commentId;
		cwiId += '-' + commentId;
		csaId += '-' + commentId;
	}
	var wDiv = getEditorContainer(eccId, 'wysiwyg');
	if (wDiv.style.display == 'block')
		editorText = getEditorDoc(cwiId).body.innerHTML;
	else
		editorText = document.getElementById(csaId).value;
	return editorText;
}
function clearCommentText(baseId) {
	getEditorDoc(baseId + '-wysiwyg-iframe').body.innerHTML = '';
	document.getElementById(baseId + '-source-area').value = '';
}
function changeToEdit(baseId, commentId, trailId) {
	var commentDiv;
	if (trailId)
		commentDiv = document.getElementById('trailComment' + commentId);
	else
		commentDiv = document.getElementById('userComment' + commentId);
	if (null != activeTrailEditor) {
		page.alert("But first...", "Please cancel or save your edit before editing another comment.", activeTrailEditor);
		return false;
	}
	var defaultText = document.getElementById('realCommentText' + commentId).innerHTML;
	var parentElement = commentDiv.parentNode;
	var editorDiv = createEditor(baseId, commentId, defaultText, trailId);
	activeTrailEditor = editorDiv;
	replacedDiv = commentDiv;
	parentElement.replaceChild(editorDiv, commentDiv);
}
function cancelEdit(baseId, id) {
	var editorDiv = document.getElementById(baseId + '-container-' + id);
	var parentElement = editorDiv.parentNode;
	parentElement.replaceChild(replacedDiv, editorDiv);
	activeTrailEditor = null;
}
function createEditor(baseId, id, text, trailId) {
	var editorContainerDiv = document.createElement('div');
	editorContainerDiv.id = baseId + '-container-' + id;
	editorContainerDiv.className = 'wysiwygEditor';

	var viewToggleContainer = document.createElement('div');
	viewToggleContainer.className = 'editorViewToggle';
	editorContainerDiv.appendChild(viewToggleContainer);

	var viewToggleLink = document.createElement('a');
	viewToggleLink.href = "#";
	viewToggleLink.id = baseId + "-view-toggle";
	viewToggleLink.onclick = function() { toggleEditorView(baseId + '-container-' + id, baseId + '-wysiwyg-iframe-' + id, baseId + '-source-area-' + id, this); return false; }
	viewToggleLink.innerHTML = 'Source View';
	viewToggleContainer.appendChild(viewToggleLink);

	var wysiwygView = document.createElement('div');
	wysiwygView.className = 'commentEditorWysiwygView';
	wysiwygView.style.display = 'block';
	editorContainerDiv.appendChild(wysiwygView);

	var buttonBar = document.createElement('div');
	buttonBar.className = 'wysiwygButtons';
	wysiwygView.appendChild(buttonBar);

	var boldButtonContainer = document.createElement('div');
	boldButtonContainer.className = 'wysiwygButton';
	buttonBar.appendChild(boldButtonContainer);

	var boldButton = document.createElement('a');
	boldButton.href = "#";
	boldButton.onclick = function() { editorCommand(baseId + '-wysiwyg-iframe-' + id, 'Bold', false, null); return false; }
	boldButtonContainer.appendChild(boldButton);

	var boldButtonImage = document.createElement('img');
	boldButtonImage.src = "/pages/images/editor/editor-bold.png";
	boldButton.appendChild(boldButtonImage);

	var italicButtonContainer = document.createElement('div');
	italicButtonContainer.className = 'wysiwygButton';
	buttonBar.appendChild(italicButtonContainer);

	var italicButton = document.createElement('a');
	italicButton.href = "#";
	italicButton.onclick = function() { editorCommand(baseId + '-wysiwyg-iframe-' + id, 'Italic', false, null); return false; }
	italicButtonContainer.appendChild(italicButton);

	var italicButtonImage = document.createElement('img');
	italicButtonImage.src = "/pages/images/editor/editor-italic.png";
	italicButton.appendChild(italicButtonImage);

	var underlineButtonContainer = document.createElement('div');
	underlineButtonContainer.className = 'wysiwygButton';
	buttonBar.appendChild(underlineButtonContainer);

	var underlineButton = document.createElement('a');
	underlineButton.href = "#";
	underlineButton.onclick = function() { editorCommand(baseId + '-wysiwyg-iframe-' + id, 'Underline', false, null); return false; }
	underlineButtonContainer.appendChild(underlineButton);

	var underlineButtonImage = document.createElement('img');
	underlineButtonImage.src = "/pages/images/editor/editor-underline.png";
	underlineButton.appendChild(underlineButtonImage);

	var createLinkButtonContainer = document.createElement('div');
	createLinkButtonContainer.className = 'wysiwygButton';
	buttonBar.appendChild(createLinkButtonContainer);

	var createLinkButton = document.createElement('a');
	createLinkButton.href = "#";
	createLinkButton.onclick = function() {
		var linkUrl = prompt('Enter link URL:', 'http://');
		editorCommand(baseId + '-wysiwyg-iframe-' + id, 'CreateLink', false, linkUrl);
		return false;
	}
	createLinkButtonContainer.appendChild(createLinkButton);

	var createLinkButtonImage = document.createElement('img');
	createLinkButtonImage.src = "/pages/images/editor/editor-link.png";
	createLinkButton.appendChild(createLinkButtonImage);

	var insertImageButtonContainer = document.createElement('div');
	insertImageButtonContainer.className = 'wysiwygButton';
	buttonBar.appendChild(insertImageButtonContainer);

	var insertImageButton = document.createElement('a');
	insertImageButton.href = "#";
	insertImageButton.onclick = function() {
		var imageUrl = prompt('Enter Image URL:', 'http://');
		editorCommand(baseId + '-wysiwyg-iframe-' + id, 'InsertImage', false, imageUrl);
		return false;
	}
	insertImageButtonContainer.appendChild(insertImageButton);

	var insertImageButtonImage = document.createElement('img');
	insertImageButtonImage.src = "/pages/images/editor/editor-image.png";
	insertImageButton.appendChild(insertImageButtonImage);

	var unorderedListButtonContainer = document.createElement('div');
	unorderedListButtonContainer.className = 'wysiwygButton';
	buttonBar.appendChild(unorderedListButtonContainer);

	var unorderedListButton = document.createElement('a');
	unorderedListButton.href = "#";
	unorderedListButton.onclick = function() { editorCommand(baseId + '-wysiwyg-iframe-' + id, 'InsertUnorderedList', false, null); return false; }
	unorderedListButtonContainer.appendChild(unorderedListButton);

	var unorderedListButtonImage = document.createElement('img');
	unorderedListButtonImage.src = "/pages/images/editor/editor-ul.png";
	unorderedListButton.appendChild(unorderedListButtonImage);

	var undoButtonContainer = document.createElement('div');
	undoButtonContainer.className = 'wysiwygButton';
	buttonBar.appendChild(undoButtonContainer);

	var undoButton = document.createElement('a');
	undoButton.href = "#";
	undoButton.onclick = function() { editorCommand(baseId + '-wysiwyg-iframe-' + id, 'Undo', false, null); return false; return false; }
	undoButtonContainer.appendChild(undoButton);

	var undoButtonImage = document.createElement('img');
	undoButtonImage.src = "/pages/images/editor/editor-undo.png";
	undoButton.appendChild(undoButtonImage);

	var redoButtonContainer = document.createElement('div');
	redoButtonContainer.className = 'wysiwygButton';
	buttonBar.appendChild(redoButtonContainer);

	var redoButton = document.createElement('a');
	redoButton.href = "#";
	redoButton.onclick = function() { editorCommand(baseId + '-wysiwyg-iframe-' + id, 'Redo', false, null); return false; }
	redoButtonContainer.appendChild(redoButton);

	var redoButtonImage = document.createElement('img');
	redoButtonImage.src = "/pages/images/editor/editor-redo.png";
	redoButton.appendChild(redoButtonImage);

	var editorIFrame = document.createElement('iframe');
	editorIFrame.id = baseId + "-wysiwyg-iframe-" + id;
	editorIFrame.height = "50";
	editorIFrame.width = "98%";
	buttonBar.appendChild(editorIFrame);
	initText = text.replace(/'/g, "\'");
	setTimeout("initEditor('" + baseId + "-wysiwyg-iframe-" + id + "')", 250);

	var sourceViewDiv = document.createElement('div');
	sourceViewDiv.className = 'commentEditorSourceView';
	sourceViewDiv.style.display = 'none';
	editorContainerDiv.appendChild(sourceViewDiv);

	var sourceEditorArea = document.createElement('textarea');
	sourceEditorArea.id = baseId + "-source-area-" + id;
	sourceEditorArea.cols = "90";
	sourceEditorArea.rows = "3";
	sourceViewDiv.appendChild(sourceEditorArea);

	var cancelEditButton = document.createElement('input');
	cancelEditButton.type = 'button';
	cancelEditButton.value = 'Cancel';
	cancelEditButton.onclick = function() { cancelEdit(baseId, id); }
	editorContainerDiv.appendChild(cancelEditButton);

	var saveButton = document.createElement('input');
	saveButton.type = 'button';
	saveButton.value = 'Save';
	if (trailId) {
		saveButton.onclick = function() {
			saveTrailComment(baseId, id, trailId);
			activeTrailEditor = null;
			return false;
		};
	} else {
		saveButton.onclick = function() {
			saveUserComment(id);
			activeTrailEditor = null;
			return false;
		};
	}
	editorContainerDiv.appendChild(saveButton);

	return editorContainerDiv;
}
replacedDiv = null;
activeTrailEditor = null;
initText = '';
