

/*
* dom
*
* Steuerung des DOM (Dokument-Objekt-Modell)
*
* @access  public
* @type    object
*/

var dom = {
  
  
  /*
  * element
  *
  * Objekte und Funktionen des DOM-Elements
  *
  * @access  public
  * @type    object
  */
  
  'element': {
    
    
    /*
    * get
    *
    * Gibt ein Object mit der übergebenen ID/Namen zurück
    *
    * @package  dom.js
    * @author   Sergej Müller
    * @since    15.09.2006
    * @change   19.10.2006
    * @access   public
    * @param    mixed   id    ID des Elementes
    * @param    string  type  Typ des Elementes (ID als Default) [optional]
    * @return   object        Object mit der gesuchten ID
    */
    
    'get': function(id, type) {
      /* Default setzen */
      type = type || 'id';
      
      /* Typ auswählen */
      switch (type) {
        case 'id':
          return document.getElementById(id);
        break;
        
        case 'tag':
          return document.getElementsByTagName(id)[0];
        break;
        
        default:
          return getElementsByName(id)[0];
        break;
      }
      
      return false;
    },
    
    
    /*
    * add
    *
    * Erstellt ein Element mit übergebenen Attributen
    *
    * @package  dom.js
    * @author   Sergej Müller
    * @since    15.09.2006
    * @change   16.09.2006
    * @access   public
    * @param    string  type  Type des Elements
    * @param    object  attr  Attributen des Elementes
    * @return   object  obj   Angelegter Object
    */
    
    'add': function(type, attr) {
      /* DOM-Element anlegen */
      var obj = document.createElement(type);
      
      /* Attribute loopen */
      for (var key in attr) {
        var val = attr[key];
        
        /* Styles */
        if (key.substring(0, 5) == 'style') {
          /* Eigenschaft des Styles */
          var opt = key.substring(6);
          
          /* Externe Lib nutzen */
          switch (opt) {
            /* ... */
            
            default:
              obj['style'][opt] = val;
            break;
          }
        
        /* Text */
        } else if (key == 'text') {
          this.append(
                      obj,
                      document.createTextNode(val)
                     );
        
        /* Events */
        } else if (key.substring(0, 2) == 'on') {
          obj[key] = new Function(val);
        
        /* SetAttribute */
        } else if (key.substring(0, 3) == 'set') {
          obj.setAttribute(key.substring(4), val);
        
        /* Sonstige */
        } else {
          obj[key] = val;
        }
      }
      
      return obj;
    },
    
    
    /*
    * prepend
    *
    * Hängt ein Kindelement an Anfang des Elementes
    *
    * @package  dom.js
    * @author   Sergej Müller
    * @since    28.11.2006
    * @change   28.11.2006
    * @access   public
    * @param    object  obj        Mutter-Element
    * @param    object  child_obj  Kind-Element
    */
    
    'prepend': function(obj, child_obj) {
      obj.insertBefore(child_obj, obj.firstChild);
    },
    
    
    /*
    * append
    *
    * Hängt ein Kindelement ans Ende des Elementes
    *
    * @package  dom.js
    * @author   Sergej Müller
    * @since    15.09.2006
    * @change   16.09.2006
    * @access   public
    * @param    object  obj        Mutter-Element
    * @param    object  child_obj  Kind-Element
    */
    
    'append': function(obj, child_obj) {
      obj.appendChild(child_obj);
    },
    
    
    /*
    * replace
    *
    * Ersetzt ein Element gegen ein neues
    *
    * @package  dom.js
    * @author   Sergej Müller
    * @since    15.09.2006
    * @change   16.09.2006
    * @access   public
    * @param    object  obj      Mutter-Element
    * @param    object  new_obj  Neues Element
    * @param    object  old_obj  Altes Element
    */
    
    'replace': function(obj, new_obj, old_obj) {
      if (old_obj === null) {
        /* Kindobjekte entfernen */
        this.clean(obj);
        
        /* Object einfügen */
        obj.appendChild(new_obj);
      } else {
        obj.replaceChild(
                         new_obj,
                         old_obj
                        );
      }
    },
    
    
    /*
    * remove
    *
    * Entfernt ein Element
    *
    * @package  dom.js
    * @author   Sergej Müller
    * @since    15.09.2006
    * @change   16.09.2006
    * @access   public
    * @param    object  obj  Zu löschendes Element
    */
    
    'remove': function(obj) {
      obj.parentNode.removeChild(obj);
    },
    
    
    /*
    * clean
    *
    * Leert den Content eines Elements
    *
    * @package  dom.js
    * @author   Sergej Müller
    * @since    15.09.2006
    * @change   16.09.2006
    * @access   public
    * @param    object  obj  Zu leerendes Element
    */
    
    'clean': function(obj) {
      while (obj.hasChildNodes()) {
        obj.removeChild(obj.childNodes[0]);
      }
    }
  }
}
