function openOrCloseFold(id) {
  var linkSign = 'sign_' + id;

  if(document.getElementById(id).style.display != 'block') {
    document.getElementById(id).style.display = 'block';
    document.getElementById(linkSign).innerHTML = '[&divide;]';
  }
  else {
    document.getElementById(id).style.display = 'none';
    document.getElementById(linkSign).innerHTML = '[+]';
  }
}

function changeMarkings(element) {
  var needle = element.id.match(/(_|\d)+$/);
  var index = needle ? element.id.lastIndexOf(needle[0]) : 0;
  var unique = element.id.substring(0, index);
  if(needle[0] == '_0')
    changeMarkingAll(unique);
  else
    changeMarkingsBubble(element, unique); 
  processMarkingRules();
}

var markings = {};

function changeMarkingAll(unique) {
  var all = unique + '_0';
  var all_mark = document.getElementById(all).checked;
  
  if(!markings[all])
    document.getElementById(all).checked = true;
  else 
    for(u in markings[unique]) 
      if(markings[unique][u]) {
        if(all_mark)
          markings[unique][u] = document.getElementById(u).checked;
        document.getElementById(u).checked = !all_mark;
      }
}

function changeMarkingsBubble(element, unique) {
  var all = unique + '_0';
  var all_mark = document.getElementById(all).checked;

  if(all_mark) {
    markings[all] = true;
    document.getElementById(all).checked = false;
    markings[unique] = {};
    markings[unique][element.id] = true;
  }
  else {
    if(element.checked) {
      for(u in markings[unique]) {
        if(u != element.id && (u.indexOf(element.id + '_') == 0 || element.id.indexOf(u + '_') == 0)) {
          markings[unique][u] = document.getElementById(u).checked;
          document.getElementById(u).checked = false;
        }
      }

      markings[unique][element.id] = true; 
    }
    else { 
      markings[unique][element.id] = false;

      for(u in markings[unique]) {
        m = markings[unique][u];

        if(m && (u.indexOf(element.id + '_') == 0 || element.id.indexOf(u + '_') == 0)) {
            document.getElementById(u).checked = true;
        } 
      }

      var some_marked = false;

      for(u in markings[unique]) {
        m = markings[unique][u];
        some_marked = some_marked || m && document.getElementById(u).checked;
      }

      if(!some_marked) {
        document.getElementById(all).checked = true;
        markings[all] = false;
      } 
    }
  } 
} 

function processMarkingRules(unique, element) {
  var inputs = document.getElementsByTagName('input');
  for (var i = 0; i < inputs.length; i++) {
    var element = inputs[i];
    if (element.type == 'checkbox' && element.checked) {
      var needle = element.id.match(/(_|\d+)+$/);
      var index = needle ? element.id.lastIndexOf(needle[0]) : 0;
      var unique = element.id.substring(0, index);
      if (unique == 'medie') {
        littformTag = document.getElementById('littformFacet').getElementsByTagName('ul')[0];
        maalgruppeTag = document.getElementById('maalgruppeFacet').getElementsByTagName('ul')[0];
        if ((element.value == 'ma=ebg') && element.checked) {
          littformTag.style.display = 'none';
          maalgruppeTag.style.display = 'none';
          clearMarkings(littformTag);
          clearMarkings(maalgruppeTag);
        } else {
          littformTag.style.display = 'block';
          maalgruppeTag.style.display = 'block';
        }
      }
    }
  }
}

function clearMarkings(element) {
  elements = element.getElementsByTagName('li');
  for (li=0; li<elements.length; li++) {
    if (elements[li].className == 'all') {
      elements[li].getElementsByTagName('input')[0].checked = true;
    } else {
      elements[li].getElementsByTagName('input')[0].checked = false;
    }
  }
}

function fetchMarkings() { 
  var inputs = document.getElementsByTagName('input');
  for (var i = 0; i < inputs.length; i++) {
    var element = inputs[i];
    if (element.type == 'checkbox' && element.checked) {
      var needle = element.id.match(/(_|\d+)+$/);
      var index = needle ? element.id.lastIndexOf(needle[0]) : 0;
      var unique = element.id.substring(0, index);
      if (!markings[unique])
        markings[unique] = {};
      if (needle[0] != '_0') {
        markings[unique + '_0'] = true;
        markings[unique][element.id] = true;
      }
    }
  }
  processMarkingRules();
} 

$(document).ready(function(){
  fetchMarkings();
});



