<?xml version="1.0"?>
<!-- $Id$ -->
<!DOCTYPE script PUBLIC
	"-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
	"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
<script>
<!-- 

input symbols:

uniqueId - uniqueId used to build names
focusImageURL - URL for focus (mouse over)
blurImageURL - URL for blur image (mouse out)

output symbols:

imageName - name for the image (i.e. name attribute of <img> element)
onMouseOverName - name of mouse over function
onMouseOutName - name of mouse out function

-->

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


<let key="onMouseOverName">
	focus_${imageName}
</let>
<let key="onMouseOutName">
	blur_${imageName}
</let>

<let key="attribute">
	document.${imageName}.src
</let>

<body>

function ${onMouseOverName}()
{
  if (document.images)
    ${attribute} = ${focusImageURL};
}

function ${onMouseOutName}()
{
  if (document.images)
    ${attribute} = ${blurImageURL};
}

</body>
</script>
