//-------------------------------------------------------------
// ComPopDate（カレンダーで日付入力）
// Call Format : ComPopDate(data001,data001);
//                        |       |
//                        |       +-->OUTPUT
//                        +-->INPUT
// Return　なし
//-------------------------------------------------------------
var gdCtrl = new Object();
var goSelectTag = new Array();
var gcGray = "#808080";
var gcToggle = "#ffff00";
var gcBG = "#cccccc";

var gdCurDate = new Date();
var giYear = gdCurDate.getFullYear();
var giMonth = gdCurDate.getMonth()+1;
var giDay = gdCurDate.getDate();

//選択された日付情報をコントロールオブジェトにセットし、隠したSelectタグを戻す
//iYear:年,iMonth:月,iDay:日
function fSetDate(iYear, iMonth, iDay)
{
  VicPopCal.style.visibility = "hidden";
  if(iYear < 0 && iMonth < 0 && iDay < 0) { gdCtrl.value = ""; }
  else {
  //  gdCtrl.value = iMonth+"-"+iDay+"-"+iYear; //Here, you could modify the locale as you need !!!!
  //  gdCtrl.value = iYear+"/"+iMonth+"/"+iDay;
     if(iMonth<10) { jMonth="0"+iMonth; }
     else { jMonth=iMonth; }
     if(iDay<10) { jDay="0"+iDay; }
     else { jDay=iDay; }
     gdCtrl.value = iYear+"/"+jMonth+"/"+jDay;
//     gdCtrl.value = iYear+jMonth+jDay;
  }
  gdCtrl.focus();
  gdCtrl.style.background = "white"; //Ctrlオブジェクトの背景色設定

  for (i in goSelectTag){
    goSelectTag[i].style.visibility = "visible";
    //goSelectTag.length = 0; 
 }
}

//aCellで選択された項目を取得し、 fSetDate(iYear, iMonth, iDay)へ送る
//数値蛇ない場合は、iYear,iMonth,iDayが全て-1になります。
function fSetSelected(aCell)
{
  var iOffset = 0;
  var iYear = parseInt(tbSelYear.value);
  var iMonth = parseInt(tbSelMonth.value);

  self.event.cancelBubble = true;
  aCell.bgColor = gcBG;							//セル背景色設定
  with (aCell.children["cellText"])
  {
    if(isNaN(iYear) || isNaN(iMonth))
    {
      iYear = -1;
      iMonth = -1;
      iDay = -1;
    } else {
      var iDay = parseInt(innerText);
      if (color==gcGray){ iOffset = (Victor<10)?-1:1; }
      iMonth += iOffset;
      if (iMonth<1) {
          iYear--;
          iMonth = 12;
      } else if (iMonth>12) {
          iYear++;
          iMonth = 1;
      }
    }
  }
  fSetDate(iYear, iMonth, iDay);
}

//場所の開始位置を設定する。
function Point(iX, iY)
{
    this.x = iX;
    this.y = iY;
}

//設定された年と月の日数と曜日関係の二次元配列で返す。
//aMonth[V1][V2]
//	V1:カレンダーの週数
//	V2:カレンダーの曜日
function fBuildCal(iYear, iMonth)
{
  var aMonth=new Array();
  for(i=1;i<7;i++){ aMonth[i]=new Array(i); }

  var dCalDate=new Date(iYear, iMonth-1, 1);
  var iDayOfFirst=dCalDate.getDay();
  var iDaysInMonth=new Date(iYear, iMonth, 0).getDate();
  var iOffsetLast=new Date(iYear, iMonth-1, 0).getDate()-iDayOfFirst+1;
  var iDate = 1;
  var iNext = 1;

  for (d = 0; d < 7; d++)
  {
    aMonth[1][d] = (d<iDayOfFirst)?-(iOffsetLast+d):iDate++;
  }

  for (w = 2; w < 7; w++)
  {  
    for (d = 0; d < 7; d++)
    {
      aMonth[w][d] = (iDate<=iDaysInMonth)?iDate++:-(iNext++);
    }
  }
  
  return aMonth;
}

//カレンダー画面作成関数(表画面のみ)
//	iYear:(未使用)
//	iMonth:(未使用)
//	iCellHeight:日数枠の高さ
//  iDateTextSize:文字の大きさ(CSS指定)
function fDrawCal(iYear, iMonth, iCellHeight, iDateTextSize)
{
//  var WeekDay = new Array("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
  var WeekDay = new Array("日","月","火","水","木","金","土");
  var styleTD = " bgcolor='"+gcBG+"' bordercolor='"+gcBG+"' valign='middle' align='center' height='"+iCellHeight+"' style='font:bold "+iDateTextSize+" Courier;";            //Coded by Liming Weng(Victor Won)  email:victorwon@netease.com

  with (document) {
    write("<tr>");
	
	//週テーブル作成
    for(i=0; i<7; i++)
    {
        write("<td "+styleTD+"color:Green' >" + WeekDay[i] + "</td>");
    }    
    write("</tr>");

    for (w = 1; w < 7; w++) {
        write("<tr>");
        for (d = 0; d < 7; d++) {
            write("<td id=calCell "+styleTD+"cursor:hand;' onMouseOver='this.bgColor=gcToggle' onMouseOut='this.bgColor=gcBG' onclick='fSetSelected(this)'>");
            write("<font id=cellText Victor='Liming Weng'> </font>");
            write("</td>");
        }
        write("</tr>");
    }
  }
}

//id指定されているcellTextに日を追加する
//	iYear:作成したい年
//	iMonth:作成したい月
function fUpdateCal(iYear, iMonth)
{
  myMonth = fBuildCal(iYear, iMonth);
  var i = 0;
  for (w = 0; w < 6; w++)
  {
    for (d = 0; d < 7; d++)
    {   
      with (cellText[(7*w)+d]) {
        Victor = i++;
        if (myMonth[w+1][d]<0) {
          color = gcGray; //前月の色
          innerText = -myMonth[w+1][d];
        } else {
//        color = ((d==0)||(d==6))?"red":"black";
          if (d==0) {
            color="red";	//日曜日の色
          } else if (d==6) {
            color="blue";	//土曜日の色
          } else {
            color="black";	//その他の曜日色
          }
          innerText = myMonth[w+1][d];
        }
      }
    }
  }
}

//指定された年月をカレンダーに更新します
//	iYear:表示したい年
//	iMon:表示したい月
function fSetYearMon(iYear, iMon)
{
  tbSelMonth.options[iMon-1].selected = true;
  for (i = 0; i < tbSelYear.length; i++)
  {
    if (tbSelYear.options[i].value == iYear)
    { 
      tbSelYear.options[i].selected = true;
    }
  } 
  fUpdateCal(iYear, iMon);	//上の関数を呼び出します
}

//前月の日付を設定する
function fPrevMonth()
{
  var iMon = tbSelMonth.value;
  var iYear = tbSelYear.value;

  if (--iMon<1) {
      iMon = 12;
      iYear--;
  }

  fSetYearMon(iYear, iMon);
}

//先月の日付を設定する
function fNextMonth()
{
  var iMon = tbSelMonth.value;
  var iYear = tbSelYear.value;

  if (++iMon>12) {
      iMon = 1;
      iYear++;
  }

  fSetYearMon(iYear, iMon);
}

//SELECTタグを一時的に隠す
function fToggleTags()
{
  with (document.all.tags("SELECT"))
  {
    for (i=0; i<length; i++)
    {
      if ((item(i).Victor!="Won")&&fTagInBound(item(i))){
        item(i).style.visibility = "hidden";
        goSelectTag[goSelectTag.length] = item(i);
      }
    }
  }
}

//aTagのウィンドウ内にポインタがあるか、ないか。
//有れば,true,無ければfalse
function fTagInBound(aTag)
{
  with (VicPopCal.style)
  {
    var l = parseInt(left);
    var t = parseInt(top);
    var r = l+parseInt(width);
    var b = t+parseInt(height);
    var ptLT = fGetXY(aTag);
    return !((ptLT.x>r)||(ptLT.x+aTag.offsetWidth<l)||(ptLT.y>b)||(ptLT.y+aTag.offsetHeight<t));
  }
}

//ウィンドウ位置を取得する
//	aTag:位置を取得したいウィンドウ
//
//戻り値: point型
//	pt.x:X座標
//	pt.y:Y座標
function fGetXY(aTag)
{
  var oTmp = aTag;
  var pt = new Point(0,0);
  var oTmp_2 = "";
  var flg = 0;
  do {
    if(oTmp.tagName == "DIV"){
        if(flg == 0){
            flg = 1;
            oTmp_2 = oTmp;
        }
    }
    pt.x += oTmp.offsetLeft;
    pt.y += oTmp.offsetTop;
    oTmp = oTmp.offsetParent;
  } while(oTmp.tagName!="BODY");
  if(flg == 1){
    pt.y -= oTmp_2.scrollTop;
  }
  return pt;
}

// Main: popCtrl is the widget beyond which you want this calendar to appear;
//       dateCtrl is the widget into which you want to put the selected date.
// i.e.: <input type="text" name="dc" style="text-align:center" readonly><INPUT type="button" value="V" onclick="fPopCalendar(dc,dc);return false">
//メイン関数
//	popCtrl: ウィンドウオブジェクトの場所に表示処理を行う
//	dateCtrl: 指定されたオブジェクトに選択した日付を返す
function ComPopDate(popCtrl, dateCtrl)
{
  gdCtrl = dateCtrl;
  fSetYearMon(giYear, giMonth);
  var point = fGetXY(popCtrl);
  var wk,wk1;
  with (VicPopCal.style) {
    left = point.x;
    wk = left.split("px");
//    if( wk[0] > 540 ){left = "540px";}    // 800*600時
    if( wk[0] > 708 ){left = "708px";}    // 1024*768時
    top  = point.y+popCtrl.offsetHeight+1;
    wk = top.split("px");
//    if( wk[0] > 354 ){                    // 2002.04.19 del
//       top = "354px";                     // 2002.04.19 del
//    }                                     // 2002.04.19 del
    width = VicPopCal.offsetWidth;
    height = VicPopCal.offsetHeight;
    fToggleTags(point);
    visibility = 'visible';
  }
  VicPopCal.focus();
}

//カレンダー表示を行う処理(デザインを含む)
function fHideCal()
{
  var oE = window.event;
  if ((oE.clientX>0)&&(oE.clientY>0)&&(oE.clientX<document.body.clientWidth)&&(oE.clientY<document.body.clientHeight)) {
    var oTmp = document.elementFromPoint(oE.clientX,oE.clientY);
    while ((oTmp.tagName!="BODY") && (oTmp.id!="VicPopCal"))
        oTmp = oTmp.offsetParent;
    if (oTmp.id=="VicPopCal"){ return; }
  }
  VicPopCal.style.visibility = 'hidden';
  for (i in goSelectTag)
  {
    goSelectTag[i].style.visibility = "visible";
  }  
  goSelectTag.length = 0;
}

var gMonths = new Array("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月");

with (document) {
write("<Div id='VicPopCal' onblur='fHideCal()' onclick='focus()' style='POSITION:absolute;visibility:hidden;border:2px ridge;width:10;z-index:100;'>");
write("<table border='0' bgcolor='lightcyan'>");
write("<TR>");
write("<td valign='middle' align='center'><input type='button' name='PrevMonth' value='<' style='height:20;width:20;FONT:16 Fixedsys' onClick='fPrevMonth()' onblur='fHideCal()'>");
write("&nbsp;&nbsp;<select name='tbSelMonth' onChange='fUpdateCal(tbSelYear.value, tbSelMonth.value)' Victor='Won' onclick='self.event.cancelBubble=true' onblur='fHideCal()'>");
for (i=0; i<12; i++)
{
    write("<option value='"+(i+1)+"'>"+gMonths[i]+"</option>");
}
write("</SELECT>");
write("&nbsp;&nbsp;<SELECT name='tbSelYear' onChange='fUpdateCal(tbSelYear.value, tbSelMonth.value)' Victor='Won' onclick='self.event.cancelBubble=true' onblur='fHideCal()'>");
for(i=1900;i<2025;i++)
{
    write("<OPTION value='"+i+"'>&nbsp;&nbsp;"+ i + "&nbsp;&nbsp;</OPTION>");
}
write("</SELECT>");
write("&nbsp;&nbsp;<input type='button' name='PrevMonth' value='>' style='height:20;width:20;FONT:16 Fixedsys' onclick='fNextMonth()' onblur='fHideCal()'>");
write("</td>");
write("</TR><TR>");
write("<td align='center'>");
write("<DIV style='background-color:teal;'><table width='100%' border='0'>");
fDrawCal(giYear, giMonth, 18, 16);
write("</table></DIV>");
write("</td>");
write("</TR><TR><TD align='center'>");
write("<B style='cursor:hand' onclick='fSetDate(giYear,giMonth,giDay); self.event.cancelBubble=true' onMouseOver='this.style.color=gcToggle' onMouseOut='this.style.color=0'>本日:"+giYear+"年"+giMonth+"月"+giDay+"日</B>");
write("</TD></TR>");write("</TD></TR>");
write("</TABLE></Div>");
}

