function findControl( pFrom, pName) {
//pFrom is een document
//pName is een string
  var lControl

/*
Netscape 6 and Explorer 5: document.getElementById('tex').style
Explorer 4 (and 5): document.all.tex.style
Netscape 4: document.tex
*/


  //Is de aanroep geldig?
  if (pFrom) {

    //Eerst de snelste en makkelijkste manier proberen
    if (pFrom.getElementById) {
      lControl = pFrom.getElementById( pName)
    }

    //Of op naam
    if (!lControl) {
      if (pFrom.getElementByName) {
        lControl = pFrom.getElementByName( pName)
      }
    }

    //Nu verder zoeken
    if (!lControl) {
      if ( pFrom.all) {
        for(i=0; i<pFrom.all.length; i++) {
          //alert( pFrom.all(i).tagName + ' ' + pFrom.all(i).id)
          if ( pFrom.all(i).tagName == pName) {
            //alert( 'tag found')
            lControl = pFrom.all(i)
          }
          if ( pFrom.all(i).id == pName) {
            //alert( 'id found')
            lControl = pFrom.all(i)
          }
          //alert( pFrom.all(i).tagName)
        }
        alert( 'not found ' + pName)
      } else {
        if (pFrom.pName) { 
          lControl = pFrom.pName
          alert( 'findControl: ' + pFrom.pName + ' als pFrom.pName')
        }
        
        if (!lControl) {
          if (pFrom.tags) { 
            if (pFrom.tags.pName) { 
              lControl = pFrom.tags.pName
              alert( 'findControl: ' + pName + ' als tag ' + lControl.name)
            }
          }
        }
        
        //mischien een Anchor?
        /*
        if (!lControl) {
          //alert('5' + pFrom.anchors[pName])
          lControl = pFrom.anchors[pName]
          //alert( pFrom.anchors[pName].text)
        }
        */
        
        //Voor Netscape 4 zitten html-elementen onder ids
        //Een frame word ook teruggegeven als id-control, dus niet als frame.
        //Een frame heeft een document, maar via deze manier is die er niet!!!
        if (pFrom.ids) { 
          if (pFrom.ids.pName) { 
            lControl = pFrom.ids.pName
            alert( 'findControl: ' + pName + ' als id ' + lControl.name)
          }
        }

        //Layers d.m.v. findControlOrLayer

        //alert( 'Geen all!')
        //lControl = pFrom.layers[ pName]
        //pFrom.tags[pName].innerText = 'test'
        //alert('1' + pFrom.layers.length)
        //alert('4' + pFrom.anchors.length)
        //alert('3' + pFrom.layers[pName])
      }
    }

    //Niks gevonden
    if (!lControl) {
      //alert( 'findControl: ' + pName + ' niet gevonden!')
    }
  } else {
    alert( 'findControl: Ongeldige aanroep!')
  }
  return lControl
}

function findControlOrLayer( pDocument, pName) {
  var lControl

  //findControl vind hier ook een frame, en dat willen we nu even niet!
  if (document.all) {
    lControl = findControl( pDocument, pName)
  } else {
    //alert( 'findControlOrLayer')
    if (pDocument.layers) {
      //layers geeft in elk geval wél een object terug, alleen is het geen tag
      lControl = pDocument.layers[ pName]
    }
    //alert( 'findControlOrLayer ' + lControl)
  }
  return lControl
}

function hideInputControls( pContainer) {
  if (pContainer) {
    if (pContainer.all) {
      //alert(pContainer.all.length)
      for(i=0; i<pContainer.all.length; i++) {
        /*
        if ( ( pContainer.all(i).tagName != 'OPTION') && (pContainer.all(i).tagName != 'TD') ) {
          alert(pContainer.all(i).tagName)
        }
        */
        if ( (pContainer.all[i].tagName == 'SELECT') || (pContainer.all[i].tagName == 'TEXTAREA')  || (pContainer.all[i].tagName == 'INPUT') ) {
          pContainer.all[i].style.width = 0
        }
      }
    } else {
      //alert( 'geen document.all')
      //werkt nog niet in Netscape
 
    }
  } else {
    alert( 'hideInputControls: pContainer niet gevonden!')
  }
}

function getInnerHTML(node) {
	var str = "";
	for (var i=0; i<node.childNodes.length; i++)
		str += getOuterHTML(node.childNodes.item(i));
	return str;
}

function setLayerHTML(layer, pHTML) {
  //alert( 'setLayerHTML: ' + layer + ' ' + pHTML)
  //alert('setInnerHTML Geen ownerDocument, dus we hebben een Netscape Layer')
  //document kan nog open zijn bij een init van een pagina. Moet nog afgevangen!

//  alert( 'setLayerHTML: ' + layer + ' ' +  layer.name)
//layer.document.open()

  if (layer) {
    if (layer.document) {
      layer.document.write( '<div class=plattetekst>' + pHTML + '</div>')
      layer.document.close()
    } else {
      alert( 'setLayerHTML: Er is geen layer meegegeven, maar een element!')
    }
  } else {
    alert( 'setLayerHTML: layer niet gevonden!')
  }  
  

/*
  if (layer.document.open) {
    var lRes = false
    lRes = layer.document.open()
    if (!lRes) {
      alert( 'setLayerHTML: fout bij openen!')
    }
  } else {
    alert( 'geen open')
  }

  if (layer.document.write) {
    layer.document.write( pHTML)
  } else {
    alert( 'geen write')
  }

  if (layer.document.close) {
    layer.document.close()
  } else {
    alert( 'geen close')
  }
*/

  //alert('setInnerHTML klaar')
}

function setInnerHTML(node, pHTML) {
  if (node.innerHTML) {
    node.innerHTML = pHTML
  } else {
    //alert( pHTML)
    node.text = pHTML
    var r = node.ownerDocument.createRange();
    r.selectNodeContents(node);
    r.deleteContents();
    var df = r.createContextualFragment(pHTML);
    node.appendChild(df);
  }
	return pHTML;
}

function setInnerOrLayerHTML(node, pHTML) {
  if (node.innerHTML || node.ownerDocument) {
    setInnerHTML( node, pHTML)
  } else {
    //alert( 'LayerHTML ' + pHTML)
    setLayerHTML( node, pHTML)
  }
}

function getTagOrLayerText( node) {
  if (node.innerText) {
    return node.innerText
  } else {
    return node.document.toString()
  }
}

function getOuterHTML(node) {
	var str = "";
  if (node.outerHTML) {
    str = node.outerHTML
  } else {
	  switch (node.nodeType) {
	  	case 1: // ELEMENT_NODE
	  		str += "<" + node.nodeName;
	  		for (var i=0; i<node.attributes.length; i++) {
	  			if (node.attributes.item(i).nodeValue != null) {
	  				str += " "
	  				str += node.attributes.item(i).nodeName;
	  				str += "=\"";
	  				str += node.attributes.item(i).nodeValue;
	  				str += "\"";
	  			}
	  		}

	  		if (node.childNodes.length == 0 && leafElems[node.nodeName])
	  			str += ">";
	  		else {
	  			str += ">";
	  			str += getInnerHTML(node);
	  			str += "<" + node.nodeName + ">"
	  		}
	  		break;

	  	case 3:	//TEXT_NODE
	  		str += node.nodeValue;
	  		break;

	  	case 4: // CDATA_SECTION_NODE
	  		str += "<![CDATA[" + node.nodeValue + "]]>";
	  		break;

	  	case 5: // ENTITY_REFERENCE_NODE
	  		str += "&" + node.nodeName + ";"
	  		break;

	  	case 8: // COMMENT_NODE
	  		str += "<!--" + node.nodeValue + "-->"
	  		break;
	  }
  }
	return str;
}
//bij getOuterHTML
  var _leafElems = ["IMG", "HR", "BR", "INPUT"];
  var leafElems = {};
  for (var i=0; i<_leafElems.length; i++)
  	leafElems[_leafElems[i]] = true;
//einde getOuterHTML
  	
function setOuterHTML(node, pHTML) {
	var r = node.ownerDocument.createRange();
	r.setStartBefore(node);
	var df = r.createContextualFragment(pHTML);
	node.parentNode.replaceChild(df, node);
	return pHTML;
}

function ElementNameNS( pName) {
  return (document.layers) ? 'NS' + pName : pName   
}

function writeNSDynElementOrIEDiv( pName, pText) {
//Voor NS4 een layer aanmaken voor de tekst, en een anchor voor de positie
  var lText = ''
  if (pText != '') {
    lText = pText
  } else {
    lText = '&nbsp;'
  }
  if (document.all) {
	  // IE 
    document.write( '<div id=' + pName + '>' + lText + '</div>'); 
  } else {
	  // NS
    document.write( '<layer ID="NS' + pName + '" position="absolute">' + lText + '</layer>'); 
    //In de positie een paar spaties, voor als rechts uitgelijnd is
    //kan lengte hebben van pText?
    document.write( '<a name="NS' + pName + 'Pos">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>'); 
  }
}

function bindNSPositions( pName) {
//in NS4 de layer op de plaats van de position-anchor zetten
//Geeft de Control terug
  if (!document.all) {
    lControl = findControlOrLayer( document, ElementNameNS( pName))
    if (lControl) {
      lControl.left = document.anchors[ ElementNameNS( pName) + 'Pos'].x
      lControl.top = document.anchors[ ElementNameNS( pName) + 'Pos'].y
      return lControl
    }
  }
}


