function attachEventHandlers() {
    $("#lnkOpenFeedback").click(function(e) {
        e.preventDefault();
        $("#Feedback").show();
    })
    $("#lnkCloseFeedback").click(function(e) {
        e.preventDefault();
        $("#Feedback").hide();
    })
    $("#btnSendFeedback").click(function(e) {
        e.preventDefault();
        if (!$("#taFBtext").val()) return;
        $.post(
            $("#frmFeedback").attr("action"),
            $("#frmFeedback").serialize(),
            function(data) {
                $("#inpContact").val("");
                $("#taFBtext").val("");
                $("#Feedback").hide();
            }
        );
    })
}

function insert_tag(tag, dest) {
    if (!tag && !dest) return false;
    
    var c = $("#" + dest);
    if (!c.length) return false;
    
    var t = $(c).val(), s = $(c).attr("selectionStart"), e = $(c).attr("selectionEnd");
    
    var a = ['[', tag, ']', t.substring(s, e), '[/', tag, ']'].join("");
    
    $(c).val([t.substring(0, s), a, t.substring(e, t.length)].join(""));
    
    s += a.length;

    $(c).attr("selectionStart", s);
    $(c).attr("selectionEnd", s);
    
    return 1;
}

function convert_tags(s) {
    if (!s) return '';
    
    return s.replace(/\[B\](.*?)\[\/B\]/g, "<b>$1</b>")
            .replace(/\[U\](.*?)\[\/U\]/g, "<u>$1</u>")
            .replace(/\[I\](.*?)\[\/I\]/g, "<i>$1</i>")
            .replace(/(\r?\n)/g, "<br />");
}

function strip_tags(s) {
    if (!s) return '';
    
    return s.replace(/\[B\](.*?)\[\/B\]/g, "$1")
            .replace(/\[U\](.*?)\[\/U\]/g, "$1")
            .replace(/\[I\](.*?)\[\/I\]/g, "$1")
            .replace(/(\r?\n)/g, " ");
}

function cut_string(str, length) {
    if (!length) length = 256;
    if (str && str.length > length) return str.substring(0, length - 1) + '...';
    return str;
}

function dump_obj(obj) {
    var str = '';
    for (var e in obj) {
        str += e+'='+obj[e]+'\n';
    }
    return str;
}
