var kasutaja_sisendi_aeg = null;
var agendi_nimi = 'Zelda';
var agendi_amet = 'Konsultant';
var agent_vaikib = false;

var flood_control_started = false;
var flood_algusaeg = null;
var flood_sisestuste_arv = null;

var transaction_busy = false;

function trigger_agent(p_text) {

    // Bridge XMLHTTP to XMLHttpRequest in pre-7.0 Internet Explorers
    if (typeof XMLHttpRequest == "undefined") XMLHttpRequest = function() {
        try {
            return new ActiveXObject("Msxml2.XMLHTTP.6.0");
        } catch(e) {};
        try {
            return new ActiveXObject("Msxml2.XMLHTTP.3.0");
        } catch(e) {};
        try {
            return new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {};
        try {
            return new ActiveXObject("Microsoft.XMLHTTP");
        } catch(e) {};

        throw new Error("This browser does not support XMLHttpRequest or XMLHTTP.");
    };

    var request = new XMLHttpRequest();
    var url = "trigger_agent.php";

    if (p_text) {
        // ainus võimalus agendil kliendipoolselt teksti saata on vaikimise teade, stiilis: "Kas saan veel kuidagi aidata?"
        var poststr = "dummy=0" + "&lause=" + p_text;
    } else {
        var poststr = "dummy=0";
    }

    request.open("POST", url, true);
    request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    request.setRequestHeader("Content-length", poststr.length);
    request.setRequestHeader("Connection", "close");
    request.onreadystatechange = function() {
        if (request.readyState == 4 && request.status == 200) {
            if (request.responseText) {
                // eralda osaleja lausungist
                var temp_vestlus = request.responseText;
                var idx1 = temp_vestlus.indexOf("</o>");
                var osaleja = temp_vestlus.substring(3, idx1);
                var idx2 = temp_vestlus.indexOf("</l>");
                var lausung = temp_vestlus.substring(idx1 + 4 + 3, idx2);

				document.getElementById("tagasiside").innerHTML = '<p>kirjutab ...</p>';
				// Vestlusakna värskendamine kerge viivitusega
				t = window.setTimeout(function() {varskenda_vestlusaken(osaleja, lausung);}, 4000);
            }

        }
    };
    request.send(poststr);

}

function save_user_input(p_text) {

    // Bridge XMLHTTP to XMLHttpRequest in pre-7.0 Internet Explorers
    if (typeof XMLHttpRequest == "undefined") XMLHttpRequest = function() {
        try {
            return new ActiveXObject("Msxml2.XMLHTTP.6.0");
        } catch(e) {};
        try {
            return new ActiveXObject("Msxml2.XMLHTTP.3.0");
        } catch(e) {};
        try {
            return new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e) {};
        try {
            return new ActiveXObject("Microsoft.XMLHTTP");
        } catch(e) {};

        throw new Error("This browser does not support XMLHttpRequest or XMLHTTP.");
    };

    var request = new XMLHttpRequest();
    var url = "save_user_input.php";
    var poststr = "lause=" + encodeURIComponent(p_text);

    request.open("POST", url, true);
    request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    request.setRequestHeader("Content-length", poststr.length);
    request.setRequestHeader("Connection", "close");
    request.onreadystatechange = function() {
        if (request.readyState == 4 && request.status == 200) {
            if (request.responseText) {

                // eralda osaleja lausungist
                var temp_vestlus = request.responseText;
                var idx = temp_vestlus.indexOf("</o>");
                var osaleja = temp_vestlus.substring(3, idx);
                var lausung = temp_vestlus.substr(idx + 5);

				// Vestlusakna värskendamine
				varskenda_vestlusaken(osaleja, lausung);
            }
        }
    };
    request.send(poststr);
}

// lisame HTML-i alles siin, et oleks vähem võrguliiklust serveri ja kliendi vahel
function add_html(p_osaleja, p_lausung) {
     var vastus = "";

    if (p_lausung) {
        var currentTime = new Date();
        var tunnid = currentTime.getHours();
        if (tunnid < 10) {
            tunnid = "0" + tunnid;
        }
        var minutid = currentTime.getMinutes();
        if (minutid < 10) {
            minutid = "0" + minutid;
        }
        var aeg = tunnid + ":" + minutid;
        if (p_osaleja != "Sina") {
            vastus = "&lt;" + aeg + " " + p_osaleja + "&gt;" + ': <span class="text_green2">' + p_lausung + "</span><br />";
        } else {
            vastus = "&lt;" + aeg + " " + p_osaleja + "&gt;" + ': <span class="text_blue">' + p_lausung + "</span><br />";
        }
        return (vastus);
    }
}

// juhuslik arv vahemikus 6000 kuni 20000
function juhuarv() {
    return Math.floor(Math.random() * 14000) + 4000;
}

function process_input(p_text) {
    if (p_text) {
        // puhasta sisestusväli
        document.getElementById("tekst").value = "";
        document.getElementById("tekst").focus();
        var currentTime = new Date();

        kasutaja_sisendi_aeg = currentTime.getTime();

        flood_sisestuste_arv++;
        if (!flood_control_started) {
            flood_algusaeg = currentTime.getTime();
            flood_control_started = true;
        }

        // kas kahe sekundi jooksul tuli rohkem kui viis sisendit
        if (flood_sisestuste_arv >= 5 && kasutaja_sisendi_aeg - flood_algusaeg <= 3000) {
            flood_control_started = false;
            flood_sisestuste_arv = null;
            document.getElementById("user_input").innerHTML = "Palun suhtle veidi rahulikumalt. Tegid liiga kiirelt sisestusi. Paus 30 sek.";
            t = window.setTimeout(aktiveeri_sisestusaken, 30000);
        }

		if (kasutaja_sisendi_aeg - flood_algusaeg > 3000) {
			flood_sisestuste_arv = null;
			flood_algusaeg = null;
			flood_control_started = false;
		}

        // salvesta kasutaja lausung
        save_user_input(p_text);

        // aktiveeri agent  
        agent_vaikib = false;
    }
}

function enter_pressed(e) {
    var keycode;
    if (window.event) keycode = window.event.keyCode;
    else if (e) keycode = e.which;
    else return false;
    return (keycode == 13);
}

function repeat_trigger_agent() {
    // käivitab agendi iga 2 kuni 20 sekundi järel (juhuarv)
    // seejärel agent võib vastata, kuid ei pruugi

    // kui kasutajalt puudub sisend 2 minuti jooksul, siis ära kasutajaga räägi, kuni kasutaja uuesti ei alusta
    // muuda vastavalt ka agendi staatus (sees, eemal, kaua eemal)
    var currentTime = new Date();
    var aeg_praegu = currentTime.getTime();
    if (aeg_praegu - kasutaja_sisendi_aeg <= 120000) {
        document.getElementById("staatus").innerHTML = agendi_amet + ": " + agendi_nimi + " - <strong>sees</strong>";
        trigger_agent(null);
    } else if (aeg_praegu - kasutaja_sisendi_aeg > 120000 && aeg_praegu - kasutaja_sisendi_aeg <= 240000) {
        if (!agent_vaikib) {
            trigger_agent("CLIENT_ALERT=PAUS_OLI_PIKK");
            agent_vaikib = true;
        }
    } else {
        document.getElementById("staatus").innerHTML = agendi_amet + ": " + agendi_nimi + " - <strong>eemal</strong>";
    }

    t = window.setTimeout(repeat_trigger_agent, juhuarv());

}

function aktiveeri_sisestusaken() {
    document.getElementById("user_input").innerHTML = '<p>Sina: <input id="tekst" class="textbox" type="text" maxlength="120" onkeypress="if(enter_pressed(event)){process_input(tekst.value)}" /><button onclick="process_input(tekst.value)">&gt;&gt;</button></p>';
    document.getElementById("tekst").focus();
}

function varskenda_vestlusaken(p_osaleja, p_lausung, p_failinimi) {
	// luku kontroll
	if (transaction_busy) {
		// kui lukk oli peal, siis proovi mõne hetke pärast uuesti sama asja
		t = window.setTimeout(function() {varskenda_vestlusaken(p_osaleja, p_lausung);}, 100);
		return;
	} else {
	  transaction_busy = true; 
		// värskenda objektid
		var temp_div_contents = document.getElementById("code_id").innerHTML;
		document.getElementById("code_id").innerHTML = temp_div_contents + add_html(p_osaleja, p_lausung);
        if (p_osaleja != "Sina") {
			document.getElementById("tagasiside").innerHTML = '<p></p>';
		}
		var objDiv = document.getElementById("code_id");
		objDiv.scrollTop = objDiv.scrollHeight;
	  transaction_busy = false;

	}
}

function alusta() {
    document.getElementById("tekst").focus();
    var currentTime = new Date();
    kasutaja_sisendi_aeg = currentTime.getTime();
    repeat_trigger_agent();
}
