var yafEditor = function(name) {
	this.Name			= name;
}

yafEditor.prototype.FormatText = function(command, option) {
  var textObj = document.getElementById(this.Name);
  switch (command) {
    case "bold":
      wrapSelection(textObj, "[b]", "[/b]");
      break;
    case "italic":
      wrapSelection(textObj, "[i]", "[/i]");
      break;
    case "underline":
      wrapSelection(textObj, "[u]", "[/u]");
      break;
    case "code":
      wrapSelection(textObj, "[code]", "[/code]");
      break;
    case "img":
      wrapSelection(textObj, "[img]", "[/img]");
      break;
    case "quote":
      wrapSelection(textObj, "[quote]", "[/quote]");
      break;
    case "justifyleft":
      wrapSelection(textObj, "[left]", "[/left]");
      break;
    case "justifycenter":
      wrapSelection(textObj, "[center]", "[/center]");
      break;
    case "justifyright":
      wrapSelection(textObj, "[right]", "[/right]");
      break;
    case "createlink":
      var url = prompt('Enter URL:', 'http://');
      if (url != '' && url != null) {
        if (getCurrentSelection(textObj)) {
          wrapSelection(textObj, '[url=' + url + ']', '[/url]');
        }
        else {
          // ask for the description text...
          var desc = prompt('Enter URL Description:', '');
          if (desc != '' && desc != null)
            replaceSelection(textObj, '[url=' + url + ']' + desc + '[/url]');
          else
            replaceSelection(textObj, '[url]' + url + '[/url]');
        }
      }
      break;
    case "color":
      wrapSelection(textObj, "[color=" + option + "]", "[/color]");
      break;
    case "fontsize":
      wrapSelection(textObj, "[size=" + option + "]", "[/size]");
      break;
    case "unorderedlist":
      wrapSelection(textObj, "[list][*]", "[/list]");
      break;
    case "orderedlist":
      wrapSelection(textObj, "[list=1][*]", "[/list]");
      break;
    default:
      // make custom option
      wrapSelection(textObj, "[" + command + "]", "[/" + command + "]");
      break;
  }
}

yafEditor.prototype.AddImage = function() {
	var textObj = document.getElementById(this.Name);
	var img = prompt('Enter image URL:','http://');
	if(img!='' && img!=null)
		replaceSelection(textObj,'[img]'+img+'[/img]');
}

yafEditor.prototype.InsertSmiley = function(code) {
	var textObj = document.getElementById(this.Name);
	replaceSelection(textObj,code);
}

function Button_Load(img) {
	img.className	= "ButtonOut";
	img.onmouseover	= function(){Button_Over(this);}
	img.onmouseout	= function(){Button_Out(this);}
}

function Button_Over(img) {
	if(typeof(img._enabled)=="boolean" && !img._enabled)
		img.className = "ButtonOff";
	else
		img.className = "ButtonOver";
}

function Button_Out(img) {
	if(typeof(img._enabled)=="boolean" && !img._enabled)
		img.className = "ButtonOff";
	else if(typeof(img._selected)=="boolean" && img._selected)
		img.className = "ButtonChecked";
	else
		img.className = "ButtonOut";
}

function Button_SetState(doc,name,cmd) {
	var img = document.getElementById(name);
	try {
		img._selected = doc.queryCommandState(cmd);
	}
	catch(e) {
		img._selected = false;
	}
	img._enabled	= doc.queryCommandEnabled(cmd);

	if(!img._enabled)
		img.className = "ButtonOff";
	else if(img._selected)
		img.className = "ButtonChecked";
	else
		img.className = "ButtonOut";
}

function storeCaret(input) {
	if(input.createTextRange) {
		input.caretPos = document.selection.createRange().duplicate();
	}
}

function setSelectionRange(input, selectionStart, selectionEnd) {
	if (input.setSelectionRange) {
		input.focus();
		input.setSelectionRange(selectionStart, selectionEnd);
	} else if(input.createTextRange) {
		var range = input.createTextRange();
		range.collapse(true);
		range.moveEnd('character', selectionEnd);
		range.moveStart('character', selectionStart);
		range.select();
	}
}

function setCaretToPos (input, pos) {
	setSelectionRange(input, pos, pos);
}

function replaceSelection (input, replaceString) {
	if (input.setSelectionRange)
	{
		var selectionStart = input.selectionStart;
		var selectionEnd = input.selectionEnd;
		input.value = input.value.substring(0, selectionStart)
					+ replaceString
					+ input.value.substring(selectionEnd);
		if (selectionStart != selectionEnd) // has there been a selection
			setSelectionRange(input, selectionStart, selectionStart + 
				replaceString.length);
		else // set caret
			setCaretToPos(input, selectionStart + replaceString.length);
	}
	else if (document.selection)
	{	
	    input.focus();	    
	    document.selection.createRange().text = replaceString;  
	}
	else
	{
		input.value += replaceString;
		input.focus();
	}
}

function wrapSelection (input, preString, postString) {
	if (input.setSelectionRange) {
		var selectionStart = input.selectionStart;
		var selectionEnd = input.selectionEnd;
		input.value = input.value.substring(0, selectionStart)
					+ preString
					+ input.value.substring(selectionStart,selectionEnd)
					+ postString
					+ input.value.substring(selectionEnd);
		if (selectionStart != selectionEnd) // has there been a selection
			setSelectionRange(input, selectionStart, preString.length + postString.length + selectionEnd);
		else // set caret
			setCaretToPos(input, selectionStart + (preString+postString).length);
	} else if (document.selection) {
		var sel = document.selection.createRange().text;
		if(sel) {
			document.selection.createRange().text = preString + sel + postString;
			input.focus();
		} else {
			input.value += preString + postString;
			input.focus();
		}
	} else {
		input.value += preString + postString;
		input.focus();
	}
}

function getCurrentSelection(input) {
	if(input.setSelectionRange) {
		return input.selectionStart != input.selectionEnd;
	} else if(document.selection) {
		var range = document.selection.createRange();
		return range.parentElement()==input && range.text!='';
	} else {
		return false;
	}
}
