   var allDays;
   var todayDate=new Date();
   var today=new Date();
   var thisMonth=todayDate.getMonth()+1;    // get current month (1-12)
   var curMonth=todayDate.getMonth()+1;     // get current month (1-12)
   var thisYear=todayDate.getFullYear();       // get current year
   var currYear=todayDate.getFullYear() ;      // get current year
   var satO;
   var iNum;
   var leadTime;
   var cutOff;
   var moreBadDates;
   var iBD;
   var wkday = new Array();
   wkday[0] = 'Sunday';
   wkday[1] = 'Monday';
   wkday[2] = 'Tuesday';
   wkday[3] = 'Wednesday';
   wkday[4] = 'Thursday';
   wkday[5] = 'Friday';
   wkday[6] = 'Saturday';
   var timer1 = null;
   var timer2 = null;


function buildCal(m, y, cM, cH, cDW, cD, brdr, satOnly) {
//alert('today='+today);
//   var satO = checkSaturday();
   var satO = 1;
   iBD = 0;
   checkLeadTimes();
   var mn=['January','February','March','April','May','June','July','August','September','October','November','December'];
   var dim=[31,28,31,30,31,30,31,31,30,31,30,31];
   var oD = new Date(y, m-1, 1);
   oD.od=oD.getDay()+1;
   var todayDate=new Date()
   var scanForToday=(y==todayDate.getFullYear() && m==todayDate.getMonth()+1)? todayDate.getDate() : 0
   dim[1]=(((oD.getFullYear()%100!=0)&&(oD.getFullYear()%4==0))||(oD.getFullYear()%400==0))?29:28;
   var t='<table  class="'+cM+'" cols="7" cellpadding="0" border="'+brdr+'" cellspacing="0"><tr align="center">';
   t+='<td align="left" class="'+cH+'"><strong><span class="calnextPrev" onclick="prevMonth()">&nbsp;<</span></strong></td><td colspan="5" align="center" class="'+cH+'">'+mn[m-1]+' - '+y+'</td><td align="right" class="'+cH+'"><strong><span class="calnextPrev" onclick="nextMonth()">>&nbsp;</span></strong></td></tr><tr align="center">';
   for(s=0;s<7;s++)t+='<td class="'+cDW+'">'+"SMTWTFS".substr(s,1)+'</td>';
   t+='</tr><tr align="center">';
//alert('allDays='+allDays);
   for(var i=1;i<=42;i++){
      var x=((i-oD.od>=0)&&(i-oD.od<dim[m-1]))? i-oD.od+1 : '&nbsp;';
      var yy=((i-oD.od>=0)&&(i-oD.od<dim[m-1]))? i-oD.od+1 : 0;
//      var goodDay = checkForBadDay(x,m,y);
      var goodDay = 'yes';
      if (x==scanForToday) {
         x='<span id="today">'+x+'</span>'
      } else {
//         if (((i==3|i==4|i==5|i==10|i==11|i==12|i==17|i==18|i==19|i==24|i==25|i==26|i==31|i==32|i==33|i==38|i==39|i==40&&x>=scanForToday+1&&x!='&nbsp;')&&satO==1)&&goodDay=='yes') x='<span class=dDays onclick="selectDate('+x+')">'+x+'</span>'
         if (((i==2|i==3|i==4|i==5|i==6|i==9|i==10|i==11|i==12|i==13|i==16|i==17|i==18|i==19|i==20|i==23|i==24|i==25|i==26|i==27|i==30|i==31|i==32|i==33|i==34|i==37|i==38|i==39|i==40&&x>=scanForToday+1&&x!='&nbsp;')&&satO==1)&&goodDay=='yes') x='<span class=dDays onclick="selectDate('+x+')">'+x+'</span>'
         if (((i==7|i==14|i==21|i==28|i==35&&x>scanForToday+1&&x!='&nbsp;')&&satO==0)&&goodDay=='yes') x='<span class=dDays onclick="selectDate('+x+')">'+x+'</span>'
         if (x>scanForToday&&allDays=='yes') x='<span class=dDays onclick="selectDate('+x+')">'+x+'</span>'
      }
      t+='<td class="'+cD+'">'+x+'</td>';
      if(((i)%7==0)&&(i<36))t+='</tr><tr align="center">';
   }
   return t+='</tr><tr><td colspan="6">&nbsp;</td><td><a href="javascript:calendarClose('+'0'+')"><B>Close</B></a></td></tr></table>';
}

function updateCal(themonth,num) {
   today=new Date();
   iNum = num;
   var noCals = 1;
   var calx;

   calendarClose();

   var calendarstr=buildCal(themonth, currYear, "calmain", "calmonth", "caldaysofweek", "caldays", 0, satO);
   calx = "calendarspace";
   calxdiv = createDynamicPopup(calx);

   var pos = getBounds("dDate"+iNum);
   hideSelects()

   calxdiv.innerHTML=calendarstr;
   calxdiv.style.display='block';
   w = 220;//calxdiv.offsetWidth;
   h = 220;

   var x = xOnPage(pos.x-200,w);
   var y = yOnPage(pos.y,h);
   calxdiv.style.left = x + 'px';
   calxdiv.style.top =  y + 'px';

   timer1 = window.setTimeout("calendarClose('')",25000);
}

function calendarClose(num) {
  showSelects();

  clearTimeout(timer1);
 	if (document.getElementById('calendarspace')) {
 	  document.getElementById('calendarspace').style.display='none';
  }
 	if (document.getElementById('calendarspace001')) {
 	  document.getElementById('calendarspace001').style.display='none';
  }
 	if (document.getElementById('calendarspace002')) {
    document.getElementById('calendarspace002').style.display='none';
  }
}

function prevMonth() {
//alert('prevMonth');
   if (curMonth>thisMonth|thisYear<currYear) {
      --curMonth;
      if (curMonth==0) {
         curMonth = 12;
         --currYear;
      }
      updateCal(curMonth,iNum);
   }
}

function nextMonth() {
//alert('nextMonth');
   ++curMonth;
   if (curMonth==13) {
      curMonth = 1;
      ++currYear;
   }
   updateCal(curMonth,iNum);
}

function thisMonth() {
//alert('thisMonth');
   updateCal(curMonth,iNum);
}

function checkSaturday() {
   var oRad = document.getElementById("carrierSel"+iNum);
   var val = oRad.value;
   var x = val.search(/Sat=YES/i);
   var res = 1;
   if (x>0) res = 0;
   x = val.search(/cut=/i);
   var y = val.search(/lead=/i);
   var s = val.substr(x+4,y-x-4);
//alert(val.substr(x+4,y-x-4));
   cutOff = parseFloat(s);
//alert('cutoff='+cutOff);
   x = val.search(/lead=/i);
   y = val.search(/val=/i);
   var s = val.substr(x+5,y-x-5);
   leadTime = parseFloat(s);
//alert('leadTime='+leadTime);
   return res;
}

function clearDate(dd,iNum) {
   var oRad = document.getElementById(dd);
   oRad.value = 'dd/mm/yyyy';
   doTotals(iNum);
}

function killDate(dd) {
   document.getElementById(dd).style.display='none';
}

function selectDate(day) {
   var oD = document.getElementById("dDate"+iNum);
   oD.value = day+'/'+curMonth+'/'+currYear;
   var calx = "calendarspace";
//alert('selectDate - '+calx);
   document.getElementById(calx).innerHTML='';
//   document.getElementById(calx).style.display='none';
   calendarClose();
   thisMonth=todayDate.getMonth()+1    // get current month (1-12)
   curMonth=todayDate.getMonth()+1     // get current month (1-12)
   thisYear=todayDate.getFullYear()       // get current year
   currYear=todayDate.getFullYear()       // get current year
}

function doTotals(iNum) {
   var oC = document.getElementById("js_carriage"+iNum);
   var oT = document.getElementById("js_total"+iNum);
//   var oX = document.getElementById("total_split");
//   var oXv = oX.value;
   var oXv = 1;
   var oN = "document.carrier.carrierSel"+iNum;
   var oM = eval(oN);
   var i = oM.selectedIndex;
   var v = oM.options[i].value;
   var l = v.length;
   var x = v.search(/val=/i);
   var s = v.substr(x+4,l-x-4);
   var fT = parseFloat(oT.value);
   var fS =parseFloat(s);
   var jV;
   fT = fT+fS;
   fT = doDecimals(fT,2);
   document.getElementById('carr'+iNum).innerHTML = doDecimals(fS,2);
   document.getElementById('tot'+iNum).innerHTML = fT;
   oC.value = doDecimals(oC.value,2);
//alert(iNum);
//alert(oXv);
   var oTT = document.getElementById('js_carriage'+iNum);
   oTT.value = fS;
   var gT = 0;
   for (var j=1; j<=oXv; j++) {
      jV = right3(j.toString());
      oTT = document.getElementById('js_true_total'+jV);
//      oTT = document.getElementById('js_true_total'+j.toString());
      gT = gT+parseFloat(oTT.value);
      oTT = document.getElementById('js_carriage'+jV);
//      oTT = document.getElementById('js_carriage00'+j.toString());
      gT = gT+parseFloat(oTT.value);
   }
   document.getElementById('grandTotal').innerHTML = doDecimals(gT,2);
}

function checkForBadDay(d,m,y) {
   d = right2(d);
   m = right2(m);
   var dat = d+'/'+m+'/'+y
   var bd = badDate.join('|');
   var answer = 'no';
   bd = bd+'|'+moreBadDates.join('|');
   var mbd = moreBadDates.join('|');
//alert('dat='+dat+' - mbd='+mbd);
   var j = bd.indexOf(dat);
   if (j<0) answer = 'yes';
//alert(answer);
   return answer;
}
   
function checkLeadTimes() {
   moreBadDates = new Array();
//   incDate();
//alert(today.getHours(today));
//alert(cutOff);
   if (parseFloat(today.getHours(today))>cutOff) {incDate();}
   if (today.getDay()==6) incDate();
   if (today.getDay()==0) incDate();
   if (leadTime>1) {
      for (var i=1; i<=leadTime; i++) {
//alert('i-'+i+' - leadtime='+leadTime);
         incDate();
      }
   }
}
   
function incDate() {
   var tdgY = parseInt(today.getYear());
   var dinms = today.getTime();
//alert('1 '+dinms);
   dinms = dinms+( 60 * 60 * 1000 * 24);
//alert('2 '+dinms);
   today.setTime(dinms);
   dinms = today.getTime();
//alert('3 '+dinms);
   if (tdgY<1000) tdgY=tdgY+1900;
   bd = right2(today.getDate())+'/'+right2(parseInt(today.getMonth()+1,10))+'/'+tdgY;
//   bd = right2(today.getDate())+'/'+right2(parseInt(today.getMonth()+1,10))+'/'+parseInt(1900+today.getYear());
//alert('iBD='+iBD+' - bd='+bd);
   moreBadDates[iBD] = bd;
   iBD++;
}

function right2(x) {
   x = '00'+x;
   var xl = x.length;
   return x.substr(xl-2,2)
}

function right3(x) {
   x = '000'+x;
   var xl = x.length;
   return x.substr(xl-3,3)
}
