2 var vstupniPole = 'vstupniPole';
3 var vystupniPole = 'vystupniPole';
4 var napovedniPole = 'napovedniPole';
5 var stavovePole = 'stavovePole';
9 * Aby to fungovalo i v MSIE 6.
10 * @return AJAXový objekt.
12 function getXmlHttpRequestObject() {
13 if (window.XMLHttpRequest) {
14 return new XMLHttpRequest();
15 } else if(window.ActiveXObject) {
16 return new ActiveXObject("Microsoft.XMLHTTP");
18 alert(document.getElementById('lokalizace').nepodporovany.value);
24 /** Náš AJAXový objekt. */
25 var ajax = getXmlHttpRequestObject();
29 * Vrací vstup od uživatele.
30 * @return SQL příkaz zadaný uživatelem.
33 return document.getElementById('aplikace').vstupniPole.value;
38 * Zobrazí text na požadovaném místě.
39 * @param text text k zobrazení. V případě formulářů prostý text, v ostatních případech HTML text.
40 * @param kde id prvku, do kterého se má text vypsat.
42 function zobraz(text, kde) {
43 if (kde == vstupniPole) {
44 document.getElementById('aplikace').vstupniPole.value = vratEntity(text);
45 } else if (kde == stavovePole) {
46 document.getElementById('aplikace').stavovePole.value = vratEntity(text);
48 document.getElementById(kde).innerHTML = text + '<p> <!-- Šťastné hackování ;-) --></p>';
53 /** Jednoduchá AJAXová funkce, načte obsah souboru a zobrazí ho ve výstupním okně. */
54 function ajaxVykonatSQL() {
55 if (ajax.readyState == 4 || ajax.readyState == 0) {
56 zobraz(document.getElementById('lokalizace').probihaSQL.value, stavovePole);
57 ajax.open("POST", 'ajax.jspx?akce=vykonat&sql=' + encodeURIComponent(getSQL()), true);
58 ajax.onreadystatechange = function() {
59 if (ajax.readyState == 4) {
60 zobraz(ajax.responseText, vystupniPole);
61 zobraz('', stavovePole);
70 /** Jednoduchá AJAXová funkce, načte obsah souboru a zobrazí ho ve výstupním okně. */
71 function ajaxZobrazitHistorii() {
72 if (ajax.readyState == 4 || ajax.readyState == 0) {
73 zobraz(document.getElementById('lokalizace').probihaHistorie.value, stavovePole);
74 ajax.open("POST", 'ajax.jspx?akce=historie', true);
75 ajax.onreadystatechange = function() {
76 if (ajax.readyState == 4) {
77 zobraz(ajax.responseText, vystupniPole);
78 zobraz('', stavovePole);
86 var pruvodceAktualniId = 0;
87 var urlOdkaz = new Array();
88 urlOdkaz['pruvodce'] = null;
90 function ajaxPruvodcePredchozi() {
91 ajaxPruvodceNaviguj('predchozi', pruvodceAktualniId, null);
94 function ajaxPruvodceZpet() {
105 function ajaxPruvodceVpred() {
116 function ajaxPruvodceNasledujici() {
117 ajaxPruvodceNaviguj('nasledujici', pruvodceAktualniId, null);
120 function ajaxPruvodceKod(kod) {
121 ajaxPruvodceNaviguj('podleKodu', 0, kod);
124 function ajaxPruvodceId(id) {
125 ajaxPruvodceNaviguj('podleId', id, null);
129 function ajaxPruvodceNaviguj(akcePruvodce, id, kod) {
130 if (ajax.readyState == 4 || ajax.readyState == 0) {
131 ajax.open("POST", 'ajax.jspx?akce=napoveda&pruvodce=' + encodeURIComponent(akcePruvodce) + '&idPruvodce=' + encodeURIComponent(id) + '&kodPruvodce=' + encodeURIComponent(kod), true);
132 ajax.onreadystatechange = function() {
133 if (ajax.readyState == 4) {
134 zobraz(ajax.responseText, napovedniPole);
135 /** Uložíme si do paměti ID aktuální stránky */
136 if (document.getElementById('pruvodceData')) {
137 pruvodceAktualniId = document.getElementById('pruvodceData').id.value;
139 pruvodceAktualniId = 0;
141 /** Změníme URL v prohlížeči */
142 urlOdkaz['pruvodce'] = 'pruvodce=' + encodeURIComponent(pruvodceAktualniId);
153 * Parametry si ukládáme za # do URL (window.location.hash)
154 * Můžeme měnit URL, aniž by prohlížeč obnovoval stránku.
155 * Uživatel si může URL zkopírovat a obnovit si příště stav aplikace.
156 * @param parametr jméno parametru, který hledáme
157 * @return hodnota parametr
159 function getParametr(parametr) {
160 parametr = parametr.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
161 //var regexS = "[\\?&]"+parametr+"=([^&#]*)";
162 var regexS = "[\\#&]"+parametr+"=([^&]*)";
163 var regex = new RegExp( regexS );
164 var results = regex.exec(window.location.hash);
165 if ( results == null ) {
168 return decodeURIComponent(results[1]);
173 * Uloží parametry (jako je SQL příkaz a stránka průvodce) do URL (za #),
174 * aby si uživatel mohl URL zkopírovat a příště si obnovit stav aplikace.
177 if (urlOdkaz['pruvodce']) {
178 window.location.hash = urlOdkaz['pruvodce'] + '&sql=' + encodeURIComponent(getSQL());
180 window.location.hash = 'sql=' + encodeURIComponent(getSQL());
184 * Načte uložený stav aplikace z URL (SQL příkaz, průvodce).
186 function nactiURL() {
187 /** Načteme uživatelův SQL příkaz z URL do vstupního pole */
188 if (getParametr('sql')) {
189 zobraz(getParametr('sql'), vstupniPole);
192 /** Načteme pozici v nápovědě */
193 if (getParametr('pruvodce')) {
194 ajaxPruvodceId(getParametr('pruvodce'));
196 ajaxPruvodceKod('vitejte');
200 window.onload = function() {
202 document.getElementById("zahlavi").addEventListener('click', function () {
203 ajaxPruvodceKod('vitejte');
208 * Přidá <pre> elementům v průvodci akci onclick,
209 * která se postará o načtení obsahu daného elementu do vstupního pole,
210 * aby uživatel tento kód nemusel opisovat.
212 * Zpracuje odkazy na průvodce:
213 * převede href="@klíč" na správný javascriptový odkaz.
215 function aktivujPruvodce() {
216 /** Ukázky SQL kódu */
217 elementy = document.getElementsByTagName("pre");
218 for (var i = 0; i < elementy.length; i++) {
219 if (elementy[i].parentNode.id == napovedniPole) {
220 elementy[i].title = document.getElementById('lokalizace').klikniProNacteniPrikladu.value;
221 elementy[i].onclick = function() {
222 zobraz(this.innerHTML, 'vstupniPole');
228 /** Aktivace interních odkazů na průvodce */
229 elementy = document.getElementsByTagName("a");
230 for (var j = 0; j < elementy.length; j++) {
231 var odkaz = elementy[j].getAttribute("href");
232 if (odkaz.substring(0, 1) == '@') {
233 elementy[j].href = "javascript:ajaxPruvodceKod('" + odkaz.substring(1, odkaz.length) + "');";
239 * Přidá <td> elementům v historii akci onclick,
240 * která se postará o načtení obsahu daného elementu do vstupního pole,
241 * aby uživatel tento kód nemusel opisovat.
243 function aktivujHistorii() {
244 radky = document.getElementsByTagName("tr");
245 for (var i = 1; i < radky.length; i++) {
246 if (radky[i].parentNode.parentNode.parentNode.id == vystupniPole) {
247 radky[i].childNodes[1].title = document.getElementById('lokalizace').klikniProNacteniHistorie.value;
248 radky[i].childNodes[1].style.cursor = 'pointer';
249 radky[i].childNodes[1].onclick = function() {
250 zobraz(this.innerHTML, 'vstupniPole');
258 * Převede HTML entity zpět na znaky,
259 * aby se správně zobrazily ve vstupním nebo stavovém poli.
261 function vratEntity (text) {
263 vysledek = vysledek.replace(new RegExp('<', 'g'), '<');
264 vysledek = vysledek.replace(new RegExp('>', 'g'), '>');
265 vysledek = vysledek.replace(new RegExp('&', 'g'), '&');
266 vysledek = vysledek.replace(new RegExp(' ', 'g'), ' ');
267 vysledek = vysledek.replace(new RegExp(' ', 'g'), ' ');
272 * Načte dynamicky soubor se skriptem.
273 * url = název souboru.js
275 function nactiJavaScript (url) {
276 var element = document.createElement("script");
278 element.type = "text/javascript";
279 document.getElementsByTagName("head")[0].appendChild(element);