// TODO-B: Add code to check if any text is selected (then replace it)

function ftf_get_caret_position(textarea_id) {
	if (document.getElementById(textarea_id)) {
		var textarea_object = document.getElementById(textarea_id);
		textarea_object.focus();
		
		if (textarea_object.setSelectionRange) {
			return textarea_object.selectionStart;
		} else if (document.selection) {
			// TODO-B: Fix IE selected pos text
			/*var char_text = "\001";
			var range_object = document.selection.createRange();
			var duplicate_object = range_object.duplicate();
			var return_length = 0;
			duplicate_object.moveToElement(textarea_id);
			alert('a');
			range_object.text = c;
			return_length = (duplicate_object.text.indexOf(char_text));
			range_object.moveStart('character', 01);
			range_object.text = "";
			return return_length;
			var is_collapsed = range_object.compareEndPoints('StartToEnd', range_object) == 0;
			
			if (is_collapsed == false) {
				range_object.collapse(true);
			}
			
			var bookmark = range_object.getBookmark();
			return bookmark.charCodeAt(2) - 2;
			//selection_object.collapse(true);
			//selection_object.moveStart('character',  - textarea_object.value.length);

			return selection_object.text.length;*/
			return textarea_object.value.length;
		} else {
			return textarea_object.value.length;
		}
	}
}

function ftf_set_caret_position(textarea_id, position) {
	ftf_set_caret_range(textarea_id, position, position);
	/*if (document.getElementById(textarea_id)) {
		var textarea_object = document.getElementById(textarea_id);
		
		if (textarea_object.setSelectionRange) {
			textarea_object.focus();
			textarea_object.setSelectionRange(position, position);
		} else if (document.selection) {
			var range_object = textarea_id.createTextRange();
			range_object.collapse(true);
			range_object.moveEnd('character', pos);
			range_object.moveStart('character', pos);
			range.select();
		}
	}*/
}
// TODO-B: check following code under ie
function ftf_set_caret_range(textarea_id, start_position, end_position) {
	if (document.getElementById(textarea_id)) {
		var textarea_object = document.getElementById(textarea_id);
		
		if (textarea_object.setSelectionRange) {
			textarea_object.focus();
			textarea_object.setSelectionRange(start_position, end_position);
		} else if (document.selection) {
			var range_object = textarea_id.createTextRange();
			range_object.collapse(true);
			range_object.moveStart('character', start_position);
			range_object.moveEnd('character', end_position - start_position);
			range_object.select();
		}
	}
}

function ftf_smily_icon_click(textarea_id, smily_value) {
    if (document.getElementById(textarea_id)) {
    	ftf_textarea_insert_text(textarea_id, ' ' + smily_value);
    }
}

function ftf_toolbar_button_click(textarea_id, tag_start, tag_end, attribute) {
    if (document.getElementById(textarea_id)) {
    	if (attribute == null || attribute.length == 0) {
	    	ftf_textarea_wrap_selected_text(textarea_id, tag_start, tag_end);
	    } else {
	    	new_start_tag = tag_start.substring(0, tag_start.length - 1) + '=' + attribute + ']';
	    	ftf_textarea_wrap_selected_text(textarea_id, new_start_tag, tag_end);
	    }
    }
    
}

function ftf_toolbar_image_upload(textarea_id, upload_profile) {
	var file_profile = ((upload_profile == null || upload_profile.length == 0) 
		? 'default' : upload_profile);
	var upload_window = window.open(
		'./ladybug_include/page/upload_image?file_profile=' + file_profile);
}

function ftf_textarea_insert_text(textarea_id, insert_text) {
	if (document.getElementById(textarea_id)) {
		var textarea_object = document.getElementById(textarea_id);
		textarea_object.focus();
		
		if (textarea_object.setSelectionRange) {
			var caret_index = textarea_object.selectionStart + insert_text.length;
			var pre_text = textarea_object.value.substring(0, textarea_object.selectionStart);
			var post_text = textarea_object.value.substring(textarea_object.selectionStart, textarea_object.value.length);
			
			textarea_object.value = pre_text + insert_text + post_text;
			ftf_set_caret_position(textarea_id, caret_index);
			
		} else if (document.selection) {
			var caret_index = ftf_get_caret_position(textarea_id);
			alert(caret_index);
			var pre_text = textarea_object.value.substring(0, caret_index);
			var post_text = textarea_object.value.substring(caret_index, textarea_object.value.length);

			textarea_object.value = pre_text + insert_text + post_text;
			ftf_set_caret_position(textarea_id, caret_index);
		} else {
			textarea_object.value += insert_text;
		}

		textarea_object.focus();
	}
}

function ftf_textarea_wrap_selected_text(textarea_id, start_wrap, end_wrap) {
	if (document.getElementById(textarea_id)) {
		var textarea_object = document.getElementById(textarea_id);
		textarea_object.focus();
		
		if (textarea_object.setSelectionRange) {
			var selected_text = textarea_object.value.substring(textarea_object.selectionStart, 
				textarea_object.selectionEnd);
			
			ftf_textarea_replace_selected_text(textarea_id, start_wrap + selected_text + end_wrap);
			// TODO-B: Would be good to set the caret to the current position
		} else if (document.selection) {
			var current_selection_text = document.selection.createRange().text;

			ftf_textarea_replace_selected_text(textarea_id, start_wrap + current_selection_text + end_wrap);
			// TODO-B: Would be good to set the caret to the current position
		} else {
			textarea_object.value += new_text;
		}

		textarea_object.focus();
	}
}

function ftf_textarea_replace_selected_text(textarea_id, new_text) {
	if (document.getElementById(textarea_id)) {
		var textarea_object = document.getElementById(textarea_id);
		textarea_object.focus();

		if (textarea_object.setSelectionRange) {
			var pre_text = textarea_object.value.substring(0, textarea_object.selectionStart);
			var post_text = textarea_object.value.substring(textarea_object.selectionEnd, textarea_object.value.length);
			
			textarea_object.value = pre_text + new_text + post_text;
			ftf_set_caret_position(textarea_id, pre_text.length + new_text.length);
		} else if (document.selection) {
			var current_selection = document.selection.createRange();

			if (current_selection.text.length > 0) {
				current_selection.text = new_text;
			} else {
				// TODO-B: Would be good to actually insert the text at the current caret position
				textarea_object.value += new_text;
				// TODO-B: Would also be good to set the caret to the current position
			}
		} else {
			textarea_object.value += new_text;
		}
		
		textarea_object.focus();
	}
}