-module(talk2).
-compile(export_all).
start() ->
    OtherNode = clean(io:get_line('What node? ')),
    FullNode = string:concat(OtherNode, "@localhost"),
    io:format("talking to: ~s~n", [FullNode]),
    register(receiver, spawn(?MODULE, receiver, [])),
    register(sender, spawn(?MODULE, sender, [list_to_atom(FullNode)])),
    get_input().
get_input() ->
    Message = clean(io:get_line('Talk: ')),
    case string:equal("exit!", Message) of
        true ->
            receiver ! done,
            sender ! done;
        false ->
            talk(Message),
            get_input()
    end.
talk(Message) ->
    sender ! {send, Message}.
sender(OtherNode) ->
    receive
        {send, Message} ->
            rpc:call(OtherNode, talk2, send_message, [Message]),
            sender(OtherNode);
        done ->
            void
    end.
send_message(Message) ->
    receiver ! {message, Message}.
receiver() ->
    receive
        {message, Message} ->
            io:format("~s~n", [Message]),
            receiver();
        done ->
            void
    end.
clean(Data) ->
    string:strip(Data, both, $\n).
var parser = new Butterfly.Parser().loadDefaultStrategies(), timeout, current;
$("#markup").keydown(function(e) {
	if (timeout) {
		clearTimeout(timeout);
		timeout = null;
	}
	
	timeout = setTimeout(render, 200);
});

function render() {
	var text = $("#markup").val();
	if (text === current) {
		return;
	}
	
	current = text;
	
	var $html = $("#html").removeClass("error").empty();
	var startTime = new Date().getTime();
	try {
		var html = parser.parseAndReturn(text);
		$html.html(html);
	} catch (e) {
		$html.addClass("error").html("<p/>").text(e.toString());
	}
	
	parser.analyzer.flush();
	$("#elapsed-time").empty().text((new Date().getTime() - startTime) + "ms");
	
	Sunlight.highlightAll();
}

render();