function sellFormValidate()
{
	/**
	 * Collect form values
	 */

	// personal information
    var firstName      = document.getElementById( 'first-name' ).value;
    var lastName       = document.getElementById( 'last-name' ).value;
    var middleInitial  = document.getElementById( 'middle-initial' ).value;
    var streetAddress1 = document.getElementById( 'street-address-1' ).value;
    var streetAddress2 = document.getElementById( 'street-address-2' ).value;
    var city           = document.getElementById( 'city' ).value;
    var state          = document.getElementById( 'state' ).options[document.getElementById( 'state' ).selectedIndex].value;
    var zipCode        = document.getElementById( 'zip-code' ).value;
    var postalCode     = document.getElementById( 'postal-code' ).value;
    var country        = document.getElementById( 'country' ).options[document.getElementById( 'country' ).selectedIndex].value;
    var email          = document.getElementById( 'email-address' ).value;
    var emailConfirm   = document.getElementById( 'email-address-confirm' ).value;
	// submission information
    var fileName       = document.getElementById( 'spreadsheet-file-name' ).value;
    var description    = document.getElementById( 'spreadsheet-description' ).value;
    var category       = document.getElementById( 'preferred-category' ).value;
    var salesPrice     = document.getElementById( 'sales-price' ).value;
    var anythingElse   = document.getElementById( 'anything-else' ).value;
	var agree          = document.getElementById( 'agree-yes' ).checked ? true : false;
	// payment information
	var payWithPaypal  = document.getElementById( 'payment-method-pp' ).checked ? true : false;
	var payWithCheck   = document.getElementById( 'payment-method-mmc' ).checked ? true : false;
	var paymentMethod  = ( payWithPaypal ) ? 'paypal' : 'check'; // paypal, check
    var paypalEmail    = document.getElementById( 'paypal-email-address' ).value;
	// macro information
	var macrosYes      = document.getElementById( 'contains-macros-yes' ).checked ? true : false;
	var macrosNo       = document.getElementById( 'contains-macros-no' ).checked ? true : false;
	var macrosUnsure   = document.getElementById( 'contains-macros-dk' ).checked ? true : false;
	var containsMacros = ( macrosYes ) ? 'yes' : ( ( macrosNo ) ? 'no' : 'unsure' ); // yes, no, unsure

	/**
	 * Email regex
	 */
	var emailFilter = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;

	/**
	 * Prepare error list
	 */
	var errorArr = new Array();

	/**
	 * Check values
	 */
	if ( firstName == '' )
    	errorArr.push( 'first name' );
	if ( lastName == '' )
    	errorArr.push( 'last name' );
	if ( streetAddress1 == '' && streetAddress2 == '' )
    	errorArr.push( 'street address' );
	if ( city == '' )
    	errorArr.push( 'city' );
	if ( state == '' )
    	errorArr.push( 'state' );
	if ( zipCode == '' && postalCode == '' )
    	errorArr.push( 'zip or postal code' );
	if ( country == '' )
    	errorArr.push( 'country' );
	if ( email != emailConfirm || ( email == emailConfirm && !emailFilter.test( email ) ) )
    	errorArr.push( 'email address' );
	if ( fileName == '' )
    	errorArr.push( 'attachment' );
	if ( description.length > 1000 )
    	errorArr.push( 'limit description to 1,000 characters' );
	if ( category.length > 100 )
    	errorArr.push( 'limit category/keywords to 100 characters' );
	if ( salesPrice == '' )
    	errorArr.push( 'sales price' );
	if ( payWithPaypal && !emailFilter.test( paypalEmail ) )
    	errorArr.push( 'Paypal email' );
	if ( !agree )
    	errorArr.push( 'agree to terms' );

	/**
	 * Any errors? Display them
	 */
	var errorNum = errorArr.length;
	if ( errorNum > 0 )
	{
		var showAlert = 'We encountered ' + errorNum + ' error' +  ( errorNum == 1 ? '' : 's' ) + ':';
		for ( i = 0; i < errorNum; i++ )
			showAlert += '\n' + ( i + 1 ) + ': ' + errorArr[i];
		alert( showAlert );
		return false;
	}

	/**
	 * Everything's fine at this point
	 */
	return true;
}