//synchronise with server;

var sys1=0,dew10=0,ww16=0,ww21=0,crw5=parseFloat(curw2[8]);
var h1=h0,tt2=0.0065,tt2d=0.0018,f1=ruf1,ws10=avgspd,rr=document.r1,tt=getCookie(),pword="",pstw1=1;
var layerpos="11|435|5";
if(!tt){var wxpref="-1|-1|-1",pword="-1";setCookie();tt="0~0~0~0+"+cookarr1+"+"+layerpos+"+"+wxpref+"+"+pword;if(getCookie()){pword="";pstw1=0;}};
var locs1=window.location.search,locs2=locs1.split("+").length;locs1=unescape(locs1.substring(1,300));
if((!getCookie() && locs2>1) || locs2>3)tt=locs1;
var ttt1=tt.split("+");
var opt10a=ttt1[0].split("~");opt10[0]=parseInt(opt10a[0]);opt10[1]=parseInt(opt10a[1]);opt10[2]=parseInt(opt10a[2]);opt10[3]=parseInt(opt10a[3]);
var tta=opt7[l1][opt10[l1]*2].split("|");
var h1=parseFloat(tta[0])+0.1,f1=parseFloat(tta[1]),dsc1="",dsc2="";
if(tta.length==5)dsc1=tta[3],dsc2=tta[4];
else if(tta.length==6)dsc2=tta[4];

var ttt2=ttt1[1].split("|"),layerpos1=ttt1[2].split("|");for(z=5;z<16;z++)eval("var cks"+z+"=0;");
var temp12=ttt2[0],baro12=ttt2[1],wind12=ttt2[2],rain12=ttt2[3],signs12=ttt2[4],cks1=ttt2[5],cks2=ttt2[6],cks3=ttt2[7],cks4=ttt2[8],height12=ttt2[9];if(ttt2.length>10)for(z=5;z<16;z++){var zzz=z+5;eval("cks"+z+"=ttt2["+zzz+"];");}
wxpref=ttt1[3];
if(ttt1.length==9)pword=ttt1[8];
else if(ttt1.length==5)pword=ttt1[4];
else pstw1=0;
var locs3=locs1.split("&L=");
if(locs3.length>1){pword=locs3[1];}
var dw2temp=1,dw3temp=pword;
dw5();

//put list;
dlist1(l1);
rr.s1.options.selectedIndex=opt10[l1];
dlist2();

var tempstart=temp,wxp30=temp,humstart=humidity,windstart=ws10,opt78=rr.s1.options[opt10[l1]].value,opt78a=opt78.split("|");

//forecast data
var wxp2=wxpref.split("|"),wx0=1,wc2=1;
if(opt78a[2]=="0")wx0=0;
var wxf0=(wxp2[2]=="-1");
if(wxp2[2]!="-1"){tod=" "+wxp2[2];wx0=0;}
else {wxp2[0]=ex7;wxp2[1]=parseInt(ex7+2);}
var wxp3=wxp2[1]-wxp2[0]+1,wxp4=-100,wxp4a=100,wxp5=0,wxp6=0,wxp7=0,wxp8=0,wc5=parseInt(wxp2[0])+(wxp3-1)/2,wc6=parseInt((parseInt(wxp2[0])+parseInt(wxp2[1]))/2);

var dayset1d=180*(1+(8*(wxp2[1]/8-parseInt(wxp2[1]/8)))),dayset1c=180*(1+(8*(wc5/8-parseInt(wc5/8)))),dayset1b=180*(1+(8*(wc6/8-parseInt(wc6/8))));
var wxds1=ds29(dayset1b),wxds2=ds29(dayset1d);

var dayset1a=180*(1+(8*(wxp2[0]/8-parseInt(wxp2[0]/8))));
var dayset1e=parseInt(nowt1/180)-1;
if(!wxf0)dayset1=((dayset1c<ssth) && (dayset1c>srth));
dayset2=((dayset1b<ssth) && (dayset1b>srth));
dayset3=((dayset1d<ssth) && (dayset1d>srth));

var wxp8=parseInt(wxp2[0]),wxp9=parseInt(wxp2[1]);

//wind direction
//this block temp wind vane fix
var wdir1=wdirwx[wxp8],wdir2=wdirwx[wxp9],ztemp=-1;
for(z=0;z<dirar2.length;z++){if(wdir1==dirar2[z]){wdir1=dirar1[z];ztemp=z;}if(wdir2==dirar2[z])wdir2=dirar1[z]}
if(ztemp==-1){wdir1=dirar1[Math.round(wdir1/22.5)];wdir2=dirar1[Math.round(wdir2/22.5)];}
if(wdir1!=wdir2)windir=wdir1+"erly then "+wdir2+"erly";
else windir=wdir2+"erly";
//


//temp anemometer fix
//for(z=0;z<wxp3;z++)wxp5+=parseFloat(wspeedwx[wxp8+z]);
//ws10=wxp5/wxp3;
//avgspd=ws10;
//var wsch1=wspeedwx[wxp9]-wspeedwx[wxp8];
//if(wsch1==3*wxp3)wsch1+=0.00001;
//wschangehour=wsch1/(3*wxp3);

if(!wx0){
var th1=h1,tp45=0;
h1=baselevel;ttemp=newtemp(temp);h1=th1;
h0=baselevel;ruf1=0.8;for(z=0;z<wxp3-1;z++){
tp45=parseFloat(tempwx[wxp8+z]);if(tp45>wxp4)wxp4=tp45;if(tp45<wxp4a)wxp4a=tp45;
}
var tempstart=parseFloat(tempwx[wxp8]),tempend=parseFloat(tempwx[wxp9]),windstart=parseFloat(wspeedwx[wxp8]);parseFloat(wxp4a);if(dayset1)temp=parseFloat(wxp4);else temp=parseFloat(wxp4a);
//comp fdata error degs same day;
var ohum=humidity;
tempchangehour=(parseFloat(tempwx[wxp9])-parseFloat(tempwx[wxp8]))/(3*wxp3);
//anemometer OK
for(z=0;z<wxp3;z++)wxp5+=parseFloat(wspeedwx[wxp8+z]);
ws10=wxp5/wxp3;
avgspd=ws10;
var wsch1=wspeedwx[wxp9]-wspeedwx[wxp8];
if(wsch1==3*wxp3)wsch1+=0.00001;
wschangehour=wsch1/(3*wxp3);


for(z=0;z<wxp3;z++)wxp6+=parseFloat(barwx[wxp8+z]);
baro=(wxp6/wxp3)-(h0/9.7536);pressurechangehourinmb=(barwx[wxp9]-barwx[wxp8])/(3*wxp3);
wxp30=0;for(z=0;z<wxp3;z++){wxp7+=parseFloat(rhwx[wxp8+z]);wxp30+=parseFloat(tempwx[wxp8+z]);}
humidity=wxp7/wxp3;wxp30=wxp30/wxp3;
//dp calc
dew=dpcalc(humidity,wxp30);dew10=dew;
var humstart=parseFloat(rhwx[wxp8]);
var nextwind=newwind(parseFloat(wspeedwx[wxp9]));
//dpchange
var nexttemp=parseFloat(tempwx[wxp8+2]);
var nextdew=dpcalc(parseFloat(rhwx[wxp8+2]),nexttemp);
//cloudht calc
cloudht=parseInt(290+((wxp30-dew)/(tt2-tt2d)));
//predict cloudht
var nextcloudht=parseInt(290+((nexttemp-nextdew)/(tt2-tt2d)));
var cloudchange=nextcloudht-cloudht;

//wind direction
//var wdir1=wdirwx[wxp8],wdir2=wdirwx[wxp9],ztemp=-1;
//for(z=0;z<dirar2.length;z++){if(wdir1==dirar2[z]){wdir1=dirar1[z];ztemp=z;}if(wdir2==dirar2[z])wdir2=dirar1[z]}
//if(ztemp==-1){wdir1=dirar1[Math.round(wdir1/22.5)];wdir2=dirar1[Math.round(wdir2/22.5)];}
//var wdg1=parseInt(wdir1deg/20),wdg2=parseInt(wdir2deg/20);
//if(wdir1!=wdir2)windir=wdir1+"erly then "+wdir2+"erly";
//else windir=wdir2+"erly";
}


dewstart=dpcalc(humstart,tempstart);

//snow lying calc
var dtemp1=18,ww15=0;var h0temp=h0;h0=150;
for(zy=0;zy<wxp2[0];zy++){var dte1a=parseFloat(tempwx[wxp2[0]-zy]),dte1=parseFloat(newtemp(dte1a)),dte2=newdew(dpcalc(parseFloat(rhwx[wxp2[0]-zy]),dte1a));if(dte2>dte1)dte2=dte1;
var sdew4=dte2;if(dte1>=0.7){dtemp1--;}
if(dtemp1>0 && newrain(parseFloat(rainwx[wxp2[0]-zy]))>=(crw5+0.08) && (sdew4<0.5) && dte1<0.7)ww15++;}
if(ww15<1 && dtemp1>0){var dte2=db26.length-1;
for(zy=8;zy<dte2;zy++){var dte3=db26[dte2-zy].split(","),dte1a=parseFloat(dte3[0]),dte1=newtemp(dte1a),dte5=newdew(dpcalc(parseFloat(dte3[4]),dte1a));if(dte5>dte1)dte5=dte1;
var sdew4=dte5;if(dte1>=0.7){dtemp1--;}
if(dtemp1>0 && newrain(parseFloat(dte3[1]))>=(crw5+0.08) && (sdew4<0.5) && dte1<0.7)ww15++;}}
if(ww15>1)ww15=1;

//drift calc
if(ww15){var dtemp1=1,ww6=0,suntot1=0;
for(zy=0;zy<wxp2[0];zy++){var dayset1s=180*(1+(8*((wxp2[0]-zy)/8-parseInt((wxp2[0]-zy)/8)))),dayset1t=((dayset1s<ssth) && (dayset1s>srth)),dte1a=parseFloat(tempwx[wxp2[0]-zy]),dte1=parseFloat(newtemp(dte1a)),dte2=newdew(dpcalc(parseFloat(rhwx[wxp2[0]-zy]),dte1a));if(dte2>dte1)dte2=dte1;
var dte3=newwind(parseFloat(wspeedwx[wxp2[0]-zy])),sdew4=dte2+(dte1*dte3/100);if(dte1+suntot1>=1.5){dtemp1=0;}
if(newwind(ws10)>dcalc1 && dtemp1 && newrain(parseFloat(rainwx[wxp2[0]-zy]))>=(crw5+0.08) && (sdew4<0.5) && dte1<1.5)ww6=1;if(ww6==0 && dayset1t)suntot1+=Math.sqrt(1/(1+parseInt(cloudwx[wxp2[0]-zy])));}
if(!ww6 && dtemp1){var dte2=db26.length-1;
for(zy=8;zy<dte2;zy++){var dayset1s=180*(1+(8*((dte2-zy)/8-parseInt((dte2-zy)/8)))),dayset1t=((dayset1s<ssth) && (dayset1s>srth)),dte3=db26[dte2-zy].split(","),dte1a=parseFloat(dte3[0]),dte1=newtemp(dte1a),dte5=newdew(dpcalc(parseFloat(dte3[4]),dte1a));if(dte5>dte1)dte5=dte1;
var dte6=newwind(dte3[6]),sdew4=dte5+(dte1*dte6/100);if(dte1+suntot1>=1.5){dtemp1=0;}
if(newwind(ws10)>dcalc1 && dtemp1 && newrain(parseFloat(dte3[1]))>=(crw5+0.08) && (sdew4<0.5) && dte1<1.5)ww6=1;if(ww6==0 && dayset1t)suntot1+=Math.sqrt(1/(1+parseInt(dte3[3])));}}
}
h0=h0temp;

//Cloud calcs;
var clar1=new Array(12),cldesc="0",cla1=0,fgset=0,clrep2=mtr1.split(" ");
//METAR cloud data
for(z=0;z<clrep2.length;z++){
if(clrep2[z].indexOf("CAVOK")>-1){clar1[cla1]="C";clar1[cla1+1]=clrep2[z].substring(3,300);cla1++;cla1++;cldesc="0";s81="3"}
if(clrep2[z].indexOf("FEW")>-1){clar1[cla1]="F";clar1[cla1+1]=clrep2[z].substring(3,300);cla1++;cla1++;cldesc="1";s81="2"}
if(clrep2[z].indexOf("SCT")>-1){clar1[cla1]="S";clar1[cla1+1]=clrep2[z].substring(3,300);cla1++;cla1++;cldesc="2";s81="1"}
if(clrep2[z].indexOf("BKN")>-1){clar1[cla1]="B";clar1[cla1+1]=clrep2[z].substring(3,300);cla1++;cla1++;cldesc="3";s81="-1"}
if(clrep2[z].indexOf("OVC")>-1){clar1[cla1]="O";clar1[cla1+1]=clrep2[z].substring(3,300);cla1++;cla1++;cldesc="4";s81="-2"}
if(clrep2[z].indexOf("FG")>-1 || clrep2[z].indexOf("BR")>-1){fgset=1;clar1[cla1]="O";clar1[cla1+1]="0";cla1++;cla1++;cldesc="4";s81="-2"}
}

//weather description
var pc81b=3,pc81c=0,pc81d=3,wdesc1=parseInt(cloudwx[wxp8]),wdesc1a=newrain(parseFloat(rainwx[wxp8])),wdesc2=parseInt(cloudwx[wxp9]),wdesc2a=newrain(parseFloat(rainwx[wxp9])),wdesc6=parseInt(cloudwx[wc6]),wdesc6a=newrain(parseFloat(rainwx[wc6])),wdesc3="",wdesc4="";

if(!wx0){if(wdesc1a>curw2[8] && cloudwx[wxp8+1]=="100")wdesc1=100;
if(wdesc2a>curw2[8] && cloudwx[wxp9+1]=="100")wdesc2=100;
if(wdesc6a>curw2[8] && cloudwx[wc6+1]=="100")wdesc6=100;
if(wxp8>1){
if(wdesc1a>curw2[8] && cloudwx[wxp8-1]=="100")wdesc1=100;
if(wdesc2a>curw2[8] && cloudwx[wxp9-1]=="100")wdesc2=100;
if(wdesc6a>curw2[8] && cloudwx[wc6-1]=="100")wdesc6=100;
}}

var cury1=new Array(0.2,0.4,2,5,10,15);cury1[0]=crw5+0.1;
if(ncheck(curw2[1])>=wxp8 && ncheck(curw2[7])<=wxp8){if(parseInt(curw2[0])<5){wdesc1a=0;wdesc1=30*parseInt(curw2[0]);if(wdesc1>100)wdesc1=100;}else wdesc1=100;wdesc1a=cury1[parseInt(curw2[0]-5)];cldesc=cldesc1(wdesc1);}
if(ncheck(curw2[1])>=wxp9 && ncheck(curw2[7])<=wxp9){if(parseInt(curw2[0])<5){wdesc2a=0;wdesc2=30*parseInt(curw2[0]);if(wdesc2>100)wdesc2=100;}else wdesc2=100;wdesc2a=cury1[parseInt(curw2[0]-5)];}
if(ncheck(curw2[1])>=wc6 && ncheck(curw2[7])<=wc6){if(parseInt(curw2[0])<5){wdesc6a=0;wdesc6=30*parseInt(curw2[0]);if(wdesc6>100)wdesc6=100;}else wdesc6=100;wdesc6a=cury1[parseInt(curw2[0]-5)];}
if(curw2[3]>0){if(ncheck(curw2[3])>=wxp8){wdesc1=curw2[6];cldesc=cldesc1(wdesc1);}
if(ncheck(curw2[3])>=wxp9)wdesc2=curw2[6];
if(ncheck(curw2[3])>=wc6)wdesc6=curw2[6];}

//raining threshold (mm)
var rth1=crw5;
var xcv1=0,icon2="0";

if(wdesc1>99 ||(wxp2[2]=="-1" && cldesc=="4")){xcv1=4;icon2="2";}
else if(wdesc1>95||(wxp2[2]=="-1" && cldesc=="3")){xcv1=3;icon2="3";}
else if(wdesc1>50||(wxp2[2]=="-1" && cldesc=="2")){xcv1=2;icon2="1";}
else if(wdesc1>20||(wxp2[2]=="-1" && cldesc=="1")){xcv1=1;icon2="1";}
if(wdesc1a>20)xcv1=14;
else if(wdesc1a>10)xcv1=13;
else if(wdesc1a>5)xcv1=12;
else if(wdesc1a>2)xcv1=11;
else if(wdesc1a>=rth1)xcv1=10;

var xcv2=0;
if(wdesc2>99)xcv2=4;
else if(wdesc2>95)xcv2=3;
else if(wdesc2>50)xcv2=2;
else if(wdesc2>20)xcv2=1;
if(wdesc2a>20)xcv2=14;
else if(wdesc2a>10)xcv2=13;
else if(wdesc2a>5)xcv2=12;
else if(wdesc2a>2)xcv2=11;
else if(wdesc2a>=rth1)xcv2=10;

var xcv3=0;
if(wdesc6>99)xcv3=4;
else if(wdesc6>95)xcv3=3;
else if(wdesc6>50)xcv3=2;
else if(wdesc6>20)xcv3=1;
if(wdesc6a>20)xcv3=14;
else if(wdesc6a>10)xcv3=13;
else if(wdesc6a>5)xcv3=12;
else if(wdesc6a>2)xcv3=11;
else if(wdesc6a>=rth1)xcv3=10;

if(xcv1>9)var xcv0=xcv1-(5*(wdesc1<100));
else var xcv0=xcv1;pc81b=opt22[xcv0];
if(xcv0>4)icon2="3";
if(xcv0>9)icon2="4";
if(xcv2>9)var xcv0a=xcv2-(5*(wdesc2<100));
else var xcv0a=xcv2;pc81d=opt22[xcv0a];
if(xcv0>4 || xcv0a>4)wc2=0;
if(xcv3>9)var xcv0b=xcv3-(5*(wdesc6<100));
else var xcv0b=xcv3;

if(!dayset1 &&(icon2=="0" || icon2=="1" || icon2=="3"))icon2="8";

wdesc3=opt21[xcv0];
if(xcv0==2 && xcv0a<2)wdesc3="partly cloudy";
if(!dayset1)wdesc3=replc(wdesc3,"sunny","clear");

var wdesc8="",wdesc5=opt20[xcv0][xcv0b],wdesc5a=opt20[xcv0b][xcv0a];

if(wdesc1a>=rth1 && wdesc1a<0.5){if(wdesc1<100)wdesc3="a few "+wdesc3;else wdesc3="some patchy "+wdesc3;}
if(wdesc1a>=rth1){if(wdesc1<100)wdesc3="sunny intervals and "+wdesc3;
else wdesc3="mostly cloudy with "+wdesc3;
if(!dayset1)wdesc3=replc(wdesc3,"sunny","clear");}

if((wdesc5.substring(0,1)!="z" && !dayset2)||(wdesc5.substring(0,1)=="z" && !dayset1)){wdesc5=replc(wdesc5,"sunnier","clearer");wdesc5=replc(wdesc5,"bright","clear");wdesc5=replc(wdesc5,"sunny","clear");}

if(wdesc5.substring(0,1)=="z")
{wdesc3=wdesc5.substring(2,300);
if(wdesc1a>=rth1 && wdesc1a<0.5){if(wdesc1<100)wdesc3="a few "+wdesc3;else wdesc3="some patchy "+wdesc3;}
if(wdesc1a>=rth1){if(wdesc1<100)wdesc3="sunny intervals and "+wdesc3;
else wdesc3="mostly cloudy with "+wdesc3;
if(!dayset1)wdesc3=replc(wdesc3,"sunny","clear");}
}
else {wdesc3+=wdesc5+wxds1;pc81c=-4;}

wdesc3=cap1(wdesc3);

if(!dayset3){wdesc5a=replc(wdesc5a,"sunnier","clearer");wdesc5a=replc(wdesc5a,"bright","clear");wdesc5a=replc(wdesc5a,"sunny","clear");}
if(wdesc5a.substring(0,1)!="z" && !same(wdesc8,wdesc5a,"heavier") && !same(wdesc8,wdesc5a,"lighter")){wdesc8+=" "+wdesc5a;
if(xcv0==xcv0a)wdesc8+=" again ";
if(same(wdesc3,wxds2,"morning")||same(wdesc3,wxds2,"afternoon")||same(wdesc3,wxds2,"evening"))if(wdesc8.indexOf("lighter")==-1)wxds2=" later";
wdesc8+=wxds2;pc81c=-4;}
wdesc8=replc(wdesc8," , ","");

//init clock (wx update at 06:00);
if(wxp2[2]!="-1" && tud3-tud6<97200000)clk1=108000+(tud6-tud3)/1000;
clock();

var tc2=parseFloat(temp),tc3=0,tc2d=parseFloat(dew),tc4=parseFloat(windch),tc5=0,ws1=parseFloat(avgspd);

if(temp<-20)tc2=-25;
if(temp>35)tc2=35;
tc3=parseInt((tc2+25)/5);

if(dew<-20)tc2d=-25;
if(dew>35)tc2d=35;

if(windch<-20)tc4=-25;
if(windch>35)tc4=35;
tc5=parseInt((tc4+25)/5);
if(parseFloat(avgspd)>30)ws1=30;
if(parseFloat(avgspd)<5)ws1=0;
var t1="st",t1desc="Temperature steady";
if(tempchangehour>0){t1="u1";t1desc="Temperature rising slowly"}
if(tempchangehour>2){t1="u2";t1desc="Temperature rising"}
if(tempchangehour>3){t1="u3";t1desc="Temperature rising quickly"}
if(tempchangehour>4){t1="u4";t1desc="Temperature rising very rapidly"}
if(tempchangehour<0){t1="d1";t1desc="Temperature falling slowly"}
if(tempchangehour<-2){t1="d2";t1desc="Temperature falling"}
if(tempchangehour<-3){t1="d3";t1desc="Temperature falling quickly"}
if(tempchangehour<-4){t1="d4";t1desc="Temperature falling very rapidly"}
var t2="st",t2desc="Barometer steady";
if(pressurechangehourinmb>0){t2="u1";t2desc="Barometer rising slowly"}
if(pressurechangehourinmb>0.5){t2="u2";t2desc="Barometer rising"}
if(pressurechangehourinmb>1.2){t2="u3";t2desc="Barometer rising quickly"}
if(pressurechangehourinmb>2){t2="u4";t2desc="Barometer rising very rapidly"}
if(pressurechangehourinmb<0){t2="d1";t2desc="Barometer falling slowly"}
if(pressurechangehourinmb<-0.5){t2="d2";t2desc="Barometer falling"}
if(pressurechangehourinmb<-1.2){t2="d3";t2desc="Barometer falling quickly"}
if(pressurechangehourinmb<-2){t2="d4";t2desc="Barometer falling very rapidly"}

//new temp;
var otemp=temp;
temp=newtemp(temp);nexttemp=newtemp(nexttemp);tempstart=newtemp(tempstart);tempend=newtemp(tempend);tc2=temp;if(temp<-20)tc2=-20;if(temp>35)tc2=35;
tc3=parseInt((tc2+25)/5);
tc3e=parseInt((tc2+32.5)/5);

//new dewpoint;
dew=newdew(dew);nextdew=newdew(nextdew),dewstart=newdew(dewstart);

if(dew<-20)tc2d=-20;if(dew>35)tc2d=35;
var dew1=dew;

//new humidity;
var rh = Math.round(100.0 * (Math.pow((112 - (0.1 * temp) + dew1)/(112 + (0.9 * temp)),8)));
if(rh>100)rh=100;
if(rh>85)h81=-1;

//new air pressure;
var slbaro=parseFloat(baro)+(h0/9.7536);
slbaro=Math.round(slbaro*10)/10;
baro=parseFloat(baro)+(h0/9.7536)-(h1/9.7536);
baro=Math.round(baro*10)/10;

//new windspeed;
windstart=newwind(windstart);
ws10=newwind(ws10);ws1=ws10;if(parseFloat(ws10)>30)ws1=30;if(parseFloat(ws10)<5)ws1=0;
if(ws10<=0)ws10=0;

//new heat index;
var hxt = temp*(9/5) + 32,t22=hxt*hxt,rh2=rh*rh,hxt1=temp,index=hxt;
if (hxt>=80&&rh>=40){
index =(-42.379)+(2.04901523*hxt)+(10.1433127*rh)-(0.22475541*hxt*rh)-(6.83783e-3*t22)-(5.481717e-2*rh2)+(1.22874e-3*t22*rh)+(8.5282e-4*hxt*rh2)-(1.99e-6*t22*rh2);
var hxt1 = Math.round((index-32)*(5/9));
}

//new windchill / Heat Index combi..;
windch=35.74+0.6215*index-35.75*Math.pow(ws10,0.16)+0.4275*index*Math.pow(ws10,0.16);
windch=Math.round((windch-32)*(5/9));
if(ws10<4)windch=hxt1;
tc4=windch;if(windch<-20)tc4=-20;if(windch>35)tc4=35;
tc5=parseInt((tc4+25)/5);

//wind descriptions;
bftspeedtxt="Hurricane";beafort="12";
for(z=11;z>=0;z--){if(ws10<=bf1[(z*4)+1]){bftspeedtxt=bf1[(z*4)+2];beafort=bf1[z*4];w81=bf1[3+z*4]}}
if(ws10>=25)ww3=1;

//proper wind direction;
var wd1=windir.split(" "),windir="";
for(z=0;z<wd1.length;z++)if(wd1[z]!="then")windir+=cap1(wd1[z])+" ";else windir+=wd1[z]+" ";

//rain descriptions;
//rr1 - array length, rr2 - value, rr3 - value sum, rr3a - value count, rr4 - event flag, rr5 - gap count, rr6 - event count, rr7=24hr rain;
var tperiod=1;//test period in 1hr default=2;
var of1=0;//offset period in hours;
var tp1=tperiod*6,tp1a=of1*6,rr1=db25.length-1,rr2=0,rr3=0,rr3a=0,rr4=1,rr5=0.1,rr6=0,rr7=0;
for(z=1;z<rr1;z++){rr7+=parseFloat(db25[z][9]);
rr7=Math.round(rr7*10)/10};
for(z=0;z<6;z++){
rr2=parseFloat(db25[rr1-z][9]);if(rr2>0){rr3+=rr2;rr3a++;rr4=1}else {rr5++;if(rr4){rr6++;rr4=0;}}
}

var rr2b=0,rr3b=0,rr3ab=0,rr4b=1,rr5b=0.1,rr6b=0;
for(z=6;z<12;z++){
rr2b=parseFloat(db25[rr1-z][9]);if(rr2b>0){rr3b+=rr2b;rr3ab++;rr4b=1}else {rr5b++;if(rr4b){rr6b++;rr4b=0;}}
}

var rr2c=0,rr3c=0,rr3ac=0,rr4c=1,rr5c=0.1,rr6c=0;
for(z=12;z<24;z++){
rr2c=parseFloat(db25[rr1-z][9]);if(rr2c>0){rr3c+=rr2c;rr3ac++;rr4c=1}else {rr5c++;if(rr4c){rr6c++;rr4c=0;}}
}

//dp changes - nowcast
if(wx0){var dewchange1=(parseFloat(db25[rr1][10])+parseFloat(db25[rr1-1][10]))/2,dewchange2=(parseFloat(db25[rr1-2][10])+parseFloat(db25[rr1-3][10]))/2,tempchange1=(parseFloat(db25[rr1][6])+parseFloat(db25[rr1-1][6]))/2,tempchange2=(parseFloat(db25[rr1-2][6])+parseFloat(db25[rr1-3][6]))/2,wschange1=(parseFloat(db25[rr1][4])+parseFloat(db25[rr1-1][4]))/2,wschange2=(parseFloat(db25[rr1-2][4])+parseFloat(db25[rr1-3][4]))/2;
var nextdew=dew+dewchange1-dewchange2,nexttemp=temp+tempchange1-tempchange2,nextwind=ws10+wschange1-wschange2;
var wschangehour=(wschange1-wschange2)*3;
var nextcloudht1=parseInt(h0+((temp-dew)/(tt2-tt2d)))
var nextcloudht2=parseInt(h0+((nexttemp-nextdew)/(tt2-tt2d)));
var nextcloudht=parseFloat(cloudht)+nextcloudht2-nextcloudht1;
cloudchange=nextcloudht-cloudht;cloudchange=cloudchange*18;
}


var t22="st",t22desc="Cloud height steady";
if(cloudchange>0){t22="u1";t22desc="Cloud lifting slowly"}
if(cloudchange>100){t22="u2";t22desc="Cloud lifting"}
if(cloudchange>500){t22="u3";t22desc="Cloud lifting quickly"}
//if(cloudchange>800){t22="u4";t22desc="Cloud lifting very rapidly"}
if(cloudchange<0){t22="d1";t22desc="Cloud lowering slowly"}
if(cloudchange<-100){t22="d2";t22desc="Cloud lowering"}
if(cloudchange<-500){t22="d3";t22desc="Cloud lowering quickly"}
if(cloudchange<-800){t22="d4";t22desc="Cloud lowering very rapidly"}

var wsp22="st",ws22desc="Wind speed steady";
if(wschangehour>0){wsp22="u1";ws22desc="Wind increasing slowly"}
if(wschangehour>0.5){wsp22="u2";ws22desc="Wind increasing"}
if(wschangehour>1 && ws10>10){wsp22="u3";ws22desc="Wind increasing quickly"}
if(wschangehour>5 && ws10>15){wsp22="u4";ws22desc="Wind increasing very rapidly"}
if(wschangehour<0){wsp22="d1";ws22desc="Wind decreasing slowly"}
if(wschangehour<-0.5){wsp22="d2";ws22desc="Wind decreasing"}

//type of precipitation
var ptype="",ptype1="",wsnow1=100;

//snow prediction system#1;
var sdew1=0,sdew2=0,sdew9=dewstart,sdew10=nextdew;if(sdew9>tempstart)sdew9=tempstart;if(sdew10>nexttemp)sdew10=nexttemp;
var sdewsys=new Array(4),sdew4=parseFloat(sdew9)+parseFloat(tempstart*(0+(windstart/wsnow1))),sdew5=parseFloat(sdew10)+parseFloat(nexttemp*(0+(nextwind/wsnow1)));
sdewsys[0]=new Array("","then sleet","then sleet and snow","then snow");
sdewsys[1]=new Array("then rain","","then snow","then snow");
sdewsys[2]=new Array("then rain","","","then snow");
sdewsys[3]=new Array("then rain","then sleet","then sleet","");
if(sdew4>=2){sdew1=0;ptype="rain"}
//spring fix
//if(sdew4<2){sdew1=1;ptype="hail";}
if(sdew4<2){sdew1=1;ptype="sleet";}
if(sdew4<1.5){sdew1=2;ptype="sleet and snow";}
if(sdew4<0.5){sdew1=3;ptype="snow"}
if(sdew4<2 && parseFloat(tempstart*windstart/wsnow1)>0.3){ptype=replc(ptype,"snow","hail or snow");
ptype=replc(ptype,"sleet","hail");if(sdew1==1)ww11=1;}
if(ptype=="hail and hail or snow")ptype="hail or snow";
if(sdew4<2 && parseFloat(tempstart*windstart/wsnow1)>5){ptype=replc(ptype," or snow","");ww11=1;}
if(sdew5>=2){sdew2=0;ptype1="rain"}

//spring fix
//if(sdew5<2){sdew2=1;ptype1="hail";}
if(sdew5<2){sdew2=1;ptype1="sleet";}
if(sdew5<1.5){sdew2=2;ptype1="sleet and snow";}
if(sdew5<0.5){sdew2=3;ptype1="snow"}
if(sdew5<2 && parseFloat(nexttemp*nextwind/wsnow1)>0.3 ){ptype1=replc(ptype1,"snow","hail or snow");
ptype1=replc(ptype1,"sleet","hail");if(sdew2==1)ww11=1;}
if(ptype1=="hail and hail or snow")ptype1="hail or snow";
if(sdew5<2 && parseFloat(nexttemp*nextwind/wsnow1)>5){ptype1=replc(ptype1," or snow","");ww11=1;}
ptype+=" "+sdewsys[sdew1][sdew2];
if(ptype=="sleet and snow then snow")ptype="sleet then snow";
ptype=replc(ptype,"rain then rain","rain");

if(sdew1+sdew2==0)wdesc8=replc(wdesc8,"x showers","showers");
wdesc8=cap1(wdesc8);
if(wdesc8!="")wdesc8=". "+wdesc8;
wdesc8=replc(wdesc8,".  b ",", b ");
wdesc8=replc(wdesc8,"x",ptype1);wdesc8=replc(wdesc8,"x",ptype1);
wdesc8=replc(wdesc8,". r",". R");
wdesc8=replc(wdesc8,". s",". S");

if(xcv0a!=xcv0b)wdesc3+=wdesc8;
wdesc3=replc(wdesc3," , ","");
wdesc3=replc(wdesc3,"b ",", b ");
wdesc3=replc(wdesc3,"- ",", then ");
wdesc3=replc(wdesc3,"- ",", then ");

if(!sdew1)wdesc3=replc(wdesc3,"x showers","showers");
wdesc3=replc(wdesc3,"x",ptype);wdesc3=replc(wdesc3,"x",ptype);
wdesc3=replc(wdesc3," b "," becoming ");wdesc3=replc(wdesc3," b "," then ");
wdesc3=replc(wdesc3,", ,",", ");
wdesc3=replc(wdesc3,".  ,",", ");
wdesc3=cap1(wdesc3);
var ind1=db25[rr1][13],ind2="",clart1=(curw2[1]>0 && curw2[7]<=0),ww77=0;
var li1=new Array(0,1,2,4,6,8,10,10),li2=new Array(0,1,3,5,7,9,10,10),li3=0,li4=parseInt(liftedwx[wxp8]);li4--;if(li4>0)li4=0;li4=li4*-1;li4=Math.round(li4);if(li4>7)li4=7;if(parseInt(capewx[wxp8])<1000)li3=li1[li4];else li3=li2[li4];
if(curw2[2]>0)ww7=1;if(li4>0)ww77=1;
if(li4>2)wdesc3="Thunderstorms. "+wdesc3;
else if(ww77>0||(ww7 && wxf0))wdesc3="Thundery. "+wdesc3;

var etaptype=ptype;

//sky decsriptions for main board;
var icon1="0";
var wc1="",raind1=ptype;
if(cldesc=="4"){if(dayset0){wc1="Overcast";icon1="2"}else {wc1="Overcast";icon1="2"}}
else if(cldesc=="3"){if(dayset0){wc1="Mostly cloudy";icon1="2"}else {wc1="Mostly cloudy";icon1="8"}}
else if(cldesc=="2"){if(dayset0){wc1="Scattered cloud, sunny periods";icon1="1"}else {wc1="Clear periods";icon1="8"}}
else if(cldesc=="1"){if(dayset0){wc1="Mainly sunny";icon1="0"}else {wc1="Mainly clear sky";icon1="8"}}
else if(cldesc=="0"){if(dayset0){wc1="Dry & sunny";icon1="0"}else {wc1="Clear sky";icon1="8"}}
//wc1+="  ";

//Ice prediction
if(wxp2[2]!="-1")cldesc=cldesc1(wdesc1);
var sws=3,olc1=4-parseInt(cldesc),dayset1f=dayset1c;
if(olc1>1.5)olc1=1.5;
if(ws10>10)sws=0;
else if(ws10>7)sws=1;
else if(ws10>4)sws=2;
else if(ws10>2)sws=3;

if(wx0)dayset1f=nowt1;
if(ww15 || temp<0.3 || (dayset1f>(ssth-30)||dayset1f<(srth+60))&&temp-(sws*olc1)<0.3){ww2=1;ww21=1;}

//Precipitation
//override (manual rain data is kept on log also);
if(parseInt(curw2[0])>4 && clart1){wc2=0;rr6=1;rr5=0;tp1=10;rr3a=1;if(curw2[0]=="5")rr3=0.05;else if(curw2[0]=="6")rr3=0.1;else if(curw2[0]=="7")rr3=0.2;else if(curw2[0]=="8")rr3=0.3;else if(curw2[0]=="9")rr3=0.4;else if(curw2[0]=="10")rr3=0.5}
if(rr3+rr3b>0){
icon1="4";var p1="",i1="",i1a=rr3/rr3a,i1ab=rr3b/rr3ab,ft1="frequent ",f1a=rr6,f1ab=rr6b,p1a=(tp1-rr5)/rr6,t10="",t11="",t10a=i1a-i1ab,t11a=f1a-f1ab;
//if(p1a<10)p1="";

var prdx=new Array("showers of ","spells of ","very heavy ","very heavy ","heavy ","quite heavy ","moderate ","light ","drizzle ")
//compensate;
if(wdesc1<100){p1=prdx[0];}
else {
ft1=prdx[1];}
if(i1a>=0.6){i1=prdx[2];}
if(i1a>0.4){i1=prdx[3];}
if(i1a<=0.4)i1=prdx[4];
if(i1a<=0.3)i1=prdx[5];
if(i1a<=0.2)i1=prdx[6];
if(i1a<=0.1)i1=prdx[7];
if(f1a<4 && f1a>1)ft1="";
if(f1a<=1 && wdesc1<100)ft1="occasional ";
if(rr3==0 && rr3b>0){ft1="recent ";icon1="3";}
if(t10a>0)t10=" becoming heavier";
else if(t10a<0)t10=" becoming lighter";
var wc1c=ft1+p1+i1+raind1+t10;wc1c=cap1(wc1c);
wc1=wc1c;
}
if(ww7){icon1="7";icon2="7";}

if(rr3+rr3b+rr3c && wx0)wc2=0;
wc1a=cap1(wc1);
wdesc3=cap2(wdesc3);

//conditions/warnings;
var f3="",f4="",fm1="";if(temp<=0.5){f3="Freezing ";f4="and Icy";}

//check avg 4hr windspeed;
wsa1=0;
for(z=0;z<24;z++){
wsa1+=parseFloat(db25[rr1-1-z][4]);
}
wsa1=wsa1/24;
//compensate to 290m / 0.2;
var height=290,roughness=0.2,refHeight=h0,refRoughness=ruf1,wsa2=wsa1*Math.log(height/roughness)/Math.log(refHeight/refRoughness);

//fog warnings;clar1[1] is the height of lowest cloud/100 (if any) from METAR;
//h3ca - offest in meters in rain, h2b - error allowance, clar1b - low cloud limit/100;
//wc2 - dry flag;ww1 - fog icon flag;wsa2 - avg 4hr w/s compensated to altitude;
//wc12=fog limit error in forecasts;

var h3c=0,h2b=50+(100*fgset),clar1a=1000,clar1b=50,wc12=250;
//ovverride adjustments;
if(curw2[4]>0){h2b-=parseInt(curw2[5]);clar1a=0;}
if(clar1[0]=="S"||clar1[0]=="B"||clar1[0]=="O"||clar1[0]=="F")clar1a=parseFloat(clar1[1]);
if(!wc2)h3c+=50;
if(wsa2<2)h3c-=50;
if(cloudht-h1+h3c<=h2b&&((wxf0 && clar1a<=clar1b && parseInt(cldesc)>=2)||(!wxf0 && h1>wc12 && (pc81b<0 || pc81d<0))))ww1=1;
if(wxf0 && fgset && h1<=250)ww1=1;
//temp descriptions;
var tc12=temp-windch,tc13=" a little ";
if(tc12>1.5)tc13="";
if(tc12>4)tc13=" much ";
if(tc12>10)tc13=" very much ";

//baro gif;			  
var b1=parseFloat(slbaro);if(b1<940)b1=940;else if(b1>1050)b1=1050;

var wdesc30=(wx0 && rr3)||(wx0 && rr3+rr3b && xcv0<5)|| (wx0 && curw2[1]>0 && curw2[7]<=0);

//adjust presentation;
temp=Math.round(temp*10)/10;
cloudht=Math.round(cloudht/10)*10;
windch=Math.round(windch);

if(wdesc1a>crw5 || wdesc6a>crw5 || wdesc2a>crw5){ww8=1;
if(sdew1+sdew2){ww9=1;icon1="6";icon2="6";}
if(sdew1>1||sdew2>1 || ww11){ww4=1;ww2=1;icon1="5";icon2="5";}
if(sdew1+sdew2==6&&ws10>32 && !ww11)ww5=1;
}

if(xcv0>4){if(sdew1>1 || sdew2>1){icon1="5";icon2="5";}
else if(sdew1>0 || sdew2>0){icon1="6";icon2="6";}}

ex1a=tud6+(parseInt(wxp2[0])*10800000)-0;
ex1=new Date(ex1a);
ex3=ex1.getDay();
ex4=ex1.getMonth()+1;

//ww7=0;
if(parseInt(temp)>70)location.href="http://www.nowcast.co.uk/fault.htm";

hss1();
