you can do part of this with the PayPal eCommerce Toolkit.
the donate buttons in the eCommerce toolkit are forms with hidden form elements.
You can change the type of the amount hidden form element from hidden to text.
As for the customer adding text, you can create optional form elements:
<input type="hidden" name="on0" value="description">
<input type="text" name="os0">
however paypal limits the optional fields to 64 characters.
for the pull down menu, you would use another optional form element:
<input type="hidden" name="on1" value="cause">
<select name="os1">
<option value="cause 1">Cause 1</option>
<option value="cause 2">Cause 2</option>
<option value="cause 3">Cause 3</option>
<option value="cause 4">Cause 4</option>
</select>