﻿var is_ie = document.all ? true : false;
var is_ff = window.addEventListener ? true : false;

//得到控件的绝对位置
function getCalendarposition(CT){
    
//    var t=CT.offsetTop;
//    var l=CT.offsetLeft;
//    while(CT=CT.offsetParent){
//        t+=CT.offsetTop;
//        l+=CT.offsetLeft;
//    }
    
    var t=0;
    var l=0;
    while(CT.offsetParent){   
        t+=CT.offsetTop;
        l+=CT.offsetLeft;
        CT=CT.offsetParent;   
    }

    var r = new Array();
    
    r['x'] = l;
    r['y'] = t;
    return r;
}

//debug
//document.write('<div id="jsdebug"></div>');
//function d(e){
//    s = '';
//    for(k in e){
//        t = typeof e[k];
//        s += t+' : <b>'+k+' :</b> '+e[k]+'<br>';
//    }
//    document.getElementById('jsdebug').innerHTML = s;
//}

/**//***********************************************************************************************************************/
var controlid;                //控件 日历数值显示， 绝对位置定位
var currdate     = null;            //当前初始化时间    默认为本地时间
var startdate     = null;         //日期范围 - 开始日期
var enddate     = null;         //日期范围 - 截止日期
var yy             = null;     //年
var mm             = null;        //月
var i;                    //列
var j;                    //行
var currday        = null;     //今天
var today         = new Date();     //当前时间
today.setHours(0);
today.setMinutes(0);
today.setSeconds(0);
today.setMilliseconds(0);

//    pasedate('2005-1-2') 返回date对象
function parsedate(s){
    if(s == ''){ return false;};
    var reg=new RegExp("[^0-9-]","")
    if(s.search(reg)>=0)return today;
    var ss=s.split("-");
    if(ss.length!=3)return today;
    if(isNaN(ss[0])||isNaN(ss[1])||isNaN(ss[2]))return today;
    return new Date(parseFloat(ss[0]),parseFloat(ss[1])-1,parseFloat(ss[2]));
}

function setdate(d){
    document.getElementById('calendardiv').style.display = 'none';
    controlid.value = yy + "-" + (mm+1) + "-" + d;
}

function myCancelBubble(event) {
    e = event ? event : window.event ;
    if(is_ff) {
        e.stopPropagation();
    } else if(is_ie) {
        e.cancelBubble = true;
    }
}

function initcalendar(){
    //当前时间
    s = '<style>';
    s += '#calendardiv{background-color:#FFFFCC;cursor:default}';
    s += '#calendardiv a{color:#333333;text-decoration:none;}';
    s += '#calendardiv table{border:1px solid #333333}';
    s += '.expire, .expire a{color:#ccc;}';
    s += '.default, .default a{color:#333333}';
    s += '.checked, .checked a{font-weight:bold;}';
    s += '.today{color:#ffcc00}';
    s += '</style>';
    s += '<div id="calendardiv" style="display:none;position:absolute;z-index:100000;" onclick="myCancelBubble(event)">';
    s += '<table cellpadding="2" cellspacing="4">';
    s += '<tr><td colspan="7"><table width="100%" style="border:0px" align="center"><tr><td id="prev" align="center"><a href="javascript:drawcalendar(yy-1,mm);" title="上一年"><img src="../Images/Calendar_LeftYear.gif" border="0" width="8" height="8" /></a>&nbsp; &nbsp<a href="javascript:drawcalendar(yy,mm-1);" title="上个月"><img src="../Images/Calendar_LeftMonth.gif" border="0" width="8" height="8" /></a></td><td colspan="5" id="yyyymm" align="center"></td><td id="next" align="center"><a href="javascript:drawcalendar(yy,mm+1);" title="下个月"><img src="../Images/Calendar_RightMonth.gif" border="0" width="8" height="8" /></a>&nbsp &nbsp;<a href="javascript:drawcalendar(yy+1,mm);" title="下一年"><img src="../Images/Calendar_RightYear.gif" border="0" width="8" height="8" /></a></td></tr></table></td></tr>';
    s += '<tr><td>日</td><td>一</td><td>二</td><td>三</td><td>四</td><td>五</td><td>六</td></tr>';
    for(var i=0; i <6; i++){
        s += "<tr>";
        for(var j=1; j<=7; j++){s += "<td id=d"+(i*7+j)+" height='19' nowrap>0</td>";}
        s += "</tr>";
    }
    s += '</table>';
    s += '</div>';
    document.write(s);
    currday= currdate ? currdate : today;// 默认为本地时间
    
    //点击隐藏
    document.onclick = function() {document.getElementById('calendardiv').style.display = 'none';}
}

function showcalendar(event, controlid1, startdate1, enddate1, defday){
    // 判断controlid position
    //alert(eventObject.id);
    //if(document.getElementById('calendardiv').style.display != 'block'){
    //只有面板不在时才显示
    controlid   = document.getElementById(controlid1);
    startdate   = parsedate(document.getElementById(startdate1).value);
    enddate     = parsedate(document.getElementById(enddate1).value);
    defday        = parsedate(defday);

    var p   = getCalendarposition(controlid);
    
    //var pp = getCalendarposition(eventObject);
    
    //alert(p['x']+" "+p['y']+" "+(document.body.scrollLeft   +   window.event.x)+" "+(document.body.scrollTop   +   window.event.y));
//    var   oRect   =   controlid.getBoundingClientRect();   
//    
//    alert(oRect.left+" "+oRect.top+" "+oRect.right+" "+oRect.bottom);
//    alert(p['x']+" "+p['y']);
    
    document.getElementById('calendardiv').style.display = 'block';
    //document.getElementById('calendardiv').style.left = p['x'];
    //document.getElementById('calendardiv').style.top  = p['y'] + 20;
    var myX=event.x ? event.x:event.pageX;
    var myY=event.y?event.y:event.pageY;
    document.getElementById('calendardiv').style.left = document.body.scrollLeft   +  myX-75+'px';
    document.getElementById('calendardiv').style.top  = document.body.scrollTop   +   myY+15;
    myCancelBubble(event);

    drawcalendar(defday.getFullYear(),defday.getMonth(),defday.getDate());
    
    //}
    
}

// 刷新日历
function drawcalendar(y, m,sd){

    var x  = new Date(y, m, 1);
    var mv = x.getDay();
    var d = x.getDate();
    var de = null;                    // 单元格对象
    yy        = x.getFullYear();
    mm        = x.getMonth();
    document.getElementById("yyyymm").innerHTML = yy + "." + (mm+1 > 9  ? mm+1 : "0" + (mm+1));
    //将1号以前的单元设置为空
    for(var i=1; i<=mv; i++){
        de = document.getElementById("d"+i);
        de.innerHTML= "";
        de.className= "";
    }

    //开始画当月日历
    while(x.getMonth() == mm){
        de = document.getElementById("d"+(d+mv));
        if((enddate && x.getTime() > enddate.getTime()) || (startdate && x.getTime() < startdate.getTime())) {
            de.className = 'expire';
            de.innerHTML = d;
        }else{
            de.className = 'default';
            if(d==sd){
            de.innerHTML = "<a href=javascript:setdate("+d+");><u><strong>"+d+"</strong></u></a>";
            }else{
            de.innerHTML = "<a href=\"javascript:setdate("+d+");\" onmouseover=\"this.style.color='#Ff0000';\" onmouseout=\"this.style.color='';\">"+d+"</a>";}
        }
        if(x.getTime() == currday.getTime()) {
            de.className = 'checked';
        }
        if(x.getTime() == today.getTime()) {
            de.className = 'today';
        }
        x.setDate(++d);
    }

    // 尾部空格
    while(d + mv <= 42){
        de = document.getElementById("d"+(d+mv));
        de.innerHTML = "";
        de.bgColor = "";
        de.className = "";
        d++;
    }
    
}

initcalendar();
