// Removes leading whitespaces
function LTrim( value ) {
	
	var re = /\s*((\S+\s*)*)/;
	return value.replace(re, "$1");
	
}

// Removes ending whitespaces
function RTrim( value ) {
	
	var re = /((\s*\S+)*)\s*/;
	return value.replace(re, "$1");
	
}

// Removes leading and ending whitespaces
function trim( value ) {
	
	return LTrim(RTrim(value));
	
}

function doGetCaretPosition(ctrl)
{
	var CaretPos = 0;
	
	// IE Support
	if (document.selection) 
	{
		ctrl.focus ();
		var Sel = document.selection.createRange ();
		Sel.moveStart ('character', -ctrl.value.length);
		CaretPos = Sel.text.length;
	}
	// Firefox support
	else if (ctrl.selectionStart || ctrl.selectionStart == '0')
	{
		CaretPos = ctrl.selectionStart;
	}
	
	return (CaretPos);
}

function setCaretPosition(ctrl, pos)
{
	if(ctrl.setSelectionRange)
	{
		ctrl.focus();
		ctrl.setSelectionRange(pos,pos);
	}
	else if (ctrl.createTextRange) 
	{
		var range = ctrl.createTextRange();
		range.collapse(true);
		range.moveEnd('character', pos);
		range.moveStart('character', pos);
		range.select();
	}
}

function applyShorthand(jObj, itemid, keyCode) 
{ 
	var value = jQuery(jObj).val();
	var lines = jQuery.trim(value).split("\n");
	
	var results = '';
	var has_replacement = false;
	
	var textarea_obj = document.getElementById(itemid);
	var current_caret_position = doGetCaretPosition(textarea_obj);
	var additional_caret = 0;
	
	
	var shorthand_db = []
	
	for(b = 0; b < lines.length; b++)
	{
		var current_line = new String(lines[b]);
		var words = current_line.split(' ');

		if(words.length > 0)
		{
			for(var i = 0; i < words.length; i++)
			{
				var cmp = new String(words[i]);
				
				if(cmp.search(/=/) != -1)
				{
					has_replacement = true;
				}
			}
		}
	}
	
	if(has_replacement)
	{
		shorthand_db = [];
		
		jQuery.post(
			'preferences/misc/loader-shorthands.php', 
			{shortcut_patientid: wysiwyg_init_func()}, 
			function(data)
			{
				shorthand_db = data;
				
				has_replacement = false;

				for(b = 0; b < lines.length; b++)
				{
					var current_line = new String(lines[b]);
					var words = current_line.split(' ');
			
					if(words.length > 0)
					{
						for(var i = 0; i < words.length; i++)
						{
							if(i > 0)
							{
								results += ' ';
							}
			
							for(var a = 0; a < shorthand_db.length; a++)
							{
								var cmp1 = new String(shorthand_db[a].shorthand_short);
								var cmp2 = new String(words[i]);
								
								cmp1 = trim(cmp1);
								cmp2 = trim(cmp2);
			
								if(cmp1 == cmp2)
								{
									has_replacement = true;
									words[i] = shorthand_db[a].shorthand_long;
									var str1 = new String(shorthand_db[a].shorthand_short);
									var str2 = new String(shorthand_db[a].shorthand_long);
									additional_caret += str2.length - str1.length;
								}
								
							}
							
							results += words[i];
						}
					}
					
					if(!(lines.length == 1 || b == lines.length - 1))
					{
						results += '\n';
					}
				}
			
				results += String.fromCharCode(keyCode);
				
				if(has_replacement)
				{
					jQuery(jObj).val(results);
			
					var new_caret_position = current_caret_position + additional_caret;
					setCaretPosition(textarea_obj, new_caret_position);
				}
			},
			'json'
		);
	}
}

jQuery(document).ready(function($)
{
	$('.full_wysiwyg').each(function()
	{
		$(this).css("overflow", "hidden");
		$(this).css("width", "100%");
		$(this).css("height", "auto");
		$(this).autoGrow();
		
		var itemid = $(this).attr("id");
		
		$(this).keyup(function(event)
		{
			if (event.keyCode == 32)
			{
				applyShorthand(this, itemid, event.keyCode);
			}
		});
	});
});
