Without doubt the language you are looking for is Haskell. Haskell is static typed, is a pure functional language (it supports impure/imperative code through monads), it uses lazy evaluation by default and has data immutability.
Some useful observations: not all functional programming languages are equal and there is no consensual definition of what is exactly a FP language. Here some examples:
Haskell uses lazy evaluation by default (equivalent to python generators) / has static typing.
Scala uses eager evaluation, has OO support and has support to imperative features like for loops.
OCaml and F#(F sharp) also uses eager evaluation and has OO support and imperative features.
Scheme uses eager evaluation, it is a MIT FP lisp dialect. It has dynamic typing, allows higher order functions. However doens't have algebraic data types, curring and pattern matching.
I think the most import thing in Functional Programming is learn the "Functional Programming style" and apply it to whatever language supports it.
The most important things of FP independent of the language used is:
Not all FP languages are has all features listed below like Javascript or Scheme.
Another interesting code is: http://underscorejs.org/ that is a functional programming library for Javascript that has many useful FP idioms and also some FP idioms that can be useful with OO.
I am writing a tutorial Functional Programming by examples Haskell, available at: FP by examples in Haskell