Syncing 2-part turret design with mouse on rotating patform

I am essentially trying to make a space ship game where you can control your turrets by moving your mouse (freelancer style). And I have it working about 90% but ran into a little snag that has me confused.

The turret operates much like a naval gun. It has a base that can only rotate on 1 axis (y) and the barrel which only rotates up or down (x). Now, the ship that the turrets are mounted on also, obviously, rotates in all directions depending on where it’s being steered.

Now, when the ship is level at the start the turret and barrel both correctly rotate towards the mouse. HOWEVER, when you pitch the ship up the turrets begin to aim strangely. Is his as a potential local/world mix up or something? Anyway, my code is below. I would appreciate any help you can offer!

(This is very rough/messy code as I have tried 100 different solutions and have plugged in and out various stuff.)

                Transform tTurretPivot = tTurret.FindChild("GunSwivel").FindChild("TurretPivot").transform;
				tRay = driveCamera.ScreenPointToRay(Input.mousePosition);

				mouseLoc = tRay.GetPoint(targetRange);

				Vector3 rotateDir = mouseLoc - tTurret.position;
				Vector3 tempVec = new Vector3();
				tempVec = Quaternion.LookRotation(rotateDir, tTurret.up).eulerAngles;
				tempVec.x = 0;
				tempVec.z = 0;
				tTurret.localRotation = Quaternion.Euler(tempVec);

				rotateDir = mouseLoc - tTurretPivot.position;
				tempVec = Quaternion.LookRotation(rotateDir, tTurretPivot.up).eulerAngles;
				tempVec.y = 0;
				tempVec.z = 0;
				tTurretPivot.localRotation = Quaternion.Euler(tempVec);

Go to my answer here:

Click on the ‘show 10 more replies’ at the bottom of the answer. About half way down you will find a script that solves this problem. It is not an easy problem to solve.