/**
 * dom.js
 *
 * @version 0.2 20031223
 *	@author Andreas Reichert
 * @author (c) Top 21 GmbH
 *
 */
/**
 * function nodeCleaner
 *
 * entfernt alle Werte (attribute und Textnodes) rekursiv aus einem Teilbaum
 *
 * @argument node - der Teilbaum
 * @return node
 *
 */

function nodeCleaner(node, att, txt)
{
	var att = new String(att || 'true');
	var txt = new String(txt || 'true');
	if(att == 'true' && node.attributes.length)
	{
	   for(var a = 0; a < node.attributes.length; a++)
	   {
	      // vorhandene Attribute bereinigen
	      node.attributes[a].nodeValue = "";
	   }
	}
	if(node.childNodes.length)
	{
		var nl = node.childNodes.length;
		for(var n = nl - 1; n >= 0; n--)
      {
      	var actNode = node.childNodes[n];

      	if(txt=='true' && actNode.nodeType == 3)
      	{
      		node.removeChild(actNode);
      	}
      	else if(actNode.nodeType == 1 && actNode.childNodes.length)
      	{
      		nodeCleaner(actNode, att, txt);
      	}
      }
	}
	return node;
}


/*
function nodeCleaner(node)
{
	if(node.attributes.length)
	{
	   for(var a = 0; a < node.attributes.length; a++)
	   {
	      // vorhandene Attribute bereinigen
	      node.attributes[a].nodeValue = "";
	   }
	}
   if(node.childNodes.length)
   {
      // textnodes bereinigen oder recursiv durch den Baum
      var nl = node.childNodes.length;
      var nNames = new Array();

      // Array fuer die NodeNames
      for(var n = nl - 1; n >= 0; n--)
      {
         var act = node.childNodes[n];
         var actName = act.nodeName;
         var bFound = false;
         for(var i = 0; i < nNames.length; i++)
         {
            // suche, ob ein gleichnamiges Geschwister-Node schon vorhanden ist
            if(nNames[i] == actName)
            {
               bFound = true;
            }
         }

         if(!bFound)
         {
            nNames[n] = actName;
            // nicht gefunden? Dann dem name-Array hinzufuegen
            if(act.childNodes.length)
            {
               snl = act.childNodes.length;
               for(var sn = snl - 1; sn >= 0; sn--)
               {
               	alert(act.childNodes[sn].nodeType);
                  if(act.childNodes[sn].nodeType == 3)
                  {
                     act.removeChild(act.childNodes[sn]);
                     // textNode entfernen
                  }
                  else if(act.childNodes[sn].nodeType == 1)
                  {
                     nodeCleaner(act);
                     // recursiver Aufruf
                  }
                  else
                  {
                     try
                     {
                        act.removeChild(act.childNodes[sn]);
                        // alle anderen Nodetypen entfernen
                     }
                     catch(e)
                     {
                        // Fehler unterdr�cken
                     }
                  }
               }
            }
         }
         else
         {
         	alert(act.xml);
            node.removeChild(act);
            // mehrfach vorkommende Childnodes werden ausgefiltert
         }
      }
   }
   return node;
}
*/

function _appendNodeToDOM(node, pointer)
{
   theDom = objContent.DOM;
   switch(node.nodeType)
   {
      case 1 : // ELEMENT
         {
            if(node.nodeName == "!")
            {
               // IE5.0 and IE5.5 are weird
               var newTextElem = theDom.createTextNode(node.nodeValue);
               pointer.appendChild(newTextElem);
               break;
            }
            var name = node.nodeName;
            if(node.scopeName == "HTML")
            {
               name = name.toLowerCase();
            }
            var newElem = theDom.createElement(name);
            // attributes
            var attrs = node.attributes;
            var l = attrs.length;
            for(var j = 0; j < l; j++)
            {
               if(attrs[j].specified)
               {
                  newElem.setAttribute(attrs[j].nodeName, attrs[j].nodeValue);
               }
            }
            var newPointer = pointer.appendChild(newElem);
            if(node.hasChildNodes())
            {
               // childNodes
               var cs = node.childNodes;
               var l = cs.length;
               for(var k = 0; k < l; k++)
               {
                  _appendNodeToDOM(cs[k], newPointer);
               }
            }
            break;
         }
      case 3 : // TEXT
         {
            var newTextElem = theDom.createTextNode(node.nodeValue);
            pointer.appendChild(newTextElem);
            break;
         }
      case 4 : //sb.append("<![CDA" + "TA[\n" + node.nodeValue + "\n]" + "]>");
         {
            break;
         }
      case 8 :
         {
            var newComment = theDom.createComment(node.text);
            pointer.appendChild(newTextElem);
            break;
         }
      case 9 : // DOCUMENT
         {
            // childNodes
            var cs = node.childNodes;
            var l = cs.length;
            for(var m = 0; m < l; i++)
            {
               _appendNodeToDOM(cs[k], pointer);
            };
            break;
         }
      default :
         {
            throw new Error("Unbekannter Nodetype: " + node.nodeType + "!")
         };
   }
}

