var se_editors = new Array();
var SE_COUNTER = 0;

function se_loadEditor(inpName, propName, objID, tabIndex, values, showButtons, onChangeCode) {   
  var ed = new Object();
  ed.values = new Array();
  ed.id = inpName;
  ed.showButtons = showButtons;
  ed.onChangeCode = onChangeCode;
  se_editors[inpName] = ed;

  if (tabIndex == null) tabIndex = -1;
  if(values.length == 0) values = new Array("");
  se_reloadEditor(ed, values, tabIndex);
  
  var bt = document.createElement('A');
  bt.href = 'javascript:se_addNewValue("' + ed.id + '")';
  bt.alt = bt.title = se_labels['persistent.seqeditor.new'];
  bt.innerHTML = '<img class="sedadder" alt="' + bt.title +'" src="' + globalContextPath + '/images/reference/new.gif" />';
  document.getElementById('sedadder' + inpName).appendChild(bt);     
  
}

function se_reloadEditor(ed, vals, tabIndex) {
  var div = document.getElementById('sed' + ed.id);
  if (div == null) return;
  
  if (div.childNodes != null)
    while (div.childNodes.length > 0) div.childNodes.removeChild(div.childNodes[0]);
  
  for (var i = 0; i < vals.length; i++) {
   se_createNewLine(div, ed, vals[i], (i == 0 ? tabIndex : -1));  
  }  
}

function se_createNewLine(parentDiv, ed, val, tabIndex) {
  var div = document.createElement('DIV');
  var inp;
  try {
    //zkusime to blbe tak, jak to vyzaduje bugovy a uplne blby IE
    inp = document.createElement('<INPUT NAME="'+ed.id+'"/>');
  } catch (ex) {
    //pokud to neproslo, tak to udelame spravne
    inp = document.createElement('INPUT');
  }
  inp.type = 'text';
  inp.id = ed.id + '_' + (++SE_COUNTER);
  inp.value = val;
  inp.name = ed.id;
  inp.onchange = ed.onChangeCode;
  if (tabIndex > -1) inp.tabIndex = tabIndex;
  inp.onkeyup = function() {
    var keyCode = arguments[0] ? arguments[0].which : event.keyCode;
    if (keyCode != 13) {
      var edId = this.id.replace(/_\d+$/, '');
      var counter = this.id.substring(this.id.lastIndexOf('_') + 1);
      var ed = se_editors[edId];
      
      var idx = 0;
      while (idx < ed.values.length && ed.values[idx].counter != counter) idx++;
      if (idx < ed.values.length) {
        ed.values[idx].val = this.value;
      }
    }
  }
  inp.onfocus = function() {globalLastFocus=inp.name;}
  setupInputDefaultButtonAction(inp,'javascript:se_addNewValue("' + ed.id + '");');

   var sdm = document.createElement('DIV');
   var sdmdiv = document.createElement('DIV');
   var sdminpdiv = document.createElement('DIV');
   var sdminp = document.createElement('DIV');
   sdmdiv.appendChild(sdminp);
   var sdmbtns = document.createElement('DIV');
   sdmdiv.appendChild(sdmbtns);
   sdm.className = 'sedTable';
   sdmbtns.className = 'sedTdBtns';
   if (ed.showButtons == false) {
   sdminp.className = 'sedTdInputLong'; // tlacitka pro posun a mazani jsou schovana -> zobrazime dlouhy input
   }
   else {
   sdminp.className = 'sedTdInput'; // tlacitka pro posun a mazani jsou zobrazena -> zobrazime zkraceny input
   }
   sdminpdiv.className = 'sedTdInputDiv';

  div.appendChild(sdm);
  sdm.appendChild(sdmdiv);
  sdmdiv.appendChild(sdminp);
  sdminp.appendChild(sdminpdiv);
  sdminpdiv.appendChild(inp);
  sdmdiv.appendChild(sdmbtns);
  
  var rec = new Object();
  rec.val = val;
  rec.counter = SE_COUNTER;
  ed.values[ed.values.length] = rec;
  
  if(ed.showButtons == true) {	
   var bt = document.createElement('A');
   bt.href = 'javascript:se_removeValue("' + ed.id + '", "' + SE_COUNTER + '")';
   bt.innerHTML = '<img src="' + globalContextPath + '/images/reference/destroy.gif" />';
   bt.alt = bt.title = se_labels['persistent.seqeditor.remove'];
   sdmbtns.appendChild(bt);

   bt = document.createElement('A');
   bt.href = 'javascript:se_moveUp("' + ed.id + '", "' + SE_COUNTER + '")';
   bt.alt = bt.title = se_labels['persistent.seqeditor.up'];
   bt.innerHTML = '<img src="' + globalContextPath + '/images/reference/up.gif" />';
   sdmbtns.appendChild(bt);

   bt = document.createElement('A');
   bt.href = 'javascript:se_moveDown("' + ed.id + '", "' + SE_COUNTER + '")';
   bt.alt = bt.title = se_labels['persistent.seqeditor.down'];
   bt.innerHTML = '<img src="' + globalContextPath + '/images/reference/down.gif" />';
   sdmbtns.appendChild(bt);
  }
  
  parentDiv.appendChild(div); 
  
  return inp;
}

function se_addNewValue(edId) {
  var line = se_createNewLine(document.getElementById('sed' + edId), se_editors[edId], '' /*inp.value*/);
  line.focus();
}

function se_removeValue(edId, counter) {
  var ed = se_editors[edId];
  if (ed == null) return;
  
	if(ed.values.length == 1) {
		var inp = document.getElementById(edId + '_' + counter);
		inp.value='';
	}
	else {
	  var idx = 0;
	  while (idx < ed.values.length && ed.values[idx].counter != counter) idx++;
	  if (idx < ed.values.length) {
	    var newVals = new Array();
	    ed.values[idx] = null;
	    
	    for (var i = 0; i < ed.values.length; i++)
	      if (ed.values[i] != null) {
	        var rec = new Object();
	        rec.val = ed.values[i].val;
	        rec.counter = ed.values[i].counter;
	        newVals[newVals.length] = rec;
	      }
	    ed.values = newVals;
	    
	    var inp = document.getElementById(edId + '_' + counter);
	    var div = inp.parentNode;
	    var sdm = div.parentNode;
	    var bbl = sdm.parentNode;
	    div.parentNode.removeChild(div);
	    sdm.parentNode.removeChild(sdm);
	    bbl.parentNode.removeChild(bbl);
	  }
  	}
}


function se_moveUp(edId, counter) {
  var ed = se_editors[edId];
  if (ed == null) return;
  
  var idx = 0;
  while (idx < ed.values.length && ed.values[idx].counter != counter) idx++;
  if (idx < ed.values.length && idx > 0) {
    var prevVal = ed.values[idx - 1].val;
    ed.values[idx - 1].val = ed.values[idx].val;
    ed.values[idx].val = prevVal;
    
    document.getElementById(edId + '_' + ed.values[idx - 1].counter).value = ed.values[idx - 1].val;
    document.getElementById(edId + '_' + ed.values[idx].counter).value = ed.values[idx].val;

  }  
}

function se_moveDown(edId, counter) {
  var ed = se_editors[edId];
  if (ed == null) return;
  
  var idx = 0;
  while (idx < ed.values.length && ed.values[idx].counter != counter) idx++;
  if (idx < ed.values.length - 1) {
    var nextVal = ed.values[idx + 1].val;
    ed.values[idx + 1].val = ed.values[idx].val;
    ed.values[idx].val = nextVal;
    
    document.getElementById(edId + '_' + ed.values[idx + 1].counter).value = ed.values[idx + 1].val;
    document.getElementById(edId + '_' + ed.values[idx].counter).value = ed.values[idx].val;

  }  
}

