//////////////////////////////
//This file is part of the projectLK
//////////////////////////////
//name: guifunctions.js
//last modified/version: 14.07.2009
//GUI: default
//description: All Javascript functions for this GUI.
//Author: David Glenck
//Licence: GNU General Public Licence (see license.txt in Mainfolder)
//////////////////////////////

//////////
//CONTENT
//  Global Variables
//  Corehandle
//  Build Forms / Formulare Generieren
//  Switch Submits
//  Load Elements / Lade Elemente
//  Visual Effects
//  Other
//  ----------
//  Interactions / Interaktionen
//  Wordtable Effects
//  Flowloader
//  Import
//  Searchbar & Autosearch
//  Person Rearrange
//  Wordtable Columns
//  Menu Dropdown
//////////

//////////
//GLOBAL VARIABLES
//////////

//Store Information
var local=new Object();
//reset
local['wordclassids']=new Object();
local.mouseisdown=0;
local.tagadding=0;
local.as=new Object();
local.asgot=new Object();
local.aselect=-1;
local.s_el=new Object();

//Mouse position logging
function mouseposition(e) {
  if (!e) var e = window.event;
  local.mouseX=e.clientX;
  local.mouseY=e.clientY;
}
document.onmousedown=mouseposition;

//Initialize
function initialize_gui() {
  //generate popup element if not already there.
  if($('popup')==null) {
    tdiv=document.createElement('div');
    Element.extend(tdiv);
    tdiv.writeAttribute('id','popup');
    document.body.appendChild(tdiv);
  }
  //show the loading time
  showtime(time);
  //Searchbar
  $('searchform').onsubmit=function() { return search(); }
  $('searchtext').onblur=function() { 
    window.setTimeout("$('searchform').style.display='none'; $('searchclick').style.width='30%'; hide_autosearch();",200);
  }
  if(here.searching!=null) { show_search(); }
  //start autoscrolling
  if($('wordform') && $('wordform').autoload) { 
    checkscroll();
  }
}

//////////
//COREHANDLE
//////////

//Output: table with wrong answers
function gui_wrong(out) {
  msg(out);
}

//Output: Errors
function gui_error(out) {
  msg(out);
}

//Shows a loading icon
function gui_ajaxcatch(num) {
  var jxl=$('ajaxloader');
  if(num==0) { jxl.show(); }
  else if(num==8) { jxl.hide(); }
  hid = window.setTimeout("$('ajaxloader').hide()", 5000);
}

//Output: Request errors
//function gui_request_error(info) {
  
//}

//////////
//BUILD FORMS / FORMULARE GENERIEREN
//////////

function tagdel(info) {
  if(!info.count) { msg(la.err_209); }
  else if(!anyword('wordform')) { msg(la.err_209); }
  else {
    var td_params = new formparam('deltag','delete');
    td_params.addselect('tagid','tag');
    optionlist=new Object;
    for(i=0;i<info.count;i++) {
      optionlist[info.id[i]]=info.name[i];
    }
    td_params.select['tagid'].addoption(optionlist);
    rvar.create('deltag','delete_tag',here,'close_ask(); relement(params[\'wordid[]\'],\'tag_\',\'_\'+params.tagid);');
    rvar.deltag.addparams($('wordform').serialize(true));
    rform('deltag',td_params);
  }
}

function tagadd() {
  if(anyword('wordform')) {
    var ta_params = new formparam('addtag');
    ta_params.addinput('newtag','name');
    rvar.create('addtag','add_tag',here,'close_ask(); appendtag(info,params);');
    rvar.addtag.addparams($('wordform').serialize(true));
    rform('addtag',ta_params);
  } else { msg(la.err_209); }
}

function saveadd() {
  if(anyword('wordform')) {
    var sa_params = new formparam('newsave');
    sa_params.addinput('newsave','name');
    rvar.create('addsave','create_save',here,'close_ask()');
    var ser=$('wordform').serialize(true);
    rvar.addsave.addparams(ser);
    rform('addsave',sa_params);
  } else { msg(la.err_209); }
}

function insertinto(info) {
  if(!info.count) { msg(la.err_nosave); }
  else if(!anyword('wordform')) { msg(la.err_209); }
  else {
    var td_params = new formparam('insertto','insert');
    td_params.addselect('newsaveid','savepoint');
    optionlist=new Object;
    for(i=0;i<info.count;i++) {
      optionlist[info.id[i]]=info.name[i];
    }
    td_params.select['newsaveid'].addoption(optionlist);
    rvar.create('insertinto','add_tosave',here,'close_ask()');
    rvar.insertinto.addparams($('wordform').serialize(true));
    rform('insertinto',td_params);
  }
}

function moveword(info) {
  try{
    if(!anyword('wordform')) { msg(la.err_209); }
    else {
      var ii_params = new formparam('moveto','move');
      ii_params.addselect('movetoreg','register');
      optionlist=new Object;
      for(i=0;i<info.count;i++) {
        optionlist[info.id[i]]=info.name[i];
        if(info.id[i]==here.registerid) { ii_params.select['movetoreg'].selected=info.id[i]; }
      }
      ii_params.select['movetoreg'].addoption(optionlist);
      ii_params.addselect('movetogroup','group');
      ii_params.select['movetogroup'].addoption({0:la['keep'],1:'1',af:la['af']});
      rvar.create('moveto','edit_multiword',here,'close_ask(); updatewords(params,info)');
      rvar.moveto.addparams($('wordform').serialize(true));
      rform('moveto',ii_params);  
    }
  } catch(err) { msg('[0008]:'+err); }
}

function newform() {
  var nf_params = new formparam('newform');
  nf_params.addinput('newform','name');
  rvar.create('addform','create_form',here,'close_ask(); appendform(info)');
  rform('addform',nf_params);
}

function newperson() {
  var nf_params = new formparam('newperson');
  nf_params.addinput('newperson','name');
  rvar.create('addperson','create_person',here,'close_ask(); appendperson(info)');
  rform('addperson',nf_params);
}

function newreg() {
  var nr_params = new formparam('newreg');
  nr_params.addinput('newregister','name','',0);
  rvar.create('addreg','create_reg','','close_ask(); appendreg(info)');
  rform('addreg',nr_params);
}

function editreg() {
  var er_params = new formparam('rename','rename');
  er_params.addinput('newregister','name',here.registername);
  rvar.create('editreg','edit_reg',{registerid:here.registerid},'close_ask(); mn_reg.innerHTML=info.registername');
  rform('editreg',er_params);
}

function querysave(wrong) {
  var qs_params = new formparam('querysave');
  qs_params.addinput('newsavename','name');
  rvar.create('savequery','query_save',{registerid:here.registerid,queryid:here.queryid,wrong:wrong},'close_ask()');
  rform('savequery',qs_params);
}

//////////
//SWITCH SUBMITS
//////////

//switch: editing verb
function addedit_verb() {
  try{
    var editverb=$('editverb');
    if(!editverb.wordid_3 || editverb.wordid_3.value!='adding') { 
      req('edit_verb',{verbid:editverb.wordid.value, newkword:editverb.newkword.value},'rewriteline(params)');            
    } else {
      req('add_verb',{newkword:editverb.newkword.value, wordid:editverb.wordid_0.value, personid:editverb.wordid_1.value, formid:editverb.wordid_2.value},'appendverb(info,params)')
    } 
  } catch(err) {
    msg('[0009]:'+err);
  }
  return false;
}

//switch: editing word
function submitwordform() {
  try{
    if(local.tagadding==1) { 
      rvar.create('addtag','add_tag',here,'appendtag(info,params)');
      rvar.addtag.sendreq({newtag:$('newtaginput').value, 'wordid[]':local.wordtagid});
    }
    else { req('edit_word',$('wordform').serialize(true),'rewriteline(params);'); }
  } catch(err) {msg('[0010]:'+err)};
  return false;
}

//switch: editing during query
function qeditswitch() {
  try{
    if(qe.mode==4) {       
       req('tedit_verb',{verbid:$('wordform').wordid.value, newkword:$('wordform').newkword.value},'rewriteline(params)');  
    } else { submitwordform(); }
  } catch(err) {msg('[1011]:'+err)};
  return false;
}

//switch: editing person or form
function editpersonform() {
  try{
    var parameter=$('verbqueryform').serialize(true);
    if(local.editwhat=='newform') { req('edit_form',{formid:parameter.wordid,newform:parameter.newform},'rewriteline(params)') }
    else if(local.editwhat=='newperson') { req('edit_person',{personid:parameter.wordid,newperson:parameter.newperson},'rewriteline(params)') }
  } catch(err) {msg('[0012]:'+err)};
  return false;
}

//////////
//LOAD ELEMENTS / LADE ELEMENTE
//////////
//functions which generate HTML output / Funktionen zum erzeugen von HTML-Ausgaben

//Loads a simple message on screen
function msg(msg) {
  input='<div class="popup_inner">'+msg+'</div><form action="javascript: return false"><input type="button" value="'+la.ok+'" onclick="javascript: close_ask()"></form>'
  $('popup').innerHTML=input; 
  dopopup();
}

//Loads a dialog before function
function ask(msg,functionstring) {
  input=msg+"<form action='javascript: return false' name='popup_form' id='popup_form'><input type='button' onclick='javascript: close_ask(); "+functionstring+"' id='popup_yes' value='"+la[1]+"'><input type='button' onclick='javascript: close_ask()' id='popup_no' value='"+la[0]+"'></form>";
  $('popup').innerHTML=input;
  dopopup(); 
  $('popup_yes').focus();
}

//Loads a form dialog before function. (more flexible)
function rform(reqvar,params) {
  var errnum=0;
  var ret="<form id='askform' action='#' onsubmit='javascript: if(checkrform()) { return rvar."+reqvar+".sendreq($(\"askform\").serialize(true)); } else { return false; }'>";
    ret+='<span class="titel reqformtitel">'+la[params.title]+":</span>";
    ret+='<ul class="inputlist">';
      try {
        for(i in params.input) {
          with(params.input[i]) {
            ttype=type?type:'text';
            var tid=id?id:name;
            var tneed=needed==1?' class="form_need" ':'';
            ret+="<li><label for='"+tid+"'>"+la[label]+":</label><input type='"+ttype+"' name='"+name+"' id='"+tid+"' value='"+value+"' "+tneed+"></li>";
          }
        }
      }catch(err) { msg('[0003]:'+err); errnum=1; }
      try {
        for(l in params.select) {
          with(params.select[l]) {
            var tid=id?id:name;
            ret+="<li><label for='"+tid+"'>"+la[label]+":</label><select name='"+name+"' size='1' id='"+tid+"'>";
            for(j in option) {
              var sel=j==selected?"selected='selected'":"";
              ret+="<option value='"+j+"' "+sel+">"+option[j]+"</option>";
            }
            ret+="</select></li>";
          }
        }
      }catch(err) { msg('[0004]:'+err); errnum=2; }
    ret+='<ul class="inputlist">';
    ret+="<input type='submit' value='"+la[params.submittext]+"'>";
    ret+="<input type='button' value='"+la[params.canceltext]+"' onclick='javascript: close_ask()'/>";  
  ret+='</form>';
  if(errnum==0) {
    $('popup').innerHTML=ret;
    dopopup();
    $('askform')[tid].focus();
  }
}

//checks a generated form
function checkrform() {
  try { 
    var ret=true;
    var i=0;
    var npts=$$('input.form_need');
    while(input=npts[i]) {  //walks through all inputs that are necessary
      if(input.value=='') { 
        input.focus();
        ret=false;
        break; 
      }
      i++;
    }
    return ret;
  } catch (err) { msg('[0017]:'+err); return false; }
}

//////////
//VISUAL EFFECTS
//////////
//functions which show or hide elements on screen

//opens popup
function dopopup() {
  var popup=$('popup');
  popup.style.display="block";
  popup.style.height='auto';
  popup.style.width='auto';
  var height=document.body.clientHeight;
  var width=document.body.clientWidth;
  var popheight=popup.clientHeight;
  var popwidth=popup.clientWidth;
  var hlim=Math.round(height*0.8);
  if(popheight>hlim) { popheight=hlim; popup.style.height=hlim+"px"; }
  popup.style.top=Math.round(height/2-popheight/2)+"px";
  popup.style.left=Math.round(width/2-popwidth/2)+"px";
}

//closes popup
function close_ask() { 
  try {
    var popup=$('popup')
    popup.style.display="none"; 
    popup.innerHTML=''; 
  }catch(err) {}
}

//closes popup
function hide_dropdown() {
  local.timer1 = window.setTimeout("$('dropdown').hide()", 200);
}

//stops closing popup
function hold_dropdown() {
  window.clearTimeout(local.timer1);
}

//closes statusbar
function hidestatus() {
  local.timer2 = window.setTimeout("$('statusbar').hide()", 200);
}

//stops closing statusbar
function holdstatus() {
  window.clearTimeout(local.timer2);
}

//shows a dropdown at mouse position
function load_dropdown_mouse(value) {
  hold_dropdown();
  var dropdown=$('dropdown');
  dropdown.innerHTML=value;
  dropdown.style.top=local.mouseY;
  dropdown.style.left=local.mouseX; 
  dropdown.show();
}

//shows a dropdown next to
function load_dropdown(underid, value) {
  hold_dropdown();
  if(value!='') {
    position= getposition($(underid));
    var left= position[0];
    var top= position[1] + $(underid).offsetHeight+2;
    var dropdown=$('dropdown');
    dropdown.innerHTML=value;
    dropdown.style.top=top;
    dropdown.style.left=left; 
    dropdown.show();
  }
}

//Shows the Status
function showstatus(where) {
  var sttsbr=$('statusbar');
  if(sttsbr.innerHTML!='') {
    var left= $(where).offsetLeft;
    var top= $(where).offsetTop + $(where).offsetHeight+2;
    sttsbr.style.top=top;
    sttsbr.style.left=left; 
    sttsbr.show();
  }
}

//////////
//OTHER
//////////

//shows loading time
function showtime(time) {
  try {
    ntime=new Date().getTime() / 1000;
    loadt=ntime-time;
    $('loadtime').innerHTML=Math.round(loadt*100000)/100000+'s';
  } catch(err) {}
}

//Checks if any word is selected
function anyword(formid) {
  try {  
    var ret=true;
    var ser=$(formid).serialize(true);
    if(ser['wordid[]']==null) { ret=false; }
    return ret;
  } catch (err) { msg('[0027]:'+err); return false; }
}

//Loads all Values from an Array of Elements
function getallval(elements) {
  i=0;
  ret=new Array;
  while(elements[i]) {
    ret[ret.length]=elements[i].value;
    i++;
  }
  return ret;
}

//saves elements to array and loads them
function $$$(element) {
  local.s_el[element]?void(0):local.s_el[element]=$$(element);
  return local.s_el[element];
}

//////////
//INTERACTIONS / INTERAKTIONEN
//////////

//----
//WORDS / WÖRTER

//Checks if form is filled in correctly
function checkform() {
  try {
    var addw=$('addword');
    ret=true;
    if(addw.newwordfirst.value=='') { msg(la.err_231); addw.newwordfirst.focus(); ret=false; }
    else if(addw.newwordfore.value=='') { msg(la.err_232); addw.newwordfore.focus(); ret=false; } 
    else {
      errmsga=validstr(addw.newwordfirst.value);
      errmsgb=validstr(addw.newwordfore.value);
      if(errmsga>0) { 
        msg(la.err_invalidsyntax+'<!-- '+errmsga+' -->');
        addw.newwordfirst.focus();
        ret=false;
      } else if(errmsgb>0) { 
        msg(la.err_invalidsyntax+'<!-- '+errmsgb+' -->');
        addw.newwordfore.focus();
        ret=false;
      }
    }
    return ret;
  } catch (err) { msg('[0007]:'+err); return false; }
}

// Stores Form an resets it
function resetform() {
  var addw=$('addword');
  local.wordfirst=addw.newwordfirst.value;
  local.wordfore=addw.newwordfore.value;
  local.satz=addw.newsentence.value;
  local.tags=addw.newtags.value;
  local.wordclass=addw.newwordclass.selectedIndex;
  addw.reset();
  addw.newwordfirst.focus();
}

// restores the form from resetform()
function restoreform() {
  var addw=$('addword');
  addw.newwordfirst.value=local.wordfirst;
  addw.newwordfore.value=local.wordfore;
  addw.newsentence.value=local.satz;
  addw.newtags.value=local.tags;
  addw.newwordclass.selectedIndex=local.wordclass;
}

//after a word is created
function action_c_word(info) {
  try{
    if(info['similar']==1) { //similar word was found
      similardialog();
    } else {  //Word was added succesfully
      $('wordlist').show();  //show table of recently added words
      $('lastlabel').show(); 
      appendwords(info,1);   //Append new added word
    }
  } catch (err) { msg(err); }
}

//ask what to do when similar word was found
function similardialog() {
  input=la.err_similar;
  restoreform();
  rvar.create('addsimilar','create_word',$('addword').serialize(true),['resetform(); close_ask()','action_c_word(info)'])
  input+='<form><input type="button" onclick="javascript: if(checkform()) { return rvar.addsimilar.sendreq({\'force\': 1}); }" value="'+la.addanyway+'"></input>';
  input+='<input type="button" onclick="close_ask()" value="'+la.ok+'"></input>';
  input+='</form>';
  $('popup').innerHTML=input; 
  dopopup();
}

//find out how the answers in the query should be edited
function queryedit(where,qa) {
  var what;
  if((qe.mode=='0') || (qe.mode=='2')) { what=(qa==0)?'newwordfirst':'newwordfore'; }
  else if((qe.mode=='1') || (qe.mode=='3')) { what=(qa==1)?'newwordfirst':'newwordfore'; }
  else if(qe.mode=='4') { what=(qa==1)?'newkword':false; }
  if(what) { editword(where, qe.gone.id, what); }
}

//opens an editbox to edit a word in the wordtable and other locations
function editword(which, id, what, mode) {
  if(!mode) { mode=0; }
  closeform();
  local.editing=which;
  local.editwhat=what;
  local.editval=which.innerHTML;
  if(what=="newwordclass") { 
    wordclassid=getwcid(id);
    inputs='<select id="editing" name="'+what+'" size=1 onblur="javascript: closeform()" onchange="javascript: req(\'edit_word\',$(\'wordform\').serialize(true),\'rewriteline(params)\');">';
    selected=new Array(6);
    for(i=0;i<6;i++) { if(i==wordclassid) {selected[i]='selected';} else { selected[i]=''; } }
    inputs+='<option value=0 '+selected[0]+'>'+la.classname[0]+'</option>';
    inputs+='<option value=1 '+selected[1]+'>'+la.classname[1]+'</option>';
    inputs+='<option value=2 '+selected[2]+'>'+la.classname[2]+'</option>';
    inputs+='<option value=3 '+selected[3]+'>'+la.classname[3]+'</option>';
    inputs+='<option value=4 '+selected[4]+'>'+la.classname[4]+'</option>';
    inputs+='<option value=5 '+selected[5]+'>'+la.classname[5]+'</option>';
    inputs+='</select>';
    inputs+='<input type="hidden" name="wordid" value="'+id+'"></input>';
    inputs+='<input style="display:none" type="submit"></input>';
  } else if(what=="newgroup") { 
    group=$('group_'+id).innerHTML;
    inputs='<select id="editing" name="'+what+'" size=1 onblur="javascript: closeform()" onchange="javascript: req(\'edit_word\',$(\'wordform\').serialize(true),\'rewriteline(params)\');">';
    inputs+='<option value="'+local.editval+'" selected>'+local.editval+'</option>';
    if(local.editval!='af') { inputs+='<option value="af">af</option>'; }
    if(local.editval!=1) { inputs+='<option value="1">1</option>'; }
    inputs+='</select>';
    inputs+='<input type="hidden" name="wordid" value="'+id+'"></input>';
    inputs+='<input style="display:none" type="submit"></input>';
  } else {
    inputs='<input id="editing" onblur="javascript: closeform()" type="text" name="'+what+'" value="'+local.editval+'"></input>';
    if(typeof(id)=='object') {
      len=id.length;
      for(i=0;i<len;i++) {
        inputs+='<input type="hidden" name="wordid_'+i+'" value="'+id[i]+'"></input>';   
      }
    } else {
      inputs+='<input type="hidden" name="wordid" value="'+id+'"></input>';
    }
    inputs+='<input style="display:none" type="submit"></input>';
  }
  if (mode==1) {
    Element.hide(which);
    holder=document.createElement('span');
    holder.writeAttribute('id','holder');
    holder.innerHTML=inputs;
    which.parentNode.insertBefore(holder,which);
  } else {
    which.innerHTML=inputs;
  }
  $('editing').focus();
}

//Refreshes an edited word in the wordtable
function rewriteline(params) {
  try{
    var tediting=local.editing;
    var teditwhat=local.editwhat
    closeform();
    tediting.innerHTML=params[teditwhat];
    if(teditwhat=='newwordclass') { 
     id=params['wordid'];
     local.wordclassids[id]=params['newwordclass']
     tediting.innerHTML=la.classname[params['newwordclass']];
    }
  } catch(err) { msg(err); }
}

//closes the edit form from editword()
function closeform() {
  if(local.editing!=null) {
    local.editing.innerHTML=local.editval;
    Element.show(local.editing);
    if($('holder')) {
      local.editing.parentNode.removeChild($('holder'));
    }
  }
  local.editing=null;
  local.editval=null;
  local.editwhat=null;
  if($('editverb')) { 
    if($('editverb').wordid_3) { $('editverb').wordid_3.value=''; }
  }
}

//Appends words in the wordtable
function appendwords(wordlist,mode) {
  try{
    maxword=parseFloat($('wordform').countwords.value);
    savechecked();  //temporary save what is checked

    //Create nodes
    var temptable=$('wordlist').getElementsByTagName('tbody')[0];
    var gtr=document.createElement('tr');
        Element.extend(gtr);
    var gtd=document.createElement('td');
    if(here.registerid==null) { var rp=1; } else { var rp=0; }
    for(var l=0;l<7+rp;l++) { gtr.appendChild(gtd.cloneNode(true)); }
    if(!mode) { gtr.appendChild(gtd.cloneNode(true)); }
    //Checkbox
    gcheck=document.createElement('input');
    Element.extend(gcheck);
    gcheck.writeAttribute('type','checkbox');
    gcheck.writeAttribute('name','wordid[]');
    gcheck.writeAttribute('onclick','javascript: this.checked=!this.checked');
    //Tags
    gtag=document.createElement('span');
    Element.extend(gtag);   
    gtag.writeAttribute('onmouseover',"javascript: this.lastChild.style.visibility='visible'");
    gtag.writeAttribute('onmouseout',"javascript: this.lastChild.style.visibility='hidden'");   
    gtag.appendChild(document.createElement('a'));
    Element.extend(gtag.firstChild);
    gtag.firstChild.writeAttribute('href','javascript: void(0)');
    gtag.firstChild.writeAttribute('class','deletebutton hidden');
    gtag.firstChild.writeAttribute('title',la['delete']);
    gtagadd=document.createElement('a');
    Element.extend(gtagadd);
    gtagadd.writeAttribute('href','javascript: void(0)');
    gtagadd.writeAttribute('class','addbutton hidden');
    gtagadd.writeAttribute('title',la['add']);
    //Options
    gopt=document.createElement('a');
    Element.extend(gopt);
    gopt.writeAttribute('href','javascript: void(0)');
    gopt.writeAttribute('class','blackdrop');
    gopt.writeAttribute('title',la['options']);
  } catch(err) {
    msg('Error[000]: '+err);
  }
  //Write Nodes
  for(i=0;i<wordlist['count'];i++) {
    try{
      j=i+maxword;
      var t=new Object;
      if(typeof(wordlist['id']) != 'object') {
        tid=wordlist['id'];
        t.registerid=wordlist['registerid'];
        t.group=wordlist['group'];
        t.wordfirst=wordlist['wordfirst'];
        t.wordfore=wordlist['wordfore'];
        t.sentence=wordlist['sentence'];
        t.tag=wordlist['tagslist'];
        t.wordclass=wordlist['wordclass'];
      } else {
        tid=wordlist['id'][i];
        t.registerid=wordlist['registerid'][i];
        t.group=wordlist['group'][i];
        t.wordfirst=wordlist['wordfirst'][i];
        t.wordfore=wordlist['wordfore'][i];
        t.sentence=wordlist['sentence'][i];
        t.tag=wordlist['tagslist'][i];
        t.wordclass=wordlist['wordclass'][i];
      }
    } catch(err) { msg('Error[011.0]-'+i+':'+err); }
    try{   
      if(t.wordclass==null) { t.wordclass=0; }
      //tr node
      var ttr=gtr.cloneNode(true);
      Element.extend(ttr);
      ttr.writeAttribute('id','wordlist_tr_'+tid);
      ttr.writeAttribute('onMouseOver','javascript: highlighthover('+tid+', true)');
      ttr.writeAttribute('onMouseOut','javascript: highlighthover('+tid+', false)');
      //Checkbox
      if(!mode) {
        ttd=ttr.childNodes[0];
        tcheck=gcheck.cloneNode(true);
        Element.extend(tcheck);
        tcheck.writeAttribute('id','check_'+tid);
        tcheck.writeAttribute('value',tid);
        Element.writeAttribute(ttd,'onMouseOut','multicheck('+tid+')');
        Element.writeAttribute(ttd,'onclick','javascript: checkthisbox('+tid+')');
        ttr.firstChild.appendChild(tcheck);
      }
    } catch(err) { msg('Error[011.1]-'+i+':'+err); }
    try{
      //Register
      if(rp==1) {
        ttd=ttr.childNodes[0+!mode];
        Element.extend(ttd);
        ttd.writeAttribute('id','register_'+tid);    
        ttd.appendChild(document.createTextNode(local.registers[t.registerid])); 
        //names for next fields
        var names=['','group','wordfirst','wordfore','sentence'];
      } else { var names=['group','wordfirst','wordfore','sentence']; }
      //Some Fields
      for(n=0;n<names.length;n++) {
        if(names[n]!='') {
          var m=parseFloat(n)+!mode+rp;
          ttd=ttr.childNodes[m];
          Element.extend(ttd);
          ttd.writeAttribute('id',names[n]+'_'+tid);
          ttd.writeAttribute('ondblclick','javascript: editword(this,'+tid+',\'new'+names[n]+'\')');
          ttd.appendChild(document.createTextNode(t[names[n]]));
        }
      }
    } catch(err) { msg('Error[011.2]-'+i+':'+err); }
    try{
      //tags
      ttd=ttr.childNodes[4+!mode+rp];
      Element.extend(ttd);
      ttd.writeAttribute('onmouseover',"javascript: this.lastChild.style.visibility='visible'");
      ttd.writeAttribute('onmouseout',"javascript: this.lastChild.style.visibility='hidden'");
      ttd.writeAttribute('id','tags_'+tid);
      for(k=0;k<t.tag['count'];k++) {
        ttag=gtag.cloneNode(true);
        Element.extend(ttag);
        ttag.writeAttribute('id','tag_'+tid+'_'+t.tag['id'][k]);
        Element.extend(ttag.firstChild);
        ttag.firstChild.writeAttribute('onclick',"rvar.create('deltag','delete_tag',{wordid:"+tid+",tagid:"+t.tag['id'][k]+"},'close_ask(); relement(params.wordid,\\'tag_\\',\\'_\\'+params.tagid);'); ask('"+la.asktagdel+"','rvar.deltag.sendreq()')"); 
        ttag.insertBefore(document.createTextNode(t.tag['name'][k]), ttag.firstChild);
        ttd.appendChild(ttag);
      }
      ttagform=document.createElement('span');
      Element.extend(ttagform);
      ttagform.writeAttribute('id','tagform_'+tid);
      ttagadd=gtagadd.cloneNode(true);
      Element.extend(ttagadd);
      ttagadd.writeAttribute('onclick',"javascript: addtagform("+tid+")");      
      ttd.appendChild(ttagform);
      ttd.appendChild(ttagadd);
    } catch(err) { msg('Error[011.3]-'+i+':'+err); }
    try{     
      //wordclass
      ttd=ttr.childNodes[5+!mode+rp];
      Element.extend(ttd);
      ttd.writeAttribute('id','wordclass_'+tid);
      ttd.writeAttribute('ondblclick','javascript: editword(this,'+tid+',\'newwordclass\')');
      ttd.appendChild(document.createTextNode(la.classname[t.wordclass]));
      local.wordclassids[tid]=t.wordclass;
      //options
      ttd=ttr.childNodes[6+!mode+rp];  
      Element.extend(ttd);
      ttd.writeAttribute('style',"visibility:hidden");
      ttd.writeAttribute('class',"opts");
      ttd.writeAttribute('id',"options_"+tid);
      topt=gopt.cloneNode(true);
      Element.extend(topt);  
      topt.writeAttribute('id',"dropopt_"+tid);     
      topt.writeAttribute('onclick',"load_wordoptions("+tid+")");
      topt.writeAttribute('onmouseout',"hide_dropdown()");  
      ttd.appendChild(topt);
    } catch(err) { msg('Error[011.4]-'+i+':'+err); }
    try{   
      //Append
      if(mode) {
        temptable.insertBefore(ttr,$('tabhead').nextSibling);
      } else {
        temptable.appendChild(ttr);
      }

    } catch(err) { msg('Error[011.5]-'+i+':'+err); }
  }
  try{
    //check what was checked bevore
    restorechecked();
    for(j=0;j<maxword;j++) {
      hlhoverbyline(j,0);
      hlmarkedbyline(j);
    }
    //refresh wordcount
    $('wordform').countwords.value=parseFloat($('wordform').countwords.value)+wordlist['count'];
    //Do it again
    if(wordlist['count']>0) { checkscroll(); }
  } catch(err) {
    msg('Error[002]: '+err);
  }
}

// Stores which checkboxes are checked
function savechecked() {
  if(document.wordform['wordid[]']) {
    local.checked=new Array();
    j=0;
    while(document.wordform['wordid[]'][j]) {
      if(document.wordform['wordid[]'][j].checked) { local.checked[local.checked.length]=j; }
      j++;
    }
  }
}

//restores the stored checkboxes (savechecked())
function restorechecked() {
  if(document.wordform['wordid[]'] && local.checked) {
    len=local.checked.length;
    for(i=0;i<len;i++) {
      document.wordform['wordid[]'][local.checked[i]].checked=true;
    }
  }
}

//Updates Information of multiple words in the Table
function updatewords(params,info) {
  //remove words that aren't here anymore
  var oobj;
  for(i in params['wordid[]']) {
    tid=params['wordid[]'][i];
    if(params.movetoreg!=here.registerid) {
      oobj=$('wordlist_tr_'+tid);
      if(oobj) { oobj.hide(); }
    } else if(params.movetogroup!=0) {
      oobj=$('group_'+tid);
      if(oobj) { oobj.innerHTML=params.movetogroup; }
    }
  }
}

//Loads options for words in the wordtable
function load_wordoptions(id) {
  hold_dropdown();
  var val="<ul><li><a href='javascript: void(0)' class='menulink' onclick='javascript: rvar.create(\"delword\",\"delete_word\",{wordid:"+id+"},\"if(info[\\\"deleted\\\"]!=0) { relement(params.wordid,\\\"wordlist_tr_\\\"); }\"); ask(\""+la.askworddel+"\",\"close_ask(); rvar.delword.sendreq()\") '>"+la['delete']+"</a></li>";
  wordclass=getwcid(id);
  if(wordclass==2) {
    val +='<li><a class="menulink" href="'+path(2)+'word/'+id+'/verb">'+la.verb+'</a></li> ';
  }
  val+='</ul>';
  load_dropdown_mouse(val);
}

//gets id of the wordclass of a word
function getwcid(id) {
  if(local.wordclassids[id]) { return local.wordclassids[id]; }
  else {
    var wcid=$('wordclassid_'+id);
    if(wcid) { 
      local.wordclassids[id]=wcid.innerHTML;
      return local.wordclassids[id]; 
    } else { return false; }
  }
}

//----
//REGISTER / KARTEI

//after a register is created - appends a regname to the list
function appendreg(info) {
  tname=info['newregister'];
  newli=document.createElement('li');
  Element.extend(newli);
  newli.appendChild(document.createElement('a'));
  newli.firstChild.writeAttribute('href',path(1)+tname);
  newli.firstChild.appendChild(document.createTextNode(tname+' (0)'));
  $$('ul.reglist')[0].appendChild(newli);
}

//After Register is deleted: Reloads location - it's Magic
function removereg(regid) {
  javascript:location.reload();
}

//----
//TAG / TAG

//after a tag is added - appends a tagn to the word
function appendtag(info,params) {
  try{
    if(params['allmarked']!=null) { params['wordid']=getallval($$('input[name="wordid[]"]')) }
    else { params['wordid']=params['wordid[]']; }
    if(typeof(params['wordid'])!='object') { params['wordid']=[params['wordid']]; }
    len=params['wordid'].length;
    for(i=0;i<len;i++) {
      closetagform(params['wordid'][i]);
      tags='';
      for(j=0;j<info['counttag'];j++) {
        if(!$('tag_'+params['wordid'][i]+'_'+info['tagid'][j])) {
          tags+='<span id="tag_'+params['wordid'][i]+'_'+info['tagid'][j]+'" onmouseover="javascript: this.lastChild.style.visibility=\'visible\'" onmouseout="javascript: this.lastChild.style.visibility=\'hidden\'">'+unescape(info['tags'][j])+'<a href="javascript: void(0)" onclick="rvar.create(\'deltag\',\'delete_tag\',{wordid:'+params['wordid'][i]+',tagid:'+info['tagid'][j]+'},\'close_ask(); relement(params.wordid,\\\'tag_\\\',\\\'_\\\'+params.tagid);\'); ask(\''+la.asktagdel+'\',\'rvar.deltag.sendreq()\')" class="deletebutton hidden" title="'+la['delete']+'"></a></span>';
        }
      }
      var tags=$('tags_'+params['wordid'][i]);
      tags.innerHTML=tags+tags.innerHTML;
    }
  } catch(err) { msg(err); }
}

//shows an Input to add a tag / Input für das Hinzufügen von Tags
function addtagform(wordid) {
  local.tagadding=1;
  local.wordtagid=wordid;
  $('tagform_'+wordid).innerHTML='<input type="text" onblur="javascript: closetagform('+wordid+')" id="newtaginput" name="newtag"></input><input type="submit" style="display:none"/>';
  $('newtaginput').focus();
}

//closes input from addtagform()
function closetagform(wordid) {
  local.tagadding=0;
  local.wordtagid=null;
  if( $('tagform_'+wordid) ) { $('tagform_'+wordid).innerHTML=''; }
}

//----
//SAVE / SPEICHERPLATZ

//When a save is deleted just reload
function savedeleted() {
  javascript:location.reload();
}

//----
//VERB, PERSON & FORM / VERB, PERSONEN & FORMEN

//writes a verb when added
function appendverb(info,params) {
  closeform();
  var id=info['verbid'];
  $('nverb_'+params['wordid']+'_'+params['personid']+'_'+params['formid']).id='verb_'+id;
  $('verb_'+id).innerHTML=params['newkword'];
  
  $('verb_'+id).writeAttribute('ondblclick','javascript: editword(this,'+id+',\'newkword\')');
}

//When a new verb is created: reload - Magic again
function verbcreated(info) {
  if(info.count>0) { javascript:location.reload(); }
}

//appends a person when added
function appendperson(info) {
  try{
    if($('addverb')) {  //addverb.php
      ctr=$$('table#wordlist tr.dummy')[0].cloneNode(true);
      Element.extend(ctr);
      ctr.writeAttribute('class','');
      Element.writeAttribute(ctr.select('.tabhead')[0],'id',info.personid);
      ctr.select('.tabhead')[0].appendChild(document.createTextNode(info.person));
      var i=1;
      while(ctr.select('td')[i]) {
        Element.writeAttribute(ctr.select('td')[i].select('[name="personid[]"]')[0],'value',info.personid);
        i++;
      }
      $('wordlist').select('tbody')[0].appendChild(ctr);
    } else if($('editverb')) {  //showverb.php
      javascript:location.reload();
    } else if($('personlist')) { //showverblist.php
      insert='<li id="person_'+info.personid+'" onmousedown="rep_start('+info.personid+')" onmouseup="rep_end()" onmouseover="rep_change('+info.personid+')">';
        if(here.verbqueryid==1) { insert+='<input type="checkbox" value="'+info.personid+'" name="persons[]" id="check_person_'+info.person+'"><label for="check_person_'+info.personid+'">'; }
        else{ insert+='<span class="grab"></span><a href="'+path(6)+'person/'+info.personid+'/verb">'; }
        insert+=info.person;
        if(here.verbqueryid!=1) { insert+='</a> <a href="javascript: void(0)" onclick="javascript: load_persondrop('+info.personid+')" class="blackdrop"></a>'; }
        else { insert+='</label>'; }
      insert+='</li>';
      $('personlist').innerHTML+=insert;      
    }
  } catch(err) { msg('[0001]:'+err); }
}

//appends a form (verb) when added
function appendform(info) {
  try{
    if($('addverb')) {  //addverb.php
      var tabword=$$('table#wordlist tr.tabhead');
      ctd=tabword[0].select('td.dummy')[0].cloneNode(true);
      ctd.writeAttribute('class','');
      ctd.writeAttribute('id',info.formid);
      ctd.appendChild(document.createTextNode(info.form));
      tabword[0].appendChild(ctd);
      var j=1;
      var tabtr=$$('table#wordlist tr');
      while(tabtr[j]) {
        ctd=tabtr[j].select('td.dummy')[0].cloneNode(true);
        Element.extend(ctd);
        ctd.writeAttribute('class','');
        ctd.writeAttribute('id',info.formid);
        Element.writeAttribute(ctd.select('[name="formid[]"]')[0],'value',info.formid);
        tabtr[j].appendChild(ctd);
        j++;
      }
    } else if($('editverb')) {  //showverb.php
      javascript:location.reload();
    } else if($('formlist')) { //showverblist.php
      insert='<li id="form_'+info.formid+'">';
        if(here.verbqueryid==1) { insert+='<input type="checkbox" value="'+info.formid+'" name="forms[]" id="check_form_'+info.form+'"><label for="check_form_'+info.formid+'">'; }
        else{ insert+='<a href="'+path(6)+'form/'+info.formid+'/verb">'; }
        insert+=info.form;
        if(here.verbqueryid!=1) { insert+='</a> <a href="javascript: void(0)" onclick="javascript: load_formdrop('+info.formid+')" class="blackdrop"></a>'; }
        else { insert+='</label>'; }
      insert+='</li>';
      $('formlist').innerHTML+=insert;
    }
  } catch(err) { msg('[0002]:'+err); }
}

//Loads Dropdown for the form an person list
function load_formdrop(formid) {
  hold_dropdown();
  var val="<ul><li><a href='javascript: void(0)' onclick='javascript: rvar.create(\"delform\",\"delete_form\",{formid:"+formid+"},\"relement(params.formid,\\\"form_\\\")\"); ask(\""+la['askformdel']+"\",\"rvar.delform.sendreq()\")'>"+la['delete']+"</a></li>";
  val+='<li><a href="javascript: void(0)" onclick="javascript: editword($(\'form_'+formid+'_edit\'),'+formid+',\'newform\',1); hide_dropdown()">'+la.rename+'</a></li>';
  val+='<li><a href="'+path(2)+'form/'+formid+'/edit/">'+la.edit+'</a></li>';
  val+='</ul>';
  load_dropdown_mouse(val);
}

function load_persondrop(personid) {
  hold_dropdown();
  var val="<ul><li><a href='javascript: void(0)' onclick='javascript: rvar.create(\"delperson\",\"delete_person\",{personid:"+personid+"},\"relement(params.personid,\\\"person_\\\")\"); ask(\""+la['askpersondel']+"\",\"rvar.delperson.sendreq()\")'>"+la['delete']+"</a></li>";
  val+='<li><a href="javascript: void(0)" onclick="javascript: editword($(\'person_'+personid+'_edit\'),'+personid+',\'newperson\',1); hide_dropdown()">'+la.rename+'</a></li>';
  val+='</ul>';
  load_dropdown_mouse(val);
}

//////////
//WORDTABLE EFFECTS
//////////

//gets a checkbox
function getcheckbox(id) {
  var chck=$('check_'+id);
  return chck?chck:{checked:0};
}

//highlights a line in the wordtable if its marked
function highlightmarked(id) {
  if(document.wordform['wordid[]']) {
    if(getcheckbox(id).checked) { tclass='list_marked'; }
    else { tclass='list_none'; }
    $('wordlist_tr_'+id).className=tclass;
  }
}

function hlmarkedbyline(line) {
  var lns=$$('input[name="wordid[]"]');
  if(lns.length>line) {
    if(lns[line].checked) { tclass='list_marked'; }
    else { tclass='list_none'; }
    lns[line].parentNode.parentNode.className=tclass;
  }
}

//highlights or unhighlights a line in the wordtable
function highlighthover(id, mode) {
  if(!getcheckbox(id).checked) { 
    if(mode) { tclass='list_hover'; }
    else { tclass='list_none'; }
    $('wordlist_tr_'+id).className=tclass;
  }	
  if(mode) { tvis='visible'; }
  else { tvis='hidden'; }
  $('options_'+id).select('a')[0].style.visibility=tvis;
}

function hlhoverbyline(line, mode) {
  var lns=$$('input[name="wordid[]"]');
  if(lns.length>line) { checked=lns[line].checked; }
  else { checked=1; }
  if(!checked) { 
    if(mode) { tclass='list_hover'; }
    else { tclass='list_none'; }
    lns[line].className=tclass;
  }	
  if(mode) { tvis='visible'; }
  else { tvis='hidden'; }
  var opts=$$('td[name^=options_]');
  if(opts.length>line) {
    opts[line].select('a')[0].style.visibility=tvis;  
  }
}

//checks the checkbox of a line ..
function checkthisbox(box) {
  if(document.wordform['wordid[]']) {
    getcheckbox(box).checked=(getcheckbox(box).checked==false);
    highlightmarked(box);
  }
}

//marks all words in the wordtable
function markall(mode) {
  var inpts=$$('input[name="wordid[]"]');
  for(i=0;i<inpts.length;i++) {
    inpts[i].checked=mode;
    hlmarkedbyline(i);
  }
}

//////////
//FLOWLOADER
//////////

//Checks if user scrolled enough to see next words
function checkscroll() {
  if($('wordform').autoload.value=='1') {
    var cntnt=$('content');
    if(cntnt.scrollHeight-cntnt.scrollTop-cntnt.clientHeight<=200 
       && document.body.scrollHeight-document.body.scrollTop-document.body.clientHeight<=200) {
      fromlim=parseFloat($('wordform').countwords.value);
      rvar.create('flow','get_words',here,'appendwords(info,0)');
      rvar.flow.sendreq({fromlim:fromlim,tolim:15});
      //get_words(registerid,fachid,saveid,tagid,searchid,wordclassid,fromlim,tolim,false,null)
    } else {
      setTimeout('checkscroll()',1000);
    }
  }
}


//////////
//IMPORT
//////////

//enable or disable all checkbuttons with a class
function ableall(classname,enable) {
  var i=0;
  var npts=$$('input.im_'+classname);
  while(npts[i]) {
    npts[i][enable==1?'enable':'disable']();
    i++;
  }
  i=0;
  var flds=$$('fieldset.im_'+classname);
  while(flds[i]) {
    flds[i][enable==1?'show':'hide']();
    i++;
  }
}

//////////
//SEARCHBAR & AUTOSEARCH
//////////

//shows searchfield
function show_search() {
  $('searchclick').style.width='0px'; 
  $('searchform').style.display='inline-block'; 
  $('searchform').searchtext.focus();
}

//submits the searchbar
function search() {
  var srchtxt=$('searchtext');
  var srchfrm=$('searchform');
  if(srchtxt.value!='') {
    tpath=path(5).replace(/\/search\/.*/, '');
    srchfrm.action=tpath+'search/'+escape(srchtxt.value);
  	srchfrm.submit();
  }
  return false;
}

//Requests search information from Database and saves it localy.
function autosearch(ev,add,to) {
  var stext=$('searchtext').value;
  if(stext.length>=3) {
    //get key to navigate
    var keynum;
    if(ev) {
      if(window.event) { keynum = ev.keyCode; }
      else if(ev.which) { keynum = ev.which; }   
    }
    if(keynum==40) { auto_hl_down(); }
    else if(keynum==38) { auto_hl_up(); }
    else { //load everything that looks like matching
      subt=stext.substr(0,3);
      if(!local.asgot[subt]) { local.asgot[subt]=new Object(); }
      if(!local.as[subt]) { local.as[subt]=new Object(); }
      if(to) { 
        local.as[subt][to]=add; 
      }
      if(!local.asgot[subt].reg) {
        local.asgot[subt].reg=true;
        req('get_reg',{searchregister:stext},'autosearch(0,info.name,\'reg\')')
      }
      else if(here.registerid!=null && !local.asgot[subt].tag) {
        local.asgot[subt].tag=true;
        req('get_tags',{registerid:here.registerid,searchtag:stext},'autosearch(0,info.name,\'tag\')');
      }
      else if(here.registerid!=null && !local.asgot[subt].save) {
        local.asgot[subt].save=true;
        req('get_save',{registerid:here.registerid,searchsave:stext},'autosearch(0,info.name,\'save\')')
      }
      else if(!local.asgot[subt].worda) {
        local.asgot[subt].worda=true;
        req('get_words',{registerid:here.registerid,'searchid[]':['like: '+stext,null],limit:30},'autosearch(0,info.wordfirst,\'worda\')')
      }
      else if(!local.asgot[subt].wordb) {
        local.asgot[subt].wordb=true;
        req('get_words',{registerid:here.registerid,'searchid[]':[null,'like: '+stext],limit:30},'autosearch(0,info.wordfore,\'wordb\')')
      }
      else if(!local.asgot[subt].sentence) {
        local.asgot[subt].sentence=true;
        req('get_words',{registerid:here.registerid,'searchid[]':[null,null,'like: '+stext],limit:30},'autosearch(0,info.sentence,\'sentence\')')
      }
      else { //show results
        load_autosearch(subt,stext);
      }
    }
  } else { hide_autosearch(); }
}

//shows the autosearcher
function load_autosearch(subtext,text) {
  try {
    //Search in stored results
    var sres=new Array();
    for(i=0;i<6;i++) { sres[i]=new Array(); }  
    var countres=0; 
    for(i in local.as[subtext]) {
      if(local.as[subtext][i]) {
        for(j=0;j<local.as[subtext][i].length;j++) {
          var probe=local.as[subtext][i][j].toLowerCase();
          if(probe.match('^'+text.toLowerCase()+'$')) {
            sres[0][sres[0].length]=local.as[subtext][i][j];    
            countres++;   
          } else if(probe.match('^'+text.toLowerCase()+' ')) {
            sres[1][sres[1].length]=local.as[subtext][i][j];    
            countres++;                         
          } else if(probe.match(' '+text.toLowerCase()+' ') 
            || probe.match(' '+text.toLowerCase()+'$')) {
            sres[2][sres[2].length]=local.as[subtext][i][j];    
            countres++;   
          } else if(probe.match('^'+text.toLowerCase())) {
            sres[3][sres[3].length]=local.as[subtext][i][j];    
            countres++;      
          } else if(probe.match(text.toLowerCase())) {
            sres[4][sres[4].length]=local.as[subtext][i][j];
            countres++;
          } else {
            var sectry=text.toLowerCase().split('').join('.?');
            if(probe.match(sectry)) {
              sres[5][sres[5].length]=local.as[subtext][i][j];
              countres++;
            }
          }
        }
      }
    }
    //Generate Output
    if(countres>0) {
      position= getposition($('searchtext'));
      var left= position[0];
      var top= position[1] + $('searchtext').offsetHeight;
      //prepare value 
      var p_lhtml='<li onmouseover="javascript: auto_highlight(this)" title="';
      var a_lhtml='</li>';
      var val='<ul id="autolist" onclick="javascript: search()">';
      var preval=new Array();
      for(i=0;i<sres.length;i++) {
        for (j=0;j<sres[i].length;j++) {
          var ttpos=sres[i][j].search(new RegExp(text,"i"));
          if(ttpos!=-1) { var shres=sres[i][j].substr(0,ttpos)+'<span class="markedsearch">'+sres[i][j].substr(ttpos,text.length)+'</span>'+sres[i][j].substr(ttpos+text.length); }
          else { shres=sres[i][j]; }
          preval[preval.length]=p_lhtml+sres[i][j]+'">'+shres+a_lhtml;
        }
      }
      val+=preval.join('')+'</ul>';
      //Display
      var as=$('autosearcher');
      as.innerHTML=val;
      as.style.top=top;
      as.style.left=left; 
      as.style.width=$('searchtext').offsetWidth-10; 
      as.show();
    } else { hide_autosearch(); }
  } catch(err) { msg('[load_autosearch]:'+err); }
}

//hides autosearch
function hide_autosearch() {
  $('autosearcher').hide();
}

//Navigation throug results
function auto_hl_down() {
  autochoose(1);
  auto_highlight(local.aselect);
}

function auto_hl_up() {
  autochoose(-1);
  auto_highlight(local.aselect);
}

//controlls the range of search results
function autochoose(plus) {
  if(childs=$('autolist')) {
    local.aselect+=plus;
    var childs=$('autolist').childNodes;
    if(local.aselect<-1) { local.aselect=-1; }
    if(local.aselect>childs.length-1) { local.aselect=childs.length-1; }
  }
}

//highlights results from autosearch
function auto_highlight(id) {
  if(childs=$('autolist')) {
    var childs=$('autolist').childNodes;
    for(i=0;i<childs.length;i++) {
      if(i==id || childs[i]==id) { 
        Element.writeAttribute(childs[i],'class','list_marked'); 
        $('searchtext').value=childs[i].title;
      }
      else { Element.writeAttribute(childs[i],'class','list_none'); }
    }
  }
}

//////////
//PERSON REARRANGE
//////////

//select a person
function rep_start(pid) {
  local.rep=new Object();
  local.rep.selected=pid;
  local.rep.startorder=new Object();
  for(i=0;i<$('personlist').childNodes.length;i++) {
    local.rep.startorder[Element.identify($('personlist').childNodes[i])]=i;
  }
}

//stop rearranging
function rep_end() {
  if(local.rep) {
    if(local.rep.selected!=null) {
      var same=true;
      for(i=0;i<$('personlist').childNodes.length;i++) {
        if(local.rep.startorder[Element.identify($('personlist').childNodes[i])]!=i) { same=false; }
      } 
      if(!same) { update_order(); }
      local.rep=null;
    }
  }
}

//Change positions
function rep_change(tid) {
  if(local.rep) {
    if(local.rep.selected!=null) {
      if(local.rep.selected!=tid) {
        var prsnlst=$('personlist');
        var pthis=$('person_'+tid);
        var psel=$('person_'+local.rep.selected);
        var list=Object.values(prsnlst.childNodes);
        posnew=list.indexOf(pthis);
        posold=list.indexOf(psel);
        if(posnew>posold) { where=pthis.nextSibling; }
        else{ where=pthis; }
        movenode=psel.cloneNode(true);
        prsnlst.removeChild(psel);
        prsnlst.insertBefore(movenode,where);
      }
    }
  }
}

//if something has changed update to database
function update_order() {
  var prsnlst=$('personlist').childNodes;
  for(i=0;i<prsnlst.length;i++) {
    var perid=Element.identify(prsnlst[i]);
    var perid=perid.replace('person_','');
    req('edit_person',{personid:perid,neworder:i});
  }
}

//////////
//WORDTABLE COLUMNS
//////////
//shows a list of hidden columns of the wordtable
function load_column_show() {
  var rows= new Array('register', 'group', 'wordfirst', 'wordfore', 'sentence', 'tags', 'wordclass');
  var rownames= new Array('register', 'group', 'word', 'fore', 'phrase', 'tags', 'class');
  var value='';
  var rowhead;
  for(i=0;i<rows.length; i++) {
    rowhead=$(rows[i]+'_head');
    if(rowhead) {
      if(rowhead.style.display=='none') { 
        value+='<a style="display:block" href="javascript: void(0)" onclick="javascript: displaycolumn(1,\''+rows[i]+'\')">'+la[rownames[i]]+'</a>'; 
      }
    }
  }
  load_dropdown_mouse(value);
}

//shows and hides columns in wordtable
function displaycolumn(show,column) {
  var clms=$$('[id^='+column+'_]');
  var len=clms.length;
  for(i=0;i<len;i++) {
    //tid=document.wordform['wordid[]'][i].value;
    if(show) { clms[i].style.display=''; }
    else { clms[i].style.display='none'; }
  }
}

//////////
//MENU DROPDOWN
//////////

//Dropdown functions
//Dynamic dropdown content: get local or load.
var where
local.user=1;
local.wordclass=1;
function dropdown(data,twhere,plusparam) {
  try{
    if(!plusparam) { plusparam=null; }
    where=twhere;
    if(!local[data]) { 
      rvar.create('rr','get_'+data,here,'local.'+data+'=info; dropload(\''+data+'\')'); 
      rvar.rr.sendreq(plusparam);
    } else { dropload(data); }
  } catch(err) { msg('[0005]:'+err); }
  return false;
}

function dropload(data) {
  try{
    var val='';
    var er=0;
    if(data=='user') {            //User Dropdown
      val+='<ul class="dropdownlist dduseroptionlist">';
        val+='<li><a class="menulink" href="'+path(0)+here.username+'/options">'+la['options']+'</a></li>';
        val+='<li><a class="menulink" href="'+path(5)+'import">'+la['import']+'</a></li>';
        val+='<li><a class="menulink" href="'+path(0)+'logout">'+la['logout']+'</a></li>';
      val+='</ul>';
    } else if(data=='reg') {      //Register Dropdown
      val+='<ul class="dropdownlist ddregisterlist">';
        for(i=0;i<local.reg.count;i++) {
          val+='<li><a class="menulink" href="'+path({2:local.reg['name'][i]+'/'})+'">'+local.reg['name'][i]+'</a></li>';
        }
        val+='<hr><li><a class="menulink" href="javascript: void(0)" onclick="javascript: editreg()">'+la['rename']+'</a></li>';
		    val+='<li><a class="menulink" href="'+path(2)+'edit">'+la['edit']+'</a></li>';
        val+='<li><a class="menulink" href="javascript: void(0)" onclick="javascript: rvar.create(\'regdel\',\'delete_reg\',here,\'removereg(params.id)\'); ask(la.askregdel,\'rvar.regdel.sendreq()\')">'+la['delete']+'</a></li>';
      val+='</ul>';
    } else if(data=='reg_info') {      //Group Dropdown
      val+='<ul class="dropdownlist ddgrouplist">';
        for(i=1;i<=local.reg_info.groupcount;i++) {
	        val+='<li><a class="menulink" href="'+path({3:i+'/'})+'">'+la['group']+' '+i+'</a></li>';
        }
	      val+='<li><a class="menulink" href="'+path({3:'af/'})+'">'+la['af']+'</a></li>';
        val+='<li><a class="menulink" href="'+path({3:'ar/'})+'">'+la['ar']+'</a></li>';
      val+='</ul>';
    } else if(data=='save') {          //Storage Dropdown
      val+='<ul class="dropdownlist ddsavelist">';
        for(i=0;i<local.save.count;i++) {
          val+='<li><a class="menulink" href="'+path({4:'save/'+local.save['name'][i]+'/'})+'">'+local.save['name'][i]+'</a></li>';
        }
		    val+='<hr><li><a class="menulink" href="javascript: rvar.create(\'delsave\',\'delete_save\',here,\'savedeleted()\'); ask(la.asksavedel,\'rvar.delsave.sendreq()\')">'+la['delete']+'</a></li>';
      val+='</ul>';
    } else if(data=='tags') {          //Tags Dropdown   
      c=Math.min(local.tags.count,10) 
      val+='<ul class="dropdownlist ddtaglist">';
        for(i=0;i<c;i++) {
          val+='<li><a style="display:inline" class="menulink" href="'+path({5:'tags/'+local.tags['name'][i]+'/'})+'">'+local.tags['name'][i]+'</a></li>';
          //if( (i+1)%5==0 ) { val+="<br>"; } else { val+=", "; }
        }
		    val+='<li><a class="menulink" href="'+path(4)+'taglist/">'+la['more']+'</a></li>';
      val+='</ul>';
    } else if(data=='wordclass') {     //Wordclass Dropdown  
      val+='<ul class="dropdownlist ddwordclasslist">';
        for(i=0;i<la.classname.length;i++) {
          val+='<li><a class="menulink" href="'+path(5)+'wordclass/'+i+'/show">'+la.classname[i]+'</a></li>';
        }
      val+='</ul>';
    } else {
      er=1
      throw 'Can\'t work with: '+data;
    } 
    if(er!=1) {
      hold_dropdown();
      position= getposition(where);
      var left= position[0];
      var top= position[1] + where.offsetHeight+2;
      var dropdown=$('dropdown');
      dropdown.innerHTML=val;
      dropdown.style.top=top;
      dropdown.style.left=left; 
      dropdown.show();
    }
  } catch(err) { msg('[0006]:'+err); }
}

////////
// DEV
////////

//multiple checking
function multicheck(id) {
  if(local.mouseisdown==1) {
    checkthisbox(id);
  }
}

//Coloring
function rgb(r,g,b,w) {
  var ch="0123456789ABCDEF";
  var hex='';
  r=Math.round(r*w);
  g=Math.round(g*w);
  b=Math.round(b*w);
  var rgb=new Array(r,g,b);
  for(i=0;i<3;i++) {
    hex+= String(ch.charAt(Math.floor(rgb[i] / 16))) + String(ch.charAt(rgb - (Math.floor(rgb[i] / 16) * 16))); 
  }
  return hex;
}

function colorByTag(parent,tagname,color,which) {
  var i=0;
  while(atool=parent.getElementsByTagName(tagname)[i]) {
    atool.style[which]=color;
    i++;
  }
}

function colorstyler(position) {
  var r,g,b;
  var part=100/6;
  if(position<part) {
    r=255; g=position/part*255; b=0;
  } else if(position<part*2) {
    r=(1-(position-part)/part)*255; g=255; b=0; 
  } else if(position<part*3) {
    r=0; g=255; b=(position-part*2)/part*255;  
  } else if(position<part*4) {
    r=0; g=(1-(position-part*3)/part)*255; b=255;  
  } else if(position<part*5) {
    r=(position-part*4)/part*255; g=0; b=255;  
  } else {
    r=255; g=0; b=(1-(position-part*5)/part)*255;  
  }
  document.body.style.backgroundColor=rgb(r,g,b,0.4);
  $('header').style.backgroundColor=rgb(r,g,b,0.6);
  colorByTag($('toolbar'),'a',rgb(r,g,b,0.7),'backgroundColor');
  colorByTag(document.body,'b',rgb(r,g,b,0.6),'color');
}

