var ua    = navigator.userAgent;
var d     = document;
var w     = window;
var start = -1;
var end   = -1;
var len   = -1;

function getText(field) {
    if (d.selection) {
        return d.selection.createRange().text;
    }
    else {
        len   = field.textLength;
        start = field.selectionStart;
        end   = field.selectionEnd;
        if (end == 1 || end == 2) {
            end = len;
        }
        return field.value.substring(start, end);
    }
}

function setText(field, value) {
    field.focus();
    if (d.selection) {
		d.selection.createRange().text = value;
    }
    else if (len && (start >= 0) && end) {
        field.value = field.value.substring(0, start) + value + 
                        field.value.substr(end, len);
    }
    else {
		field.value = field.value + value;
    }
}

function insertAtCursor(myField, myValue) {
//IE support
  if (document.selection) {
    myField.focus();
    sel = document.selection.createRange();
    sel.text = myValue;
  }
  //MOZILLA/NETSCAPE support
  else if (myField.selectionStart || myField.selectionStart == '0') {
    var startPos = myField.selectionStart;
    var endPos = myField.selectionEnd;
    myField.value = myField.value.substring(0, startPos)
      + myValue
      + myField.value.substring(endPos, myField.value.length);
  } else {
    myField.value += myValue;
  }
}

function wrapSelection(field, left, right) {
    var value = getText(field);
    insertAtCursor(field, left + value + right);
    return false;
}

function wrapSelectionWithLink(field) {
	var url = prompt("Enter URL:", "http://");
	if (url != null) {
		var left  = "<a href=\"" + url + "\">";
		var right = "</a>";
		wrapSelection(field, left, right);
	}
	return false;
}

function wrapSelectionWithMailto(field) {
	var url = prompt("Enter Email Address:", "");
	if (url != null) {
		var left  = "<a href=\"mailto:" + url + "\">";
		var right = "</a>";
		wrapSelection(field, left, right);
	}
	return false;
}
