Problem with a ship controller script

Hi,I am making a ship game and I have a ship controller I have found online but I have a problem.when i press the up arrow the vessel is developing speed to the right and on the down arrow on the left duno why its happening any ideas?Rudder is working fine.

here is the code:

var speed = 1.0;

var acceleration = 1.0;

var maxspeed = 2.0;

var minspeed = -0.25;

var heading = 0.0;

var rudder = 0.0;

var rudderDelta = 2.0;

var maxRudder = 6.0;

var bob = 0.1;

var bobFrequency = 0.2;



private var elapsed = 0.0;

private var seaLevel = 0.0;

private var rudderControl;

private var rudderAngle = 0.0;



function signedSqrt( x ){

	var r = Mathf.Sqrt(Mathf.Abs( x ));

	if( x < 0 ){

		return -r;

	} else {

		return r;

	}

}



function Update () {

	// Bobbing

	elapsed += Time.deltaTime;

	transform.position.y = seaLevel + bob * Mathf.Sin(elapsed * bobFrequency * (Mathf.PI * 2));

	

	// Steering

	rudder += Input.GetAxis("Horizontal") * rudderDelta * Time.deltaTime;

	if( rudder > maxRudder ){

		rudder = maxRudder;

	} else if ( rudder < -maxRudder ){

		rudder = -maxRudder;

	}

	heading = (heading + rudder * Time.deltaTime * signedSqrt(speed)) % 360;

	// transform.Rotate(0, rudder * Time.deltaTime, 0);

	transform.eulerAngles.y = heading;

	transform.eulerAngles.z = -rudder;

	

	if( rudderControl ){

		rudderAngle = ((-60 * rudder)/maxRudder + heading) % 360;

		//rudderControl.transform.localEulerAngles.y = (70 * rudderAngle) % 360;

		rudderControl.transform.eulerAngles = Vector3(0, rudderAngle, 0);

	}

	

	// Sail

	speed += Input.GetAxis("Vertical") * acceleration * Time.deltaTime;

	if( speed > maxspeed ){

		speed = maxspeed;

	} else if ( speed < minspeed ){

		speed = minspeed;

	}

	

	transform.Translate(0, 0, speed * Time.deltaTime);

}



function Awake (){

	seaLevel = transform.position.y;

	rudderControl = GameObject.Find("rudderControl");

}

Your models z axis points to the right. It’s forward would be the negative x-Axis. In the Translate code, put the z value negated to the x value of the Translate parameters