java/nekurak.net-web/web/js/chat.js
author František Kučera <franta-hg@frantovo.cz>
Wed Jun 30 00:26:14 2010 +0200 (2010-06-30)
changeset 149 8238cdb4113a
child 204 bebec432330a
permissions -rw-r--r--
XMPP chat – první verze.
franta-hg@149
     1
/** TODO: jQuery */
franta-hg@149
     2
/** TODO: neglobální funkce */
franta-hg@149
     3
franta-hg@149
     4
var intervalObnovy = 2000;
franta-hg@149
     5
var poradoveCislo = 0;
franta-hg@149
     6
franta-hg@149
     7
function setRychlostObnovy(interval) {
franta-hg@149
     8
    clearTimeout(t);
franta-hg@149
     9
    intervalObnovy = interval;
franta-hg@149
    10
    spustCasovac();
franta-hg@149
    11
}
franta-hg@149
    12
franta-hg@149
    13
function getXmlHttpRequestObject() {
franta-hg@149
    14
    if (window.XMLHttpRequest) {
franta-hg@149
    15
	return new XMLHttpRequest();
franta-hg@149
    16
    } else if(window.ActiveXObject) {
franta-hg@149
    17
	return new ActiveXObject("Microsoft.XMLHTTP");
franta-hg@149
    18
    } else {
franta-hg@149
    19
	alert("Nepodporovaný prohlížeč.");
franta-hg@149
    20
	return null;
franta-hg@149
    21
    }
franta-hg@149
    22
}
franta-hg@149
    23
franta-hg@149
    24
/** Náš AJAXový objekt. */
franta-hg@149
    25
var ajax = getXmlHttpRequestObject();
franta-hg@149
    26
franta-hg@149
    27
function getMistnost() {
franta-hg@149
    28
    return document.getElementById("odesilaciFormular").mistnost.value;
franta-hg@149
    29
}
franta-hg@149
    30
franta-hg@149
    31
function getOd() {
franta-hg@149
    32
    return document.getElementById("odesilaciFormular").od.value;
franta-hg@149
    33
}
franta-hg@149
    34
franta-hg@149
    35
function getZprava() {
franta-hg@149
    36
    return document.getElementById("odesilaciFormular").text.value;
franta-hg@149
    37
}
franta-hg@149
    38
franta-hg@149
    39
function vymazTextZpravy() {
franta-hg@149
    40
    document.getElementById("odesilaciFormular").text.value = "";
franta-hg@149
    41
}
franta-hg@149
    42
franta-hg@149
    43
function ajaxOdesli() {
franta-hg@149
    44
    if (ajax.readyState == 4 || ajax.readyState == 0) {
franta-hg@149
    45
	ajax.open("POST", "?akce=chat&akceChat=odesli&mistnost=" + encodeURIComponent(getMistnost()) + "&od=" + encodeURIComponent(getOd()) + "&zprava=" + encodeURIComponent(getZprava()), true);
franta-hg@149
    46
	ajax.onreadystatechange = function() {
franta-hg@149
    47
	    if (ajax.readyState == 4) {
franta-hg@149
    48
		vymazTextZpravy();
franta-hg@149
    49
		aktualizujVypisZprav();
franta-hg@149
    50
	    }
franta-hg@149
    51
	};
franta-hg@149
    52
	ajax.send(null);
franta-hg@149
    53
    }
franta-hg@149
    54
}
franta-hg@149
    55
franta-hg@149
    56
function aktualizujVypisZprav() {
franta-hg@149
    57
    if (ajax.readyState == 4 || ajax.readyState == 0) {
franta-hg@149
    58
	ajax.open("POST", "?akce=chat&akceChat=vypis&mistnost=" + encodeURIComponent(getMistnost()), true);
franta-hg@149
    59
	ajax.onreadystatechange = function() {
franta-hg@149
    60
	    if (ajax.readyState == 4) {
franta-hg@149
    61
		zpracujZpravy(ajax.responseXML);
franta-hg@149
    62
		document.getElementById("vypisZprav").scrollTop = 100000;
franta-hg@149
    63
	    }
franta-hg@149
    64
	};
franta-hg@149
    65
	ajax.send(null);
franta-hg@149
    66
    }
franta-hg@149
    67
}
franta-hg@149
    68
franta-hg@149
    69
function ziskejVnitrekXML(data, element) {
franta-hg@149
    70
    try {
franta-hg@149
    71
	return data.getElementsByTagName(element)[0].firstChild.nodeValue;
franta-hg@149
    72
    } catch (e) {
franta-hg@149
    73
	return "";
franta-hg@149
    74
    }
franta-hg@149
    75
}
franta-hg@149
    76
franta-hg@149
    77
function zpracujZpravy(xmlOdpoved) {
franta-hg@149
    78
    var vypisZprav = document.getElementById("vypisZprav");
franta-hg@149
    79
    var zpravy = xmlOdpoved.getElementsByTagName("zprava");
franta-hg@149
    80
    vypisZprav.innerHTML = "";
franta-hg@149
    81
    var elementUl = document.createElement("ul");
franta-hg@149
    82
    vypisZprav.appendChild(elementUl);
franta-hg@149
    83
franta-hg@149
    84
    for (i = 0; i < zpravy.length; i++) {
franta-hg@149
    85
	var od = ziskejVnitrekXML(zpravy[i], "od");
franta-hg@149
    86
	var text = ziskejVnitrekXML(zpravy[i], "text");
franta-hg@149
    87
	var kdy = ziskejVnitrekXML(zpravy[i], "kdy");
franta-hg@149
    88
	var overeny = ziskejVnitrekXML(zpravy[i], "overeny");
franta-hg@149
    89
	poradoveCislo = ziskejVnitrekXML(zpravy[i], "poradoveCislo");
franta-hg@149
    90
franta-hg@149
    91
	var elementLi = document.createElement("li");
franta-hg@149
    92
	elementLi.title = kdy;
franta-hg@149
    93
franta-hg@149
    94
	var elementOd = document.createElement("strong");
franta-hg@149
    95
	elementOd.textContent = od;
franta-hg@149
    96
	elementLi.appendChild(elementOd);
franta-hg@149
    97
	elementLi.appendChild(document.createTextNode(": "));
franta-hg@149
    98
franta-hg@149
    99
	var elementText = document.createElement("span");
franta-hg@149
   100
	elementText.textContent = text;
franta-hg@149
   101
franta-hg@149
   102
	/**
franta-hg@149
   103
	 * Ověřený je takový uživatel,
franta-hg@149
   104
	 * který se přihlásil normálně přes Jabber a vstoupil do místnosti pod svojí přezdívkou.
franta-hg@149
   105
	 * Uživatelé z webu jsou anonymové a připojují se k XMPP pod společným účtem.
franta-hg@149
   106
	 * Svoji přezdívku si vyplňují sami a přenášíme ji zvlášť.
franta-hg@149
   107
	 * Proto odlišíme tyto dvě skupiny uživatelů jinou barvou jejich příspěvku.
franta-hg@149
   108
	 */
franta-hg@149
   109
	if (overeny == "true") {
franta-hg@149
   110
	}
franta-hg@149
   111
	    // zprávu můžeme zvýraznit
franta-hg@149
   112
	} else {
franta-hg@149
   113
	    elementText.style.color = "#444444";
franta-hg@149
   114
	}
franta-hg@149
   115
	elementLi.appendChild(elementText);
franta-hg@149
   116
franta-hg@149
   117
	elementUl.appendChild(elementLi);
franta-hg@149
   118
    }
franta-hg@149
   119
}
franta-hg@149
   120
franta-hg@149
   121
var t;
franta-hg@149
   122
franta-hg@149
   123
function spustCasovac() {
franta-hg@149
   124
    aktualizujVypisZprav();
franta-hg@149
   125
    
franta-hg@149
   126
    t = setTimeout(function () {
franta-hg@149
   127
	aktualizujVypisZprav();
franta-hg@149
   128
	spustCasovac();
franta-hg@149
   129
    }, intervalObnovy);
franta-hg@149
   130
}