/*
 * @(#)[calender.js]
 *
 * Copyright (c) 2008-2009,Suzuyo&Co.,Ltd.
 */

// 基準の年月
var baseYear = 0;
var baseMonth = 0;

// テーブル表示用の年月日
var tableYear = 0;
var tableMonth = 0;
var tableDay = 0;

// 対象(deperture/return)
var targetID;

// カレンダー子ウィンドウ呼び出し
function calOpen(yyyymmdd, target, static_url){
    //ウインドウ起動
    window.open(static_url + "/html/RES/js/calender.html?inDate=" + yyyymmdd + "=" + target,"window","height=250px,width=500px,status=no,help=no,toolbar=no,scrollbar=no,directories=no,menubar=no,location=no,resizable=no").focus();
    return false;
}

// カレンダー用HTML作成
function writeCalender()
{
    // 親から渡された年月を取得
    val = document.location.search;
    val = val.split("=");
    valDate = unescape(unescape(val[1]));

    if (!valDate) {
    	valDate = "";
    }

    if (valDate=="") {

        // 時刻を受け取れなかったので、システムから取得
        valDate = new Date();
        baseYear = valDate.getYear();
        if (baseYear < 1900) baseYear += 1900;
        baseMonth = valDate.getMonth() + 1;
    } else {

        // 基準の年月
        baseYear = valDate.substring(0, 4);
        baseMonth = valDate.substring(4, 6);
    }

    // 対象取得
    targetID = unescape(unescape(val[2]));

    // カレンダー表示用HTML格納
    var setDiv = "";
    setDiv += "<div id=\"div1\"><table><tr><td colspan=\"3\">";//ボタン表示用
    setDiv += "<div align=\"right\"><input type=\"button\" value=\" >>\" onclick=\"reView(1)\"></div>";
    setDiv += "</td></tr><tr>";// 1～3カレンダー表示用

    for (k = 0; k < 3; k++) {
        setDiv += "<td>" + createCalender(k) + "</td>";
    }
    setDiv += "</tr></table></div>";// div1
    setDiv += "<div id=\"div2\"><table><tr><td colspan=\"3\">";// ボタン表示用
    setDiv += "<div align=\"left\"><input type=\"button\" value=\"<< \" onclick=\"reView(0)\"></div>";
    setDiv += "</td></tr><tr>";// 4～6カレンダー表示用
    for (k = 3; k < 6; k++) {
        setDiv += "<td>" + createCalender(k) + "</td>";
    }
    setDiv += "</tr></table></div>";// div2

    // 画面表示
    document.getElementById("calender").innerHTML = setDiv;

    // 初期は1～3ヶ月のみ表示
    reView(0);
}

// ヘッダーの年月表示作成
function getYM(y, m){
    return y + "年" + m + "月";
}

// 1月単位のカレンダー作成
function createCalender(addMonth){

    // 初期化
    // 戻り値格納用
    var txtCalender = "";

    // テーブル表示用の年月日
    tableYear = baseYear;
    tableMonth = Number(baseMonth) + Number(addMonth);
    tableDay = 0;

    // 年越し対応
    if (Number(tableMonth) > 12) {
        tableMonth -= 12;
        tableYear++;
    }

    // YYYYMM形式に置換
    mm = new String(tableMonth);
    var yyyymm = tableYear + "" + mm;
    if (mm.length == 1) {
        yyyymm = tableYear + "0" + mm;
    }

    // 当月の開始曜日を取得
    var startDayOfWeek = dateselect_getWeek(tableYear, tableMonth, 1);

    // 年月ヘッダー生成
    txtCalender += "<tr class=\"calTr\"><td colspan=\"7\">" + getYM(tableYear, tableMonth) + "</td></tr>";
    txtCalender += "<tr class=\"calTr\"><td><font color=\"#FF0000\">日</font></td><td>月</td><td>火</td><td>水</td><td>木</td><td>金</td><td>土</td></tr>";

    // 6週×7日で1月カレンダーを生成する
    for (i = 0; i < 6; i++) {
        txtCalender += "<tr class=\"calTr\">";
        for (j = 0; j < 7; j++) {
            txtCalender += "<td>" + getDayNumber(i, j, startDayOfWeek, yyyymm) + "</td>";
        }
        txtCalender += "</tr>";
    }

    // tableタグで囲む
    txtCalender = "<table border=\"1\">" + txtCalender + "</table>";
    return txtCalender;
}

// 日付を取得(対象外は空白"&nbsp;"を返却)
function getDayNumber(weekNum, weekDay, sDofW, yyyymm){

    // 1週目で開始曜日調節
    if(weekNum == 0){
        if(weekDay < sDofW){

            // 1行目の空白枠
            return "&nbsp;";
        }
    }

    // 有効日付なので加算(初期は0なので予め加算する)
    tableDay++;

    // 対象月の日数を超えたら空を渡す
    if(tableDay > dateselect_bissextile(tableYear, tableMonth)){
        return "&nbsp;";
    }

    // 有効日付にはリンクで"YYYYMMDD"日付を渡すスクリプトに加工
    var rtn = "<a href=javascript:setDate('" + getYYYYMMDD(yyyymm, tableDay) + "')>" + tableDay + "</a>";
    return rtn;
}

// "YYYYMMDD"日付を設定する
function getYYYYMMDD(yyyymm, dd){

    // YYYYMMDD形式に置換
    day = new String(dd);
    var yyyymmdd = yyyymm + "" + day;

    if(day.length == 1){
        yyyymmdd = yyyymm + "0" + day;
    }
    return yyyymmdd;
}

// 1～3ヶ月、4～6ヶ月カレンダーの表示切替
function reView(i){

    if(i == 0){

        //[<< ]押下:1～3ヶ月表示
        document.getElementById("div1").style.visibility = 'visible';
        document.getElementById("div2").style.visibility = 'hidden';
    } else {

        //[ >>]押下:4～6ヶ月表示
        document.getElementById("div1").style.visibility = 'hidden';
        document.getElementById("div2").style.visibility = 'visible';
    }
}

// カレンダー画面終了処理
function setDate(yyyymmdd){

    //親画面のFunctionを呼び出す
    window.opener.setPullDn(yyyymmdd, targetID);

    //最後は自分でモーダルを閉じます。
    window.close();
}
