var TextileToolbar = Class.create();

TextileToolbar.prototype = {

	initialize: function(textarea, prefix) {
		this.textarea = textarea;
		this.prefix = prefix;
	},
	
	bold: function() {
	  this.wrap_selection('*', '*');
	},
	
	italic: function() {
	  this.wrap_selection('_', '_');
	},
	
	link: function() {
		if(!this.selected()) {
			alert("Please select some text first.");
			return false;
		}
	  var url = prompt('Please enter the URL for this link', 'http://');
	  if(url == 'http://') url = '';
	  if(url == '' || url == null) return false;
		this.wrap_selection('"', '":' + url);
	},
	
	image: function() {
	  var location = prompt('Please enter the location (URL) of the image', 'http://');
	  if(location == 'http://') location = '';
	  if(location == '' || location == null) return false;
	  var alt = prompt('Enter the description of the image', '');
	  if(alt == null) alt = '';
	  var url = prompt('If you want to hyperlink this image, enter the URL for the link', 'http://');
	  if(alt != '') alt = '(' + alt + ')';
	  if(url == 'http://' || url == null) url = '';
	  if(url != '') url = ':' + url;
		this.insert_at_cursor('!' + location + alt + '!' + url);
	},
	
	guide: function() {
		Effect.BlindDown(this.prefix + 'formatting-guide', {duration:0.5});
		Element.show(this.prefix + 'rich-textarea-close-guide-btn');
		Element.hide(this.prefix + 'rich-textarea-guide-btn');
	},
	
	close_guide: function() {
		Effect.BlindUp(this.prefix + 'formatting-guide', {duration:0.5});
		Element.show(this.prefix + 'rich-textarea-guide-btn');
		Element.hide(this.prefix + 'rich-textarea-close-guide-btn');
	},
	
	pictures_videos: function() {
		Effect.toggle(this.prefix + 'pictures-videos-friendly', 'blind', {duration:0.3});
	},
	
	before_preview: function() {
		Element.show(this.prefix + 'rich-textarea-preview-progress');
		Element.hide(this.prefix + 'rich-textarea-preview-btn');
	  return false;
	},
	
	after_preview: function() {
		Element.show(this.prefix + 'rich-textarea-preview');
		Element.hide(this.textarea);
		Element.hide(this.prefix + 'bottom-toolbar');
		Element.hide(this.prefix + 'rich-textarea-preview-progress');
		Element.show(this.prefix + 'rich-textarea-close-preview-btn');
	  return false;
	},
	
	close_preview: function() {
		Element.hide(this.prefix + 'rich-textarea-preview');
		Element.show(this.textarea);
		Element.show(this.prefix + 'bottom-toolbar');
		Element.hide(this.prefix + 'rich-textarea-close-preview-btn');
		Element.show(this.prefix + 'rich-textarea-preview-btn');
	  return false;
	},
	
	more_room: function() {
	  var rows = parseInt($(this.textarea).getAttribute('rows'));
		$(this.textarea).setAttribute('rows', rows + 10);
	},
	
	mini_browser: function() {
	  Effect.toggle(this.prefix + 'mini-browser', 'blind', {duration:0.3});
	},
	
	insert_at_cursor: function(value) {
		textarea = $(this.textarea);
	  //IE support
	  if (document.selection) {
	    textarea.focus();
	    sel = document.selection.createRange();
	    sel.text = value;
	  }
	  //MOZILLA/NETSCAPE support
	  else if (textarea.selectionStart || textarea.selectionStart == '0') {
	    var start_position = textarea.selectionStart;
	    var end_position = textarea.selectionEnd;
	    textarea.value = textarea.value.substring(0, start_position)
	                  + value
	                  + textarea.value.substring(end_position, textarea.value.length);
	  } else {
	    textarea.value += value;
	  }
	},
	
	wrap_selection: function(pre, post) {
		textarea = $(this.textarea);
		//IE support
		if (document.selection) {
			textarea.focus();
		  sel = document.selection.createRange();
			if (sel.text.length > 0) {
				sel.text = pre + sel.text + post;
			} else {
				alert("Please select some text first.");
			}
			textarea.focus();
		}
		//MOZILLA/NETSCAPE support
		else if (textarea.selectionStart || textarea.selectionStart == '0') {
			var start_position = textarea.selectionStart;
			var end_position = textarea.selectionEnd;
			var cursor_position = end_position;
			var scroll_top = textarea.scrollTop;
	
			if (start_position != end_position) {
				textarea.value = textarea.value.substring(0, start_position)
				              + pre
				              + textarea.value.substring(start_position, end_position) 
				              + post
				              + textarea.value.substring(end_position, textarea.value.length);
				cursor_position += pre.length + post.length;
			}
			else {
				alert("Please select some text first.");
			}
			textarea.focus();
			textarea.selectionStart = start_position;
			textarea.selectionEnd = cursor_position;
			textarea.scrollTop = scroll_top;
		}
	},
	
	selected: function() {
		textarea = $(this.textarea);
		//IE support
		if (document.selection) {
			textarea.focus();
		  sel = document.selection.createRange();
			if (sel.text.length > 0) {
				return true;
			} else {
				return false;
			}
		}
		//MOZILLA/NETSCAPE support
		else if (textarea.selectionStart || textarea.selectionStart == '0') {
			var start_position = textarea.selectionStart;
			var end_position = textarea.selectionEnd;
			if (start_position != end_position) {
				return true;
			}
			else {
				return false;
			}
		}
	}
	
};