replace delay()

Ah, the delights of shrinking programs!

The first question is: why do you need to fit it on an atmega8? Using an atmega16 instead will save you the bother of shrinking the code and leave you room for expansion.

If you really do want to shrink that code, there are plenty of ways you can do it. For example, you can rewrite Pattern13, making use of the similarity between cases:

void Pattern13()  //leds go around
{
  static int interval = 70;
  static unsigned long lastmillis = 0;
  static int state;
  static boolean onoff;
  static int count = 0;

  if (firstRun){  //initialize leds and states only once
    onoff = LOW;
    for (int i=0; i< 10; i++) digitalWrite(Leds[i], LOW);
    digitalWrite(Leds[4], HIGH);
    digitalWrite(Leds[5], HIGH);
    count = 0;
  }
  else{
    if (millis() - lastmillis >= interval){  //switch case if interval has passed

      switch (state){
      case 0:  //blink first leds twice
      case 1:
      case 2:
      case 3:
        onoff = !onoff;
        digitalWrite(Leds[state], onoff);
        break;
      case 4:  //blink last leds twice
      case 5:
      case 6:
      case 7:
        onoff = !onoff;
        digitalWrite(Leds[13 - state], onoff);
        break;
      }
      count++;
      if (count >= 2){  //if programm has passed 2 times (on, off) go to the sixth part
        state = (state + 1) & 7;
        count = 0;
      }
      lastmillis = millis();
    }
  }
}

PS - if you factor out the lastmillis check/update code you can get it down to 7400 bytes or less.