/**
 * Checks the message length
 *
 * @package	net.hawkes.postlength
 * @author	Oliver Kliebisch
 * @copyright	2008 Oliver Kliebisch
 * @license	Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported <http://creativecommons.org/licenses/by-nc-nd/3.0/>
 */
 
 function MessageLength() {
	this.maxLength;
	this.message;
	
	
	this.init = function(maxLength) {
		if(tinyMCE && tinyMCE.selectedInstance) {
			var mceElement = document.getElementById('mce_editor_0_codeview');
			if(IS_IE) {
			mceElement.attachEvent('onkeyup', function () { return messageLength.checkLength(); } );
			}
			else
				mceElement.addEventListener('keyup',  function () { return messageLength.checkLength(); }, false );
			tinyMCE.addEvent(tinyMCE.selectedInstance.getDoc(), "keyup", function (e) { return messageLength.checkLength(); });
			this.maxLength = maxLength;			
			this.buildDisplay();
			this.checkLength();		
			window.clearInterval(initMessageLength);			
		}
	}
	
	this.buildDisplay = function() {
		var messageLengthContainer = document.createElement('div');
		messageLengthContainer.style.float = 'left';
		messageLengthContainer.id = 'messageLength';		
		var messageLengthImage = document.createElement('img');
		messageLengthImage.alt = '';
		messageLengthImage.style.cursor = 'pointer';
		messageLengthImage.src = RELATIVE_WCF_DIR + 'icon/messageLengthM.png';
		messageLengthImage.onmousedown = function() { 
			var options = new Array();
			var n = 0;
			options[n] = new Object();
			options[n]['function'] = 'messageLength.messageStatistic();';
			options[n]['text'] = language['wcf.message.statistic'];
			n++;
			var menuDiv = document.getElementById('messageLengthMenu');
			while (menuDiv.hasChildNodes()) {
				menuDiv.removeChild(menuDiv.firstChild);
			}
			var menuUL = document.createElement('ul');
			menuDiv.appendChild(menuUL);
		
			for (var i = 0; i < options.length; i++) {
				var menuLI = document.createElement('li');
				menuUL.appendChild(menuLI);
			
				var menuA = document.createElement('a');
				menuA.href = 'javascript:'+options[i]['function'];
				menuLI.appendChild(menuA);
				menuA.appendChild(document.createTextNode(options[i]['text']));
			}
			};
		messageLengthContainer.appendChild(messageLengthImage);
		var messageLength = document.createElement('span');
		messageLength.id = 'messageLengthText';
		messageLength.innerHTML = ' ' + language['wcf.message.characters'] + 0
			+ '  ' + language['wcf.message.remainingCharacters']+this.maxLength;
		messageLengthContainer.appendChild(messageLength);
		var parent = document.getElementById('mce_editor_0_resize').parentNode;
		parent.appendChild(messageLengthContainer);		
		var menuDiv = document.createElement('div');
		menuDiv.id = 'messageLengthMenu';
		menuDiv.className = 'hidden';
		var parent = document.getElementById('messageLength');
		parent.appendChild(menuDiv);			
		popupMenuList.register('messageLength');
	}
	
	this.createMenu = function() {
		var options = this.getOptions();
		var menuDiv = document.getElementById('messageLengthMenu');
		while (menuDiv.hasChildNodes()) {
			menuDiv.removeChild(menuDiv.firstChild);
		}
		var menuUL = document.createElement('ul');
		menuDiv.appendChild(menuUL);
		
		for (var i = 0; i < options.length; i++) {
			var menuLI = document.createElement('li');
			menuUL.appendChild(menuLI);
			
			var menuA = document.createElement('a');
			menuA.href = 'javascript:'+options[i]['function'];
			menuLI.appendChild(menuA);
			menuA.appendChild(document.createTextNode(options[i]['text']));
		}
	}
	
	this.checkLength = function() {
		this.getMessage();	
		var message = this.message;
		var element = document.getElementById('messageLengthText');
		var length = message.length;
		var remainingSpace = this.maxLength - length;
		if(remainingSpace < 0) {			
			element.className = 'formError';
			remainingSpace = 0;
		}
		else element.style.color = null;
		if(element) {
			element.innerHTML = ' ' + language['wcf.message.characters'] + length 
			+ ' ' + language['wcf.message.remainingCharacters']+remainingSpace;
		}
	}
	
	this.getMessage = function() {
		 if (tinyMCE.selectedInstance.editorIsActive)
			var message =tinyMCE.htmlToBBCode(tinyMCE.selectedInstance.getBody().innerHTML);
		else
			var message = document.getElementById('mce_editor_0_codeview').value;		
		this.message = message;
	}
	
	this.messageStatistic = function() {
		this.getMessage();		
		message = this.message;
		var length = message.replace(/\s/, '').length;
		if (length < 1) return;
		var wordCount = 0;
		var words = message.replace(/\s/g, ' ');
		words = words.split(' ');
		for(i=0; i<words.length; i++) {
			if(words[i].length > 0)  wordCount++;
			else words.slice(i,1);
		}		
		var letters = new Array(wordCount);
		var totalLetterCount = 0;
		var lettersPerWord = 0;
		var i = 0; 
		for(i=0; i < wordCount; i++)
		{
			letters[i] = words[i].length;
			totalLetterCount += words[i].length;   			
		}
		lettersPerWord = totalLetterCount/wordCount;
		var sentences = message.split('.');
		var sentenceCount = sentences.length-1;
		var wordsPerSentence = wordCount/sentenceCount;		
		alert( language['wcf.message.words'] + ' ' + wordCount + '\n' +
			   language['wcf.message.letterCount'] + ' ' + totalLetterCount + '\n' +
			   language['wcf.message.lettersPerWord'] + ' ' + lettersPerWord + '\n' +
			   language['wcf.message.sentenceCount'] + ' ' + sentenceCount + '\n' + 
			   language['wcf.message.wordsPerSentence'] + ' ' + wordsPerSentence);
	}
}

var messageLength = new MessageLength();