/********************************************************************
 * カレンダーによる日付入力スクリプト
 *
 * ( 下記スクリプトは改造も可能ですがまったくいじらずにそのままペース
 *   トするだけでもご利用いただけるように書いてあります )
 *
 *  Syntax : wrtCalendar( formElementObject[,moveMonthFlg][,winOpenFlg] )
 *  例     : wrtCalendar( this )
 *
 *  使いたいINPUT入力タグにonFocus="wrtCalendar(this)"を ペーストし
 *  ます。それぞれのタグに違う名前(NAME属性)を忘れずに付けておいてく
 *  ださい。
 *
 *  Example :受付日:<INPUT NAME=e1 TYPE=text
 *                         onFocus="wrtCalendar(this)">
 *
 * ------------------------------------------------------------------
 * calendar.js Copyright(c)1999 Toshirou Takahashi tato@fureai.or.jp
 * Support http://www.fureai.or.jp/~tato/JS/BOOK/INDEX.HTM
 * ------------------------------------------------------------------
  *  2004/7/9 修正:角田 桂一(http://www.h3.dion.ne.jp/~sakatsu/index.htm)
 *    ・文字色を日曜(赤),土曜(青)に変更
 *    ・本日日付の強調をピンク背景から太字に変更(祝日強調の為)
 *    ・前月/翌月部分の文字色をグレー化
 *    ・祝日をピンク背景で強調(祝日判定用ソースが必要です)
 *         (http://www.h3.dion.ne.jp/~sakatsu/HolidayChk.js)
*/

var now    = new Date()
var absnow = now
var Win=navigator.userAgent.indexOf('Win')!=-1
var Mac=navigator.userAgent.indexOf('Mac')!=-1
var X11=navigator.userAgent.indexOf('X11')!=-1
var Moz=navigator.userAgent.indexOf('Gecko')!=-1
var Opera=!!window.opera
var MSIE=navigator.userAgent.indexOf('MSIE')!=-1
var winflg=1

function openCalendar(arg1) {
  wrtCalendar(arg1);
}
function wrtCalendar(oj,arg1,arg2){
  if(MSIE) {
//    openCalendarLay(oj);
//    return;
  }
  
  if(Opera)return
  oj.blur()

  if(!arguments[1])arg1=0
  if(!Moz)
  if(arguments[1]||arguments[1]==0)winflg=0


  //-初期化
  if(arg1==0)now = new Date()

  //-年月日取得
  nowdate  = now.getDate()
  nowmonth = now.getMonth()
  nowyear  = now.getYear()

  //-月移動処理
  if(nowmonth==11 && arg1 > 0){        //12月でarg1が+なら
    nowmonth = -1 + arg1 ; nowyear++   //月はarg1-1;1年加算
  } else if(nowmonth==0 && arg1 < 0){  //1月でarg1が-なら
    nowmonth = 12 + arg1 ; nowyear--   //月はarg1+12;1年減算
  } else {
    nowmonth +=  arg1                  //2-11月なら月は+arg1
  }

  //-2000年問題対応
  if(nowyear<1900)nowyear=1900+nowyear

  //-現在月を確定
  now   = new Date(nowyear,nowmonth,1)

  //-YYYYMM作成
  nowyyyymm=nowyear*100+nowmonth

  //-YYYY/MM作成
  nowtitleyyyymm=nowyear+'/'+(nowmonth + 1)

  //-週設定
  week = new Array('日','月','火','水','木','金','土');

  //-カレンダー表示用サブウインドウオープン
  if(winflg){

    var w=152
    var h=156

    //-calendar用OS別サイズ微調整
    if(Moz)     { w+=26 ; h+=40 }
    else if(Win){ w+=0  ; h+=0  }
    else if(Mac){ w+=8  ; h+=22 }
    else if(X11){ w+=5  ; h+=46 }

    var x=100
    var y=20

    if(document.all){

        x=window.event.screenX+30
        y=window.event.screenY-180

    } else if (document.layers || document.getElementById){

        x+=window.screenX
        y+=window.screenY
    }

    mkSubWin('','calendar',x,y,w,h)

  }

  //-カレンダー構築用基準日の取得
  fstday   = now                                           //今月の1日
  startday = fstday - ( fstday.getDay() * 1000*60*60*24 )  //最初の日曜日
  startday = new Date(startday)

  //-カレンダー構築用HTML
  ddata = ''
  ddata += '<HTML>\n'
  ddata += '<HEAD>'
  
  
  if(!Moz)
  ddata += '<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">\n'
  ddata += '<TITLE>Auto Input Calendar</TITLE>\n'
  ddata += '<STYLE>\n'
  ddata += ' BODY  { font:12px ; line-height:12px ; margin : 7px }\n'
  ddata += ' TH  { font:12px ; line-height:12px ; font-weight : 900 }\n'
  ddata += ' TD  { font:12px ; font-family : Arial; line-height:12px }\n'

  ddata += ' A  { text-decoration:none;color:#000000;font:10px;font-family:Arial;line-height:12px }\n'
  ddata += ' INPUT  { font:10px ; font-family : Arial ; line-height:10px ; padding:0px}\n'
  ddata += '</STYLE>\n'
  ddata += '</HEAD>\n'
  ddata += '<BODY  BGCOLOR=#dddddd>\n'

  ddata += '<FORM>\n'
  ddata += '<TABLE BORDER=0 BGCOLOR=#dddddd  BORDERCOLOR=#dddddd WIDTH=140 HEIGHT=140>\n'

  //-MONTH
  ddata += '   <TR id="trmonth" BGCOLOR=orange BORDERCOLOR=orange WIDTH=140 HEIGHT=14>\n'
  ddata += '   <TH COLSPAN=7 WIDTH=140 HEIGHT=14 ALIGN="right"><NOBR>\n'

  ddata +=       nowtitleyyyymm
  ddata += ' <INPUT TYPE=button VALUE="<<" '
  ddata += '  onClick="self.opener.wrtCalendar(self.opener.document.'
  ddata +=            oj.form.name+'.elements[\''+oj.name+'\'],-1,0)">\n'
  ddata += '<INPUT TYPE=button VALUE="o" '
  ddata += '  onClick="self.opener.wrtCalendar(self.opener.document.'
  ddata +=            oj.form.name+'.elements[\''+oj.name+'\'],0,0)">\n'
  ddata += '<INPUT TYPE=button VALUE=">>" '
  ddata += '  onClick="self.opener.wrtCalendar(self.opener.document.'
  ddata +=            oj.form.name+'.elements[\''+oj.name+'\'],1,0)">\n'
  ddata += '</NOBR></TH>\n'
  ddata += '   </TR>\n'

    // 曜日：日[赤],月～金[黒],土[青] (2004/7/9 角田桂一 修正)
    // Week
    ddata += '   <TR BGCOLOR=#00cccc WIDTH=140 HEIGHT=14>\n'
    // Week(Sunday:Red)
    ddata += '   <TH WIDTH=14 HEIGHT=14>\n'
    ddata += '   <FONT SIZE="2" COLOR=#ff0000>\n'
    ddata +=       week[0]
    ddata += '   </FONT>\n'
    ddata += '   </TH>\n'
    // Week(Monday - Friday)
    for (i=1;i<6;i++){
      ddata += '   <TH WIDTH=14 HEIGHT=14>\n'
      ddata += '   <FONT SIZE="2">\n'
      ddata +=       week[i]
      ddata += '   </FONT>\n'
      ddata += '   </TH>\n'
    }
    // Week(Saturday:Blue)
    ddata += '   <TH WIDTH=14 HEIGHT=14>\n'
    ddata += '   <FONT SIZE="2" COLOR=#0000ff>\n'
    ddata +=       week[6]
    ddata += '   </FONT>\n'
    ddata += '   </TH>\n'

    ddata += '   </TR>\n'
    
  //-DATE
  for(j=0;j<6;j++){
    ddata += '   <TR BGCOLOR=#ffffff>\n'
    for(i=0;i<7;i++){
      nextday = startday.getTime() + (i * 1000*60*60*24)
      wrtday  = new Date(nextday)

      wrtdate = wrtday.getDate()
      wrtmonth= wrtday.getMonth()
      wrtyear = wrtday.getYear()
      if(wrtyear < 1900)wrtyear=1900 + wrtyear
      wrtyyyymm = wrtyear * 100 + wrtmonth
      wrtyyyymmdd= ''+wrtyear +'/'+ (wrtmonth+1) +'/'+wrtdate

      // 祝日名の取得(2004/7/9 角田桂一 追加)
      getholiday  = ''

      wrtdateA  = '<A HREF="javascript:function v(){'
      wrtdateA += '   self.opener.document.'+oj.form.name
      wrtdateA += '.elements[\''+oj.name+'\'].value=(\''+wrtyyyymmdd+'\');self.close()};v()" '
      wrtdateA += '>\n'
      
      // 日付：日[赤],月～金[黒],土[青]
      //       前月/翌月[グレー]   (2004/7/9 角田桂一 修正)
      if(wrtyyyymm != nowyyyymm){
        wrtdateA += '<FONT COLOR=#eeeeee>\n'
      } else {
        switch(i){
          case 0: 
            wrtdateA += '<FONT COLOR=#ff0000>\n'
            break
          case 6: 
            wrtdateA += '<FONT COLOR=#0000ff>\n'
            break
          default: wrtdateA += '<FONT COLOR=#000000>\n'
        }
      }
      wrtdateA += wrtdate
      wrtdateA += '</FONT>\n'
      wrtdateA += '</A>\n'

      // [日]セルに ALIGN="right" 追加(2004/7/9 角田桂一 修正)
      if(wrtyyyymm != nowyyyymm){ 
        ddata += ' <TD BGCOLOR=#cccccc WIDTH=14 HEIGHT=14 ALIGN="right">\n'
        ddata += wrtdateA
      } else {
        // 祝日表示(ピンク)を追加(2004/7/9 角田桂一 修正)
        if(getholiday == ''){
          ddata += ' <TD WIDTH=14 HEIGHT=14 ALIGN="right">\n'
        } else {
          ddata += ' <TD BGCOLOR=#ff99ff WIDTH=14 HEIGHT=14 ALIGN="right">\n'
        }
        if(wrtdate == absnow.getDate()   
           && wrtmonth == absnow.getMonth() 
           && wrtyear == absnow.getYear()){
          // 本日強調をピンク背景から太字に変更(2004/7/9 角田桂一 修正)
          ddata += '<B>'+wrtdateA+'</B>\n'
        } else {
          ddata += wrtdateA
        }
      }
      ddata += '   </TD>\n'
    }
    ddata += '   </TR>\n'

    startday = new Date(nextday)
    startday = startday.getTime() + (1000*60*60*24)
    startday = new Date(startday)
  }
    

  //-mac用クローズボタン
  if(Mac){
    ddata += '   <TR>\n'
      ddata += '   <TD COLSPAN=7 ALIGN=center>\n'
       ddata += '   <INPUT TYPE=button VALUE="CLOSE" '
       ddata += '          onClick="self.close();return false">\n'
      ddata += '   </TD>\n'
    ddata += '   </TR>\n'
  }

  ddata += '</TABLE>\n'

  ddata += '</FORM>\n'

  ddata += '</BODY>\n'
  ddata += '</HTML>\n'


  calendarwin.document.write(ddata)
  calendarwin.document.close()
  calendarwin.focus()

  winflg=1
}


/********************************************************************
 * 簡易サブウインドウ開き
 *  Syntax : mkSubWin(URL,winName,x,y,w,h)
 *  例     : mkSubWin(winIndex,'test.htm','win0',100,200,150,300)
 * ------------------------------------------------------------------
 */

var calendarwin;

function mkSubWin(URL,winName,x,y,w,h){

    var para =""
             +" left="        +x
             +",screenX="     +x
             +",top="         +y
             +",screenY="     +y
             +",toolbar="     +0
             +",location="    +0
             +",directories=" +0
             +",status="      +0
             +",menubar="     +0
             +",scrollbars="  +0
             +",resizable="   +1
             +",innerWidth="  +w
             +",innerHeight=" +h
             +",width="       +w
             +",height="      +h
             
        
        calendarwin=window.open(URL,winName,para);
        calendarwin.focus()

}
  /*--/////////////ここまで///////////////////////////////////////--*/

  
  
  
  
var formElement
var dispYear;
var dispMonth;
var selectYear=0;
var selectMonth=0;
var selectDay=0;
function openCalendarLay(inFormElement){
    formElement = inFormElement
    writeCalendar()
}

function writeCalendar(){
    freeDocumentOnmouse();
    var now    = new Date();
    dispYear  = getYear(now);
    dispMonth  = now.getMonth();
    var form_value = formElement.value;
    form_value = replaceAll(form_value,"/","-");
    if (form_value.length>0){
        var vals = form_value.split("-");
        dispYear = vals[0];
        dispMonth = vals[1]-1;
        selectYear = vals[0];
        selectMonth =  vals[1];
        selectDay =  vals[2];
    }
    outHtml(getCalendarTable());
    //デフォルト表示位置
    var window_calendar=document.getElementById("WINDOW_CALENDAR");
    window_calendar.style.top = MOUSE_Y - (window_calendar.offsetHeight/2) + scrollTop();;
    window_calendar.style.left = MOUSE_X  + 30 + scrollLeft();
    MAX_ZINDEX++;
    window_calendar.style.zIndex = MAX_ZINDEX;
    setDragObject('WINDOW_CALENDAR');
    dragOff();
}

function closeCalendar(){
    var window_calendar=document.getElementById("WINDOW_CALENDAR");
    window_calendar.style.top = -1999 ;
    window_calendar.style.left = -1999;
    setDragObject('WINDOW_CALENDAR');
    dragOff();
}
function reloadCalendar(addMonth){
    if (addMonth == 0){
        dispYear = getYear(new Date());
        dispMonth = new Date().getMonth();
    } else {
        
        dispMonth = eval(dispMonth) + eval(addMonth);
        while(dispMonth<0 || dispMonth>11){
        
                if (dispMonth>11){
                    dispMonth -= 12;
                    dispYear++;
                } else if (dispMonth<0){
                    dispMonth += 12;
                    dispYear--;
                }
        }
        
    }
    outHtml(getCalendarTable());
    dragOff();
}

function getCalendarTable(){
    var now    = new Date()
    now.setYear(dispYear);
    now.setMonth((dispMonth));
    var absnow = new Date();
    //-年月日取得
    //nowmonth = now.getMonth()
    nowyear = getYear(now);
    nowmonth = dispMonth;
    


    //-YYYYMM作成
    nowyyyymm=nowyear*100+nowmonth
    //-YYYY/MM作成
    nowtitleyyyymm=nowyear+'/'+(nowmonth + 1)
    //-週設定
    week = new Array('日','月','火','水','木','金','土');

    //-カレンダー構築用基準日の取得
    fstday   = new Date(nowyear,nowmonth,1)                                           //今月の1日
    startday = fstday - ( fstday.getDay() * 1000*60*60*24 )  //最初の日曜日
    startday = new Date(startday)
    //-カレンダー構築用HTML
    ddata = ''
    ddata += "<div class='window_bar' onmousedown='setDragObject(\"WINDOW_CALENDAR\")'><nobr><span style='padding: 3  1 1 5px; float: left; font-size: 12px;'>CALENDAR</span>"
    ddata += "<a class='icon' href='javascript:closeCalendar()'><img style='border:none' src='./images/window_close_red.gif' alt='閉じる'></a></nobr></div>"
    //ddata += '<FORM name="calendarForm" ><br>'
    ddata += '            <table width="100%" class="cal_day" style="clear: left;" ><tr>'
    ddata += '                <th class="title1"><a class="cal_menu" href="javascript:reloadCalendar(\'-12\')"><<<</a></th>'
    ddata += '                <th class="title1"><a class="cal_menu" href="javascript:reloadCalendar(\'-1\')"><<</a></th>'
    ddata += '                <th class="title1"><a class="cal_menu" href="javascript:reloadCalendar(\'0\')">▼</a></th>'
    ddata += '                <th class="title1"><a class="cal_menu" href="javascript:reloadCalendar(\'1\')">>></a></th>'
    ddata += '                <th class="title1"><a class="cal_menu" href="javascript:reloadCalendar(\'12\')">>>></a></th>'
    ddata += '            </tr></table>'
    ddata += '<TABLE class="cal_day">\n'
    //-MONTH
    
    ddata += '   <TR>\n'
    ddata += '       <TH COLSPAN=7 class="title2" nowrap>'
    //ddata +=          nowtitleyyyymm 
    ddata += '           <SELECT name="CALENDAR_YEAR_SELECT" size="1" onChange="dragOff();reloadCalendar((this.value-(nowyear))*12);">'
    ddata +=                 selectYearOpthinHtml(nowyear)
    ddata += '        </SELECT>'
    ddata += '        <SELECT name="CALENDAR_MONTH_SELECT" onChange="reloadCalendar(this.value-(nowmonth+1));">'
    
    ddata +=                 selectMonthOpthinHtml(eval(nowmonth)+1)
    ddata += '        </SELECT>'    

    ddata += '       </TH>'
    ddata += '   </TR>\n'
    //-WEEK
    ddata += '   <TR>\n'
    for (i=0;i<7;i++){
        if (week[i]=="日"){
            ddata += '   <TH class="week_su">' + week[i] + '</TH>\n'
        } else if (week[i]=="土"){
            ddata += '   <TH class="week_sa">' + week[i] + '</TH>\n'
        } else {
            ddata += '   <TH class="week">' + week[i] + '</TH>\n'
        }
    }

    ddata += '   </TR>\n'
    //-DATE
    for(j=0;j<6;j++){
        ddata += '   <TR>\n'
        for(i=0;i<7;i++){
            nextday = startday.getTime() + (i * 1000*60*60*24)
            wrtday  = new Date(nextday)
            wrtdate = wrtday.getDate()
            wrtmonth= wrtday.getMonth()
            wrtyear = getYear(wrtday);
            wrtyyyymm = wrtyear * 100 + wrtmonth
            wrtyyyymmdd= ''+wrtyear +'-'+ (wrtmonth+1) +'-'+wrtdate
            var wrtdateA;
            wrtdateA = "";
            var out_date = wrtyear + "-" + (wrtmonth+1) + "-" + wrtdate;
            wrtdateA += '<A class="cal_day" href="javascript:'
            wrtdateA += 'function v(){document.' + formElement.form.name + '.' + formElement.name + '.value=\'' + out_date + '\';closeCalendar();};v();'
            //wrtdateA += 'alert(\'' + out_date + '\')'
            wrtdateA += '">' + wrtdate + '</A>'

            //wrtdateA  = '<A class=day HREF="javascript:'
           //wrtdateA += 'function v(){document.'+oj.form.name+'.elements[\''+oj.name+'\'].value=\'' + outputdate + '\';closeCal();}v();"   >' + wrtdate + '</A>'
           
            if(wrtyyyymm != nowyyyymm){ 
                ddata += ' <TD class="d_out">\n'
                ddata += wrtdateA
            } else if(wrtdate == absnow.getDate() && wrtmonth == absnow.getMonth() && getYear(wrtday) == getYear(absnow)){
                ddata += ' <TD class="today">' + wrtdateA
            } else if(wrtdate == eval(selectDay) && (wrtmonth+1) == eval(selectMonth) && getYear(wrtday) == eval(selectYear)){
                
                ddata += ' <TD class="d_select">' + wrtdateA
            } else {
                ddata += ' <TD class="normal">\n'
                ddata += wrtdateA
            }
            ddata += '   </TD>\n'
        }

        ddata += '   </TR>\n'
        startday = new Date(nextday)
        startday = startday.getTime() + (1000*60*60*24)
        startday = new Date(startday)
    }
    ddata += '   <TR>\n'
      ddata += '   <TD COLSPAN=7 align=right>\n'
       ddata += ' <INPUT TYPE=button VALUE="CLEAR" '
       ddata += 'onClick="function v(){document.' + formElement.form.name + '.' + formElement.name + '.value=\'\';closeCalendar();}v();">\n'
      ddata += '   </TD>\n'
    ddata += '   </TR>\n'
    ddata += '</TABLE>\n'
    //ddata += '</FORM>\n'    
    return ddata;
}
//年OptionHTML文字列取得
function selectYearOpthinHtml(year){
    var rtn = '';
    for (var y = eval(year)-20; y < eval(year)+20; y++){
        if (year == y){
            rtn += '<OPTION value="' + y + '" SELECTED>' + y + '年</OPTION>'
        } else {
            rtn += '<OPTION value="' + y + '">' + y + '年</OPTION>'
        }
    }
    return rtn;
}
//月OptionHTML文字列取得
function selectMonthOpthinHtml(month){
    var rtn = '';
    for (var m=1;m<13;m++){
        if (eval(month) == m){
        
            rtn += '<OPTION value="' + m + '" SELECTED>' + m + '月</OPTION>'
        } else {
            rtn += '<OPTION value="' + m + '">' + m + '月</OPTION>'
        }
    }
    return rtn;
}


function outHtml(html){
    var window_calendar=document.getElementById("WINDOW_CALENDAR");
    if (window_calendar == null){
        generateWindowHtml();
        window_calendar=document.getElementById("WINDOW_CALENDAR");
    }
    window_calendar.innerHTML="";
    window_calendar.innerHTML=html;
}
function generateWindowHtml(){
    var window_calendar = document.createElement("div");
    window_calendar.setAttribute("id","WINDOW_CALENDAR");
    //window_calendar.onmousedown = windowClick;

    var body_eles =document.getElementsByTagName("body");
    body_eles[0].appendChild(window_calendar);

}
function windowClick(){
    setDragObject('WINDOW_CALENDAR');
}
function scrollTop(){
       myOP = (navigator.userAgent.indexOf("Opera",0) != -1)?1:0; //OP
       myN6 = document.getElementById;  // N6 or IE
       myIE = document.all;             // IE
       myN4 = document.layers;          // N4
       if (myOP){                          // OP?
            return document.body.scrollTop;
       }else if (myIE){                    // IE?
            return document.body.scrollTop;
       }else if (myN6){                    // N6?
            //return window.pageYOffset;
            return 0;
       }else if (myN4){                    // N4?
          return 0;
       }
}
function scrollLeft(){
       myOP = (navigator.userAgent.indexOf("Opera",0) != -1)?1:0; //OP
       myN6 = document.getElementById;  // N6 or IE
       myIE = document.all;             // IE
       myN4 = document.layers;          // N4
       if (myOP){                          // OP?
            return document.body.scrollLeft;
       }else if (myIE){                    // IE?
            return document.body.scrollLeft;
       }else if (myN6){                    // N6?
            //return window.pageXOffset;
            return 0;
       }else if (myN4){                    // N4?
          return 0;
       }
}

function getYear(targetDate){
   myOP = (navigator.userAgent.indexOf("Opera",0) != -1)?1:0; //OP
   myN6 = document.getElementById;  // N6 or IE
   myIE = document.all;             // IE
   myN4 = document.layers;          // N4
   if (myOP){                          // OP?
        return targetDate.getYear() + 1900;
   }else if (myIE){                    // IE?
        if (targetDate.getYear() <2000){
            return targetDate.getYear() + 1900;
        } else {    
            return targetDate.getYear()
        }
   }else if (myN6){                    // N6?
        return targetDate.getYear() + 1900;
   }else if (myN4){                    // N4?
        return targetDate.getYear() + 1900;
   }
}
  
  
  

