//###############################################################
// $B6&DL%b%8%e!<%k(B($BF|IU%;%l%/%?!<$NI=<((B)
//     2002/10/01 $B?75,(B                                 $BEDCf(B($BE}(B)
//     2003/01/31 $B0lHL2=(B                               $B>.Cf(B
//     2003/09/02 $B%G%'%U%)%k%HI=<($KG/7nF|0J30$r;XDj2D(B 
//                $BF|IU%A%'%C%+!<$NDI2C(B                 $B>.Cf(B
//###############################################################

//----------------------------------------------------------------------
// SetDispDate: $BF|IU$NI=<((B($B=i4|(B)
// $B0z?t$N@bL@(B
//    form   ... $B%U%)!<%`L>(B($B>JN,IT2D(B)
//    ynam   ... $BG/A*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    mnam   ... $B7nA*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    dnam   ... $BF|A*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    year   ... $B%G%U%)%k%HI=<(G/(B($B>JN,2D(B:$B>JN,;~$O8=:_$NG/(B)
//    month  ... $B%G%U%)%k%HI=<(7n(B($B>JN,2D(B:$B>JN,;~$O8=:_$N7n(B)
//    date   ... $B%G%U%)%k%HI=<(F|(B($B>JN,2D(B:$B>JN,;~$O8=:_$NF|(B)
//    past   ... $B2?G/2a5n$^$G$rA*Br2DG=$H$9$k$+(B($B>JN,2D(B:$B>JN,;~$O(B1)
//    future ... $B2?G/L$Mh$^$G$rA*Br2DG=$H$9$k$+(B($B>JN,2D(B:$B>JN,;~$O(B1)
// $BJVCM$N@bL@(B
//    true  ... $B>o;~(B
function SetDispDate(form,ynam,mnam,dnam,year,month,date,past,future)
{
	var defyear  = year;
	var defmonth = month;
	var defdate  = date;

	year = parseInt(year, 10);
	month = parseInt(month, 10);
	date = parseInt(date, 10);
	if(!isNaN(year))  {defyear  = '';}
	else              {year     = '';}
	if(!isNaN(month)) {defmonth = '';}
	else              {month    = '';}
	if(!isNaN(date))  {defdate  = '';}
	else              {date     = '';}

	if(year == "" || month == "" || date == "") {
		nowtime = GetNowDate();
		if(year == "")  {year = nowtime[1];}
		if(month == "") {month = nowtime[2];}
		if(date == "")  {date = nowtime[3];}
	}

	if(past == "")   {past = 1;}
	if(future == "") {future = 1;}

	if(ynam != '') {
		DefineYear(form, ynam, year, past, future);
		if(defyear == '') {AddDate(form, ynam, '    ', '');}
		else              {AddDate(form, ynam, defyear, 'default');}
	}
	if(mnam != '') {
		DefineMonth(form, mnam, month);
		if(defmonth == '') {AddDate(form, mnam, '  ', '');}
		else               {AddDate(form, mnam, defmonth, 'default');}
	}
	if(dnam != '') {
		DefineDate(form, dnam, year, month, date);
		if(defdate == '') {AddDate(form, dnam, '  ', '');}
		else              {AddDate(form, dnam, defdate, 'default');}
	}

	return true;
}

//----------------------------------------------------------------------
// ChangeDispDate: $BF|IU$N:FI=<((B($BG/7nJQ99$N>l9g(B)
// $B0z?t$N@bL@(B
//    form   ... $B%U%)!<%`L>(B($B>JN,IT2D(B)
//    ynam   ... $BG/A*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    mnam   ... $B7nA*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    dnam   ... $BF|A*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
// $BJVCM$N@bL@(B
//    true  ... $B>o;~(B
function ChangeDispDate(form,ynam,mnam,dnam)
{
	disptime = GetDispDate(form, ynam, mnam, dnam);
	var year  = parseInt(disptime[1], 10);
	var month = parseInt(disptime[2], 10);
	var date  = parseInt(disptime[3], 10);
	if(isNaN(year) || isNaN(month)) {
		if(!isNaN(date)) {AddDate(form, dnam, disptime[2], 'default');}
	}
	else {
		DefineDate(form, dnam, year, month, date);
		AddDate(form, dnam, '  ', '');
	}

	return true;
}

//----------------------------------------------------------------------
// CheckDate: $B;XDj$5$l$?F|IU$,@5$7$$F|IU$1$G$"$k;v$r3NG'(B
// $B0z?t$N@bL@(B
//    form   ... $B%U%)!<%`L>(B($B>JN,IT2D(B)
//    ynam   ... $BG/A*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    mnam   ... $B7nA*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    dnam   ... $BF|A*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    msg    ... $B%(%i!<%a%C%;!<%8%-!<%o!<%I(B($B>JN,IT2D(B)
// $BJVCM$N@bL@(B
//    true  ... $B@5$7$$F|IU$G$"$k(B
//    false ... $BF|IU$G$O$J$$(B
function CheckDate(form,ynam,mnam,dnam,msg)
{
	disptime = GetDispDate(form, ynam, mnam, dnam);
	var year  = parseInt(disptime[1], 10);
	var month = parseInt(disptime[2], 10);
	var date  = parseInt(disptime[3], 10);

	if(ynam != '' && isNaN(year)) {
		alert("Select any item in the Year field of " + msg + ".");
		document.forms[form].elements[ynam].focus();
		return false;
	}
	else if(mnam != '' && (isNaN(month) || month < 1 || month > 12)) {
		alert("Select any item in the Month field of " + msg + ".");
		document.forms[form].elements[mnam].focus();
		return false;
	}
	else if(dnam != '' && (isNaN(date) || date < 1 || date > 31)) {
		alert("Select any item in the Date field of " + msg + ".");
		document.forms[form].elements[dnam].focus();
		return false;
	}

	return true;
}

//----------------------------------------------------------------------
// CheckPastDate: $B;XDj$5$l$?F|IU$,2a5n$G$J$$;v$r3NG'(B
// $B0z?t$N@bL@(B
//    form   ... $B%U%)!<%`L>(B($B>JN,IT2D(B)
//    ynam   ... $BG/A*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    mnam   ... $B7nA*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    dnam   ... $BF|A*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    msg    ... $B%(%i!<%a%C%;!<%8%-!<%o!<%I(B($B>JN,IT2D(B)
// $BJVCM$N@bL@(B
//    true  ... $BK\F|Kt$OL$Mh$NF|IU$G$"$k(B
//    false ... $B2a5n$NF|IU$G$"$k(B
function CheckPastDate(form,ynam,mnam,dnam,msg)
{
	if(!CheckDate(form, ynam, mnam, dnam, msg)) {return false;}
	nowtime = GetNowDate();
	disptime = GetDispDate(form, ynam, mnam, dnam);

	if(ynam != '' && nowtime[1] > disptime[1]) {
		alert("The past date canot be selected in the " + msg + " field.");
		document.forms[form].elements[ynam].focus();
		return false;
	}
	else if(ynam != '' && mnam != '' && disptime[1] == nowtime[1] && nowtime[2] > disptime[2]) {
		alert("The past date canot be selected in the " + msg + " field.");
		document.forms[form].elements[mnam].focus();
		return false;
	}
	else if(ynam != '' && mnam != '' && dnam != '' && disptime[1] == nowtime[1] && disptime[2] == nowtime[2] && nowtime[3] > disptime[3]) {
		alert("The past date canot be selected in the " + msg + " field.");
		document.forms[form].elements[dnam].focus();
		return false;
	}

	return true;
}

//----------------------------------------------------------------------
// CheckFutureDate: $B;XDj$5$l$?F|IU$,L$Mh$G$J$$;v$r3NG'(B
// $B0z?t$N@bL@(B
//    form   ... $B%U%)!<%`L>(B($B>JN,IT2D(B)
//    ynam   ... $BG/A*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    mnam   ... $B7nA*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    dnam   ... $BF|A*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    msg    ... $B%(%i!<%a%C%;!<%8%-!<%o!<%I(B($B>JN,IT2D(B)
// $BJVCM$N@bL@(B
//    true  ... $BK\F|Kt$O2a5n$NF|IU$G$"$k(B
//    false ... $BL$Mh$NF|IU$G$"$k(B
function CheckFutureDate(form,ynam,mnam,dnam,msg)
{
	if(!CheckDate(form, ynam, mnam, dnam, msg)) {return false;}
	nowtime = GetNowDate();
	disptime = GetDispDate(form, ynam, mnam, dnam);

	if(ynam != '' && disptime[1] > nowtime[1]) {
		alert("The future date canot be selected in the " + msg + " field.");
		document.forms[form].elements[ynam].focus();
		return false;
	}
	else if(ynam != '' && mnam != '' && disptime[1] == nowtime[1] && disptime[2] > nowtime[2]) {
		alert("The future date canot be selected in the " + msg + " field.");
		document.forms[form].elements[mnam].focus();
		return false;
	}
	else if(ynam != '' && mnam != '' && dnam != '' && disptime[1] == nowtime[1] && disptime[2] == nowtime[2] && disptime[3] > nowtime[3]) {
		alert("The future date canot be selected in the " + msg + " field.");
		document.forms[form].elements[dnam].focus();
		return false;
	}

	return true;
}

//----------------------------------------------------------------------
// CompareDate: $B;XDj$5$l$?(B2$B$D$NF|IU$NBg>.4X78$r3NG'(B
// $B0z?t$N@bL@(B
//    form   ... $B%U%)!<%`L>(B($B>JN,IT2D(B)
//    ynam1  ... $BHf3S85G/A*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    mnam1  ... $BHf3S857nA*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    dnam1  ... $BHf3S85F|A*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    ynam2  ... $BHf3S@hG/A*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    mnam2  ... $BHf3S@h7nA*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    dnam2  ... $BHf3S@hF|A*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
// $BJVCM$N@bL@(B
//    eq    ... $BHf3S85G/7nF|$O!"Hf3S@hG/7nF|$HF1$8$G$"$k!#(B
//    lt    ... $BHf3S85G/7nF|$O!"Hf3S@hG/7nF|$h$j$b>.$5$$!#(B
//    gt    ... $BHf3S85G/7nF|$O!"Hf3S@hG/7nF|$h$j$bBg$-$$!#(B
//    false ... $B@5$7$/Hf3S$G$-$J$$!#(B
function CompareDate(form,ynam1,mnam1,dnam1,msg1,ynam2,mnam2,dnam2,msg2)
{
	if(!CheckDate(form, ynam1, mnam1, dnam1, msg1)) {return false;}
	if(!CheckDate(form, ynam2, mnam2, dnam2, msg2)) {return false;}

	var dispdate1 = GetDispDate(form, ynam1, mnam1, dnam1);
	var dispdate2 = GetDispDate(form, ynam2, mnam2, dnam2);

	var compdate1 = dispdate1[1] + dispdate1[2] + dispdate1[3];
	var compdate2 = dispdate2[1] + dispdate2[2] + dispdate2[3];

	if(compdate1.length != compdate2.length) {
		alert("Faild to check date fields. coz date format is not same.");
		return false;
	}

	compdate1 = parseInt(compdate1, 10);
	compdate2 = parseInt(compdate2, 10);

	if(compdate1 == compdate2)     {return 'eq';}
	else if(compdate1 < compdate2) {return 'lt';}
	else if(compdate1 > compdate2) {return 'gt';}

	return false;
}

//----------------------------------------------------------------------
// GetNowDate : $BK\F|$NF|IU$r<hF@(B
// $B0z?t$N@bL@(B
//    $BL5$7(B
// $BJVCM$N@bL@(B
//    nowtime[1] ... $BK\F|$NG/(B($B@>Nq(B4$B7e(B)
//    nowtime[2] ... $BK\F|$N7n(B(1$B!A(B12)
//    nowtime[3] ... $BK\F|$N7n(B(1$B!A(B31)
function GetNowDate() 
{
        var now = new Date();
        var yr  = now.getYear();
        var mn  = now.getMonth() + 1;
        var dt  = now.getDate();
        var fyr = (yr < 1900) ? 1900 + yr : yr; 

	nowtime = new Array(3);
	nowtime[1] = fyr
	nowtime[2] = mn
	nowtime[3] = dt

	return(nowtime);
}

//----------------------------------------------------------------------
// Get1MonthAgoDate : $BK\F|$h$j(B1$B%17nA0$NF|IU$r<hF@(B
// $B0z?t$N@bL@(B
//    $BL5$7(B
// $BJVCM$N@bL@(B
//    one_m_ago_time[1] ... $BK\F|$h$j(B1$B%17nA0$NG/(B($B@>Nq(B4$B7e(B)
//    one_m_ago_time[2] ... $BK\F|$h$j(B1$B%17nA0$N7n(B(1$B!A(B12)
//    one_m_ago_time[3] ... $BK\F|$h$j(B1$B%17nA0$N7n(B(1$B!A(B31)
function Get1MonthAgoDate() 
{
        var now = new Date();
        var yr  = now.getYear();
        var mn  = now.getMonth() + 1;
        var dt  = now.getDate();
        var fyr = (yr < 1900) ? 1900 + yr : yr; 

	//-----------------------
	//set year & month
	if (mn == 1){
		omat_yr = fyr -1;
		omat_mn = 12;
	}
	else {
		omat_yr = fyr;
		omat_mn = mn -1;
	}
	
	//-----------------------
	//set day
	if ( ( (mn == 12)||(mn == 10)||(mn == 7)||(mn == 5) ) && (dt == 31)){
		omat_dt = 30;	
	}
	else if( (mn == 3) && ( (dt == 29)||(dt == 30)||(dt == 31) ) ){
		omat_dt = 28;		
	}
	else {
		omat_dt = dt;
	}

	one_m_ago_time = new Array(3);

	one_m_ago_time[1] = omat_yr;
	one_m_ago_time[2] = omat_mn;
	one_m_ago_time[3] = omat_dt;

	return(one_m_ago_time);
}

//----------------------------------------------------------------------
// GetDispDate: $B8=:_I=<(Cf$NF|IU$r<hF@(B
// $B0z?t$N@bL@(B
//    form   ... $B%U%)!<%`L>(B($B>JN,IT2D(B)
//    ynam   ... $BG/A*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    mnam   ... $B7nA*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    dnam   ... $BF|A*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
// $BJVCM$N@bL@(B
//    disptime[1] ... $BI=<(Cf$NG/(B($B@>Nq(B4$B7e(B)
//    disptime[2] ... $BI=<(Cf$N7n(B(1$B!A(B12)
//    disptime[3] ... $BI=<(Cf$N7n(B(1$B!A(B31)
function GetDispDate(form,ynam,mnam,dnam)
{
	var disp_yr = '';
	var disp_mn = '';
	var disp_dt = '';

	if(ynam != '') {
		disp_yr = document.forms[form].elements[ynam].options[document.forms[form].elements[ynam].selectedIndex].value;
	}
	if(mnam != '') {
		disp_mn = document.forms[form].elements[mnam].options[document.forms[form].elements[mnam].selectedIndex].value;
	}
	if(dnam != '') {
		disp_dt = document.forms[form].elements[dnam].options[document.forms[form].elements[dnam].selectedIndex].value;
	}

	disptime = new Array(3);
	disptime[1] = disp_yr;
	disptime[2] = disp_mn;
	disptime[3] = disp_dt;

	return(disptime);
}

//----------------------------------------------------------------------
// DefineYear: $BG/NN0h$rDj5A(B
//    form   ... $B%U%)!<%`L>(B($B>JN,IT2D(B)
//    ynam   ... $BG/A*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    year   ... $B%G%U%)%k%HI=<(G/(B($B>JN,2D(B:$B>JN,;~$O8=:_$NG/(B)
//    past   ... $B2?G/2a5n$^$G$rA*Br2DG=$H$9$k$+(B($B>JN,2D(B:$B>JN,;~$O(B1)
//    future ... $B2?G/L$Mh$^$G$rA*Br2DG=$H$9$k$+(B($B>JN,2D(B:$B>JN,;~$O(B1)
// $BJVCM$N@bL@(B
//    true  ... $B>o;~(B
function DefineYear(form,ynam,year,past,future)
{
	if(year == "") {
		nowtime = GetNowDate();
		year = nowtime[1];
	}
	if(past == "")   {past = 1;}
	if(future == "") {future = 1;}

	year = parseInt(year, 10);
	past = parseInt(past, 10);
	future = parseInt(future, 10);

	document.forms[form].elements[ynam].options.length = past + future + 1;

	j = 0;
	for(i=(year-past); i<=(year+future); i++) {
		document.forms[form].elements[ynam].options[j].text  = i;
		document.forms[form].elements[ynam].options[j].value = i;
		if(year == i) {
			document.forms[form].elements[ynam].selectedIndex = j;
		}
		j++;
	}

	return true;
}

//----------------------------------------------------------------------
// DefineMonth: $B7nNN0h$rDj5A(B
// $B0z?t$N@bL@(B
//    form   ... $B%U%)!<%`L>(B($B>JN,IT2D(B)
//    mnam   ... $B7nA*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    month  ... $B%G%U%)%k%HI=<(7n(B($B>JN,2D(B:$B>JN,;~$O8=:_$N7n(B)
// $BJVCM$N@bL@(B
//    true  ... $B>o;~(B
function DefineMonth(form,mnam,month)
{
	if(month == "") {
		nowtime = GetNowDate();
		month = nowtime[2];
	}

	document.forms[form].elements[mnam].options.length = 12;
	for(i=0; i<=11; i++){
		setmon = i + 1;
		if(setmon < 10) {setmon = "0" + setmon;}
		document.forms[form].elements[mnam].options[i].text  = setmon;
		document.forms[form].elements[mnam].options[i].value = setmon;
		if(parseInt(month, 10) == parseInt(setmon, 10)) {
			document.forms[form].elements[mnam].selectedIndex = i;
		}
	}

	return true;
}

//----------------------------------------------------------------------
// DefineDate: $BF|IUNN0h$rDj5A(B
// $B0z?t$N@bL@(B
//    form   ... $B%U%)!<%`L>(B($B>JN,IT2D(B)
//    dnam   ... $BF|A*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    year   ... $B%G%U%)%k%HI=<(G/(B($B>JN,2D(B:$B>JN,;~$O8=:_$NG/(B)
//    month  ... $B%G%U%)%k%HI=<(7n(B($B>JN,2D(B:$B>JN,;~$O8=:_$N7n(B)
//    date   ... $B%G%U%)%k%HI=<(F|(B($B>JN,2D(B:$B>JN,;~$O8=:_$NF|(B)
// $BJVCM$N@bL@(B
//    true  ... $B>o;~(B
function DefineDate(form,dnam,year,month,date)
{
	if(year == "" || month == "" || date == "") {
		nowtime = GetNowDate();
		if(year == "")  {year = nowtime[1];}
		if(month == "") {month = nowtime[2];}
		if(date == "")  {date = nowtime[3];}
	}

	if ((month == 4)||(month == 6)||(month == 9)||(month == 11)){
		days = 30;
	}
	else if (month == 2){
		days = 28;
		if((year%4)==0){
			days = 29;
			if((year%100)==0){
				days = 28;
				if((year%400)==0){
					days = 29;
				}
			}
		}
	}
	else{
		days = 31;
	}
	document.forms[form].elements[dnam].options.length = days;
	if (date > days){date = days;}
	for(i=0; i<=days-1; i++){
		setday = i + 1;
		if(setday < 10) {setday = "0" + setday;}
		document.forms[form].elements[dnam].options[i].text  = setday;
		document.forms[form].elements[dnam].options[i].value = setday;
		if(date == (i+1) || date == setday) {
			document.forms[form].elements[dnam].selectedIndex = i;
		}
	}

	return true;
}

//----------------------------------------------------------------------
// AddDate: $BG/7nF|0J30$NI=<(CM$rDI2CDj5A(B
//    form   ... $B%U%)!<%`L>(B($B>JN,IT2D(B)
//    nam    ... $BA*Br%U%#!<%k%IKt$O%U%#!<%k%IHV9f(B($B>JN,IT2D(B)
//    val    ... $BI=<(CM(B($B>JN,2D(B:$B>JN,;~$OCM$r@_Dj$7$J$$(B)
//    def    ... 'default'$B;XDj;~$O%G%U%)%k%HI=<(CM$H$9$k!#(B
// $BJVCM$N@bL@(B
//    true  ... $B>o;~(B
function AddDate(form,nam,val,def)
{
	if(val != '') {
		j = document.forms[form].elements[nam].options.length;
		document.forms[form].elements[nam].options.length = j + 1;
		document.forms[form].elements[nam].options[j].text  = val;
		document.forms[form].elements[nam].options[j].value = val;
		if(def == 'default') {
			document.forms[form].elements[nam].selectedIndex = j;
		}
	}
	return true;
}
