/*
Programmer:  Michael Thomas
Email.....:  michael@michael-thomas.com
Orig Date.:  08/27/00
Modified..:  08/27/00

*/

//--------------------------------------------------------------------
function fShowProperties(strMsg, objShow, blnShowChildObjs) {
//--------------------------------------------------------------------
  var aobjShowList = new Array();
  var x            = 0

  winMsg = window.open("","winMsg");

  fShowHtmlHead(winMsg, strMsg); 
  
  
  fShowDetail(winMsg, strMsg, objShow)

  if ( blnShowChildObjs ) {
  
    fBuildChildList(winMsg, strMsg, objShow);  //zzz Under development.

  }
  


  fShowHtmlFoot(winMsg);
  
  winMsg.document.close();
  winMsg.focus();

}
//--------------------------------------------------------------------
function fBuildChildList(winMsg, strMsg, objShow){
//--------------------------------------------------------------------	
  
    for (var i in objShow) {

      if ( typeof(objShow[i]) == "object" && 
           typeof(objShow[i]) != "unknown" &&
           objShow[i] != null && 
           objShow[i] != undefined &&          
           objShow[i] != objShow &&
           i != "external" &&   //IE dies for some reason.
           i != "_parent" && 
           i != "_obj" &&
           i != "_elem" &&
           true                 //This allows easy addition of &&'s
          ) {
      
        window.status = "Building: " + strMsg+"."+i;
        fShowDetail(winMsg, strMsg+"."+i, objShow[i])
        fBuildChildList(winMsg, strMsg+"."+i, objShow[i])  //Recursive not working right for some reason.
      }
    }
  
}

//--------------------------------------------------------------------
function fShowHtmlHead(winMsg, strMsg) {
//--------------------------------------------------------------------  
  winMsg.document.writeln("<html>");
  winMsg.document.writeln("<title>Properties for object: " + strMsg + "</title>");
  winMsg.document.writeln("<body>");
}
//--------------------------------------------------------------------
function fShowHtmlFoot(winMsg) {
//--------------------------------------------------------------------  
  winMsg.document.writeln("</html>");
  winMsg.document.writeln("</body>");
  winMsg.document.close();  
}
//--------------------------------------------------------------------  
function fShowDetail(winMsg, strMsg, objShow) {
//--------------------------------------------------------------------
  var strDetail;
  var intRowNum = 0;  
  
  winMsg.document.writeln("<p><strong>" + "Properties for object: " + strMsg + "</strong></p>");

  winMsg.document.writeln("<table border='1' >");
  winMsg.document.writeln("<tr><td>Row#</td><td>Object</td><td>typeof()</td><td>value</td></tr>")
  
  for (var i in objShow) {
  
    intRowNum++;
    
    strDetail = "";
   
    strDetail += "<tr>";    
  
    strDetail += "<td>" + intRowNum          + "</td>";  
    strDetail += "<td>" + i                  + "</td>";
    strDetail += "<td>" + typeof(objShow[i]) + "</td>";
    
    strDetail += "<td>";
    
    if (typeof(objShow[i]) == "unknown") {
      strDetail += "unknown" + " ";
    } else {
      strDetail += " " + objShow[i] + " ";      
    }
    strDetail += "</td>";
    
    strDetail += "</tr>";            
    
    winMsg.document.writeln( strDetail );
    
  }
  winMsg.document.writeln("</table>");
}
//------------------------------------------------------------------------
function fSubmitForm ( frmObject ) {
//------------------------------------------------------------------------

  var strObjName = "";
  var blnShowLevels = false;

  if (  ! frmObject ) {
    alert( "Invalid object!" );
  } else if ( ! frmObject.objname ) {
    alert( "Form does not have 'objname' property" );
  } else if ( ! frmObject.showlevel ) {
    alert( "Form does not have 'showlevel' property" );  
  } else {
  
    blnShowLevels = frmObject.showlevel.checked;
    if ( frmObject.objname.type == "text" ) {
      strObjName = frmObject.objname.value;
    } else if ( frmObject.objname.type == "select-one" ) {
      strObjName = frmObject.objname[frmObject.objname.selectedIndex].value; 
    } else {
      alert("See programmer:  this form	type is not valid." );
    }
    
    if ( strObjName == "" ) {
    alert("Please enter an object name.");    
    } else if ( ! eval(frmObject.objname.value) )	{  
      //If the parent object is valid, then this code works.  ie: document.test
      //You get an error if you use 'test'.
      alert(frmObject.objname.value + " - not a valid object!" )
    } else if ( typeof eval(frmObject.objname.value) != "object" ) {
      alert( frmObject.objname.value + " - not an object.  Maybe a propertiy of an object." + "\n" +
             frmObject.objname.value + "=" + eval(frmObject.objname.value) + "\n" +
             "typeof="+ (typeof eval(frmObject.objname.value))  );
    } else {
      fShowProperties(strObjName, eval(strObjName), blnShowLevels);
    }

  }
    
}
//------------------------------------------------------------------------
function fDebugForm(strFrmName) {
//------------------------------------------------------------------------

  var strHtml = "";
  
  strHtml += '<b>Debugging Tool:  Show properites for object listed below.</b><br>' + '\n'
  strHtml += '<form method=\"post\" onSubmit = "return true;" action=\"javascript: fSubmitForm(this.document.' + strFrmName + ');\" name=\"'+ strFrmName + '\">' + '\n';
  strHtml += '<input type=\"text\" name=\"objname\" value=\"window\" size=\"70\">' + '\n';
  strHtml += '<br>' + '\n';
  strHtml += '<input type=\"checkbox\" name=\"showlevel\" value=\"checkbox\">' + '\n';
  strHtml += 'Show all children.  Will sometimes hang!<br>' + '\n';
  strHtml += '<input type=\"submit\" name=\"Submit\" value=\"Show Debug Info\">' + '\n';
  strHtml += '</form>' + '\n';
      
return strHtml

}