This probably won't answer your question completely, but here are some notes from me:
buttonState = current ; //read value again now that bouncing is over
This won't read the value again, it just copies current into buttonValue.
What you wanted is:
buttonState = digitalRead(BUTTON); // read value again now that bouncing is over
You have multiple issues with your debounce call:
lastTimeDebounce is never used by your code, so it is always zero.
lastButtonState will be always buttonVal making the debounce function useless.
Some other tips:
Don't use the same names for parameters as for global variables:
boolean debounce(boolean lastButton, long lastDebounce, int BUTTON)
The global variable BUTTON will be shadowed by int BUTTON, essentially overriding it.
Don't use global variables (unless you have a very good reason)
EDIT
I would strongly recommend writing a function that debounces only one pin.
Because if you want a function which can debounce any pin you would need a state variable for each pin (which needs arrays hence a lot of space).