function DateLinkMapping(date, link) {
    this.Date = date;
    this.Link = link;
}
var Calendar = {
    settings:
            {
                firstDayOfWeek: 1,
                baseClass: "calendar",
                curDayClass: "curDay",
                prevMonthCellClass: "prevMonth",
                nextMonthCellClass: "nextMonth",
                curMonthNormalCellClass: "",
                prevNextMonthDaysVisible: true
            },
    containerId: "",
    weekDayNames: [],
    dateLinkMappings: [],
    Init: function(weekDayNames, dateLinkMappings, settings) {
		
        if (!weekDayNames || weekDayNames.length && weekDayNames.length != 7) {
			this.weekDayNames[1] = "日";
            this.weekDayNames[2] = "一";
            this.weekDayNames[3] = "二";
            this.weekDayNames[4] = "三";
            this.weekDayNames[5] = "四";
            this.weekDayNames[6] = "五";
            this.weekDayNames[7] = "六";
        }
        else {
            this.weekDayNames = weekDayNames;
        }
        if (dateLinkMappings) {
            this.dateLinkMappings = dateLinkMappings;
        }
    },
    RenderCalendar: function(divId, month, year) {
        this.containerId = divId;
        var ht = [];

        ht.push("<table class='", this.settings.baseClass, "' cellspacing='0' cellpadding='0' border='0'>");
        ht.push(this._RenderTitle(month, year));
        ht.push(this._RenderBody(month, year));
        ht.push("</table>");
        document.getElementById(divId).innerHTML = ht.join("");
        this._InitEvent(divId, month, year);
    },
    _RenderTitle: function(month, year) {
		
        var ht = [];
        //日期
        ht.push("<tr>");
        ht.push("<th colspan='7' style='width:224px;margin:0px auto;height:26px;'><div style='float:right;width:23px; height:23px; text-align:center;margin-right:-11px;z-index:999;position:relative;' id='", this.containerId, "_nextMonth' title='下一月'><img src='/Public/images/rt_content.jpg' width='23' height='23' /></div><div style='float:left;width:23px; height:23px;text-align:center;margin-left:-9px;z-index:998;position:relative;' id='", this.containerId, "_prevMonth' title='上一月'><img src='/Public/images/lf_content.jpg' width='23' height='23' /></div><div style='float:left;text-align:center;width:140px;color:#cccccc;font-weight:bold;font-family:Verdana, Arial, Helvetica, sans-serif; font-size:14px;padding-left:23px;height:22px;'>", year, "-", month, "</div></th>");
        ht.push("</tr>");
        //星期
        ht.push("<tr>");
        for (var i = 0; i < 7; i++) {
            var day = (i + this.settings.firstDayOfWeek) == 7 ? 7 : (i + this.settings.firstDayOfWeek) % 7;
            ht.push("<th>", this.weekDayNames[day], "</th>")
        }
        ht.push("</tr></table><table border='0' style='border-top:#5b5b5b 1px solid; border-right:#5b5b5b 1px solid;' cellpadding='0' cellspacing='0' class='calendar'>");
        return ht.join("");
    },
    _RenderBody: function(month, year) {
        var date = new Date(year, month - 1, 1);
        var day = date.getDay();
        var dayOfMonth = 1;
        var daysOfPrevMonth = (8 - this.settings.firstDayOfWeek + day) % 7;
        var totalDays = this._GetTotalDays(month, year);
        var totalDaysOfPrevMonth = this._GetToalDaysOfPrevMonth(month, year);
        var ht = [];
        var curDate;

        for (var i = 0; ; i++) {
            curDate = null;
            if (i % 7 == 0) {//新起一行
                ht.push("<tr class='tr' style='z-index:"+(100-i)+"'>");
            }
            ht.push("<td");
            if (i >= daysOfPrevMonth && dayOfMonth <= totalDays) {//本月
                curDate = new Date(year, month - 1, dayOfMonth);
                if (Date.parse(new Date().toDateString()) - curDate == 0) {
                    ht.push(" class='", this.settings.curDayClass, "'");
                }
                else {
                    ht.push(" class='", this.settings.curMonthNormalCellClass, "'");
                }
                dayOfMonth++;

            }
            else if (i < daysOfPrevMonth) {//上月
                if (this.settings.prevNextMonthDaysVisible) {
                    var prevMonth = month;
                    var prevYear = year;
                    if (month == 1) {
                        prevMonth = 12;
                        prevYear = prevYear - 1;
                    }
                    else {
                        prevMonth = prevMonth - 1;
                    }
                    curDate = new Date(prevYear, prevMonth - 1, totalDaysOfPrevMonth - (daysOfPrevMonth - i - 1));

                    ht.push(" class='", this.settings.prevMonthCellClass, "'");
                }
            }
            else {//下月
                if (this.settings.prevNextMonthDaysVisible) {
                    var nextMonth = month;
                    var nextYear = year;
                    if (month == 12) {
                        nextMonth = 1;
                        nextYear = prevYear + 1;
                    }
                    else {
                        nextMonth = nextMonth + 1;
                    }
                    curDate = new Date(nextYear, nextMonth - 1, i - dayOfMonth - daysOfPrevMonth + 2);
                    ht.push(" class='", this.settings.nextMonthCellClass, "'");
                }
            }
            ht.push(">");
            ht.push(this._BuildCell(curDate));
            ht.push("</td>");
            if (i % 7 == 6) {//结束一行
                ht.push("</tr>");
            }
            if (i % 7 == 6 && dayOfMonth - 1 >= totalDays) {
                break;
            }
			
        }ht.push("</table>");
        return ht.join("");
    },
    _BuildCell: function(curDate) {
        var ht = [];
        if (curDate) {
            for (var j = 0; j < this.dateLinkMappings.length; j++) {
				//alert(this.dateLinkMappings[j].Date.toString().split("-").join("/"))
				//alert(this.dateLinkMappings[j].Date+"|"+Date.parse(this.dateLinkMappings[j].Date)+""+curDate);
                if (Date.parse(this.dateLinkMappings[j].Date.toString().split("-").join("/")) - curDate == 0) {
                    ht.push("<a class='cur' href='"+this.dateLinkMappings[j].Link+"'>", curDate.getDate(), "</a><span class='tc'></span>");
                    break;
                }
            }
            if (j == this.dateLinkMappings.length) {
                ht.push(curDate.getDate());
            }
			
        }
        else {
            ht.push("&nbsp;");
        }
        return ht.join("");
    },
    _InitEvent: function(divId, month, year) {
		tips();
        var t = this;
        document.getElementById(this.containerId + "_prevMonth").style.cursor = "pointer";
        document.getElementById(this.containerId + "_nextMonth").style.cursor = "pointer";

        document.getElementById(this.containerId + "_prevMonth").onclick = function() {
            if (month == 1) {
                month = 12;
                year = year - 1;
            }
            else {
                month = month - 1;
            }

            t.RenderCalendar(divId, month, year);
        };
        document.getElementById(this.containerId + "_nextMonth").onclick = function() {
            if (month == 12) {
                month = 1;
                year = year + 1;
            }
            else {
                month = month + 1;
            }

            t.RenderCalendar(divId, month, year);
        };
    },
    //计算指定月的总天数
    _GetTotalDays: function(month, year) {
        if (month == 2) {
            if (this._IsLeapYear(year)) {
                return 29;
            }
            else {
                return 28;
            }
        }
        else if (month == 4 || month == 6 || month == 9 || month == 11) {
            return 30;
        }
        else {
            return 31;
        }
    },
    _GetToalDaysOfPrevMonth: function(month, year) {
        if (month == 1) {
            month = 12;
            year = year - 1;
        }
        else {
            month = month - 1;
        }
        return this._GetTotalDays(month, year);
    },
    //判断是否是闰年
    _IsLeapYear: function(year) {
        return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
    }
};

function setTab(m,n){
 var tli=document.getElementById("menu"+m).getElementsByTagName("li");
 var mli=document.getElementById("main"+m).getElementsByTagName("ul");
 for(i=0;i<tli.length;i++){
  tli[i].className=i==n?"hover":"";
  mli[i].style.display=i==n?"block":"none";
 }
}
function show_ht(elem) {
 var element = document.getElementById(elem);
 if (element.style.display == 'none') {
  element.style.display = '';
  var justChanged=true;
  element.offclick = function(e) {
   if(!justChanged){
    element.style.display = 'none';
    removeEventBase(document,'click',element.offclick,elem);
   } else {
    justChanged=false;
   }
  }
  addEventBase(document,'click',element.offclick,elem);
 }

 return false;
}

function addEventBase(obj,type,fn,name_hash){
 if(obj.addEventListener)
  obj.addEventListener(type,fn,false);
 else if(obj.attachEvent){
  obj["e"+type+fn+name_hash]=fn;
  obj[type+fn+name_hash]=function(){
   obj["e"+type+fn+name_hash](window.event);
  }
  obj.attachEvent("on"+type,obj[type+fn+name_hash]);
 }
}
function removeEventBase(obj,type,fn,name_hash){
 if(obj.removeEventListener)
  obj.removeEventListener(type,fn,false);
 else if(obj.detachEvent){
  obj.detachEvent("on"+type,obj[type+fn+name_hash]);
  obj[type+fn+name_hash]=null;
  obj["e"+type+fn+name_hash]=null;
 }
}

function $a(id,tag){var re=(id&&typeof id!="string")?id:document.getElementById(id);if(!tag){return re;}else{return re.getElementsByTagName(tag);}}
function tips(){
    var article=$a("calendar","a")
    for(i=0;i<article.length;i++){
        if(article[i].className.indexOf("cur")==-1) continue;
        article[i].onmouseover=function(e){
            var e=e||event;
            posX = e.clientX;
            posY = e.clientY; 
            var tipbox=get_nextSibling(this);
            var boxlist=$a("calendar","span"); 
            for(j=0;j<boxlist.length;j++){
                    boxlist[j].style.display="none";
                   var url = boxlist[j].previousSibling.href;
                   var eid = parseInt(url.substring(url.lastIndexOf('/')+1,url.length));
                   for(k=0;k<calen.length;k++){
                    if(calen[k].id == eid){
                      boxlist[j].innerHTML=calen[k].name; 
                    }
                   }
            } 

            // 判断是否需要显示图片
            if($("#event_pic").lenght > 0){
                url = tipbox.previousSibling.href;
                eid = parseInt(url.substring(url.lastIndexOf('/')+1,url.length));
                for(k=0;k<calen.length;k++){
                 if(calen[k].id == eid){
                    $("#event_pic").attr("src" ,calen[k].pic);
                    break;
                 }
                }
            }
            tipbox.style.display="block";
            tipbox.style.left="1px";
            tipbox.style.top="23px"; 
            tipbox.onmouseover=function(){this.style.display="block";}
            tipbox.onmouseout=this.onmouseout=function(){tipbox.style.display="none";}
        }
    }
}
function get_nextSibling(n){
    var x=n.nextSibling;
    while (x.nodeType!=1){
    x=x.nextSibling;
    }
    return x;
}
