﻿var TreadR = TreadR ? TreadR : {};
TreadR.Color = {};

var gScalarFactor = 0.4;
//var gScalarFactor = 0.12;

TreadR.Color.GetColorForElevation = function (elevation)
{
	
	var hsv = new Object();
	hsv.hue= TreadR.Color.GetHueValueForScalar(elevation);
	hsv.saturation = 1.0;
	hsv.value = 1.0;
	
	var RGB = TreadR.Color.GetRGBFromHSV(hsv);
	
	return RGB2Hex(RGB.red, RGB.green, RGB.blue);
}

TreadR.Color.GetRGBFromHSV = function (hsv)
{
	var RGB = new Object();
	
	if(hsv.saturation <= 0)
		return null;
	
	var Hi = hsv.hue / 60;
	Hi = Math.floor(Hi);
	Hi = Hi % 6;
	var f = (hsv.hue / 60) - Hi;
	var p = hsv.value * (1 - hsv.saturation);
	var q = hsv.value * ( 1 - (f * hsv.saturation) );
	var t = hsv.value * ( 1 - ( 1 - f ) * hsv.saturation );
	
	switch(Hi)
	{
		case 0:
			RGB.red = hsv.value;
			RGB.green = t; 
			RGB.blue = p;
			break;
		case 1:
			RGB.red = q;
			RGB.green = hsv.value;
			RGB.blue = p;
			break;
		case 2:
			RGB.red = p;
			RGB.green = hsv.value;
			RGB.blue = hsv.t;
			break;
		case 3:
			RGB.red = p;
			RGB.green = q;
			RGB.blue = hsv.value;
			break;
		case 4:
			RGB.red = t;
			RGB.green = p;
			RGB.blue = hsv.value;
			break;
		case 5:
			RGB.red = hsv.value;
			RGB.green = p;
			RGB.blue = q;
			break;
	}
	
	RGB.red =Math.round(RGB.red * 255);
	RGB.green =Math.round(RGB.green * 255);
	RGB.blue =Math.round(RGB.blue * 255);

	return RGB;
}


TreadR.Color.GetHueValueForScalar = function (scalar)
{
	return scalar * gScalarFactor;

}


var gHexDigits ='0123456789ABCDEF';
function Dec2Hex(d) {
	return gHexDigits.charAt((d-(d%16))/16)+gHexDigits.charAt(d%16);
}

function Hex2Dec(h) {
	h=h.toUpperCase();
	d=0;
	for (i=0;i<h.length;i++) {
		d=d*16;
		d+=hexdig.indexOf(h.charAt(i));
	}
	return d;
}

function RGB2Hex(r,g,b) {
	return Dec2Hex(r)+Dec2Hex(g)+Dec2Hex(b);
}
