/*
+----------------------------------------------------+
|
| BiblieMachine - BibliaGép
| 
| Írta: Váradi Attila
|
+----------------------------------------------------+
| 
| Használat:
|
| Új igehely felvétele:
|   felvesz('hely', 'igeszöveg, "ha kell, idézőjelekkel"');
|
| 


*/
 
// A fut állapotváltozó lehetséges értékei:
//   <0 : már el van minden indítva, ne induljon semmi újra.
//   =0 : nem fut a találomra kiválasztás ==>talalomra();
//   =1 : fut a találomra kiválasztás
//   =2 : fut a találomra kiválasztás, és ő hívta meg a megjelenítő függvényt ==>megjelenit(*,true);


var fut=(alap?fut-3:0);  //többszöri-elindítás védelem, negatív számot csinál, ha kell.


if (!igek) var igek={};  //ide kerülnek az igek stringjei. Asszociatív tömb, igehely stringgel címezhető.
if (!igeHelyek) var igeHelyek = new Array();  //ide kerülnek a címzéshez szolgáló igehelyek.
var utsoHely=false;  //hivatkozássorozat készítésekor a "." "," ";" eldöntéséhez kell
var statuszsor=false;  //későbbi felhasználásra

var futhat = true;  //a találomra kiválasztás függvény futhat-e? ==>talalomra();
var sebesseg = 50;  //görgetési sebesség
var varakozas = 3000;  //későbbi felhasználásra
var karakterszam = 100;  //ennyi karakter látszódjon a státuszsorban
var karakterszam2;   //segédváltozó a program számára
var minKarakterszam=30; //ha ennél kisebb az üzenet hossza, akkor vár a görgetés
var uzenet="";   //a kiírandó üzenet szövege
var azonosito;   //megjelenítő szál számára ==>felepit(); gorget();
var azonosito2;  //automatizált találomra-kiválasztott ige szál számára ==>megszakit(); talalomra_();
var szele=0;     //az utolsó vett karakter pozíciója az üzenetből, ami éppen kiíródik
var alap='Kegyelem és békesség az Igefórumban - www.igeforum.com';  //alap window.status érték
var inaktiv="A BibliaGép ezen az oldalon nincs aktiválva.";  //ha a BG nem aktív, a window.status legyen erre állítva.
var leallitva="A BibliaGép leállítva.";  //a leállításvezérlő függvény hívása után erre vált a státuszsor. ==>leallit(); 
var teszt=false;  //a Generátor használja. Ez esetben nem a document-re írja a cimkézésnél, 
                  //hanem csak visszaadja a kiírandó szöveget későbbi felhasználásra. ==>felcimkez();
var cimkeStyles="cursor:default;color:blue;font-size:10";
var ksz=0;  //kurzor időszámláló ==>kurzor();
var kseb=40;  //villogási sebesség. Ha kisebb, gyorsabb.
var kfriss=10;  //kurzor átbillenéshez
var kfuthat=1;  //kurzor futhat-e? vezérlőfüggvényekkel állítható. ==> function kurzorBekapcs(); function kurzorKiekapcs;
var kjel= "_"; //kurzor jele


function felvesz(hely, ige){  //új igehely felvétele
  if (igek[hely]==null) {
    igek[hely]=ige;   //asszociatív sztringgel címezhető tömbbe felvétel. (hely típusa sztring)
    igeHelyek[igeHelyek.length]=hely;  //igehely megjegyzése
  }
}

function megjegyzes(htmlKod, szoveg) { // a html oldalban linkként megjelenített kódhoz megjegyzést lehet írni a státussorba.
  var a=
     //dőlt és vastag betű
     "<i><b>"

      //html <span> tag kezdete
    +"<span"

      //ettől fog futni, ha rámozogsz és megállni, ha lemozogsz egérrel:
    +" style='"+cimkeStyles+"' onMouseOver='return overlib(\""+szoveg+"\", CAPTION, \"Megjegyzés\");' onMouseOut='return nd(200);'"
      //<span> tag vége
    +">*"

      //ide jön a kiírandó html kód, amit lát a felhasználó
    +htmlKod

      //</span> lezárótag
    +"</span>"

      //ha vége, akkor a dőlt és vastag betűt megszünteti
    +"</b></i>";

//  alert (a);  //opcionális kiíratás, hibakereséshez

  if (!teszt) {
    document.write(a);     //normál mód mód esetén a documnet-re ír és
    return "";             // a visszaadott érték lényegtelen.
  }
  else         //teszt mód esetén visszaadja a kiírandó szöveget
    return a;  // de nem ír a document-re.
}

function felcimkez(hely, vege) {  //a html oldalban linkként megjeleníti a helyet. Ha rámutat az egér, futni kezd az ige
  kiemelt=false;  
  felveve=true;

  if (hely.search (">") == 0 ) {hely=hely.substr(1); kiemelt=true}    //más színnel is megjeleníthető.
  if (!igek[hely]) {alert (hely +" nincs felvéve!"); felveve=false;}  //ha nincs felvéve, ugat.

  konyv=/^[^ ]*/.exec(hely);
  fejezet=/ \d*[,:]/.exec(hely);
  vers=/[^,:]*$/.exec(hely);
  pontosvesszo=false;
  if (!utsoHely) _hely=hely;
  else if(utsoHely.search(konyv + fejezet) != -1) _hely= '.' + vers;
  else if(utsoHely.search(konyv) != -1) { _hely= fejezet + vers; pontosvesszo= true; }
  else { _hely=hely; pontosvesszo= true; }

  // a html oldalba kiírandó szöveg felépítése

  var a=

      //mi legyen előtte? ; vagy semmi?
    (pontosvesszo?"; ":(!utsoHely?"<i style='"+cimkeStyles+"'><b>":" "))  

      //html <span> tag kezdete
    +"<span"

      //ettől fog futni, ha rámozogsz és megállni, ha lemozogsz egérrel:
    +(felveve? (" onMouseOver='return overlib(igek[\""+hely+"\"], CAPTION, \""+hely+"\");' onMouseOut='return nd(200);'"):"")  


      //ettől lesz sárga. A 'kiemelt' osztály szerepeljen az oldal stílusában!
      //pl: egy ./myStyle.css fájlban: a.kiemelt {color:yellow;}
    +(kiemelt? " class='kiemelt'":"")

      //<span> tag vége
    +">"

      //ide jön a kiírandó igehely, amit lát a felhasználó
    +_hely

      //</span> lezárótag
    +"</span>"

      //ha vége, akkor a dőltbetűt megszünteti
    +(vege?"</b></i>":"");

//  alert (a);  //opcionális kiíratás, hibakereséshez


  if (vege) {              //ha vége, törli az utolsó helyet, hogy a
    utsoHely=false;        //következő hivatkozássorozat ne ;-vel vagy .-tal kezdődjön
  } else {             //amúgy meg eltárolja a mostani igehelyet
    utsoHely=hely;
  }
  if (!teszt) {
    document.write(a);     //normál mód mód esetén a documnet-re ír és
    return "";             // a visszaadott érték lényegtelen.
  }
  else         //teszt mód esetén visszaadja a kiírandó szöveget
    return a;  // de nem ír a document-re.
}


function cimkek() {  //itt lehet megadni a hivatkozássorozatot pl cimkek('Jn. 3,16', 'Jn. 1,1');
  b="";
  for (var i=0; i < arguments.length-1; i++) {
    b+=felcimkez(arguments[i], false);
    if (i==1000) {alert('1000-nél nem lehet több felvétel!'); return;}
  }
  b+=felcimkez(arguments[i], true);
  if (teszt) { return b;}
  else return "";
} 


function cimke(hely) {  //egy címkét készít csak. Használata megegyezik a cimkek('csakegyigehely') meghívással.
  felcimkez(hely, true);
}

var dok;

function megszakit () {  //megszakítja az üzenet kiírást.
  clearInterval(azonosito);
  window.status=(futhat?alap:leallitva);  //státuszsor szövege
  if (fut && futhat) {  //ha amúgy futna a találomra kiválasztás, akkor azt visszakapcsolja
    azonosito2=setTimeout('talalomra_()',3000);
    fut=1;
  }
  szele=0;  //a futó üzenet széle 0 legyen. Ez jelzi azt is, hogy a megszakítás már megtörtént.
}

function megjelenit(uz,f) {  //a szövegmegjelenítő funkció, ami inicializálja a felépítést és a görgetést
  clearTimeout(azonosito2); //ha fut a találomra kiválasztás, akkor azt kikapcsolja

  //állapotválasztás
  //ha f true, akkor a talalomra_() függvény hívta meg, tehát fut legyen 2.
  //Amúgy ha f false, akkor ha fut nem 0 (pl. -1, -2, 1), csináljon belőle 1-et.
  //Amúgy fut maradjon 0.

  fut=(f?2:(fut?1:0));  


  clearInterval(azonosito);  //eddigi görgetés megállítása
  uzenet=uz;  //a kiírandó üzenet felvétele
  szele=0;    //jelenleg kiírt üzenet széle még nulla


  //ha az üzenet kicsi (hamarabb van vége, minthogy felépítené), akkor
  //a felépítés az üzenethossz elérésekor, amúgy meg a maximálisan kiírandó 
  //karakterszám felépítése után vált át görgetésbe

  karakterszam2 = (karakterszam>uz.length?uz.length:karakterszam);  //ettől függ, mikor kezdi el görgetni
  azonosito=setInterval('felepit()', sebesseg);  //a felépítés szál elindítása
}



function felepit() {  //ez az a függvény, ami működése alatt jobbra haladva szépen kiíródik az üzenet eleje
  window.status = uzenet.substring(szele,0)+(ksz>0?kjel:'');  //ha van kurzor, azt is figyelembe veszi
  szele++;  //a széle egyel nőtt
  if (szele==karakterszam2) {  //ha a széle eléri a kelletét, akkor elkezd görgetni
    clearInterval(azonosito);  //előbb leállítja önmagát
    varni=minKarakterszam-uzenet.length;
    azonosito=setInterval('gorget()', sebesseg);  //aztán beindítja a görgetést
  }
}

function gorget() {
  window.status = uzenet.substring(szele,szele-karakterszam2)+ (ksz>0?kjel:'');  //kurzort is

  //leállítás, ha a széle elér egy összeget
  if ( szele==uzenet.length*2 //ha kicsi volt az üzenet, akkor a széle az üzenethossz duplájáig nőtt csak
    || szele==uzenet.length+karakterszam) {  //amúgy meg felépített karakterszámnyit és görgetett üzenethossznyit
    megszakit();
    return;
  }
  if (varni>0) {varni--; return;}
  szele++;
}

function talalomra() {  //ezt kell kívülröl meghívni, ha akarunk találomra kiválasztást saját honlapunkon.
  if(!fut) {fut=1; talalomra_();}  //többszöri-elindítás védelem és állapotváltozó beállítás
}

function talalomra_() {  //ez a lényegi rész
  if (!futhat) {return;}  //ha le van állítva, akkor már nem indul újra (a régit még befejezi) ==>leallit();
  var ry=Math.floor(Math.random()*igeHelyek.length);  //véletlen kiválasztás
  var uz=igek[igeHelyek[ry]]+"  ("+igeHelyek[ry]+")"  //
  megjelenit(uz, true);
}


function kurzor() {
  if (window.status==" ") window.status=" ";
  if (ksz>0) {
//  if (ksz==1) {
    if (!szele)
      if (window.status.indexOf(kjel)==-1) window.status += kjel;
    if (ksz>=kfriss) ksz=-kfriss+1;
    ksz++;
//    ksz=0;
    setTimeout('kurzor()',kseb);
  } else {
    if (window.status.indexOf(kjel)!=-1) window.status=window.status.substring(window.status.length-kjel.length,0);
    if (!kfuthat) {return;}
    if (window.status=="") window.status=" ";
    ksz++;
//    ksz=1;
    setTimeout('kurzor()',kseb);
  }
}

function kurzorBekapcs () {if (!kfuthat) {kfuthat=true; kurzor();}}
function kurzorKikapcs () {kfuthat=false;}

function leallit () {futhat=false; fut=0; if (!szele) window.status=leallitva;}
function aktival () {futhat=true; if (!szele) window.status=alap;}
function elindit () {futhat=true; talalomra();}


if(futhat && !fut) {window.status=alap; kurzor();}  //kurzor indítás
if(fut<0) fut+=3;  //fut visszaállítása az eredeti értékre, ha kell.



var bejelentkezes = " ++ A BibliaGép lábjegyzetek megjelenítését és igeversek idézését teszi lehetővé a Nyughatatlan Igevadász segítségével. ++ "
azonosito2 = setTimeout('megjelenit(bejelentkezes)',5000);
