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

function ftf_populate_now(date_id, time_id) {
	var theDate = new Date();
	
	if (date_id != null && date_id.length > 0 && document.getElementById(date_id)) {
		document.getElementById(date_id).value = theDate.getDate() + "/" + (theDate.getMonth() + 1) + "/" + theDate.getFullYear();
	}

	if (time_id != null && time_id.length > 0 && document.getElementById(time_id)) {
		document.getElementById(time_id).value = 
			((theDate.getHours() == 0) ? 12 : ((theDate.getHours() > 12) ? theDate.getHours() - 12 : theDate.getHours()))
			+ ":" + (((theDate.getMinutes() + "").length == 1) ? "0" : "") + theDate.getMinutes() 
			+ ":" + (((theDate.getSeconds() + "").length == 1) ? "0" : "") + theDate.getSeconds()
			+ " " + ((theDate.getHours() < 12) ? "AM" : "PM");
	}
}

function ftf_get_caret_position(textarea_id) {
	if (document.getElementById(textarea_id)) {
		var textarea_object = document.getElementById(textarea_id);
		return ftf_get_caret_position_by_object(textarea_object);
	}
}

function ftf_get_caret_position_by_object(textarea_object) {
	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();
		}
	}*/
}

function ftf_set_caret_position_by_object(textarea_object, position) {
	ftf_set_caret_range_by_object(textarea_object, 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);
		ftf_set_caret_range_by_object(textarea_object, start_position, end_position);
	}
}

function ftf_set_caret_range_by_object(textarea_object, start_position, end_position) {
	if (textarea_object.setSelectionRange) {
		textarea_object.focus();
		textarea_object.setSelectionRange(start_position, end_position);
	} else if (document.selection) {
		var range_object = textarea_object.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_append_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_page_search(textarea_id) {
	var link_prefix = ((navigator.appName == "Microsoft Internet Explorer") ? '../' : './');

	var search_window = window.open(
		link_prefix + 'ladybug_include/page/popup_search?i_i=92bd2250-9208-102a-9875-2f42bef386c6&r_t=' + textarea_id, 
		'page_search', 'scrollbars=1,resizable=1,width=750,height=400');
}

function ftf_toolbar_blog_search(textarea_id) {
	var link_prefix = ((navigator.appName == "Microsoft Internet Explorer") ? '../' : './');

	var search_window = window.open(
		link_prefix + 'ladybug_include/page/popup_search?i_i=352d3d6b-921a-102a-9875-2f42bef386c6&r_t=' + textarea_id, 
		'page_search', 'scrollbars=1,resizable=1,width=750,height=400');
}

function ftf_toolbar_image_upload(textarea_id, upload_profile) {
	var file_profile = ((upload_profile == null || upload_profile.length == 0) 
		? 'default' : upload_profile);
	var link_prefix = ((navigator.appName == "Microsoft Internet Explorer") ? '../' : './');
	var upload_window = window.open(
		link_prefix + 'ladybug_include/page/upload_image?file_profile=' 
		+ file_profile + '&result_textarea=' + textarea_id + '&include_title=true', 
		'image_upload', 'scrollbars=1,resizable=1,width=750,height=400');
}

function ftf_toolbar_file_upload(textarea_id, upload_profile) {
	var file_profile = ((upload_profile == null || upload_profile.length == 0) 
		? 'default' : upload_profile);
	var link_prefix = ((navigator.appName == "Microsoft Internet Explorer") ? '../' : './');
	var upload_window = window.open(
		link_prefix + 'ladybug_include/page/upload_file?file_profile=' 
		+ file_profile + '&result_textarea=' + textarea_id + '&include_title=true', 
		'file_upload', 'scrollbars=1,resizable=1,width=750,height=400');
}

function ftf_toolbar_custom_tag(textarea_id, prompt_text) {
	if (document.getElementById(textarea_id)) {
		var textarea_object = document.getElementById(textarea_id);
		var inputLink = prompt(prompt_text);
	
		if (inputLink != null) {
			ftf_textarea_wrap_selected_text(textarea_id, '[' + inputLink + ']', '[/' + inputLink + ']');
	
			frf_set_focus(editor_id);
		}
		
		textarea_object.focus();
	}
}

function ftf_textarea_append_text(textarea_id, insert_text) {
	if (document.getElementById(textarea_id)) {
		var textarea_object = document.getElementById(textarea_id);
		ftf_textarea_append_text_by_object(textarea_object, insert_text);
	}
}

function ftf_textarea_append_text_by_object(textarea_object, insert_text) {
	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_by_object(textarea_object, caret_index);
		
	} else if (document.selection) {
		var caret_index = ftf_get_caret_position_by_object(textarea_object);
		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_by_object(textarea_object, caret_index);
	} else {
		textarea_object.value += insert_text;
	}

	textarea_object.focus();
}

function ftf_textarea_insert_text(textarea_id, insert_text) {
	if (document.getElementById(textarea_id)) {
		var textarea_object = document.getElementById(textarea_id);
		
		ftf_textarea_insert_text_by_object(textarea_object, insert_text);
	}
}

function ftf_textarea_insert_text_by_object(textarea_object, insert_text) {
	textarea_object.focus();
	
	textarea_object.value = insert_text + textarea_object.value;
	
	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();
	}
}