基本がなってない。
JavaScriptのオブジェクトモデルはいい加減とは言わないが良い意味で言えば柔軟性を持っているので、
オブジェクトの存在しないプロパティを定義して有効にできてしまう。

document.MyProperty=1; // 有効になる MyPrpertyは1が代入されたことによりNumberオブジェクトを参照する。
alert(document.MyProperty); // 1が表示される
alert(document.MyProperty2); // undefined
さて問題のdocument.picname.srcの部分。
順に考えれば分かる。
document.picname は 参照内容が未定義のプロパティである。
undefinedである。従ってオブジェクトではない。まだ存在しない。
オブジェクトでないものにさらにプロパティを定義できない。
(document.picname).src と書けば分かりやすいか?こういう意味である
エラーになって当然である。

引数の変数picnameの内容の文字列でその名前のプロパティを参照したい場合
document[picname] とやればいい。JavaScriptではオブジェクトのプロパティ参照が配列の要素の扱いと同じである事に気付くだろう?
だから picname == "light"であるならば
この時、document.lightの意味になる。
よって以下のようにも書ける。タグ中に属性でonmouseovser="";などでスクリプトを書くのをインラインスクリプトといいうが、この作法はあまり推奨しない。

<script type="text/javascript">
function Change(picname){
document[picname].src = "light_on.jpg";
}
</script>

<img src="light.jpg" name=light onMouseOver="Change('light')">