(edit: it just needed quotes around the second argument to mv

. I'm slow!)
Spaces in filename are generally highly annoying, but if it's what you really want this will work:
Code:
for i in *.jpg; do mv $i "`echo $i | awk -F'.' '{print $1" - "$2" - "$3".jpg"}'`"; done
The reason the command works, step by step:
Code:
1) 'for i in *.jpg; do' - this construct loops over ever file ending
in .jpg, in the current dir
2) 'mv $i' - mv each file, in turn, to the result of the evaluation of 3)
3) "`echo $i | awk -F'.' '{print $1" - "$2" - "$3".jpg"}'`" - from left to right:
i) echo the filename
ii) pipe the filename into awk, which splits it into strings, based
on the field separator (-F'.' sets the field separator to the
period). String names are $1, $2, $3, ..., $6 in this case
iii) the last part of the awk expression prints fields 1, 2, 3
with hyphens/spaces in between, follow by .jpg;
this print statement is the final value returned as the
second argument of the mv command in 2)
Hope that was useful.