I don't think your code does what you wanted it to do.
Remember that all the lines in the "if (clk'event and clk= '1')" will be executed within the same clock cycle. So basically, at each clock cycle the 906 elements of your array are all filled with the same value: the input vector at the rising edge.
output<=element(n);
This line is also executed 906 times, so the first 905 ones will be ignored and output will simply be fed with the value element(905), which is the value of input on the previous rising edge. You created a two cycle delay, and Quartus will optimize it by removing the first 905 of your array, which are useless.
detection <= '1'; --significant bit detection
detection is never set to 0 anywhere in your code. It will start at an undefined value at power up (I'm not sure Quartus will set it to 0, but it doesn't need to do this to be compliant with the VHDL specification) and once set to 1 it will never change back. If Quartus is smart enough it may decide to optimize you code by just setting detection at a fixed value of 1 (but I haven't tested this).
--- Quote Start ---
one additional query: can we call a process using label from other process like function if we have multiple processes??
--- Quote End ---
you can't "call" a process, a process is a piece of hardware that is always there. You can use functions and procedures, but even there when you use them it isn't a "call" as you understand it in software, it is an instantiation. Each "call" will generate a new piece of hardware.
As other replies suggested, you should start with a book about logic design and VHDL. Some people gave some good references on this forum, a search will probably help.