Nothing major is wrong, except that half of it is missing. With a few additional minor corrections, I'd suggest something like:
Options +FollowSymlinks
RewriteEngine on
RewriteBase /
#
# Externally redirect http secure-page requests to https
RewriteCond %{SERVER_PORT} !=443
RewriteRule ^contact\.php$ https://www.domain.ca/contact.php [R=301,L]
#
# Externally redirect https requests for all non-secure
# objects to http, except for shared included objects
RewriteCond %{SERVER_PORT} =443
RewriteCond $1 !(^contact\.php|\.(gif|jpe?g|png|ico|css|js))$
RewriteRule ^(.*)$ http://www.domain.ca/$1 [R=301,L]
This code redirects http requests for "contact/php" to https.
It also redirects https requests for anything *except* contact.php back to http, unless the request is for a "shared object" such as an image, a favicon, a css stylesheet, or an external JavaScript file -- any included objects which will be shared between secure and non-secure pages.
You may need to modify this list of excluded objects, but the purpose is to avoid "Mixed secure/insecure object" warnings in the browser by *not* redirecting objects included using page- or server-relative links on your pages. Only object-types loaded by and shared between http and https need to be listed. You may make the exclusion list as specific as you like, and specify only the exact URL-paths to be shared, but of course doing so may increase future maintenance of the rule.
You may wish to do this exclusion by filetype (as I show here), or based on directory-paths or some other criteria that is "visible" in the requested URL.
Jim