/* limity */

// zapise javascript pre pracu s limitami a ich refreshom cez ajax
// formposition je pozicia formulara s limitami v ramci DOM 
// je to nutny parameter pri volaniach tejto metody z roznych miest
// kodu kde moze byt formular s ovladacimi prvkami limit inak situovany
// v ramci DOM nevyhodou je ze to treba pri vyvoji rucne zistovat,
// nebolo by zle napisat rutinu na automaticke zistovanie podla predom
// stanovenych pravidiellimitnames = new Array();

limitnames=new Array();
limitstates= new Object();

// odstrani vsetky zvolene limity
function ClearLimits()
{
    if (typeof limitnames[0]=="undefined") 
    { ClientRestoreLimits('restore'); }
    for (i=0; i<limitnames.length; i++)
    { limitstates[limitnames[i]]=""; }
    ClientRestoreLimits('restore');
    return false;
}


// mi; funkcia uklada a znovu nacita a aplikuje limity do formulara
// nastavenia drzia v ramci jednej www stranky
// dowhat = 'store' alebo 'restore'
function ClientRestoreLimits(dowhat)
{
  var limcount=1;
  var o = document.getElementById('limits');
  var ch = o.getElementsByTagName('select');
  for (var i=0;i<ch.length;i++)
  {                   
    var chch = ch[i];
    limitnames[limcount]=chch.name;                           
    if (dowhat=='store') 
    { 
      for (var x = 0; x < chch.options.length; x++)
      {
        if (chch.options[x].selected) 
        {                 
          if (limitstates[chch.name]!=null)
          { limitstates[chch.name]=limitstates[chch.name]+','+chch.options[x].index; }
          else
          { limitstates[chch.name]=chch.options[x].index; };
        };
      };
    }
    else if (dowhat=='restore')
    {             
      var selected = new Array();
      var strobj = new String(limitstates[chch.name]);            
      selected = strobj.split(',');
      for (var x=0; x<selected.length; x++)
      {
        if (chch.options[selected[x]]) 
        { chch.options[selected[x]].selected=true; };
      };          
      if (selected=="")                                   
      {
        if (chch.options[0].value=="") chch.options[0].selected=true;
        for (var x = 0; x < chch.length; x++)
        { if (chch.options[x]) { chch.options[x].selected=false; };};
      };                                   
    };
    limcount++;
  };
  
  ch = o.getElementsByTagName('input');       
  for (var i=0;i<ch.length;i++)
  {                   
    var chch = ch[i];
    limitnames[limcount]=chch.name;
    if (dowhat=='store') 
    { if (chch.getAttribute('type')=='checkbox') limitstates[chch.name]=chch.checked;
      else if (chch.getAttribute('type')=='text') limitstates[chch.name]=chch.value;  
    }
    else if (dowhat=='restore')
    if (typeof limitstates[chch.name]!="undefined")
    { if (chch.getAttribute('type')=='checkbox')
        if (limitstates[chch.name]=='true' || limitstates[chch.name]==true) {chch.checked=true;}
        else chch.checked=false;
      else chch.value=limitstates[chch.name];}
    
    limcount++;
  };
};

// refresuje zalozku s limitami pri zmene stavu vyberu zdrojov v 
// zalozke zdroje, najpr ulozi vsetky zaskrtnute limity do objektu,
// spravi ajax get, potom z objektu restorne limity naspat na obrazovku

function getSources()
{
  var sources="";        
  var f = document.getElementById('f');
  var i=0
  
  while (i<f.src.length)
  {
      //alert(document.forms[1].src[i].checked);
      if (f.src[i].checked==true)
      {
          sources=sources+f.src[i].value+',';
          //alert(f.sourcesf.src[i].value);
      }
      i=i+1
  };
  return sources;
} 

function setSources(srcs)
{
  var sources="";
  var f = document.getElementById('f');
  var i=0;
  var s=String(srcs).split(",");
  
  //debugger
  //alert(srcs);
  var shoulduncheck=false;
  while (i<f.src.length)
  {
      shoulduncheck=true;
      for (j=0;j<s.length;j++)
      {
          //alert(f.sourcesf.src.length)
          if (f.src[i].value==s[j])
          { 
      
              f.src[i].checked=true;
              shoulduncheck=false;
          };
           
      };
      if (shoulduncheck==true) { f.src[i].checked=false; };
      //debugger
      i=i+1;
      
  };
 
} 

// nastavi limity podla pozadovanej skupiny zdrojov
function setLimits(grp)
{       
    limitnames="";
    limitnames=new Array();
    limitstates="";
    limitstates=new Object();
    // ten exoticky :) parameter true znamena ze chceme iba loadnut object groupedsources
    // a nevykonavat ziadnu inicializaciu aplikacie
    SourceGroupsAppInit(true);
    
    
    limitnames=groupedsources[grp].limitnames;
    limitstates=groupedsources[grp].limitstates;
    ClientRestoreLimits('restore');    
}

function selectGroup(grp,srcs)
{
    setSources(srcs);
    
    refreshLimits();
    setLimits(grp);
    refreshSources();
    LoadSourceGroupInfoHTML(grp);
}

// refresuje zalozku s limitami pri zmene stavu vyberu zdrojov v 
// zalozke zdroje, najpr ulozi vsetky zaskrtnute limity do objektu,
// spravi ajax get, potom z objektu restorne limity naspat na obrazovku
function refreshLimits()
{
  ClientRestoreLimits('store');
  //treba domysliet cistenie objektu limitstates, nabaluje sa
  //alert(limitstates['limv_COUNTRY']);
  var sources=getSources();
  ajaxpage('i2.entry.cls?ictx='+arlictx+'&op=ajax_lims&src='+sources,'limits','ClientRestoreLimits("restore");AsciiEnabled();');          
}

function refreshSources()
{
 var sources=getSources();
 ajaxpage('i2.entry.cls?ictx='+arlictx+'&op=ajax_fields&src='+sources+'&x=1','rfld1');
 ajaxpage('i2.entry.cls?ictx='+arlictx+'&op=ajax_fields&src='+sources+'&x=2','rfld2');
 ajaxpage('i2.entry.cls?ictx='+arlictx+'&op=ajax_fields&src='+sources+'&x=3','rfld3');
}

/* skupiny zdroju */

var groupedsources = new Object();
var groupcount
var previousgroup = -1;
      
// zisti ci maju byt ovladacie prvky aplikacie aktivne alebo neaktivne
function determineGrpControlsState()
{
    var obj= document.getElementById('sourcegroupscombo'); 
    if (obj.length==0)
    {
        toggleGrpControlsState(true);
    }
    else
    {
        toggleGrpControlsState(false);
    }
}

// zaktivni alebo zneaktivni ovladacie prvky aplikacie
function toggleGrpControlsState(state)
{
    var obj2=document.getElementById('sourcesforgroup');
    var obj3=document.getElementById('sourcescombo');
    var obj4=document.getElementById('removesrcfromgrpbutton');
    var obj5=document.getElementById('addsrctogrpbutton');
    var obj6=document.getElementById('limits');
    obj2.disabled=state;
    obj3.disabled=state;
    obj4.disabled=state;
    obj5.disabled=state;
    if (state==false)
    {
        obj6.style.display='block';
    } else
    {
        obj6.style.display='none';
    };
    
}

function RemoveSelectOption(id,text1,text2)
{
    var obj=document.getElementById(id)
    var done = false
        var i;
        for (i = obj.length - 1; i>=0; i--) 
        {
            if ((obj.options[i].selected)&&(confirm(text1)))
            {
                obj.remove(i);
                done = true;
            } else if (obj.options[i].selected) { done = true; };
            
        }
    if (done==false) { alert(text2); return false;};
    //ak uz nemame skupinu zdrojov vypneme oba vedlajsie comboboxy
    if ((id=="sourcegroupscombo")&&(obj.options.length<=0))
    {
        ClearComboOptions('sourcesforgroup');
        toggleGrpControlsState(true);       
    } else if (id=="sourcegroupscombo")
    {
        // ak zmazeme skupinu a existuju dalsie
        // dame fokus na poslednu existujucu a vykoname
        // potrebne ukony
        
        ClearComboOptions('sourcesforgroup');
        var obj2 = document.getElementById('sourcegroupscombo');
        obj2.selectedIndex=obj2.length-1;
        previousgroup="-1";
        LoadGroupFromObj();
    };
    
}

// prida (append - na koniec) danemu comboboxu option s hodnotami text a value
function appendSelectOption(selectid,text,value)
{
    var elOptNew = document.createElement('option');
    elOptNew.text = text;
    elOptNew.value = value;
    var elSel = document.getElementById(selectid);

    try 
    {
        elSel.add(elOptNew, null); // standards compliant; doesn't work in IE
    }
    catch(ex) 
    {
        elSel.add(elOptNew); // IE only
    }
}

// skopirujeme objekt s grupovanymi zdrojmi do http variable pre server
function saveObj2Var()
{
    var gObj=document.getElementById('gsources');
    var groups=document.getElementById('sourcegroupscombo');
    gObj.value="";
    for (i=0; i<groups.options.length; i++)
    {
        var o = groups.options[i];
        var arr=String(o.value).split("*");
        gObj.value=gObj.value+arr[0]+'*'+arr[1]+'|'
        for (j=0; j<groupedsources[arr[0]]['count']; j++)
        {
            gObj.value=gObj.value+groupedsources[arr[0]][j]+'|';
        };
        gObj.value=gObj.value+"%%%";
        for (j=1; j<groupedsources[arr[0]]['limitnames'].length; j++)
        {
            //gObj.value=gObj.value+limitnames[j]+'%'+limitstates[limitnames[j]]+'%%'
            gObj.value=gObj.value+groupedsources[arr[0]]['limitnames'][j]+'$'+groupedsources[arr[0]]['limitstates'][groupedsources[arr[0]]['limitnames'][j]]+'%%'
            //alert(limitnames[j]+' '+limitstates[limitnames[j]]);
        };
        gObj.value=gObj.value+"#";
    }
}

// vrati string bez medzier
// v kombinacii s func bezdiak() sa pouziva na tvorbu jednoznacneho 
// identifikatora skupiny zdrojov
function removeSpaces(string) 
{
    var tstring = "";
    string = '' + string;
    splitstring = string.split(" ");
    for(i = 0; i < splitstring.length; i++)
    tstring += splitstring[i];
    return tstring;
}

// nakukne ci ma dany object (combobox) nejake options
function hasOptions(obj) 
{
    if (obj!=null && obj.options.length>0) { return true; }
    return false;
    
}

// overi ci je dana option v danom combe a vrati bool
function isComboOption(option,combo)
{
    var c=document.getElementById(combo);
    var ret="0";
    for (var i=0; i<c.options.length; i++) 
    {
        if (c.options[i].value == option) { ret="1"; };
    };
    return ret;
}

// skopiruje vybrane options z "from" comboboxu do "to" comboboxu
// rewrite - boolean - ak je false, tak sa existujuca hodnota neprepise
function CopySelectOptions(from,to,rewrite) 
{
    var options = new Object();
    var fromN=from;
    var toN=to;
    var canadd=true;
    var vmod=new Array();
    var val="";
                            
    from = document.getElementById(from);
    to = document.getElementById(to);
    
    
    if (hasOptions(to)) 
    {
        for (var i=0; i<to.options.length; i++) 
        {
            options[to.options[i].value] = to.options[i].text;
        }
    }
    if (!hasOptions(from)) { return; }
    for (var i=0; i<from.options.length; i++) 
    {
        var o = from.options[i];
        if (o.selected) 
        {
            if (options[o.value] == null || options[o.value] == "undefined" || options[o.value]!=o.text) 
            {
                if (!hasOptions(to)) { var index = 0; } else { var index=to.options.length; }
                
                if (o.value!="")
                { 
                    if (rewrite!=1)
                    {
                        canadd=true;
                        for (var x=0; x<to.options.length; x++) 
                        {
                            vmod=o.value.split("*");
                            val="";
                            if (vmod.length>1) { val=vmod[0]; } 
                            if ((to.options[x].value == val)
                              &&(to.options[x].value != "")
                              &&(to.options[x].value != "undefined")
                              &&(to.options[x].value != null)) 
                            { canadd=false;}; 
                        };
                    };
                    if (canadd==true)
                    {
                        to.options[index] = new Option( o.text, o.value, false, false); 
                        to.options[index].style.color=o.style.color;
                        to.options[index].style.fontWeight=o.style.fontWeight;
                        var arr=String(o.value).split("*");
                        if (arr.length>1)
                        {
                            var parentOption=arr[1];
                            var f=from.options[parentOption];
                            to.options[index].text+=" - "+f.text;
                        };
                        canadd=false;
                    };
                };
            };              
        };
    };
    from.selectedIndex = -1;
    to.selectedIndex = -1;
}

//vymaze vsetky options z comboboxu daneho v id
function ClearComboOptions(id)
{
    var obj=document.getElementById(id)
    
    if (hasOptions(obj))
    {
        var pocetoptions=obj.options.length
        for (i=0; i<= pocetoptions; i++)
        {
            obj.options[i]=null;
        }
    }
    obj.length=0;
}

// vrati string bez diakritiky 
// pouziva sa na tvorbu jednoznacneho identifikatora skupiny
function bezdiak(txt)
{
    sdiak = "áäčďéěíĺľňóô öŕšťúů üýřžÁÄČĎÉĚÍĹĽŇÓÔ ÖŔŠŤÚŮ ÜÝŘŽ";
    bdiak = "aacdeeillnoo orstuu uyrzAACDEEILLNOO ORSTUU UYRZ";
    tx = "";
    for(p = 0; p < txt.length; p++)
    {
        if (sdiak.indexOf(txt.charAt(p)) != -1)
        {
            tx += bdiak.charAt(sdiak.indexOf(txt.charAt(p)));
        }
        else tx += txt.charAt(p);
    }
    return tx;
} 

// vytvori novu skupinu zdrojov
// momentalne chyba kontrola na duplicity           
function NewSourcesGroup(name)
{
    var grpid = bezdiak(removeSpaces(name));
    // ulozime limity
    if ((previousgroup!='undefined')&&(previousgroup!="-1")&&(previousgroup!=null)&&(previousgroup>=0)) 
        { SaveSourcesForGroup2Obj(previousgroup); }
        else
        { 
            var obj=document.getElementById('sourcegroupscombo');
            if (obj.length>0) { SaveSourcesForGroup2Obj(0); };
        };
        
    if (name!="") 
    { 
        appendSelectOption('sourcegroupscombo',name,grpid+"*"+name); 
        // nastaveme focus poslednej optione
        var obj=document.getElementById('sourcegroupscombo');
        obj.selectedIndex=obj.length-1;
        previousgroup=obj.selectedIndex;
        SaveSourcesForGroup2Obj();
    };
    ClearComboOptions('sourcesforgroup');
    toggleGrpControlsState(false);                          
}

// premenuje skupinu zdrojov aktualne vybranu v comboboxe
function RenameSourcesGroup(newname)
{
    var obj=document.getElementById('sourcegroupscombo')
    if (hasOptions(obj))
    {
        if (obj.selectedIndex!=-1)
        {
            var arr=String(obj.value).split("*")
            var name = newname
            if (name!="") { obj.options[obj.selectedIndex].value=arr[0]+"*"+name; obj.options[obj.selectedIndex].text=name; };
        }
        else
        {
            alert('empty');
        }
        SaveSourcesForGroup2Obj()
    };
}



// ulozi zdroje pre aktualne vybranu skupinu do js objektu groupedsources
// s tymto objektom potom pracuje onclick event comboboxu sourcegroupscombo
function SaveSourcesForGroup2Obj(previousG)
{
    var limitsources="";
    var groups=document.getElementById('sourcegroupscombo');
    var saveWhich=groups.selectedIndex;
    if ((previousG!=-1)&&(previousG!=null)&&(previousG!='undefined')) { saveWhich = previousG; };
    // pokud neni nic vybrano, koncim
    if (saveWhich!=-1)
    {
        var o = groups.options[saveWhich];
        //alert('saveWhich '+saveWhich);
        if ((o != null)&&(o != "")&&(hasOptions(groups)))
        {
            var arr=String(o.value).split("*");
            groupedsources[arr[0]]= new Array();
            groupedsources[arr[0]]['title']=arr[1];
            var sources=document.getElementById('sourcesforgroup');
            for (j=0; j < sources.options.length; j++)
            {
                var os=sources.options[j];
                var arr2=String(os.value).split("*");
                groupedsources[arr[0]][j]=arr2[0]+"*"+os.text;
                limitsources=limitsources+arr2[0]+',';
            };
            groupedsources[arr[0]]['count']=j;
            // alert(limitnames);
            limitnames="";
            limitstates="";
            limitnames=new Array();
            limitstates=new Object();
            ClientRestoreLimits('store');
            //debugger
            groupedsources[arr[0]]['limitnames']=new Array();
            groupedsources[arr[0]]['limitnames']=limitnames;
            groupedsources[arr[0]]['limitstates']=new Object();
            groupedsources[arr[0]]['limitstates']=limitstates;
            
            ajaxpage('i2.entry.cls?ictx='+arlictx+'&op=ajax_lims&param=2&&src='+limitsources,'limits','ClientRestoreLimits("restore")');
        };
    };
    
    // alert(gObj.value);
}

// nahra do comboboxu so zdrojmi zdroje pre aktualne vybranu skupinu zdrojov z
// js objectu groupedsources
// spusta sa onclick pre sourcegroupscombo
function LoadGroupFromObj()
{
    // ulozia sa data pre predchazdzajucu zakliknutu skupinu
    // v pripade ze uzivatel urobil medzicasom zmeny (ide hlavne o limity)
    if ((previousgroup!="-1")) 
    { 
        SaveSourcesForGroup2Obj(previousgroup); 
    };
    // a pokracujeme v loadovani
    var groups=document.getElementById('sourcegroupscombo');
    
    if (!groups.length<=0)
    {
        var o = groups.options[groups.selectedIndex];
        var arr=String(o.value).split("*");
        var sources=document.getElementById('sourcesforgroup');
        ClearComboOptions('sourcesforgroup');
        var limitsources=""
        
        for (i=0; i<groupedsources[arr[0]].count; i++)
        {
            var arr2 = String(groupedsources[arr[0]][i]).split("*");
            appendSelectOption('sourcesforgroup',arr2[1],arr2[0]);
            limitsources=limitsources+arr2[0]+',';
        };
        limitnames=groupedsources[arr[0]]['limitnames'];
        limitstates=groupedsources[arr[0]]['limitstates'];
        ajaxpage('i2.entry.cls?ictx='+arlictx+'&op=ajax_lims&param=2&src='+limitsources,'limits','ClientRestoreLimits("restore")');
    };
    previousgroup=groups.selectedIndex;
    //debugger
}


function showInputBox(action,value,text)
{
var obj3 = document.getElementById('inputboxtxt');
obj3.innerHTML=text+"<br />";            
var obj = document.getElementById('inputbox');
obj.style.display='block';
obj.style.zIndex=60;
var obj2 = document.getElementById('inputboxaction');
obj2.value=action;
var obj4 = document.getElementById('inputboxfield');
obj4.focus();
}

function hideInputBox()
{
var obj = document.getElementById('inputbox');
obj.style.display='none';
grayOut(false);
}

function InputBoxOK()
{
hideInputBox();
var obj2 = document.getElementById('inputboxaction');
var obj4 = document.getElementById('inputboxfield');
if (obj4.value!="")
{
    if (obj2.value=='new')
    {
        NewSourcesGroup(obj4.value);
    }
    else if (obj2.value=='rename')
    {
        RenameSourcesGroup(obj4.value);
    }
    else {};
};
obj4.value="";

}

function InputBoxCancel()
{
hideInputBox();
var obj4 = document.getElementById('inputboxfield');
obj4.value="";
}

function LoadSourceGroupInfoHTML(grp)
{
var obj = document.getElementById('sourcegroupscombo');
var o = ""
if (obj.selectedIndex>=0)
{
    if (grp=="") { o = obj.options[obj.selectedIndex].getAttribute('rel'); }
    else { o = grp };
    ajaxpage(srvURL+'i2.entry.cls?ictx='+arlictx+'&op=ajax_getsrcgrpinfo&grp='+o,'grpinfo','');
};
}

function ProfilePreSave()
{
    var o = document.getElementById('ContDJournalsCombo');
    var ox = document.getElementById('CONTDjournals');
    var a = ""
    ox.value=""
    for (i=0; i<o.options.length; i++)
    {
        a = String(o.options[i].value).split("&journ=");
        if (a.length>0)
        {
            if ((ox.value!="")||(ox.value!=null)||(ox.value!="undefined")) 
            {
                ox.value=ox.value+","+a[1];
            }
            else
            {
                ox.value=a[1];
            };
        };
    };
    //alert(ox.value);
    return false;
}

/* ostatni */

function IdxLookup()
{
  var TA=document.forms[0].term.value;
  if (TA==undefined)
  { 
    TA=document.forms[0].term1.value;
    TF=document.forms[0].fld1.value;
  }
  else var TF=document.forms[0].fld.value;
  
  // pozn. ked pred TA dam escape() domrsi sa diakritika.. ?
  var x='i2.lookup.cls?ictx='+arlictx+'&term='+(TA);
  // ANY je default - tak ho neberieme ako seleckcny
  if ((TF!='') && (TF!='ANY')) x=x+'&fld='+TF;
  
  //alert('redir to: '+x);
  location.href=x;
  return false;
}

// reload stranky so zobrazenim/skrytim limit podla 'disp'
// zachovava stav term & fld
function DispLim(disp)
{
  var TA=document.forms[0].term.value;
  var TF=document.forms[0].fld.value;
  // pozn. ked pred TA dam escape() domrsi sa diakritika.. ?
  var sn1=window.location.href.split('?')[0].split('/')
  var sn=sn1[sn1.length-1]
  var x=sn+'?ictx='+arlictx+'&term='+(TA)+'&show_lim='+disp;
  // ANY je default - tak ho neberieme ako seleckcny
  if (TF!='') x=x+'&fld='+TF;
  
  //alert('redir to: '+x);
  location.href=x;
  return false;
}

// bud nahradi alebo operatorom prilepi otazku z query history comboboxu do
// pola pre expertne vyhladavanie
function qhistTOcqlq()
{
   
   if (document.forms[0].elements[4].checked) { var operator=document.forms[0].elements[4].value; };
   if (document.forms[0].elements[5].checked) { var operator=document.forms[0].elements[5].value; };
   if (document.forms[0].elements[6].checked) { var operator=document.forms[0].elements[6].value; };
   if (document.forms[0].elements[7].checked) { var operator=document.forms[0].elements[7].value; };
   if (operator==null) { operator=""; };
   //var operators=document.getElementsByName('expop');
   //if (operators[0].checked) { var operator=operators[0].value; };
   //if (operators[1].checked) { var operator=operators[1].value; };
   //if (operators[2].checked) { var operator=operators[2].value; };
   //if (operators[3].checked) { var operator=operators[3].value; };
   //var operator=operator || '';
   var qhobj=document.getElementById('qhist');
   var cqlqobj=document.getElementById('cqlquery');
   if (qhobj.value=='undefined') { qhobj.value=""; };
   if (operator=='') { cqlqobj.value=String(qhobj.value).replace(/~/g,'"'); }
   else
   { cqlqobj.value=cqlqobj.value+' '+operator+' '+String(qhobj.value).replace(/~/g,'"'); };
   
}

// od servera vypyta kontrolu syntaxe cql otazky v expertnom vyhladavani
function CheckCQLsyntax(query,box,ictx)
{
  var obj=document.getElementById(box);
  obj.style.display='inline';
  ajaxpage('i2.entry.cls?ictx='+ictx+'&op=ajax_chkcqlsyntax&query='+query,box,'FadeOut(\''+box+'\',1000);');
}

// odeslani formulare rozsireneho vyhledavani na enter
function advancesEvent(event) {
  event = event || window.event;
  if (event.keyCode == 13) {
    document.getElementById('f').submit();
  }
} 

