//If we get back a normal response, handle it here
void retrieveWindlightSettings::result(const LLSD& content)
{
	//Clear the lists first
	WLFloaterManager::mMinAltParamList.clear();
	WLFloaterManager::mMaxAltParamList.clear();
	WLFloaterManager::mFadeParamList.clear();
	WLFloaterManager::mWLParamList.clear();
	WLFloaterManager::mWaterParamList.clear();
	WLFloaterManager::mWaterNormalParamList.clear();

	for(LLSD::array_const_iterator wls = content["WindLight"].beginArray();
		wls != content["WindLight"].endArray();
		++wls)
	{	
		LLSD windLightLLSD = *wls;
		LLWaterParamSet* mWater;
		LLWLParamSet* mSky;
		LLUUID* mWaterNormal;

		mWater = new LLWaterParamSet();
		mSky = new LLWLParamSet();
		mWaterNormal = new LLUUID();

		mWater->set("waterFogColor",
			windLightLLSD["waterColorX"].asReal()   / 256.f,
			windLightLLSD["waterColorY"].asReal()   / 256.f,
			windLightLLSD["waterColorZ"].asReal()   / 256.f,
			windLightLLSD["waterColorW"].asReal()   / 256.f);
		mWater->set("waterFogDensity", windLightLLSD["waterFogDensityExponent"].asReal());
		mWater->set("underWaterFogMod", windLightLLSD["underwaterFogModifier"].asReal());
		mWater->set("normScale", windLightLLSD["reflectionWaveletScaleX"].asReal(),
			windLightLLSD["reflectionWaveletScaleY"].asReal(),
			windLightLLSD["reflectionWaveletScaleZ"].asReal());
		mWater->set("fresnelScale", windLightLLSD["fresnelScale"].asReal());
		mWater->set("fresnelOffset", windLightLLSD["fresnelOffset"].asReal());
		mWater->set("scaleAbove", windLightLLSD["refractScaleAbove"].asReal());
		mWater->set("scaleBelow", windLightLLSD["refractScaleBelow"].asReal());
		mWater->set("blurMultiplier", windLightLLSD["blurMultiplier"].asReal());
		mWater->set("wave2Dir", windLightLLSD["bigWaveDirectionX"].asReal(),
			windLightLLSD["bigWaveDirectionY"].asReal());
		mWater->set("wave1Dir", windLightLLSD["littleWaveDirectionX"].asReal(),
			windLightLLSD["littleWaveDirectionY"].asReal());
		mWaterNormal->parseUUID(windLightLLSD["normalMapTexture"].asUUID().asString(), mWaterNormal);

		mSky->setSunAngle(windLightLLSD["sunMoonPosition"].asReal());
		mSky->setEastAngle(windLightLLSD["eastAngle"].asReal());

		mSky->set("sunlight_color",
			windLightLLSD["sunMoonColorX"].asReal() * 3.0f,
			windLightLLSD["sunMoonColorY"].asReal() * 3.0f,
			windLightLLSD["sunMoonColorZ"].asReal() * 3.0f,
			windLightLLSD["sunMoonColorW"].asReal() * 3.0f);

		mSky->set("ambient",
			windLightLLSD["ambientX"].asReal() * 3.0f,
			windLightLLSD["ambientY"].asReal() * 3.0f,
			windLightLLSD["ambientZ"].asReal() * 3.0f,
			windLightLLSD["ambientW"].asReal() * 3.0f);

		mSky->set("blue_horizon",
			windLightLLSD["horizonX"].asReal() * 2.0f,
			windLightLLSD["horizonY"].asReal() * 2.0f,
			windLightLLSD["horizonZ"].asReal() * 2.0f,
			windLightLLSD["horizonW"].asReal() * 2.0f);

		mSky->set("blue_density",
			windLightLLSD["blueDensityX"].asReal(),
			windLightLLSD["blueDensityY"].asReal(),
			windLightLLSD["blueDensityZ"].asReal(),
			1.0);

		mSky->set("haze_horizon",
			windLightLLSD["hazeHorizon"].asReal(),
			windLightLLSD["hazeHorizon"].asReal(),
			windLightLLSD["hazeHorizon"].asReal(),
			1.f);

		mSky->set("haze_density",
			windLightLLSD["hazeDensity"].asReal(),
			0.f, 0.f, 1.f);

		mSky->set("cloud_shadow",
			windLightLLSD["cloudCoverage"].asReal(),
			0.f, 0.f, 1.f);

		mSky->set("density_multiplier",
			windLightLLSD["densityMultiplier"].asReal() / 1000.0f,
			0.f, 0.f, 1.f);

		mSky->set("distance_multiplier",
			windLightLLSD["distanceMultiplier"].asReal(),
			0.f, 0.f, 1.f);

		mSky->set("max_y",
			windLightLLSD["maxAltitude"].asReal(),
			0.f, 0.f, 1.f);

		mSky->set("cloud_color",
			windLightLLSD["cloudColorX"].asReal(),
			windLightLLSD["cloudColorY"].asReal(),
			windLightLLSD["cloudColorZ"].asReal(),
			windLightLLSD["cloudColorW"].asReal());

		mSky->set("cloud_pos_density1",
			windLightLLSD["cloudXYDensityX"].asReal(),
			windLightLLSD["cloudXYDensityY"].asReal(),
			windLightLLSD["cloudXYDensityZ"].asReal(),
			1.f);

		mSky->set("cloud_pos_density2",
			windLightLLSD["cloudDetailXYDensityX"].asReal(),
			windLightLLSD["cloudDetailXYDensityY"].asReal(),
			windLightLLSD["cloudDetailXYDensityZ"].asReal(),
			1.f);

		mSky->set("cloud_scale",
			windLightLLSD["cloudScale"].asReal(),
			0.f, 0.f, 1.f);

		mSky->set("gamma",
			windLightLLSD["sceneGamma"].asReal(),
			0.f, 0.f, 1.f);

		mSky->set("glow",
			(2 - windLightLLSD["sunGlowSize"].asReal()) * 20,
			0.f,
			-windLightLLSD["sunGlowFocus"].asReal() * 5,
			1.f);

		mSky->setCloudScrollX(windLightLLSD["cloudScrollX"].asReal() + 10.0f);
		mSky->setCloudScrollY(windLightLLSD["cloudScrollY"].asReal() + 10.0f);

		mSky->setEnableCloudScrollX(!windLightLLSD["cloudScrollXLock"].asBoolean());
		mSky->setEnableCloudScrollY(!windLightLLSD["cloudScrollYLock"].asBoolean());

		mSky->setStarBrightness(windLightLLSD["starBrightness"].asReal());

		mSky->set("fade", windLightLLSD["fade"].asReal());

		WLFloaterManager::mMinAltParamList[windLightLLSD["Name"].asString()] = windLightLLSD["minEffectiveAltitude"].asReal();
		WLFloaterManager::mMaxAltParamList[windLightLLSD["Name"].asString()] = windLightLLSD["maxEffectiveAltitude"].asReal();
		WLFloaterManager::mFadeParamList[windLightLLSD["Name"].asString()] = windLightLLSD["fade"].asReal();

		WLFloaterManager::mWLParamList[windLightLLSD["Name"].asString()] = mSky;
		WLFloaterManager::mWaterParamList[windLightLLSD["Name"].asString()] = mWater;
		WLFloaterManager::mWaterNormalParamList[windLightLLSD["Name"].asString()] = mWaterNormal;
	}
	WLFloaterManager::UpdateFloater();
}