/* Copyright 2005-2006. e-Corvina Kft. Minden jog fenntartva. */
/* Copyright 2005-2006. e-Corvina Kft. All rights reserved. */

/* 760-as beégetett szélesség */
var x760 = 760;

/** from: http://www.scottandrew.com/weblog/articles/cbs-events */
function addEvent(obj, evType, fn, useCapture){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
//    alert("Handler could not be attached");
  }
  return false;
}

// 0: még nem töltődött be. 1: betöltődött
// Ha a popup window reload-olja az oldalt, akkor is 0-ra állítja a valid-ot. (így várja meg, amíg újra betöltődik)
var document_is_loaded = 0;
var document_is_valid = 0;
try { addEvent(window,"load",function() { document_is_loaded = 1; document_is_valid = 1; }, false); }
catch(err) { }

/** Visszaadja az <input name="showonetype" ...> értékét */
function getValueOfField_Showonetype() {
  var e = document.getElementsByName("showonetype");
  if (e == null || e.length==0) { return ""; }
  try { return e[0].value; } catch(err) {}
  return "";
}
/* 'mutat' gomb: Ha nem eredményez letöltést, akkor új ablakban kell megnyitni */
function isShowonetypeDownloadable ( showonetype )
{
	return showonetype.indexOf(' ')!=-1;
}
/** "mutat" gombra ráklikkelnek: <a onclick="..."> */
function openLongOnclick( position, recnum, url )
{
  var showonetype = getValueOfField_Showonetype();
  window.name='mainpage';
  if(!isShowonetypeDownloadable(showonetype)) {
    openLongOnclick4( position, recnum, url, recnum );
  }
}
function openLongOnclick4( position, recnum, url, popupwindowname ) {
  var showonetype = getValueOfField_Showonetype();
  var position_str = position == null ? "" : "&pos="+position;
  var showtype_str = showonetype == "" ? "" : "&showtype="+showonetype;
  window.open(url+'?action=onelong'+showtype_str+'&recnum='+recnum+position_str, popupwindowname,
    'height=450,width=776,status=no,toolbar=no,menubar=no,location=no,resizable=yes,scrollbars=yes,channelmode=no');
}
/** "mutat" gombra ráklikkelnek: <a href="..."> */
function openLongHref( position, recnum, url ) {
  window.name='mainpage';
  var showonetype = getValueOfField_Showonetype();
  if(isShowonetypeDownloadable(showonetype)) {
    window.location=url+'?action=onelong'+
      '&showtype='+showonetype+
      '&recnum='+recnum;
  }
}
/* Bongeszesnel raklikkelnek a 'mutat' gombra. Onclick action */
/* FIXME: quote-olni kellene ezeket a parametereket, illetve az encoding-nak megfeleloen konvertalni */
function scanOpenOnelongOnclick( identifier, url )
{
	window.open(url+'?action=scanonelong'+
		'&scanonly='+identifier+
		'&showtype='+document.mainform.showonetype.value+
		'&scanbasketset='+document.mainform.scanbasketset.value
		, identifier, 'height=450,width=776,status=no,toolbar=no,menubar=no,location=no,resizable=yes,scrollbars=yes,channelmode=no');
}
function lookRecnum( recnum, marcposition )
{
	document.mainform.action.value='look';
	document.mainform.recnum.value=recnum;
	document.mainform.marcposition.value=marcposition;
}

function lookRecnumParent( recnum, marcposition )
{
	var isnull = window.opener==null;
	var doc = isnull ? window.document : window.opener.document;
	with (doc)
	{
		mainform.action.value='look';
		mainform.recnum.value=recnum;
		mainform.marcposition.value=marcposition;
		if(!isnull) { mainform.submit(); }
	}
}

function findTextIndex( nameOfFindForm, text, index )
{
	with (document.forms[nameOfFindForm])
	{
		text0.value=text;
		index0.value=index;
		action.value='find';
	}
}
function findTextIndexParent( text, index )
{
	var isnull = window.opener==null;
	var doc = isnull ? window.document : window.opener.document;
	with (doc)
	{
		mainform.text0.value=text;
		mainform.index0.value=index;
		mainform.action.value='find';
		if(!isnull) { mainform.submit(); }
	}
}

/*
function findIdno( nameOfFindForm, new_ccltext )
{
	with (document.forms[nameOfFindForm])
	{
		ccltext.value=new_ccltext;
		action.value='cclfind';
//		action.whichform.value='cclfindpage';
	}
}
function findIdnoParent( new_ccltext )
{
	var isnull = window.opener==null;
	var doc = isnull ? window.document : window.opener.document;
	with (doc)
	{
		mainform.ccltext.value=new_ccltext;
		mainform.action.value='cclfind';
//		mainform.whichform.value='cclfindpage';
		if(!isnull) { mainform.submit(); }
	}
}
*/
// Kapcsolódó rekordok keresése
function lookLinks( nameOfFindForm, new_looklinkstext )
{
	with (document.forms[nameOfFindForm])
	{
		ccltext.value=new_looklinkstext;
		action.value='looklinks';
//		action.whichform.value='cclfindpage';
	}
}
// Kapcsolódó rekordok keresése a szülő ablakban.
function lookLinksParent( new_looklinkstext )
{
	var isnull = window.opener==null;
	var doc = isnull ? window.document : window.opener.document;
	with (doc)
	{
		mainform.ccltext.value=new_looklinkstext;
		mainform.action.value='looklinks';
//		mainform.whichform.value='cclfindpage';
		if(!isnull) { mainform.submit(); }
	}
}


/* Bezarja ezt az ablakot, ha van szulo ablak. a ...Parent metodusokkal parhuzamosan van szukseg ra (bezarjuk az ablakot, es a szulo ablakban keresunk tovabb)
 */
function closeThisIfParentExistsOrSubmit()
{
	if(window.opener!=null) { window.close(); }
	else { mainform.submit(); }
}

/* Bezarja ezt az ablakot, ha van szulo ablak. a ...Parent metodusokkal parhuzamosan van szukseg ra (bezarjuk az ablakot, es a szulo ablakban keresunk tovabb)
 */
function closeThisIfParentExists()
{
	if(window.opener!=null) { window.close(); }
}


function set_focus(element) {
  /*YAHOO.widget.TreeView.*/addHandler(window, "load", function () { element.focus(); return; } );
  return;
}

/**
 * Vegrehajt egy document.mainform[hiddeninputname]=newvalue parancsot.
 * Ha meg nem letezett a document.mainform-ban ilyen input elem, akkor letrehoz egy ujat (hidden lesz)
 * Ha letezett, akkor felulirja az erteket
 */
function setMainformVariable(hiddeninputname, newvalue) {
  setXFormVariable("mainform", hiddeninputname, newvalue);
}
function setXFormVariable(formname, hiddeninputname, newvalue) {
  var id = formname+"_"+hiddeninputname;
  var e = null;
  var alreadyExist=false;
  if(alreadyExist==false) {
    e = document.getElementById(id);
    if(e!=null) { alreadyExist=true; }
  }
  if(alreadyExist==false) {
    for(var idx=0;idx<document[formname].length;idx++) {
      var e2=document[formname][idx];
      if(/* e2 instanceof Element && */ e2!=null && e2.getAttribute("name")==hiddeninputname) { // instanceof Element nem megy IE alatt.
        e=e2; alreadyExist=true; break;
      }
    }
  }
  if(alreadyExist==false) {
    e = document.createElement("input");
    e.setAttribute("type", "hidden");
    e.setAttribute("name", hiddeninputname);
    e.setAttribute("id", id);
  }
  e.setAttribute("value", newvalue);
  if(alreadyExist==false) {
    document[formname].appendChild(e);
  }
  return;
}
/** Csak akkor hozza letre, ha nem null vagy '' a newvalue */
function setXFormVariable2(formname, hiddeninputname, newvalue) {
  if(newvalue==null || newvalue=='') { return; }
  setXFormVariable(formname, hiddeninputname, newvalue);
  return;
}
/** Csak akkor hozza letre, ha nem null vagy '' a newvalue */
function setMainformVariable2(hiddeninputname, newvalue) {
  if(newvalue==null || newvalue=='') { return; }
  setMainformVariable(hiddeninputname, newvalue);
  return;
}

function removeMainformVariable(hiddeninputname) {
  removeXFormVariable("mainform", hiddeninputname);
}
function removeXFormVariable(formname, hiddeninputname) {
  var id = formname+"_"+hiddeninputname;
  var e = document.getElementById(id);
  if(e != null) {
    try { document[formname].removeChild(e); } catch(err) {}
  }
}


/**
 * Az alábbi kódrészlet megvilágítja, hogyan kell használni:
 *   <a href="#" onclick="javascript:expand3(id1,id2,id3);return false;">
 *     szoveg
 *     <img id="id1" src="lefele_mutato_nyil">
 *     <img id="id2" src="felfele_mutato_nyil" style="display:none;">
 *   </a>
 *   <div id="id3" style="display: none;">szoveg szoveg szoveg</div>
 * Ha a linkre raklikkelunk, akkor megjelenik az id3 szoveg, es a lefele mutato nyilbol felfele mutato nyil lesz.
 * Ha a felfele mutato nyilra kattintunk, akkor eltunik az id3 szoveg.
 * Tehát az expand3 fv invertálja az állapotot.
 * @param id3 annak a doboznak az id-je, amit megjelenítünk.
 * @param id1, id2: a nyilak (<img>...</img>) id-jei
 */
function expand3(id1, id2, id3) {
  var e1 = document.getElementById(id1);
  var e2 = document.getElementById(id2);
  var e3 = document.getElementById(id3);
  if(e1==null || e2==null || e3==null) { return; }
  if(e3.style.display!='none') {
    e3.style.display='none';
    e2.style.display='none'; // elobb kikapcsoljuk a meglevo nyilat, aztan bekapcsoljuk a masikat.
    e1.style.display='';
  } else {
    e3.style.display='';
    e1.style.display='none'; // elobb kikapcsoljuk a meglevo nyilat, aztan bekapcsoljuk a masikat.
    e2.style.display='';
  }
}
/** Mint expand3, de ez nem invertál, hanem mindig kibont */
function expand3_expand(id1, id2, id3) {
  var e1 = document.getElementById(id1);
  var e2 = document.getElementById(id2);
  var e3 = document.getElementById(id3);
  if(e1==null || e2==null || e3==null) { return; }
  if(e3.style.display=='none') {
    e3.style.display='';
    e1.style.display='none'; // elobb kikapcsoljuk a meglevo nyilat, aztan bekapcsoljuk a masikat.
    e2.style.display='';
  }
}
/** Mint expand3, de ez nem invertál, hanem mindig kibont */
function expand3_collapse(id1, id2, id3) {
  var e1 = document.getElementById(id1);
  var e2 = document.getElementById(id2);
  var e3 = document.getElementById(id3);
  if(e1==null || e2==null || e3==null) { return; }
  if(e3.style.display!='none') {
    e3.style.display='none';
    e2.style.display='none'; // elobb kikapcsoljuk a meglevo nyilat, aztan bekapcsoljuk a masikat.
    e1.style.display='';
  }
}


/* -------------------------------------------------------------------------------------------------- */
/**
 * Kosárkezelő fv-ek.
 */

/** Megmondja, hogy az adott checkbox Element be van-e pipalva. */
function isChecked(e) {
  if (e == null) { return false; }
//  if (e.tagName.toLowerCase() == 'input' && e.getAttribute('type').toLowerCase() == 'checkbox') { // Szokásos <input type="checkbox"/>
  if (e.checked != null && e.tagName != null && e.tagName.toLowerCase() == 'input') { // Szokásos <input type="checkbox"/>
    return e.checked;
  }
/*
  if (e.tagName != null && e.tagName.toLowerCase() == 'div') { // Saját checkbox
    if (e.innerHTML == '&#9745;' || e.innerHTML == '\u2611' || e.innerHTML.charCodeAt(0) == 9745) {
      return true;
    }
    return false;
  }
*/
  return false;
}

/** Beallitja az adott checkbox Element-et: be legyen pipalva, vagy ne. */
function setChecked(e, checked) {
  if (e == null) { return; }
//  if (e.tagName == 'input' && e.getAttribute('type') == 'checkbox') { // Szokásos <input type="checkbox"/>
  if (e.checked != null && e.tagName != null && e.tagName.toLowerCase() == 'input') { // Szokásos <input type="checkbox"/>
    e.checked=checked;
    return;
  }
/*
  if (e.tagName != null && e.tagName.toLowerCase() == 'div') { // Saját checkbox
    if (checked == true) { e.innerHTML = '&#9745;'; }
    else { e.innerHTML = '&#9744;'; }
    return;
  }
*/
  return;
}

// short.xsl: egy oldalon hany darab x-elest valtoztattunk meg.
var sum_of_changes = 0; // FIXME: nem használja senki
var basket_changed = new Array(); // 0 or 1  // FIXME: nem használja senki

/** Akkor kell meghivni, ha a short.xsl altal visszaadott talati
 * listaban a user valtoztatja valamelyik cucc kijeloleset.
 * Celja: tudni akarjuk az ablak becsukasakor, hogy a user valtoztatott-e valamit a kosarba kijelolt cuccokon.
 * @param recnum  a rekord recnum-ja
 * @param name az <input type="checkbox" id="..."/>-ban a ... értéke.
 */

function onChangeBasketSelection ( recnum, id ) {
  if(basket_changed[id]==null || basket_changed[id]==0) {
    basket_changed[id]=1;
    ++sum_of_changes;
  } else {
    basket_changed[id]=0;
    --sum_of_changes;
  }
  
  var e = document.getElementById(id);
  var checked = null;
  if(e!=null) {
//    setChecked(e,!isChecked(e)); // Nekünk kell változtatni.
    checked = isChecked(e);
    if(checked) { doBasketXmlHttpRequest( recnum, "" ); }
    else { doBasketXmlHttpRequest( "", recnum ); }
  }
  if(window.opener!=null && checked!=null) {
    var e2 = window.opener.document.getElementById(id);
    if(e2!=null) { setChecked(e2,checked); }
  }

  return sum_of_changes;
}



// Dupla-klikk valamelyik "kosarban" oszlopban levo checkbox-ra.
// Invertalja az osszes kijelolest.
// Gond: minden checkbox-nak mas a neve
function invertBasketSelection ( recnums, prefix ) {
	var myArray = recnums.split(/,/);
	var plus = new Array();
	var minus = new Array();
	for(var idx=0;idx<myArray.length;idx++) {
		var recnum=myArray[idx];
		var e=document.getElementById(prefix+recnum);
		if(isChecked(e)) { minus.push(recnum); }
		else { plus.push(recnum); }
		setChecked(e,!isChecked(e));
	}
	doBasketXmlHttpRequest( plus.join(","), minus.join(",") );
}

/** A menüben a "kosár" ikon alatt frissíti, hogy hány elem van a kosárban */
function updateMenuBasketSize(text) {
  if (text == null) { return; }
  var e = document.getElementById('menu_basket_size1');
  if (e == null) { return; }
  var f = document.getElementById('menu_basket_size2');
  if (f == null) { return; }
  if (text == "" || text == "0") {
    e.style.display="none";
  } else {
    var g = document.createTextNode(text);
//    f.innerHTML='<a class="alter_link ikon_alatti_linkszoveg">'+text+'</a>'; /* Kell az <a>...</a>, különben a firefox beszúrja helyettünk, és elrontja a stílust. */
    f.replaceChild(g, f.firstChild);
    if(e.style.display!='') { e.style.display=''; }
  }
}

/**
 * @param plus recnum-ok vesszővel elválasztva. Ezeket hozzáaadjuk a kosárhoz.
 * @param minus recnum-ok vesszővel elválasztva. Ezeket kivesszük a kosárból.
 */
function doBasketXmlHttpRequest( plus, minus ) {
// Lásd: http://developer.yahoo.com/yui/connection/
      var handleSuccess = function(o) {
        if(o.responseText !== undefined && o.status==200) {
	  updateMenuBasketSize(o.responseText);
	  if(window.opener!=null) {
	    with(window.opener) {
	      updateMenuBasketSize(o.responseText);
	    }
	  }
	}
      }
      var handleFailure = function(o) {
/*        if(o.responseText !== undefined){
          var s = "<li>Transaction id: " + o.tId + "</li>";
          s += "<li>HTTP status: " + o.status + "</li>";
          s += "<li>Status code message: " + o.statusText + "</li>";
          tthis.content = s;
          return;
          }
*/
      }
      var callback =
      {
        success:handleSuccess,
        failure:handleFailure,
        argument: { foo:"foo", bar:"bar" }
      };
      var request = YAHOO.util.Connect.asyncRequest('POST', "?action=ajax:changeBasket" /* url */, callback, "basketplus="+plus+"&basketminus="+minus);
}

/** Böngészéskor a böngésző-kosárnak más szerepe van: az egy oldalon levő "találatokból" kiválaszthatunk néhányat, és egyszerre megnézhetjük */
function invertScanBasketSelection ( recnums, common_name ) {
  var myArray = recnums.split(/,/);
  for(var idx=0;idx<myArray.length;idx++) {
    var recnum=myArray[idx];
    var e=document.getElementById(common_name+recnum);
    e.checked=!e.checked;
  }
}

/* -------------------------------------------------------------------------------------------------- */
/** onelongPaging fv-ek, változók:  "mutat" ablakból a megnyitó ablak vezérlésére szolgáló fv-ek. */

var onelongPaging_itor = new Array(); // hányadik találat -> recnum
var onelongPaging_rtoi = new Array(); // recnum -> hányadik találat
var onelongPaging_mini = 0;
var onelongPaging_maxi = 0;
var onelongPaging_done = 0; // Amikor készen van a onelongPaging változók feltöltése, akkor 1-es lesz.

/** A short_inc.xsl hívja meg, amikor az összes recnum-ot átadta nekünk */
function onelongPaging_filldata_done() {
  onelongPaging_done = 1;
}
/** Megjegyezzük, hogy ez egy új találat. position: hányadik eleme a teljes találati listának (pl. 11). */
function onelongPaging_mark(position, recnum) {
  onelongPaging_itor[position]=recnum;
  onelongPaging_rtoi[recnum]=position;
  if(onelongPaging_maxi==0 || position > onelongPaging_maxi) { onelongPaging_maxi = position; }
  if(onelongPaging_mini==0 || position < onelongPaging_mini) { onelongPaging_mini = position; }
}

/** A "next" és a "prev" gombokat láthatóv teszi, de csak akkor, ha valóban van előző/következő elem */
function onelongPaging_makePrevButtonVisible(recnum) {
  // Prev button:
  try {
    var i = window.opener.onelongPaging_rtoi[recnum];
    if(i>1) { // Lesz "prev" gomb.
      var e = document.getElementById("prevButton");
      if(e!=null) {
	var headEl = document.getElementsByTagName("head")[0];
	var link = document.createElement("link");
	link.rel = "prev";
	link.href = "javascript:onelongPaging_prev('"+recnum+"');" // <link rel="next" href="javascript:onelongPaging_prev(recnum);"/>
	headEl.appendChild(link);
	e.style.display="inline";
      }
    }
  } catch(err) {}
}
/** A "next" és a "prev" gombokat láthatóv teszi, de csak akkor, ha valóban van előző/következő elem */
function onelongPaging_makeNextButtonVisible(recnum) {
  // Prev button:
  try {
    var i = window.opener.onelongPaging_rtoi[recnum];
    if(window.opener.onelongPaging_itor[i+1] != null || window.opener.gotoNextResultPage != null) {
      var e = document.getElementById("nextButton");
      if(e!=null) {
	var headEl = document.getElementsByTagName("head")[0];
	var link = document.createElement("link");
	link.rel = "next";
	link.href = "javascript:onelongPaging_next('"+recnum+"');" // <link rel="next" href="javascript:onelongPaging_next(recnum);"/>
	headEl.appendChild(link);
	e.style.display="inline";
      }
    }
  } catch(err) {}
}
/**
 * Amikor a szülő oldalt utasítjuk, hogy lapozzon előre vagy hátra, ez a függvény mondja meg, hogy
 * készen van-e már a szülő oldal, vagy még várni kell rá.
 */
function oneLongPaging_parent_is_complete() {
/*window.opener.history == szulohist && window.opener.document == szulodoc */
  try {
    if(window==null) { return false; }
    if((window.opener.document_is_valid==null || window.opener.document_is_valid==0)
	|| (window.opener.onelongPaging_done==null || window.opener.onelongPaging_done==0))
    {
      return false;
    }
    return true;
  } catch(err) {}
  return false;
}

/** Ugrunk a recnum utáni rekordra */
function onelongPaging_next(recnum) {
//  document.getElementById("zzz").innerHTML= "next " + recnum; // FIXME:LAPOZAS
  if(window==null) { return; }
  if(window.opener==null) { return; }
  if(window.opener.onelongPaging_itor==null) { return; }
  if(window.opener.onelongPaging_rtoi==null) { return; }
  var i = window.opener.onelongPaging_rtoi[recnum];
  if(i==null) { return; }
  if(i==window.opener.onelongPaging_maxi) { // Lapozni kell a kovetkezo oldalra
    if(window.opener.gotoNextResultPage == null) { return; }
    window.opener.document_is_valid=0;
    document.getElementById("nextPrevLoading").className="ygtvloading";
    window.opener.gotoNextResultPage();
    onelongPaging_next_2ndpart(window.opener, window.opener.document, window.opener.history);
    return;
  }
  var i2 = i+1;
  var recnum2 = window.opener.onelongPaging_itor[i2];
  if(recnum2==null) { // A kovetkezo talalati oldalra kene lapozni, vagy egyszerűen nincs tovább.
    return;
  }
  var popupwindowname = window.name;
  document.getElementById("nextPrevLoading").className="ygtvloading";
  with(window.opener) {
    openLongOnclick4(i2, recnum2,"",popupwindowname); // Felülírjuk azt az ablakot, amelyik megnyitja.
  }
}
// Ha új oldalra kell lapozni, ez a fv. vár, amíg betöltődik az új oldal, majd megnyitja a megfelelő popup-ot.
function onelongPaging_next_2ndpart(szulo, szulodoc, szulohist) {
  if(window.opener == null) { return; }
  while(!oneLongPaging_parent_is_complete()) { // Még nem töltődött be az új oldal.
    setTimeout(function() { onelongPaging_next_2ndpart(szulo, szulodoc, szulohist); }, 100);
//    document.getElementById("zzz").innerHTML = ""+window.opener+","+window.opener.document_is_valid+","+window.opener.onelongPaging_done+","+window.opener.mini+","+window.opener.onelongPaging_itor[window.opener.onelongPaging_mini]; // FIXME:LAPOZAS
    return;
  }
  // Betöltődött az új oldal.
  if(window.opener.onelongPaging_mini == null) {
    return;
  }
  var i2 = window.opener.onelongPaging_mini;
  var recnum2 = window.opener.onelongPaging_itor[i2];
//  document.getElementById("zzz").innerHTML= "loading " + recnum2; // FIXME:LAPOZAS
  if(recnum2==null) {
    document.getElementById("nextPrevLoading").className="ygtvblankdepthcell"; // Ha már nem sikerült, legalább ne csináljunk úgy, mintha történne valami.
    return;
  } // FIXME:LAPOZAS: ilyenkor mit csináljunk? Mi van, ha a user még1x ráklikkel a "next" gombra (mégegyszer továbblapozunk a héttérben?)?

  var popupwindowname = window.name;
  with(window.opener) {
    openLongOnclick4(i2, recnum2,"",popupwindowname); // Felülírjuk azt az ablakot, amelyik megnyitja.
  }
}

/** Ugrunk a recnum utáni rekordra */
function onelongPaging_prev(recnum) {
//  document.getElementById("zzz").innerHTML= "prev " + recnum; // FIXME:LAPOZAS
  if(window==null) { return; }
  if(window.opener==null) { return; }
  if(window.opener.onelongPaging_itor==null) { return; }
  if(window.opener.onelongPaging_rtoi==null) { return; }
  var i = window.opener.onelongPaging_rtoi[recnum];
  if(i==null) { return; }
  if(i==window.opener.onelongPaging_mini) { // Lapozni kell a kovetkezo oldalra
    if(window.opener.gotoPrevResultPage == null) { return; }
    window.opener.document_is_valid=0;
    document.getElementById("nextPrevLoading").className="ygtvloading";
    window.opener.gotoPrevResultPage();
    onelongPaging_prev_2ndpart(window.opener, window.opener.document, window.opener.history);
    return;
  }
  var i2 = i-1;
  var recnum2 = window.opener.onelongPaging_itor[i2];
  if(recnum2==null) { // A kovetkezo talalati oldalra kene lapozni, vagy egyszerűen nincs tovább.
    return;
  }
  var popupwindowname = window.name;
  document.getElementById("nextPrevLoading").className="ygtvloading";
  with(window.opener) {
    openLongOnclick4(i2, recnum2,"",popupwindowname); // Felülírjuk azt az ablakot, amelyik megnyitja.
  }
}
// Ha új oldalra kell lapozni, ez a fv. vár, amíg betöltődik az új oldal, majd megnyitja a megfelelő popup-ot.
function onelongPaging_prev_2ndpart(szulo, szulodoc, szulohist) {
  if(window.opener == null) { return; }
  while(!oneLongPaging_parent_is_complete()) { // Még nem töltődött be az új oldal.
    // Még nem töltődött be az új oldal.
    setTimeout(function() { onelongPaging_prev_2ndpart(szulo, szulodoc, szulohist); }, 100);
//    document.getElementById("zzz").innerHTML = ""+window.opener+","+window.opener.document_is_valid+","+window.opener.onelongPaging_done+","+window.opener.mini+","+window.opener.onelongPaging_itor[window.opener.onelongPaging_mini]; // FIXME:LAPOZAS
    return;
  }
  // Betöltődött az új oldal.
  if(window.opener.onelongPaging_maxi == null) {
    return;
  }
  var i2 = window.opener.onelongPaging_maxi;
  var recnum2 = window.opener.onelongPaging_itor[i2];
//  document.getElementById("zzz").innerHTML= "loading " + recnum2; // FIXME:LAPOZAS
  if(recnum2==null) {
    document.getElementById("nextPrevLoading").className="ygtvblankdepthcell"; // Ha már nem sikerült, legalább ne csináljunk úgy, mintha történne valami.
    return;
  } // FIXME:LAPOZAS: ilyenkor mit csináljunk? Mi van, ha a user még1x ráklikkel a "prev" gombra (mégegyszer továbblapozunk a héttérben?)?

  var popupwindowname = window.name;
  with(window.opener) {
    openLongOnclick4(i2, recnum2,"",popupwindowname); // Felülírjuk azt az ablakot, amelyik megnyitja.
  }
}

/* -------------------------------------------------------------------------------------------------- */
/**
 * Google books API-ján keresztül thumbnail-eket lehet kapni ISBN alapján.
 * Lásd: http://code.google.com/apis/books/docs/dynamic-links.html
 * Lásd: http://code.google.com/apis/books/
 * A gthumb_* fv-ek és változók felelnek azért, hogy legyenek thumbnail-jeink.
 */


var gthumb_itoisbn = new Array(); // Hányadik találat (position) -> ISBN
var gthumb_isbntoi = new Array(); // ISBN -> Array(Hányadik találat)
var gthumb_isbns = new Array(); // Csak az isbn-ek.
var gthumb_n = 0; // az Array-k mérete
var gthumb_booksInfo = null; // DEBUG celbol

function gthumb_mark(position, isbn) {
  if(isbn==null || isbn=='') { return; }
//  isbn='0439554934'; // FIXME:GTHUMB
  gthumb_itoisbn[position]=isbn;
  if(gthumb_isbntoi[isbn]==null) { gthumb_isbns.push(isbn); gthumb_isbntoi[isbn]=new Array(); } // Ha több könyvnek is ugyanaz az ISBN-je, akkor mindegyik megkapja u.azt a thumbnail-t.
  gthumb_isbntoi[isbn].push(position);
  ++gthumb_n;
}
/** Akkor kell hívni, ha a megjelenített találati lista utolsó eleménél (tipikusan 10.) járunk. */
function gthumb_finished_marks() {
  if(gthumb_n==0) { return; }
  gthumb_request();
}
/**
 * Elindítja a google api request-et.
 */
function gthumb_request() {
  if(gthumb_n==0) { return; }
  var api_url ="http://books.google.com/books?jscmd=viewapi&bibkeys=" + gthumb_isbns.join(",") + "&callback=gthumb_callback";
  var headEl = document.getElementsByTagName("head")[0];
  var newScript = document.createElement("script");
  newScript.type = "text/javascript";
  newScript.src = api_url;
//  newScript.onload=scriptLoaded;
  headEl.appendChild(newScript);
//  document.getElementById("gthumb1a").style.display=""; // FIXME:GTHUMB
//  document.getElementById("gthumb1b").innerHTML+="<br/>"+api_url; // FIXME:GTHUMB
}
/** A google books api ezt a fv-t hívja meg, miután betöltődött */
function gthumb_callback(booksInfo) {
  gthumb_booksInfo = booksInfo;
  for (isbn in booksInfo) {
//    document.getElementById("gthumb1b").innerHTML += "<br/> google isbn="+isbn; // FIXME:GTHUMB
  }

  for (isbn in booksInfo) {
    var iarr = gthumb_isbntoi[isbn];
    if (iarr == null) { continue; }
    for(iidx in iarr) {
      var i = iarr[iidx];
//      document.getElementById("gthumb1b").innerHTML += "<br/>i="+i+" iarr.length="+iarr.length; // FIXME:GTHUMB
      var elementA = document.getElementById("gthumb"+i+"a");
      var elementB = document.getElementById("gthumb"+i+"b");
      var bookInfo = booksInfo[isbn];
//      document.getElementById("gthumb1b").innerHTML += "<br/> A="+elementA+" B="+elementB+" bookInfo="+bookInfo; // FIXME:GTHUMB
      if (elementA == null || elementB == null || bookInfo == null) { continue; }
//      document.getElementById("gthumb1b").innerHTML += "<br/> thumbnail_url="+bookInfo.thumbnail_url; // FIXME:GTHUMB
      if (bookInfo.thumbnail_url == null) { continue; }
      if (bookInfo.info_url != null) {
	elementB.innerHTML = "<a href=\""+bookInfo.info_url+"\">"
	  + "<img src=\""+bookInfo.thumbnail_url+"\"></img>"
	  + "</a>";
      } else {
	elementB.innerHTML = "<img src=\""+bookInfo.thumbnail_url+"\"></img>";
      }
  //    if (bookInfo.preview == "full" ||
  //    bookInfo.preview == "partial") {
      elementA.style.display = "";
    }
  }
}

/* -------------------------------------------------------------------------------------------------- */
/**
 * Corvina OpenUrl Resolver eredmenyet megjelenito fv-ek
 */
function cor_onclick(idb, idri, url) {
  var eb = document.getElementById(idb);
  var eri = document.getElementById(idri);
  if (eb == null) { return; }
  if (eri == null) { return; }
//  e.innerHTML = '<object data="'+href+'"></object>';
  if (eb.style.display != 'none') {
    eb.style.display = 'none';
    eri.style.display = 'none';
    return;
  }
  eb.style.display = '';
  if(eb.innerHTML != '') { // Ha mar korabban lekerdeztuk, ne kerdezzuk le ujbol.
    return;
  }
  eri.style.display = 'inline';
  cor_request(url);
//  e.innerHTML = '<iframe style="width:100%;min-height:20px;border:0px;overflow:auto;" src="'+href+'"></iframe>';
  return;
}

function cor_request(url) {
  var headEl = document.getElementsByTagName("head")[0];
  var newScript = document.createElement("script");
  newScript.type = "text/javascript";
  newScript.src = url;
  headEl.appendChild(newScript);
}
/** Callback fv: a head-be beszurt betoltodott javascript kozvetve ezt hivja meg */
function cor_result(idb, idri, innerHTML, noResultHTML) {
  var eb = document.getElementById(idb);
  var eri = document.getElementById(idri);
  if (eb == null) { return; }
  if (eri == null) { return; }
  innerHTML = String_trim(innerHTML);
  if(innerHTML == '') {
    eb.innerHTML = noResultHTML;
    eri.style.display = 'none';
    eb.style.display = '';
  } else {
    eb.innerHTML = innerHTML + ' ';
    eri.style.display = 'none';
    eb.style.display = '';
  }
  return;
}


/* -------------------------------------------------------------------------------------------------- */
/**
 * Raktári kikéréshez, raktári kérőlap összeállításához készült fv-ek.
 */

function String_trim(str) {
  return str.replace(/^\s+|\s+$/g, '');
}
function quoteHTML(str) {
  return str.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");
}

/**
 * Akkor kell hívni, ha egy rekord raktári kikérésekor valamelyik adat megváltozott.
 * Pl. a user nem az 1., hanem a 2. kötetet szeretné kikölcsönözni.
 * Letölti a függő mezők új értékét a servlet-től.
 * @param recnum
 * @param formName a form neve (<form name="...">...</form>)
 * @param fieldName melyik mezo valtozott
 * @param fieldNames az osszes mezo neve
 */
function storageEditChangeOf(recnum, formId, fieldName, fieldNames, dependentFieldNames) {
  var form = document.forms[formId];
  var debug = document.getElementById('debug');
  // Letiltjuk a fuggo form mezoket, hogy addig ne valtozzon az ertekuk
  var dependentFieldNamesArr = String_trim(dependentFieldNames).split(" ");
  for(var i=0;i<dependentFieldNamesArr.length;i++) {
    var dependentFieldName = dependentFieldNamesArr[i];
    if (dependentFieldName == fieldName) { continue; } // Sajat magat allithatova tesszuk.
    var f1_cont = se_getContainer(document, formId, dependentFieldName);
    if (f1_cont == null) { continue; } // assertion error
    debug.innerHTML += "Disabling dependentFieldName " + dependentFieldName + "<br/>\n";
    YAHOO.util.Dom.addClass(f1_cont, "disabled");
  }
  doStorageEditChangeXmlHttpRequest( recnum, formId, fieldName, fieldNames, dependentFieldNames );
}

/**
 * se = StorageEdit
 */
function se_getContainer( element, formId, fieldName ) {
  if(element==null) { return null; }
  var containerid = formId + '_' + fieldName;
  if(element == document) {
    var container = element.getElementById(containerid);
    return container;
  }
  // Végig kell mennünk az elemeken.
  var subelements = element.getElementsByTagName("*");
  for(var j=0;j<subelements.length;j++) {
    var subelement = subelements[j];
    if(subelement.getAttribute("id") == containerid) {
      return subelement;
    }
  }
  return null;
}
/** Csak akkor mukodik. ha element==document */
function se_getField( element, formId, fieldName ) {
  if(element==null) { return null; }
  var form = element.getElementById(formId);
  if (form == null) { return null; }
  var f1 = null;
  try { f1 = form[fieldName]; } catch(err) {}
  return f1;
}
function doStorageEditChangeXmlHttpRequest( recnum, formId, fieldName, fieldNames, dependentFieldNames ) {
// Lásd: http://developer.yahoo.com/yui/connection/
      var form = document.getElementById(formId);
      var debug = document.getElementById('debug');
      debug.innerHTML += "doStorageEditChangeXmlHttpRequest("+recnum+","+formId+","+fieldName+","+fieldNames+","+dependentFieldNames+")"+"<br/>";
      var handleSuccess = function(o) {
	// o.responseXML erteke null.
        if(o.responseText !== undefined && o.status==200) {
	  debug.innerHTML += "<hr/>" + "AJAX succes." + "<br/>" + "<hr/>";
	} else {
	  debug.innerHTML += "<hr/>" + "AJAX success, de nem az igazi" + "<hr/>";
	  return;
	}
	// Kivalogatjuk azokat a mezoket, amelyek valtozhattak.
	// Felül is írjuk az értéküket az új értékkel.
	var fetchedHtml = document.createElement("div");
	fetchedHtml.innerHTML = o.responseText;
	var dependentFieldNamesArr = String_trim(dependentFieldNames).split(" ");
	dependentFieldNamesArr.push(fieldName); // Sajat magat is frissitjuk.
	for(var i=0;i<dependentFieldNamesArr.length;i++) {
	  var dependentFieldName = dependentFieldNamesArr[i];
	  debug.innerHTML += "Processing dependentFieldName "+dependentFieldName+"<br/>";

	  var f1_cont = se_getContainer(document, formId, dependentFieldName);
	  if (f1_cont == null) { debug.innerHTML += " Error: cannot find "+dependentFieldName+" in the form<br/>"; continue; }
	  var f1_oldvalue = null;
	  var f1_field = se_getField(document, formId, dependentFieldName);
	  try { if (f1_field != null) { f1_oldvalue = f1_field.value; } } catch(err) {}
	  YAHOO.util.Dom.removeClass(f1_cont, "disabled");

	  // Megkeressuk a parjat a most letoltott dolgokban.
	  var e1_cont = se_getContainer(fetchedHtml, formId, dependentFieldName);
	  if (e1_cont == null) {
	    debug.innerHTML += " Error: cannot find "+dependentFieldName+" in the downloaded stuff<br/>";
	    continue;
	  }
	  debug.innerHTML += "<span style=\"white-space: nowrap\">Code for this field: "+quoteHTML(e1_cont.innerHTML)+"<br/></span>";

	  try { f1_cont.innerHTML = e1_cont.innerHTML; }
	  catch(err) { document.getElementById('debug').innerHTML += "Exception thrown: "+err+"<br/>"; }
	  
	  
	  if (f1_field != null && f1_oldvalue != null && dependentFieldName == fieldName) {
	    // a .innerHTML reseteli az aktiv mezo beallitasat, ezert visszaallitjuk
	    try { f1_field.value = f1_oldvalue; }
	    catch(err) { document.getElementById('debug').innerHTML += "Exception thrown: "+err+"<br/>"; }
	  }
	}
	return;
      }
      var handleFailure = function(o) {
	  document.getElementById('debug').innerHTML += "<hr/>" + "AJAX failure. status="+o.status
	    + " responseText="+o.responseText
	    + "<hr/>";
      }
      var callback =
      {
        success:handleSuccess,
        failure:handleFailure,
        argument: { foo:"foo", bar:"bar" }
      };
      var fieldNamesArr = String_trim(fieldNames).split(" ");
      var arguments = new Array();
      document.getElementById('debug').innerHTML += "fieldNamesArr.length="+fieldNamesArr.length+"<br/>";
      for(var i=0;i<fieldNamesArr.length;i++) {
	var value = null;
	var thisFieldName = fieldNamesArr[i];
//	var form = document.forms[formId];
	if(thisFieldName==null || thisFieldName=='') { continue; }
	try { value = form[thisFieldName].value } catch(err) {}
	document.getElementById('debug').innerHTML += ""+thisFieldName+"="+value+"<br/>";
	if(value == null) { continue; }
	arguments[i] = "&" + thisFieldName + "=" + encodeURI(value);
      }
      // FIXME:STORAGE: quote-olni kene a newValue-t.
      var request = YAHOO.util.Connect.asyncRequest('POST', "?action=ajax:storage_edit_change" /* url */, callback,
	"&recnum="+recnum
	  +"&formId="+formId
	  +"&fieldName="+fieldName
	  +arguments.join(""));
//	  +"&newValue="+newValue);
}




var se_ajaxwin = null;
var se_ajaxwin_title = null;
/**
 * Modális dialógus-ablakként behívja AJAX-osan a raktári kikérést kezelő oldalt.
 */
function se_open_storagerequest_window(baseurl, recnum) {
  var url = baseurl+"?action=storage_edit&recnum="+recnum;
  var windowName = "storage_request";
  var windowoptions = "width=560,height=720,resizable=1,scrollbars=1"; // scrolling=1,center=1
  window.open(url, windowName, windowoptions);
}

/**
 * Torli a ratkari kerolaprol a megadott kerest.
 * @param srMyId  az el nem küldött kérések WebPac-on belül használt azonosítója
 * @param sr_id_row annak az elemnek az id-je, ami ezt a raktári kérést leírja
 * @param sr_id_row2 Ha éppen hibaüzenet is meg van jelenítve az adott raktári kéréshez, akkor azt is töröljük,
 *        az "AJAX kérés törlésre" sikere esetén.
 */
function deleteStorageRequestAjax(srMyId, sr_id_row, sr_id_row2) {
  var e_row = document.getElementById(sr_id_row);
  var e_row2 = document.getElementById(sr_id_row2); // Lehet null is, ha
  if(e_row==null) { return; }
  var handleSuccess = function(o) {
    if(o.responseText !== undefined && o.status==200) {
      e_row.style.display='none';
      if(e_row2!=null) { e_row2.style.display='none'; }
    } else {
    }
  }
  var handleFailure = function(o) {
//    if(o.responseText !== undefined) {
//    }
  }
  var callback =
  {
    success:handleSuccess,
    failure:handleFailure,
    argument: { foo:"foo", bar:"bar" }
  };
  var url = "?action=ajax:storage_order_from_delete&srMyId="+srMyId
  var request = YAHOO.util.Connect.asyncRequest('POST', url, callback, "" /* postData */);

}

/**
 * Raktári kérőlap folyóiratokhoz: submit során ellenőrzi, hogy ki van-e töltve minden szükséges adat (feltéve, hogy ki lehet tölteni)
 * folyóirat kölcsönzés logikája: szám nem lehet üres, évfolyam és évszám közül legalább az egyiket ki kell tölteni.
 * @param formId a raktári kikérést kezdeményező form azonosítója
 * @param errMsg1 hibaüzenet, ha a szám üres
 * @param errMsg2 hibaüzenet, ha évfolyam és évszám közül valamelyik üres
 * @return true, ha rendben van a form, vagy nem folyóiratról van szó, egyébként false;
 */
function check_submit_if_serial(formId, errMsg1, errMsg2) {
  var form = document.getElementById(formId);
  if (form == null) { return false; }
  
  var e_volumeInfo_serial = se_getField( document, formId, "volumeInfo_serial");
  var e_yearInfo_serial = se_getField( document, formId, "yearInfo_serial");
  var e_numberInfo = se_getField( document, formId, "numberInfo");
  if(e_volumeInfo_serial==null || e_yearInfo_serial==null || e_numberInfo==null) { return true; } // Nem folyóiratról van szó, nincsenek meg azok a mezők, amiket ellenőrizni akarunk.
  
  var volumeInfo_serial = e_volumeInfo_serial.value;
  var yearInfo_serial = e_yearInfo_serial.value;
  var numberInfo = e_numberInfo.value;

  var errMsg = "";
  var set_focus_element = null;
  if ((yearInfo_serial==null || yearInfo_serial=="") && (volumeInfo_serial==null || volumeInfo_serial=="")) {
    if(errMsg.length==0) { set_focus_element = e_yearInfo_serial; } else { errMsg+=" "; }
    errMsg += errMsg2;
  }
  if (numberInfo==null || numberInfo=="") {
    if(errMsg.length==0) { set_focus_element = e_numberInfo; } else { errMsg+=" "; }
    errMsg += errMsg1;
  }
  if (errMsg == "") {
    form.submit();
    return true;
  }
  alert(errMsg);
  if(set_focus_element!=null) {
    set_focus_element.focus();
  }
  return false;
}

/**
 * Ellenőrzi, hogy bizonyos mezők nem kitöltetlenek-e a raktári kérőlapon
 * @param notNullFieldsArr Példa: [ 'requestPurpose', 'kolcsonzes celja', 'servingLocation', 'kiszolgalas helye' ]
 */
function se_submit(formId, errMsg3, notNullFieldsArr) {
  var form = document.getElementById(formId);
  if (form == null) { return false; }
  if(se_check_not_null_fields(formId, errMsg3, notNullFieldsArr)==false) {
    return false;
  }
  form.submit();
  return true;
}
/**
 * @return true, ha rendben van a form, egyebkent alert() es false.
 */
function se_check_not_null_fields(formId, errMsg3, notNullFieldsArr) {
  return true;
/*
  var form = document.getElementById(formId);
  if (form == null) { return false; }
  var set_focus_element = null;
  var warnings = []; // Mezok szoveges feloldasa. Azoke a mezoket, amelyek miatt figyelmeztetni kell.
  for(var i=0;i+1<notNullFieldsArr.length;i+=2) {
    var key = notNullFieldsArr[i];
    var text = notNullFieldsArr[i+1];
    var e = se_getField(document, formId, key);
    if(e==null) { return false; }
    var value = e.value;
    if(value==null || value=="") {
      warnings.push(text);
      if(set_focus_element==null) { set_focus_element = e; }
    }
  }
  if(warnings.length==0) {
    return true;
  }
  alert(""+errMsg3+warnings.join(","));
  if(set_focus_element!=null) {
    set_focus_element.focus();
  }
  return false;
*/
}


function gotoStorageOrderForm() {
  var url = '?action=patrondata#storage_order_form';
  if(window.opener!=null && window.opener.opener!=null) {
    // "mutat" ablakban nyomták meg a "raktári kikérés" gombot.
    window.opener.opener.location=url;
    window.opener.close();
    window.close();
  } else if(window.opener!=null) {
    // Ez a tipikus: popup ablakban van a raktári kikérés
    window.opener.location=url;
    window.close();
  } else {
    window.location=url;
  }
}

/**
 * Callback fv az AJAX-os patronloginform számára (patronloginform_ajax.xsl)
 * Felül kell írni.
 */
document.patronloginform_submit_button_onclick = function () {
  return;
};

/** Elkuldott raktari keresek: azon datum cellak id harmasai (id1, id2, id3), amelyek kibonthatoak */
var storage_sent_requests_expandable_date_ids = new Array();
/**
 * Elkuldott raktari keresek:
 * Kibontja / becsukja az osszes datum cellat.
 * @param zid1, zid2 a tablazat fejleceben a "datum" oszlopban levo 2 kep (lefele es felfele mutato nyil) id-je.
 */
function storage_sent_requests_expand3_all_dates(zid1, zid2) {
  var arr = storage_sent_requests_expandable_date_ids;
  var e1 = document.getElementById(zid1);
  var e2 = document.getElementById(zid2);
  if(e1==null || e2==null) { return; }
  if(e2.style.display!='none') { // Jelenleg ki van bontva. Be kell csukni.
    e2.style.display='none'; // elobb kikapcsoljuk a meglevo nyilat, aztan bekapcsoljuk a masikat.
    for(var idx=0;idx+2<arr.length;idx+=3) {
      var id1=arr[idx+0];
      var id2=arr[idx+1];
      var id3=arr[idx+2];
      expand3_collapse(id1,id2,id3);
    }
    e1.style.display='';
  } else { // Jelenleg be van csukva. Ki kell nyitni.
    e1.style.display='none'; // elobb kikapcsoljuk a meglevo nyilat, aztan bekapcsoljuk a masikat.
    for(var idx=0;idx+2<arr.length;idx+=3) {
      var id1=arr[idx+0];
      var id2=arr[idx+1];
      var id3=arr[idx+2];
      expand3_expand(id1,id2,id3);
    }
    e2.style.display='';
  }
}


/* -------------------------------------------------------------------------------------------------- */
/** A következő kódrészletre vonatkozó licensz:
Copyright (c) 2006, Yahoo! Inc. All rights reserved.                                                                                                    
Code licensed under the BSD License:                                                                                                                    
http://developer.yahoo.net/yui/license.txt                                                                                                              
version: 0.11.0                                                                                                                                         
*/ 
 
/**
 * Adds an event.  Replace with event manager when available
 *
 * @param el the elment to bind the handler to
 * @param {string} sType the type of event handler
 * @param {function} fn the callback to invoke
 * @param {boolean} capture if true event is capture phase, bubble otherwise
 */
/* YAHOO.widget.TreeView.addHandler = function (...) {} */ function addHandler(el, sType, fn, capture) {
    capture = (capture) ? true : false;
    if (el.addEventListener) {
        el.addEventListener(sType, fn, capture);
    } else if (el.attachEvent) {
        el.attachEvent("on" + sType, fn);
    } else {
        el["on" + sType] = fn;
    }
}
function trim(s) {
  try {
      return s.replace(/^\s+|\s+$/g, "");
  } catch(e) {
      return s;
  }
}


/* -------------------------------------------------------------------------------------------------- */
