
var curDateObject = null; //當前日期對象(div)
var curDate = new Date();
var divName = "DivDate" + curDate.getFullYear() + curDate.getMonth() + curDate.getDate();

try {
    HTMLElement.prototype.insertAdjacentHTML = function(where, html) {
        var e = this.ownerDocument.createRange();
        e.setStartBefore(this);
        e = e.createContextualFragment(html);
        switch (where) {
            case 'beforeBegin': this.parentNode.insertBefore(e, this); break;
            case 'afterBegin': this.insertBefore(e, this.firstChild); break;
            case 'beforeEnd': this.appendChild(e); break;
            case 'afterEnd':
                if (!this.nextSibling) this.parentNode.appendChild(e);
                else this.parentNode.insertBefore(e, this.nextSibling); break;
        }
    };
} catch (e) { }

function OpenDate(txtCtrl) {
    // 驗証當前文本框中的是否為日期
    if (!VerDate(txtCtrl.value)) {
        txtCtrl.value = "";
    }
    var curDivName = txtCtrl.id + "_" + divName
    if (curDateObject == null || curDateObject.id != curDivName) {
        var div_Date = "<div style=\"Z-INDEX: 300; LEFT: 0px; POSITION: absolute; TOP: 0px; WIDTH: 300px;\" id='" + curDivName + "' ></div>";
        document.body.insertAdjacentHTML("afterBegin", div_Date);
        LoadDate811019(curDivName, txtCtrl);
        var pointX = OffsetX(txtCtrl);
        if (pointX + 300 > screen.width)
            pointX = pointX - 300 + txtCtrl.offsetWidth;
        document.getElementById(curDivName).style.left = pointX.toString() + "px";
        document.getElementById(curDivName).style.top = (OffsetY(txtCtrl) + txtCtrl.offsetHeight).toString() + "px";

        curDateObject = document.getElementById(curDivName);
    }
}

function LoadDate811019(curDivName, txtCtrl) {
    var txtDate = new UCtrlDate();
    txtDate.Width = 260;
    txtDate.TWDate = false;
    txtDate.Parent = document.getElementById(curDivName);
    txtDate.ID = "DateTimeTXT";
    txtDate.OnClick = DelegateMethod;
    txtDate.curDivName = curDivName;
    txtDate.TXTCtrl = txtCtrl;
    txtDate.IsImg = false;
    if (txtCtrl.value != "") {
        var ymd = txtCtrl.value;
        var dt = ymd.split(" ");
        ymd = dt[0];
        ymd = ymd.replace("/", "-");
        ymds = ymd.split("-");
        var y = parseInt(ymds[0]);
        var m = parseInt(ymds[1]);
        var d = parseInt(ymds[2]);
        if (txtDate.TWDate) y = y + 1911;
        txtDate.Year = y;
        txtDate.Month = m;
        //txtDate.Day = d;
    }
    txtDate.OnLoad();
}

function DelegateMethod(sender, date) {
    sender.TXTCtrl.value = date;
    if (typeof (sender.TXTCtrl.onchange) == "function") {
        sender.TXTCtrl.onchange(sender.TXTCtrl);
    }
    document.body.removeChild(document.getElementById(sender.curDivName));
    curDateObject = null;
}

document.onmousedown = CheckSelectObject;
function CheckSelectObject(evt) {
    var doObject = curDateObject;
    if (doObject != null) {
        var isClick = false;
        if (evt == null) evt = window.event;
        var curObject = evt.srcElement ? evt.srcElement : evt.target;
        if (curObject != null) {
            var parentObject = curObject.parentElement || curObject.parentNode;
            while (parentObject != null) {
                if (parentObject == doObject) {
                    isClick = true;
                    break;
                }
                parentObject = parentObject.parentElement || parentObject.parentNode;
            }
        }
        if (!isClick) {
            document.body.removeChild(doObject);
            curDateObject = null;
        }
    }
}

function OffsetX(oElement) {
    x = 0;
    el = oElement;
    while (el) {
        x += el.offsetLeft;
        el = el.offsetParent;
    }
    return x;
}
function OffsetY(oElement) {
    y = 0;
    el = oElement;
    while (el) {
        y += el.offsetTop;
        el = el.offsetParent;
    }
    return y;
}

function VerDate(date) {
    var reg = /^(\d{4})([\/,-])(\d{1,2})\2(\d{1,2})$/;
    var r = date.match(reg);
    if (r == null) return false;
    var d = new Date(r[1], r[3] - 1, r[4]);
    var newStr = d.getFullYear() + r[2] + (d.getMonth() + 1) + r[2] + d.getDate();
    date = r[1] + r[2] + ((r[3] - 1) + 1) + r[2] + ((r[4] - 1) + 1);
    return newStr == date;
}
