var $j = jQuery.noConflict();

var TextStatusModifiers = function() {
	
	var obj = {};
	
	/**
	 * Every waveRatio character will be converted to uppercase
	 */
	var waveRatio = 3;
	
	var asciiRepresentation = {
		'ą': 'a',
		'ć': 'c',
		'ę': 'e',
		'ł': 'l',
		'ń': 'n',
		'ó': 'o',
		'ś': 's',
		'ż': 'z',
		'ź': 'z'
	};
	
	
	var transformUpperCase = function(string) {
		return string.toUpperCase();
	}
	
	var transformLowerCase = function(string) {
		return string.toLowerCase();
	}
	
	var transformWave = function(string) {
		var wavyString = '';
		for (var i = 0; i < string.length; i++) {
			var chr = string.charAt(i);
			if (i % waveRatio == 0) {
				chr = chr.toUpperCase();
			} else {
				chr = chr.toLowerCase();
			}
			wavyString += chr;
		}
		return wavyString;
	}
	
	var transformAscii = function(string) {
		var asciiString = '';
		for (var i = 0; i < string.length; i++) {
			var chr = string.charAt(i);
			chrLowerCase = chr.toLowerCase();
			var toUpper = false;
			if (asciiRepresentation[chrLowerCase]) {
				if (chrLowerCase != chr) {
					toUpper = true;
				}
				chr = asciiRepresentation[chrLowerCase];
				if (toUpper) {
					chr = chr.toUpperCase();
				} 
			}
			asciiString += chr;
		}
		return asciiString;
	}
	
	var transformReverse = function(string) {
		return string.split('').reverse().join('');
	}
	
	var transformRot13 = function(string) {
		return transformAscii(string).replace(/[a-zA-Z]/g, function(c){
        	return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);
    	});
	}
	
	var addEvents = function() {
		$j('.text-status-buttons .text-button').mouseover(function() {
			$j(this).addClass('active');
		});
		$j('.text-status-buttons .text-button').mouseout(function() {
			$j(this).removeClass('active');
		});
		$j('.text-status-buttons .text-button').click(function() {
			
			var button = $j(this);
			
			var textElement = $j(this).parents('li').find('textarea');
			var text = textElement.text();
			
			if (button.hasClass('uppercase')) {
				text = transformUpperCase(text);
			} else if (button.hasClass('lowercase')) {
				text = transformLowerCase(text);
			} else if (button.hasClass('wave')) {
				text = transformWave(text);
			} else if (button.hasClass('ascii')) {
				text = transformAscii(text);
			} else if (button.hasClass('reverse')) {
				text = transformReverse(text);
			} else if (button.hasClass('rot13')) {
				text = transformRot13(text);
			}
			
			textElement.text(text);
		});
	}
	
	obj.init = function() {
		addEvents();
	}

	return obj;
}();

$j(document).ready(function(){
	TextStatusModifiers.init()
});