if (window.TP == null) {
    var TP = {};
}

TP.CharacterCounter = {
    isCounting: false,

    addCounter: function(counterSpanId, min, max) {
        this.getTextareaElement(counterSpanId).change( function() {
            TP.CharacterCounter.doCountCharacters(counterSpanId, min, max);
        } );
        this.getTextareaElement(counterSpanId).keyup( function() {
            TP.CharacterCounter.doCountCharacters(counterSpanId, min, max);
        } );
        TP.CharacterCounter.doCountCharacters(counterSpanId, min, max);

        window.setInterval(function() { TP.CharacterCounter.doCountCharacters(counterSpanId, min, max); }, 1000);
    },
	
    getTextareaElement: function(counterSpanId)
    {
        var textareaId = counterSpanId.replace(/_charactercounter$/, '');
        return $('#' + textareaId);
    },
	
    doCountCharacters: function(counterSpanId, minCharacters, maxCharacters)
    {
        if (TP.CharacterCounter.isCounting == true) {
            return;
        }
        TP.CharacterCounter.isCounting = true;

        var text = '';

        var editorId = counterSpanId.replace(/_charactercounter/, '');
        if (window.tinyMCE && eval('window.tinyMCE.editors.' + editorId)) {
            text = eval('window.tinyMCE.editors.' + editorId).getContent();
        } else {
            var textArea = this.getTextareaElement(counterSpanId);
            text = textArea.val();
        }

        // strip tags
        text = text.replace(/(<([^>]+)>)/ig,"");
        text = text.replace(/&[a-z]{3,4};/g," ");
        text = text.replace(/(<.*?>|\r|\n)/g, '');
        $('#' + counterSpanId + ' span.characters').text(text.length);
		
        var cssClass = 'valid';
        if (text.length < minCharacters || text.length > maxCharacters) {
            cssClass = 'invalid';
        }
        $('#' + counterSpanId + ' span.characters').attr("class", "characters " + cssClass);
        TP.CharacterCounter.isCounting = false;
    }
};
