En el unico lugar donde se te puede quedar loopeado es en el while de la funcion subareas; intenta esto:
Código PHP:
function subareas($cat)
{
$sql = "SELECT id,nombre FROM Categorias WHERE area = '$cat';";
$cad = mysql_query($sql) or die ('ERROR 7:'.mysql_error());
$aux['error'] = false;
if(mysql_num_rows($cad) == 0)
{
$aux['error'] = true;
}
if ($array = mysql_fetch_array($cad))
{
do{
$aux[] = $array['id'];
}while($array = mysql_fetch_array($cad));
}
return $aux;
}