/////////////////////////////////////////////////////////////////////////////////////////////
// NTool[SITE]		 			Forum - Text Editor
//
// Descrizione					Funzioni comuni per il texteditor dei forum.
//
// Copyright (C) 				2007 - 2009  Gruppo36 (All rights reserved)
// Autore 							Chiodi Paolo
/////////////////////////////////////////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////////////////////////////////////////
NTForum = {};
/////////////////////////////////////////////////////////////////////////////////////////////



///////////////////////////////////////////////////////////////////////////////////////////// NTS ADMIN - TEXTEDITOR INIT
NTForum.PROTO_TextEditor = function( xN ){
	////////////////////////////////////
	this.N = xN;
	////////////////////////////////////
	this.tgIFrame = document.getElementById('TextEditor'+xN);
	//////////////////////////////////// 
	this.Browser = GetBrowser();
	var _Self = this;
	if( this.Browser=="IE" ){ 
		this.tgIFrame["onload"] = function(){
				_Self.Init();
			}
	} else {					//MO
		NTForum.CustEvent( this.tgIFrame, "load", function(){
				_Self.Init();
			}, false );
	}

	////////////////////////////////////
}
///////////////////////////////////////////////////////////////////////////////////////////// FORMAT EXEC COMMAND
NTForum.PROTO_TextEditor.prototype.Init = function(){
	////////////////////////////////////
	this.tgIFrameDoc = this.tgIFrame.contentWindow.document;
	this.tgIFrameBody = this.tgIFrame.contentWindow.document.body;
	////////////////////////////////////
	if( this.tgIFrame.contentDocument ){
		this.tgIFrame.contentDocument.designMode = "on";
	} else {
		this.tgIFrameBody.unselectable = "off";
		this.tgIFrameBody.contentEditable = true;
	}
	///////////////////////////////	
}
///////////////////////////////////////////////////////////////////////////////////////////// FORMAT EXEC COMMAND
NTForum.PROTO_TextEditor.prototype.FormatC = function( xBt, what, opt ){
	///////////////////////////////
	switch( what ){
		case "fontsize":
		case "fontname":
			if( opt=="" || !opt ){
				this.tgIFrameDoc.execCommand( "RemoveFormat", false, null );
				break;
			}
		default:
			this.tgIFrameDoc.execCommand( what, false, opt );

	}
	///////////////////////////////	
}
///////////////////////////////////////////////////////////////////////////////////////////// FORMAT JIUSTIFY
NTForum.PROTO_TextEditor.prototype.FormatJ = function( xBt, action ){
	///////////////////////////////
	this.FormatC( action );
	///////////////////////////////
}
///////////////////////////////////////////////////////////////////////////////////////////// FORMAT BREAK
NTForum.PROTO_TextEditor.prototype.FormatB = function( xBt ){
	///////////////////////////////
	var xRange = this.ResumeRange();
	if( this.Browser=="IE" ){ 
		var insertNode = "<br>";
	} else {
		var insertNode = this.tgIFrame.contentWindow.document.createElement("br");
	}
	this.insertHTML( xRange, insertNode );
	///////////////////////////////
}
/////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////// SUBMIT
NTForum.PROTO_TextEditor.prototype.Submit = function(){
	///////////////////////////////
	var cmpText = document.getElementById('ForumPostText'+this.N );
	var myForm = document.getElementById('formModify'+this.N );
	cmpText.value = this.tgIFrameBody.innerHTML;
	myForm.submit();
	///////////////////////////////
}
/////////////////////////////////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////////////////////////////// RESUME RANGE
NTForum.PROTO_TextEditor.prototype.ResumeRange = function(){
	///////////////////////////////
	var xRange = {};
	if( this.Browser=="IE" ){ 
		///////////////////////////////
		xRange.sel = this.tgIFrameBody.document.selection;
		xRange.range = xRange.sel.createRange();
		xRange.text = xRange.range.text;
		xRange.htmlText = xRange.range.htmlText;
		xRange.container = xRange.range.parentElement();
		///////////////////////////////
	} else {
		///////////////////////////////
		xRange.sel = this.tgIFrame.contentWindow.getSelection();
		xRange.range = xRange.sel.getRangeAt(0); 
		xRange.text = xRange.sel.toString();
		xRange.htmlText = new XMLSerializer().serializeToString( xRange.range.cloneContents() );
		xRange.container = xRange.range.startContainer;
		///////////////////////////////
	}
	return xRange;
	///////////////////////////////
}
/////////////////////////////////////////////////////////////////////////////////////////////
NTForum.PROTO_TextEditor.prototype.insertHTML = function( html )  {
	///////////////////////////////

	///////////////////////////////
}
///////////////////////////////////////////////////////////////////////////////////////////// INSERT HTML 
NTForum.PROTO_TextEditor.prototype.insertHTML = function( RangeSelected, xNode ){
	///////////////////////////////
	if( this.Browser=="IE" ){ 
		///////////////////////////////
		this.tgIFrameBody.focus();
		RangeSelected.range.execCommand('Delete');
		RangeSelected.range.execCommand('RemoveFormat')
		RangeSelected.range.pasteHTML( xNode );	
		///////////////////////////////
	} else {
		///////////////////////////////
		RangeSelected.sel.removeAllRanges();		// deselect everything
		RangeSelected.range.deleteContents();		// remove content of current selection from document
		var container = RangeSelected.range.startContainer;		// get location of current selection
		var pos = RangeSelected.range.startOffset;
		range = this.tgIFrameDoc.createRange();			// make a new range for the new selection
		///////////////////////////////
		var textNode = container;
		var container = textNode.parentNode;
		var text = textNode.nodeValue;
		var beforeText = text.substr( 0, Number(pos) );
		var afterText = text.substr( Number(pos), text.length-Number(pos) );
		var afterNode = this.tgIFrameDoc.createTextNode(afterText);
		var beforeNode = this.tgIFrameDoc.createTextNode(beforeText);
		// insert the 3 new nodes before the old one
		container.insertBefore( afterNode, textNode );
		container.insertBefore( xNode, afterNode );
		container.insertBefore( beforeNode, xNode );
		// remove the old node
		container.removeChild( textNode );
		///////////////////////////////
		range.setEnd(afterNode, 0);
		range.setStart(afterNode, 0);
		RangeSelected.sel.addRange(range);
		///////////////////////////////
	}
	///////////////////////////////
	return beforeNode;
	///////////////////////////////
}
/////////////////////////////////////////////////////////////////////////////////////////////




///////////////////////////////////////////////////////////////////////////////////////////// EVENT - ADD EVENT LISTENER
NTForum.CustEvent = function( element, eventType, handler, capture ){
	//////////////////////////////////// 
	try	{
		if( element.addEventListener ){
			element.addEventListener(eventType, handler, capture);
		}	else if( element.attachEvent ){
			element.attachEvent('on' + eventType, handler);
		} else {
			alert("Unsupported method [customEvent]!" + "\n" + handler)
			return;
		}
		return handler;
	}
	//////////////////////////////////// 
	catch (e) {  alert('customEvent Error [' + element + ']' + "\n" + e + "\n" + handler );  }
	//////////////////////////////////// 
};



