/**
 * show and hide elements, such as several parts of a form
 *
 * Created on 11.09.2008
 * Project: asurvey
 *
 * '$Id: toggle_elems.js,v 1.3 2009/09/30 13:02:13 abaethe Exp $'
 *
 */


var toggleElementSubs_divs = Array();


/**
 * display/hide dedicated element
 *
 * mode A: if only 1 element is given, this one will be toggled
 * mode B: if elems2fadeout is set, these ones are faded out and first element will be faded in
 *
 */
function toggleElement(element, elems2fadeout)
{
  var elem = document.getElementById(element);

  // additional handling: n to fade out, 1 to fade in
  if( elems2fadeout )
  {
    for( i = 0; i < elems2fadeout.length; i++ )
    {
      var elem2fadeout = document.getElementById(elems2fadeout[i]);
      if( elem2fadeout.style.visibility == 'visible' )
      {
        elem2fadeout.style.visibility = 'hidden';
        elem2fadeout.style.position = "absolute";
      }

      toggleElementSubs(elem2fadeout.innerHTML, 'hidden')  // hide "children", too
    }
    fade_in(0, element, 100);                                                    // cooler version
    elem.style.position = "relative";
    toggleElementSubs(elem.innerHTML, 'visible')           // show "children", too
  }
  // normal handling: 1 to fade in or out
  else
  {
    if( !elem || (elem.style.visibility == 'hidden') )
    {
      //document.getElementById('grey_overlay').style.visibility = 'visible';    // old version
      fade_in(0, element, 100);                                                  // cooler version
      elem.style.position = "relative";
      toggleElementSubs(element.innerHTML, 'visible');  // show "children", too
    }
    else
    {
      //document.getElementById('grey_overlay').style.visibility = 'hidden';     // old version
      fade_out(100, element);                                                    // cooler version
      elem.style.position = "absolute";
      toggleElementSubs(element.innerHTML, 'hidden');   // hide "children", too
    }
  }
}

/**
 * display/hide divs that are positioned absolutely and children of given content
 */
function toggleElementSubs(content, mode)
{
  var reg = "id=['\"]?([a-zA-Z0-9_]+)['\" ]";
  var regex = new RegExp(reg, "i");
  
  // loop as long as there is a match and replace it
  while ( content.match(regex) ) 
  {
    var current_id = RegExp.$1;
    var current_elem = document.getElementById(current_id);
    if( current_elem && (current_elem.style.position == 'absolute') )
    {
      if( (mode == 'visible') && toggleElementSubs_divs[current_id] )
        current_elem.style.visibility = toggleElementSubs_divs[current_id];
      else
        current_elem.style.visibility = mode;
    }
    content = content.replace(regex, '');   // needed for incremental search
  }
}

/**
 * init status of display/hide-modes of special divs
 */
function toggleElementSubsInit(element, hideemthen)
{
  var elem    = document.getElementById(element);
  var content = elem.innerHTML;

  var reg = "id=['\"]?([a-zA-Z0-9_]+)['\" ]";
  var regex = new RegExp(reg, "i");
 
  // loop as long as there is a match and replace it
  while( content.match(regex) ) 
  {
    var current_id = RegExp.$1;
    var current_elem = document.getElementById(current_id);
    if( current_elem && (current_elem.style.position == 'absolute') )
    {
      toggleElementSubs_divs[current_id] = current_elem.style.visibility;
      if( hideemthen == 'hideem,too!' )
        current_elem.style.visibility = 'hidden';
    }
    content = content.replace(regex, '');   // needed for incremental search
  }
}  
 


