function Container(c) {
  // Container Constructor
  var container = {};
  var allChilds = [];

  for(var i = 0 ; i < c.length;i++)
  {
    var o = Element.get(c[i]);Element.stripBreaks(o);

    container[c[i]] = {
      element:o,
      coords:Element.getCoords(o),
      childs:(function(con) {
        var c = [];
        for(var i = 0 ; i < o.childNodes.length;i++)
        {
          if(o.childNodes[i].nodeName == "#text")
            continue;

          var cc = Element.getCoords(o.childNodes[i]); // Child Coords
          var child = {
            e:o.childNodes[i],
            t:cc.posY,
            l:cc.posX,
            mid:{x:cc.posX+cc.w/2,y:cc.posY+cc.h/2,rx:cc.w/2,ry:cc.h/2}
          }

          Element.attrib(o.childNodes[i],"container",con);
          Element.attrib(o.childNodes[i],"dragObj",true);
          c.push(child);
          allChilds.push(child);
        }
        return c;
      })(c[i])
    };
  }

  function getChildContainer ()
  {
    return allChilds;
  };

  function getChildsFromContainer(con)
  {
    return container[con].childs;
  };

  function refreshContainer()
  {
    for(key in container)
    {
      container[key].coords = Element.getCoords(Element.get(key));
      container[key].childs = [];

      with(container[key].element)
      {
        for(var i = 0 ; i < childNodes.length;i++)
        {
          if(childNodes[i].nodeName == "#text") continue;

          var cc = Element.getCoords(childNodes[i]); // Child Coords
          var tmp = {
            e:childNodes[i],
            t:cc.posY,
            l:cc.posX,
            mid:{x:cc.posX+cc.w/2,y:cc.posY+cc.h/2,rx:cc.w/2,ry:cc.h/2}
          };

          container[key].childs.push(tmp);
          Element.attrib(childNodes[i],"container",key);
          Element.attrib(childNodes[i],"dragObj",true);
        }
      }
    }
  };

  function getContainer ()
  {
    return container;
  };

  this.getChildContainer = getChildContainer;
  this.getContainer      = getContainer;
  this.getChildsFromContainer = getChildsFromContainer;
  this.refreshContainer = refreshContainer;
};
            
/**
* DRAG DROP
*/
function DragDrop (container)
{
  var clickedX = 0;
  var clickedY = 0;
  var elementDragged = false;
  var dd_dummy = null;
  var element  = null;

  // man kann nur Elemente innerhalb dieses Containers ablegen
  if(container)
  {
    var dragAble = container.getChildContainer();
    for(var i = 0 ; i < dragAble.length;i++)
      Element.addEvent(dragAble[i].e,"mousedown",dragElement);
  }

  function getMouseCoords (e)
  {
    if(document.all && (/msie/i.test(navigator.userAgent)))
      return {mx:document.documentElement.scrollLeft+e.clientX,my:document.documentElement.scrollTop+e.clientY};
    else
      return {mx:e.pageX,my:e.pageY};
  };

  //maus gedrückt
  function dragElement (evt)
  {
    var e = evt || window.event;
    element = e.srcElement || e.target;

    // das Dragobjekt holen , falls der Event gesickert ist kann es passieren
    // das sonst ein anderes Element statt dem gewollten verschoben wird
    do
    {
      if(element.getAttribute("dragObj"))
        break;

      element = element.parentNode
    }
    while(element);

    var mc = getMouseCoords(e);
    var ec = Element.getCoords(element);

    clickedX = mc.mx-ec.posX;
    clickedY = mc.my-ec.posY;

    elementDragged = true;

    Element.addEvent(document,"mousemove",moveElement);
    Element.addEvent(document,"mouseup",dropElement);

    // dummy objekt erstellen falls nötig
    if(!Element.get("dd_dummy_object"))
    {
      dd_dummy = Element.create("div");
      dd_dummy.id = "dd_dummy_object";
      Element.bind(dd_dummy,"body");
    }

    Element.attrib(dd_dummy,"style",{position:"absolute",left:ec.posX+"px",top:ec.posY+"px"});
    Element.bind(element.cloneNode(true),dd_dummy);
    element.style.visibility = "visible";
    dd_dummy.innerHTML = "<div id='" + element.id + "'></div>";
  };

  //maus bewegt
  function moveElement (evt)
  {
    if(!elementDragged) return false;

    if (element.id.substring((element.id.length-5),(element.id.length+5)) == "_grey")
      return false;

    var e = evt || window.event;
    var t = e.srcElement || e.target;

    if(e.stopPropagation)
      e.stopPropagation();
    else
      e.cancelBubble = true;

    if(e.preventDefault)
      e.preventDefault();
    else
      e.returnValue = false;

    var mc = getMouseCoords(e);
    var nx = mc.mx-clickedX; // neue x coordinate
    var ny = mc.my-clickedY; // neue y coordinate

    Element.attrib(dd_dummy,"style",{left:nx+"px",top:ny+"px"});

    var con = container.getContainer();
    var beforeNode = null;
    var mx = nx+dd_dummy.offsetWidth/2;  // mitte x
    var my = ny+dd_dummy.offsetHeight/2; // mitte y
    var curcon = null;
    var element_str = element.id.substring(0,(element.id.length-3));

    for(key in con)
    {
      with(con[key].coords)
      {
        if(mx >= posX && mx <= posX+w && my >= posY && my <= posY+h && ((element_str == "button_left" && (key == "search_01" || key == element_str)) || (element_str == "button_right" && (key == "search_03" || key == element_str)) || (element_str == "button_bottom" && (key == "search_02" || key == "accessory" || key == element_str))))
        {
          // container gefunden
          if (key == "accessory")
            curcon = "search_02";
          else
            curcon = key;
          break;
        }
      }
    }

    if (element.id == "button_left_01" && curcon == "search_01")
    {
      document.getElementById('button_left_02').style.display = 'none';
      document.getElementById('button_left_03').style.display = 'none';
      document.getElementById('button_left_04').style.display = 'none';
      document.getElementById('button_left_05').style.display = 'none';
      document.getElementById('button_left_06').style.display = 'none';
      document.getElementById('button_left_07').style.display = 'none';
      document.getElementById('button_left_08').style.display = 'none';

      document.getElementById('button_left_02_grey').style.display = 'inline';
      document.getElementById('button_left_03_grey').style.display = 'inline';
      document.getElementById('button_left_04_grey').style.display = 'inline';
      document.getElementById('button_left_05_grey').style.display = 'inline';
      document.getElementById('button_left_06_grey').style.display = 'inline';
      document.getElementById('button_left_07_grey').style.display = 'inline';
      document.getElementById('button_left_08_grey').style.display = 'inline';
    }
    if (curcon == "button_left")
    {
      document.getElementById('button_left_02').style.display = 'inline';
      document.getElementById('button_left_03').style.display = 'inline';
      document.getElementById('button_left_04').style.display = 'inline';
      document.getElementById('button_left_05').style.display = 'inline';
      document.getElementById('button_left_06').style.display = 'inline';
      document.getElementById('button_left_07').style.display = 'inline';
      document.getElementById('button_left_08').style.display = 'inline';

      document.getElementById('button_left_02_grey').style.display = 'none';
      document.getElementById('button_left_03_grey').style.display = 'none';
      document.getElementById('button_left_04_grey').style.display = 'none';
      document.getElementById('button_left_05_grey').style.display = 'none';
      document.getElementById('button_left_06_grey').style.display = 'none';
      document.getElementById('button_left_07_grey').style.display = 'none';
      document.getElementById('button_left_08_grey').style.display = 'none';
    }
    if (element.id == "button_right_01" && curcon == "search_03")
    {
      document.getElementById('button_right_02').style.display = 'none';
      document.getElementById('button_right_03').style.display = 'none';
      document.getElementById('button_right_04').style.display = 'none';
      document.getElementById('button_right_05').style.display = 'none';
      document.getElementById('button_right_06').style.display = 'none';
      document.getElementById('button_right_07').style.display = 'none';
      document.getElementById('button_right_08').style.display = 'none';

      document.getElementById('button_right_02_grey').style.display = 'inline';
      document.getElementById('button_right_03_grey').style.display = 'inline';
      document.getElementById('button_right_04_grey').style.display = 'inline';
      document.getElementById('button_right_05_grey').style.display = 'inline';
      document.getElementById('button_right_06_grey').style.display = 'inline';
      document.getElementById('button_right_07_grey').style.display = 'inline';
      document.getElementById('button_right_08_grey').style.display = 'inline';
    }
    if (curcon == "button_right")
    {
      document.getElementById('button_right_02').style.display = 'inline';
      document.getElementById('button_right_03').style.display = 'inline';
      document.getElementById('button_right_04').style.display = 'inline';
      document.getElementById('button_right_05').style.display = 'inline';
      document.getElementById('button_right_06').style.display = 'inline';
      document.getElementById('button_right_07').style.display = 'inline';
      document.getElementById('button_right_08').style.display = 'inline';

      document.getElementById('button_right_02_grey').style.display = 'none';
      document.getElementById('button_right_03_grey').style.display = 'none';
      document.getElementById('button_right_04_grey').style.display = 'none';
      document.getElementById('button_right_05_grey').style.display = 'none';
      document.getElementById('button_right_06_grey').style.display = 'none';
      document.getElementById('button_right_07_grey').style.display = 'none';
      document.getElementById('button_right_08_grey').style.display = 'none';
    }

    if(!curcon)
    {
      if(element.style.display != "none")
        element.style.display = "none";
      // container coordinaten neu berechnen da es sich zusammen geklappt haben könnte
      container.refreshContainer();
      return false;
    }

    var childs = container.getChildsFromContainer(key);
    var append = false;

    // nun alle kinder des Containers abprüfen
    for(var i = 0 ; i < childs.length;i++)
    {
      if(childs[i].e == element)
        continue;

      if(childs[i].t+childs[i].e.offsetHeight > my && childs[i].l+childs[i].e.offsetWidth > mx)
      {
        Element.get(curcon).insertBefore(element,childs[i].e);
        append = true;
        break;
      }
    }

    if(curcon && !append)
        Element.bind(element,curcon);

    if(element.style.display == "none")
      element.style.display = "block";

    if(window.getSelection)
    {
      var sel = window.getSelection();
      sel.removeAllRanges();
    }
  };

  // maus losgelassen
  function dropElement (e)
  {
    dd_dummy.innerHTML = "";
    element.style.visibility = "visible";
    element.style.display = "block";
    elementDragged = false;

    var table_01 = document.getElementById('tablesearch1');
    var table_02 = document.getElementById('tablesearch2');
    var table_03 = document.getElementById('tablesearch3');
    var search_01 = document.getElementById('search_01');
    var search_02 = document.getElementById('search_02');
    var search_03 = document.getElementById('search_03');

    if (search_01.innerHTML == "&nbsp;" && search_02.innerHTML == "&nbsp;" && search_03.innerHTML == "&nbsp;")
    {
      table_01.style.backgroundImage = "url('')";
      table_02.style.backgroundImage = "url('')";
      table_03.style.backgroundImage = "url('')";
    }
    else
    {
      table_01.style.backgroundImage = "url('img/erlebnissuche/erlebnissuche_center_01.png')";
      table_02.style.backgroundImage = "url('img/erlebnissuche/erlebnissuche_center_02.png')";
      table_03.style.backgroundImage = "url('img/erlebnissuche/erlebnissuche_center_03.png')";
      
      ermitteleTreffer(document.getElementById('search_01').innerHTML,document.getElementById('search_02').innerHTML,document.getElementById('search_03').innerHTML);
    }

    Element.unlinkEvent(document,"mousemove",moveElement);
    Element.unlinkEvent(document,"mouseup",dropElement);
    container.refreshContainer();
  };
};
