var parent_select = null;
var ajaxified = new Hash();

window.addEvent('domready', function()
{
  $$('.subselect').each(function(parent)
  {
    parent.addEvent('change', function()
    {
      checksub(parent);
      checkother(parent);
    });

    checksub(parent, true);
    checkother(parent);
  });

  if ($('printpage'))
  {
    window.print();
    window.location = $('printpage').value;
  }

  $$('.always_toggle').each(function(row)
  {
    var toggle_target = $(row.getElement('input[type=hidden]').value);
    if (toggle_target)
    {
      toggle_target.setStyle('display', 'none');

      var init_open = false;
      row.getElements('input[type=radio]').each(function(radio)
      {
        if (radio.checked == true)
        {
          init_open = true;
        }

        radio.addEvent('click', function()
        {
          _always_on(toggle_target);

        });

      });

      if (init_open == true)
      {
        _always_on(toggle_target);
      }
    }
  });

  // todo: alleen submit wanneer alle required waardes ook echt bestaan, anders teveel requests(?)
  if (ajaxified.getLength() > 0)
  {
    ajaxified.each(function(object, key)
    {
      if ($(key))
      {
        var select = $(key);

        var querystring = [];
        object.vars.each(function(value, name)
        {
          querystring.push(name + '=' + value);
        });

        select.req = new Request.HTML({
          'url': site_base + '/resources/scripts/' + object.url + '?' + querystring.join('&')
         ,'method': 'post'
         ,'update': object.target
        });

        var form = select.form;

        select.addEvent('change', function()
        {
          select.req.post(form);
        });

        object.togglers.each(function(toggler)
        {
          toggler.addEvent('change', function()
          {
            (function(){ select.req.post(form);}).delay(5);
          });
        });
        /*
        object.subsector.addEvent('change', function()
        {
          select.req.post(form);
        });

        if (object.child !== false)
        {
          $(object.child).addEvent('change', function()
          {
            select.req.post(form);
          });
        }
        */

        select.req.post(form);
        if ($('ajax_init'))
        {
          $('ajax_init').set('value', '');
        }
      }


    });
  }

  $$('.groupblock').each(function(block)
  {
    block.button    = block.getElement('.addmore');
    block.counter   = block.getElement('.elcounter');
    block.template  = block.getElement('.formgroup').clone();

    block.template.removeClass('first');
    new Element('span', {'html':'verwijder opleiding','class':'removethis'}).inject(block.template);

    block.button.addEvent('click', function()
    {
      var newgroup = _duplicate(block);
      newgroup.getElement('.removethis').addEvent('click', function()
      {
        block.counter.value--;
        newgroup.destroy();
        _renumber_block(block);
      });

      block.getElement('.groupbottom').grab(newgroup, 'before');
      block.counter.value++;
    });

    block.getElements('.formgroup').each(function(existing)
    {
      if (existing.getElement('.removethis'))
      {
        existing.getElement('.removethis').addEvent('click', function()
        {
          block.counter.value--;
          existing.destroy();
          _renumber_block(block);
        });
      }
    });

  });

});

/*
function _ajax_get(select, object)
{
  var vars = new Hash();
  object.vars.each(function(value, name)
  {
    vars.set(name, $(value).get('value'));
  });

  select.req.get(vars);
}
*/


function _always_on(el)
{
  if (el.getStyle('display') == 'none')
  {
    el.setStyle('display', 'block')
  }
}

function _renumber_block(block)
{
  block.getElements('.formgroup').each(function(group, i)
  {
    group.getElements('input').each(function(el)
    {
      var nameparts = el.get('name').split('_');
      nameparts[3] = i;
      el.set('name', nameparts.join('_'));
    });

    group.getElements('select').each(function(el)
    {
      var nameparts = el.get('name').split('_');
      nameparts[3] = i;
      el.set('name', nameparts.join('_'));
    });
  });
}

function _duplicate(block)
{
  var dupe = block.template.clone();
  var elcount = 1;

  dupe.getElements(".frmrow").each(function(el)
  {
    el.removeClass('error');
  });

  dupe.getElements("input[type='text']").each(function(el)
  {
    el.set('value', '');

    var newid = 'dupe' + '_' + elcount + '_' + block.counter.value;
    el.set('id', newid);

    var nameparts = el.get('name').split('_'); // also gets scan_4_2_0_2[key]
    
    nameparts[3] = block.counter.value;
    el.set('name', nameparts.join('_'));

    var label = el.getPrevious('.frmlabel');
    if (label)
    {
      label.set('for', newid);
    }

    elcount++;
  });

  var prevname = '';
  dupe.getElements("input[type='radio']").each(function(el)
  {
    el.set('checked', false);

    var newid = 'dupe' + '_' + elcount + '_' + block.counter.value;
    el.set('id', newid);

    //el.set('name', el.get('name').replace(/^(.*)_(.*)$/, "$1_") + block.counter.value);
    var nameparts = el.get('name').split('_');
    nameparts[3] = block.counter.value;
    el.set('name', nameparts.join('_'));

    if (el.get('name') != prevname)
    {
      el.set('checked', true);
      prevname = el.get('name');
    }

    var label = el.getNext('.radiolabel');
    if (label)
    {
      label.set('for', newid);
    }

    elcount++;
  });

  dupe.getElements("select").each(function(el)
  {
    el.set('value', '');

    var newid = 'dupe' + '_' + elcount + '_' + block.counter.value;
    el.set('id', newid);

    //el.set('name', el.get('name').replace(/^(.*)_(.*)$/, "$1_") + block.counter.value);
    var nameparts = el.get('name').split('_');
    nameparts[3] = block.counter.value;
    el.set('name', nameparts.join('_'));

    var label = el.getPrevious('.frmlabel');
    if (label)
    {
      label.set('for', newid);
    }

    el.getElement('option').set('value', ''); // value got truncated

    elcount++;
  });

  return dupe;
}

function checksub(parent, autoselect)
{
  autoselect = autoselect || false;

  if (parent.value == '' || parent.value == 'other')
  {
    hide_sub(parent);
  }
  else
  {
    fill_sub(parent, autoselect);
  }
}

function checkother(parent)
{
  var target = $('div_' + parent.id.substr(parent.id.indexOf('_')+1) + '_other');
  if (target)
  {
    if (parent.value == 'other')
    {
      target.setStyle('display', 'block');
    }
    else
    {
      target.setStyle('display', 'none');
    }
  }
}

function hide_sub(parent)
{
  var id = 'sub_' + parent.id.substr(4);
  if ($(id))
  {
    $(id).setStyle('display', 'none');
    cleanup($(id));
  }
}

function fill_sub(parent, autoselect)
{

  //return true;

  var target_div = 'sub_' + parent.id.substr(parent.id.indexOf('_')+1);
  var selected_parent = parent.value;
  var selected_child = (autoselect == true && parent.selected_child)? parent.selected_child : 0;

  //console.log(parent.foobar);

  if ($(target_div))
  {
    $(target_div).setStyle('display', 'block');

    var target_select = $(target_div).getElement('select');
    target_select.set('html', '');

    // add "default" option
    target_select.grab(new Element('option', {'value':'','html':'Maak een keuze'}));

    if (parent.foobar[selected_parent].length > 0)
    {
      parent.foobar[selected_parent].each(function(child)
      {
        target_select.grab(new Element('option', {'value':child[0],'html':child[1],'selected':((selected_child == child[0])? true : false)}));
      });
    }

  }
}
