 var g_tid=0;
 var g_cP,g_eD,g_eDP,g_dmin,g_dmax;
 var g_fNoCal=false;
 var doValidation = true;

 
 function showCalendar(element) {
 	doValidation = false;
 	var fdt = document.getElementById("fdt");
 	if(fdt.disabled == true)
 	{
 		return;
 	}
    var startDate=(arguments.length==2)?arguments[1]:defStartDate;
    startDate = (parseDate(startDate)==null)?defStartDate:startDate;
    //var endDate=(arguments.length==3)?arguments[2]:defEndDate;
        
    if (calHandle == null){return;}
 
    element.select();
    clearTimeout(g_tid);
 
    if(g_fNoCal) {g_fNoCal=false;return;}
 
    if(g_calShown && element==g_eD) { return;}
 
    g_calShown = true;
    g_calCB = null;
    g_cP=element;
    g_eD=element;
    g_eDP=null;
    g_dmin=startDate;
    g_dmax=defEndDate;
    DoCal();
 }
 
 function hideCalendar(e)
 {
     if (hideCal) {
     if (calHandle!=null) {
         clearTimeout(g_tid);
         //CalSetFocus(g_eInp);
         calHandle.style.visibility="hidden";
         SetCalShown(false);
     }}
 }
 
 var defStartDate = getTodayDate();
 var defEndDate = '';
 
 document.onclick = hideCalendar;
 
 
 
 function DoCal(){PosCal(g_cP);
 
 DoCal1(g_eD,g_eDP,g_dmin,g_dmax);}
 
 function getScrollTop()
 {
     if(document.documentElement.scrollTop) return document.documentElement.scrollTop;
     if(document.body.scrollTop) return document.body.scrollTop;
     if(window.pageYOffset) return window.pageYOffset;
     return 0;
 }
 
 function PosCal(cP)
 {
     var dB=document.body;var eL=0;var eT=0;
     for(var p = cP; p && p.tagName != 'BODY'; p = p.offsetParent){
         eL += p.offsetLeft;
         eT += p.offsetTop;
     }
     var eH=cP.offsetHeight;
     var dH=parseInt(calHandle.style.height);
     var sT=getScrollTop();
     if(eT-dH >= sT && eT + eH + dH > getWinHeight() + sT) eT -= dH;
     else eT += eH;
     calHandle.style.left = eL+'px';
     calHandle.style.top = eT+'px';
 }
 
 function getWinHeight() {
 	 this.height = 0;
 	 if (window.innerHeight) this.height = window.innerHeight - 18;
 	 else if (document.documentElement && document.documentElement.clientHeight)
 	 this.height = document.documentElement.clientHeight;
 	 else if (document.body && document.body.clientHeight)
 	 this.height = document.body.clientHeight;
 }
 
 function CalSetFocus(e){if(e){g_fNoCal=true;e.focus();setTimeout("EndCalFocus()", 200);}}
 function EndCalFocus(){g_fNoCal=false;}
 
 function CalDateSet(eInp,date,giveFocus)
 {
     eInp.value = formatDate(date, dateFormat);
     if(!giveFocus)
     CalSetFocus(eInp);
 }
 
 var g_calShown = false;
 function SetCalShown(fcshown){g_calShown=fcshown;
 
     calHandle.style.visibility="hidden";
     getObj('PImg').style.visibility="hidden";
     getObj('NImg').style.visibility="hidden";}
 
 var g_calCB;
 function CalendarCallback(){if(g_calCB)g_calCB();}
 function SetCalendarCallback(cb){g_calCB=cb;}
 

 Function.prototype.bind = function(object) {
   var m_method = this;
   return function() {
     return m_method.apply(object, arguments);
   }
 }
 
 function atoi(a){var i=parseInt(a);return isNaN(i)?0:i;}
 
 var g_calMonthList = null;
 
 function calMonth(m,y,pObj,pxLeft,dtSelected)
 {
     this.m_month = m;
     this.m_year = y;
     this.m_pxLeft = pxLeft;
     this.m_domElement = null;
 
     this.getMonth = function(){return this.m_month;}
     this.getYear = function(){return this.m_year;}
     this.getPxLeft = function(){return this.m_pxLeft;}
     this.getDomElement = function(){return this.m_domElement;}
 
     this.createDomElement = function(m,y,dtSelected)
     {
         var mty=DOW(1,m,y);
         var c=getNoDaysInMonth(m,y);
 
         // Draw current month?
         var fCur=(y==new Date().getFullYear()&&m==new Date().getMonth());
 
         // Draw selected month?
         var fSel=(dtSelected&&y==dtSelected.getFullYear()&&m==dtSelected.getMonth());
 
         var datesE=document.createElement('div');
         datesE.className="dates";
 
         var szDays="";
         var dayE=null;
         for(i=0;i<mty;i++)
         {
             dayE=document.createElement('div');
             dayE.className="invalid";
             datesE.appendChild(dayE);
         }
         for(i=1;i<c+1;i++)
         {
             var d=new Date(y,m,i);
             if((!g_dtMin||d>=g_dtMin)&&(!g_dtMax||d<=g_dtMax)) // Valid date?
             {
                 var szClass="pointer";
                 if(fSel && i==dtSelected.getDate())szClass+=" picked";
                 if(fCur && i==new Date().getDate())szClass+=" today";
 
                 dayE=document.createElement('div');
                 dayE.className=szClass;
                 dayE.y = y; dayE.m = m; dayE.i = i;
                 dayE.onclick=DtClk;
                 dayE.onmousemove=DtHvr;
                 dayE.onmouseout=DtExt;
 
                 dayE.appendChild(document.createTextNode(i));
                 datesE.appendChild(dayE);
             }
             else
             {
                 dayE=document.createElement('div');
                 dayE.className="invalid";
                 dayE.appendChild(document.createTextNode(i));
                 datesE.appendChild(dayE);
             }
         }
 
         var titleE=document.createElement('div');
         titleE.className="title";
         titleE.appendChild(document.createTextNode(getFormattedMonthTitle(m,y)));
 
         var monthTopE=document.createElement('div');
         monthTopE.className="weekdays_top";
 
         var weekdaysE=document.createElement('div');
         weekdaysE.className="weekdays";
 
         for(i=0;i<7;i++)
         {
             var weekdayE=document.createElement('div');
             weekdayE.className="weekday";
             weekdayE.appendChild(document.createTextNode(rW[(i+weekStartDay)%7]));
             weekdaysE.appendChild(weekdayE);
         }
 
         var monthBodyE=document.createElement('div');
         monthBodyE.className="body";
         monthBodyE.appendChild(weekdaysE);
         monthBodyE.appendChild(datesE);
 
         var monthBotE=document.createElement('div');
         monthBotE.className="bottom";
 
         var monthE=document.createElement('div');
         monthE.className="month";
 
         monthE.appendChild(titleE);
         monthE.appendChild(monthTopE);
         monthE.appendChild(monthBodyE);
         monthE.appendChild(monthBotE);
 
         return monthE;
     }
 
     var verticalDiv = document.createElement('div');
 
     var tFill=document.createElement('div');    // title fill
     tFill.className="titleFill";
     tFill.style.height=22+"px";
     verticalDiv.appendChild(tFill);
 
     var cFill=document.createElement('div');     // calendar fill
     cFill.className="calendarFill";
     cFill.style.height=140+"px";
     verticalDiv.appendChild(cFill);
 
     verticalDiv.style.left=pxLeft - 1+"px";
     verticalDiv.style.position='absolute';
     pObj.appendChild(verticalDiv);
 
     this.m_domElement = this.createDomElement(this.m_month, this.m_year, dtSelected);
 
     // Position and insert
     this.m_domElement.style.left = pxLeft+"px";
     pObj.appendChild(this.m_domElement);
 
     return this;
 }
 
 var g_cMonthSpacing=1;
 var g_cMonthWidth=148;
 function calMonthList(cM,m,y)
 {
     this.m_pxLeft=0;
     this.m_pxLeftShift=g_cMonthWidth+g_cMonthSpacing;
     this.m_cMonths=cM; // # visible months
     this.m_rgcalMonths=new Array();
     this.m_bPrev=false;this.m_bNext=false;
     this.m_bReady=true;
     this.m_lowIndex=0;
 
     this.getFirstMonth = function(){return (this.m_rgcalMonths&&this.m_rgcalMonths.length>0)?this.m_rgcalMonths[0]:null;}
     this.getLastMonth = function(){return (this.m_rgcalMonths&&this.m_rgcalMonths.length>0)?this.m_rgcalMonths[this.m_rgcalMonths.length-1]:null;}
 
     this.init = function(m,y)
     {
         // Reset what we currently have
         this.m_pxLeft = 0;
         while( getObj("monthlist").childNodes.length ) getObj("monthlist").removeChild(getObj("monthlist").childNodes[0]);
         getObj("monthlist").style.left = this.m_pxLeft+"px";
         getObj("monthlist").style.top = "0px"; // set this so it can be accessed via script
 
         this.m_bPrev=false;this.m_bNext=false;
 
         for(var i=0;i<this.m_cMonths;i++)
         {
             this.m_rgcalMonths[i] = new calMonth(m,y,getObj("monthlist"),(i*this.m_pxLeftShift),g_dtPick);
 
             // increment month
             y=y+(m==11?1:0);
             m=(m+1)%12;
         }
     }
 
     this.navPrev = function()
     {
         if(this.m_bReady)    this.m_bReady = false;
         else                 return null;
 
         var cM=this.getFirstMonth().getMonth();
         var cY=this.getFirstMonth().getYear();
         var pY=cY-(cM==0?1:0);
         var pM=(cM+11)%12;
 
         // Create and draw the new month
         var cPxLeft = this.getFirstMonth().getPxLeft();
         var prevMonth = new calMonth(pM,pY,getObj("monthlist"),cPxLeft-this.m_pxLeftShift,g_dtPick);
 
         // Update visible month array
         for(var i=this.m_cMonths-1;i>0;i--) this.m_rgcalMonths[i]=this.m_rgcalMonths[i-1];
         this.m_rgcalMonths[i] = prevMonth;
 
         // Scroll the new month into view
         this.m_pxLeft += this.m_pxLeftShift;
         scrollAction(getObj("monthlist"), null, new position(this.m_pxLeft,null), null);
         this.m_bPrev = true;
     }
 
     this.navNext = function()
     {
         if(this.m_bReady)    this.m_bReady = false;
         else                 return null;
 
         var cM=this.getLastMonth().getMonth();
         var cY=this.getLastMonth().getYear();
         var nY=cY+(cM==11?1:0);
         var nM=(cM+1)%12;
 
         // Create and draw the new month
         var cPxLeft = this.getLastMonth().getPxLeft();
         var nextMonth = new calMonth(nM,nY,getObj("monthlist"),cPxLeft+this.m_pxLeftShift,g_dtPick);
 
         // Update visible month array
         for(var i=0;i<this.m_cMonths-1;i++) this.m_rgcalMonths[i]=this.m_rgcalMonths[i+1];
         this.m_rgcalMonths[i] = nextMonth;
 
         // Scroll the new month into view
         this.m_pxLeft -= this.m_pxLeftShift;
         scrollAction(getObj("monthlist"), null, new position(this.m_pxLeft,null), null);
         this.m_bNext = true;
     }
 
     this.cleanList = function()
     {
         if(this.m_bPrev)
         {
             // remove month & fill
             if(this.m_lowIndex == 0)
             {
                 getObj("monthlist").removeChild(getObj("monthlist").childNodes[2]);
                 getObj("monthlist").removeChild(getObj("monthlist").childNodes[2]);
             }
             else
             {
                 getObj("monthlist").removeChild(getObj("monthlist").firstChild);
                 getObj("monthlist").removeChild(getObj("monthlist").firstChild);
             }
             this.m_lowIndex = 1;
             this.m_bPrev = false;
         }
         else if(this.m_bNext)
         {
             // remove month & fill
             if(this.m_lowIndex == 0)
             {
                 getObj("monthlist").removeChild(getObj("monthlist").firstChild);
                 getObj("monthlist").removeChild(getObj("monthlist").firstChild);
             }
             else
             {
                 getObj("monthlist").removeChild(getObj("monthlist").childNodes[2]);
                 getObj("monthlist").removeChild(getObj("monthlist").childNodes[2]);
             }
             this.m_lowIndex = 0;
             this.m_bNext = false;
         }
         this.m_bReady = true;
     }
 
     this.init(m,y);
     return this;
 }
 
 
 function handlePrev()
 {
     g_calMonthList.navPrev();
     UpdPrev();
     UpdNext();
 }
 
 function handleNext()
 {
     g_calMonthList.navNext();
     UpdNext();
     UpdPrev();
 }
 
 function position(x,y)
 {
     this.m_x=x;
     this.m_y=y;
 
     this.getX=function(){return this.m_x;}
     this.getY=function(){return this.m_y;}
 
     return this;
 }
 
 function scrollAction(domElement,startPos,endPos,duration,iterCount)
 {
     this.m_domElement = domElement;
     this.m_startPos = startPos;
     this.m_endPos = endPos;
     this.m_duration = duration;
     this.m_iterCount = iterCount;
 
     var eL=atoi(this.m_domElement.style.left);
     var eT=atoi(this.m_domElement.style.top);
 
     // Default startPos to current position
     if(null==this.m_startPos || (null==this.m_startPos.getX() && null==this.m_startPos.getY()))
         this.m_startPos = new position(eL,eT);
     else
     {
         if(null==this.m_startPos.getX()) this.m_startPos = new position(eL,this.m_startPos.getY());
         if(null==this.m_startPos.getY()) this.m_startPos = new position(this.m_startPos.getX(),eT);
     }
 
     // Default endPos to current position
     if(null==this.m_endPos)
         this.m_endPos = new position(eL,eT);
     else
     {
         if(null==this.m_endPos.getX()) this.m_endPos = new position(eL,this.m_endPos.getY());
         if(null==this.m_endPos.getY()) this.m_endPos = new position(this.m_endPos.getX(),eT);
     }
 
     if(null==this.m_duration) this.m_duration = 200;    // Default is 1/5 sec
     if(null==this.m_iterCount) this.m_iterCount = 10;   // Move element 10 times
 
     // Calc pixels/iteration
     this.m_incX = (this.m_endPos.getX()-this.m_startPos.getX())/this.m_iterCount;
     this.m_incY = (this.m_endPos.getY()-this.m_startPos.getY())/this.m_iterCount;
 
     this.nextIter = function()
     {
         this.m_iter++;
         this.m_domElement.style.left = (this.m_startPos.getX()+Math.floor(this.m_iter*this.m_incX))+"px";
         this.m_domElement.style.top = (this.m_startPos.getY()+Math.floor(this.m_iter*this.m_incY))+"px";
         if(this.m_iter<this.m_iterCount) setTimeout("this.nextIter();",this.m_duration/this.m_iterCount);
         else                             setTimeout("g_calMonthList.cleanList();",this.m_duration/this.m_iterCount);
     }
 
     this.m_iter = 0;
     this.nextIter();
 
     return this;
 }
 
 var wp=window.parent;
 var cf=null;
 var g_fCL=false;
 var g_eInp=0;
 var g_dtMin,g_dtMax;
 var g_dtPick;
 
 function EvtObj(e){if(!e)e=window.event;return e;}
 
 function EvtTgt(e)
 {
     var el;
     if(e.target)el=e.target;
     else if(e.srcElement)el=e.srcElement;
     if(el.nodeType==3)el=el.parentNode; // defeat Safari bug
     return el;
 }
 
 
 
 g_fCL=true;
 
 function DoCal1(eD,eDP,dmin,dmax,cM)
 {
     var dt=parseDate(eD.value);
     if(null==dt&&null!=eDP){dt=parseDate(eDP.value);}
 
     g_dtPick=dt;
     if(dmin&&""==dmin)dmin=null;
     if(dmax&&""==dmax)dmax=null;
     if(null==dt)
     {
         // Check for valid min date and use that, else use current
         dt=new Date();
         if(dmin&&dt<new Date(dmin))dt=new Date(dmin);
     }
 
     SetMinMax(dmin?new Date(dmin):null,dmax?new Date(dmax):null);
 
     if(null==cM)cM=2; // Default to 2 month display
     UpdCal(cM,dt.getMonth(),dt.getFullYear());
 
     g_eInp=eD;
 
     // prevent Mozilla from flickering
     setTimeout("ShowCal()",1);
 }
 
 function ShowCal()
 {
     if ("none"==calHandle.style.display) {calHandle.style.display="block";}// FF drawing bug
     calHandle.style.visibility="visible";
 }
 
 function UpdCal(cM,m,y)
 {
     // Size the frame
     var pxSpacing = g_cMonthSpacing*(cM-1);
     getObj("OutBdr").style.width=((g_cMonthWidth*cM)+2+pxSpacing)+"px";
     getObj("InBdr").style.width=((g_cMonthWidth*cM)+pxSpacing)+"px";
     getObj("monthcontainer").style.width=((g_cMonthWidth*cM)+pxSpacing)+"px";
     getObj("NavNext").style.left = ((g_cMonthWidth*cM)+pxSpacing-19)+"px";
     calHandle.style.width=((g_cMonthWidth*cM)+2+pxSpacing)+"px";
     calHandle.style.height=186+"px";
 
     g_calMonthList = null;
     g_calMonthList = new calMonthList(cM,m,y);
 
     UpdNext();
     UpdPrev();
 }
 
 function UpdNext()
 {
     var currMonth=g_calMonthList.getLastMonth();
     var nm=currMonth.getMonth();
     var ny=currMonth.getYear();
 
     var hd=(!g_dtMax||!(ny>g_dtMax.getFullYear()||(ny==g_dtMax.getFullYear()&&parseInt(nm)>=g_dtMax.getMonth())));
     getObj('NImg').style.visibility=hd?"visible":"hidden";
 }
 
 function UpdPrev()
 {
     var currMonth=g_calMonthList.getFirstMonth();
     var pm=currMonth.getMonth();
     var py=currMonth.getYear();
 
     var hd=(!g_dtMin||!(py<g_dtMin.getFullYear()||(py==g_dtMin.getFullYear()&&parseInt(pm)<=g_dtMin.getMonth())));
     getObj('PImg').style.visibility=hd?"visible":"hidden";
 }
 function DtHvr(e){EvtTgt(EvtObj(e)).style.backgroundColor="#ea272a"; EvtTgt(EvtObj(e)).style.color="white";}
 function DtExt(e){EvtTgt(EvtObj(e)).style.backgroundColor=""; EvtTgt(EvtObj(e)).style.color="";}
 function DtClk(e)
 {
 	
     var element = EvtTgt(EvtObj(e));
     CalDateSet(g_eInp,new Date (element.y,element.m,element.i));
    // if(g_eInp.onblur){g_eInp.onblur();}
     calHandle.style.visibility="hidden";
     SetCalShown(false);
     CalendarCallback();
     if(g_eInp.id == "fdt")
     {
     	changeFromDate(true);
     }
     else if(g_eInp.id == "tdt")
     {
     	changeToDate(true);
     }
 }
 
 function SetMinMax(n,x){g_dtMin=n;g_dtMax=x;}
 
 // LOC Comment: Weekday abbrv.
 var rW=new Array(7);rW[0]="S";rW[1]="M";rW[2]="T";rW[3]="W";rW[4]="T";rW[5]="F";rW[6]="S";
function DOW(d,m,y){var dt=new Date(y,m,d);return(dt.getDay()+(7-weekStartDay))%7;}