// Inline drop-down calendar picker

// To add to an INPUT control, add the following attributes:
//
// onfocus="ShowCalendarOnClick(ELEMENT_TO_POSITION_UNDER,ELEMENT_TO_UPDATE,null,MIN_DATE,MAX_DATE,null,ABSOLUTE_DATES)"
// onfocusout="if(document.activeElement.nodeName!='IFRAME'){HideCalendar();}"
// onclick="event.cancelBubble=true;"
//
// Values:
//
//   ELEMENT_TO_POSITION_UNDER: The inputbox where the drop-down should align (usually this)
//   ELEMENT_TO_UPDATE: The inputbox containing the date string
//   MIN_DATE: Minimum date value permitted - either absolute (e.g. '12th January 2005') or relative days (e.g. -7)
//   MAX_DATE: Maximum date value permitted - either absolute (e.g. '31st December 2005') or relative days (e.g. 14)
//   ABSOLUTE_DATES: Indicates relative/absolute dates in MIN_DATE and MAX_DATE

document.write('<iframe style="display:none; position:absolute; width:148; height:194; z-index:30" ID="CalFrame" marginheight=0 marginwidth=0 noresize frameborder=0 scrolling=no src="/nrlib/calendar.htm"></iframe><scr' + 'ipt for=document event="onclick()">document.all.CalFrame.style.display="none";</scr' + 'ipt>');

var g_month=0;var g_day=0;var g_year=0;function GD(t){var l=t.length;if(0==l)return false;var cS='\0';var sS1="";var sS2="";for(var i=0;i<l;i++){var c=t.charAt(i);if(c!=' '&&!isdigit(c)){if(cS=='\0'&&(c=='/'||c=='-'||c=='.'))
{cS=c;sS1=t.substring(i+1,l);}else if(c==cS)sS2=t.substring(i+1,l);else return false;}}if(0==sS1.length)return false;var m=atoi(sS1);var d=atoi(t);var y;if(0!=sS2.length)y=atoi(sS2);else y=DefYr(m,d);
if(y<100)y+=2000;if(y<1601||y>4500||m<1||m>12||d<1||d>GetMonthCount(m,y))return false;g_month=m;g_day=d;g_year=y;return true;}
function DefYr(m,d){var dt=new Date();var yC=(dt.getYear()<1000)?1900+dt.getYear():dt.getYear();if(m-1<dt.getMonth()||(m-1==dt.getMonth()&&d<dt.getDate()))yC++;return yC;}
function atoi(s){var t=0;for(var i=0;i<s.length;i++){var c=s.charAt(i);if(!isdigit(c))return t;else t=t*10+(c-'0');}return t;}function CB(){event.cancelBubble=true}
function isdigit(c){return(c>='0'&&c<='9');}function GetMonthCount(m,y){var c=rM[m-1];if((2==m)&&IsLY(y))c++;return c;}function IsLY(y){if(0==y%4&&((y%100!=0)||(y%400==0))) return true;else return false;}
var rM=new Array(12);rM[0]=rM[2]=rM[4]=rM[6]=rM[7]=rM[9]=rM[11]=31;rM[3]=rM[5]=rM[8]=rM[10]=30;rM[1]=28;var g_eC=null;var g_eCV="";

function ShowCalendar(eP,eD,eDP,dmin,dmax,fnCB,absdt)
{
var dF=document.all.CalFrame;
var wF=window.frames.CalFrame;
if(null==wF.g_fCalLoaded||false==wF.g_fCalLoaded)
{
	alert("Unable to load popup calendar.\r\nPlease reload the page.");
	return;
}
if(absdt==true)
{
	var dN=new Date(dmin);
	var dM=new Date(dmax);
}
else
{
	var dN=new Date();
	dN.setDate(dN.getDate()+dmin);
	var dM=new Date();
	dM.setDate(dM.getDate()+dmax);
}
wF.SetMinMax(new Date(dN),new Date(dM));
if(eD==g_eC&&"block"==dF.style.display){if(g_eCV!=eD.value&&GD(eD.value)){wF.SetInputDate(g_day,g_month,g_year);wF.SetDate(g_day,g_month,g_year);g_eCV=eD.value;}
else dF.style.display="none";}
else{
	if(GD(eD.value)||(null!=eDP&&GD(eDP.value))){wF.SetInputDate(g_day,g_month,g_year);wF.SetDate(g_day,g_month,g_year);}
	else{var dt=new Date(dN);wF.SetInputDate(-1,-1,-1);wF.SetDate(dt.getDate(),dt.getMonth()+1,dt.getFullYear());}var eL=0;var eT=0;var p=eP;while(p&&p.tagName!="BODY"){eT+=p.offsetTop;eL+=p.offsetLeft;p=p.offsetParent;}
		var eH=eP.offsetHeight;var dH=dF.style.pixelHeight;var sT=document.body.scrollTop;var dW=dF.style.pixelWidth;if(eL+eP.offsetWidth+dW>document.body.clientWidth)eL-=dW-eP.width;dF.style.left=eL;if(eT-dH>=sT&&eT+eH+dH>document.body.clientHeight+sT)eT-=dH;else eT+=eH;dF.style.top=eT;
if("none"==dF.style.display)dF.style.display="block";g_eC=eD;g_eCV=eD.value;LMn(12);}
}

function SetDate(d,m,y){
	d=(d<10)?"0"+d:d
	m=(m<10)?"0"+m:m
	g_eC.value=d+"/"+m+"/"+y;g_eCV=g_eC.value;
//	SyncVals(g_eC);
}

function SetCalClose() {g_eC.calclosing=true};

function GetDowStart(){return 1;}
function DOW2(d,m,y){var dt=new Date(y,m-1,d);return(dt.getDay()+(7-GetDowStart()))%7;}
function PLI(s){var i=document.createElement("IMG");i.src=s;}
function LMn(n){var dt=new Date();var m=dt.getMonth()+1;var y=dt.getFullYear();for(i=0;i<n;i++){PLI("/eta/months/w"+DOW2(1,m,y)+"d"+GetMonthCount(m,y)+".gif");m++;if(12<m){m=1;y++;}}}LMn(2);

function HideCalendar(obj, indx) 
{
	var dF=document.all.CalFrame;
	dF.style.display="none";
	if (null!=obj) SyncVals(obj, indx);
}

function ShowCalendarOnClick(eP,eD,eDP,dmin,dmax,fnCB,absdt)
{

	var dF=document.all.CalFrame;
	var wF=window.frames.CalFrame;

//	if (document.body.clientHeight+document.body.scrollTop < dF.style.pixelHeight)
//	{
//		var nw = window.open('/nrlib/calendar.htm', 'CalFrame2', 'directories=0,height=196,location=0,menubar=0,resizable=0,scrollbars=0,status=0,toolbar=0,width=150');
//		while (null==nw.g_fCalLoaded) {}
//		dF = nw.document.body;
//		wF = nw.window;
//	}

	if ("block"==dF.style.display && eD==g_eC) 
	{
		HideCalendar();
	}
	else
	{	
		if(null==wF.g_fCalLoaded||false==wF.g_fCalLoaded)
		{
			alert("Unable to load popup calendar.\r\nPlease reload the page.");
			return;
		}

		if(absdt==true)
		{
			var dN=new Date(dmin);
			var dM=new Date(dmax);
		}
		else
		{
			var dN=new Date();
			dN.setDate(dN.getDate()+dmin);
			var dM=new Date();
			dM.setDate(dM.getDate()+dmax);
		}
		wF.SetMinMax(new Date(dN),new Date(dM));
		if(eD==g_eC&&"block"==dF.style.display)
		{
			if(g_eCV!=eD.value&&GD(eD.value))
			{
				wF.SetInputDate(g_day,g_month,g_year);
				wF.SetDate(g_day,g_month,g_year);
				g_eCV=eD.value;
			}
			else dF.style.display="none";
		}
		else
		{
			if(GD(eD.value)||(null!=eDP&&GD(eDP.value)))
			{
				wF.SetInputDate(g_day,g_month,g_year);
				wF.SetDate(g_day,g_month,g_year);
			}
			else
			{
				var dt=new Date(dN);
				wF.SetInputDate(-1,-1,-1);
				wF.SetDate(dt.getDate(),dt.getMonth()+1,dt.getFullYear());
			}
			var eL=0;
			var eT=0;
			var p=eP;
			while(p&&p.tagName!="BODY")
			{
				eT+=p.offsetTop;eL+=p.offsetLeft;p=p.offsetParent;
			}
			var eH=eP.offsetHeight;
			var dH=dF.style.pixelHeight;
			var sT=document.body.scrollTop;
			var dW=dF.style.pixelWidth;
			if(eL+eP.offsetWidth+dW>document.body.clientWidth)eL-=dW-eP.width;dF.style.left=eL;
			if(eT-dH>=sT&&eT+eH+dH>document.body.clientHeight+sT)eT-=dH;
			else eT+=eH;dF.style.top=eT;
			if("none"==dF.style.display)dF.style.display="block";
			g_eC=eD;g_eCV=eD.value;LMn(12);
		}
	}
}
