What are some general test guidelines when making QTP tests?

I'm pretty new at it so I'm unsure about my methods of implementing tests. The thing that I dislike the most of what I'm doing is the fact that most of my tests are layout dependent, but is that the norm for QTP tests?

For example, many of the tests I've scripted so far depend on things like text being in a certain cell of a table, and if the text were ever to move the test wouldn't function. Is this poor practice or is it normal?

Another thing I dislike is I can't shake the feeling that I'm warping all of my tests to conform with the methodology that I already understand, rather than trying to learn new things (difficulty is also added with it being hard to find QTP tutorials for people who are not beginners, but are not pros).

For example, I've been doing the majority of my tests by taking numbers off the page in the script, storing them in variables, and then comparing those variables to other items on different pages later in the test. I then use the reporter.reportEvent method to actually output my tests.

Another big confusion for me is the object repository, I don't fully understand what has to be in there in order to get data from, so far I've just assumed that anything you want to get a property of has to be in there. What I don't understand is the heirchy of the repository, like can I make an object a "global" so I don't have to worry about it not being on a page by accident?

Another really confusing thing is frames, when I'm doing a web tests the program that I've been testing uses frames rather than actually changing the page (it's a javascript program), but I'm unsure of what actually triggers a frame change, and how to prevent the frame changes from messing up my tests (since sometimes in the test I may not know what the frame number should be).

Are there any intermediate level tutorials, or examples that I could look at for QTP?