var exchange_already_selected = '';

function exchange(selectA, selectB, backButtonPress)
{
   var option;
   var all = selectA.options[0].selected;

	for (var i = selectA.options.length - 1; i > 1; i--)
	{
		if ((!backButtonPress && selectA.options[i].selected) || (backButtonPress && exchange_already_selected.indexOf(i+',') != -1) || all)
		{
         option = selectA.options[i];

         if (!option.id) /* Ningun select posee option groups */
         {
            addSelectOption(selectB,option.text,option.value,false);
            delSelectOption(selectA,option.index);
         }
         else
         {
            var groups = selectB.getElementsByTagName('optgroup');
            if (groups.length > 0) /* El select posee option groups */
            {
               for (var j = 0; groups[j].label != option.id; j++);
               groups[j].appendChild(option);
            }
            else selectB.appendChild(option);
         }

         /* Parche para Numeraciones */
         if (selectA.id == 'phonesB')
            global_selected_phones = global_selected_phones.replace(',' + option.value + ',', ',');
         else if (selectB.id == 'phonesB')
            global_selected_phones += option.value + ',';
		}
	}

	if (all) selectA.options[0].selected = false;

   /* Parche para Numeraciones */
	if (selectA.id == 'phonesB' || selectB.id == 'phonesB')
	  codes_verify(global_selected_phones_trim().split(','));
}

var global_code_addition = false;

function global_selected_phones_trim()
{
   return global_selected_phones.substring(0,global_selected_phones.length - 1).replace(',','');
}

function code_validate(input,add)
{
   var code = input.value.replace(/ /g,'');
   var ok = true;

   var select = getObject(input.id.replace('new_',''));
   for (var i=0; i < select.options.length; i++)
   {
      if (code == select.options[i].value)
      {
         getObject('validation_status_' + input.id).innerHTML = ETQjs_er_6 + ' ' + ETQjs_co_2;
         getObject('validation_status_' + input.id).style.color = 'red';
         ok = false;
      }
   }

   if (ok)
   {
      global_code_addition = add ? true : false;
      code_validate_call(input.id,code,global_selected_phones_trim());
   }
}

function code_validate_call(input_id,code,phones)
{
   var args = '?code=' + code + '&id=' + input_id + '&phs=' + phones;
   if (getObject('cid')) args += '&cid=' + getObject('cid').value;

   getObject('validation_status_' + input_id).innerHTML = '';
   LoadURL('code_validate_ajax.php'+args,'code_validate_listener');
}

function code_validate_listener(ajax_result)
{
   if (ajax_result)
   {
      var reply  = ajax_result.split('|');

      var color  = reply[0] == 'OK' ? 'green' : 'red';
      var text   = (reply[0] == 'OK' ? '' : ETQjs_er_6 + ' ') + reply[2];
      var select = getObject(reply[1].replace('new_',''));

      getObject('validation_status_' + reply[1]).innerHTML = text;
      getObject('validation_status_' + reply[1]).style.color = color;

      if (global_code_addition && reply[0] == 'OK')
      {
         var code = getObject(reply[1]).value.replace(/ /g,'');
         addSelectOption(select,code,code,true);
      }

      var codes = reply[3].split(',');
      for (var i=0; i < select.options.length; i++)
      {
         for (var j=0; (j < codes.length) && (codes[j] != select.options[i].value); j++);
         if (select.options[i].selected = (j == codes.length)) /* El codigo es correcto */
         {
            select.options[i].style.color = 'black';
            select.options[i].style.fontWeight = 'normal';
            select.options[i].style.fontStyle = 'normal';
         }
         else
         {
            select.options[i].style.color = 'red';
            select.options[i].style.fontWeight = 'bold';
            select.options[i].style.fontStyle = 'italic';
         }
      }

      getObject(reply[1]).focus();
      getObject(reply[1]).select();
   }
   return false;
}

function codes_verify(phones)
{
   var alias  = '';
   var select = getObject('alias');
   for (var i=0; i < select.options.length; i++)
      alias += (alias ? ',' : '') + select.options[i].value;

   global_code_addition = false;
   code_validate_call('new_' + select.id,alias,phones.join(','));
}

function new_tag(input,select_tags,select_matches)
{
   var tag = input.value;
   var args = '?tag=' + escape(tag) + '&idtag=' + input.id + '&idtags=' + select_tags.id + '&idmatches=' + select_matches.id;
   LoadURL('new_tag_ajax.php'+args,'new_tag_listener');
}

function new_tag_listener(ajax_result)
{
   if (ajax_result)
   {
      var reply = ajax_result.split('|');
      if (reply[0] == 'OK')
      {
         var tag            = unescape(reply[1]);
         var input_tag      = getObject(reply[2]);
         var select_tags    = getObject(reply[3]);
         var select_matches = getObject(reply[4]);

         if (reply[5] != '')
         {
            var matches     = unescape(reply[5]).split('$');

            cleanSelect(select_matches);
            addSelectOption(select_matches,tag,tag,true);
            addSelectOption(select_matches,'--------------------','--',false);

            for (var i=0; i < matches.length; i++)
            {
               addSelectOption(select_matches,matches[i],matches[i],false);
            }
            select_matches.style.display = '';
            select_matches.focus();
         }
         else
         {
            addSelectOption(select_tags,tag,tag,true);
            input_tag.focus();
         }
      }
   }
}

function usejoker(input_id,tj)
{
   var input = getObject(input_id);
   if (!input.disabled)
   {
      input.value += tj;
      input.focus();
   }
}

/* ************************************************************************** */

function change_indexation(select,id)
{
   var indType = getSelectValue(select);
   var label;

   for (var i = 1; i < 5; i++)
   {
      label = getObject('tr_labopt' + i + '_' + id);
      label.innerHTML = swap_index_text(label.innerHTML,indType);
   }

   var tds;
   var trs = select.parentNode.parentNode.parentNode.parentNode.getElementsByTagName('TBODY')[0].getElementsByTagName('TR');
   var top = trs.length;// - 2;
   for (var i = 0; i < top; i++)
   {
      tds = trs[i].getElementsByTagName('TD');
      select = tds[5].firstChild;
      for (var j = 0; j < select.options.length; j++)
         select.options[j].text = swap_index_text(select.options[j].text,indType);
   }
}

function swap_index_text(chCurrent,indType)
{
   var ch1 = '1';
   var chA = 'a';
   if (indType == '1234')
   {
      return String.fromCharCode(ch1.charCodeAt(0) + (chCurrent.charCodeAt(0) - chA.charCodeAt(0)));
   }
   else
   {
      var numCurrent = chCurrent.charCodeAt(0) - ch1.charCodeAt(0);
      return String.fromCharCode(chA.charCodeAt(0) + numCurrent);
   }
}

function get_option_indexing(numOpt,input)
{
   var trs = input.parentNode.parentNode.parentNode.parentNode.getElementsByTagName('TBODY')[1].getElementsByTagName('TR');
   var tds = trs[trs.length - 1].getElementsByTagName('TD');
   var select = tds[tds.length - 1].firstChild;

   if (getSelectValue(select) == 'abcd')
   {
      var chA = 'a';
      var ord = chA.charCodeAt(0) + (numOpt - 1);
      return String.fromCharCode(ord);
   }
   return numOpt.toString();
}

function refresh_right_option_select(input,numOpt,add)
{
   var tr = input.parentNode.parentNode;
   var tds = tr.getElementsByTagName('TD');
   var select = tds[5].firstChild;

   if (add && getSelectOption(select,numOpt) == null)
      addSelectOption(select,get_option_indexing(numOpt,input),numOpt,false);
   else if (!add && (option = getSelectOption(select,numOpt)) != null)
      delSelectOption(select,option.index);
}

function shift_options(input)
{
   var tr = input.parentNode.parentNode;
   var tds = tr.getElementsByTagName('TD');

   /* Shift de las opciones */
   var current_position = 1;
   for (var current_pointer = 1; current_pointer < 5; current_pointer++)
   {
      if (tds[current_pointer].firstChild.value)
      {
         if (current_position < current_pointer)
         {
            tds[current_position].firstChild.value = tds[current_pointer].firstChild.value;
            tds[current_position].firstChild.style.backgroundColor = '#FFFFFF';
            tds[current_pointer].firstChild.value = '';
            if (current_pointer > 2)
               tds[current_pointer].firstChild.style.backgroundColor = '#C9C9C9';
         }
         current_position++;
      }
      else if (current_pointer > 2)
      {
         tds[current_pointer].firstChild.style.backgroundColor = '#C9C9C9';
      }
   }

   /* Actualización del select */
   for (var current_pointer = 1; current_pointer < 5; current_pointer++)
   {
      add = (current_pointer < current_position) || (current_pointer < 3);
      refresh_right_option_select(input,current_pointer,add);
   }
}
