Selecting between a range of dates, controlling for age at those dates
===

I am trying to search a record that is structured like this 

    trans_Date, customer_age, etc

Where customer age is the age at the time of the transaction.  What I need to do is to select all customers who are currently a certain age, who had a transaction between a date range.

Lets say I only wanted current 20 year olds who purchased when between 2005 and 2010

I came up with this

    select * from trans_logs 
    where trans_date between TO_DATE("07/13/2005:00:00","DD/MM/YYYY:HH24:MI')
    and customer_age between 13 and 18

I get some correct results, but I also get people who transacted in 2005 at 18 (making them 25 now)


    and((customer_age=13 and trans_date BETWEEN TO_DATE('01-JAN-2005:00:00'.'DD-MON-YYYY:HH24:MI') and TO_DATE('31-DEC-2005:23:59','DD-MON-YYYY:HH24:MI'))
    or (customer_age=14 and trans_date BETWEEN TO_DATE('01-JAN-2006:00:00'.'DD-MON-YYYY:HH24:MI') and TO_DATE('31-DEC-2006:23:59','DD-MON-YYYY:HH24:MI'))
    or (customer_age=15 and trans_date BETWEEN TO_DATE('01-JAN-2007:00:00'.'DD-MON-YYYY:HH24:MI') and TO_DATE('31-DEC-2007:23:59','DD-MON-YYYY:HH24:MI'))
    or (customer_age=16 and trans_date BETWEEN TO_DATE('01-JAN-2008:00:00'.'DD-MON-YYYY:HH24:MI') and TO_DATE('31-DEC-2008:23:59','DD-MON-YYYY:HH24:MI'))
    or (customer_age=17 and trans_date BETWEEN TO_DATE('01-JAN-2009:00:00'.'DD-MON-YYYY:HH24:MI') and TO_DATE('31-DEC-2009:23:59','DD-MON-YYYY:HH24:MI'))
    or (customer_age=18 and trans_date BETWEEN TO_DATE('01-JAN-2010:00:00'.'DD-MON-YYYY:HH24:MI') and TO_DATE('31-DEC-2010:23:59','DD-MON-YYYY:HH24:MI')) )

But that returns an error saying I am missing a right paren. 
1. What am I missing? and 2. Is there a more efficient way to do this?