Camera orbit and object following

I have two questions so ill just put both here- The first question i have is i have a script that i put on my camera that will allow me to look around it when you move the mouse but my issue is that it wont move up and down only around the object here is the script -

using UnityEngine;
using System.Collections;

public class Orbit : MonoBehaviour {
	
	public float turnSpeed = 4.0f;
	public Transform player;
	
	public float height = 1f;
	public float distance = 2f;
	
	private Vector3 offsetX;
	private Vector3 offsetY;
	
	void Start () {
		
		offsetX = new Vector3 (0, height, distance);
		offsetY = new Vector3 (0, 0, distance);
	}
	
	void LateUpdate(){
		offsetX = Quaternion.AngleAxis (Input.GetAxis("Mouse X") * turnSpeed, Vector3.up) * offsetX;
		offsetY = Quaternion.AngleAxis (Input.GetAxis("Mouse X") * turnSpeed, Vector3.right) * offsetY;
		transform.position = player.position + offsetX; 
		transform.LookAt(player.position);

	}
}

Question two is i have it so when you click on an object you can move it around so its like telekinesis but if i move my mouse under the terrain it will just go right through the terrain and if i move my mouse real quick and let go it will just drop from when i droped it from instead of flinging out i want a way so instead of just plain moving it it will make the object follow so that it will try to go unter the terrain but it wont any help?

what u wanna do?