<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id$ -->
<!DOCTYPE script PUBLIC 
	"-//Howard Lewis Ship//Tapestry Script 1.2//EN"
	"http://tapestry.sf.net/dtd/Script_1_2.dtd">
<!--

Adds scripting support for the ShowInspector component.

Prefixes all variables and functions with "ti_" (for Tapestry Inspector).

Expects that the Inspector is inside a <div> named "tapestryInspector".

Input symbols:
 URL - The complete URL needed for to raise the Inspector
 
-->
<script>

<include-script resource-path="/org/apache/tapestry/html/PracticalBrowserSniffer.js"/>

<input-symbol key="URL" class="java.lang.String" required="yes"/>

<body>
var ti = new Object();

ti.oldX = 0;
ti.oldY = 0;

function ti_positionInspector()
{
  var object;
  var width;
  var height;

  if (navigator.family == "nn4")
  {
    object = document.tapestryInspector;
    width = innerWidth + pageXOffset;  <!-- Doesn't properly account for scrollbars! -->
    height = innerHeight + pageYOffset;
  }
  else
  {
    object = document.getElementById("tapestryInspector");
    
	if (navigator.OS == "mac")
	{
	  width = document.body.offsetWidth;
	  height = document.body.offsetWidth;
	}
	else if (navigator.family == "gecko")
	{
      width = innerWidth + pageXOffset; 
      height = innerHeight + pageYOffset;
	}
	else
	{
	  // IE 5, 6? on PC
	  width = document.body.clientWidth  + document.body.scrollLeft;
	  height = document.body.clientHeight + document.body.scrollTop;
	}
  }
   	
  // The width/height of the animation, plus
  // a couple of pixels of border.
  
  var indent = 65;
  
  var x = width - indent;
  var y = height - indent;

  if (navigator.family == "nn4")
  {
    if (x != ti.oldX || y != ti.oldY)
    {
      object.moveTo(x, y);
      object.visibility = "visible";
    }
  }
  else
  {
    if (x != ti.oldX)
    {
       object.style.left = x + "px";
       ti.oldX = x;
    }
    if (y != ti.oldY)
    {
    	object.style.top = y + "px";
    	ti.oldY = y;
    }

 	object.style.visibility = "visible";  
  }


    
  // Reposition it every quarter second.
  
  window.setTimeout("ti_positionInspector()", 250);
}

function ti_raiseInspector()
{
  var newWindow = window.open(
  	"${URL}",
  	"TapestryInspector",
  	"titlebar,resizable,scrollbars,width=700,height=600");
  	
  newWindow.focus();
}
</body>

<initialization>
ti_positionInspector();
</initialization>

</script>
