[1] The difference between the lazy terminology and the normal-order terminology is somewhat fuzzy. Generally, lazy refers to the mechanisms of particular evaluators, while normal-order refers to the semantics of languages, independent of any particular evaluation strategy. But this is not a hard-and-fast distinction, and the two terminologies are often used interchangeably.
[2] The strict versus non-strict terminology means essentially the same as applicative-order versus normal-order, except that it refers to individual procedures functions and arguments rather than to the language as a whole. At a conference on programming languages you might hear someone say, The normal-order language Hassle has certain strict primitives. Other procedures functions take their arguments by lazy evaluation.
4.2.1   Normal Order and Applicative Order