There's a further complication in the CS3 object model. The description of the parent property (in ESTK's Object Model Viewer) confuses the actual parent for what I call "owners".
For example, the parent property of a page is described like this:
Page.parent (Read Only)
Data Type: any
The parent of the Page (a Spread, MasterSpread or Document).
But in fact, while a Document object owns a pages collection, the parent of a page can only be a Spread or MasterSpread object.
Another example. The parent property of a pageItem has this description:
PageItem.parent (Read Only)
Data Type: any
The parent of the PageItem (a XMLElement, XmlStory, Spread, MasterSpread, PageItem, Oval, Rectangle, Polygon, GraphicLine, Group, State, TextFrame, Story, Text, Character, Word, Line, TextColumn, Paragraph, TextStyleRange, Cell, Table, Document, Layer, Page, Button, InsertionPoint or Footnote).
Differentiating which is which among this lot is more challenging. I believe that of this list, only these are actually possible parents:
Spread -- for page items that are on the pasteboard of a document spread.
MasterSpread -- for page items that are on the pasteboard of a master spread.
Oval, Rectangle, Polygon, GraphicLine, Group, Button -- for page items that are pasted inside any of these. Note that PageItem objects are generic and so they can own other page items, but they'll never be returned to your script as a parent; you'll always get the specific kind of page item.
Character -- for page items that are inline or anchored to a story. All the other Text objects can own page items -- that is, they can have within them inline or anchored page item collections, but the parent is always the character that holds the actual object in question. [Special note about InsertionPoints: it always has an empty collection of PageItems; once you populate that insertion point with a page item, it becomes (or spawns, depending on how you look at it) a character. Note that because PageItem is a generic kind of object, you can't use add() on a collection of page items -- you have to add a specific kind of page item.]
I think that's it. All the rest can own collections of page items, but they will never be returned if you access the parent property.
Special note concerning the TextFrame object: in CS and CS2, the text frame collection of a story returned the text frames (and text paths) that constituted the story. In CS3, you get the text frames/paths that are anchored to the story. In any of these releases, the parentStory of a text frame is the story contained within the the frames/paths. This means that in CS3:
myStory.textFrames.parentStory
returns the story contained within the nth text frame anchored inside myStory while in CS2 and CS3 it gives you back myStory because of the different meaning of textFrames.
Another interesting inconsistency. Notice that while text frames and text paths are both text containers, a text path does not have a page items collection. To get at that, you need to use:
myTextPath.texts[0].pageItems;
Hence, TextPath is not included in the list of "parents" of a page item in the OMV.
Dave