var DOM={
   
   // Usage
   //    DOM.insert(newNode)
   //    DOM.insert(containerNode, newNode)
   insert: function()
           {
              if(arguments.length==1)
              {
                 $tagName("body")[0].appendChild(arguments[0]);
              }
              else
              {
                 arguments[0].appendChild(arguments[1]);
              }
           },
   
   insertBefore: function(node, refNode)
                 {
                    refNode.parentNode.insertBefore(node, refNode);
                 },
                 
   insertAfter: function(node, refNode)
                {
                   if(refNode.nextSibling)
                   {
                      refNode.parentNode.insertBefore(node, refNode.nextSibling);
                   }
                   else
                   {
                      refNode.parentNode.appendChild(node);
                   }
                },
                
   remove: function()
           {
              if(arguments.length==1)
              {
                 return arguments[0].parentNode.removeChild(arguments[0]);
              }
              else
              {
                 return arguments[0].removeChild(arguments[1]);
              }
           },
           
   removeChildren: function(node)
                   {
                      while(node.firstChild)
                         node.removeChild(node.firstChild);
                   }, 
   
   replace: function(oldNode, newNode)
            {
               oldNode.parentNode.replaceChild(newNode, oldNode);
            }, 
   
   getParent: function(el)
              {
                 return el.parentNode;
              }, 
   
   getSelection: function()
                 {
                    var sel=(window.selection ? window.getSelection : (document.selection ? document.selection.createRange() : ""));
                    
                    return (sel!="" ? sel : null);
                 }, 
                 
   getSelectedNode: function()
                    {
                       var node;

                       if(document.selection)
                       {
                          node=document.selection.parentElement();
                       }
                       else if(window.getSelection)
                       {
                          node=window.getSelection().getRangeAt(0).commonAncestorContainer;
                       }

                       return node;
                    }, 
                    
   getCaretPosition: function(el)
                     {
                        var pos=0;
                        
                        if(document.selection)
                        {
                           el.focus();
                           
                           var sel=document.selection.createRange();
                           
                           sel.moveStart ('character', -el.value.length);

                           pos=sel.text.length;
                        }
                        else if (ctrl.selectionStart || ctrl.selectionStart=='0')
                        {
                           pos=el.selectionStart;
                        }
                        
                        return pos;
                     },
                    
   setCaretPosition: function(el, pos)
                     {
                        if(el.setSelectionRange)
                        {
                           alert("setSelectionRange");
                           el.focus();
                           el.setSelectionRange(pos, pos);
                        }
                        else if(el.createTextRange)
                        {
                           alert("createTextRange");
                           
                           var range=ctrl.createTextRange();
                           range.collapse(true);
                           range.moveEnd('character', pos);
                           range.moveStart('character', pos);
                           range.select();
                        }
                        else
                        {
                           alert("HERE");
                        }
                     }
};