//this is a black box JS file not intended for modification. its purpose is to segregate some gnarly code
//that supports the textEditor widget. the user-friendly, easily customized interface to the textEditor widget 
//uses the functions getTextEditorHTML() and getTextEditorValue()


// =========================================================== EDIT SPACE CONSTRUCTOR FUNCTION

function writeRichText(nam,inTxt,xPos,yPos,wid,hit){
	var txt="<iframe id=editSpace name=editSpace style=position:absolute;left:"+xPos+";top:"+yPos+";width:"+wid+";height:"+hit+" class=topbox src=iPage.html></iframe><p>";
	txt+="<input type=hidden id=hdneditSpace name=editSpace value=\""+inTxt+"\">";
	txt+="<textarea id=editSpaceTextarea style=position:absolute;left:"+(xPos+1)+";top:"+(yPos+1)+";width:"+wid+";height:"+hit+";visibility:hidden></textarea>";
	return txt;
}

// ============================================================ CROSS-PLATFORM FUNCTIONS FOR GETTING A HANDLE ON EDITSPACE

function grabEditSpaceContent(){
	if(ie){
		var editor=frames["editSpace"];
		var doc=editor.document;
		var res=doc.body;
		return res;
	}
	var editor=document.getElementById("editSpace").contentWindow;
	return editor;
}

function grabEditSpacePosition(){
	var es=grab("editSpace");
	return es;
}


// ============================================================= INITIALIZE EDIT SPACE EVENTS

function enableDesignMode(txt){
	editor=grabEditSpacePosition();
	if(!editor)return false;
	if(ie){
		var doc=frames["editSpace"].document;
		doc.designMode="on";
	}
	else{
		editor.contentDocument.designMode="on";
		var doc=editor.contentWindow.document;
	}
	doc.open();
	doc.write(txt);
	doc.close();
	return true;
}

function kb_handler(evt){
	var rte=evt.target.id;
	if(evt.ctrlKey){
		var key=String.fromCharCode(evt.charCode).toLowerCase();
		var cmd="";
		switch(key){
			case 'b': cmd="bold";break;
			case 'i': cmd="italic";break;
			case 'u': cmd="underline";break;
		}
		if(cmd){
			rteCommand(rte,cmd,null);
			evt.preventDefault();
			evt.stopPropagation();
		}
 	}
}

function kb(){
	var k=frames[0].event.keyCode;
	k=String.fromCharCode(k);
}

function initializeEditSpace(){
	var esCont=grab("hdneditSpace");
	var txt=esCont.value;
	var res=enableDesignMode(txt);
	if(!ie){
		oRTE=document.getElementById("editSpace").contentWindow.document
		oRTE.addEventListener("keypress",kb_handler,true);
	}
	return true;
}


// ====================================================== EDITOR UI COMMANDS

function doCommand(com,opt){
	if(com=="InsertImage"){
		opt=grab("profileImgInput").value;
		opt="userimages/"+opt;
	}
	if(com=="CreateLink")opt=prompt("Enter URL for link","http://");
	var editor;
	editor=grabEditSpaceContent();
	editor.focus();
	editor.document.execCommand(com,false,opt);
	editor.focus();
	return true;
}

function chooseFont(num){
	if(!num)num="";
	var fc=grab("fontChooser"+num);
	var val=fc.value;
	if(val!="")doCommand("FontName",val);
	fc.selectedIndex=0;
}

function chooseSize(num){
	if(!num)num="";
	var sc=document.getElementById("sizeChooser"+num);
	var val=sc.value;
	if(val!="")doCommand("FontSize",val);
	sc.selectedIndex=0;
}

function chooseColor(num){
	if(!num)num="";
	var cc=document.getElementById("colorChooser"+num);
	var val=cc.value;
	if(val!="")doCommand("ForeColor",val);
	cc.selectedIndex=0;
}


// ======================================================= HTML DISPLAY AND RENDERING FUNCTIONS

function cleanEditSpace(txt){
	txt=replacer(txt,"%0A","");
	txt=replacer(txt,"<BR>","");
	txt=replacer(txt,"</P>","");
	txt=replacer(txt,"<br><br>","<br>");
	txt=replacer(txt,"src=\"../","src=\""+pat);

	return txt;
}

var editMode="live";
function showHTML(){
	if(editMode=="live"){
		var es=grabEditSpaceContent();
		var txt=es.document.body.innerHTML;
		txt=cleanEditSpace(txt);
		var esta=grab("editSpaceTextarea");
		esta.value=txt;
		esta.style.visibility="visible";
		editMode="html";
	}
	else{
		var esta=grab("editSpaceTextarea");
		var txt=esta.value;
		txt=cleanEditSpace(txt);
		var es=grabEditSpaceContent();
		es.document.body.innerHTML=txt;
		esta.style.visibility="hidden";
		editMode="live";

	}
	return true;
}

function stripTextarea(txt){
	if(txt.substring(0,9).toLowerCase()!="<textarea")return txt;
	var sp=txt.indexOf(">")+1;
	txt=txt.substring(sp,txt.length-11);
	txt=normalize(txt);
	return txt;
}

function safeHTML(txt){
	if(txt.indexOf("<SCRIP")>-1)txt=replacer(txt,"<SCRIP","<XCRIP");
	return txt;
}

function getHTML(){
	var editor;
	editor=grabEditSpaceContent();
	var doc=editor.document;
	var res=doc.body.innerHTML;
	return res;
}

function fixFFimg(ed,opt){
	var txt=ed.document.body.innerHTML;
	txtArr=txt.split("<img>");
	txt=txtArr[0]+"<img src=\""+opt+"\">"+txtArr[1];
	for(var t=2;t<txtArr.length;t++){
		txt+=txtArr[t]
	}
	ed.document.body.innerHTML=txt;
	return true;
}


// ============================================================ HTML FOR BUTTON BAR

//control bar for the editSpace text editor, name: idVal+buttonBar (note lower case b)
function editorButtonBar(idVal,lf,tp,wd){
	var txt="";
	txt+="<div id="+idVal+"buttonBar class=topbox style=position:absolute;left:"+lf+";top:"+tp+";width:"+wd+";height:26;background-color:white>";
	txt+="<nobr><img id=boldButton src=images/bold.gif style=position:relative;left:0;top:5;width:17;height:17;cursor:pointer onClick=\"doCommand('bold','')\" alt=Bold>";
	txt+="&nbsp;<img id=italicButton src=images/italic.gif style=position:relative;left:0;top:5;width:17;height:17;cursor:pointer onClick=\"doCommand('italic','')\" alt=Italic>";
	txt+="&nbsp;<img id=underlineButton src=images/underline.gif style=position:relative;left:0;top:5;width:17;height:17;cursor:pointer onClick=\"doCommand('underline','')\" alt=Underline>";
	txt+="&nbsp;<img id=justifyLeftButton src=images/justLeft.gif style=position:relative;left:0;top:5;width:17;height:17;cursor:pointer onClick=\"doCommand('justifyLeft','')\" alt=\"Align Left\">";
	txt+="&nbsp;<img id=justifyCenterButton src=images/justCenter.gif style=position:relative;left:0;top:5;width:17;height:17;cursor:pointer onClick=\"doCommand('justifyCenter','')\" alt=Center>";
	txt+="&nbsp;<img id=justifyRightButton src=images/justRight.gif style=position:relative;left:0;top:5;width:17;height:17;cursor:pointer onClick=\"doCommand('justifyRight','')\" alt=\"Align Right\">";
	txt+="&nbsp;<img id=justifyBoth src=images/justBoth.gif style=position:relative;left:0;top:5;width:17;height:17;cursor:pointer onClick=\"doCommand('justifyFull','')\" alt=Justify>";
	txt+="&nbsp;<img id=orderedButton src=images/ordered.gif style=position:relative;left:0;top:5;width:17;height:17;cursor:pointer onClick=\"doCommand('InsertOrderedList','')\" alt=\"Ordered List\">";
	txt+="&nbsp;<img id=unorderedButton src=images/unordered.gif style=position:relative;left:0;top:5;width:17;height:17;cursor:pointer onClick=\"doCommand('InsertUnorderedList','')\" alt=\"Bullet Points\">";
	txt+="&nbsp;<img id=outdentButton src=images/outdent.gif style=position:relative;left:0;top:5;width:17;height:17;cursor:pointer onClick=\"doCommand('Outdent','')\" alt=Outdent>";
	txt+="&nbsp;<img id=indentButton src=images/indent.gif style=position:relative;left:0;top:5;width:17;height:17;cursor:pointer onClick=\"doCommand('Indent','')\" alt=Indent>";

	txt+="&nbsp;<img id=linkButton src=images/link.gif style=position:relative;left:0;top:5;width:17;height:17;cursor:pointer onClick=\"doCommand('CreateLink','')\" alt=\"Add Hyperlink\">";
	txt+="&nbsp;<img id=linkButton src=images/unlink.gif style=position:relative;left:0;top:5;width:17;height:17;cursor:pointer onClick=\"doCommand('Unlink','')\" alt=\"Remove Hyperlink\">";
	txt+="&nbsp;<img id=undoButton src=images/undo.gif style=position:relative;left:0;top:5;width:17;height:17;cursor:pointer onClick=\"doCommand('Undo','')\" alt=Undo>";
	txt+="&nbsp;<img id=redoButton src=images/redo.gif style=position:relative;left:0;top:5;width:17;height:17;cursor:pointer onClick=\"doCommand('Redo','')\" alt=Redo>";

	txt+="&nbsp;<select id=fontChooser"+idVal+" style=position:relative;left:0;top:1;width:80;height:17;cursor:pointer;font-familiy:verdana;font-size:10px onchange=chooseFont("+idVal+") onchange=chooseFont("+idVal+")>";
	txt+=" <option value=\"\">Font";
	txt+=" <option value=\"Arial\">Arial";
	txt+=" <option value=\"Monospace\">Courier";
	txt+=" <option value=\"Georgia\">Georgia";
	txt+=" <option value=\"Impact,Helvetica\">Impact";
	txt+=" <option value=\"Palatino,Palatino Linotype\">Palatino";
	txt+=" <option value=\"Serif\">Times";
	txt+=" <option value=\"Verdana\">Verdana";
	txt+="</select>";
	txt+="&nbsp;<select id=sizeChooser"+idVal+" style=position:relative;left:0;top:1;width:48;height:17;cursor:pointer;font-familiy:verdana;font-size:10px onchange=chooseSize("+idVal+")>";
	txt+=" <option value=\"\">Size";
	txt+=" <option value=1>Tiny";
	txt+=" <option value=2>Small";
	txt+=" <option value=3>Normal";
	txt+=" <option value=4>Big";
	txt+=" <option value=5>Bigger";
	txt+=" <option value=6>Large";
	txt+=" <option value=7>Huge";
	txt+="</select>";
	txt+="&nbsp;<select id=colorChooser"+idVal+" style=position:relative;left:0;top:1;width:70;height:17;cursor:pointer;font-familiy:verdana;font-size:10px onchange=chooseColor("+idVal+")>";
	txt+=" <option value=\"\">Color";
	txt+=" <option value=\"Red\">Red";
	txt+=" <option value=\"Orange\">Orange";
	txt+=" <option value=\"Yellow\">Yellow";
	txt+=" <option value=\"Green\">Green";
	txt+=" <option value=\"Blue\">Blue";
	txt+=" <option value=\"Indigo\">Indigo";
	txt+=" <option value=\"Violet\">Violet";
	txt+=" <option value=\"Black\">Black";
	txt+=" <option value=\"Gray\">Gray";
	txt+=" <option value=\"White\">White";
	txt+="</select>";
	txt+="&nbsp;<img id=htmlShowHide src=images/showHTML.gif style=position:relative;left:0;top:2;width:17;height:17;cursor:pointer onclick=showHTML() alt=\"Show HTML\"></nobr>";
	txt+="</div>";
	return txt;
}

