var kasutaja_sisendi_aeg = null;
var agendi_nimi = 'Alfred';
var agendi_amet = 'Vestleja';
var agent_vaikib = false;

var flood_control_started = false;
var flood_algusaeg = null;
var flood_sisestuste_arv = null;

var syntees = 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";
    }

	if (syntees) {
		poststr = poststr + "&syntees=J";
	}

    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, lausung (ja failinimi, kui sooviti kõnesünteesi)
                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);
				var failinimi = null;
             	if (syntees) {
					var idx3 = temp_vestlus.indexOf("</f>");
					failinimi = temp_vestlus.substring(idx2 + 4 + 3, idx3);
            	}

				document.getElementById("tagasiside").innerHTML = '<p>kirjutab ...</p>';
				// Vestlusakna värskendamine kerge viivitusega
				t = window.setTimeout(function() {varskenda_vestlusaken(osaleja, lausung, failinimi);}, 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 validate_chk(chk){
  if (chk.checked == 1) {
    // taheti kõnesünteesi, aga kontrollime kas flash versioon sobib
	var hasRequestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);
	if (hasRequestedVersion) {
		syntees = "J";
	} else { 
		syntees = null;
		document.getElementById("syntees_flash_chk").innerHTML = 'Heli kuulmiseks vajalik vähemalt Flash 9 olemasolu [<a href="http://get.adobe.com/flashplayer/">ok</a>].';
	}
  } else {
   syntees = null;
  }
}

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;

		if (p_osaleja != "Sina" && syntees) {
			p_failinimi = "http://kiisu.eki.ee" + p_failinimi + "?juhuarv=" + Math.random();
			soundManager.destroySound('helifail');
			soundManager.createSound('helifail', p_failinimi);
			soundManager.play('helifail');
		} 
	}
}

function alusta() {
    document.getElementById("tekst").focus();
    var currentTime = new Date();
    kasutaja_sisendi_aeg = currentTime.getTime();
    repeat_trigger_agent();
}