﻿ 
document.write('<iframe id=\"CalFrame\" name=\"CalFrame\" frameborder=\"0\" style=\"display:none;position:absolute;z-index:1000\" onload=\"loadCalendarHtm();\"></iframe>');
document.onclick = hideCalendar;

 
function loadCalendarHtm() {
}

function showCalendar(sImg, bOpenBound, sFld1, sNextP, sNextD, sStartD, sEndD, sVD, sOE, sVDE, sOT, s3F, sFld2, sCallback, sNextVDE, iPosLeft, iPosTop) {
    //1.sImg日历弹出位置的控件的名称,
    //2.bOpenBound,
    //3.sFld1取得日期的控件名称,


    //4.sNextP选取日期后新日历弹出的位置的控件名称,可不输入,
    //5.sNextD选取日期后新日历弹出从中取值的控件名称,可不输入,

    //6.sStartD开始有效时间,
    //7.sEndD截至有效时间,

    //8.sVD周几有效,例如：'1,3,5',注意星期日应输入'0'
    //9.sOE,单双日有效,'0'表示双日,'1'表示单日
    //10.sVDE特殊日期,例如'2004-10-11,2004-11-20,',最后一定要输入','
    //11.sOT如果是直接在文本框中点击则值为'text',
    //12.s3F下一个日历弹出并选择后点取日期后定位到新的控件

    //sFld2,弹出日历默认日期
    //sCallback

    // sNextVDE 下一次焦点的有效时间.

    //iPosLeft 定位x坐标
    //iPosTop  定位y坐标

    var fld1, fld2;
    var cf = document.getElementById("CalFrame");

 	
    if (cf != null && cf != "undefine" && cf.src == "") {
        loadCalendarHtm = function() {
            showCalendar(sImg, bOpenBound, sFld1, sNextP, sNextD, sStartD, sEndD, sVD, sOE, sVDE, sOT, s3F, sFld2, sCallback, sNextVDE);
        }
        cf.src = "/calendar/calendar.htm";
        return;
    }

    var wcf = window.frames.CalFrame;
    var oImg = document.getElementById(sImg);
    if (!oImg) { alert("控制对象不存在！"); return; }
    if (!sFld1) { alert("输入控件未指定！"); return; }
    fld1 = document.getElementById(sFld1);
    if (!fld1) { alert("输入控件不存在！"); return; }
    if (fld1.tagName != "INPUT" || fld1.type != "text") { alert("输入控件类型错误！"); return; }
    if (sFld2) {
        fld2 = document.getElementById(sFld2);
        if (!fld2) { alert("参考控件不存在！"); return; }
        if (fld2.tagName != "INPUT" || (fld2.type != "text" && fld2.type != "hidden")) { alert("参考控件类型错误！"); return; }
    }
    if (!wcf.bCalLoaded) { alert("日历未成功装载！请刷新页面！"); return; }
    wcf.n_position = sNextP;
    wcf.n_textdate = sNextD;
    wcf.startdate = sStartD;
    wcf.enddate = sEndD;
    wcf.vailidday = sVD;
    wcf.oddeven = sOE;
    wcf.vailiddate = sVDE;
    wcf.nextvailiddate = sNextVDE;
    wcf.objecttype = sOT;
    wcf.thirdfocus = s3F;
    if (cf.style.display == "block") { cf.style.display = "none"; return; }

    /*
    //==============新版本更新: 关于日历显示位置的更改 ziqiu.zhang 开始	=================
    var eT=0,eL=0,p=oImg;
	
	var sT=(document.body.scrollTop > document.documentElement.scrollTop)? document.body.scrollTop:document.documentElement.scrollTop;

	var sL=(document.body.scrollLeft > document.documentElement.scrollLeft )? document.body.scrollLeft:document.documentElement.scrollLeft;
	
	var h1 = document.body.clientHeight;

	var h2 = document.documentElement.clientHeight;

	var isXhtml = (h2<=h1&&h2!=0)?true:false;

	var myClient = getClient();
	
	var myScroll = getScroll();		
	
	var eH=oImg.height,eW=oImg.width;
	
	while(p&&p.tagName.toUpperCase() !="BODY"){eT+=p.offsetTop;eL+=p.offsetLeft;p=p.offsetParent;}	
	
	var bottomSpace = myClient.clientHeight - ( eT - myScroll.sTop );

	eH=0;
	
	cf.height = 175;
	
	if(sOT=="text")
    {
    cf.style.top = ( (bottomSpace>=cf.height)?eT+eH+20:eT-cf.height ).toString() + "px";		
    }
    else
    {
    cf.style.top = ( (bottomSpace>=cf.height)?eT+eH+20:eT-cf.height ).toString() + "px";		
    }
	
	cf.style.left=( (isXhtml?document.documentElement.clientWidth:document.body.clientWidth-(eL-sL)>=cf.width)?eL:eL+eW-cf.width ).toString() + "px";
    cf.style.display="block";
	
	//==============新版本更新: 关于日历显示位置的更改 ziqiu.zhang 结束	=================
    * */


    if (!(iPosLeft && iPosTop)) {
        //	    var pos = getAbsolutePos(oImg);  
        //	    iPosLeft = pos.x;
        //	    iPosTop = pos.y + oImg.clientHeight;

        var pos = getPositionNew(oImg);
        iPosLeft = pos.OffsetLeft;
        iPosTop = pos.OffsetTop + (oImg.clientHeight == null ? 0 : oImg.clientHeight);
    }
    cf.style.left = iPosLeft + "px";
    cf.style.top = (iPosTop + 4) + "px";
    cf.height = 175;
    cf.style.display = "block";

    wcf.openbound = bOpenBound;
    wcf.fld1 = fld1;
    wcf.fld2 = fld2;
    wcf.callback = sCallback;
    wcf.initCalendar();
}

function hideCalendar() {
    var cf = document.getElementById("CalFrame");
    cf.style.display = "none";
}

//获得控件在页面上的绝对位置
function getAbsolutePos(obj) {
    var pos = { x: 0, y: 0 };
    var offset_x = obj.clientLeft;
    var offset_y = obj.clientTop;

    function innerFunction() {
        while (obj && (obj.style.position != "relative")) {
            pos.x += obj.offsetLeft;
            pos.y += obj.offsetTop;
            pos.x += obj.clientLeft;
            pos.y += obj.clientTop;
            //如果需要计算滚动条
            if (obj.scrollLeft)
                pos.x += obj.clientLeft;
            if (obj.scrollTop)
                pos.y += obj.scrollTop;

            obj = obj.offsetParent;
        }
    }

    innerFunction();
    pos.x -= offset_x;
    pos.y -= offset_y;

    return pos;
}


 

//得到鼠标滚过的距离 scrollTop 与 scrollLeft 
//用法与测试:
/*
var myClient = getClient();
alert("myClient.clientHeight:" + myClient.clientHeight);
alert("myClient.clientWidth:" + myClient.clientWidth);
*/
function getScroll() {
    var sTop = 0, sLeft = 0, sWidth = 0, sHeight = 0;

    sTop = (document.body.scrollTop > document.documentElement.scrollTop) ? document.body.scrollTop : document.documentElement.scrollTop;
    if (isNaN(sTop) || sTop < 0) { sTop = 0; }

    sLeft = (document.body.scrollLeft > document.documentElement.scrollLeft) ? document.body.scrollLeft : document.documentElement.scrollLeft;
    if (isNaN(sLeft) || sLeft < 0) { sLeft = 0; }

    return { sTop: sTop, sLeft: sLeft, sWidth: sWidth, sHeight: sHeight };
}

//得到浏览器当前显示区域的大小 clientHeight 与 clientWidth
/*	用法与测试:
var myScroll = getScroll();	
alert("myScroll.sTop:" + myScroll.sTop);
alert("myScroll.sLeft:" + myScroll.sLeft);
*/
function getClient() {
    var h1 = document.body.clientHeight;
    var h2 = document.documentElement.clientHeight;
    var isXhtml = (h2 <= h1 && h2 != 0) ? true : false;

    this.clientHeight = isXhtml ? document.documentElement.clientHeight : document.body.clientHeight;
    this.clientWidth = isXhtml ? document.documentElement.clientWidth : document.body.clientWidth;

    return { clientHeight: this.clientHeight, clientWidth: this.clientWidth };
}

//获取对象相对于Body对象的偏移量坐标.需要在Body元素加上position:relative, 并且保证任何父级元素都没有position:relative
/*  参数说明:
sObj      : 要弹出图层的事件源
    
用法与测试: 
var sObj = document.getElementById("divId");
var position = ScriptHelperV2.getPosition(sObj);
var sObjOffsetTop = parseInt(  position.OffsetTop );
var sObjOffsetLeft = parseInt( position.OffsetLeft );
*/
function getPositionNew(sObj) {
    var sObjOffsetTop = 0;      //事件源的垂直距离
    var sObjOffsetLeft = 0;     //事件源的水平距离

    /* 获取事件源对象的偏移量 */
    var tempObj = sObj; //用于计算事件源坐标的临时对象
    while (tempObj && tempObj.tagName.toUpperCase() != "BODY") {
        sObjOffsetTop += tempObj.offsetTop;
        sObjOffsetLeft += tempObj.offsetLeft;
        tempObj = tempObj.offsetParent;
    }
    tempObj = null;
    return { OffsetTop: sObjOffsetTop, OffsetLeft: sObjOffsetLeft };
}

function getClientNew() {
    //判断页面是否符合XHTML标准
    var isXhtml = true;
    if (document.documentElement == null || document.documentElement.clientHeight <= 0) {
        if (document.body.clientHeight > 0) {
            isXhtml = false;
        }
    }

    this.clientHeight = isXhtml ? document.documentElement.clientHeight : document.body.clientHeight;
    this.clientWidth = isXhtml ? document.documentElement.clientWidth : document.body.clientWidth;
    return { clientHeight: this.clientHeight, clientWidth: this.clientWidth };
}

//  得到鼠标滚过的距离 scrollTop 与 scrollLeft  
/*  用法与测试:
var myScroll = getScroll();
alert("myScroll.scrollTop:" + myScroll.scrollTop);
alert("myScroll.scrollLeft:" + myScroll.scrollLeft);
*/
function getScrollNew() {
    var scrollTop = 0, scrollLeft = 0;

    scrollTop = (document.body.scrollTop > document.documentElement.scrollTop) ? document.body.scrollTop : document.documentElement.scrollTop;
    if (isNaN(scrollTop) || scrollTop < 0) { scrollTop = 0; }

    scrollLeft = (document.body.scrollLeft > document.documentElement.scrollLeft) ? document.body.scrollLeft : document.documentElement.scrollLeft;
    if (isNaN(scrollLeft) || scrollLeft < 0) { scrollLeft = 0; }

    return { scrollTop: scrollTop, scrollLeft: scrollLeft };
}