function formatText(workWith, openTag, closeTag) {
    var field = $(workWith);

    if (field && (typeof(field) != 'undefined')) {
        // IE support
        if (document.selection && document.selection.createRange) {
            field.focus();
            sel = document.selection.createRange();
            if (!sel.text.length) {
                alert('Выделите текст, который вы желаете отформатировать.');
            } else {
                sel.text = openTag + sel.text + closeTag;
            }
            field.focus();
        } else if (field.selectionStart || field.selectionStart == '0') {
            // Moz support
            var startPos = field.selectionStart;
            var endPos = field.selectionEnd;

            if (startPos == endPos) {
                alert('Выделите текст, который вы желаете отформатировать.');
            } else {
                field.value = field.value.substring(0, startPos) + openTag + field.value.substring(startPos, endPos) + closeTag + field.value.substring(endPos, field.value.length);
            }
            field.selectionStart = field.selectionEnd = endPos + openTag.length + closeTag.length;
            field.focus();
        } else {
            // Fallback support for other browsers
            field.value += openTag + closeTag;
            field.focus();
        }
    }
}

function insertImg(workWith) {
    var field = $(workWith);

    if (field && (typeof(field) != 'undefined')) {
        // IE support
        var url = prompt('Введите адрес картинки:', '');
        if (url) {
            var code = '<img src="'+url+'" alt="" />';

            if (document.selection && document.selection.createRange) {
                field.focus();
                sel = document.selection.createRange();
                sel.text = code;
                field.focus();
            } else if (field.selectionStart || field.selectionStart == '0') {
                // Moz support
                var startPos = field.selectionStart;
                var endPos = field.selectionEnd;

                field.value = field.value.substring(0, startPos) + code + field.value.substring(endPos, field.value.length);

                field.selectionStart = field.selectionEnd = endPos + code.length;
                field.focus();
            } else {
                // Fallback support for other browsers
                field.value += code;
                field.focus();
            }
        }
    }
}

function insertLink(workWith) {
    var field = $(workWith);

    if (field && (typeof(field) != 'undefined')) {
        // IE support
        var url = prompt('Введите адрес ссылки:', '');
        if (url) {
            if (url.indexOf('http://') === 0) {
                var openTag = '<a href="'+url+'" target="_blank">';
            } else {
                var openTag = '<a href="'+url+'">';
            }
            var closeTag = '</a>';

            if (document.selection && document.selection.createRange) {
                field.focus();
                sel = document.selection.createRange();
                if (!sel.text.length) {
                    sel.text = prompt('Введите текст ссылки:', '');
                }
                sel.text = openTag + sel.text + closeTag;
                field.focus();
            } else if (field.selectionStart || field.selectionStart == '0') {
                // Moz support
                var startPos = field.selectionStart;
                var endPos = field.selectionEnd;

                if (startPos == endPos) {
                    var txt = prompt('Введите текст ссылки:', '');
                    field.value = field.value.substring(0, startPos) + openTag + txt + closeTag + field.value.substring(endPos, field.value.length);
                } else {
                    field.value = field.value.substring(0, startPos) + openTag + field.value.substring(startPos, endPos) + closeTag + field.value.substring(endPos, field.value.length);
                }
                field.selectionStart = field.selectionEnd = endPos + openTag.length + closeTag.length;
                field.focus();
            } else {
                // Fallback support for other browsers
                var txt = prompt('Введите текст ссылки:', '');
                field.value += openTag + txt + closeTag;
                field.focus();
            }
        }
    }
}

function insertSmile(workWith, smile) {
    var field = $(workWith);
    smile = ' ' + smile + ' ';

    if (field && (typeof(field) != 'undefined')) {
        if (document.selection && document.selection.createRange) {
            // IE support
            field.focus();
            sel = document.selection.createRange();
            sel.text = smile;
            field.focus();
        } else if (field.selectionStart || field.selectionStart == '0') {
            // Moz support
            var startPos = field.selectionStart;
            var endPos = field.selectionEnd;

            field.value = field.value.substring(0, startPos) + smile + field.value.substring(endPos, field.value.length);

            field.selectionStart = field.selectionEnd = endPos + smile.length;
            field.focus();
        } else {
            // Fallback support for other browsers
            field.value += smile;
            field.focus();
        }
    }
}

function insertCut(workWith) {
    var field = $(workWith);
    var code = ' [cut] ';

    if (field && (typeof(field) != 'undefined')) {
        if (document.selection && document.selection.createRange) {
            // IE support
            field.focus();
            sel = document.selection.createRange();
            sel.text = code;
            field.focus();
        } else if (field.selectionStart || field.selectionStart == '0') {
            // Moz support
            var startPos = field.selectionStart;
            var endPos = field.selectionEnd;

            field.value = field.value.substring(0, startPos) + code + field.value.substring(endPos, field.value.length);

            field.selectionStart = field.selectionEnd = endPos + code.length;
            field.focus();
        } else {
            // Fallback support for other browsers
            field.value += code;
            field.focus();
        }
    }
}

function buildList(workWith) {
    var field = $(workWith);
    var liStr = '';

    if (field && (typeof(field) != 'undefined')) {
        // IE support
        if (document.selection && document.selection.createRange) {
            field.focus();
            sel = document.selection.createRange();
            if (!sel.text.length) {
                alert('Выделите текст, который вы желаете отформатировать.');
            } else {
                var liArr = explode(field.value.substring(startPos, endPos), "\n");
                if (liArr.length > 0) {
                    liStr += "<ul>\n";
                    for (var i = 0; i < liArr.length; i++) {
                        if (trim(liArr[i])) {
                            liStr += '<li>' + trim(liArr[i]) + "</li>\n";
                        }
                    }
                    liStr += "</ul>\n";
                    sel.text = liStr;
                }
            }
            field.focus();
        } else if (field.selectionStart || field.selectionStart == '0') {
            // Moz support
            var startPos = field.selectionStart;
            var endPos = field.selectionEnd;

            if (startPos == endPos) {
                alert('Выделите текст, который вы желаете отформатировать.');
            } else {
                var liArr = explode(field.value.substring(startPos, endPos), "\n");
                if (liArr.length > 0) {
                    liStr += "<ul>\n";
                    for (var i = 0; i < liArr.length; i++) {
                        liStr += '<li>' + liArr[i] + "</li>\n";
                    }
                    liStr += "</ul>\n";
                    field.value = field.value.substring(0, startPos) + liStr + field.value.substring(endPos, field.value.length);
                }
            }
            field.selectionStart = field.selectionEnd = endPos + liStr.length;
            field.focus();
        } else {
            // Fallback support for other browsers
            alert('Ваш браузер не позволяет корректно использовать данную функцию.');
        }
    }
}

