//#####################################################################################################
// SETTINGS
//#####################################################################################################

$(function(){
var dataurl='../data/flash/clientraw.txt';
var updates=60;
var timeout=10;
var pausemsg="Updates paused, refresh page to continue.<br/>";

// Mainly needed to change are show or not,max,min and uom
var showtemp=true;
var tempgaugeMax=30;
var tempgaugeMin=-30;
var tempuom='&deg;C';
var tempdots=10;

var showchill=true;
var chillgaugeMax=30;
var chillgaugeMin=-30;
var chilluom='&deg;C';
var chilldots=10;

var showdew=true;
var dewgaugeMax=30;
var dewgaugeMin=-30;
var dewuom='&deg;C';
var dewdots=10;

var showhum=true;
var humgaugeMax=100;
var humgaugeMin=0;
var humuom='%';

var showbaro=true;
var barogaugeMax=1050;
var barogaugeMin=960;
var barouom='hPa';
var barodots = 20;

var showsolar=true;
var solargaugeMax=1000;
var solargaugeMin=0;
var solaruom='w/m&sup2;';

var showuv=true;
var uvgaugeMax=10;
var uvgaugeMin=0;
var uvuom='uvi';

var showdir=true;
var winddirs='N,E,S,W';

var showwind=true;
var windpuom='m/s';
var windgaugeMax=20;
var windgaugeMin=0;

var showavgwind=true;
var avgwindpuom='m/s';
var windgaugeMax=20;
var windgaugeMin=0;

var showrain=true;
var rainuom='mm';

var showsnow=true;
var snowuom='cm';

// END OF SETTINGS
//####################################################################################

var options={};
var gactive = true;
var fo = 0;
if(showhum){var hum=$("#hum");}
if(showbaro){var baro=$("#baro");}
if(showtemp){var temp=$("#temp");}
if(showdew){var dew=$("#dew");}
if(showchill){var chill=$("#chill");}
if(showwind){var wind=$("#wind");}
if(showsolar){var solar=$("#solar");}
if(showuv){var uv=$("#uv");}
if(showavgwind){var avgwind=$("#avgwind");}
if(showdir){var dir=$("#dir");}
if(showrain){var rain=$("#rain");}
if(showsnow){var snow=$("#snow");}
var clock=$("#clock");var data='';var alreadyFetched={};var cr='';var iteration=0;var crcache={};//update();
   function IsActive() {
    $(window).focus(function() { gactive=true; });
    $(window).blur(function() { gactive=false; });
    if(gactive){fo++;}else{fo=0;}
    var t=fo%timeout;
    if(t==1 && iteration < updates){update();}
    //$("#debug").html('debug '+gactive+' '+fo+' '+t+' '+iteration+' < '+updates);
    window.setTimeout(IsActive, 1000);
   };
   IsActive();

function update(){alreadyFetched={};function onDataReceived(series){iteration++;if(iteration==updates && !loggedin){$("#pausemsg").html(pausemsg);return;}
options.tempgauge=false;options.humgauge=false;options.barogauge=false;options.snowvalue=false;options.windgauge=false;options.winddirs=false;options.raingauge=false;options.snow=false;var cr=series.split(' ');var crsolar=(cr[127]*1).toFixed(0);var cruv=cr[79];var crhum=cr[5];var crbaro=cr[6];var crtemp=cr[4];var crchill=cr[44];var crhumid=cr[112];var crdew=cr[72];var crwspd=cr[1];var crwdir=cr[3];var cravg=cr[158];var cradir=cr[117];var crrain=cr[7];var cu=cr[35]+'.'+cr[36]+'.'+cr[141]+' '+cr[29]+':'+cr[30]+':'+cr[31];var crsnow = 0; if(rawsnow){crsnow = rawsnow;}
var crttrnd=cr[143];var crbtrnd=cr[50];var crhtrnd=cr[144];
var crmaxhum=cr[163];var crminhum=cr[164];var crmaxtemp=cr[46];var crmintemp=cr[47];var crmaxbaro=cr[131];var crminbaro=cr[132];var crmaxdew=cr[138];var crmindew=cr[139];var crmaxchill=cr[77];var crminchill=cr[78];var crmaxhumid=cr[110];var crminhumid=cr[111];var crmaxgust=cr[71];var crmaxavg=cr[113];
$("#clock").html(cu);
var crrrate=((cr[10]*1)*60).toFixed(1);
$("#rratetxt").html(crrrate);
$("#MAXTEMP").html(cr[46]);
$("#MINTEMP").html(cr[47]);
$("#MAXDEW").html(cr[138]);
$("#MINDEW").html(cr[139]);
if(crtemp<10){
$("#MAXCHILL").html(cr[77]);
$("#MINCHILL").html(cr[78]);
} else {
$("#MAXCHILL").html(cr[110]);
$("#MINCHILL").html(cr[111]);
}
$("#MAXSPEED").html((cr[71]*0.514444).toFixed(1));
$("#MAXBARO").html(cr[131]);
$("#MINBARO").html(cr[132]);
$("#MAXHUM").html(cr[163]);
$("#MINHUM").html(cr[164]);
if((showsolar)&&(crsolar!=options.solarcache)){options.gaugeMax=solargaugeMax;options.gaugeMin=solargaugeMin;options.numbersoffset=13;options.uom=solaruom;options.dots=200;options.dotsoffset=13;options.crvalue=crsolar;options.dirgauge=false;options.humgauge=false;options.maxval=crmaxsolar;options.minval=0;$.ga(solar,data,options);
}
if((showuv)&&(cruv!=options.uvcache)){
options.gaugeMax=uvgaugeMax;options.gaugeMin=uvgaugeMin;options.numbersoffset=13;options.uom=uvuom;options.dots=1;options.dotsoffset=13;options.crvalue=cruv;options.uvcache=cruv;;options.dirgauge=false;options.humgauge=false;options.maxval=crmaxuv;options.minval=0;$.ga(uv,data,options);
}
if((showhum)&&(crhum!=options.humcache)){
options.gaugeMax=humgaugeMax;options.gaugeMin=humgaugeMin;options.numbersoffset=13;options.uom=humuom;options.dots=20;options.dotsoffset=13;options.crvalue=crhum;options.humcache=crhum;options.trnd=crhtrnd;options.dirgauge=false;options.humgauge=true;options.maxval=crmaxhum;options.minval=crminhum;$.ga(hum,data,options);
}
if((showbaro)&&(crbaro!=options.barocache)){
options.gaugeMax=barogaugeMax;options.gaugeMin=barogaugeMin;options.numbersoffset=13;options.uom=barouom;options.dots=barodots;options.dotsoffset=13;options.crvalue=crbaro;options.barocache=crbaro;options.barogauge=true;options.humgauge=false;options.dirgauge=false;options.trnd=crbtrnd;options.maxval=crmaxbaro;options.minval=crminbaro;$.ga(baro,data,options);
}
if((showtemp)&&(crtemp!=options.tempcache)){
options.gaugeMax=tempgaugeMax;options.gaugeMin=tempgaugeMin;options.numbersoffset=13;options.uom=tempuom;options.dots=tempdots;options.dotsoffset=13;options.crvalue=crtemp;options.tempcache=crtemp;options.trnd=crttrnd;options.tempgauge=true;options.humgauge=false;options.humgauge=false;options.dirgauge=false;options.barogauge=false;options.maxval=crmaxtemp;options.minval=crmintemp;$.ga(temp,data,options);
}
if((showchill)&&(crchill!=options.chillcache)){
options.gaugeMax=chillgaugeMax;options.gaugeMin=chillgaugeMin;options.numbersoffset=13;options.uom=chilluom;options.dots=chilldots;options.dotsoffset=13;
if(crtemp<10){options.crvalue=crchill;options.maxval=crmaxchill;options.minval=crminchill;}
else{options.crvalue=crhumid;options.maxval=crmaxhumid;options.minval=crminhumid;}
options.chillcache=options.crvalue;options.tempgauge=false;options.humgauge=false;options.barogauge=false;options.dirgauge=false;$.ga(chill,data,options);
}
if((showdew)&&(crdew!=options.dewcache)){
options.gaugeMax=dewgaugeMax;options.gaugeMin=dewgaugeMin;options.numbersoffset=13;options.uom=dewuom;options.dots=dewdots;options.dotsoffset=13;options.crvalue=crdew;options.dewcache=crdew;options.tempgauge=false;options.humgauge=false;options.dirgauge=false;options.maxval=crmaxdew;options.minval=crmindew;$.ga(dew,data,options);
}
var wchange=false;if(crwspd!=options.wscache){wchange=true;}
if(crwdir!=options.dircache){wchange=true;}
if(showwind&&wchange){
options.numbersoffset=6;options.uom=windpuom;options.dotsoffset=14;options.crvalue=crwspd;options.wscache=crwspd;options.dircrvalue=crwdir;options.dircache=crwdir;options.windgauge=true;options.dirgauge=false;options.gaugeMax=windgaugeMax;options.gaugeMin=windgaugeMin;options.maxval=crmaxgust;$.ga(wind,data,options);
}
if(showdir&&wchange){options.dircrvalue=crwdir;options.dircache=crwdir;options.winddirs=winddirs;options.windgauge=false;options.dirgauge=true;$.ga(dir,data,options);}
var achange=false;if(cravg!=options.avgcache){achange=true;}
if(cradir!=options.adircache){achange=true;}
if(showavgwind&&achange){
options.numbersoffset=6;options.uom=avgwindpuom;options.dotsoffset=14;options.crvalue=cravg;options.avgcache=cravg;options.dircrvalue=cradir;options.adircache=cradir;options.windgauge=true;options.maxval=crmaxavg;options.gaugeMax=windgaugeMax;options.gaugeMin=windgaugeMin;$.ga(avgwind,data,options);
}
if((showrain)&&(crrain!=options.raincache)){options.raingauge=true;options.raingaugeheight=180;options.crvalue=crrain;options.raincache=crrain;options.uom=rainuom;options.snow=false;$.ga(rain,data,options);}
if((showsnow)&&(crsnow!=options.snowcache)){options.raingauge=true;options.raingaugeheight=180;options.uom=snowuom;options.snowvalue=crsnow;options.snowcache=crsnow;options.snow=true;$.ga(snow,data,options);}
cr='';cr=false;}
$.ajax({url:dataurl,method:'GET',dataType:'text',cache:false,success:onDataReceived,error:function(msg){}});

//if(iteration<updates || loggedin){setTimeout(update,timeout*1000);}
};});

(function(){jQuery.color={};jQuery.color.make=function(E,D,B,C){var F={};F.r=E||0;F.g=D||0;F.b=B||0;F.a=C!=null?C:1;F.add=function(I,H){for(var G=0;G<I.length;++G){F[I.charAt(G)]+=H}return F.normalize()};F.scale=function(I,H){for(var G=0;G<I.length;++G){F[I.charAt(G)]*=H}return F.normalize()};F.toString=function(){if(F.a>=1){return"rgb("+[F.r,F.g,F.b].join(",")+")"}else{return"rgba("+[F.r,F.g,F.b,F.a].join(",")+")"}};F.normalize=function(){function G(I,J,H){return J<I?I:(J>H?H:J)}F.r=G(0,parseInt(F.r),255);F.g=G(0,parseInt(F.g),255);F.b=G(0,parseInt(F.b),255);F.a=G(0,F.a,1);return F};F.clone=function(){return jQuery.color.make(F.r,F.b,F.g,F.a)};return F.normalize()};jQuery.color.extract=function(C,B){var D;do{D=C.css(B).toLowerCase();if(D!=""&&D!="transparent"){break}C=C.parent()}while(!jQuery.nodeName(C.get(0),"body"));if(D=="rgba(0, 0, 0, 0)"){D="transparent"}return jQuery.color.parse(D)};jQuery.color.parse=function(E){var D,B=jQuery.color.make;if(D=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(E)){return B(parseInt(D[1],10),parseInt(D[2],10),parseInt(D[3],10))}if(D=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(E)){return B(parseInt(D[1],10),parseInt(D[2],10),parseInt(D[3],10),parseFloat(D[4]))}if(D=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(E)){return B(parseFloat(D[1])*2.55,parseFloat(D[2])*2.55,parseFloat(D[3])*2.55)}if(D=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(E)){return B(parseFloat(D[1])*2.55,parseFloat(D[2])*2.55,parseFloat(D[3])*2.55,parseFloat(D[4]))}if(D=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(E)){return B(parseInt(D[1],16),parseInt(D[2],16),parseInt(D[3],16))}if(D=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(E)){return B(parseInt(D[1]+D[1],16),parseInt(D[2]+D[2],16),parseInt(D[3]+D[3],16))}var C=jQuery.trim(E).toLowerCase();if(C=="transparent"){return B(255,255,255,0)}else{D=A[C];return B(D[0],D[1],D[2])}};var A={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})();(function($){function Ga(placeholder,data_,options_,plugins){var series=[],options={hooks:{}},canvas=null,overlay=null,eventHolder=null,ctx=null,octx=null,target=null,maxRadius=null,centerLeft=null,centerTop=null,total=0,redraw=true,redrawAttempts=10,shrink=0.95,legendWidth=0,processed=false,raw=false;axes={xaxis:{},yaxis:{},x2axis:{},y2axis:{}},plotOffset={left:0,right:0,top:0,bottom:0},canvasWidth=0,canvasHeight=0,plotWidth=0,plotHeight=0,hooks={processOptions:[],processRawData:[],processDatapoints:[],draw:[],bindEvents:[],drawOverlay:[]},ga=this;ga.draw=draw;ga.getPlaceholder=function(){return placeholder;};ga.getCanvas=function(){return canvas;};ga.getPlotOffset=function(){return plotOffset;};ga.width=function(){return plotWidth;};ga.height=function(){return plotHeight;};ga.offset=function(){var o=eventHolder.offset();o.left+=plotOffset.left;o.top+=plotOffset.top;return o;};ga.getData=function(){return series;};ga.getAxes=function(){return axes;};ga.getOptions=function(){return options;};ga.hooks=hooks;parseOptions(options_);constructCanvas();draw(ga,ctx);function executeHooks(hook,args){args=[ga].concat(args);for(var i=0;i<hook.length;++i)
hook[i].apply(this,args);}
function parseOptions(opts){$.extend(true,options,opts);for(var n in hooks)
if(options.hooks[n]&&options.hooks[n].length)
hooks[n]=hooks[n].concat(options.hooks[n]);executeHooks(hooks.processOptions,[options]);}
function constructCanvas(){function makeCanvas(width,height){var c=document.createElement('canvas');c.width=width;c.height=height;if(window.G_vmlCanvasManager){c=window.G_vmlCanvasManager.initElement(c);}
return c;}
canvasWidth=placeholder.width();canvasHeight=placeholder.height();placeholder.empty();placeholder.html("");if(placeholder.css("position")=='static')
placeholder.css("position","relative");if(canvasWidth<=0||canvasHeight<=0)
throw"Invalid dimensions for plot, width = "+canvasWidth+", height = "+canvasHeight;if(window.G_vmlCanvasManager){window.G_vmlCanvasManager.init_(document);}
canvas=$(makeCanvas(canvasWidth,canvasHeight)).appendTo(placeholder).get(0);ctx=canvas.getContext("2d");}
ga.hooks.draw.push(draw);function setupgauge()
{maxRadius=Math.min(canvas.width,canvas.height)/2;centerTop=(canvas.height/2);centerLeft=(canvas.width/2);if(centerLeft<maxRadius)
centerLeft=maxRadius;else if(centerLeft>canvas.width-maxRadius)
centerLeft=canvas.width-maxRadius;}
function draw(ga,newCtx)
{ctx=newCtx;setupgauge();drawgauge();function clear()
{ctx.clearRect(0,0,canvas.width,canvas.height);target.children().filter('.gaugeLabel, .gaugeLabelBackground').remove();}
function drawgauge(ga)
{startAngle=Math.PI*-0.5;if(options.radius>1)
var rawradius=options.radius;else
var rawradius=maxRadius*options.radius;var shadowoffset=4;var radius=maxRadius-shadowoffset;centerLeft=centerLeft-shadowoffset/2;centerTop=centerTop-shadowoffset/2;var raingauge=options.raingauge;
// Edgecolors
colors = [new rgbaColor(254, 254, 254, 1),new rgbaColor(210, 210, 210, 1),new rgbaColor(179, 179, 179, 1),new rgbaColor(238, 238, 238, 1),new rgbaColor(160, 160, 160, 1),new rgbaColor(238, 238, 238, 1),new rgbaColor(179, 179, 179, 1),new rgbaColor(210, 210, 210, 1),new rgbaColor(254, 254, 254, 1)];
fractions = [0.0,0.125,0.25,0.3472222222,0.5,0.6527777778,0.75,0.875,1.0];
if(raingauge){var gh=options.raingaugeheight;}
ctx.clearRect(0,0,canvas.width,canvas.height);ctx.translate(centerLeft,centerTop);currentAngle=startAngle;var angle=360;var radians=function(deg){return deg*Math.PI/180;};var a=135;var html='';var minData=options.gaugeMin;var maxData=options.gaugeMax;var range=(maxData-minData);var angleSpan=1.50;var startAngle=0.75;var gaugeValue=options.crvalue;var uom=options.uom;var numbersoffset=options.numbersoffset;var dotsoffset=options.dotsoffset;var dotintervall=options.dots;var windgauge=options.windgauge;var snowv=options.snowvalue;var halfAngle=((currentAngle+angle)+currentAngle)/2;var x=centerLeft+Math.round(Math.cos(halfAngle)*radius);var y=centerTop+Math.round(Math.sin(halfAngle)*radius)*options.tilt;var xx=centerLeft+Math.round(Math.cos(halfAngle));var yy=centerTop+Math.round(Math.sin(halfAngle))*options.tilt;var tempgauge=options.tempgauge;var barogauge=options.barogauge;var dirgauge=options.dirgauge;var humgauge=options.humgauge;
function isIE(){return/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent);}

// RAINGAUGE
if(raingauge){
var rainvalue=gaugeValue;
if(options.snow){var rainvalue=options.snowvalue;}
if(uom=='in'){
rainvalue=(rainvalue*.0393700787).toFixed(2);
if(rainvalue<1){var rainmax=1;}
if(rainvalue>=1){var rainmax=5;}
if(rainvalue>5){var rainmax=10;}
}else{
if(rainvalue<10){var rainmax=10;}
}
if(rainvalue>=10){var rainmax=50;}
if(rainvalue>50){var rainmax=100;}
if(rainvalue>100){var rainmax=500;}
if(rainvalue>500){var rainmax=1000;}
if(rainvalue>1000){var rainmax=5000;}
ctx.fillStyle = 'rgb(150, 150, 150)';ctx.strokeStyle = 'rgba(132, 132, 132, 1.0)';ctx.lineWidth = 1.0;
roundedRectangle(ctx, -canvas.width/2+2, -canvas.height/2+2, canvas.width-4, canvas.height-4, 8);
var PATHGRADIENT = ctx.createLinearGradient(canvas.width/2, -canvas.height/2,canvas.width/2,canvas.height);
PATHGRADIENT.addColorStop(0.0, 'rgba(254, 254, 254, 1.0)');
PATHGRADIENT.addColorStop(0.125, 'rgba(210, 210, 210, 1.0)');
PATHGRADIENT.addColorStop(0.25, 'rgba(179, 179, 179, 1)');
PATHGRADIENT.addColorStop(0.3472222222, 'rgba(238, 238, 238, 1)');
PATHGRADIENT.addColorStop(0.5, 'rgba(160, 160, 160, 1)');
PATHGRADIENT.addColorStop(0.6527777778, 'rgba(238, 238, 238, 1)');
PATHGRADIENT.addColorStop(0.75, 'rgba(179, 179, 179, 1)');
PATHGRADIENT.addColorStop(0.875, 'rgba(210, 210, 210, 1)');
PATHGRADIENT.addColorStop(1.0, 'rgba(254, 254, 254, 1)');
ctx.fillStyle = PATHGRADIENT;ctx.fill();ctx.stroke();ctx.save();ctx.restore();
ctx.fillStyle = 'rgb(45, 57, 57)';
roundedRectangle(ctx, -canvas.width/2+14, -canvas.height/2+14, canvas.width-28, canvas.height-28, 8);
ctx.fill();ctx.save();ctx.restore();

var bh=(gh*0.75);ctx.beginPath();
var ch=(gh*0.85);ctx.beginPath();
ctx.strokeStyle='rgb(100,100,100)';ctx.lineWidth=20;
ctx.moveTo(7,-gh*0.40);ctx.lineTo(7,(-gh*0.40)+bh);
ctx.closePath();ctx.stroke();ctx.save();ctx.restore();

if(rainvalue>0){ctx.beginPath();var rain=ctx.createLinearGradient(radius,-gh*0.4,radius,gh*0.75*(rainvalue/rainmax)-1);
if(snowv){rain.addColorStop(0,'rgba(255,255,255,1)');rain.addColorStop(1,'rgba(255,255,255,1)');}
else{rain.addColorStop(0,'rgba(79,148,205,1)');rain.addColorStop(1,'rgba(135,206,255,1)');}
ctx.fillStyle=rain;ctx.strokeStyle=rain;ctx.lineWidth=1;
ctx.rect(-3,-gh*0.445+(ch-(ch*(rainvalue/rainmax))),20,ch*(rainvalue/rainmax));ctx.closePath();ctx.fill();ctx.save();ctx.restore();}

ctx.translate(0,0);
ctx.strokeStyle = 'rgb(45, 57, 57)';ctx.lineWidth=1.5;ctx.beginPath();
for(var i=1;i<10;i++){var to=((ch/10)*i);ctx.moveTo(-radius/6,(-gh*0.45)+to);ctx.lineTo(radius*0.6,(-gh*0.45)+to);}
ctx.closePath();ctx.stroke();ctx.save();ctx.restore();
var html='<span  class="valuelabel2" id="gaugeLabel99" style="display:block;position:absolute;top:'+(gh+9)+'px;width:'+radius*2+'px;text-align:center;"><div style="width:50px;margin:0 auto;">'+rainvalue+" "+uom+"</div></span>";placeholder.append(html);
for(var i=0;i<6;i++){var move=22+(ch/5*i)*1;var numb=rainmax-(i*(rainmax/5));
if(uom=='in'){numb = numb.toFixed(2);}
var html='<span class="gaugelabel2" id="gaugeLabel'+i+'" style="position:absolute;display:block;text-align: right;top:'+(move)+'px;left:'+Math.floor(radius-radius/2)+'px;width: 15px;">'+numb+"</span>";placeholder.append(html);}

// WINDGAUGE
}else if(windgauge){
if(uom=='m/s'){gaugeValue=(gaugeValue*0.514444).toFixed(1);maxvalue = (options.maxval*0.514444).toFixed(1);}
else if(uom=='kmh'){gaugeValue=(gaugeValue*1.85200).toFixed(1);maxvalue = (options.maxval*1.85200).toFixed(1);}
else if(uom=='mph'){gaugeValue=(gaugeValue*1.1507794).toFixed(1);maxvalue = (options.maxval*1.1507794).toFixed(1);}
ctx.fillStyle = 'rgb(45, 57, 57)';ctx.strokeStyle = 'rgba(132, 132, 132, 1.0)';ctx.restore();ctx.moveTo(0,0);ctx.beginPath();ctx.arc(0, 0, radius, 0, Math.PI * 2, true);ctx.closePath();ctx.fill();ctx.stroke();
ctx.save();ctx.clip(ctx.arc(0, 0, radius * 0.9906542301177979 / 2.0, 0, Math.PI * 2, true));outerX = radius * (0.4953271028*2);innerX = radius * (0.4205607477*2);conicalGradient(fractions, colors, -Math.PI / 2).fill(ctx, 0, 0, innerX, outerX);ctx.restore();
var outvalue=(Math.PI*(startAngle+gaugeValue*angleSpan/(20-0)));
var RAD_FACTOR = Math.PI / 270;
freeAreaAngle = 60 * RAD_FACTOR;
angleRange = 2 * Math.PI - freeAreaAngle;
centerX = 0;
centerY = 0;
imageWidth = radius;
imageHeight = radius;
degAngleRange = angleRange / Math.PI * 180;       
ctx.save();ctx.lineWidth = 14;ctx.beginPath();ctx.translate(centerX, centerY);ctx.rotate(Math.PI*startAngle);ctx.translate(-centerX, -centerY);ctx.arc(centerX, centerY, imageWidth * 0.71, 0, 270 * Math.PI / 180, false);
ctx.strokeStyle = 'rgb(100,100,100)';ctx.stroke();ctx.restore();          
uh = (gaugeValue/(maxData-minData))*(Math.PI+(Math.PI/2));
ctx.save();ctx.lineWidth = 14;ctx.beginPath();ctx.translate(centerX, centerY);ctx.rotate(Math.PI*startAngle);
ctx.translate(-centerX, -centerY);ctx.arc(centerX, centerY, imageWidth * 0.71, 0, uh, false);
ctx.strokeStyle = 'rgba(255, 165, 0, 1.0)';ctx.stroke();ctx.restore();   
        
var numbers=minData;                  
for(var i=0;i<=(maxData-minData);++i){
lw = 1.5; ll = 17;
var xx=(Math.cos(radians(a))*(radius-dotsoffset+1));
var yy=(Math.sin(radians(a))*(radius-dotsoffset+1));
var Mx=(Math.cos(radians(a))*(radius-dotsoffset-ll));
var My=(Math.sin(radians(a))*(radius-dotsoffset-ll));
var labelx=(centerLeft+Math.cos(radians(a-2))*(radius-36));
var labely=(centerTop+Math.sin(radians(a-2))*(radius-36));
a+=270/(maxData-minData);
ctx.lineWidth = lw;ctx.strokeStyle = 'rgba(45, 57, 57, 1)';ctx.beginPath();ctx.moveTo(xx, yy);ctx.lineTo(Mx, My);ctx.closePath();ctx.stroke();ctx.save();ctx.restore();
if(i%4==0){
if(numbers<10){var offset=1;}
if(numbers>=10){var offset=2;}
var html='<span class="gaugelabel2" id="gaugeLabel'+i+'" style="position:absolute;top:'+(labely-6)+'px;left:'+(labelx-4-offset)+'px;">'+numbers+"</span>";placeholder.append(html);}
++numbers;
}

var maavalue=(Math.PI*(startAngle+maxvalue*angleSpan/(maxData-minData)));ctx.beginPath();ctx.translate(0,0);ctx.rotate(maavalue);ctx.moveTo((radius-12),-3);ctx.lineTo((radius-19),0);ctx.lineTo((radius-12),3);ctx.lineTo((radius-12),-3);
ctx.fillStyle = 'rgba(205,55,0, 1)';ctx.shadowColor = 'rgba(0, 0, 0, 0.6)';ctx.shadowOffsetY = 1;ctx.shadowBlur = 2;ctx.closePath();ctx.fill();ctx.restore();

var html='<span  class="valuelabel2" id="gaugeLabel99" style="position:absolute;text-align: center;display:block;width:30px;top:'+Math.floor(centerTop+radius/3)+'px;left:'+Math.floor(centerLeft-20)+'px;"><div>'+gaugeValue+'<div style="padding-top: 10px;">'+uom+'</div></div></span>';placeholder.append(html);         
            
// DIRGAUGE
}else if(dirgauge){
ctx.fillStyle = 'rgb(45, 57, 57)';ctx.strokeStyle = 'rgba(132, 132, 132, 1.0)';ctx.restore();ctx.moveTo(0,0);ctx.beginPath();ctx.arc(0, 0, radius, 0, Math.PI * 2, true);ctx.closePath();ctx.fill();ctx.stroke();
ctx.save();ctx.clip(ctx.arc(0, 0, radius * 0.9906542301177979 / 2.0, 0, Math.PI * 2, true));outerX = radius * (0.4953271028*2);innerX = radius * (0.4205607477*2);conicalGradient(fractions, colors, -Math.PI / 2).fill(ctx, 0, 0, innerX, outerX);ctx.restore();
var stdFont = 'bold 11px Tahoma';
var smlFont = 'bold 9px Tahoma';
centerX = 0;
centerY = 0;
imageWidth = radius*2.0;
imageHeight = radius*2.0;
var value = 0;
var angleStep = 2 * Math.PI / 360;
var angle = this.value;
ctx.translate(-71,-71);
var fillColorPath = 'rgba(100,100,100, 1)';
ctx.strokeStyle = 'rgba(100,100,100, 1)';

            // ROSE
            // PATH1_2
            ctx.save();
            moveTo(0,0);
            ctx.beginPath();
            ctx.translate(centerX, centerY);
            ctx.moveTo(imageWidth * 0.5607476635514018, imageHeight * 0.5841121495327103);
            ctx.lineTo(imageWidth * 0.6401869158878505, imageHeight * 0.6448598130841121);
            ctx.lineTo(imageWidth * 0.5841121495327103, imageHeight * 0.5607476635514018);
            ctx.lineTo(imageWidth * 0.5607476635514018, imageHeight * 0.5841121495327103);
            ctx.closePath();
            ctx.fillStyle = fillColorPath;
            ctx.fill();
            ctx.stroke();
            // PATH2_2
            ctx.save();
            ctx.beginPath();
            ctx.moveTo(imageWidth * 0.411214953271028, imageHeight * 0.5607476635514018);
            ctx.lineTo(imageWidth * 0.35514018691588783, imageHeight * 0.6448598130841121);
            ctx.lineTo(imageWidth * 0.4392523364485981, imageHeight * 0.5887850467289719);
            ctx.lineTo(imageWidth * 0.411214953271028, imageHeight * 0.5607476635514018);
            ctx.closePath();
            ctx.fillStyle = fillColorPath;
            ctx.fill();
            ctx.stroke();
            // PATH3_2
            ctx.save();
            ctx.beginPath();
            ctx.moveTo(imageWidth * 0.5841121495327103, imageHeight * 0.4439252336448598);
            ctx.lineTo(imageWidth * 0.6401869158878505, imageHeight * 0.3598130841121495);
            ctx.lineTo(imageWidth * 0.5607476635514018, imageHeight * 0.4205607476635514);
            ctx.lineTo(imageWidth * 0.5841121495327103, imageHeight * 0.4439252336448598);
            ctx.closePath();
            ctx.fillStyle = fillColorPath;
            ctx.fill();
            ctx.stroke();
            // PATH4_2
            ctx.save();
            ctx.beginPath();
            ctx.moveTo(imageWidth * 0.4392523364485981, imageHeight * 0.4158878504672897);
            ctx.lineTo(imageWidth * 0.35514018691588783, imageHeight * 0.3598130841121495);
            ctx.lineTo(imageWidth * 0.4158878504672897, imageHeight * 0.4392523364485981);
            ctx.lineTo(imageWidth * 0.4392523364485981, imageHeight * 0.4158878504672897);
            ctx.closePath();
            ctx.fillStyle = fillColorPath;
            ctx.fill();
            ctx.stroke();
            // PATH5_2
            ctx.save();
            ctx.beginPath();
            ctx.moveTo(imageWidth * 0.5233644859813084, imageHeight * 0.397196261682243);
            ctx.lineTo(imageWidth * 0.5, imageHeight * 0.19626168224299065);
            ctx.lineTo(imageWidth * 0.4719626168224299, imageHeight * 0.397196261682243);
            ctx.lineTo(imageWidth * 0.5233644859813084, imageHeight * 0.397196261682243);
            ctx.closePath();
            var PATH5_2_GRADIENT = ctx.createLinearGradient((0.4766355140186916 * imageWidth), (0.3925233644859813 * imageHeight), ((0.4766355140186916 + 0.04205607476635514) * imageWidth), ((0.3925233644859813) * imageHeight));
            PATH5_2_GRADIENT.addColorStop(0.0, 'rgba(150,150,150, 1.0)');
            PATH5_2_GRADIENT.addColorStop(0.48, 'rgba(150,150,150, 1.0)');
            PATH5_2_GRADIENT.addColorStop(0.49, 'rgba(100,100,100, 1)');
            PATH5_2_GRADIENT.addColorStop(1.0, 'rgba(100,100,100, 1)');
            ctx.fillStyle = PATH5_2_GRADIENT;
            ctx.fill();
            ctx.stroke();
            // PATH6_2
            ctx.save();
            ctx.beginPath();
            ctx.moveTo(imageWidth * 0.4719626168224299, imageHeight * 0.6074766355140186);
            ctx.lineTo(imageWidth * 0.5, imageHeight * 0.8130841121495327);
            ctx.lineTo(imageWidth * 0.5233644859813084, imageHeight * 0.6074766355140186);
            ctx.lineTo(imageWidth * 0.4719626168224299, imageHeight * 0.6074766355140186);
            ctx.closePath();
            var PATH6_2_GRADIENT = ctx.createLinearGradient((0.5186915887850467 * imageWidth), (0.6121495327102804 * imageHeight), ((0.5186915887850467 + -0.037383177570093455) * imageWidth), ((0.6121495327102804 + 4.5781188753172085E-18) * imageHeight));
            PATH6_2_GRADIENT.addColorStop(0.0, 'rgba(150,150,150, 1.0)');
            PATH6_2_GRADIENT.addColorStop(0.56, 'rgba(150,150,150, 1.0)');
            PATH6_2_GRADIENT.addColorStop(0.5601, 'rgba(100,100,100, 1)');
            PATH6_2_GRADIENT.addColorStop(1.0, 'rgba(100,100,100, 1)');
            ctx.fillStyle = PATH6_2_GRADIENT;
            ctx.lineWidth = 1.0;
            ctx.lineCap = 'square';
            ctx.lineJoin = 'miter';
            ctx.strokeStyle = 'rgba(100,100,100, 1)';
            ctx.fill();
            ctx.stroke();
            // PATH7_2
            ctx.save();
            ctx.beginPath();
            ctx.moveTo(imageWidth * 0.602803738317757, imageHeight * 0.5280373831775701);
            ctx.lineTo(imageWidth * 0.8037383177570093, imageHeight * 0.5);
            ctx.lineTo(imageWidth * 0.602803738317757, imageHeight * 0.4766355140186916);
            ctx.lineTo(imageWidth * 0.602803738317757, imageHeight * 0.5280373831775701);
            ctx.closePath();
            var PATH7_2_GRADIENT = ctx.createLinearGradient((0.6074766355140186 * imageWidth), (0.48598130841121495 * imageHeight), ((0.6074766355140186 + 1.716794578243953E-18) * imageWidth), ((0.48598130841121495 + 0.028037383177570093) * imageHeight));
            PATH7_2_GRADIENT.addColorStop(0.0, 'rgba(150,150,150, 1.0)');
            PATH7_2_GRADIENT.addColorStop(0.48, 'rgba(150,150,150, 1.0)');
            PATH7_2_GRADIENT.addColorStop(0.49, 'rgba(100,100,100, 1)');
            PATH7_2_GRADIENT.addColorStop(1.0, 'rgba(100,100,100, 1)');
            ctx.fillStyle = PATH7_2_GRADIENT;
            ctx.fill();
            ctx.stroke();
            // PATH8_2
            ctx.save();
            ctx.beginPath();
            ctx.moveTo(imageWidth * 0.3925233644859813, imageHeight * 0.4766355140186916);
            ctx.lineTo(imageWidth * 0.19158878504672897, imageHeight * 0.5);
            ctx.lineTo(imageWidth * 0.3925233644859813, imageHeight * 0.5280373831775701);
            ctx.lineTo(imageWidth * 0.3925233644859813, imageHeight * 0.4766355140186916);
            ctx.closePath();
            var PATH8_2_GRADIENT = ctx.createLinearGradient((0.3925233644859813 * imageWidth), (0.5280373831775701 * imageHeight), ((0.3925233644859813 + 2.57519186736593E-18) * imageWidth), ((0.5280373831775701 + -0.04205607476635514) * imageHeight));
            PATH8_2_GRADIENT.addColorStop(0.0, 'rgba(150,150,150, 1.0)');
            PATH8_2_GRADIENT.addColorStop(0.52, 'rgba(150,150,150, 1.0)');
            PATH8_2_GRADIENT.addColorStop(0.53, 'rgba(100,100,100, 1)');
            PATH8_2_GRADIENT.addColorStop(1.0, 'rgba(100,100,100, 1)');
            ctx.fillStyle = PATH8_2_GRADIENT;
            ctx.fill();
            ctx.stroke();
            // PATH9_2
            ctx.save();
            ctx.beginPath();
            ctx.moveTo(imageWidth * 0.40654205607476634, imageHeight * 0.5046728971962616);
            ctx.bezierCurveTo(imageWidth * 0.40654205607476634, imageHeight * 0.4532710280373832, imageWidth * 0.4485981308411215, imageHeight * 0.411214953271028, imageWidth * 0.5, imageHeight * 0.411214953271028);
            ctx.bezierCurveTo(imageWidth * 0.5467289719626168, imageHeight * 0.411214953271028, imageWidth * 0.5887850467289719, imageHeight * 0.4532710280373832, imageWidth * 0.5887850467289719, imageHeight * 0.5046728971962616);
            ctx.bezierCurveTo(imageWidth * 0.5887850467289719, imageHeight * 0.5514018691588785, imageWidth * 0.5467289719626168, imageHeight * 0.5934579439252337, imageWidth * 0.5, imageHeight * 0.5934579439252337);
            ctx.bezierCurveTo(imageWidth * 0.4485981308411215, imageHeight * 0.5934579439252337, imageWidth * 0.40654205607476634, imageHeight * 0.5514018691588785, imageWidth * 0.40654205607476634, imageHeight * 0.5046728971962616);
            ctx.closePath();
            ctx.moveTo(imageWidth * 0.3878504672897196, imageHeight * 0.5046728971962616);
            ctx.bezierCurveTo(imageWidth * 0.3878504672897196, imageHeight * 0.5607476635514018, imageWidth * 0.4392523364485981, imageHeight * 0.6121495327102804, imageWidth * 0.5, imageHeight * 0.6121495327102804);
            ctx.bezierCurveTo(imageWidth * 0.5560747663551402, imageHeight * 0.6121495327102804, imageWidth * 0.6074766355140186, imageHeight * 0.5607476635514018, imageWidth * 0.6074766355140186, imageHeight * 0.5046728971962616);
            ctx.bezierCurveTo(imageWidth * 0.6074766355140186, imageHeight * 0.4439252336448598, imageWidth * 0.5560747663551402, imageHeight * 0.3925233644859813, imageWidth * 0.5, imageHeight * 0.3925233644859813);
            ctx.bezierCurveTo(imageWidth * 0.4392523364485981, imageHeight * 0.3925233644859813, imageWidth * 0.3878504672897196, imageHeight * 0.4439252336448598, imageWidth * 0.3878504672897196, imageHeight * 0.5046728971962616);
            ctx.closePath();
            ctx.fillStyle = fillColorPath;
            ctx.lineWidth = 1.0;
            ctx.lineCap = 'square';
            ctx.lineJoin = 'miter';
            ctx.strokeStyle = 'rgba(100,100,100, 1)';
            ctx.fill();
            ctx.stroke();
            ctx.restore();
            ctx.translate(71,71);

// Ticks
var alt = 0;
for (i = 0; 360 > i; i+= 2.5) {
                if (0 === i % 5) {
                    ctx.lineWidth = 1;
                    ctx.beginPath();
                    ctx.moveTo(radius * 0.80, 0);
                    ctx.lineTo(radius * 0.77, 0);
                    ctx.closePath();
                    ctx.strokeStyle = 'rgba(150,150,150, 1)';
                    ctx.fillStyle = 'rgba(150,150,150, 1)';
                    ctx.stroke();
                }
imageWidth = radius;
imageHeight = radius;
ctx.fillStyle = 'rgba(200,200,200, 1)';
var dirs = options.winddirs;
dirs = dirs.split(',');
 
                // Draw the labels
                ctx.save();
                switch (i) {
                    case 0:
                        ctx.translate(imageWidth * 0.60, -0);
                        ctx.rotate((i * Math.PI / 180) + Math.PI / 2);
                        ctx.font = stdFont;
                        ctx.fillText(dirs[1], -2, 0, imageWidth);
                        ctx.translate(-imageWidth * 0.60, 0);
                        break;
                    case 90:
                        ctx.translate(imageWidth * 0.60, 0);
                        ctx.rotate((i * Math.PI / 180));
                        ctx.font = stdFont;
                        ctx.fillText(dirs[2], -3, 0, imageWidth);
                        ctx.translate(-imageWidth * 0.60, 0);
                        break;
                    case 180:
                        ctx.translate(imageWidth * 0.60, 0);
                        ctx.rotate((i * Math.PI / 180) - Math.PI / 2);
                        ctx.font = stdFont;
                        ctx.fillText(dirs[3], -5, 0, imageWidth);
                        ctx.translate(-imageWidth * 0.60, 0);
                        break;
                    case 270:
                        ctx.translate(imageWidth * 0.60, 0);
                        ctx.rotate((i * Math.PI / 180) - Math.PI);
                        ctx.font = stdFont;
                        ctx.fillText(dirs[0], -3, 0, imageWidth);
                        ctx.translate(-imageWidth * 0.60, 0);
                        break;
                }
            ctx.restore();
            ctx.rotate(angleStep * 2.5);
}
            // Middle ring
            ctx.restore();          
            var alternate = 0;
            ctx.save();
            ctx.translate(71,71);
            ctx.lineWidth = 1.0;
            ctx.fillStyle = 'rgba(100,100,100, 1)';
            ctx.strokeStyle = 'rgba(100,100,100, 1)';

            for (var i = 0; 360 >= i; i += 15) {
                alternate++;
                ctx.translate(0, 0);

                ctx.beginPath();
                ctx.rotate(i * Math.PI / 180);
                ctx.moveTo(imageWidth * 0.40, 0);
                ctx.lineTo(imageWidth * 0.42, 0);
                ctx.rotate(-i * Math.PI / 180);
                ctx.arc(0, 0, imageWidth * 0.42, i * Math.PI / 180, (i + 15) * Math.PI / 180, false);
                ctx.arc(0, 0, imageWidth * 0.4, (i + 15) * Math.PI / 180, i * Math.PI / 180, true);
                ctx.closePath();
                if (0 === alternate % 2) {ctx.fill();}
                ctx.stroke();
                ctx.translate(-0, -0);
            }
            ctx.moveTo(0, 0);
            ctx.save();
            ctx.restore();
            
// Needle          
ctx.shadowColor = 'rgba(0, 0, 0, 0.6)';
ctx.shadowOffsetY = 2;
ctx.shadowBlur = 2;
ctx.save();        
ctx.fillStyle='rgba(255, 165, 0 ,1.0)';
var wdir=options.dircrvalue;var wdir=(Math.PI*(-0.5+wdir*2/360));ctx.rotate(wdir);
ctx.beginPath();ctx.moveTo(59,0);ctx.lineTo(5,-5);ctx.bezierCurveTo(5,-2,5,2,5,5);ctx.lineTo(59,0);ctx.closePath();
ctx.fill();ctx.save();
ctx.fillStyle='rgba(200, 200, 200 ,1.0)';
ctx.beginPath();ctx.moveTo(-59,0);ctx.lineTo(-5,-5);ctx.bezierCurveTo(-5,-2,-5,2,-5,5);ctx.lineTo(-59,0);ctx.closePath();
ctx.fill();ctx.save();ctx.restore();
ctx.beginPath();ctx.translate(0,0);ctx.arc(0,0,radius/8,0,Math.PI*2,true);var radgrad=ctx.createRadialGradient(0,0,2,0,0,9);radgrad.addColorStop(0,'#777');radgrad.addColorStop(1,'#333');ctx.closePath();ctx.fillStyle=radgrad;ctx.fill();ctx.save();

// NEEDLEGAUGE
}else{
var maxvalue = options.maxval;
var minvalue = options.minval;
var numbers=minData;if(uom=='&deg;F'){gaugeValue=((gaugeValue*1.8)+32*1).toFixed(1);}
if(uom=='in'){gaugeValue=(gaugeValue/33.86388158*1).toFixed(2);}
var needlevalue=gaugeValue;
if(minData<0){
var huh=minData-minData-minData;minData='0';maxData=maxData+huh;
var hum=needlevalue-needlevalue-needlevalue;var needlevalue=huh-hum;
var ham=maxvalue-maxvalue-maxvalue;var maxvalue=huh-ham;
var him=minvalue-minvalue-minvalue;var minvalue=huh-him;
}
if(uom=='uvi'){range=100;}
ctx.fillStyle = 'rgb(45, 57, 57)';ctx.strokeStyle = 'rgba(132, 132, 132, 1.0)';ctx.restore();ctx.moveTo(0,0);ctx.beginPath();ctx.arc(0, 0, radius, 0, Math.PI * 2, true);ctx.closePath();ctx.fill();ctx.stroke();
ctx.save();ctx.clip(ctx.arc(0, 0, radius * 0.9906542301177979 / 2.0, 0, Math.PI * 2, true));outerX = radius * (0.4953271028*2);innerX = radius * (0.4205607477*2);conicalGradient(fractions, colors, -Math.PI / 2).fill(ctx, 0, 0, innerX, outerX);ctx.restore();
for(var i=0;i<=range;++i){
if(uom=="w/m&sup2;"){
var gh = 50;
if(i%50==0){ lw = 1; ll = 2;}
if(i%100==0){ lw = 1.2; ll = 4;}
}else{
var gh = 5;
if(i%5==0){ lw = 1; ll = 2;}
if(i%10==0){ lw = 1.2; ll = 4;}
}
var xx=(Math.cos(radians(a))*(radius-dotsoffset));
var yy=(Math.sin(radians(a))*(radius-dotsoffset));
var Mx=(Math.cos(radians(a))*(radius-dotsoffset-ll));
var My=(Math.sin(radians(a))*(radius-dotsoffset-ll));
if(uom=='uvi'){a+=270/(100);}
else{a+=270/(maxData-minData);}
// ticks
if(i%gh==0){ctx.lineWidth = lw;ctx.strokeStyle = 'rgba(200, 200, 200, 1)';ctx.beginPath();ctx.moveTo(xx, yy);ctx.lineTo(Mx, My);ctx.closePath();ctx.stroke();ctx.save();ctx.restore();}
/*
ctx.fillStyle = 'rgba(150,150,150, 1)';
ctx.save();
var smlFont = '10px Arial';
ctx.font = smlFont;
ctx.textAlign = 'center';
ctx.fillText("Lämpötila", 0, Math.floor(-radius/4), radius*2);
ctx.save();
ctx.restore();
*/
if(uom=='uvi'){var dotintervall=10;}
if(i%dotintervall==0){
var labelx=(centerLeft+Math.cos(radians(a-2))*(radius-numbersoffset-12));
var labely=(centerTop+Math.sin(radians(a-2))*(radius-numbersoffset-12));
if(numbers<10){var offset=1;}
if(numbers<=-10){var offset=2;}
if(numbers>=10){var offset=2;}
if(numbers>=100){var offset=4;}
if(numbers>=1000){var offset=10;}
if(uom=='uvi'){var number=numbers/10;var offset=0;}else{var number=numbers;}
var html='<span class="gaugelabel2" id="gaugeLabel'+i+'" style="position:absolute;top:'+(labely-6)+'px;left:'+(labelx-4-offset)+'px;">'+number+"</span>";placeholder.append(html);}
++numbers;
}
if(tempgauge||barogauge||humgauge){var tr = options.trnd;}else{var tr = '';}
if(tr>0){tr='<span class="miscsprites up_red" style="display:inline-block;position:absolute;top:'+(Math.floor(centerTop+radius/3)+15)+'px;left:'+Math.floor(centerLeft+15)+'px;"></span>';}
else if(tr<0){tr='<span class="miscsprites down_blue" style="display:inline-block;position:absolute;top:'+(Math.floor(centerTop+radius/3)+15)+'px;left:'+Math.floor(centerLeft+15)+'px;"></span>';}
else{tr="";}
placeholder.append(tr);
var outvalue=(Math.PI*(startAngle+needlevalue*angleSpan/(maxData-minData)));ctx.beginPath();ctx.translate(0,0);ctx.moveTo(0,0);ctx.rotate(outvalue);ctx.lineWidth=2;ctx.lineCap="round";ctx.lineTo(0,4);ctx.lineTo((radius-20),0);ctx.lineTo(0,-4);
grad = ctx.createLinearGradient((0.4719626168224299 * radius), (0.49065420560747663 * radius), ((0.4719626168224299 + 0.056074766355140186) * radius), (0.49065420560747663 * radius));
grad.addColorStop(0.0, 'rgba(255, 165, 0 ,1.0)');grad.addColorStop(0.46, 'rgba(255, 165, 0 ,1.0)');grad.addColorStop(0.47, 'rgba(255, 165, 0 ,1.0)');grad.addColorStop(1.0, 'rgba(255, 165, 0 ,1.0)');
ctx.fillStyle = grad;ctx.shadowColor = 'rgba(0, 0, 0, 0.6)';ctx.shadowOffsetY = 1;ctx.shadowBlur = 2;ctx.closePath();ctx.fill();ctx.restore();ctx.beginPath();ctx.translate(0,0);ctx.arc(0,0,radius/10,0,Math.PI*2,true);var radgrad=ctx.createRadialGradient(0,0,2,0,0,9);radgrad.addColorStop(0,'#777');radgrad.addColorStop(1,'#333');ctx.closePath();ctx.fillStyle=radgrad;ctx.fill();ctx.save();ctx.restore();

var maavalue=(Math.PI*(startAngle+maxvalue*angleSpan/(maxData-minData)));ctx.beginPath();ctx.translate(0,0);ctx.rotate(-outvalue);ctx.rotate(maavalue);ctx.moveTo((radius-12),-3);ctx.lineTo((radius-19),0);ctx.lineTo((radius-12),3);ctx.lineTo((radius-12),-3);
ctx.fillStyle = 'rgba(205,55,0, 1)';ctx.shadowColor = 'rgba(0, 0, 0, 0.6)';ctx.shadowOffsetY = 1;ctx.shadowBlur = 2;ctx.closePath();ctx.fill();ctx.restore();
if(uom!='uvi'&&uom!="w/m&sup2;"){
var miivalue=(Math.PI*(startAngle+minvalue*angleSpan/(maxData-minData)));ctx.beginPath();ctx.translate(0,0);ctx.rotate(-maavalue);ctx.rotate(miivalue);ctx.moveTo((radius-12),-3);ctx.lineTo((radius-19),0);ctx.lineTo((radius-12),3);ctx.lineTo((radius-12),-3);
ctx.fillStyle = 'rgba(79,148,205, 1)';ctx.shadowColor = 'rgba(0, 0, 0, 0.6)';ctx.shadowOffsetY = 1;ctx.shadowBlur = 2;ctx.closePath();ctx.fill();ctx.restore();
}

var html='<span  class="valuelabel2" id="gaugeLabel99" style="position:absolute;text-align: center;display:block;width:30px;top:'+Math.floor(centerTop+radius/3)+'px;left:'+Math.floor(centerLeft-20)+'px;"><div>'+gaugeValue+'<div style="padding-top: 10px;">'+uom+'</div></div></span>';placeholder.append(html);
} // EOF Needle gauge
}
}
}
// Create gauge
$.ga=function(placeholder,data,options){var ga=new Ga($(placeholder),data,options);return ga;};
var showtemp=false;var showdir=false;var showhum=false;var showwind=false;var showrain=false;var showsnow=false;
})(jQuery);



var rgbaColor = function(r, g, b, a) {
        var red;
        var green;
        var blue;
        var alpha;
        validateColors();
        function validateColors() {
            red = 0 > r ? 0 : r;
            red = 255 < r ? 255 : r;
            green = 0 > g ? 0 : g;
            green = 255 < g ? 255 : g;
            blue = 0 > b ? 0 : b;
            blue = 255 < b ? 255 : b;
            alpha = 0 > a ? 0 : a;
            alpha = 1 < a ? 1 : a;
        }
        this.getRed = function() {return red;};
        this.setRed = function(r) {red = 0 > r ? 0 : r; red = 255 < r ? 255 : r;};
        this.getGreen = function() { return green;};
        this.setGreen = function(g) {green = 0 > g ? 0 : g;green = 255 < g ? 255 : g;};
        this.getBlue = function() { return blue;};
        this.setBlue = function(b) {blue = 0 > b ? 0 : b;blue = 255 < b ? 255 : b;};
        this.getAlpha = function() {return alpha;};
        this.setAlpha = function(a) {alpha = 0 > a ? 0 : a;alpha = 1 < a ? 1 : a;};
        this.getRgbaColor = function() {return 'rgba(' + red + ', ' + green + ', ' + blue + ', ' + alpha + ')';};
        this.getRgbColor = function() {return 'rgb(' + red + ', ' + green + ', ' + blue + ')';};
        this.getHexColor = function() {return '#' + red.toString(16) + green.toString(16) + blue.toString(16);}
};

function conicalGradient(fractions, colors, rotationOffset) {
        var conicalGradient = function(fractions, colors, rotationOffset) {
            rotationOffset = rotationOffset === undefined ? -Math.PI / 2 : rotationOffset;
            this.fill = function(ctx, centerX, centerY, innerX, outerX)
            {
                var startAngle;
                var stopAngle;
                var RAD_FACTOR = 180 / Math.PI;
                var TWO_PI = 2 * Math.PI;
                var angleStep = (TWO_PI) / 720;
                var range;
                var startColor;
                var stopColor;
                ctx.save();
                ctx.lineWidth = 2;
                ctx.translate(centerX, centerY);
                ctx.rotate(rotationOffset);
                for (var i = 0, size = fractions.length - 1; i < size; i++) {
                    startAngle = TWO_PI * fractions[i];
                    stopAngle = TWO_PI * fractions[i + 1];
                    range = (stopAngle - startAngle) * RAD_FACTOR;
                    startColor = colors[i];
                    stopColor = colors[i + 1];
                    for (var angle = startAngle; angle < stopAngle; angle += angleStep) {
                        ctx.rotate(angleStep);
                        ctx.strokeStyle = getColorFromFraction(startColor, stopColor, range, (angle - startAngle) * RAD_FACTOR).getRgbaColor();
                        ctx.beginPath();
                        ctx.moveTo(innerX, 0);
                        ctx.lineTo(outerX, 0);
                        ctx.closePath();
                        ctx.stroke();
                    }
                }
                ctx.restore();
            };
            var getColorFromFraction = function(sourceColor, destinationColor, range, fraction)
            {
                var intToFloat = 1 / 255;
                var sourceRed = sourceColor.getRed();
                var sourceGreen = sourceColor.getGreen();
                var sourceBlue = sourceColor.getBlue();
                var sourceAlpha = sourceColor.getAlpha();
                var deltaRed = destinationColor.getRed() - sourceColor.getRed();
                var deltaGreen = destinationColor.getGreen() - sourceColor.getGreen();
                var deltaBlue = destinationColor.getBlue() - sourceColor.getBlue();
                var deltaAlpha = destinationColor.getAlpha() * intToFloat - sourceColor.getAlpha() * intToFloat;
                var fractionRed = deltaRed / range;
                var fractionGreen = deltaGreen / range;
                var fractionBlue = deltaBlue / range;
                var fractionAlpha = deltaAlpha / range;
                return new rgbaColor((sourceRed + fractionRed * fraction).toFixed(0), (sourceGreen + fractionGreen * fraction).toFixed(0), (sourceBlue + fractionBlue * fraction).toFixed(0), sourceAlpha + fractionAlpha * fraction);
            };
        };
        return new conicalGradient(fractions, colors, rotationOffset);
}

function roundedRectangle(ctx, x, y, w, h, radius) {
        var r = x + w;
        var b = y + h;
        ctx.beginPath();
        ctx.moveTo(x + radius, y);
        ctx.lineTo(r - radius, y);
        ctx.quadraticCurveTo(r, y, r, y + radius);
        ctx.lineTo(r, y+h-radius);
        ctx.quadraticCurveTo(r, b, r - radius, b);
        ctx.lineTo(x + radius, b);
        ctx.quadraticCurveTo(x, b, x, b - radius);
        ctx.lineTo(x, y + radius);
        ctx.quadraticCurveTo(x, y, x + radius, y);
        //ctx.stroke();
}
