
var feedback = {};

feedback.req = null;
feedback.comments = [];
feedback.fetched = false;
feedback.comment_display_full = false;

function escape_markup(str) {
    var escapes = { "<":"&lt;",">":"&gt;" };
    var s = str;
    for(e in escapes) {
        while(true) {
            var es = s.replace(e,escapes[e]);
            if (es == s) {
                break;
            }
            s = es;
        }
    }
    return s;
}

feedback.recieve_data = function(responseText) {
    feedback.fetched = true;
    feedback.parse_comments(responseText);	   
    feedback.display_comment_count();
}

feedback.initial_txt = "<h3>Comments</h3>\n";

feedback.no_comments_txt = "<h3>0 Comments</h3>\n";

feedback.comment_count_format = [
    "<h3><a>$(count) Comment$(plural)</a></h3>\n"
    ];

feedback.comment_format = [
    "<h3><a>$(count) Comment$(plural)</a></h3>\n",
    { 'foreach': [[ '<hr/><p/><b>$(name)</b> ( <i>$(date)</i> )', 
        { 'foreach': [ '<br/>$\n' ] } 
        ]] }
    ];

feedback.load_comments = function(category) {
    document.getElementById("comments").innerHTML = feedback.initial_txt;
    try {
    	mccdotnet.fetch_url('/cgi-bin/fedback.py?category='+category,feedback.recieve_data);
    } catch(e) {
    }
}

feedback.parse_comments = function(txt) {
    var lines = txt.split("\n");
    var pos = 0;
    while(pos < lines.length-3) {
        var nlines = parseInt(lines[pos])
        var cname = escape_markup(lines[pos+1]);
        var cdate = lines[pos+2];
        var comment_lines = lines.slice(pos+3,pos+nlines+1);
        var line;
        var ccomment = [];
        for (line in comment_lines) {
            ccomment.push(escape_markup(comment_lines[line]));
        }
        feedback.comments.push([{ 'name':cname, 'date':cdate }, ccomment ]);
        pos += nlines + 1;
    }     

    // feedback.comments = []; //feedback.comments.slice(0,1);
}

feedback.display_comment_count = function() {
    var n = feedback.comments.length;
    var plural = (n == 1) ? "" : "s";
    var html = (n == 0) ? feedback.no_comments_txt 
        : new tinplate().process(feedback.comment_count_format,[{'count':n,'plural':plural}]);
    document.getElementById('comments').innerHTML = html;
    feedback.comment_display_full = false;
}

feedback.display_comments = function() {
    var n = feedback.comments.length;
    if (n>0) {
        var plural = (n == 1) ? "" : "s";
        var html = new tinplate().process(feedback.comment_format,[{'count':n,'plural':plural}, feedback.comments]);
        document.getElementById('comments').innerHTML = html;
        feedback.comment_display_full = true;
    }
}

feedback.toggle_comments = function() {
    if (!feedback.fetched) {
        return false;
    }
    if (feedback.comment_display_full) {
        feedback.display_comment_count();
    } else {
        feedback.display_comments();
    }
}

feedback.checkval = 0;

feedback.enable_form = function() {
	decval = document.getElementById('feedback_dec').value;
	if (parseInt(decval) == feedback.checkval) {
		document.getElementById('feedback_name').disabled = false;
		document.getElementById('feedback_comment').disabled = false;
		document.getElementById('feedback_submit').disabled = false;
	} 
}

feedback.init_form = function() {
	hexval = '0x'
	feedback.checkval = Math.floor(Math.random()*256);
	hexval += feedback.checkval.toString(16);
	document.getElementById('feedback_name').disabled = true;		
    document.getElementById('feedback_submit').disabled = true;	
	document.getElementById('feedback_comment').disabled = true;	
	document.getElementById('feedback_hex').value = hexval;
	document.getElementById('feedback_dec').onkeyup=feedback.enable_form
}

