I use css and javascript for this.
Head tag:
<style>
.HideText {
display: none;
}
.ShowText {
display: block;
}
</style>
<script type="text/javascript">
function changeDisplay(id) {
var div = document.getElementById(id);
if(div.className=='HideText'){
div.className='ShowText';
}else{
div.className='HideText';
}
return(false);
}
</script>
Down in the body where you want the expand and collapse effect:
<div id="content1" class="HideText">
expandable content
</div>
<a href="#" onClick="return(changeDisplay('content1'))">toggle view</a>
Here's an example from one of my site projects: http://www.groupspotter.com/
Just click on the "Search for Groups" link and you'll see how it works. The only thing you'll have left to do is an image swap between a "+" and a "-". But you could tie that into the javascript in your head tag.