function Splitter(pSplitterContainer, pSplitterContent, pSplitterHeight) {
  var MIN_HEIGHT = 200;
  var MAX_ERROR_1 = 50;
  var MAX_ERROR_2 = 500;
  
  var splitterContainer;
  var splitterContent;
  var splitterHeight;
  var splitterLeft;
  var splitterCenter;
  var splitterRight;
  var contentArray;
  var idxArray;
  var txtArray;
  var allowedHeight;
  var idx;
  var splitChar;
  
  var self = this;
  
  this.initialize = function(pSplitterContainer, pSplitterContent, pSplitterHeight) {
    splitterContainer = pSplitterContainer;
    splitterContent = pSplitterContent;
    splitterHeight = pSplitterHeight;

    self.eval();
  }

  //---------------------------------------------------------------------------

  this.eval = function() {
    var splitterDivLeft = splitterContainer + "Left";
    var splitterDivCenter = splitterContainer + "Center";
    var splitterDivRight = splitterContainer + "Right";
    
    contentArray = new Array();
    idxArray = new Array();
    idx = 0;
    
    $(splitterContainer).setStyle("overflow: hidden");
    if(splitterHeight > 0) {
      $(splitterContainer).setStyle("height: " + splitterHeight + "px");
    }
    
    //$(splitterContainer).setStyle("border: 1px solid");
    //$(splitterContent).setStyle("border: 1px dotted");

    allowedHeight = $(splitterContainer).getHeight() - 28;
    allowedHeight = Math.max(allowedHeight, MIN_HEIGHT);

    if($(splitterDivLeft)) $(splitterDivLeft).remove();
    if($(splitterDivCenter)) $(splitterDivCenter).remove();
    if($(splitterDivRight)) $(splitterDivRight).remove();
    
    splitterLeft = new Element("div", { "id": splitterDivLeft });
    $(splitterLeft).setStyle("float: left;");
    $(splitterLeft).update("&lt;&lt;&lt;");
    $(splitterContainer).appendChild($(splitterLeft));
    $(splitterLeft).setStyle("position: absolute; border: 0px solid; margin-top: 10px; left: 13px; text-decoration: underline;");
    $(splitterLeft).setOpacity(0.0);
    $(splitterLeft).observe('click', function() {
      idx = Math.max(0, idx-1);
      //alert(idx);
      self.showContent();
    });
    $(splitterLeft).observe('mouseover', function() {
      $(splitterLeft).setStyle("cursor: pointer;");
    });

    splitterRight = new Element("div", { "id": splitterDivRight });
    $(splitterRight).setStyle("float: right;");
    $(splitterRight).update("&gt;&gt;&gt;");
    $(splitterContainer).appendChild($(splitterRight));
    $(splitterRight).setStyle("position: absolute; border: 0px solid; margin-top: 10px; left: " + ($(splitterContainer).getWidth() - $(splitterRight).getWidth() - 14) + "px; text-decoration: underline;");
    $(splitterRight).setOpacity(0.0);
    $(splitterRight).observe('click', function() {
      idx = Math.min(idx+1, idxArray.length-2);
      //alert(idx);
      self.showContent();
    });
    $(splitterRight).observe('mouseover', function() {
      $(splitterRight).setStyle("cursor: pointer;");
    });
    
    if(splitterContainer.substring(0, 6) == "layer_") {
      splitterCenter = new Element("div", { "id": splitterDivCenter });
      $(splitterCenter).setStyle("float: left;");
      $(splitterCenter).update("schließen");
      $(splitterContainer).appendChild($(splitterCenter));
      $(splitterCenter).setStyle("position: absolute; border: 0px solid; margin-top: 10px; left: " + (13 + $(splitterLeft).getWidth()) + "px; width: " + (parseInt($(splitterRight).style.left) - (13 + $(splitterLeft).getWidth())) + "px; text-align: center; text-decoration: underline;");
      $(splitterCenter).observe('click', function() {
        slider.close();
      });
      $(splitterCenter).observe('mouseover', function() {
        $(splitterCenter).setStyle("cursor: pointer;");
      });
    }

    allowedHeight -= $(splitterLeft).getHeight() + 4;
    allowedHeight = Math.max(allowedHeight, MIN_HEIGHT);
    //self.info("divContent2", allowedHeight, $(splitterContainer).getHeight());
  }

  //---------------------------------------------------------------------------
  
  this.write = function(s) {
    //if(splitterContainer == "layer_zwei_mitte") {
    //  document.write(s);
    //}
  }
  
  this.info = function() {
    if(arguments[0] && splitterContainer == arguments[0]) {
      var info = "";
      for(var i=0 ; i<arguments.length ; i++) {
        info += "'" + arguments[i] + "'";
        if(i < arguments.length-1) {
          info += " - ";
        }
      }
      alert(info);
      //console.info(info);
    }
  }
  
  this.isLetter = function(ch) {
    return 'A' <= ch && ch <= 'Z' || 'a' <= ch && ch <= 'z';
  }

  this.getContent = function(contentArray, sIdx, eIdx) {
    var content = "";
    
    for(var i = sIdx ; i < eIdx ; i++) {
      content += contentArray[i];
    }
    //content = content.replace(/^(<br *\/*>)+/g, "").replace(/$(<br *\/*>)+/g, "");
    content = content.replace(/^(\s*<br\s*\/*>\s*)+/gi, "");
    content = content.replace(/$(\s*<br\s*\/*>\s*)+/gi, "");

    return content;
  }

  this.setContent = function(content) {
    $(splitterContent).update(content);

    return $(splitterContent).getHeight();
  }

  this.showContent = function() {
    self.setContent(self.getContent(contentArray, idxArray[idx], idxArray[idx+1]));
    $(splitterLeft).setOpacity(idx==0?0.0:1.0);
    $(splitterRight).setOpacity(idx>=idxArray.length-2?0.0:1.0);
  }
  
  this.splitStr = function(content) {
    var Start = 0;
    var S1 = 1;
    var S2 = 2;
    var S3 = 3;
    var S4 = 4;
    var S5 = 5;
    var S6 = 6;
    var S7 = 7;
    var txtArray = new Array();
    var txt = "";
    var tag = "";
    var deep = 0;
    var state = Start;
    
    for(var i=0 ; i<content.length ; i++) {
      var c = content.charAt(i);
      var cc = content.charCodeAt(i);
      self.write(i + " - Z:" + state + " - |" + c + "| - " + cc + "| - " + deep + "<br />");
      //console.info(state + " - " + c);
      txt += c;
      switch(state) {
        case Start: {
          if(c == "<") {
            state = S1;
          } else {
            state = S7;
          }
        }
        break;
        case S1: {
          if(c == "/") {
            tag = "";
            state = S5;
          } else {
            if(self.isLetter(c)) {
              tag += c;
            } else {
              tagLow = tag.toLowerCase();
              if(tagLow=="br" || tagLow=="img" || tagLow=="li" && (Prototype.Browser.IE || Prototype.Browser.Opera)) {
              } else {
                deep++;
              }
              tag = "";
              if(c == ">") {
                if(deep >= 1) {
                  state = S4;
                } else {
                  state = S7;
                }
              } else {
                state = S4;
              }
            }
          }
        }
        break;
        case S2: {
          if(c == "\"" || c == "<" || c == ">") {
            state = S4;
          } else {
          }
        }
        break;
        case S3: {
          if(c == "\'" || c == "<" || c == ">") {
            state = S4;
          } else {
          }
        }
        break;
        case S4: {
          if(c == "<") {
            state = S1;
          } else {
            if(c == "/") {
              state = S5;
            } else {
              if(c == "\"") {
                state = S2;
              } else {
                if(c == "\'") {
                  state = S3;
                } else {
                }
              }
            }
          }
        }
        break;
        case S5: {
          if(c == ">") {
            if(deep > 1) {
              state = S4;
            } else {
              state = S7;
            }
          } else {
            if(self.isLetter(c)) {
              state = S6;
            } else {
              state = S4;
            }
          }
        }
        break;
        case S6: {
          if(c == ">") {
            deep--;
            if(deep > 0) {
              state = S4;
            } else {
              state = S7;
            }
          } else {
          }
        }
        break;
        case S7: {
          if(c == "<") {
            state = S1;
          } else {
            if(c == splitChar) {
              self.write("<br />-------------------------------------------------------<br />");
              self.write(txt);
              self.write("<br />-------------------------------------------------------<br />");
              //alert(txt);
    
              if(splitChar == "|") {
                txt = txt.replace(/(\|)+/g, "");
              }
              //alert(txt);

              txtArray.push(txt);
              txt = "";
            } else {
            }
          }
        }
        break;
      }
    }
    
    self.write("fin Z:" + state + " - |" + c + "| - " + deep + "<br />");

    if(txt != "") {
      self.write("<br />-------------------------------------------------------<br />");
      self.write(txt);
      self.write("<br />-------------------------------------------------------<br />");
      //alert(txt);

      if(splitChar == "|") {
        txt = txt.replace(/(\|)+/g, "");
      }
      //alert(txt);

      txtArray.push(txt);
    }
    
    return txtArray;
  }

  this.split = function(pSplitChar) {
    var sIdx = 0;
    var eIdx = 0;
    var errCnt1 = 0;
    var errCnt2 = 0;
    var requiredHeight;
    var innerHTML;
    
    splitChar = pSplitChar;
    
    self.eval();

    if(allowedHeight < MIN_HEIGHT) {
      return;
    }
    
    innerHTML = $(splitterContent).innerHTML;
    if(pSplitChar == "|") {
      innerHTML = innerHTML.replace(/<var><\/var>/gi, "|");
    }
    
    contentArray = self.splitStr(innerHTML);
    //self.info("divContent2_content", contentArray.length + "\n" + contentArray);
    idxArray = new Array();
    idxArray.push(sIdx);

    errCnt1 = 0
    while(errCnt1 < MAX_ERROR_1 && eIdx < contentArray.length) {
      errCnt2 = 0;
      while(errCnt2 < MAX_ERROR_2 && eIdx < contentArray.length && (requiredHeight = self.setContent(self.getContent(contentArray, sIdx, eIdx))) < allowedHeight) {
        eIdx++;
        errCnt2++;
      }
      errCnt1++;
      
      if(eIdx >= contentArray.length) {
        if(self.setContent(self.getContent(contentArray, sIdx, eIdx)) >= allowedHeight) {
         idxArray.push(eIdx-1);
        }
      } else {
        if(requiredHeight >= allowedHeight) {
          eIdx--;
        }
      }

      self.setContent(self.getContent(contentArray, sIdx, eIdx));
      
      //self.info("layer_eins_mitte", "h: " + self.setContent(self.getContent(contentArray, sIdx, eIdx)));
      //self.info("layer_eins_mitte", "t: " + self.getContent(contentArray, sIdx, eIdx));

      idxArray.push(eIdx);
      sIdx = eIdx;
    }
    //self.info("layer_eins_mitte", idxArray);
    
    if(errCnt1 >= MAX_ERROR_1 || errCnt2 >= MAX_ERROR_2) {
      var errTxt = "";
      
      errTxt += "contentArray.length " + contentArray.length + "<br/>";
      errTxt += "allowedHeight " + allowedHeight + "<br/>";
      errTxt += "requiredHeight " + requiredHeight + "<br/>";
      errTxt += "errCnt1 " + errCnt1 + "<br/>";
      errTxt += "errCnt2 " + errCnt2 + "<br/>";
      
      //$(splitterContent).update(errTxt); //**
    } else {
      idx = 0;
      self.showContent();
    }
  }

  //---------------------------------------------------------------------------

  this.initialize(pSplitterContainer, pSplitterContent, pSplitterHeight);
}

