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

window.addEvent('domready', function()
{
    if ($('resetscan'))
    {
        $('resetscan').addEvent('click', function(el)
        {
            return confirm("Weet u zeker dat u opnieuw wilt beginnen?");
        });
    }
    
    if ($('rb_1_1_1') && $('label_1_2'))
    {
        var label = $('label_1_2');
        $('rb_1_1_1').addEvent('click', function()
        {
            // ja
            label.set('text', "In welke van de onderstaande sectoren bent u nu werkzaam?");
        });
        $('rb_1_1_2').addEvent('click', function()
        {
            // nee
            label.set('text', "In welke van de onderstaande sectoren was uw laatste functie?");
        });
    }

    $$('.toggle_nextdiv').each(function(el)
    {
        var shouldopen = false;
        el.target = el.getNext('div.frmrow');
    
        el.getElements("input[type='radio']").each(function(rb)
        {
        
            rb.addEvent('click', function()
            {
                if (rb.get('value') == 1) // ja
                {
                    el.target.setStyle('display', 'block');
                }
                else
                {
                    el.target.setStyle('display', 'none');
                }
            });
            
            if (rb.get('value') == 1 && rb.get('checked') == true)
            {
                shouldopen = true;
            }
            
        });
        
        if (shouldopen == true)
        {
            el.target.setStyle('display', 'block');
        }
        else
        {
            el.target.setStyle('display', 'none');
        }
        
    });


    $$('.has_textfield').each(function(el)
    {
        var rb = el.getElement('input.radio');
        var txtfield = el.getElement('input.frmtext');
        txtfield.addEvent('click', function()
        {
            rb.set('checked', true);
        });
    });

  $$('.toggle_checkbox').each(function(el)
  {
    el.multilevel = el.hasClass('multilevel');
    
    el.elements = new Hash();
    el.getElements("input[type='checkbox']").each(function(cb)
    {
      cb.dotoggle = cb.hasClass('toggle_div');
      
      cb.plabel = cb.getNext('label');

        var hkey = 'rlvl0';
        if (cb.hasClass('rlvl1'))
        {
            hkey = 'rlvl1';
        }
        else if (cb.hasClass('rlvl2'))
        {
            hkey = 'rlvl2';
        }
        else if (cb.hasClass('rlvl3'))
        {
            hkey = 'rlvl3';
        }

        if (false == el.elements.has(hkey))
        {
            el.elements.set(hkey, []);
        }
        
        el.elements[hkey].push(cb);
          
      
      if (cb.dotoggle)
      {
        cb.target = $('div_'+cb.id.substr(cb.id.indexOf('_')+1));
        cb.target.setStyle('display', 'none');

        if (cb.checked == true)
        {
          cb.target.setStyle('display', 'block');
        }
      }

      cb.addEvent('click', function(e)
      {
        if (cb.dotoggle)
        {
            if (cb.checked == true)
            {
                cb.target.setStyle('display', 'block');
            }
            else
            {
                cb.target.setStyle('display', 'none');
                cleanup(cb.target);
            }
        }
    
        if (el.multilevel)
        {
            if (cb.checked == true)
            {
                cb.plabel.addClass('selected');
            }
            else
            {
                cb.plabel.removeClass('error');
                cb.plabel.removeClass('selected');
            }
        }
        
      });
      
    if (el.multilevel)
    {
        if (cb.checked == true)
        {
            cb.plabel.addClass('selected');
        }
        else
        {
            cb.plabel.removeClass('selected');
        }
    }

    });

  });


  $$('.toggle_radio').each(function(el)
  {
    el.multilevel = el.hasClass('multilevel');
  
    el.radios = new Hash();
    el.getElements("input[type='radio']").each(function(rb)
    {
        rb.dotoggle = rb.hasClass('toggle_div');
        rb.plabel = rb.getNext('label');

        rb.parentdiv = rb.getParent('div');
        if (rb.parentdiv.hasClass('otherfield'))
        {
            rb.otherfield = rb.getNext("input[type='text']");
            rb.otherfield.addEvent('click', function()
            {
                rb.set('checked', true);
                rb.fireEvent('click');
            });
        }

        var hkey = 'rlvl0';
        if (rb.hasClass('rlvl1'))
        {
            hkey = 'rlvl1';
        }
        else if (rb.hasClass('rlvl2'))
        {
            hkey = 'rlvl2';
        }
        else if (rb.hasClass('rlvl3'))
        {
            hkey = 'rlvl3';
        }

        if (false == el.radios.has(hkey))
        {
            el.radios.set(hkey, []);
        }

        el.radios[hkey].push(rb);
      
      
      if (rb.dotoggle)
      {
        rb.target = $('div_'+rb.id.substr(rb.id.indexOf('_')+1));
        rb.target.setStyle('display', 'none');

        if (rb.checked == true)
        {
          rb.target.setStyle('display', 'block');
        }

      }

      rb.addEvent('click', function(e)
      {
        el.radios[hkey].each(function(item)
        {
          if (rb.id != item.id)
          {
            if (item.dotoggle)
            {
                item.target.setStyle('display', 'none');
                cleanup(item.target);
            }
            
            if (el.multilevel)
            {
                item.plabel.removeClass('selected');
                item.plabel.removeClass('error');
            }
          }
        });    
      
        if (el.multilevel)
        {
            rb.plabel.addClass('selected');
        }
        
        if (rb.dotoggle)
        {
          rb.target.setStyle('display', 'block');
        }
        
      });
      
    if (el.multilevel)
    {
        if (rb.checked == true)
        {
            rb.plabel.addClass('selected');
        }
        else
        {
            rb.plabel.removeClass('selected');
        }
    }

    });
    
    /*
    el.radios.each(function(value, key)
    {
        console.log(key + '-------------');
        value.each(function(item, index)
        {
            console.log(item.getNext('label').get('html'));
        });
    });
    */

  });

  $$('.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);
      }
    }
  });

  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);
          });
        });

        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 deze','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 _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;

  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)}));
      });
    }

  }
}


function toggle_target(el)
{
  if (el.hasClass('opened'))
  {
    el.removeClass('opened');
    el.setStyle('display', 'none');
  }
  else
  {
    el.addClass('opened');
    el.setStyle('display', 'block');
  }
}

// function to clear any form value in the scope of an element (div)
function cleanup(el)
{
  // check for textfields
  el.getElements("input[type='text']").each(function(target_tf)
  {
    target_tf.set('value', '');
  });

  // check for textareas
  el.getElements("textarea").each(function(target_ta)
  {
    target_ta.set('value', '');
  });

  // check for select fields
  el.getElements("select").each(function(target_sel)
  {
    target_sel.set('value', '');
    if (target_sel.hasClass('subselect'))
    {
      checksub(target_sel, true);
    }
  });
  
  // check for radio buttons
  el.getElements("input[type='radio']").each(function(target_rb)
  {
    target_rb.set('checked', false);
    if (target_rb.target && target_rb.target.getStyle('display') == 'block')
    {
        target_rb.target.setStyle('display', 'none');
    }
    if (target_rb.plabel)
    {
        target_rb.plabel.removeClass('error');
        target_rb.plabel.removeClass('selected');
    }
  });
  
  // check for checkboxes
  el.getElements("input[type='checkbox']").each(function(target_cb)
  {
    target_cb.set('checked', false);
    if (target_cb.target && target_cb.target.getStyle('display') == 'block')
    {
        target_cb.target.setStyle('display', 'none');
    }
    target_cb.plabel.removeClass('error');
    target_cb.plabel.removeClass('selected');
  });
}

function get_size_px(el)
{
  // only initial unmodified body font-size in FF is in pixels, when set via javascript it's EMs again....
  var size = el.getStyle('font-size');

  if(Browser.Engine.trident == true)
  {
    return convert_em_px(size);
  }
  else
  {
    // check for px
    if (size.test("px"))
    {
      // only on unmodified body value..
      return size.toInt();
    }
    else
    {
      return convert_em_px(size);
    }
  }
}

function convert_em_px(size)
{
  // convert em to px, 16px == default browser font size (1em)
  size = size.toFloat();
  return (size * 16).round();
}
