<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!--************************************************************************-->
<!--* FireFox JavaScript Browser Object Dump                               *-->
<!--*                                                                      *-->
<!--* Copyright 2007 IBM                                                   *-->
<!--* Bradley Childs (childsb@us.ibm.com)                                  *-->
<!--************************************************************************-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>FireFox JavaScript Object Browser Dump</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<script type="text/javascript">
// Netscape 6 (or Mozilla)?

var isNS6 = (navigator.userAgent.indexOf("Gecko") > 0) ? 1 : 0;

// Arrays for tracking objects/methods.

var objectList = new Array();
var objTypeArrays = new Array();
var rootElements = new Array();
var nameArray = new Array();

function addRootDisplayElement(theObject,objName){
	var valueString;
	if(objName=="") objName="this";
	
	valueString = objName + ".prototype = new " +  getObjectName(theObject) + "();";
	rootElements[rootElements.length] = valueString;
}

function shouldExclude(nameOfElement){
	/* allows filtered values and exclude elements that are coming from this script */
	var excluded = ["shouldExclude",
	                "addRootDisplayElement",
					"buildClasses",
					"getObjectName",
					"objectList",
					"objTypeArrays",
					"rootElements",
					"nameArray",
					"isNS6",
					"getObjectSuperType",
					"isKnownObject",
					"generateHTMLObjectTable",
					"addElementToObject",
					"addToObjects",
					"getAllProperties",
					"isArray",
					"isObject",
					"findProperties",
					"DOMViewerObj",
					"DOMViewerName"];
	var k;
	for(k=0;k<excluded.length;k++){
		if(nameOfElement==excluded[k]) return true;
	}
	return false;
}

function buildClasses(){
	var ea = new Array();
	var k,j,t;
	for(k=0;k<objectList.length;k++){
	  var elementArray;
	  var classObjectName;
	  try{
	  	classObjectName = objectList[k];
	  }catch(exception){}
	  
	  if(shouldExclude(classObjectName)) continue;
	  var superName = (isArray(classObjectName))?"new Array();":"new Object();";
	  ea[ea.length] = classObjectName + ".prototype= " + superName;
	  ea[ea.length] = "function " + classObjectName + "(){};"
	 
	  elementArray = objTypeArrays[k];
	  
	  if(!isArray(elementArray)) continue;
	  for(j=0;j<elementArray.length;j++){
	  	try{
			value = elementArray[j];
	  	}catch(exception){
			value = name;
		}
		name = nameArray[k][j];
		if(shouldExclude(name)) continue;
		
			if(value==null) continue;
		
			if(isObject(value)){
		
				try{
					var superType = getObjectSuperType(value);
					ea[ea.length] = classObjectName + ".prototype." + name + "= new " + superType + "();";
			 	}catch(exception){
					continue;
		 			//ea[ea.length] = classObjectName + "." + name + ".prototype=new " + name + "();";
		 		}	
			}else if(value instanceof Function){
				var argString = "";	
				for(t=0;t<value.length;t++){
					argString += "arg" + (t+1) + ((t+1)<value.length?",":"");
				}
				
				ea[ea.length] = classObjectName + ".prototype." + name + "=function("+argString+"){};";
			}else if(typeof value=="string"){
				ea[ea.length] = classObjectName + ".prototype." + name + "=\"\";";
		  	}else if(typeof value =="boolean"){
				ea[ea.length] = classObjectName + ".prototype." + name + "=false;";
			}else if(typeof value =="number"){
				ea[ea.length] = classObjectName + ".prototype." + name + "=0;";
			}
		
	  }
	 
	}
	return ea;
}

function getObjectName(sibObject){
	
	var start,end,parentString;
	
	var objString = String(sibObject);
	
	if(objString!=null){
		start = (objString.indexOf("object") + 6);
		end = objString.indexOf("]");
		if(start<end){
			parentString = objString.substring(start,end);
		}else{
			start = objString.indexOf("[");
			end = objString.indexOf("]");
			if(start<end){
				parentString = objString.subString(start,end);
			}else{
				parentString = objString;
			}
		}	
	}
	
	return parentString;
}

function getObjectSuperType(sibObject){
	
	var parentString;
	parentString = getObjectName(sibObject);
	if(isArray(sibObject)){
		var array=true;
	}
	var constr;
	
	if(!(parentString=="Object") && isKnownObject(parentString)){
		return parentString;
	} else if(isArray(sibObject)){
		return "Array";	
	}
	
	return parentString;
}

function isKnownObject(objValue){
	if(objValue==null) return false;
	var k;
	for(k=0;k<objectList.length;k++){
	  try{
	  if(String(objectList[k])==objValue){
		return true;
	   }
	   }catch(Exception){}
	}
	return false;
}

function generateHTMLObjectTable(DOMViewerObj, DOMViewerName){
  
  findProperties(DOMViewerObj, null, DOMViewerName);
  var s = '<table>';
  var i;
  
  
  for(i = 0; i < rootElements.length; i++){
  	s+= "<tr><td>" + new String(rootElements[i]) + "</td></tr>";
  }
  s+="<tr><td><br><br></tr></td>"
  
  newElms = buildClasses();
  
  for(i = 0; i < newElms.length; i++){
  	s+= "<tr><td>" + new String(newElms[i]) + "</td></tr>";
  }
  return s + "</table>"
}

function addElementToObject(classObject,functionObject,name){
	var value,k;
	var index=-1;
	if(isObject(classObject)){
		value = getObjectName(classObject);
	}else{
		value=classObject;
	}
	for(k=0;k<objectList.length;k++){
	  if(objectList[k]==value){
		index=k;
		break;
	   }
	}
	
	if(index==-1) return false;
	
	if(objTypeArrays[index]==null){
		objTypeArrays[index] = new Array();
	}
	
	if(nameArray[index]==null) nameArray[index] = new Array();
		
	for(k=0;k<nameArray[index].length;k++){
		try{
			if(nameArray[index][k]==name) return; // nothing to do
		}catch(exception){
			// not found
		}
	}
	
		
	objTypeArrays[index][objTypeArrays[index].length] = (functionObject==null?(new String()):functionObject);
	
	
	
	nameArray[index][objTypeArrays[index].length-1] = name;
}

function addToObjects(newObject){
	var value,k;
	if(newObject==null) return false;
	value = getObjectName(newObject);
	for(k=0;k<objectList.length;k++){
		if(objectList[k]==value){
			return false;
		}	
	}

	objectList[objectList.length] = value;
	return true;
}


function getAllProperties(object){
  var propertyList = new Array();
  try{
  for (property in object)
    propertyList[propertyList.length] = property;
  }catch(exception){}
  return propertyList;
}

function isArray(valueObject){
	var isArray = false;
	try{
		isArray = (valueObject!=null && valueObject.length>0);
	}catch(exception){ isArray = false;	}
	return isArray;
}

function isObject(elem){
	return ((elem!=null) && (elem instanceof Object) && !(elem instanceof Function));
}

function findProperties(obj, parent, name) {
 
  var allProperties,i;
  
  if (  isObject(obj) && ! isArray(obj)  ){
  	if(parent==null){
		addToObjects(obj);
		addRootDisplayElement(obj,name);
		
	}
	allProperties = getAllProperties(obj);
  }else{
  	return;
  }
   
  for (i = 0; i <  allProperties.length  ; i++) {
 	if(allProperties[i]=="constructor") continue;
	if(i==72){
		// do something
		var k = 10;
	}
	var objValue;
	
	try{
		objValue = obj[allProperties[i]];	
	}catch(exception){
		objValue = null;
		addElementToObject(obj,allProperties[i],String(allProperties[i]));
		continue;
	}
	try{
 	if( isObject(objValue) && (! isArray(objValue)) && addToObjects(objValue)){
		addElementToObject(obj,obj[allProperties[i]],String(allProperties[i]));
		findProperties(obj[allProperties[i]], (parent==null?"":parent+ ".")  + name,  String(allProperties[i]));
	}else if( objValue instanceof Object  ){
		addElementToObject(obj,objValue,String(allProperties[i]));
	}else{
		var isUndefPrim = (objValue==null || objValue=="" );
		 addElementToObject(obj,(isUndefPrim?allProperties[i]:objValue),String(allProperties[i]));
		
	}
	}catch(exception){
	
 
		var k =10;
	}
  }
 
}
</script>
</head>
<body>

<h3>Browsers JavaScript Elements:</h3>

<script type="text/javascript">

// Show properties for the specified object in the opening window. Default to
// the document if no object is specified.

var DOMViewerObj  = this;
var DOMViewerName = "";

if (!DOMViewerObj) {
  DOMViewerObj = window.opener.document;
  DOMViewerName = "document";
}

document.writeln(generateHTMLObjectTable(DOMViewerObj, DOMViewerName));

</script>

</body>
</html>