Question about fog

I am reading Inigo Quilez http://iquilezles.org/www/articles/fog/fog.htm about fog and I just cant understand few things when he talks about fog based on height.

He has a shader function there but I have problems understanding how to make it work and add that additional fog.

He uses this function to apply fog

vec3 applyFog( in vec3  rgb,       // original color of the pixel
               in float distance ) // camera to point distance
{
    float fogAmount = 1.0 - exp( -distance*b );
    vec3  fogColor  = vec3(0.5,0.6,0.7);
    return mix( rgb, fogColor, fogAmount );
}

then he has the other one based on height

vec3 applyFog( in vec3  rgb,      // original color of the pixel
               in float distance, // camera to point distance
               in vec3  rayOri,   // camera position
               in vec3  rayDir )  // camera to point vector
{
    float fogAmount = c * exp(-rayOri.y*b) * (1.0-exp( -distance*rayDir.y*b ))/rayDir.y;
    vec3  fogColor  = vec3(0.5,0.6,0.7);
    return mix( rgb, fogColor, fogAmount );
}

My questions is do i add them because so far i just cant make it work with my shader

#version 400 core

in vec3 Position;
in vec3 Normal;
//in vec4 positionToCamera;
//in float visibility;

uniform vec3 color;
uniform vec3 CameraPosition;
uniform float near;
uniform float far;

uniform vec3 fogColor;
uniform bool enableBlending;

uniform float c;
uniform float b;

uniform int fogType;

vec3 applyFogDepth( vec3  rgb,	// original color of the pixel
	 float distance,			// camera to point distance
	 vec3  rayOri,				// camera position
	 vec3  rayDir)				// camera to point vector
{
	//float cc = 1.0;
	//float bb = 1.1;
	float fogAmount = c * exp(-rayOri.y*b) * (1.0 - exp(-distance*rayDir.y*b)) / rayDir.y;
	return mix(rgb,  fogColor,  fogAmount );
}

// Fog with Sun factor
vec3 applyFogSun( vec3  rgb,// original color of the pixel
	 float distance,		// camera to point distance
	 vec3  rayDir,			// camera to point vector
	 vec3  sunDir)			// sun light direction
{
	float fogAmount = 1.0 - exp(-distance*b);
	float sunAmount = max(dot(rayDir, sunDir), 0.0);
	
	vec3 fog = mix(fogColor, // bluish
		vec3(1.0, 0.9, 0.7), // yellowish
		pow(sunAmount, 8.0));
	
	return mix(rgb, fog, fogAmount);
}

//Exponential fog
vec3 applyFog( vec3  rgb, // original color of the pixel
		 float distance)  // camera to point distance
{
	float fogAmount = 1.0 - exp(-distance*b);
	return mix(rgb, fogColor, fogAmount);
}

float LinearizeDepth(float depth)
{
	float z = depth * 2.0 - 1.0; // Back to NDC 
	return (2.0 * near * far) / (far + near - z * (far - near));
}

out vec4 gl_FragColor;
void main(void) {

	vec3 fog = vec3(0.0);
	//-5.0f, 900.0f, 400.0f camera coord
	vec3 lightPosition = vec3(0.0, 1200.0, -6000.0);
	vec3 lightDirection = normalize(lightPosition - Position);
	vec3 direction = normalize(CameraPosition - Position);
	
	float depth = LinearizeDepth(gl_FragCoord.z) / far;
	switch (fogType) {
		case 0:
			fog = applyFog(color, depth);
			break;
		case 1:
			fog = applyFogSun(color, depth, direction, lightDirection);
			break;
		case 2:
			//fog = mix(applyFog(color, depth), applyFogDepth(color, depth, CameraPosition, CameraPosition - Position), 0.5)   ;
			fog = applyFogDepth(color, depth, CameraPosition, CameraPosition - Position);
			break;
	}

	//calculate light
	float diff = max(dot(Normal, lightDirection), 0.0);
	vec3 diffuse = diff * color;

	float fogAmount = 1.0 - exp(-depth*b);

	vec3 finalColor = vec3(0.0);
	if (enableBlending)
		finalColor = mix(diffuse, fog, fogAmount);
	else
		finalColor = fog;
	 
	gl_FragColor = vec4(finalColor,1.0);
	//gl_FragColor = vec4(vec3(LinearizeDepth(visibility) / far), 1.0f);
}

If there is another way to create shader that has more fog at lower parts in mainlans like UE Exponential Height Fog i would be happy to read about it.

So far it has been 3 days that I am trying to fix and figure out how does non constant fog works, and I just cant see a solution so far.