var g_sbox_user_refresh_min = 5000;
var g_sbox_refresh_min = 20000;
var g_sbox_refresh_max = 300000;
var g_sbox_multiply = 1.5;
var g_sbox_refresh = g_sbox_refresh_min;
var g_sbox_setInterval_ID = null;
var g_sbox_name = 'anon' + Math.ceil((Math.random() * 1000));
var g_sbox_last_user_refresh = 0;
var g_sbox_isStarted = false;
var g_sbox_ajax_browser = false;
var g_sbox_cache = null;
var g_sbox_cache_len = 0;

//clear the message from the text area
function clearMessage(){
    document.smiletagform.message.value=document.smiletagform.message_box.value;
    document.smiletagform.message_box.value="";
}

function update(json){
    if(!json) {
        var d = document.getElementById('shout');
        d.innerHTML = '<div>Hi, be the first to start a chat! You can ask questions or make comments about this item, and hear what others have to say.</div>';
        return;
    }

    try {
        var result = eval(json);
        var d = document.getElementById('shout');
        var len = result.length;
        var output = '';

        for(i = 0; i < len; i++) {
            output += '<div><b><span style="color:brown">' + result[i]['name'] + '</span></b>: ' + result[i]['msg'] + '</div>';
        }

        d.innerHTML = output;
    } catch(e) {}
}

function sb_clearMsg() {
    document.shoutbox_form.msg.value = '';
    giveFocus();
}

function giveFocus() {
    if(document.shoutbox_form.msg) {
        document.shoutbox_form.msg.focus();
    }
}

function nextInterval() {
    g_sbox_refresh *= g_sbox_multiply;
    var t = (g_sbox_refresh > g_sbox_refresh_max) ? g_sbox_refresh_max : g_sbox_refresh;
    g_sbox_refresh = t;
    return Math.ceil(g_sbox_refresh);
}

function kill_setInterval() {
    if(g_sbox_setInterval_ID) {
        clearInterval(g_sbox_setInterval_ID);
    }
}

function resetInterval() {
    g_sbox_refresh = g_sbox_refresh_min;
}

function waitMsg() {
    var d = document.getElementById('shout');
    d.innerHTML = '<div>Please wait...</div>' + d.innerHTML;
}

// check for new message automatically
// do not set giveFocus() here. user could by typing elsewhere.
function checkMessage(asin){
    var ajax = createAJAX();
    var output = null;

    kill_setInterval();

    if(ajax && asin) {
        url = "/shout?ajax=1&asin=" + urlencode(asin) + "&name=&msg=&random=" + Math.random();
        ajax.open("GET",url,true);
        ajax.onreadystatechange=function(){
            if(ajax.readyState==4){output = ajax.responseText; update(output);}
        }

        ajax.send(null);

        g_sbox_setInterval_ID = setInterval("checkMessage('" + asin + "')", nextInterval());
    }
}

// user initiates checking of new message.
function checkMessageForced(asin){
    waitMsg();
    kill_setInterval();
    resetInterval();
    checkMessage(asin);
}

// user sends a new message.
function sb_sendMessage(asin) {
    var msg = document.shoutbox_form.msg.value;
    var username = document.shoutbox_form.name.value;

    if(!trim(msg)) {
        giveFocus();
        return;
    }

    if(!trim(username)) {
        username = g_sbox_name;
    }else {
        g_sbox_name = username;
    }

    var ajax = createAJAX();
    var output = null;

    kill_setInterval();
    resetInterval();

    if(ajax && asin) {
        sb_clearMsg();
        waitMsg();

        url = "/shout?ajax=1&asin=" + urlencode(asin) + "&name=" + urlencode(username) + "&random=" + Math.random() + "&msg=" + urlencode(msg);

        ajax.open("GET",url,true);
        ajax.onreadystatechange=function(){
            if(ajax.readyState==4){output = ajax.responseText; update(output);}
        }

        ajax.send(null);

        g_sbox_setInterval_ID = setInterval("checkMessage('" + asin + "')", nextInterval());
    }
}

function sb_manual_refresh(asin) {
    var date = new Date();
    var currentTime = date.getTime();

    if(currentTime - g_sbox_last_user_refresh > g_sbox_user_refresh_min) {
        g_sbox_last_user_refresh = currentTime;
        checkMessageForced(asin);
    }

    giveFocus();
}

function sb_display(asin) {
    if(!g_sbox_ajax_browser) {
        if(createAJAX()) {
            g_sbox_ajax_browser = true;
        }else {
            noAjax();
            return;
        }
    }

    document.shoutbox_form.name.value=g_sbox_name;

    var d = document.getElementById('shout_display');
    if(d) {
        if(d.style.display == "none") {
            d.style.display = "block";
            sb_manual_refresh(asin);
        }else {
            // once closed, doesn't query info until reopened.
            d.style.display = "none";
            kill_setInterval();
        }
    }
}

function noAjax() {
    var d = document.getElementById('shout_display');
    d.innerHTML = '<div class="nssmall_print" style="width:95%">Sorry, real-time chat uses AJAX technology that your browser does not support. Please consider upgrading to the latest version.</div>';
    if(d) {
        if(d.style.display == "none") {
            d.style.display = "block";
        }else {
            d.style.display = "none";
        }
    }
}
