var importantDay = new Array(
    "三月三十-我的生日"
    );

var moods= new Array(
    new Array("谦虚不是把自己想得很糟&#65292;而是完全不想自己&#12290;&#12288;&#12288;&#12288;&#12288;&#12288;&#12288;&#12288;&#12288;&#12288;&#12288;&#12288;--卢维斯定理", "&#9734;"),
    new Array("虽然不能给你爱情&#65292;可是我会给你最真的友谊&#12290;", "&#9734;")
    );

var tags= new Array(
    new Array("FreeBSD", "http://blog.liuweinan.com/labels/FreeBSD.html"),
    new Array("Live", "http://blog.liuweinan.com/labels/Live.html"),
    new Array("Love", "http://blog.liuweinan.com/labels/Love.html"),
    new Array("MirandaIM", "http://blog.liuweinan.com/labels/MirandaIM.html"),
    new Array("Mood", "http://blog.liuweinan.com/labels/Mood.html"),
    new Array("Music", "http://blog.liuweinan.com/labels/Music.html")
);

var links= new Array(
    new Array("FreeBSD China", "&#9832;", "http://www.freebsdchina.com/index.php"),
    new Array("LiuWeinan.com", "&#9832;", "http://www.liuweinan.com/")
);

var friends= new Array(
    new Array("Angel's net blog", "&#9792;", "http://xxangella.spaces.live.com/"),
    new Array("Orz My Rita", "&#9792;", "http://ritamay23.spaces.live.com/"),
    new Array("恶魔的古怪想法", "&#9792;", "http://flyanthony1288.spaces.live.com/"),
    new Array("欣欣 のblog", "&#9792;", "http://luxinvikcn.spaces.live.com/"),
    new Array("Seer's Blog", "&#9794;", "http://blog.163.com/seerxs/"),
    new Array("SIRIUS - 破冰而出", "&#9794;", "http://www.wangxiaotian.com/blog/"),
    new Array("湘宁のblog", "&#9794;", "http://rglxn.spaces.live.com/")
);


/////////////////////////////////////////////////////////////
function getFirstDay(Y, M, D) {
    var y, m, d;
    y = parseInt(Y,10);
    m = parseInt(M,10);
    d = parseInt(D,10);
    var fy, fa, fm;
    if (y == 0) {
    return false;
    }
    if (y == 1582 && m == 10 && d > 4 && d < 15) {
    return false;
    }
    if (y < 0) {
    y++;
    }
    if (m > 2) {
    fy = y;
    fm = m + 1;
    } else {
    fy = y - 1;
    fm = m + 13;
    }
    var returnValue = Math.floor(Math.floor(365.25 * fy) + Math.floor(30.6001 * fm) + d + 1720995);
    var gregorianStart = 15 + 31 * (18994);
    if (d + 31 * (m + 12 * y) >= gregorianStart) {
    fa = Math.floor(0.01 * fy);
    returnValue += 2 - fa + Math.floor(0.25 * fa);
    }
    return returnValue + 1;
}

function getMonthURL(iM) {
    var aM = iM.split("-");
    if (aM.length == 2) {
    if (aM[1] < 10) {
        return "/" + aM[0] + "_0" + aM[1] + "_01_archive.html";
    } else {
        return "/" + aM[0] + "_" + aM[1] + "_01_archive.html";
    }
    } else {
    return "";
    }
}

/////////////////////////////////////////////////////////////

var LunarDaysOfMonth = new Array
(
 0xd4a8, 0xd4a0, 0xda50, 0x5aa8, 0x56a0, 0xaad8, 0x25d0, 0x92d0, 0xc958, 0xa950, // 2001-2010 
 0xb4a0, 0xb550, 0xb550, 0x55a8, 0x4ba0, 0xa5b0, 0x52b8, 0x52b0, 0xa930, 0x74a8, // 2011-2020 
 0x6aa0, 0xad50, 0x4da8, 0x4b60, 0x9570, 0xa4e0, 0xd260, 0xe930, 0xd530, 0x5aa0, // 2021-2030 
 0x6b50, 0x96d0, 0x4ae8, 0x4ad0, 0xa4d0, 0xd258, 0xd250, 0xd520, 0xdaa0, 0xb5a0, // 2031-2040 
 0x56d0, 0x4ad8, 0x49b0, 0xa4b8, 0xa4b0, 0xaa50, 0xb528, 0x6d20, 0xada0, 0x55b0  // 2041-2050 
 );

// 数组LunarLeapYear存放农历2001年到2050年闰月的月份，如没有则为0，从高到低，每字节存两年 
var LunarLeapYear = new Array
(
 0x40, 0x02, 0x07, 0x00, 0x50, // 2001-2010 
 0x04, 0x09, 0x00, 0x60, 0x04, // 2011-2020 
 0x00, 0x20, 0x60, 0x05, 0x00, // 2021-2030 
 0x30, 0xb0, 0x06, 0x00, 0x50, // 2031-2040 
 0x02, 0x07, 0x00, 0x50, 0x03  // 2041-2050 
 );

// 返回农历iLunarYear年的闰月月份，如没有则返回0 
function GetLeapMonth(iLunarYear)
{ 
    var Leap = LunarLeapYear[(iLunarYear - 2001) >> 1];
    return (((iLunarYear - 2001) & 1) == 0) ? (Leap >> 4) : (Leap & 0x0f);
} 

// 返回农历iLunarYer年iLunarMonth月的天数，结果是一个长整数
// 如果iLunarMonth不是闰月， 高字为0，低字为该月的天数
// 如果iLunarMonth是闰月， 高字为后一个月的天数，低字为前一个月的天数
function LunarMonthDays(iLunarYear, iLunarMonth)
{ 
    var High;
    var Low;
    var Bit;

    High = 0;
    Low = 29;
    Bit = 16 - iLunarMonth;
    if ((iLunarMonth > GetLeapMonth(iLunarYear)) && (GetLeapMonth(iLunarYear) > 0))  Bit--;
    if ((LunarDaysOfMonth[iLunarYear - 2001] & (1 << Bit)) > 0)  Low++;
    if (iLunarMonth == GetLeapMonth(iLunarYear))
    {
        High = ((LunarDaysOfMonth[iLunarYear - 2001] & (1 << (Bit-1))) > 0) ?  30 : 29;
    }

    return Low + (High << 16);
} 

// 返回农历iLunarYear年的总天数
function LunarYearDays(iLunarYear)
{ 
    var Days;
    var tmp;

    Days = 0;
    for (var i=1; i <= 12; i++)
    {
    tmp = LunarMonthDays(iLunarYear, i);
    Days = Days + ((tmp >> 16) & 0xffff); //取高位 
    Days = Days + (tmp & 0xffff); //取低位 
    }

    return Days;
} 

// 将农历iLunarYear年格式化成天干地支记年法表示的字符串 
function FormatLunarYear(iLunarYear)
{ 
    var szText1 = new String("甲乙丙丁戊己庚辛壬癸");
    var szText2 = new String("子丑寅卯辰巳午未申酉戌亥");
    var strYear;

    strYear = szText1.substr((iLunarYear - 4) % 10, 1);
    strYear = strYear + szText2.substr((iLunarYear - 4) % 12, 1);

    return strYear + "年";
}

// 将农历iLunarMonth月格式化成农历表示的字符串
function FormatLunarMonth(iLunarMonth)
{ 
    var szText = new String("正二三四五六七八九十");
    var strMonth;

    if (iLunarMonth <= 10)
    {
    strMonth = szText.substr(iLunarMonth - 1, 1);
    }
    else if (iLunarMonth == 11) strMonth = "十一";
    else strMonth = "十二";

    return strMonth + "月";
} 

// 将农历iLunarDay日格式化成农历表示的字符串
function FormatLunarDay(iLunarDay)
{ 
    var szText1 = new String("初十廿三");
    var szText2 = new String("一二三四五六七八九十");
    var strDay;
    if ((iLunarDay != 20) && (iLunarDay != 30))
    {
    strDay = szText1.substr((iLunarDay - 1) / 10, 1) + szText2.substr((iLunarDay - 1) % 10, 1);
    }
    else if (iLunarDay != 20)
    {
    strDay = szText1.substr(iLunarDay / 10, 1) + "十";
    }
    else
    {
    strDay = "二十";
    }

    return strDay;
} 

// 将公历日期转换为农历日期，返回农历表示的字符串
function GetLunarDateString(SolarDate)
{
    var tmp;
    var iLunarYear;
    var iLunarMonth;
    var iLunarDay;
    var Leap = false;
    var MinMilli = 1000 * 60;
    var HrMilli = MinMilli * 60;
    var DyMilli = HrMilli * 24;

    // 从2001年1月1日算起，给定的公历日期已经过去的天数
    // 11323是1970年1月1日到2001年1月1日之间的天数，因为Date是从1970年1月1日作为起点的
    var iSpanDays = Math.round(SolarDate.getTime() / DyMilli) - 11323;

    // 公历2001年1月24日为农历2001年正月初一，差23天
    if (iSpanDays < 23)
    {
    iYear = 2000;
    iLunarMonth = 12;
    iLunarDay = iSpanDays + 7;
    }
    else
    {
    // 从农历2001年正月初一算起 
    iSpanDays = iSpanDays - 23;
    iLunarYear = 2001;
    iLunarMonth = 1;
    iLunarDay = 1;

    // 计算农历年 
    tmp = LunarYearDays(iLunarYear);
    while (iSpanDays >= tmp)
    {
        iSpanDays -= tmp;
        iLunarYear++;
        tmp = LunarYearDays(iLunarYear);
    }

    // 计算农历月 
    tmp = LunarMonthDays(iLunarYear, iLunarMonth) & 0xffff; //取低字
    while (iSpanDays >= tmp)
    {
        iSpanDays -= tmp;
        if (iLunarMonth == GetLeapMonth(iLunarYear))  // 该年该月闰月
        {
        tmp = LunarMonthDays(iLunarYear, iLunarMonth) >> 16; //取高字
        if (iSpanDays < tmp)
        {
            Leap = (tmp > 0) ? true : false;  // 闰月的后个月？
            break;
        }
        iSpanDays = iSpanDays - tmp;
        }

        iLunarMonth++;
        tmp = LunarMonthDays(iLunarYear,iLunarMonth) & 0xffff; //取低字
    }

    // 计算农历日 
    iLunarDay += iSpanDays;
    }

    //return FormatLunarYear(iLunarYear) + (Leap ? "闰" : "") + FormatLunarMonth(iLunarMonth) + FormatLunarDay(iLunarDay);
    return (Leap ? "闰" : "") + FormatLunarMonth(iLunarMonth) + FormatLunarDay(iLunarDay);
}

/////////////////////////////////////////////////////////////

function Calendar() {
    var Day = new Array("\u65e5", "\u4e00", "\u4e8c", "\u4e09", "\u56db", "\u4e94", "\u516d");
    var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    var daysInAWeek = 7;
    var OStr;
    var today = new Date();

    var iCY = document.location.href.match(/\d{4}(?=[_|/])/);
    var temp = document.location.href.match(/\d{4}[_|/]\d\d/);
    var iCM = new String(temp).substr(5);
    if (iCY == null)
    {
        iCY = today.getFullYear();
        iCM = today.getMonth() + 1;
    }
    var iCD = today.getDate();

    iCY = parseInt(iCY,10);
    iCM = parseInt(iCM,10);
    iCD = parseInt(iCD,10);

    if ( iCM==0 )
    {
        iCM = 12;
        iCY--;
    }

    var prev_date = new Date(iCY, iCM-2, 1);
    var next_date = new Date(iCY, iCM, 1);

    var sCP = prev_date.getFullYear() + '-' + (prev_date.getMonth() + 1);
    var sCN = next_date.getFullYear() + '-' + (next_date.getMonth() + 1);

    if (iCY == "" || isNaN(iCY)) {
        thisYear = today.getFullYear();
    } else {
        thisYear = parseInt(iCY,10);
    }
    if (iCM == "" || isNaN(iCM)) {
        thisMonth = today.getMonth() + 1;
    } else {
        thisMonth = parseInt(iCM,10);
        if (thisMonth < 1) {
            thisMonth = 1;
    }
    if (thisMonth > 12) {
        thisMonth = 12;
        }
    }
    if (iCD == "" || isNaN(iCD)) {
        thisDay = today.getDate();
    //thisDay = 0;
    } else {
        thisDay = parseInt(iCD,10);
        if (thisDay < 0) {
            thisDay = 1;
        }
        if (thisDay > 31) {
            thisDay = 31;
        }
    }

    var sourcecode = document.documentElement.outerHTML;
    var posts = sourcecode.match(/\/\d{4}[/]\d{2}[/].*(?="\s*title="permanent\ link)/g);
    var postd = sourcecode.match(/\d{1,2}[/]\d{2}[/]\d{4}(?=\s*\d{2}:\d{2}:\d{2})/g);
    var temp =  "^" + thisMonth + "[/]\\d{2}[/]" + thisYear;
    var re = new RegExp(temp);

    var HasLog = new Array();
    if (posts != null) {
        for (var i = 0; i < postd.length; i++) {
            if (re.test(postd[i])) {
                HasLog[parseInt(postd[i].match(/\d{2}(?=[/]\d{4})/g),10)] = posts[i];
            }
        }
    }

    if ((thisYear % 4) == 0) {
        daysInMonth[1] = 29;
        if ((thisYear % 100) == 0 && (thisYear % 400) != 0) {
            daysInMonth[1] = 28;
        }
    }

    OStr = "<table width=\"80%\" cellpadding=2 cellspacing=1 border=0 class=calendar><tr><td class=calendar_h align=center colspan=7>";
    if (getMonthURL(sCP) == "") {
    OStr += "&laquo;";
    } else {
    OStr += "<a href=\"" + getMonthURL(sCP) + "\">&laquo;</a>";
    }
    OStr += "&nbsp;" + thisYear + "\u5E74&nbsp;" + thisMonth + "\u6708&nbsp;";
    if (getMonthURL(sCN) == "") {
    OStr += "&raquo;";
    } else {
    OStr += "<a href=\"" + getMonthURL(sCN) + "\">&raquo;</a>";
    }
    OStr += "</td></tr><tr>";
    for (i = 0; i < daysInAWeek; i++) {
    OStr += "<td class=\"week\">" + Day[i] + "</td>";
    }
    OStr += "</tr><tr>";
    var firstDay = (getFirstDay(thisYear, thisMonth, 1)) % 7;
    for (i = 0; i < firstDay; i++) {
    OStr += "<td class=day>&nbsp;</td>";
    }
    for (d = 1; i < daysInAWeek; i++, d++) {
        if (d == 5 && thisMonth == 10 && thisYear == 1582) {
            d += 10;
        }
        OStr += "<td";
        if (d == thisDay && thisYear == today.getFullYear() && thisMonth == today.getMonth() + 1) {
            OStr += " class=today";
        } else {
            for ( var j = 0; j < importantDay.length; j ++) {
                var iDay = importantDay[j].split("-");
                if (iDay.length == 2) {
                    if (GetLunarDateString(new Date(thisYear, thisMonth-1, d)) == iDay[0]) {
                        OStr += " style='color: #F00;font-size: 11px;text-align: center;white-space: nowrap; font-weight: bold;' title='" + iDay[1] + " :&#xd;农历" + iDay[0] + "'";
                        break;
                    }
                    if (j == importantDay.length - 1) {
                        OStr += " class=day";
                    }
                }
            }
        }
        if (HasLog[d]) {
            OStr += "><a href=\"" + HasLog[d];
            OStr += "\"><b>" + d + "</b></a></td>";
        } else {
            OStr += ">" + d + "</td>";
        }
    }
    var lastDayOfMonth = daysInMonth[thisMonth - 1];
    for (j = 1; j < 6 && d <= lastDayOfMonth; j++) {
        OStr += "</tr><tr>";
        for (i = 0; i < daysInAWeek && d <= lastDayOfMonth; i++, d++) {
            OStr += "<td";
            if (d == thisDay && thisYear == today.getFullYear() && thisMonth == today.getMonth() + 1) {
                OStr += " class=today";
            } else {
                for ( var j = 0; j < importantDay.length; j ++) {
                    var iDay = importantDay[j].split("-");
                    if (iDay.length == 2) {
                        if (GetLunarDateString(new Date(thisYear, thisMonth-1, d)) == iDay[0]) {
                            OStr += " style='color: #F00;font-size: 11px;text-align: center;white-space: nowrap; font-weight: bold;' title='" + iDay[1] + " :&#xd;农历" + iDay[0] + "'";
                            break;
                        }
                        if (j == importantDay.length - 1) {
                            OStr += " class=day";
                        }
                    }
                }
            }
            if (HasLog[d]) {
                OStr += "><a href=\"" + HasLog[d];
                OStr += "\"><b>" + d + "</b></a></td>";
            } else {
                OStr += ">" + d + "</td>";
            }
        }
        for (; i < daysInAWeek; i++) {
            OStr += "<td class=day>&nbsp;</td>";
        }
    }
    OStr += "</tr></table>";
    document.write(OStr);
}

function Moods() {
    var OStr = "<ul>";
    for (var i = 0; i < moods.length; i++) {
        OStr += "<li>" + moods[i][1] + " " + moods[i][0] + "</li>";
    }
    OStr += "</ul>";
    document.write(OStr);
}

function Tags() {
    var OStr = "<ul>";
    for (var i = 0; i < tags.length; i++) {
        OStr += "<li><a href='" + tags[i][1] + "'>" + tags[i][0] + "</a></li>";
    }
    OStr += "</ul>";
    document.write(OStr);
}

function Links() {
    var OStr = "<ul>";
    for (var i = 0; i < links.length; i++) {
        OStr += "<li><a href='" + links[i][2] + "'>" + links[i][1] + " " + links[i][0] + "</a></li>";
    }
    OStr += "</ul>";
    document.write(OStr);
}

function Friends() {
    var OStr = "<ul>";
    for (var i = 0; i < friends.length; i++) {
        OStr += "<li><a href='" + friends[i][2] + "'>" + friends[i][1] + " " + friends[i][0] + "</a></li>";
    }
    OStr += "</ul>";
    document.write(OStr);
}

