/**
 * @author Administrator
 */



var now = new Date();

var lunarinfo = new Array(0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5d0, 0x14573, 0x052d0, 0x0a9a8, 0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b5a0, 0x195a6, 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60, 0x096d5, 0x092e0, 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0);

//==== 传回农历 y年的总天数      
function lyeardays(y){
    var i, sum = 348
    for (i = 0x8000; i > 0x8; i >>= 1) 
        sum += (lunarinfo[y - 1900] & i) ? 1 : 0
    return (sum + leapdays(y))
}

//==== 传回农历 y年闰月的天数      
function leapdays(y){
    if (leapmonth(y)) 
        return ((lunarinfo[y - 1900] & 0x10000) ? 30 : 29)
    else 
        return (0)
}

//==== 传回农历 y年闰哪个月 1-12 , 没闰传回 0      
function leapmonth(y){
    return (lunarinfo[y - 1900] & 0xf)
}

//====================================== 传回农历 y年m月的总天数      
function monthdays(y, m){
    return ((lunarinfo[y - 1900] & (0x10000 >> m)) ? 30 : 29)
}

//==== 算出农历, 传入日期物件, 传回农历日期物件      
//     该物件属性有 .year .month .day .isleap .yearcyl .daycyl .moncyl      
function lunar(objdate){
    var i, leap = 0, temp = 0;
    var basedate = new Date(1900, 0, 31);
    var offset = (objdate - basedate) / 86400000;
    this.daycyl = offset + 40;
    this.moncyl = 14;
    for (i = 1900; i < 2050 && offset > 0; i++) {
        temp = lyeardays(i);
        offset -= temp;
        this.moncyl += 12;
    }
    if (offset < 0) {
        offset += temp;
        i--;
        this.moncyl -= 12;
    }
    this.year = i;
    this.yearcyl = i - 1864;
    leap = leapmonth(i); //闰哪个月      
    this.isleap = false
    for (i = 1; i < 13 && offset > 0; i++) {
        //闰月      
        if (leap > 0 && i == (leap + 1) && this.isleap == false) {
            --i;
            this.isleap = true;
            temp = leapdays(this.year);
        }
        else {
            temp = monthdays(this.year, i);
        }
        //解除闰月      
        if (this.isleap == true && i == (leap + 1)) 
            this.isleap = false
        offset -= temp
        if (this.isleap == false) 
            this.moncyl++
    }
    if (offset == 0 && leap > 0 && i == leap + 1) 
        if (this.isleap) {
            this.isleap = false;
        }
        else {
            this.isleap = true;
            --i;
            --this.moncyl;
        }
    if (offset < 0) {
        offset += temp;
        --i;
        --this.moncyl;
    }
    this.month = i
    this.day = offset + 1
}

function cday(m, d){
    var nstr1 = new Array('日', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十');
    var nstr2 = new Array('初', '十', '廿', '卅', '　');
    var s;
    if (m > 10) {
        s = '十' + nstr1[m - 10]
    }
    else {
        s = nstr1[m]
    }
    s += '月'
    if (s == "十二月") 
        s = "腊月";
    if (s == "一月") 
        s = "正月";
    switch (d) {
        case 10:
            s += '初十';
            break;
        case 20:
            s += '二十';
            break;
        case 30:
            s += '三十';
            break;
        default:
            s += nstr2[Math.floor(d / 10)];
            s += nstr1[d % 10];
    }
    return (s);
}

//显示中文的日期和星期
function CalConv(){
    var curDay = new Date();
    giYear = curDay.getFullYear();
    giMonth = curDay.getMonth() + 1;
    giDay = curDay.getDate();
    var day = curDay.getDay();
    var week = new Array("星期日","星期一","星期二","星期三","星期四","星期五","星期六");
	var sdobj = new Date(now.getFullYear(), now.getMonth(), now.getDate());
    var ldobj = new lunar(sdobj);
    var cl = '';
    //农历bb'+(cld[d].isleap?'闰 ':' ')+cld[d].lmonth+' 月 '+cld[d].lday+' 日      
    var tt = cday(ldobj.month, ldobj.day);
    var chineseYear = new Date(now.getFullYear());
	document.write(""+giYear+"年"+giMonth+"月"+giDay+"日");
    document.write( "(" + tt+")",week[day],""); 
   
}


//计算农历年名称
//传入：年份
//返回：农历年名称
function Calculator(year){
    var Yn = new Array(); //农历年的名称 
    Yn[0] = "甲";
    Yn[1] = "乙";
    Yn[2] = "丙";
    Yn[3] = "丁";
    Yn[4] = "戊";
    Yn[5] = "己";
    Yn[6] = "庚";
    Yn[7] = "辛";
    Yn[8] = "壬";
    Yn[9] = "癸";
    var Ym = new Array();
    Ym[0] = "子";
    Ym[1] = "丑";
    Ym[2] = "寅";
    Ym[3] = "卯";
    Ym[4] = "辰";
    Ym[5] = "巳";
    Ym[6] = "午";
    Ym[7] = "未";
    Ym[8] = "申";
    Ym[9] = "酉";
    Ym[10] = "戌";
    Ym[11] = "亥";
    //如果农历年未过春节，而公历年已经进下年，则农历年份仍维持不变
    var sdobj = new Date(now.getFullYear(), now.getMonth(), now.getDate());
    var ldobj = new lunar(sdobj); //计算当前的农历月日
    var i = (12 - ldobj.month) * 30 + 30 - ldobj.day;//农历年距离农历年年底的天数
    var j = (12 - now.getMonth()) * 30 + 31 - now.getDate();//公历年距离公历年年底的天数
    if (i < j) {//由于正常情况下农历年月份慢于公历月份，所以距起年底的天数比公历年长；如果公历年进下年，而农历未过春节，则情况相反！
        year = year - 1;
    }
    var first = (year - 3) % 10;//估计以前使用公历的时候起始年份不是公历起始，所以存在差值，修正值为3
    var second = (year - 3) % 12;
    var firstName = Yn[first - 1];
    var secondName = Ym[second - 1];
    var chineseYear = firstName + secondName;
    return chineseYear;
}

