/*function getElement(e, f) { if (document.layers) { f = (f) ? f : self if (f.document.layers[e]) return f.document.layers[e] for (W = 0; i < f.document.layers.length; W++) { return(getElement(e, fdocument.layers[W])) } } if (document.all) return document.all[e] return document.getElementById(e) } */ function olFocus(elem) { getElement(elem).select(); getElement(elem).focus(); } /** * Show / hide element. * * @param object $element Element object. * @return void */ function show(element) { if (element.style.display == 'block') { element.setAttribute('style', 'display:none;'); element.style.display = 'none'; } else { element.setAttribute('style', 'display:block;'); element.style.display = 'block'; } return true; } function getElementPosition(obj) { var curleft = 0; var curtop = 0; if (obj.offsetParent) { curleft = obj.offsetLeft curtop = obj.offsetTop while (obj = obj.offsetParent) { curleft += obj.offsetLeft curtop += obj.offsetTop } } return {curleft:curleft,curtop:curtop}; } function legend(parentElem, elem) { var e = getElement(elem).style; var pe = getElementPosition(parentElem); var sc = getElementPosition(document.getElementById('main')); if (e.display == 'none') { e.left = pe.curleft+10+'px'; e.top = pe.curtop-sc.curtop+130+'px'; e.display = 'block'; } else e.display = 'none'; } /** * Remove selected user from multi combo box. * * @param string $element Parent element, where need remove users from list. * @return void */ function rem_sel_user(element) { var e = getElement(element); var e_rem; for (var i = e.options.length-1; i >= 0; i--) { if (e.options[i].selected == true) { e.removeChild(e.options[i]); } } if (e.id == 'sel-ignore') { e_rem = 'ignore'; } else { e_rem = 'highlight'; } if (e.options.length == 0) { var opt = document.createElement('option'); opt.value = ''; opt.setAttribute('id', 'u'+(e_rem == 'ignore' ? 'i' : 'h')+'0'); opt.appendChild(document.createTextNode('')); getElement('sel-'+e_rem).appendChild(opt); } getElement('rem-'+e_rem).disabled = true; enable_reload(); } /** * Reset all settings on filter and deactive it. * * @return void */ function reset_filter() { if (confirm('Opravdu chcete vymazat filtr?')); { getElement('search-user').value = ''; getElement('user-only').value = ''; var e = getElement('sel-highlight'); for (var i = e.options.length-1; i >= 0; i--) { e.removeChild(e.options[i]); } e = getElement('sel-ignore'); for (var i = e.options.length-1; i >= 0; i--) { e.removeChild(e.options[i]); } u_filter('0'); } } /** * Enable filter button. * * @return void */ function enable_reload() { if (getElement('filter').value == 'Deaktivovat') { getElement('filter_reload').disabled = false; } else { getElement('filter_reload').disabled = false; getElement('filter_reload').style.display = ''; } } /** * Enable / disable add user button. * * @param object $element Object of element, which enable or disable. * @return void. */ function enable_add(element) { var te = 'add-'+(element == 'h' ? 'highlight' : 'ignore'); var e = getElement(te); if (e.value.length > 0) { getElement('b'+te).disabled = false; } else { getElement('b'+te).disabled = true; } } /** * Show reload filter button. * * @return void */ var last_search; var last_only; /** * Check value filter by user only button and if value is changed, reload filter. * * @return void */ function check_search() { var value = getElement('search-user').value; check_length(getElement('search-user'), 64); if (value.length >= 3 && value != last_search) { if (getElement('filter').value == 'Aktivovat') { getElement('filter').disabled = false; } else { enable_reload(); } } else { getElement('filter_reload').disabled = true; } if (last_search == undefined) { last_search = getElement('search-user').value; } } /** * Check value filter by user only button and if value is changed, reload filter. * * @return void */ function check_only() { var value = getElement('user-only').value; var sel = getElement('sel-ignore').options; last_only = getElement('user-only'); check_length(getElement('user-only'), 64); if (value != last_only) { for (var i = 0; i < sel.length; i++) { if (sel[i].text == value && sel[i].text != '') { alert('Uživatel je již mezi ignorovanými, nelze zobrazit pouze jeho příspěvky.'); getElement('user-only').value = ''; return false; } } if (value != '') { create_xhr(); xhr.onreadystatechange = _c_user; xhr.open('GET', '/diskuze/ajax/check_user.php?user='+value); xhr.send(null); } else { enable_reload(); } } } /** * AJAX function for check username and fill it. * * @return void */ function _c_user() { if (xhr.readyState == 4) { if (xhr.status == 200) { var opt = document.createElement('option'); var xml = xhr.responseXML.getElementsByTagName('user')[0]; if (xml.hasChildNodes()) { if (xhr.responseXML.getElementsByTagName('nick')[0].firstChild.textContent == undefined) // M$ fix { nick = xhr.responseXML.getElementsByTagName('nick')[0].firstChild.text; id = xhr.responseXML.getElementsByTagName('id')[0].firstChild.text; next = xhr.responseXML.getElementsByTagName('next')[0].firstChild.text; } else { nick = xhr.responseXML.getElementsByTagName('nick')[0].firstChild.textContent; id = xhr.responseXML.getElementsByTagName('id')[0].firstChild.textContent; next = xhr.responseXML.getElementsByTagName('next')[0].firstChild.textContent; } if (next == '1') { if (confirm('Zadaný uživatel neexistuje.'+"\n"+'Nejbližší uživatel je: '+nick+".\nChcete totoho uživatele zadat?")) { sel = getElement('sel-ignore').options; for (var i = 0; i < sel.length; i++) { if (sel[i].text == nick) { alert('Uživatel je již mezi ignorovanými a nelze zároveň filtrovat pouze jeho příspěvky.'); getElement('user-only').value = ''; return false; } } getElement('user-only').value = nick; last_only = nick; if (getElement('filter').value == 'Deaktivovat') { enable_reload(); } else { getElement('filter').disabled = false; } } else { getElement('user-only').value = ''; } } else { getElement('user-only').value = nick; last_only = nick; if (getElement('filter').value == 'Deaktivovat') { enable_reload(); } else { getElement('filter').disabled = false; } //enable_reload(); } } else if (getElement('user-only').value == '') { last_only = nick; if (getElement('filter').value == 'Deaktivovat') { enable_reload(); } else { getElement('filter').disabled = false; } //enable_reload(); } else { alert('Uživatel neexistuje.'); } } } } function reload() { u_filter('1'); } function hide(element) { var e = getElement(element); var stat = '0'; var cl; if ((cl = e.getAttribute('class')) == undefined) { cl = e.getAttribute('className'); } if (cl == 'hide') { e.removeAttribute('class'); e.removeAttribute('className'); getElement('uf-min').innerHTML = 'Minimalizovat'; stat = '1'; } else { e.setAttribute('class', 'hide'); e.setAttribute('className', 'hide'); getElement('uf-min').innerHTML = 'Maximalizovat'; } create_xhr(); xhr.open('GET', '/diskuze/ajax/change-filter-stat.php?stat='+stat); xhr.send(null); } /** * Enable button. * * @param string $element Button ID, which you can enable. * @return void */ function enable_clear(element) { var e = getElement('rem-'+element); var sel = getElement('sel-'+element); if (sel.options.length > 0) { e.setAttribute('disabled', ''); e.disabled = false; } } /** * Return key code. * * @param $e Event * @return string */ function get_keycode(e) { keycode = e? e.which:event.keyCode; return keycode; } /** * Delete users on combo box if press delete key. * * @param object $element ID of paranet combo box, where delete user. * @return void */ function del_user(element, e) { var keycode = get_keycode(e); // key code: 46 = DELETE if (keycode == '46') { /*for (var i = element.options.length-1; i >= 0; i--) { if (element.options[i].selected == true) { element.removeChild(element.options[i]); } }*/ rem_sel_user(element.id); } } /** * Add user to ignored combo box. * * @param integer user_id User ID. * @param sring nick Nickname. * @return void */ function add_ignore(user_id, nick) { var opt = document.createElement('option'); var err = false; var mes = ''; if (check_in_combo('sel-ignore', nick) == true) { mes = 'Uživatel ve výběru již existuje.'; err = true; } if (err === false && getElement('user-only').value == nick) { mes = 'Uživatele nelze přidat mezi ignorované.'+"\n"+"Je již zadán v poli 'Zobrazit jen uživatele'."; err = true; } if (err === true) { alert(mes); return false; } if (confirm('Opravdu ignorovat uživatele?')) { remove_empty('sel-ignore'); opt.value = user_id; opt.setAttribute('id', 'ui'+user_id); opt.appendChild(document.createTextNode(nick)); getElement('sel-ignore').appendChild(opt); reload(); if (getElement('filter').value == 'Aktivovat') { getElement('filter').disabled = false; } } } /** * Remove empty value in combo box. * * @param string $element ID of combo box. * @return void */ function remove_empty(element) { var e_name; if (element == 'sel-ignore') { e_name = 'ui0'; } else { e_name = 'uh0'; } if (getElement(e_name) != null) { sel = getElement(element); sel.removeChild(sel.options[getElement(e_name).index]); } } /** * Add user to highlighted user combo box. * * @param string $user_id ID user. * @param string $nick Nickname. * @return void */ function add_high(user_id, nick) { var opt = document.createElement('option'); if (check_in_combo('sel-highlight', nick) == true) { alert('Uživatel ve výběru již existuje.'); return false; } if (check_in_combo('sel-ignore', nick) == true) { alert('Uživatele nelze přidat mezi zvýrazněné.'+"\n"+"Je již zadán mezi ignorovanými uživateli."); return false; } remove_empty('sel-highlight'); opt.value = user_id; opt.setAttribute('id', 'uh'+user_id); opt.appendChild(document.createTextNode(nick)); getElement('sel-highlight').appendChild(opt); reload(); } /** * Add user to only user filter. * * @param string $nick Nickname. * @return void */ function add_only(nick) { if (check_in_combo('sel-ignore', nick) == true) { alert('Uživatele nelze přidat.'+"\n"+'Je už označen jako ignorovaný.'); return false; } getElement('user-only').value = nick; reload(); } function check_in_combo(combo, value) { var sel = getElement(combo).options; for (var i = 0; i < sel.length; i++) { if (sel[i].text == value) { return true; } } return false; } // XHR functions {{{ var xhr; var pElem; function create_xhr() { if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else if (window.ActiveXObject) { xhr = new ActiveXObject('Microsoft.XMLHTTP'); } else { alert('Nelze vytvořit XMLHttpRequest objekt.'); } } function show_xhr_error() { alert('Chyba objektu XMLHttpRequest'+"\n"+'Kod: '+xhr.status+"\n"+'Chyba: '+xhr.text); } // get hostname {{{ function host(ip, parentElement) { pElem = getElement('id'+parentElement); create_xhr(); xhr.onreadystatechange = get_hostname; xhr.open('GET', '/get_hostname.php?ip='+ip, true); xhr.send(null); } function get_hostname() { if (xhr.readyState == 4) { if (xhr.status == 200) { pElem.innerHTML = xhr.responseText; pElem.title = ''; pElem.style.cursor = 'auto'; } else { show_xhr_error(); } } } // }}} // add new expletive word {{{ function add_wrong() { if (getElement('new_wrong').value.length > 3) { create_xhr(); var url = 'word='+getElement('new_wrong').value; xhr.onreadystatechange = _add_wrong; xhr.open('POST', '/diskuze/ajax/add-expletive.php'); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;"); xhr.send(url); } else { getElement('add_result').innerHTML = 'Slovo musí mít nejméně 4 znaky.'; } } function _add_wrong() { if (xhr.readyState == 4) { if (xhr.status == 200) { getElement('add_result').innerHTML = xhr.responseText; getElement('new_wrong').value = ''; } else { show_xhr_error(); } } } // }}} // user search functions {{{ var user; var sel; function add_user(element) { var id = element.name; if (id == 'add_highlight') { user = getElement('add-highlight'); sel = getElement('sel-highlight'); if (check_in_combo('sel-ignore', user.value)) { alert('Uživatele nelze přidat mezi zvýrazněné.'+"\n"+"Je již zadán mezi ignorovanými uživateli."); user.value = ''; return false; } } else { user = getElement('add-ignore'); sel = getElement('sel-ignore'); if (check_in_combo('sel-highlight', user.value)) { alert('Uživatele nelze přidat mezi ignorované.'+"\n"+"Je již zadán mezi zvýrazněnými uživateli."); user.value = ''; return false; } } if (sel.options.length >= 50) { alert('Překročen maximální počet zadaných uživatelů (limit = 50)'); return false; } if (check_in_combo(sel.id, user.value)) { alert('Uživatel již ve výběru existuje'); user.value = ''; return false; } if (user.value != '') { create_xhr(); xhr.onreadystatechange = _check_user; xhr.open('GET', '/diskuze/ajax/check_user.php?user='+user.value, true); xhr.send(null); } } function _check_user() { if (xhr.readyState == 4) { if (xhr.status == 200) { var opt = document.createElement('option'); if (xhr.responseXML.getElementsByTagName('user')[0].hasChildNodes()) { var uid; if (xhr.responseXML.getElementsByTagName('id')[0].firstChild.textContent == undefined) // M$ fix { uid = xhr.responseXML.getElementsByTagName('id')[0].firstChild.text; value = xhr.responseXML.getElementsByTagName('nick')[0].firstChild.text; nick = xhr.responseXML.getElementsByTagName('nick')[0].firstChild.text; } else // valid browsers { uid = xhr.responseXML.getElementsByTagName('id')[0].firstChild.textContent; value = xhr.responseXML.getElementsByTagName('nick')[0].firstChild.textContent; nick = xhr.responseXML.getElementsByTagName('nick')[0].firstChild.textContent; } remove_empty(sel.id); opt.value = value opt.setAttribute('id', 'u'+(sel.id == 'sel-highlight' ? 'h' : 'i')+uid); opt.appendChild(document.createTextNode(nick)); sel.appendChild(opt); user.value = ''; if (getElement('filter').value == 'Aktivovat') { getElement('filter').disabled = false; } else { enable_reload(); } } else { alert('Uživatel neexistuje.'); } } else { show_xhr_error(); } } } // }}} // enable / disable user filter {{{ function _user_filter() { if (xhr.readyState == 4) { if (xhr.status == 200) { document.location = getElement('forum').action; } else { show_xhr_error(); } } } /** * Active / deaktive user filter. * * @param integer $status New filter status. *