/**
文件: 197:8008/library/script/calendar.js, 1 tab indent, CR LF, UTF-8, no-BOM
模块: 日历[Module.calendar]
更新: 9:49 2007-2-27
用法: 
oneCalendar.showCalendar("添加日历的id", 月(0~11), 年, 日(1~31));
oneCalendar 是默认初始生成的，日历中没有点击功能
可以用下面2 种方式生成自定义功能
calendar_day_click 在每天链接点击时调用，传入一个参数(类型: "2006-2-2")
calendar_day_link 是每天链接的href 值，传入一个参数(类型: "2006-2-2")
*/
var Module=Module||{};

Module.calendarArray=[];
Module.calendar=function(opt){
	this.calendar_day_click=function(inputString){
		/*styleof inputString "2006-1-1"*/
	};
	this.calendar_day_link=function(inputString){
		/*styleof inputString "2006-1-1"*/
		return inputString;
	};
	if(opt){/*load option*/
		if(opt.calendar_day_click){
			this.calendar_day_click=opt.calendar_day_click;
		}
		if(opt.calendar_day_link){
			this.calendar_day_link=opt.calendar_day_link;
		}
	}
	this.elmId="";
	this.calendarId=Module.calendarArray.length;
	Module.calendarArray[this.calendarId]=this;
};

Module.calendar.prototype={
	L_gCalendarPrevMonthAlt_text:"上个月",
	L_gCalendarNextMonthAlt_text:"下个月",
	L_calendarDayNames_text : ["日", "一", "二", "三", "四", "五", "六"],
	dCalendarStartDay : 0, /*0 sunday, 1 monday, 2 tuesday...*/
	calendarTitleDateFormat:"yyyy年 mm月",
	formatCalendarTitleDate:function(strMonth,strYear){
		var format = "yyyy-mm"
		if(typeof(this.calendarTitleDateFormat) != "undefined")
		{
			format = this.calendarTitleDateFormat;
		}
		format = format.replace("mm",strMonth);
		format = format.replace("yyyy", strYear);
		return format;
	},
	showCalendar:function(targetId, dMonth, dYear, dDay){
		this.elmId=targetId;
		if(dMonth < 0){
			dMonth = 11;
			dYear--;
		}
		if(dMonth > 11){
			dMonth = 0;
			dYear++;
		}
		var dNow = new Date();
		//没看懂这个判断
		if(dDay == 90 && dMonth == dNow.getMonth() && dYear == dNow.getYear()){
			dDay = dNow.getDate();
		}
		var dCurFD = new Date(dYear, dMonth, 1);//当前月的第一天
		var dGivenDate = new Date(dYear, dMonth, dDay);
		var dCurrentMonthFirstDay = dCurFD.getDay();//当前月第一天是星期几
		var dCurrentViewDate = new Date(dCurFD);//用来循环显示每天
		
		var weekMilliseconds = 604800000;//1000*60*60*24*7
		var tmpStartDay = this.dCalendarStartDay % 7;//第一天是星期几
		
		var iDays = tmpStartDay - dCurrentMonthFirstDay;  // how many days before the current month's 1st day?
		if(iDays> 0)
		{
			iDays -= 7;
		}
		var oBuf = '<div class="calendar_body">';
		oBuf += '<div class="calendar_top">';
		oBuf += '<a href="" onclick="Module.calendarArray['+this.calendarId+'].showCalendar(\''+targetId+"',"+ (dMonth - 1) + ',' + dYear +','+dDay+'); return false;"';
		oBuf += 'class="leftb" title="'+this.L_gCalendarPrevMonthAlt_text+'">&lt; &lt;</a>';
		oBuf += '<a href="" onclick="Module.calendarArray['+this.calendarId+'].showCalendar(\''+targetId+"',"+ (dMonth + 1) + ',' + dYear +','+dDay+'); return false;"';
		oBuf += 'class="rightb" title="'+this.L_gCalendarNextMonthAlt_text+'">&gt; &gt;</a>';
		oBuf += '<p>'+dYear+'年'+(dMonth+1)+'月</p></div>';
		oBuf += '<div class="calendar_week"><ul class="week_ul">';
		for(var e = 0; e < 7; e++){
			tmpStartDay = tmpStartDay % 7;
			if(tmpStartDay== 0 || tmpStartDay== 6){
				oBuf += '<li><span class="weekend">' + this.L_calendarDayNames_text[tmpStartDay] + '</span></li>';
			}else{
				oBuf += '<li>' +  this.L_calendarDayNames_text[tmpStartDay] + '</li>';
			}
			tmpStartDay ++;
		}
		oBuf += '</ul></div>';
		
		var nextMonthFirstDay = new Date(dYear, dMonth+1, 1);
		var IsNextMonthFirstDaySunday = nextMonthFirstDay.getDay()==0;
		for(var iRows=0; iRows < 6; iRows++){
			dCurrentMonthDate = new Date(dCurFD.getFullYear(), dCurFD.getMonth(), dCurFD.getDate() + iDays);
			if(iRows==5 && dCurrentMonthDate.getMonth() > dCurFD.getMonth()) continue;        
			if(iRows==5 && IsNextMonthFirstDaySunday) continue;
			oBuf += '<div class="calendar_day"><ul class="day_ul">';
			for(var iCols=0; iCols < 7; iCols++){
				dCurrentViewDate = new Date(dCurFD.getFullYear(), dCurFD.getMonth(), dCurFD.getDate() + iDays);
				dCurrentViewDateString=""+dCurrentViewDate.getFullYear()+'-'+(dCurrentViewDate.getMonth()+1)+'-'+dCurrentViewDate.getDate();
				oBuf+='<li class="day_li">';
				if((dGivenDate.toDateString() == dCurrentViewDate.toDateString()) && (dDay != 90)){
					oBuf += '<a href="'+this.calendar_day_link(dCurrentViewDateString)+'" onclick="Module.calendarArray['+this.calendarId+'].calendar_day_click(\''+dCurrentViewDateString+'\'); return false;" class="today">'+dCurrentViewDate.getDate()+'</a>';
				}else{
					if(dCurrentViewDate.getMonth() != dMonth || iDays < 0){
						oBuf += '<a href="'+this.calendar_day_link(dCurrentViewDateString)+'" onclick="Module.calendarArray['+this.calendarId+'].calendar_day_click(\''+dCurrentViewDateString+'\'); return false;" class="otherday">'+dCurrentViewDate.getDate()+'</a>';
					}else{
						oBuf += '<a href="'+this.calendar_day_link(dCurrentViewDateString)+'" onclick="Module.calendarArray['+this.calendarId+'].calendar_day_click(\''+dCurrentViewDateString+'\'); return false;">'+dCurrentViewDate.getDate()+'</a>';
					}
				}
				oBuf += '</li>';
				iDays++;
			}
			oBuf += '</ul></div>';
		}
		oBuf += '</div>';
		document.getElementById(targetId).innerHTML = oBuf;
	},
	killMe:function(){Module.calendarArray[this.calendarId]=null;}
};

var oneCalendar=new Module.calendar();
