/**
  * finally sends complete template $name, parsed 
  * and compressed (if setup in config-file)
  *
  * @param   string  template file name
  * @param   string  type of output (html,js,css...)
  * 
  * @access  public
  *
  * @author  patrick.kracht
  */
 public function output($name, $type = "html")
 {
     if (!isset($name)) {
         return trigger_error("Bitte geben Sie ein Template zur Ausgabe an!");
     }
     if (!isset(self::$template[$name])) {
         self::load($name);
     }
     self::set_sql_performance();
     self::set_php_performance($name);
     self::parsed($name);
     self::special_chars(self::$template[$name]);
     if (self::$debugoff) {
         self::compress($name);
     }
     // save all previously sent output (with byte-order-mark-filter)
     $obget = trim(ob_get_clean());
     $obget = str_replace("", "", $obget);
     //BOM
     $obget = strip_tags(utf8_encode($obget));
     // if errormessages were printed, append hidden
     if (!empty($obget)) {
         self::$debugout = $obget;
     }
     // DEBUGGING (only HTML pages!)
     if ($type == "html" && (!empty(self::$debugout) || self::$performance)) {
         self::$template[$name] .= "\n\n<!--\n";
         if (!empty(self::$debugout)) {
             self::$template[$name] .= "\nDEBUG MESSAGES\n\n" . self::$debugout . "\n\n";
         }
         self::$template[$name] .= self::$php_perform;
         self::$template[$name] .= self::$sql_perform;
         self::$template[$name] .= "\n-->\n";
     }
     // GZIP ON | OFF
     if (self::accepts_gzip()) {
         self::$template[$name] = gzencode(self::$template[$name], 9);
     }
     self::headers($type);
     header("Content-Length: " . strlen(self::$template[$name]));
     echo self::$template[$name];
 }