﻿// JavaScript Document
//日历
//专用版1：
//服务器传递过来的日期ServerToday，只在初始化时，设置一次
//比todayServer早的日期不可选
//离开日期要比入住日期至少晚一天
MILLISECOND_ADAY=60*60*24*1000; //一天有多少毫秒

function getMyDate(sdate) {
	//从'2010-08-22'转为'2010/08/22',后者是javascript支持的日期格式
	re=/\-/g;
	s=sdate;
	s1=s.replace(re,'/');
	return(s1);
	}
	
function myCalender()
{
	var ee=Array(35);
	var myToday=new Date();
	
	var ServerToday=new Date();  //当天是期
	var StartDate=new Date();    //设定起始日期
	
	var compDate=new Date();
	var outFunction=null;
	var flagSE=null; //记录当前处理的日期是“入住的(0)”还是“离开的(1)” 
		
	this.mySetDate=function(Y,M,D)
	{
		//设置日期		
		myToday=new Date(Y,(M-1),D);
		//显示月历表
		this.listMonthTable(myToday);
	}
	
	this.init=function(Y,M,D,fun)
	{
		//这里输入的年月日是自然计数法，即1月是1
		outFunction=fun;
		var k=0;
		for(i=1;i<=6;i++)
		{
			e=document.getElementById("calendarLine"+i);
			for (j=0;j<7;j++)
			{
				ee[k]=e.childNodes[j];
				k++;
			}
		}
		
		//设置日期		
		//myToday=new Date(Y,(M-1),D);
		//显示月历表
		//this.listMonthTable(myToday);
		this.mySetDate(Y,M,D);
		//设定服务器起始日期
		ServerToday=new Date(Y,(M-1),D);  //在这时myToday与ServerToday相等
	}

	this.init2=function(todayS,fun)
	{
			//todayS 是用字符串表达的日期，形式严格按“2006-08-04”自然记数法
			Y=todayS.substring(0,4);
			myMonth=todayS.substring(5,7);
			myDate=todayS.substring(8,10);
			M=parseInt(myMonth,10);
			D=parseInt(myDate,10);
			this.init(Y,M,D,fun);
	}

	
	this.listMonthTable=function(myToday1)
	{
		//
		myToday=new Date(myToday1);
		//是当前年当前月吗？
		flagCMonth=0;
		if ( ( myToday.getFullYear()==compDate.getFullYear() ) && ( myToday.getMonth()==compDate.getMonth() )  )
		{
			flagCMonth=1;
		}
		//alert(compDate);	
		
		CDay=compDate.getDate();
		
		//算出本月第一天星期几
		td=new Date(myToday.getFullYear(),myToday.getMonth(),1);
		myWeekDay=td.getDay();
		//本月的天数
		//td=new Date(myToday.getYear(),myToday.getMonth(),myToday.getDate());
		td.setMonth(td.getMonth()+1);
		td2=new Date(td.getFullYear(),td.getMonth(),0);
		myDaysOfMonth=td2.getDate();
		//显示列表
		document.getElementById("calenderYM").innerHTML=myToday.getFullYear()+"-"+(myToday.getMonth()+1);
			//清理第一行和最后二行
			for (i=0;i<7;i++)
			{
				ee[i].innerHTML="";
			}
			for (i=28;i<42;i++)
			{
				ee[i].innerHTML="";
			}
		k=1;
	 	myCount=myWeekDay+myDaysOfMonth;
		for (i=myWeekDay;i<myCount;i++)
		{
			if ( (flagCMonth==1) && (k<CDay) )
			{
				ee[i].innerHTML="<font color=#888888>"+k+"</font>";
			}
			else
			{
				ee[i].innerHTML="<a href=\"javascript:mycal.getSelectedDay("+k+")\">"+k+"</a>";
			}	
			k++;
		}
	}
	
	this.nextMonth=function(n)
	{
		if ( (n<0) && ( myToday.getFullYear()==compDate.getFullYear() ) && ( myToday.getMonth()==compDate.getMonth() )  )
		{
			alert("所选月份不能小于本年本月!");
		}
		else
		{
			myToday.setMonth(myToday.getMonth()+n);
			//显示月历表
			this.listMonthTable(myToday);
		}
	}
	
	this.nextYear=function(n)
	{
		//禁止小于当前年
		if ( (n<0) && ( parseInt(myToday.getFullYear()) == parseInt(compDate.getFullYear()) ) )
		{
			alert("所选年份不能小于本年!");
		}
		else
		{
			myToday.setYear(myToday.getFullYear()+n);
			//显示月历表
			this.listMonthTable(myToday);
		}	
	}
	
	this.getSelectedDay=function(n)
	{
		myToday=new Date(myToday.getFullYear(),myToday.getMonth(),n);
		if (flagSE==0)
		{
			//如果是处理入住时间
			StartDate=new Date(myToday.getFullYear(),myToday.getMonth(),n); 
		}
		eval( outFunction+"("+myToday.getFullYear()+","+(myToday.getMonth()+1)+","+myToday.getDate()+")" );
		this.hidecal();
	}
	
	this.showCal=function(e0,fun,flag)
	{
		flagSE=flag; //0入住 1离开 
		//如果是入住日期，则与“当天”比较
		//如果是离开日期，则与“入住日期”比较
		if (flagSE==0)
		{
			compDate=new Date(ServerToday);
		}
		else
		{
			compDate=new Date( StartDate.getFullYear(),StartDate.getMonth(),(StartDate.getDate()+1) ); 
		}		
		//alert(compDate);
		
	   outFunction=fun;
	   
		e=e0;
		//测一下e的绝对位置
		x=e.offsetLeft;
		while (e != document.body)
		{
			e=e.parentNode;
			eS=e.toString();
			if ( e.nodeName.indexOf("TR") == -1 && e.nodeName.indexOf("TBODY") == -1 )
			{ 
				x=x+e.offsetLeft;
			}	
		} 
		e=e0;
		y=e.offsetTop;
		while (e != document.body)
		{
			e=e.parentNode;
			eS=e.toString();
			if ( e.nodeName.indexOf("TR") == -1 && e.nodeName.indexOf("TBODY") == -1 )
			{ 
				y=y+e.offsetTop;
			}
		} 
		//重新更新月历表
		//myToday.setMonth(myToday.getMonth()+n);
		//显示月历表
		this.listMonthTable(StartDate);
		//
		//
		setlayerpox('calenderLZX',x,y+e0.clientHeight);  //y+e0.clientHeight
		
		document.getElementById("calenderLZX").style.visibility="visible";
	}
	
	this.hidecal=function()
	{
		document.getElementById("calenderLZX").style.visibility="hidden";
		setlayerpox("calenderLZX",-200,-200);
	}	
}

function setlayerpox(layername,x,y)
{
  if (document.all)
    {
       document.all[layername].style.pixelLeft=x;
       document.all[layername].style.pixelTop=y;
	   return(1);
    }
  if (document.documentElement) {
       document.getElementById(layername).setAttribute("style","left:"+x+"px;top:"+y+"px;");
	   return(1);
    }
}
