
    Date.prototype.getTheDate=function(){
		return {Y:this.getFullYear(),M:this.getMonth()+1,D:this.getDate()};
	}

	Date.prototype.beforeTheDate=function(Y,M,D){
		if(Y<this.getFullYear()||(Y==this.getFullYear()&&M<this.getMonth()+1)||(Y==this.getFullYear()&&M==this.getMonth()+1&&D<this.getDate()))
		{
			return true;
		}
		else
		{
			return false;
		}
	}


	Date.prototype.afterTheDate=function(Y,M,D){
		if(Y>this.getFullYear()||(Y==this.getFullYear()&&M>this.getMonth()+1)||(Y==this.getFullYear()&&M==this.getMonth()+1&&D>this.getDate()))
		{
			return true;
		}
		else
		{
			return false;
		}
	}


	Date.prototype.getThePreDate=function(dateObj,minYear){
		var M=dateObj.M;
		var Y=dateObj.Y;
		var D=dateObj.D;
		M--;
		if(M<1)
		{
			M=12;
			Y--;
		}
		if(Y<minYear)
		{
			Y=minYear;
		}
		return "{Y:"+Y+",M:"+M+",D:"+D+"}";
	}


	Date.prototype.getTheNextDate=function(dateObj,maxYear){
		var M=dateObj.M;
		var Y=dateObj.Y;
		var D=dateObj.D;
		M++;
		if(M>12)
		{
			M=1;
			Y++;
		}
		if(Y>maxYear)
		{
			Y=maxYear;
		}
		return "{Y:"+Y+",M:"+M+",D:"+D+"}";
	}


	function MarcianCalendar(calendarObjName,display,minYear,maxYear,afterNotUsed,beforeNotUsed,hiddenAry)
	{
		this.calendarName=calendarObjName;
		this.display=display?"block":"none";
		this.minYear=minYear?minYear:1900;
		this.maxYear=maxYear?maxYear:2900;
		this.afterNotUsed=afterNotUsed?afterNotUsed:false;
		this.beforeNotUsed=beforeNotUsed?beforeNotUsed:false;
		this.calendarContainer=null;
		this.calendarMenuContainer=null;
		this.calendarDateContainer=null;
		this.calendarWeekContainer=null;
		this.calendarCloseContainer=null;
		this.weekAry=["\uFEFF\u65E5","\uFEFF\u4E00","\uFEFF\u4E8C","\uFEFF\u4E09","\uFEFF\u56DB","\uFEFF\u4E94","\uFEFF\u516D"];
		this.date=new Date();
		this.id=0;	
		this.fillDate=function(dateStr){
			var fillObj=this.$(this.fillObjAry[this.id]);
			if(fillObj.type=="text")
			{
				fillObj.value=dateStr;
			}
			if(this.id<this.fillObjAry.length-1)
			{
				for(var i=0;i<this.hiddenAry[this.id].length;i++)
				{
					this.$(this.hiddenAry[this.id][i]).style.visibility="visible";
				}
				this.id++;
				this.moveCalendar(this.id);
			}
			else
			{
				this.close();
			}
		}

		this.$=function(id)
		{
			return document.getElementById(id);
		}
		
		this.setDate=function(dateObj){
			if(this.calendarDateContainer.childNodes)
			{
				for(var j=this.calendarDateContainer.childNodes.length-1;j>=0;j--)
				{
					this.calendarDateContainer.removeChild(this.calendarDateContainer.childNodes[j]);
				}
			}
		    var W=1;
			var Y=dateObj.Y;
			var M=dateObj.M;
			var D=dateObj.D;
			var dayAry=[31,28,31,30,31,30,31,31,30,31,30,31];
			var r=[0,3,3,6,1,4,6,2,5,0,3,5];
			var c=6;
			if(Y%400==0||(Y%4==0&&Y%100!=0))
			{
				dayAry[1]=29;
			}
			if((Y%400==0||(Y%4==0&&Y%100!=0))&&M<3)
			{
				c=5;
			}
			var y=Y%400;
			w=(y+Math.floor(y/4)-Math.floor(y/100)+r[M-1]+1+c)%7;
			//alert(w);
			var R=1;
		    R=(dayAry[M-1]-7+w)%7==0?R+(dayAry[M-1]-7+w)/7:R+Math.floor((dayAry[M-1]-7+w)/7)+1;
			var start=0;
			var d=1;
			for(var i=0;i<R;i++)
			{
				var div=document.createElement("div");
				div.style.cssText="width:201px;height:23px;margin-bottom:2px;"
				for(var k=0;k<7;k++)
				{
					var p=document.createElement("p");
					p.style.cssText="width:28px;height:20px;float:left;text-align:center;padding-top:3px;margin:0px;color:#ccc;";
					if(start>=w&&d<=dayAry[M-1])
					{
						if(this.beforeNotUsed&&this.date.beforeTheDate(Y,M,d))
						{
							p.innerHTML=d;
						}
						else if(this.afterNotUsed&&this.date.afterTheDate(Y,M,d))
						{
							p.innerHTML=d;
						}
						else
						{
							p.innerHTML="<a class='profile' href='/events/list.action?date="+Y+"-"+(M<10?("0"+M):M)+"-"+(d<10?("0"+d):d)+"' target='_blank'>"+d+"</a>";
						}
						d++;
					}
					start>w?start=w:start++;
					div.appendChild(p);
				}
			  this.calendarDateContainer.appendChild(div);
			}
		}

			this.setMenu=function(dateObj){
			this.calendarMenuContainer.innerHTML="<a class='profile' href='javascript:"+this.calendarName+".setMenu("+this.date.getThePreDate(dateObj,this.minYear)+");void(0)'>\uFEFF\u4E0A\u6708</a>\uFEFF\u3000"+dateObj.Y+"-"+(dateObj.M>9?dateObj.M:"0"+dateObj.M)+"\uFEFF\u3000<a class='profile' href='javascript:"+this.calendarName+".setMenu("+this.date.getTheNextDate(dateObj,this.maxYear)+");void(0)'>\uFEFF\u4E0B\u6708</a>";
			this.setDate(dateObj);
		}

		this.initial=function(){
			this.calendarContainer=document.createElement("div");
			this.calendarContainer.style.cssText="width:201px;font:12px Arial;display:"+this.display+";";
			this.calendarContainer.setAttribute("css",this.calendarContainer.style.cssText);
			this.calendarMenuContainer=document.createElement("div");
			this.calendarMenuContainer.style.cssText="width:201px;height:20px;background:#f8f8f8;color:#666;text-align:center;padding-top:3px;";
			this.calendarWeekContainer=document.createElement("div");
			this.calendarWeekContainer.style.cssText="width:201px;height:20px;margin-bottom:1px;";
			for(i=0;i<7;i++)
			{
				var p=document.createElement("p");
				p.style.cssText="width:28px;height:20px;float:left;text-align:center;padding-top:3px;border-bottom:1px solid #f8f8f8;margin:0px;";
				p.innerHTML=this.weekAry[i];
				this.calendarWeekContainer.appendChild(p);
			}
			this.calendarDateContainer=document.createElement("div");
		    this.calendarDateContainer.style.cssText="width:201px;";
			this.calendarCloseContainer=document.createElement("div");
			this.calendarCloseContainer.style.cssText=this.calendarMenuContainer.style.cssText;
			this.calendarContainer.appendChild(this.calendarMenuContainer);
			this.calendarContainer.appendChild(this.calendarWeekContainer); 
			this.calendarContainer.appendChild(this.calendarDateContainer); 
			this.$("calendar").appendChild(this.calendarContainer);
			this.setMenu(this.date.getTheDate());
		}
		this.initial();
	}
	var calendar=new MarcianCalendar("calendar",true,"","",false,false);

