﻿/*==========================================================================================
Author:				Sandheart
E-Mail:				sxd.www@gmail.com
Create date:		2007-4-24
Description:		Calendar module
Operation method:	<input id="DateBox" onclick="Calendar.ShowCalendarBox(event,this.id,this.value,z)" type="text">
==========================================================================================*/
var Calendar = {};

var DObj, Tr1, Tr2, Tr3, mDObjSW, mDObjO, mWeekS, showStr, isShowList, showBoxId;
var mDObjS = 1;
var div_Z = 10;
var rowCount = 10;
var rowH = 18;
var rowW = 25;

DateInit(new Date());

//移到了function.js文件
//document.onmouseup = new Function("Calendar.ClearDownTime()");
function DateDiff(D1, D2)
{
    return Math.abs(parseInt(((D1 - D2) / 1000 / 60 / 60 / 24)));
}

function GetWeekInYear(D)
{
    var TempD = new Date(D.getFullYear(), 0, 1);
    return parseInt((DateDiff(D, TempD) + TempD.getDay()) / 7) + 1;
}

function DateInit(D)
{
    if (typeof (D) == "string") D = D.replace(/-/g, "/");
    DObj = (D == null || D == "") ? new Date() : new Date(D);
    Tr1 = new Array("", DObj.getFullYear() + "年" + eval(DObj.getMonth() + 1) + "月", "×", "关闭");
    Tr2 = new Array("<<", "<", "今日", ">", ">>");
    Tr3 = new Array("周", "日", "一", "二", "三", "四", "五", "六");
    showStr = new Array("上一年", "上一月", "显示今日", "下一月", "下一年", "周");
    mDObjSW = new Date(DObj.getFullYear(), DObj.getMonth(), 1).getDay();
    mDObjO = GetMonthOverDay(DObj);
    mWeekS = GetWeekInYear(new Date(DObj.getFullYear(), DObj.getMonth(), 1));
    isShowList = false;
    //Calendar.Colse();
}

function GetMonthOverDay(D)
{
    var TempD = new Date(D);
    TempD.setMonth(TempD.getMonth() + 1);
    TempD.setDate(1);
    TempD.setDate(TempD.getDate() - 1);
    return TempD.getDate();
}

Calendar.Colse = function()
{
    var TObj = document.getElementById("CalBox")
    //if(TObj != null ) TObj.parentNode.removeChild(TObj);
    if (TObj != null) TObj.innerHTML = "";
}

Calendar.ReDateValue = function(d)
{
    if (document.getElementById(showBoxId) != null)
        document.getElementById(showBoxId).value = DObj.getFullYear() + "-" + eval(DObj.getMonth() + 1) + "-" + d;
    Calendar.Colse();
}

Calendar.ChangeCalendarBox = function(obj, isShow)
{
    if (isShow == 1)
        document.getElementById("ShowMsg").innerHTML = obj.title;
    else
        document.getElementById("ShowMsg").innerHTML = "";
}

Calendar.ShowList = function(e, sType)
{
    var mouseX = e.clientX - 10;
    var mouseY = e.clientY;
    document.getElementById("listDiv").style.left = mouseX;
    document.getElementById("listDiv").style.top = mouseY;
    var listStr = "";
    var TempD = "";
    if (sType == 'y') TempD = DObj.getFullYear();
    for (i = 0; i < 10; i++)
    {
        listStr += "<div style=\"padding-left:3px;padding-right:3px;padding-top:2px; background-color:#D2E9FF;\">" + (TempD - 1) + "</div>";
        TempD--;
    }
    isShowList = true;
    setTimeout("Calendar.DeferShow('" + listStr + "')", 500);
}

Calendar.DeferShow = function(str)
{
    if (isShowList)
    {
        document.getElementById("listDiv").innerHTML = str;
        document.getElementById("listDiv").style.display = '';
    }
}

Calendar.ClearDownTime = function()
{
    isShowList = false;
}

Calendar.ShowCalendarBox = function(e, showDateBoxId, D, z)
{
    if (z)
    {
        div_Z = z++;
    }
    showBoxId = showDateBoxId;
    DateInit(D);
    var mouseX = 0;
    var mouseY = 0;
    if (e)
    {
        mouseX = e.clientX;
        mouseY = e.clientY;
    }

    var td_T = "<td bgcolor=\"#004182\" ";
    var td_FF = "<td bgcolor=\"#FFFFFF\" ";
    var td_F0 = "<td bgcolor=\"#F0F7F7\" ";
    var td_FC = "<td bgcolor=\"#FFFFCC\" ";
    //var mM_F = " onmousemove=\"this.style.backgroundColor='#FFD6AC';this.style.borderWidth='1px';this.style.borderStyle='groove';Calendar.ChangeCalendarBox(this,1);\"";
    var mM_F = " onmousemove=\"this.style.backgroundColor='#FFD6AC';Calendar.ChangeCalendarBox(this,1);\"";
    var mMO_F = mM_F + " onmouseout=\"this.style.backgroundColor='#FFFFFF';Calendar.ChangeCalendarBox(this,0);\" ";
    var mMO_F_T = mM_F + " onmouseout=\"this.style.backgroundColor='#004182';Calendar.ChangeCalendarBox(this,0);\" ";
    var mMO_F_D = mM_F + " onmouseout=\"this.style.backgroundColor='#FFFFFF';Calendar.ChangeCalendarBox(this,0);\" ";
    var mMO_F_M = mM_F + " onmouseout=\"this.style.backgroundColor='#F0F7F7';Calendar.ChangeCalendarBox(this,0);\" ";
    var selectDStr = " onclick=\"Calendar.ReDateValue(this.innerHTML)\" ";
    var sCStr = " text-align:center; height:" + rowH + "px; ";
    var sCStr_T = " font-weight:bold; color:#FFFFFF; text-align:center; height:" + (rowH + 5) + "px; ";
    var sCPStr = " cursor:pointer; text-align:right;padding-right:3px; ";
    var sPStr = " text-align:right;padding-right:3px; ";

    var starShowD = false;
    var calendarBoxStr = [];
    if (document.getElementById("CalBox") == null)
        calendarBoxStr.push("<div id=\"CalBox\" style=\"position:absolute;width:auto;height:auto;z-index:" + div_Z + ";left: " + mouseX + "px;top: " + mouseY + "px;\">");
    else
    {
        if (e)
        {
            document.getElementById("CalBox").style.left = mouseX + 'px';
            document.getElementById("CalBox").style.top = mouseY + 'px';
        }
        document.getElementById("CalBox").style.zIndex = div_Z;
    }
    calendarBoxStr.push("<table id=\"CalendarOutBox\" border=\"0\" cellpadding=\"0\" cellspacing=\"1\" bgcolor=\"#004182\" style=\" font-size:12px;\">");

    for (r = 0; r < rowCount; r++)
    {
        calendarBoxStr.push("<tr>");
        switch (r)
        {
            case 0:
                calendarBoxStr.push(td_T + "style=\"" + sCStr_T + "\">" + Tr1[0] + "</td>");
                calendarBoxStr.push(td_T + "colspan=\"6\" style=\"" + sCStr_T + "\">" + Tr1[1] + "</td>");
                calendarBoxStr.push(td_T + mMO_F_T + " style=\"" + sCStr_T + " cursor:pointer;\" onclick=\"Calendar.Colse()\" title=\"" + Tr1[3] + "\">" + Tr1[2] + "</td>");
                break;
            case 1:
                for (d = 0; d < 5; d++)
                {
                    switch (d)
                    {
                        case 0:
                            calendarBoxStr.push(td_FF + mMO_F + "style=\"cursor:pointer; " + sCStr + "\" onclick=\"Calendar.ShowCalendarBox(null,'" + showDateBoxId + "','" + new Date(new Date(DObj).setYear(DObj.getFullYear() - 1)) + "'," + div_Z + ")\" title=\"" + showStr[d] + "\">" + Tr2[d] + "</td>");
                            break;
                        case 1:
                            calendarBoxStr.push(td_FF + mMO_F + "style=\"cursor:pointer; " + sCStr + "\" onclick=\"Calendar.ShowCalendarBox(null,'" + showDateBoxId + "','" + new Date(new Date(DObj).setMonth(DObj.getMonth() - 1)) + "'," + div_Z + ")\" title=\"" + showStr[d] + "\">" + Tr2[d] + "</td>");
                            break;
                        case 2:
                            calendarBoxStr.push(td_FF + mMO_F + "colspan=\"4\" style=\"cursor:pointer; " + sCStr + "\" onclick=\"Calendar.ShowCalendarBox(null,'" + showDateBoxId + "','" + new Date() + "'," + div_Z + ")\" title=\"" + showStr[d] + "\">" + Tr2[d] + "</td>");
                            break;
                        case 3:
                            calendarBoxStr.push(td_FF + mMO_F + "style=\"cursor:pointer; " + sCStr + "\" onclick=\"Calendar.ShowCalendarBox(null,'" + showDateBoxId + "','" + new Date(new Date(DObj).setMonth(DObj.getMonth() + 1)) + "'," + div_Z + ")\" title=\"" + showStr[d] + "\">" + Tr2[d] + "</td>");
                            break;
                        case 4:
                            calendarBoxStr.push(td_FF + mMO_F + "style=\"cursor:pointer; " + sCStr + "\" onclick=\"Calendar.ShowCalendarBox(null,'" + showDateBoxId + "','" + new Date(new Date(DObj).setYear(DObj.getFullYear() + 1)) + "'," + div_Z + ")\" title=\"" + showStr[d] + "\">" + Tr2[d] + "</td>");
                            break;
                    }
                }
                break;
            case 2:
                for (d = 0; d < 8; d++)
                {
                    if (d == 0)
                        calendarBoxStr.push(td_F0 + " style=\"" + sCStr + " width:" + rowW + "px;\">" + Tr3[d] + "</td>");
                    else if (d == 1 || d == 7)
                        calendarBoxStr.push(td_FC + " style=\"text-align:center; width:" + rowW + "px; color:red;\">" + Tr3[d] + "</td>");
                    else
                        calendarBoxStr.push(td_FC + " style=\"" + sCStr + " width:" + rowW + "px;\">" + Tr3[d] + "</td>");
                }
                break;
            case rowCount - 1:
                calendarBoxStr.push(td_FC + " colspan=\"9\" style=\"" + sCStr + "\" id=\"ShowMsg\"></td>");
                break;
            default:
                for (d = 0; d < 8; d++)
                {
                    var DStr = "";
                    var TempStr = sPStr;
                    var TempStr1 = "";
                    if (mDObjSW == d - 1) starShowD = true;
                    if (mDObjS > mDObjO) starShowD = false;
                    if (starShowD)
                    {
                        DStr = mDObjS;
                        TempStr = sCPStr;
                        TempStr1 = mMO_F_D;
                    }

                    if (d == 0)
                    {
                        if (r != 3 && DStr == "")
                            calendarBoxStr.push(td_F0 + mMO_F_M + " style=\"" + sCStr + "cursor:pointer; \" title=\"" + mWeekS + Tr3[0] + "\">&nbsp;</td>");
                        else
                            calendarBoxStr.push(td_F0 + mMO_F_M + " style=\"" + sCStr + "cursor:pointer; \" title=\"" + mWeekS + Tr3[0] + "\">" + mWeekS + "</td>");
                    }
                    else if (d == 1 || d == 7)
                    {
                        if (starShowD && mDObjS == DObj.getDate())
                            calendarBoxStr.push("<td title=\"" + new Date(DObj.getFullYear(), DObj.getMonth(), DStr).toLocaleString().replace("0:00:00", "") + "\" " + selectDStr + " onmousemove=\"this.style.backgroundColor='#FFD6AC';Calendar.ChangeCalendarBox(this,1);\" onmouseout=\"this.style.backgroundColor='';Calendar.ChangeCalendarBox(this,0);\" style=\"" + TempStr + " border-width: 1px;border-style: groove; font-weight: bold; color:#FFFFFF;\">" + DStr + "</td>");
                        else
                            calendarBoxStr.push(td_FF + TempStr1 + " style=\"" + TempStr + " color:red;\" " + selectDStr + " title=\"" + new Date(DObj.getFullYear(), DObj.getMonth(), DStr).toLocaleString().replace("0:00:00", "") + "\">" + DStr + "</td>");
                    }
                    else
                    {
                        if (starShowD && mDObjS == DObj.getDate())
                            calendarBoxStr.push("<td title=\"" + new Date(DObj.getFullYear(), DObj.getMonth(), DStr).toLocaleString().replace("0:00:00", "") + "\" " + selectDStr + " onmousemove=\"this.style.backgroundColor='#FFD6AC';Calendar.ChangeCalendarBox(this,1);\" onmouseout=\"this.style.backgroundColor='';Calendar.ChangeCalendarBox(this,0);\" style=\"" + TempStr + " border-width: 1px;border-style: groove; font-weight: bold; color:#FFFFFF;\">" + DStr + "</td>");
                        else
                            calendarBoxStr.push(td_FF + TempStr1 + "style=\"" + TempStr + "\" " + selectDStr + " title=\"" + new Date(DObj.getFullYear(), DObj.getMonth(), DStr).toLocaleString().replace("0:00:00", "") + "\">" + DStr + "</td>");
                    }
                    if (d != 0 && starShowD) mDObjS++;
                }
                mWeekS++;
                break;
        }
        calendarBoxStr.push("</tr>");
    }
    starShowD = false;
    mDObjS = 1;
    calendarBoxStr.push("</table>");
    calendarBoxStr.push("<div id=\"listDiv\" style=\"display:none; position:absolute; left:0px; top:0px; z-index:" + (div_Z + 1) + "; border: 1px solid #005AB5; font-size:12px;\"></div>");
    if (document.getElementById("CalBox") == null)
    {
        calendarBoxStr.push("</div>");
        var _tmpdiv = document.createElement('div');
        _tmpdiv.innerHTML = calendarBoxStr.join('');
        document.body.appendChild(_tmpdiv);
        //	document.body.innerHTML += calendarBoxStr;
    }
    else
        document.getElementById("CalBox").innerHTML = calendarBoxStr.join('');
}
