<!--
function VCMS(iURL, iTexts, iStyle, MiscBody) {
	var template_dir = 'templates/';
	var isHTMLMode = false;

	var doc_style = iStyle;
	var doc_url = iURL;
	var str = iTexts;
	var doc_body = '';
	
	var gnewsmode = 0;

	/************************** PRIVATE ******************/

	function ClipBoard() {
		holdtext.innerText = copytext.innerText;
		Copied = holdtext.createTextRange();
		Copied.execCommand("Copy");
	}

	function getEditor() {
		return document.getElementById("vcmsEditArea");
	}
	
	function doFixImagesPaths() {
		/* window.alert('checking 1'); */
		doc = getDocument();

		// window.alert('we have doc as ' + doc.URL);
		
		if(doc == undefined) {
			return;
		}
		var hostname = doc.domain;
		
		// window.alert("document domain is " + hostname);

		var invalidstart = 'http://' + hostname + '/en/';
		for(i=0;i < doc.images.length; i++) {
			cimg = doc.images[i];
			var imglocation = cimg.src;
			var imglocation_start = imglocation.substr(0,invalidstart.length);

			if(imglocation_start == invalidstart) {

				var afterpath = imglocation;
				if(imglocation_start == invalidstart) {
					afterpath = imglocation.substr(invalidstart.length,imglocation.length);
				}

				var doc_url_base = doc_url.substr(0,doc_url.lastIndexOf('/')+1);
				doc.images[i].src = doc_url_base + afterpath;

			}
		}

	}
	
	this.public_doFixImagesPaths = doFixImagesPaths;
	
	
	this.insertImage2 = function () {
		var xdate = new Date();
		var rndnumb = xdate.valueOf();
		var imgwin = window.open('editorutils.html?imgmode=1&dtime=' + rndnumb,"imginsertwin","height=250,width=450,dependent=yes");
		/* try to focus it too */
		doFixImagesPaths();
		imgwin.focus();
	}
	
	this.insertImage3 = function() {
		var img_url = window.prompt('Enter image url as http://myhost.com/myimage.gif','http://');
		if(!img_url) {
			return;
		}
		var img_width = window.prompt('Enter image width or leave emtpy for default','100');
		var img_height = window.prompt('Enter image height or leave emtpy for default','100');
		
		var tblnode = document.createElement("table");
		tblnode.setAttribute("align", "right");
		tblnode.setAttribute("border", "0");
		
		var trnode = document.createElement("tr");
		
		var tdnode = document.createElement("td");
		
		var mynode = document.createElement("img");
		
		/* my_image_name = replaceDoubleSlashes(my_image_name); */
		mynode.setAttribute("src", img_url);
		
		if(img_height != '')
			mynode.setAttribute("height", img_height);
		if(img_width != '')
			mynode.setAttribute("width", img_width);
			
		
		tdnode.appendChild(mynode);
		trnode.appendChild(tdnode);
		tblnode.appendChild(trnode);
		
		insertNode(tblnode);
	}


	function getWindow() {
		return getEditor().contentWindow;
	}

	function getDocument() {
		return getEditor().contentWindow.document;
	}

	function isTextSelected() {
		if(document.all)
			return getDocument().selection.type != "None";
		else {
			if(getWindow().getSelection().rangeCount > 0) {
				var range = getWindow().getSelection().getRangeAt(0);
				if(range.startContainer == range.endContainer && range.startOffset == range.endOffset)
					return false;
				else
					return true;
			} else
				return false;
		}
	}
	
	function doModeCheck() {
		if (isHTMLMode) {
			alert(str.uncheckhtml);
			return false;
		}
		return true;
	}

	function showDialog(file, width, height) {
		if (this.dlg_wnd)
			this.dlg_wnd.close();
		if (window.screen) {
			var left = Math.floor((screen.availWidth-width)/2);
			var top = Math.floor((screen.availHeight-height)/2);
		} else {
			var top = 200;
			var left = 200;
		}

		this.dlg_wnd = window.open(
			file,
			"dlg_wnd",
			"width="+width+",height="+height+",scrollbars=no,dependent=yes,resizable=no,toolbars=no,top=" + top + ",left=" + left + ",screenY=" + top + ",screenX=" + left
		);
	}

	function insertNode(node) {
		if (document.all)
			ie_insertNode(node);
		else
			mozilla_insertNode(node);
	}
	
	this.public_insert_node = insertNode;

	function ie_insertNode(insertNode) {
		var sel = getDocument().selection.createRange();
		var text = sel.htmlText;
		if(typeof(insertNode)=="string") {
			sel.pasteHTML(insertNode);
		} else {
			sel.pasteHTML(insertNode.outerHTML);
		}
		var sel = getDocument().body.createTextRange();
		/*sel.findText(text);
		sel.select();
		*/
		getWindow().focus();
	}

	function mozilla_insertNode(insertNode, range) {
		var win = getWindow();
		var sel = win.getSelection();
		if(!range) {
			range = sel.getRangeAt(0);
			sel.removeAllRanges();
			range.deleteContents();
		}

		// get location of current selection
		var container = range.startContainer;
		var pos = range.startOffset;

		// make a new range for the new selection
		range = document.createRange();

		if (container.nodeType == 3 && insertNode.nodeType == 3) {
			// if we insert text in a textnode, do optimized insertion
			container.insertData(pos, insertNode.nodeValue);

			// put cursor after inserted text
			range.setEnd(container, pos+insertNode.length);
			range.setStart(container, pos+insertNode.length);
		} else {
			var afterNode;
			if (container.nodeType == 3) {
				// when inserting into a textnode
				// we create 2 new textnodes
				// and put the insertNode in between

				var textNode = container;
				container = textNode.parentNode;
				var text = textNode.nodeValue;

				// text before the split
				var textBefore = text.substr(0, pos);
				// text after the split
				var textAfter = text.substr(pos);

				var beforeNode = document.createTextNode(textBefore);
				var afterNode = document.createTextNode(textAfter);

				// insert the 3 new nodes before the old one
				container.insertBefore(afterNode, textNode);
				container.insertBefore(insertNode, afterNode);
				container.insertBefore(beforeNode, insertNode);

				// remove the old node
				container.removeChild(textNode);

				range.setEnd(afterNode, 0);
				range.setStart(afterNode, 0);
			} else {
				// else simply insert the node
				afterNode = container.childNodes[pos];
				// alert(container + ' ' + container.childNodes.length + ' ' + afterNode);
				x = container.insertBefore(insertNode, afterNode);
				//alert(x.childNodes.length);
				range.selectNode(x);
				// range.setEnd(container, pos + 1);
				// range.setStart(container, pos);
				// range.setEnd(container, pos + insertNode.htmlText.length);
			}
		}
		sel.addRange(range);
	}

	// insertImage()
	this.insertImage = function () {
		showDialog('image.html', 680, 500);
	}
	this.doInsertImage = function (path) {
		if (path != null)
				cmdExec("InsertImage", path);
	}

	// insertDocument() & insertLink()
	this.insertDocument = function () {
		if(getDocument().queryCommandEnabled('CreateLink') && isTextSelected())
			showDialog('document.html', 680, 500);
		else
			alert(str.selectfirst);
	}
	this.insertLink = function () {
		if(getDocument().queryCommandEnabled('CreateLink') && isTextSelected())
			showDialog('addlink.html', 580, 300);
		else
			alert(str.selectfirst);
	}
	this.doInsertDocument = function (path) {
		if (path != null)
				cmdExec("CreateLink", path);
	}

	this.addModule = function () {
		showDialog('sel_plugin.php', function () {});
	}

	this.ImageFromDir = function () {
		showDialog('sel_image_dir.php', function (attr) {
			cmdExec('InsertImage', attr);
		});
	}

	this.DocFromDir = function () {
		showDialog('sel_doc_dir.php', function (attr) {
			cmdExec('CreateLink', attr);
		});
	}

	this.insertLocalImage = function () {
		showDialog('sel_image_local.php', function (attr) {
			cmdExec("InsertImage", attr);
		});
	}

	this.innerLinkLocal = function () {
		showDialog('sel_innerlink_local.php', function (attr) {
			cmdExec("CreateLink", attr);
		});
	}

	function GetAnchorName() {
		if (isTextSelected()) {
			showDialog('add_anchor.php', function (arr) {
				if (isTextSelected()) {
					var sel = getDocument().selection.createRange();
					var text = sel.htmlText;
					sel.pasteHTML(arr + text);
					var sel = getDocument().body.createTextRange();
					sel.findText(text);
					sel.select();
					getWindow().focus();
				}
			});
		} else {
			alert(str.seltextforanchor);
		}
	}

	// public function innerLinkLocalAll
	this.innerLinkLocalAll = function () {
		showDialog('sel_innerlink_local_all.php', function (attr) {
			cmdExec("CreateLink", attr);
		});
	}

	// public function innerDocLocal()
	this.innerDocLocal = function () {
		showDialog('sel_doc_local.php', function (attr) {
			cmdExec("CreateLink", attr);
		});
	}

	this.changeCSS = function (css_name) {
		/* var el_type = null; */
		var el_type = 'span';
		if(css_name.length > 0 && css_name.indexOf('.') > 0 ) {
			var tmp = css_name.split('.');
			el_type = tmp[0];
			css_name = tmp[1];
		}
		if (!document.all) {
			if(el_type) {
				var sel = getWindow().getSelection();
				if (sel != null && sel != "") {
					var range = sel.getRangeAt(0);
					sel.removeAllRanges();
					var css = document.createElement(el_type);
					css.setAttribute("class", css_name);
					css.appendChild(range.extractContents());
					range.insertNode(css);
					range.selectNode(css);
					sel.addRange(range);
				} else if(sel != null && el_type == 'div') {
					var range = sel.getRangeAt(0);
					var cont = range.startContainer;
					var node;

					if(cont.nodeName.toLowerCase() == 'body')
						cont = cont.firstChild;
					if(cont.nodeName.toLowerCase() == 'div')
						node = cont;
					else if(cont.parentNode.nodeName.toLowerCase() == 'div')
						node = cont.parentNode;
					else {
						node = document.createElement('div');
						node.appendChild(cont.cloneNode(true));
						cont.parentNode.insertBefore(node, cont)
						cont.parentNode.removeChild(cont);
					}
					node.setAttribute('class', css_name);
				} else
					alert(str.selectfirst);
			} else {
				var range = (sel = getWindow().getSelection()).getRangeAt(0);
				sel.removeAllRanges();
				var contents = range.extractContents();
				var container = range.startContainer;
				var pos = range.startOffset;
				stripNodes(contents, new Array('span', 'div', 'b', 'i', 'u'));
				contents.normalize();
				var last_child = contents.lastChild;
				range.insertNode(contents);
				range = document.createRange();
				range.setStart(container, pos);
				range.setEndAfter(last_child);
				sel.addRange(range);
			}
		} else {
			if (isTextSelected()) {
				var sel = getDocument().selection.createRange();
				var text = sel.htmlText;
				text = text.replace(/(<\/span>)+/gi, "");
				text = text.replace(/(<span[^>]+>)+/gi, "");
				text = text.replace(/<td/gi, '<td class="' + css_name + '"');
				if(el_type) {
					sel.pasteHTML('<' + el_type + ' class="'+ css_name +'">' + text + '</' + el_type + '>');
				} else
					sel.pasteHTML(text);
				var all_text = getDocument().body.innerHTML;
				all_text = all_text.replace(/(<\/span>)+/gi, "</span>");
				all_text = all_text.replace(/(<span[^>]+>)+/gi, "$1");
				getDocument().body.innerHTML = all_text;
				var sel = getDocument().body.createTextRange();
				/*window.alert('text is "'+ text + '"');*/
				sel.findText(text);
				/*
				sel.select();
				
				getWindow().focus();
				*/
			}
		}
	}

	/*
	this.createLink = function () {
		if (isTextSelected()) {
			showDialog('sel_link.php', function (arr) {
				if (isTextSelected()) {
					var sel = getDocument().selection.createRange();
					var text = sel.htmlText;
					text = text.replace(/(<\/span>)+/gi, "");
					text = text.replace(/(<span[^>]+>)+/gi, "");
					text = text.replace(/(<\/a>)+/gi, "");
					text = text.replace(/(<a[^>]+>)+/gi, "");
					text = text.replace(/(<\/A>)+/gi, "");
					text = text.replace(/(<A[^>]+>)+/gi, "");
					sel.pasteHTML('<a ' + arr + '>' + text + '</a>');
					var all_text = getDocument().body.innerHTML;
					all_text = all_text.replace(/(<\/span>)+/gi, "</span>");
					all_text = all_text.replace(/(<span[^>]+>)+/gi, "$1");
					getDocument().body.innerHTML = all_text;
					var sel = getDocument().body.createTextRange();
					sel.findText(text);
					sel.select();
					getWindow().focus();
				}
			});
		} else {
			alert(str.selectfirst);
		}
	} */
	
	this.createLink = function() {
		/*window.alert('hallooo');*/
		if (isTextSelected())
			{
				var url = window.prompt('Enter link url as http://myhost.com or myfile.html','http://');
				if(url && url.length > 0)  {
					url = url.replace(' ','');
					if(url.indexOf('/en/') == 0) {
						url = url.replace('/en/','/enpage/');
					}
				}
				if (document.all) {
					var sel = getDocument().selection.createRange();
					var text = sel.htmlText;
					text = text.replace(/(<\/span>)+/gi, "");
					text = text.replace(/(<span[^>]+>)+/gi, "");
					text = text.replace(/(<\/a>)+/gi, "");
					text = text.replace(/(<a[^>]+>)+/gi, "");
					text = text.replace(/(<\/A>)+/gi, "");
					text = text.replace(/(<A[^>]+>)+/gi, "");
					sel.pasteHTML('<a href="' + url + '" class="link">' + text + '</a>');
					var all_text = getDocument().body.innerHTML;
					all_text = all_text.replace(/(<\/span>)+/gi, "</span>");
					all_text = all_text.replace(/(<span[^>]+>)+/gi, "$1");
					getDocument().body.innerHTML = all_text;
					var sel = getDocument().body.createTextRange();
					sel.findText(text);
					sel.select();
				} else {
					link = document.createElement("a");
					link.setAttribute("href", url);
					link.setAttribute("class", 'link');
					sel = getWindow().getSelection();
					link.appendChild(document.createTextNode(sel));
					mozilla_insertNode(link);
				}
				getWindow().focus();
		} else {
			alert('No text selected for link creation');
		}
	}

	this.createLink2 = function() {
		/*window.alert('hallooo');*/
		if (isTextSelected())
			{
				var url = window.prompt('Enter link url as http://myhost.com or myfile.html','http://');
				if(url && url.length > 0)  {
					url = url.replace(' ','');
					if(url.indexOf('/en/') == 0) {
						url = url.replace('/en/','/enpage/');

						/*
						if(url.indexOf('?') > 0) {
							url = url + '&force_en_path=1';
						} else {
							url = url + '?force_en_path=1';
						}
						*/
						
					}
				}
				if (document.all) {
					var sel = getDocument().selection.createRange();
					var text = sel.htmlText;
					text = text.replace(/(<\/span>)+/gi, "");
					text = text.replace(/(<span[^>]+>)+/gi, "");
					text = text.replace(/(<\/a>)+/gi, "");
					text = text.replace(/(<a[^>]+>)+/gi, "");
					text = text.replace(/(<\/A>)+/gi, "");
					text = text.replace(/(<A[^>]+>)+/gi, "");
					sel.pasteHTML('<a href="' + url + '" target= "_top" class="link">' + text + '</a>');
					var all_text = getDocument().body.innerHTML;
					all_text = all_text.replace(/(<\/span>)+/gi, "</span>");
					all_text = all_text.replace(/(<span[^>]+>)+/gi, "$1");
					getDocument().body.innerHTML = all_text;
					var sel = getDocument().body.createTextRange();
					sel.findText(text);
					sel.select();
				} else {
					link = document.createElement("a");
					link.setAttribute("href", url);
					link.setAttribute("class", 'link');
					link.setAttribute("target", '_top');
					sel = getWindow().getSelection();
					link.appendChild(document.createTextNode(sel));
					mozilla_insertNode(link);
				}
				getWindow().focus();
		} else {
			alert('No text selected for link creation');
		}
	}

	this.createLinkToAnchor = function () {
		if (isTextSelected()) {
			showDialog('sel_anchor_link.php', function arr() {
				if (isTextSelected()) {
					var sel = getDocument().selection.createRange();
					var text = sel.htmlText;
					text = text.replace(/(<\/span>)+/gi, "");
					text = text.replace(/(<span[^>]+>)+/gi, "");
					text = text.replace(/(<\/a>)+/gi, "");
					text = text.replace(/(<a[^>]+>)+/gi, "");
					text = text.replace(/(<\/A>)+/gi, "");
					text = text.replace(/(<A[^>]+>)+/gi, "");
					sel.pasteHTML('<a ' + arr + '>'+ text + '</a>');
					var all_text = getDocument().body.innerHTML;
					all_text = all_text.replace(/(<\/span>)+/gi, "</span>");
					all_text = all_text.replace(/(<span[^>]+>)+/gi, "$1");
					getDocument().body.innerHTML = all_text;
					var sel = getDocument().body.createTextRange();
					sel.findText(text);
					sel.select();
					getWindow().focus();
				}
			});
		} else {
			alert('Valige tekst mis suunata ankrule');
		}
	}

	function hasGoodChildNodes(node) {
		var child;
		for(var i = 0; i < node.childNodes.length; i++) {
			child = node.childNodes[i];
			if(!(child.nodeName == 'BR' || child.nodeType == 3 && child.nodeValue.length == 0))
				return true;
		}
		return false;
	}

	function getBlockAncestor(node) {
		if(node.nodeName == 'DIV' || node.nodeName == 'P')
			return node;
		if(node.parentNode.nodeName == 'DIV' || node.parentNode.nodeName == 'P')
			return node.parentNode;
		return null;
	}

	function splitNode() {
		var selection = getWindow().getSelection();
		if(!selection)
			return false;
		var range = selection.getRangeAt(0);
		var textnode = range.startContainer;
		var start = range.startOffset;
		var pdiv = getBlockAncestor(textnode);
		if(!pdiv)
			return false;
		if(pdiv == textnode) { // somehow we are given start that specifies nodeOffset in pdiv
			textnode = pdiv.childNodes[start];
			start = 0;
		}

		selection.removeAllRanges();
		range.deleteContents();

		// we are at the start of div element - create new before it
		if(textnode == pdiv.firstChild && start == 0) {
			var newdiv = pdiv.cloneNode(false);
			newdiv.appendChild(document.createTextNode(''));
			pdiv.parentNode.insertBefore(newdiv, pdiv);

			range = document.createRange();
			range.setStart(newdiv.firstChild, 0);
			range.setEnd(newdiv.firstChild, 0);
			selection.addRange(range);
			return true;
		}

		var half2 = document.createTextNode(textnode.nodeValue.substr(start, textnode.nodeValue.length - start));
		textnode.nodeValue = textnode.nodeValue.substr(0, start);

		var newdiv = pdiv.cloneNode(false);
		newdiv.appendChild(half2);
		var ptr = textnode.nextSibling; var old_ptr;
		while(ptr) {
			newdiv.appendChild(ptr.cloneNode(true));
			old_ptr = ptr; ptr = ptr.nextSibling;
			pdiv.removeChild(old_ptr);
		}

		// put new div after original div
		if(pdiv.nextSibling)
			pdiv.parentNode.insertBefore(newdiv, pdiv.nextSibling);
		else
			pdiv.parentNode.appendChild(newdiv);

		// normalize pdiv content and remove whole pdiv if empty
		pdiv.normalize();
		//if(!hasGoodChildNodes(pdiv))
			//pdiv.parentNode.removeChild(pdiv);

		// put selection back to right place
		range = document.createRange();
		range.setStart(half2, 0);
		range.setEnd(half2, 0);
		selection.addRange(range);
		return true;
	}

	function mozillaKeyPress(evt) {
		checkEditor();
		if(!isHTMLMode && !evt.altKey && !evt.metaKey && !evt.ctrlKey && !evt.shiftKey && evt.keyCode == 13) {
			if(splitNode())
				evt.preventDefault();
			return;
		}

		if(isHTMLMode && !evt.altKey && !evt.metaKey && !evt.ctrlKey && evt.keyCode == 9) {
			var old = getWindow().getSelection().getRangeAt(0).startContainer;
			var img = document.createElement('img');
			img.addEventListener("mousedown", function(evt) { evt.preventDefault(); }, true);
			img.setAttribute('style', 'width: 20px; height: 8px');
			img.setAttribute('src', '/admin/et/img.html?src=s.gif');
			insertNode(img);
			evt.preventDefault();
			return;
		}
		if(evt.altKey || evt.metaKey)
			return;
		if(evt.ctrlKey) {
			switch(evt.charCode) {
				case 97: // ctrl+a
					cmdExec("selectall");
					break;
				case 98: // ctrl+b
					cmdExec("bold");
					break;
				case 66: // ctrl+B
					cmdExec("subscript");
					break;
				case 80: // ctrl+P
					cmdExec("superscript");
					break;
				case 105: // ctrl+i
					cmdExec("italic");
					break;
				case 117: // ctrl+u
					cmdExec("underline");
					break;
				case 108: // ctrl+l
					cmdExec("justifyleft");
					break;
				case 101: // ctrl+e
					cmdExec("justifycenter");
					break;
				case 114: // ctrl+r
					cmdExec("justifyright");
					break;
				case 106: // ctrl+j
					cmdExec("justifyfull");
					break;
				case 115: // ctrl+s
					saveDocument();
					break;
				default:
					return;
			}
			evt.preventDefault();
		}
	}

	function canHaveChildren(node) {
		switch( node.tagName ){
			case "AREA":	case "BASE":	case "BASEFONT":
			case "BR":		case "COL":		case "FRAME":
			case "HR":		case "IMG":		case "INPUT":
			case "ISINDEX":	case "LINK":	case "META":
			case "PARAM":
				return false;
		}
		return true;
	}

	function getElementHTML(node, include) {
		if(document.all) {
			/* window.alert('fa1'); */
			return node.innerHTML;
			/* window.alert('fa2'); */
		}
		var nodes = new Array();
		var str = "";

		if(include)
			node = node;
		else
			node = node.firstChild;
		start:
		while(node) {
			var node_name = node.nodeName.toLowerCase();
			if(node_name.indexOf('/') >= 0)
				node_name = node_name.replace(/\//, '');
			switch (node.nodeType) {
				case 1: // ELEMENT_NODE
					if(node_name == 'font' || node_name == 'tbody') {
						nodes.push(node);
						nodes.push(null);
						node = node.firstChild;
						continue start;
					}

					var tagstr = '<' + node_name;
					for (var i = 0; i < node.attributes.length; i++) {
						var attr = node.attributes.item(i);
						if(attr.nodeName == '_moz_editor_bogus_node') {
							tagstr = '';
							break;
						}
						if((attr.nodeValue != null || document.all && attr.nodeName == 'style' && node.style.cssText.length > 0) && attr.nodeValue != '' && attr.nodeName != 'contentEditable' && !(attr.nodeName == 'type' && attr.nodeValue == '_moz') && !((attr.nodeName == 'colSpan' || attr.nodeName == 'rowSpan') && attr.nodeValue == 1))
							tagstr += ' ' + attr.nodeName.toLowerCase() + '="' + (document.all && attr.nodeName == 'style' ? node.style.cssText.toLowerCase() : attr.nodeValue) + '"';
					}
					if(!tagstr)
						break;
					str += tagstr;

					if(node.childNodes.length == 0 || !canHaveChildren(node))
						str += ' />';
					else {
						str += '>';
						nodes.push(node);
						node = node.firstChild;
						continue start;
					}
					break;
				case 3: //TEXT_NODE
					if(node.nodeValue.length > 0)
						str += node.nodeValue.replace(/\&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
					break;
				case 5: // ENTITY_REFERENCE_NODE
					str += '&' + node_name + ';'; break;
				case 8: // COMMENT_NODE
					str += '<!-- ' + node.nodeValue + ' -->'; break;
			}
			while(true) {
				node = node.nextSibling;
				if(!node) {
					if(node = nodes.pop())
						str += '</' + node.nodeName.toLowerCase() + '>';
					else if(!(node = nodes.pop()))
						break;
				} else
					break;
			}
		}
		return str;
	}
	this.getElementHTML = getElementHTML;
	
	function getElementHTML2() {
		return getElementHTML(getDocument().body);
	}
	this.getElementHTML2 = getElementHTML2;
	
	

	function stripNodes(node, strip_name_list) {
		var nodes = new Array();
		node = node.firstChild;
		while(node) {
			var node_name = node.nodeName.toLowerCase();
			var strip_this = false
			for(var i = 0; i < strip_name_list.length; i++)
				if(node_name == strip_name_list[i]) {
					strip_this = true;
					break;
				}
			if(strip_this) {
				for(var i = 0; i < node.childNodes.length; i++) {
					node.parentNode.insertBefore(node.childNodes[i].cloneNode(true), node);
				}
				var tmp_node = node;
				node = node.nextSibling;
				if(!node)
					node = nodes.pop();
				tmp_node.parentNode.removeChild(tmp_node);
			} else if (node.childNodes.length > 0) {
				if(node.nextSibling)
					nodes.push(node.nextSibling);
				node = node.firstChild;
			} else {
				node = node.nextSibling;
				if(!node)
					node = nodes.pop();
			}
		}
	}

	function checkEditor() {
		if (getEditor() && getDocument().designMode != 'on') {
			getDocument().designMode = "On";
			isHTMLMode = false;
		}
	}

	function createDocument() {
		var doc = getDocument();
		if(!doc) {
			setTimeout('vcms.createDocument()', 10);
			return;
		}
		if(doc.designMode == 'off')
			doc.designMode = 'On';
		if (document.all) {
			doc.designMode = 'On';
		}
		doc.open('text/html', 'replace');
		/* html  = '<html>';
		html += '<head>';
		html += '<style>';
		html += '.vcmsCode, .vcmsCode * { font-family: andale mono, courier new; font-size: 10px }';
		html += '.vcmsEdit div, .vcmsEdit li, .vcmsEdit p { -moz-outline: 1px solid #EAEAEA; }';
		html += '</style>';
		html += '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
		html += '</head>';
		html += '<link href="' + doc_style + '" rel="stylesheet" type="text/css">';
		html += '<body class="vcmsContent vcmsEdit" topmargin="4" leftmargin="4" marginwidth="4" marginheight="4">' + doc_body + '</body>';
		html += '</html>';
		*/
		// var copita = new String(doc_body);
		if(!doc_body) {
			doc_body="<html>tekst</html>";
		}
		var doc_body2 = doc_body.replace(/<meta.*?charset\=utf8.*?>/gi,'');
		//window.alert('doc body is ' + doc_body2);
		doc.write(doc_body2);
		doc.close();
		getWindow().focus();
		if (!document.all) {
			doc.addEventListener('keypress', mozillaKeyPress, true);
			//addEventListener('click', checkEditor, true);
		} else {
			doc.designMode = 'On';
		}
		doFixImagesPaths();
	}
	this.createDocument = createDocument;

	function tabReplacer(str) {
		return str.replace(/\t/g, '<img src="/admin/et/img.html?src=s.gif" style="width: 20px; height: 13px" align="top"/>');
	}
	/********************* PUBLIC *****************/

	// public function cmdExec()
	function cmdExec(cmd, opt) {
		if (doModeCheck()) {
			if(getDocument().queryCommandEnabled(cmd))
				getDocument().execCommand(cmd, false, opt);
			getWindow().focus();
		}
	}
	this.cmdExec = cmdExec;

	// public function setMode()
	this.setMode = function (bMode) {
		var sTmp;
		checkEditor();
		isHTMLMode = bMode;
		//window.alert('fa1');
		getDocument().body.style.display = 'none';
		//window.alert('fa2');
		if (isHTMLMode){
			//window.alert('fa3');
			if (document.all) {
				//window.alert('fa4');
				getDocument().body.innerText =  getElementHTML(getDocument().body);
				/* var o1 = getDocument();
				window.alert( 'e mmm ' + o1 + ' gaga ');
				var html = o1.body.innerHTML;
				var o2 = getDocument();
				window.alert( 'e mmm ' + o1 + ' gaga ' + o2 );
				o2.body.innerText =  html;
				*/
				//window.alert('fa5');
			} else {
				var html = document.createTextNode(getElementHTML(getDocument().body));
				getDocument().body.innerHTML = '';
				getDocument().body.appendChild(html);
				getDocument().body.innerHTML = getElementHTML(getDocument().body).replace(/(^|\n)\t+/g, tabReplacer).replace(/\n/g, '<br />');

				var ptr = getDocument().body.firstChild;
				while(ptr) {
					if(ptr.nodeName == 'IMG')
						ptr.addEventListener('mousedown', function(evt) { evt.preventDefault(); }, true);
					ptr = ptr.nextSibling;
				}
			}
			getDocument().body.className = 'vcmsCode';
			getDocument().body.style.display = '';
		} else {
			if (document.all) {
				getDocument().body.innerHTML = getDocument().body.innerText;
			} else {
				var html = getElementHTML(getDocument().body).replace(/[\f\r\n]+/g, '').replace(/<img[^>]+>/g, "\t").replace(/<[^>]+>/g, "\n").replace(/[\xA0 \t]+\n/g, "\n");
				doc_body = html.replace(/\&gt;/g, '>').replace(/\&lt;/g, '<').replace(/\&amp;/g, '&');
				createDocument();
			}
			getDocument().body.className = 'vcmsContent vcmsEdit';
			getDocument().body.style.display = '';
		}
		getWindow().focus();
	}

	function saveDocument() {
		if (doModeCheck()) {
			
			document.getElementById("vcmsSubmitter").body.value = getElementHTML(getDocument().body);
			document.getElementById("vcmsSubmitter").submit();
		}
	}
	this.saveDocument = saveDocument;
	
	function cancelDocument() {
		if (doModeCheck()) {
			document.getElementById("vcmsSubmitter").savefile.value = 2;
			document.getElementById("vcmsSubmitter").body.value = getElementHTML(getDocument().body);
			document.getElementById("vcmsSubmitter").submit();
		}
	}
	this.cancelDocument = cancelDocument;

	var editor_prepared = false;
	
	function setGNewsModeData(data) {
		gnewsmode = 1;
		doc_body = data;
	}
	
	this.setGNewsModeData = setGNewsModeData;

	this.startEditor = function() {
		if(editor_prepared) return;
		editor_prepared = true;

		var doc = getDocument();
		// ApplyRangePatch(doc);
		// createDocument('Loading...');

		var data;
		if(gnewsmode != 1) {
			if(document.all) {
				try {
					data = new ActiveXObject("Msxml2.XMLHTTP");
				} catch(e) {
					data = new ActiveXObject("Microsoft.XMLHTTP");
				}
				data.Open('GET', doc_url, false);
				data.Send(null);
			} else {
				data = new XMLHttpRequest();
				data.open('GET', doc_url, false);
				data.send(null);
			}
			doc_body = data.responseText;
		}
		// createDocument();
		setTimeout('vcms.createDocument()', 10);

		// setTimeout('vcms.checkEditor();', 2000);
	}
}
// -->

