// -----------------------------------------------------------------------
// This file is part of AROUNDMe
// 
// Copyright (C) 2003, 2006 Barnraiser
// http://www.barnraiser.org/
// info@barnraiser.org
// 
// This program is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the
// Free Software Foundation; either version 2, or (at your option) any
// later version.
// 
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// General Public License for more details.
// 
// You should have received a copy of the GNU General Public License
// along with program; see the file COPYING. If not, write to the Free
// Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
// 02111-1307, USA.
// -----------------------------------------------------------------------

// Some browser detection
var clientPC  = navigator.userAgent.toLowerCase(); // Get client info
var is_gecko  = ((clientPC.indexOf('gecko')!=-1) && (clientPC.indexOf('spoofer')==-1)
                && (clientPC.indexOf('khtml') == -1) && (clientPC.indexOf('netscape/7.0')==-1));
var is_safari = ((clientPC.indexOf('AppleWebKit')!=-1) && (clientPC.indexOf('spoofer')==-1));
var is_khtml  = (navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled ));
if (clientPC.indexOf('opera')!=-1) {
    var is_opera = true;
    var is_opera_preseven = (window.opera && !document.childNodes);
    var is_opera_seven = (window.opera && document.childNodes);
}



// constructor
function AMEditor(editor, destination) {
	this.editor = editor;
	
	AMEditorSync(document.getElementById(editor).value, destination);
}


function AMEditorSync(src, destination) {
	// this should be in the constructor and we should use DOM to set the body attribute
	// but I could not get it to work - Tom
	var scr_page = "<html><head><style type=\"text/css\"><!--@import url("+template_path_core+"css/aroundme_default.css);--></style></head><body><div id=\"content\">"+src+"</div></body></html>";
	
	document.getElementById(destination).contentWindow.document.open();
	document.getElementById(destination).contentWindow.document.write(scr_page);
	document.getElementById(destination).contentWindow.document.close();

	//var frame = document.getElementById(destination);
	//var frameDocument = frame.contentDocument;
	//var frameBody = frameDocument.getElementById('body');
	
	//document.getElementById(destination).contentWindow.document.body.innerHTML = src;

	// move to where the mouse is
	var txtarea = document.getElementById(destination).contentWindow.document.body;
	txtarea.scrollTop = txtarea.scrollHeight;
	
	var txtarea = document.getElementById(thisEditor.editor);
	txtarea.scrollTop = txtarea.scrollHeight;
}

function insertTag(src,tagOpen,tagClose) {

	var txtarea = document.getElementById(src);
	
	// IE
	if(document.selection  && !is_gecko) {
		var theSelection = document.selection.createRange().text;
		var replaced = true;
		if(!theSelection){
			replaced = false;
		}
		txtarea.focus();
 
		// This has change
		text = theSelection;
		if(theSelection.charAt(theSelection.length - 1) == " "){// exclude ending space char, if any
			theSelection = theSelection.substring(0, theSelection.length - 1);
			r = document.selection.createRange();
			r.text = tagOpen + theSelection + tagClose + " ";
		} else {
			r = document.selection.createRange();
			r.text = tagOpen + theSelection + tagClose;
		}
		if(!replaced){
			r.moveStart('character',-text.length-tagClose.length);
			r.moveEnd('character',-tagClose.length);
		}
		r.select();
	// Mozilla
	} else if(txtarea.selectionStart || txtarea.selectionStart == '0') {
		var replaced = false;
		var startPos = txtarea.selectionStart;
		var endPos   = txtarea.selectionEnd;
		if(endPos - startPos) replaced = true;
		var scrollTop=txtarea.scrollTop;
		var myText = (txtarea.value).substring(startPos, endPos);
		//if(!myText) { myText=sampleText;}
		if(myText.charAt(myText.length - 1) == " "){ // exclude ending space char, if any
			subst = tagOpen + myText.substring(0, (myText.length - 1)) + tagClose + " ";
		} else {
			subst = tagOpen + myText + tagClose;
		}
		
		txtarea.value = txtarea.value.substring(0, startPos) + subst + txtarea.value.substring(endPos, txtarea.value.length);
		txtarea.focus();

		//set new selection
		if(replaced){
			var cPos=startPos+(tagOpen.length+myText.length+tagClose.length);
			txtarea.selectionStart=cPos;
			txtarea.selectionEnd=cPos;
		}else{
			txtarea.selectionStart=startPos+tagOpen.length;
			txtarea.selectionEnd=startPos+tagOpen.length+myText.length;
			txtarea.scrollTop=scrollTop;
		}
	// All others
	} else {
		var copy_alertText=alertText;
		var re1=new RegExp("\\$1","g");
		var re2=new RegExp("\\$2","g");
		copy_alertText=copy_alertText.replace(re1,sampleText);
		copy_alertText=copy_alertText.replace(re2,tagOpen+sampleText+tagClose);
		var text;
		if (sampleText) {
		text=prompt(copy_alertText);
		} else {
		text="";
		}
		if(!text) { text=sampleText;}
		text=tagOpen+text+tagClose;
		//append to the end
		txtarea.value += "\n"+text;
	
		// in Safari this causes scrolling
		if(!is_safari) {
		txtarea.focus();
		}
	}
 	// reposition cursor if possible
	if (txtarea.createTextRange) txtarea.caretPos = document.selection.createRange().duplicate();

	// trim white space
	//txtarea.value = txtarea.value.replace(/^\s+|\s+$/g,'');
	txtarea.value = txtarea.value.replace(/^\s+/,'');
	///^\s+/)
	this.AMEditorSync(txtarea.value, 'wysiwyg_editor');
}

function AMEditorHelp(info, display) {

	if (!info) { info = "";}
	
	document.getElementById('editor_help').innerHTML = info;

	if (display == 1) {
		state = 'block';
	}
	else {
		state = 'none';
	}
	
	if (document.getElementById) {
		document.getElementById('editor_help').style.display = state;
	}
	else {
		if (document.layers) {
			document.editor_help.visibility = state;
		}
		else { // IE 4
			document.all.editor_help.style.display = state;
		}
	}
}

function AmEditorResize (scale) {

	if (scale) {
		wysiwygHeight = wysiwygHeight+20;
	}
	else if (wysiwygHeight>50) {
		wysiwygHeight = wysiwygHeight-20;
	}
	
	document.getElementById('wysiwyg_editor').style.height = wysiwygHeight+"px";
}

function AMEditorMoveToText(src) {
	var src = frames['wysiwyg_editor'];

	text = (src.all) ? src.selection.createRange().text : src.getSelection();
}