// ==============================================================================
// Client~ConneXion LiveStats & Chat Gateway script http://www.clientconnexion.com
// ==============================================================================
// This script should be placed in the root directory of your web site. It should
// be included in each page you want to track.
// Place the Include on your page at the place where you want the Click-To-Chat
// graphic to appear.
// ===============================================================================

var sWOGateway       = "204.232.154.240:8080";    // specify the external address:port of the Client~ConneXion Gateway server
var sWOGatewaySSL    = "204.232.154.240:8443"; // specify the external address:port of the Client~ConneXion Gateway server SSL interface
var sWODomain        = "www.jupiterchev.com";  // the domain you are monitoring
var sWODepartment    = ""; // optional department
var sWOChatstart     = "http://204.232.154.240/chat/chatstart.htm"; // url to the chatstart.htm page
var sWOLanguage      = ""; // language for the chat window
var sWOBackgroundURL = ""; // optional custom background url
var sWOResponse      = "Y"; // set to a blank string if you do NOT want a visible chat link
var sWOInvite        = "Y";  // set to a blank string if you do NOT want invite requests to be polled
var sWOPreselect     = ""; // set to D to pre-select Department before starting chat, O to pre-select Operator

var sWOSession;
var sWOUrl;
var sWOUser="";
var sWOPage="";
var sWOProtocol=window.location.protocol;

// specify a user name here if you want a specific user name instead of a session cookie
// sWOUser="my user";

// specify a page name here if you want a specific page name shown in Client~ConneXion instead of the window.location
// sWOPage="my page";

var sWOCost=0;    // specify a visit cost
var sWORevenue=0; // specify the revenue generated by the visitor

// optional contact information. Specify values for these variables if you want contact info for the visitor passed to Client~ConneXion
var sWOName="";
var sWOCompany="";
var sWOEmail="";
var sWOTelephone="";

/*
	Begin ClientConneXion Custom Variables all are required to perform properly
 */
	var ClientConneXionColor = '#9EB6CE';  // Any hex color #9EB6CE or #9EB

    var ClientConneXionColorizer =
    {
        adjustHSLForLightColor: [1, 1, 1.2], // adjustments for Hue, Saturation and Lightness like in Photoshop Hue/Saturation Edit. Values 0..n 1 - no changes.
        adjustHSLForDarkColor: [1, 1, 0.9],
        adjustHSLForButtonColor:[1, 2, 0.8],
        buttonColorizerOpacity: 40 //%
    };

	ClientConneXionGenerateColors(ClientConneXionColor);

	var ClientConneXionCloseImageAll = "http://www.clientconnexion.com/images/ClientConnexionCloseImageAll.gif";
	var ClientConneXionSendImageAllTop =  "http://www.clientconnexion.com/images/ClientConnexionSendImageAllTop.gif";
	var ClientConneXionSendImageAllBack =  "http://www.clientconnexion.com/images/ClientConnexionSendImageAllBack.gif";

 	var ClientConneXionPhrase = "Please wait. A representative will be with you shortly";
 	var ClientConneXionMessage = "Hello, I saw you on our website. May I assist you with something?"
 	var ClientConneXionBlinks = 3; // how many times operator shows before a message
 	var ClientConneXionShowLink = "Y"; // set to blank if you do not want a chat link
	var ClientConneXionDelay = 4; // (seconds) set this for a delayed display of the chat window

	var ClientConneXionDivWidth = 200; // what is the width of this object
	var ClientConneXionDivHeight = 300; // what is the height of this object **this includes ClientConneXionActionDivHeight
	var ClientConneXionActionDivHeight = 25; // height of the div for move and close
	//var ClientConneXionActionDivBgImage = "/images/ClientConneXionActionDivBg.jpg"; // background image a move & close
	var ClientConneXionDivTopOffset = 0; // top padding
	var ClientConneXionDivBottomOffset = 5; // botttom padding
	var ClientConneXionDivLeftOffset = 0; // left padding
	var ClientConneXionDivRightOffset = 5; // right padding
	var ClientConneXionDivPlacement = "bottom_right"; // bottom_right (default), bottom_left, top_right, top_left
/*
	End ClientConneXion Custom Variables
 */
 /*
 	browser detection & position issue fix
 */

	var browser=navigator.appName;
	if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)){ //test for MSIE x.x;
	 var version=new Number(RegExp.$1) // capture x.x portion and store as a number
	}
	var tmphtmlheight = document.getElementsByTagName("html")[0].style.height;
	var tmphtmlwidth = document.getElementsByTagName("html")[0].style.width;
	var tmpbodyheight = document.getElementsByTagName("body")[0].style.height;
	var tmpbodywidth = document.getElementsByTagName("body")[0].style.width;
	document.getElementsByTagName("html")[0].style.height = "100%";
	document.getElementsByTagName("html")[0].style.width = "100%";
	document.getElementsByTagName("body")[0].style.height = "100%";
	document.getElementsByTagName("body")[0].style.width = "100%";

	var uscr = getUserScreen();

	var windowheight = uscr.height;
	var windowwidth = uscr.width;
	document.getElementsByTagName("html")[0].style.height = tmphtmlheight;
	document.getElementsByTagName("html")[0].style.width = tmphtmlwidth;
	document.getElementsByTagName("body")[0].style.height = tmpbodyheight;
	document.getElementsByTagName("body")[0].style.width = tmpbodywidth;
 /*
 	end browser detection & position issue fix
 */

if(sWOUser==""){
	// create a unique session cookie for the visitor
	var dt=new Date();
	var sWOCookie=document.cookie.toString();
	if(sWOCookie.indexOf("Client~ConneXion")==-1){
		sWOSession=parseInt(Math.random()*1000)+"-"+dt.getTime();
		document.cookie="Client~ConneXion="+sWOSession+";expires=Thu, 31-Dec-2020 00:00:00 GMT;";
	}
	sWOCookie=document.cookie.toString();
	if(sWOCookie.indexOf('Client~ConneXion')==-1){
		sWOSession="";
	} else {
		var s=sWOCookie.indexOf("Client~ConneXion=")+7;
		var e=sWOCookie.indexOf(";",s);
		if(e==-1)e=sWOCookie.length;
		sWOSession=sWOCookie.substring(s,e);
	}
}

if(sWOProtocol=="https:")sWOGateway=sWOGatewaySSL;
if(sWOUser!="")sWOSession=sWOUser;
if(sWOPage=="")sWOPage=escape(window.location);
if(sWOProtocol=="file:")sWOProtocol="http:";

sWOUrl=sWOProtocol+"//"+sWOGateway+"/stat.gif?u="+sWOSession+"&d="+sWODomain;
if(sWODepartment.length>0)sWOUrl+="&t="+escape(sWODepartment);
sWOUrl+="&p='"+sWOPage+"'&r='"+escape(document.referrer)+"'";
if(sWOCost!=0)sWOUrl+="&c="+sWOCost;
if(sWORevenue!=0)sWOUrl+="&v="+sWORevenue;
if(sWOName!="" || sWOCompany!="" || sWOEmail!="" || sWOTelephone!="")sWOUrl+="&n="+sWOName+"|"+sWOCompany+"|"+sWOEmail+"|"+sWOTelephone;

sWOElement = document.getElementById('Client~ConneXion_link');

if(sWOResponse==""){
	sWOUrl+="&response=g";sWOChatstart+="?domain="+sWODomain+"&lang="+sWOLanguage;
	if(sWOBackgroundURL!="")sWOChatstart+="&bg="+sWOBackgroundURL;
	if(sWODepartment.length>0)sWOChatstart+="&dept="+escape(sWODepartment);
	if(sWOPreselect.length>0)sWOChatstart+="&select="+sWOPreselect;
	if(ClientConneXionShowLink) {

		if(sWOElement)
		    sWOElement.innerHTML = "<a style=\"cursor: pointer;\" onclick=\"openClientConneXion();return false;\"><img border=\"0\" src=\""+sWOUrl+"\"><\/a>";
		else
		    document.write("<a style=\"cursor: pointer;\" onclick=\"openClientConneXion();return false;\"><img border=\"0\" src=\""+sWOUrl+"\"><\/a>");

	} else {
		if(document.layers)document.write("<layer name=\"Client~ConneXion\" visibility=hide><img src=\""+sWOUrl+"\" height=1 width=1><\/layer>");
		else document.write("<div id=\"Client~ConneXion\" STYLE=\"position:absolute;visibility:hidden;\"><img src=\""+sWOUrl+"\" height=1 width=1><\/div>");
	}
} else {
	sWOUrl+="&response=g";sWOChatstart+="?domain="+sWODomain+"&lang="+sWOLanguage;
	if(sWOBackgroundURL!="")sWOChatstart+="&bg="+sWOBackgroundURL;
	if(sWODepartment.length>0)sWOChatstart+="&dept="+escape(sWODepartment);
	if(sWOPreselect.length>0)sWOChatstart+="&select="+sWOPreselect;

	if(ClientConneXionShowLink) {
	    if(sWOElement)
		    sWOElement.innerHTML = "<a style=\"cursor: pointer;\" onclick=\"openClientConneXion();return false;\"><img border=\"0\" src=\""+sWOUrl+"\"><\/a>";
		else
		    document.write("<a style=\"cursor: pointer;\" onclick=\"openClientConneXion();return false;\"><img border=\"0\" src=\""+sWOUrl+"\"><\/a>");
	} else {
		if(document.layers)document.write("<layer name=\"Client~ConneXion\" visibility=hide><img src=\""+sWOUrl+"\" height=1 width=1><\/layer>");
		else document.write("<div id=\"Client~ConneXion\" STYLE=\"position:absolute;visibility:hidden;\"><img src=\""+sWOUrl+"\" height=1 width=1><\/div>");
	}
	/* create chat box */
	createClientConneXion();
}
sWOUrl=sWOProtocol+"//"+sWOGateway+"/invite.js?domain="+sWODomain;
if(sWOInvite=="Y")document.write("<sc"+"ript language='Javascript' src='"+sWOUrl+"'><\/scr"+"ipt>");

function openClientConneXion() {
	window.open(sWOChatstart,'new_win','width=484,height=361');
	hideClientConneXionDiv();
	return false;
}

/*
	ClientConneXion HTML
 */
function createClientConneXion() {
	var str = "";

    str +=  '<div id="ClientConneXionDiv" style="display: none; border: solid 1px {ClientConneXionDarkColor};">\n';
    str +=      '<div id="ClientConneXionActionDiv">\n';
    str +=          '<a id="ClientConneXionClose" href="javascript:void(0)" onclick="hideClientConneXionDiv()">\n';
    str +=              '<img border="0" src="{ClientConneXionCloseImageAll}" alt="close" />\n';
    str +=          '</a>\n';
    str +=      '</div>\n';
    str +=      '<div style="border: solid 1px {ClientConneXionDarkColor}; width: {ClientConneXionDivWidth-10}px; height: 170px; margin: 0 4px; padding: 5px; background-color: #FFF; text-align: left;"><strong>{ClientConneXionPhrase}</strong><br /><span id="ClientConneXionMessage" style="display: none; font-weight: normal !important;">Operator...</span></div>\n';
    str +=      '<div style="border: solid 1px {ClientConneXionDarkColor}; width: {ClientConneXionDivWidth-10}px; height: 50px; margin: 5px 4px; background-color: #FFF;">';
    str +=          '<div style="position:absolute;height:35px;width:53px;background-image: url({ClientConneXionSendImageAllBack}); margin: 7px 0px 0px 129px;"></div>';
    str +=          '<div style="position:absolute;opacity: {ClientConneXionColorizer.buttonColorizerOpacity/100}; filter:alpha(opacity={ClientConneXionColorizer.buttonColorizerOpacity});background-color:{ClientConneXionButtonColor};height:35px;width:53px; margin: 7px 0px 0px 129px;"></div>';
    str +=          '<img style="display:block; position:absolute;cursor:pointer; margin: 7px 0px 0px 129px;" src="{ClientConneXionSendImageAllTop}" onclick="openClientConneXion();return false;"/>';
    str +=          '<input id="ClientConneXionGreet" type="text" style="border: none; width: 123px; margin-top: 15px;" />\n';
                     //<!--input onclick=\"openClientConneXion();return false;\" type=\"image\" src=\""+ClientConneXionSendImageAllTop+"\" style=\"border: none; float: left; margin-top: 8px;\" /--></span></span>\n";
    str +=      '</div>\n';
    str +=      '<span style="font-size:.5em; margin-right: 5px;color:{ClientConneXionContrastColor};" id="ClientConneXionPower">Powered By&nbsp;&nbsp;&nbsp;<br /><a style="text-decoration: none; font-size: 1.3em;color:{ClientConneXionContrastColor};" target="_blank" href="http://www.clientconnexion.com">Client~ConneXion</a></span><br />\n'
    str +=  "</div>\n";


	// finding and replacing all {varName} variables
	var pat = str.match(/{[^}]+}/g);
	for(var i=0; i < pat.length; ++i)
	{
	    str = str.replace(new RegExp(pat[i], 'g'), (eval(pat[i].replace(/({|})/g, ''))));
	}

	document.write(str);

	/* style chat box */
	styleClientConneXion();
}
/*
	ClientConneXion Styles
 */
function styleClientConneXion() {
	var ClientConneXionDiv = idCCX('ClientConneXionDiv');
      ClientConneXionDiv.style.color = "#000";


    var setPos = function()
    {

    	var uscr = getUserScreen();

	    var windowheight = uscr.height;
	    var windowwidth = uscr.width;

    	switch(ClientConneXionDivPlacement) {
    		case "bottom_left":
    			ClientConneXionDiv.style.top = (windowheight - ClientConneXionDivHeight - ClientConneXionDivBottomOffset) + uscr.top + "px";
    			ClientConneXionDiv.style.left = ClientConneXionDivLeftOffset + "px";
    			break;
    		case "top_right":
    			ClientConneXionDiv.style.top = ClientConneXionDivTopOffset + uscr.top + "px";
    			ClientConneXionDiv.style.left = (windowwidth - ClientConneXionDivWidth - 18 - ClientConneXionDivRightOffset) + "px";
    			break;
    		case "top_left":
    			ClientConneXionDiv.style.top = ClientConneXionDivTopOffset + uscr.top + "px";
    			ClientConneXionDiv.style.left = ClientConneXionDivLeftOffset + "px";
    			break;
    		default:
    			ClientConneXionDiv.style.top = (windowheight - ClientConneXionDivHeight - ClientConneXionDivBottomOffset) + uscr.top + "px";
    			ClientConneXionDiv.style.left = (windowwidth - ClientConneXionDivWidth - 18 - ClientConneXionDivRightOffset) + "px";
    			break;
    	}
    };

    setPos();

	if((browser == "Microsoft Internet Explorer" && version < 7)
	    || (browser == "Microsoft Internet Explorer" && document.compatMode == 'BackCompat')) {

		ClientConneXionDiv.style.position = "absolute";

        window.attachEvent('onscroll', setPos);
        window.attachEvent('onresize', setPos);

	} else {
		ClientConneXionDiv.style.position = "fixed";
	}
	ClientConneXionDiv.style.zIndex = "50000";

	ClientConneXionDiv.style.backgroundColor = ClientConneXionLigthColor;

	ClientConneXionDiv.style.width = ClientConneXionDivWidth + "px";
	ClientConneXionDiv.style.height = ClientConneXionDivHeight + "px";
	//ClientConneXionDiv.style.display = "block";

	var ClientConneXionActionDiv = idCCX('ClientConneXionActionDiv');
	ClientConneXionActionDiv.style.width= ClientConneXionDivWidth + "px";
	ClientConneXionActionDiv.style.height= ClientConneXionActionDivHeight + "px";
	//ClientConneXionActionDiv.style.background = "#FFF url(" + ClientConneXionActionDivBgImage + ") repeat-x";

	ClientConneXionActionDiv.style.background = ClientConneXionLigthColor;

	ClientConneXionActionDiv.style.cursor = "move";

	var ClientConneXionClose = idCCX('ClientConneXionClose');
	if(browser == "Microsoft Internet Explorer") {
		ClientConneXionClose.style.styleFloat = "right";
	} else {
		ClientConneXionClose.style.cssFloat = "right";
	}
	ClientConneXionClose.style.margin = "3px 5px";
	ClientConneXionClose.style.border = "0";
	ClientConneXionClose.style.cursor = "pointer";


	//var ClientConneXionIframe = idCCX('ClientConneXionIframe');
	//ClientConneXionIframe.style.width = ClientConneXionDivWidth + "px";
	//ClientConneXionIframe.style.height = (ClientConneXionDivHeight - ClientConneXionActionDivHeight) + "px";
	//ClientConneXionIframe.style.visibility = "visible";
}
/*
	Sets embed tags for flash so html can be seen over flash
*/
function fixEmbeddedObjects() {
	var allembed = document.getElementsByTagName("embed");
	for(var i = 0; i < allembed.length; i++) {
		if(allembed[i].wmode == undefined) {
			allembed[i].setAttribute("wmode", "transparent");
		}
	}
}
/*
	hides ClientConneXionDiv
*/
function hideClientConneXionDiv() {
	if(idCCX('ClientConneXionDiv')) {
		idCCX('ClientConneXionDiv').style.display = 'none';
		var ClientConneXionGreet = idCCX('ClientConneXionGreet');
		ClientConneXionGreet.value = "";
		//idCCX('ClientConneXionIframe').src = "";
	}
}
/*
	shows ClientConneXionDiv
*/
function showClientConneXionDiv() {
	idCCX('ClientConneXionDiv').style.display = 'block';
	var ClientConneXionGreet = idCCX('ClientConneXionGreet');
	ClientConneXionGreet.focus();
	setTimeout('ClientConneXionOperatorShow(0)',1000);
}
function ClientConneXionOperatorShow(cnt) {
	if(cnt < ClientConneXionBlinks) {
		idCCX('ClientConneXionMessage').style.display = 'block';
		setTimeout('ClientConneXionOperatorHide('+cnt+')',750);
	} else {
		idCCX('ClientConneXionMessage').innerHTML = ClientConneXionMessage;
		idCCX('ClientConneXionMessage').style.display = 'block';
	}

}
function ClientConneXionOperatorHide(cnt) {
	idCCX('ClientConneXionMessage').style.display = 'none';
	setTimeout('ClientConneXionOperatorShow('+(cnt+1)+')',750);
}
/*
	drag and drop ClientConneXionDiv
*/
function startDragClientConneXionDiv(ClientConneXionEvent) {
	if(!ClientConneXionEvent) {
		var ClientConneXionEvent = window.event;
	}
	var ClientConneXionTarget = ClientConneXionEvent.target ? ClientConneXionEvent.target : ClientConneXionEvent.srcElement;
	if(ClientConneXionTarget.id != 'ClientConneXionActionDiv'){
		return;
	}
	ClientConneXionTarget = idCCX("ClientConneXionDiv");
	ClientConneXionTarget.style.left = !ClientConneXionTarget.style.left ? "0px" : ClientConneXionTarget.style.left;
	ClientConneXionTarget.style.top = !ClientConneXionTarget.style.top ? "0px" : ClientConneXionTarget.style.top;

	offsetX = ClientConneXionEvent.clientX;
	offsetY = ClientConneXionEvent.clientY;
	coordX = parseInt(ClientConneXionTarget.style.left);
	coordY = parseInt(ClientConneXionTarget.style.top);
	draging = true;

	document.onmousemove = dragClientConneXionDiv;
}
function dragClientConneXionDiv(ClientConneXionEvent) {
	if(!ClientConneXionEvent) {
		var ClientConneXionEvent = window.event;
	}
	if(!draging) {
		return;
	}
	var ClientConneXionTarget = idCCX("ClientConneXionDiv");
	ClientConneXionTarget.style.left = (coordX + ClientConneXionEvent.clientX - offsetX) + 'px';
	ClientConneXionTarget.style.top = (coordY + ClientConneXionEvent.clientY - offsetY) + 'px';
	return false;
}
function stopDragClientConneXionDiv() {
	draging = false;
}
/*
	generic getElementById function
*/
function idCCX(idname) {
	return document.getElementById(idname);
}
/*
	set drag & drop; fix flash
*/
window.onload = function() {
	if(sWOResponse != "") {
		document.onmousedown = startDragClientConneXionDiv;
		document.onmouseup = stopDragClientConneXionDiv;
		setTimeout("fixEmbeddedObjects()", 2000);
		setTimeout("showClientConneXionDiv()", (parseInt(ClientConneXionDelay)*1000));
	}
}

function getUserScreen()
{
	var scrOfX = 0, scrOfY = 0;
	var w = window;

	if(!w.document || !w.document.documentElement)
	{
		return {left: 0, top: 0, width: 0, height: 0};
	}


	if( typeof( w.pageYOffset ) == 'number' )
	{
		//Netscape compliant
		scrOfY = w.pageYOffset;
		scrOfX = w.pageXOffset;
	} else if( w.document.body && ( w.document.body.scrollLeft || w.document.body.scrollTop ) )
	{
		//DOM compliant
		scrOfY = w.document.body.scrollTop;
		scrOfX = w.document.body.scrollLeft;
	} else if( w.document.documentElement && ( w.document.documentElement.scrollLeft || w.document.documentElement.scrollTop ) )
	{
		//IE6 standards compliant mode
		scrOfY = w.document.documentElement.scrollTop;
		scrOfX = w.document.documentElement.scrollLeft;
	}


	var width = (w.innerWidth)?w.innerWidth: w.document.documentElement.clientWidth;
	var height = (w.innerHeight)?w.innerHeight: w.document.documentElement.clientHeight;

	if (document.compatMode == 'BackCompat')
	{
	    width = w.document.body.clientWidth;
	    height = w.document.body.clientHeight;
	}

	return {left: scrOfX, top: scrOfY, 'width': width, 'height': height};

}


function ClientConneXionGenerateColors(mainColor)
{
    var color = [127, 127, 127]; // default color
    var lightColor = [127, 127, 127];

    mainColor = mainColor.replace('#', '');

    var res = mainColor.match(/^([0-9a-f]{1,2})([0-9a-f]{1,2})([0-9a-f]{1,2})$/i);

    if(res)
    {
        for(var i = 0; i < 3; ++i)
        {
            if(res[i + 1].length == 1)
                res[i + 1] += res[i + 1];

            color[i] = parseInt(res[i + 1], 16);
        }

    }

    var adjustHSL = function(c, adjust)
    {
        var out = rgbToHsl(c);
        for(var i in out)
            out[i] = Math.min(1, out[i] * adjust[i]);

        out = hslToRgb(out);

        for(var i in out)
            out[i] = Math.round(out[i]);

        return out;
    };

    var toHex = function(c)
    {
        var out = [0,0,0];
        for(var i = 0; i < 3; ++i)
        {
            out[i] = c[i].toString(16);

            if(out[i].length == 1)
                out[i] = '0' + out[i];
        }

        return '#' + out.join('');
    }

    var rgbToHsl = function(c){
        r = c[0] / 255, g = c[1] / 255, b = c[2] / 255;
        var max = Math.max(r, g, b), min = Math.min(r, g, b);
        var h, s, l = (max + min) / 2;

        if(max == min){
            h = s = 0; // achromatic
        }else{
            var d = max - min;
            s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
            switch(max){
                case r: h = (g - b) / d + (g < b ? 6 : 0); break;
                case g: h = (b - r) / d + 2; break;
                case b: h = (r - g) / d + 4; break;
            }
            h /= 6;
        }

        return [h, s, l];
    }

    var hslToRgb = function(c){
        var r, g, b;

        h = c[0]; s = c[1]; l = c[2];

        if(s == 0){
            r = g = b = l; // achromatic
        }else{
            function hue2rgb(p, q, t){
                if(t < 0) t += 1;
                if(t > 1) t -= 1;
                if(t < 1/6) return p + (q - p) * 6 * t;
                if(t < 1/2) return q;
                if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
                return p;
            }

            var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
            var p = 2 * l - q;
            r = hue2rgb(p, q, h + 1/3);
            g = hue2rgb(p, q, h);
            b = hue2rgb(p, q, h - 1/3);
        }

        return [r * 255, g * 255, b * 255];
    }


    lightColor = adjustHSL(color, ClientConneXionColorizer.adjustHSLForLightColor);

    ClientConneXionLigthColor = toHex(lightColor);
    ClientConneXionDarkColor = toHex(adjustHSL(color, ClientConneXionColorizer.adjustHSLForDarkColor));
    ClientConneXionButtonColor = toHex(adjustHSL(color, ClientConneXionColorizer.adjustHSLForButtonColor));

    if((lightColor[0] + lightColor[1] + lightColor[2])/3 > 200)
        ClientConneXionContrastColor = toHex(adjustHSL(lightColor, [1, 1, 0.5]));
    else
        ClientConneXionContrastColor = toHex(adjustHSL(lightColor, [1, 1, 1.8]));

}
