var BBCode = Class.create({
	set: function(textareaid) {
		this.textareaid = textareaid;
	},

  	insert_full: function(start, end) {
		var textarea = document.getElementById(this.textareaid);

		textarea.focus();
		
		if (textarea.setSelectionRange)
		{
			var cursorStart = textarea.selectionStart;
			var cursorEnd = textarea.selectionEnd;

			var s1 = textarea.value.substr(0, cursorStart);
			var s2 = textarea.value.substr(cursorStart, (cursorEnd - cursorStart));
			var s3 = textarea.value.substr(cursorEnd);
			
			cursorStart += start.length + s2.length + end.length;
			
			return textarea.value = s1 + start + s2 + end + s3, textarea.selectionStart = cursorStart, textarea.selectionEnd = cursorStart;
		}
		
		if (textarea.isTextEdit)
		{
			var text = document.selection.createRange().text;
			return document.selection.createRange().text = start + text + end;
		}
		
		return textarea.value += start + end;
  	},
  	
  	insert_part:function(start){
  		var textarea = document.getElementById(this.textareaid);

		textarea.focus();
		
		if (textarea.setSelectionRange)
		{		
			var cursorPos = textarea.selectionStart;
			
			var s1 = textarea.value.substr(0, cursorPos);
			var s2 = textarea.value.substr(cursorPos);
			
			cursorPos += start.length;
			
			return textarea.value = s1 + start + s2, textarea.selectionStart = cursorPos, textarea.selectionEnd = cursorPos;
		}
		
		if (textarea.isTextEdit)
		{
			var text = document.selection.createRange().text;
			return document.selection.createRange().text = start + text;
		}
		
  	},
  	
  	insert: function(start, end){
  		if (!start && !end) return false;
		
		if (!end)
			this.insert_part(start);
		else
			this.insert_full(start, end);
  	},
  	
  	image: function(){
  		var ask = confirm("Do you wish to add an image?");
		if (!ask) return false;
		
		var builtImage = "[img]";
		
		var url = prompt("Enter the url of the image", "");
		if (url == "" || url == null) return false;
		builtImage += "" + url + "";
		
		builtImage += "[/img]";
		
		return this.insert(builtImage);
  	},
  	
  	youtube: function(){
  		var ask = confirm("Do you wish to insert a youtube video?");
		if (!ask) return false;
		
		var builtImage = "[youtube]";
		
		var url = prompt("Enter the video id", "");
		builtImage += "" + url + "";
		
		builtImage += "[/youtube]";
		
		return this.insert(builtImage);
  	},
  	
  	url: function(){
  		var ask = confirm("Do you wish to add a link?");
		if (!ask) return false;
		
		var href = prompt("Enter link url", "http://");
		if (href == "http://" || href == null) return false;
		
		var value = prompt("Enter link value (optional)", "");
		return this.insert((value != null && value != "") ? "[url=" + href + "]" + value + "[/url]" : "[url]" + href + "[/url]");
  	},
  	
  	list: function(t){
  		var type = (t == "number") ? "number" : "bullet";				
		var ask = confirm("Do you wish to add a \"" + type + "ed\" list?");
		
		var listItems = new Array();
		var builtList;
		
		while (ask)
		{
			var ask = prompt("Add list item", ""); 
			if (ask != null && ask != "") listItems.push(ask);
		}
		
		if (listItems.length == 0) return false;
		
		var ltype = (type == "number") ? '=1' : '';				
		builtList = "[list"+ ltype +"]\n";
		
		for (i = 0; i < listItems.length; i += 1)
		{
			builtList += "[*]" + listItems[i] + "[/*]\n";	
		}
		
		builtList += "[/list]";				
		return this.insert(builtList);
  	},
  	
  	editor: function(){
  		var images = '/images/icons/ithe_';
  		var ext = '.gif';
  		
  		var buttons = new Array(
  			Array("Bold", "bold", "[b]", "[/b]"),
  			Array("Italics", "italic", "[i]", "[/i]"),
  			Array("Underline", "underline", "[u]", "[/u]"),
  			false,
  			Array("Align Left", "left", "[align=left]", "[/align]"),
  			Array("Align Center", "center", "[align=center]", "[/align]"),
  			Array("Align Right", "right", "[align=right]", "[/align]"),
  			false,
  			Array("Bulleted List", "orderlist", "", "", "list", "bullet"),
  			Array("Numbered List", "numberlist", "", "", "list", "number"),
  			false,
  			Array("Url", "link", "", "", "url", ""),
  			Array("Image", "image", "", "", "image", ""),
  			false,
  			Array("Quote", "quote", "[quote]", "[/quote]"),
  			Array("YouTube", "youtube", "", "", "youtube", "")
  		);
  		
  		var textarea = this.textarea;
  		var toolbar = new String();
  		
  		for (i = 0; i < buttons.length; i += 1){
  			if (typeof(buttons[i]) == "object"){
				var onclick = (buttons[i][4] == 'list' || buttons[i][4] == 'url' || buttons[i][4] == 'image' || buttons[i][4] == 'youtube') ? "bbcode." + buttons[i][4] + "('"+buttons[i][5]+"');" : "bbcode.insert('"+buttons[i][2]+"', '"+buttons[i][3]+"');";
					
				toolbar += '<img id="bbce_'+buttons[i][1]+'" src="'+ images + buttons[i][1] + ext +'" onclick="'+ onclick +'" alt="'+ buttons[i][0] +'" title="'+ buttons[i][0] +'" />';
			}else{
				toolbar += '<img src="/images/icons/space.png" class="space" alt="Spacer" title="Spacer" />';	
			}
  		}
  		
  		document.write(toolbar);
  	}
});

var bbcode = new BBCode();