if (clk'event and clk='1') then
if (InitDone = '0') then
-- Enabling
LCD_E <='1';
-- Clear Screen
LCD_RS<='0';
LCD_RW<='0';
LCD_DB(7 downto 1) <= "0000000";
LCD_DB(0) <= '1';
etc etc etc.....
One problem: You're missing a state machine in this first part. Check out Case statements and how they work with state machines. What will happen in the code you wrote is that LCD_RD, LCD_RW, etc will just be replaced with the LAST line of code that you have in that if statement. Everything prior to that will be unused.
Another problem: InitDone never gets set to '1'. Ever.
Yet another problem:
for i in 0 to 8 loop
if tempcounter > 9 then
tempcounter := tempcounter - 10;
end if;
end loop;
This for loop doesn't behave the way you think it does. You need to read about for loops in synthesizable code. They do not behave like C for loops.