Receba a primeira ou a última sexta-feira de um mês

Estou tentando escrever uma função de calendário como esta

function get_date($month, $year, $week, $day, $direction)
{
    ....
}

$week é um número inteiro (1, 2, 3 ...), $ day é um dia (dom, seg, ...) ou número, o que for mais fácil. A direção é um pouco confusa, porque faz um cálculo diferent

Por exemplo, vamos chamar

get_date(5, 2009, 1, 'Sun', 'forward');

Usa o padrão e obtém o primeiro domingo de maio, ou seja, 03/05/2009. Se chamarmos

get_date(5, 2009, 2, 'Sun', 'backward');

, retorna o segundo domingo passado em maio, ou seja, 24/05/2009.