﻿/*
 JS日历
 */
var CalendarWebControl = new atCalendarControl();  
function atCalendarControl(){
    var calendar=this;
    this.calendarPad=null;
    this.prevMonth=null;
    this.nextMonth=null;
    this.prevYear=null;
    this.nextYear=null;
    this.goToday=null;

    this.calendarClose=null;
    this.calendarAbout=null;
    this.head=null;
    this.body=null;
    this.today=[];
    this.currentDate=[];
    this.sltDate=[];
    this.startDate=[];
    this.endDate=[];
    this.target;
    this.source;

    /************** 加入日历底板及阴影 *********************/
    this.addCalendarPad=function(){
        document.write("<div id='divCalendarpad' style='position:absolute;top:0;left:0;width:251px;height:181px;display:none;'>");
        document.write("<iframe frameborder=0 height=181 width=253></iframe>");
        document.write("<div style='position:absolute;top:0;left:0;width:0;height:0;background-color:#336699;'></div>");
        document.write("</div>");
        calendar.calendarPad=document.all.divCalendarpad;
    }
    /************** 加入日历面板 *********************/
    this.addCalendarBoard=function(){
        var BOARD=this;
        var divBoard=document.createElement("div");
        calendar.calendarPad.insertAdjacentElement("beforeEnd",divBoard);
        divBoard.style.cssText="position:absolute;top:0;left:0;width:250px;height:166px;border:1 outset;background-color:buttonface;";

        var tbBoard=document.createElement("table");
        divBoard.insertAdjacentElement("beforeEnd",tbBoard);
        tbBoard.style.cssText="position:absolute;top:0;left:0;width:250px;height:20px;font-size:1pt;";
        tbBoard.cellPadding=0;
        tbBoard.cellSpacing=1;
        tbBoard.bgColor="#666666";

    /************** 设置各功能按钮的功能 *********************/

    /*********** Calendar Head ***************/
    trRow = tbBoard.insertRow(0);
    tbCell=trRow.insertCell(0);
    tbCell.colSpan=7;
    tbCell.bgColor="#555555";
    tbCell.align="center";
    tbCell.style.cssText = "cursor:default;font-size:12pt; height:24px; line-height:24px; font-weight:bold;";
    calendar.head=tbCell;

    /*********** Calendar About Button ***************/
    var divDar=document.createElement("div");
    trRow = tbBoard.insertRow(1);
    //calendar.calendarAbout=calendar.insertTbCell(trRow,0,"-","center");
    //calendar.calendarAbout.onclick=function(){calendar.about();}
    /*********** Calendar PrevYear Button ***************/
    calendar.prevYear = calendar.insertTbCell(trRow,0,"&lt;&lt;","center",2);
    calendar.prevYear.title="上一年";
    calendar.prevYear.onmousedown=function(){
        calendar.currentDate[0]--;
        calendar.show(calendar.target,calendar.currentDate[0]+"-"+calendar.currentDate[1]+"-"+calendar.currentDate[2],calendar.source);
    }
    /*********** Calendar PrevMonth Button ***************/
    calendar.prevMonth = calendar.insertTbCell(trRow,1,"&lt;","center");
    calendar.prevMonth.title="上一月";
    calendar.prevMonth.onmousedown=function(){

        calendar.currentDate[1]--;
        if(calendar.currentDate[1]==0){
            calendar.currentDate[1]=12;
            calendar.currentDate[0]--;
        }
        calendar.show(calendar.target,calendar.currentDate[0]+"-"+calendar.currentDate[1]+"-"+calendar.currentDate[2],calendar.source);
    }
    /*********** Calendar Today Button ***************/
    //calendar.goToday = calendar.insertTbCell(trRow,3,"","center");
    // calendar.goToday.title="";
    /* calendar.goToday.onclick=function(){
    calendar.sltDate=calendar.currentDate[0]+"-"+calendar.currentDate[1]+"-"+calendar.currentDate[2];
    calendar.target.value=calendar.sltDate;
    calendar.hide();
    //calendar.show(calendar.target,calendar.today[0]+"-"+calendar.today[1]+"-"+calendar.today[2],calendar.source);
    }*/
   /*********** Calendar NextMonth Button ***************/
    calendar.nextMonth = calendar.insertTbCell(trRow,2,"&gt;","center");
    calendar.nextMonth.title="下一月";
    calendar.nextMonth.onmousedown=function(){
        calendar.currentDate[1]++;
        if(calendar.currentDate[1]==13){
            calendar.currentDate[1]=1;
            calendar.currentDate[0]++;
        }
        calendar.show(calendar.target,calendar.currentDate[0]+"-"+calendar.currentDate[1]+"-"+calendar.currentDate[2],calendar.source);
   }
    /*********** Calendar NextYear Button ***************/
    calendar.nextYear = calendar.insertTbCell(trRow,3,"&gt;&gt;","center",2);
    calendar.nextYear.title="下一年";
    calendar.nextYear.onmousedown=function(){
        calendar.currentDate[0]++;
        calendar.show(calendar.target,calendar.currentDate[0]+"-"+calendar.currentDate[1]+"-"+calendar.currentDate[2],calendar.source);
    }
    /*********** Calendar Close Button ***************/
    // tbCell=trRow.insertCell(1);
    calendar.calendarClose = calendar.insertTbCell(trRow,4,"×","center");
    calendar.calendarClose.title="关闭";
    calendar.calendarClose.onclick=function(){calendar.hide();}
    trRow = tbBoard.insertRow(2);
    var cnDateName = new Array("日","一","二","三","四","五","六");
    for (var i = 0; i < 7; i++) {
        tbCell=trRow.insertCell(i)
        tbCell.innerText=cnDateName[i];
        tbCell.align="center";
        tbCell.style.cssText="cursor:default;border:1px solid #777; width:33px; background-color:#777; height:20px; line-height:20px; font-size:10pt;";
    }
    /*********** Calendar Body ***************/
    trRow = tbBoard.insertRow(3);
    tbCell=trRow.insertCell(0);
    tbCell.colSpan=7;
    tbCell.height=97;
    tbCell.vAlign="top";
    tbCell.bgColor="#F0F0F0";
    var tbBody=document.createElement("table");
    tbCell.insertAdjacentElement("beforeEnd",tbBody);
    tbBody.style.cssText="position:relative; top:0; left:0; width:253px; height:103px; font-size:9pt;"
    tbBody.cellPadding=0;
    tbBody.cellSpacing=1;
    calendar.body=tbBody;
}
    /************** 加入功能按钮公共样式 *********************/
    this.insertTbCell=function(trRow,cellIndex,TXT,trAlign,tbColSpan){
        var tbCell=trRow.insertCell(cellIndex);
        if(tbColSpan!=undefined) tbCell.colSpan=tbColSpan;

        var btnCell=document.createElement("button");
        tbCell.insertAdjacentElement("beforeEnd",btnCell);
        btnCell.value=TXT;
        btnCell.style.cssText="width:100%;border:1 outset;background-color:buttonface; ";
        //移入
        btnCell.onmouseover=function(){
            btnCell.style.cssText="width:100%;border:1 outset;background-color:#F0F0F0;";
        }
        //移出
        btnCell.onmouseout=function(){
            btnCell.style.cssText="width:100%;border:1 outset;background-color:buttonface;";
        }
        // btnCell.onmousedown=function(){
        //  btnCell.style.cssText="width:100%;border:1 inset;background-color:#F0F0F0;";
        // }
        //点击
        btnCell.onmouseup=function(){
            btnCell.style.cssText="width:100%;border:1 outset;background-color:#F0F0F0;";
        }
        btnCell.onclick=function(){
            btnCell.blur();
        }
        return btnCell;
    }
    this.setDefaultDate=function(){
        var dftDate=new Date();
        calendar.today[0]=dftDate.getYear();
        calendar.today[1]=dftDate.getMonth()+1;
        calendar.today[2]=dftDate.getDate();
    }

  /****************** Show Calendar *********************/
    this.show=function(targetObject,defaultDate,sourceObject){
        if(targetObject==undefined) {
            alert("未设置目标对像. \n方法: ATCALENDAR.show(obj 目标对像,string 默认日期,obj 点击对像);\n\n目标对像:接受日期返回值的对像.\n默认日期:格式为\"yyyy-mm-dd\",缺省为当日日期.\n点击对像:点击这个对像弹出calendar,默认为目标对像.\n");
            return false;
        }else{
            calendar.target=targetObject;
            var ss = new Array();
            if(targetObject.value != ""){
                var vDate = targetObject.value.split("-")
                ss[0]=vDate[0];
                ss[1]=vDate[1];
                ss[2]=vDate[2];
            }else{
                ss[0]=calendar.today[0];
                ss[1]=calendar.today[1];
                ss[2]=calendar.today[2];
            }
            if (targetObject.name == "StartDate"){
                calendar.startDate = ss;
            }else{
                calendar.endDate = ss; 
            }
        }
        if(sourceObject==undefined){
            calendar.source=calendar.target;
        }else{
            calendar.source=sourceObject;
        }

        var firstDay;
        var Cells=new Array();

        if(defaultDate==undefined || defaultDate==""){
            var theDate=new Array();
            calendar.head.innerText = calendar.today[0]+"-"+calendar.today[1]+"-"+calendar.today[2];
            theDate[0]=calendar.today[0]; theDate[1]=calendar.today[1]; theDate[2]=calendar.today[2];
        }
        else{
            /*    var reg=/^\d{4}-\d{1,2}-\d{2}$/
            if(!defaultDate.match(reg)){
            alert("默认日期的格式不正确\n\n默认日期可接受格式为:'yyyy-mm-dd'");
            return;
            }*/
            var theDate=defaultDate.split("-");
            calendar.head.innerText = defaultDate;
        }
        calendar.currentDate[0]=theDate[0];
        calendar.currentDate[1]=theDate[1];
        calendar.currentDate[2]=theDate[2];
        theFirstDay=calendar.getFirstDay(theDate[0],theDate[1]);
        theMonthLen=theFirstDay+calendar.getMonthLen(theDate[0],theDate[1]);
        //calendar.setEventKey();

        calendar.calendarPad.style.display="";
        var theRows = Math.ceil((theMonthLen)/7);
        //清除旧的日历;
        while (calendar.body.rows.length > 0) {
            calendar.body.deleteRow(0)
        }
        //建立新的日历;
        var n=0;day=0;
        for(i=0;i<theRows;i++){
            theRow=calendar.body.insertRow(i);
            for(j=0;j<7;j++){
                n++;
                if(n>theFirstDay && n<=theMonthLen){
                    day=n-theFirstDay;
                    calendar.insertBodyCell(theRow,j,day);
                }
                else{
                    var theCell=theRow.insertCell(j);
                    theCell.style.cssText="background-color:#F0F0F0;cursor:default;";
                }
            }
        }

       //****************调整日历位置**************//
        var offsetPos=calendar.getAbsolutePos(calendar.source);//计算对像的位置;
        if((document.body.offsetHeight-(offsetPos.y+calendar.source.offsetHeight-document.body.scrollTop))<calendar.calendarPad.style.pixelHeight){
            var calTop=offsetPos.y-calendar.calendarPad.style.pixelHeight;
        }
        else{
            var calTop=offsetPos.y+calendar.source.offsetHeight;
        }
        if((document.body.offsetWidth-(offsetPos.x+calendar.source.offsetWidth-document.body.scrollLeft))>calendar.calendarPad.style.pixelWidth){
            var calLeft=offsetPos.x;
        }
        else{
            var calLeft=offsetPos.x-calendar.calendarPad.style.pixelWidth+calendar.source.offsetWidth;
        }
        calendar.calendarPad.style.pixelLeft=calLeft;
        calendar.calendarPad.style.pixelTop=calTop;
    }
    /****************** 计算对像的位置 *************************/
    this.getAbsolutePos = function(el) {
        var r = { x: el.offsetLeft, y: el.offsetTop };
        if (el.offsetParent) {
            var tmp = calendar.getAbsolutePos(el.offsetParent);
            r.x += tmp.x;
            r.y += tmp.y;
        }
        return r;
    };

    //************* 插入日期单元格 **************/
    this.insertBodyCell=function(theRow,j,day,targetObject){
        var theCell=theRow.insertCell(j);
        if(j==0) var theBgColor="#666666";
        else var theBgColor="#999999";
        //alert(calendar.currentDate[0] +"-"+ calendar.currentDate[1] +"-"+ calendar.currentDate[2] + "\n" + calendar.sltDate[0] +"-"+ calendar.sltDate[1] +"-"+ calendar.sltDate[2]);
        if(calendar.target.name == "StartDate")
        {
            if(calendar.currentDate[0] == calendar.startDate[0] && calendar.currentDate[1] == calendar.startDate[1] && day==calendar.startDate[2]){
                var theBgColor="#000000";
            }
        }else{
            if(calendar.currentDate[0] == calendar.startDate[0] && calendar.currentDate[1] == calendar.startDate[1] && day==calendar.startDate[2]){
                theCell.title = "入住时间";
                var theBgColor="#000000";
            }
            if(calendar.currentDate[0] == calendar.endDate[0] && calendar.currentDate[1] == calendar.endDate[1] && day==calendar.endDate[2]){
                theCell.title = "离开时间";
                var theBgColor="#000000";
            }
        }
        if(calendar.currentDate[0] == calendar.today[0] && calendar.currentDate[1] == calendar.today[1] && day==calendar.today[2]) var theBgColor="#333333";
        theCell.bgColor=theBgColor;
        theCell.innerText=day;
        theCell.align="center";
        theCell.width=35;
        theCell.style.cssText="border:1 solid #CCCCCC;cursor:hand; height:20px; line-height:20px;";
        var d1 = new Date(calendar.currentDate[0]+"/"+calendar.currentDate[1]+"/"+day);     //当前日期
        var d2 = new Date(calendar.today[0]+"/"+calendar.today[1]+"/"+calendar.today[2]);   //今天日期
        var d3 = Date.parse(d2) + (7 * 24 * 60 * 60 * 1000);                                //近一周日期
        var d4 = new Date(calendar.startDate[0]+"/"+calendar.startDate[1]+"/"+calendar.startDate[2]);   //入住时间
        var d5 = Date.parse(d4) + (7 * 24 * 60 * 60 * 1000);                                //入住近一周日期
        //alert(Date.parse(d1) +"\n"+ Date.parse(d2) +"\n"+ d3);return false;
        //alert(calendar.startDate +"\n"+ calendar.endDate)
        if ((Date.parse(d1) > Date.parse(d2) && Date.parse(d1) <= d3 && calendar.target.name == "StartDate") || (Date.parse(d1) > Date.parse(d4) && Date.parse(d1) <= d5 &&calendar.target.name == "EndDate"))
        {
            theCell.onmouseover=function(){ 
                theCell.bgColor="#CCCCCC"; 
                theCell.style.cssText="border:1 outset;cursor:hand; color:#000000; height:20px; line-height:20px;";
            }
            theCell.onmouseout=function(){ 
                theCell.bgColor=theBgColor; 
                theCell.style.cssText="border:1 solid #CCCCCC;cursor:hand; height:20px; line-height:20px;";
            }
            theCell.onmousedown=function(){ 
                theCell.bgColor="#CCCCCC"; 
                theCell.style.cssText="border:1 inset;cursor:hand; color:#000000; height:20px; line-height:20px;";
            }
            theCell.onclick=function(){
                //if(calendar.currentDate[1].toString().length<2) calendar.currentDate[1]="0"+calendar.currentDate[1];
                //if(day.toString().length<2) day="0"+day;
                //calendar.sltDate=calendar.currentDate[0]+"-"+calendar.currentDate[1]+"-"+day;
                if(calendar.target.name == "StartDate")
                {
                    calendar.startDate[0]=calendar.currentDate[0];
                    calendar.startDate[1]=calendar.currentDate[1];
                    calendar.startDate[2]=day;
                }else{
                    calendar.endDate[0]=calendar.currentDate[0];
                    calendar.endDate[1]=calendar.currentDate[1];
                    calendar.endDate[2]=day;
                }
                calendar.target.value=calendar.currentDate[0]+"-"+calendar.currentDate[1]+"-"+day;
                calendar.hide();
            }
        }
   }
    /************** 取得月份的第一天为星期几 *********************/
    this.getFirstDay=function(theYear, theMonth){
        var firstDate = new Date(theYear,theMonth-1,1);
        return firstDate.getDay();
    }
    /************** 取得月份共有几天 *********************/

    this.getMonthLen=function(theYear, theMonth) {
        theMonth--;
        var oneDay = 1000 * 60 * 60 * 24;
        var thisMonth = new Date(theYear, theMonth, 1);
        var nextMonth = new Date(theYear, theMonth + 1, 1);
        var len = Math.ceil((nextMonth.getTime() - thisMonth.getTime())/oneDay);
        return len;
    }
    /************** 隐藏日历 *********************/
    this.hide=function(){
        //calendar.clearEventKey();
        calendar.calendarPad.style.display="none";
    }
    /************** 从这里开始 *********************/
    this.setup=function(defaultDate){
        calendar.addCalendarPad();
        calendar.addCalendarBoard();
        calendar.setDefaultDate();
    }
    /************** 关于AgetimeCalendar *********************/
    this.about=function(){
    /*//alert("Agetime Calendar V1.0\n\nwww.agetime.com\n");
    popLeft = calendar.calendarPad.style.pixelLeft+4;
    popTop = calendar.calendarPad.style.pixelTop+25;
    var popup = window.createPopup();
    var popupBody = popup.document.body;
    popupBody.style.cssText="border:solid 2 outset;font-size:9pt;background-color:#F0F0F0;";
    var popHtml = "<span style='color:#336699;font-size:12pt;'><U>关于 AgetimeCalendar</U></span><BR><BR>";
    popHtml+="版本: v1.0<BR>日期: 2004-03-13";
    popupBody.innerHTML=popHtml;
    popup.show(popLeft,popTop,240,136,document.body); */

        var strAbout="\\n";
        alert(strAbout);
    }

    calendar.setup();
 }

