﻿function _CTB_SetCalendarFromTxt(strTxtID)
{
    var oTxt = document.getElementById(strTxtID);
    var strFormatMode = oTxt.getAttribute("format_mode");
    switch(strFormatMode)
    {
        case "YYYY-MM-DD":
            _CTB_SetCalendarFromTxt_1(strTxtID);
            break;
        case "YYYYMMDD":
            _CTB_SetCalendarFromTxt_2(strTxtID);
            break;
        }
}

function _CTB_SetCalendarFromTxt_1(strTxtID)
{
    var oTxt = document.getElementById(strTxtID);
    var strTxt = oTxt.value;
    var strYear, strMonth, strDay;
    var dtNow = new Date();
    if(strTxt.length == 0)
    {
        strYear = _CTB_NumToStr(dtNow.getFullYear(),4);
        strMonth = _CTB_NumToStr(dtNow.getMonth() + 1,2);
        strDay = _CTB_NumToStr(dtNow.getDate(),2);
    }
    else
    {
        strYear = strTxt.substr(0,4);
        strMonth = strTxt.substr(5,2);
        strDay = strTxt.substr(8,2);
    }
    
    oTxt["year"] = _CTB_StrToNum(strYear);
    oTxt["month"] = _CTB_StrToNum(strMonth);
    oTxt["day"] = _CTB_StrToNum(strDay);
    oTxt["select_date"] = strYear + strMonth + strDay;
}

function _CTB_SetCalendarFromTxt_2(strTxtID)
{
    var oTxt = document.getElementById(strTxtID);
    var strTxt = oTxt.value;
    var strYear, strMonth, strDay;
    var dtNow = new Date();
    
    if(strTxt.length == 0)
    {
        strYear = _CTB_NumToStr(dtNow.getFullYear(),4);
        strMonth = _CTB_NumToStr(dtNow.getMonth() + 1,2);
        strDay = _CTB_NumToStr(dtNow.getDate(),2);
    }
    else
    {
        strYear = strTxt.substr(0,4);
        strMonth = strTxt.substr(4,2);
        strDay = strTxt.substr(6,2);
    }        
            
    oTxt["year"] = _CTB_StrToNum(strYear);
    oTxt["month"] = _CTB_StrToNum(strMonth);
    oTxt["day"] = _CTB_StrToNum(strDay);
    oTxt["select_date"] = strYear + strMonth + strDay;
}

function _CTB_ShowTime(strTxtID)
{
    var oTxt = document.getElementById(strTxtID);
    var numLeft = 0;
    var numTop = 0;
    var numHeight = oTxt.offsetHeight;
    var oParent = oTxt;
    var oCalendar = document.getElementById(strTxtID + "_Calendar");
    var numCalendarOffsetLeft = _CTB_StrToNum(oTxt.getAttribute("offset_left"));
    var numCalendarOffsetTop = _CTB_StrToNum(oTxt.getAttribute("offset_top"));
    var numParentOffsetLeft, numParentOffsetTop;
    
    if( oTxt.getAttribute("readonly")){ return; }
    
    while(oParent != null)
    {
        if(oParent.style.position != "absolute" || oParent == oTxt)
        {
            numParentOffsetLeft = oParent.offsetLeft;
            numParentOffsetTop = oParent.offsetTop;
            numLeft += numParentOffsetLeft;
            numTop += numParentOffsetTop;
        }        
        oParent = oParent.offsetParent;
    }
    
    oCalendar.style.left = (numLeft + numCalendarOffsetLeft) + "px";
    oCalendar.style.top= (numTop + numHeight + numCalendarOffsetTop - 1) + "px";
    oCalendar.style.display = "block";
    _CTB_CheckDate(strTxtID);
    _CTB_SetCalendarFromTxt(strTxtID);
    _CTB_InitCalendar(strTxtID);
    
    if(oTxt){oTxt.focus();}
}

function _CTB_HiddenTime(strTxtID) {
    
    var oTxt = document.getElementById(strTxtID);
    var oCalendar = document.getElementById(strTxtID + "_Calendar");
    var strIsOn = oTxt.getAttribute("is_on");
    _CTB_CheckDate(strTxtID);
    if(strIsOn == "false"){ oCalendar.style.display = "none"; }
    else{ oTxt.focus(); }
}

function _CTB_SetValue(strTxtID, oValue)
{
    var oCalendar = document.getElementById(strTxtID + "_Calendar");
    var oTxt = document.getElementById(strTxtID);
    var oTitle = document.getElementById(strTxtID + "_Calendar_Title");
    var strCalendarMode = oTxt.getAttribute("calendar_mode");
    var strSelectMode = oTxt.getAttribute("select_mode");
    var strFormatMode = oTxt.getAttribute("format_mode");
    var strValue = oValue["value"];

    if(strValue == "" || strValue == "undefined")
        return;

    switch(strCalendarMode)
    {
        case "day":
            oTxt["day"] = _CTB_StrToNum(strValue);
            oTxt.value = _CTB_GetDate(strTxtID);
            oCalendar.style.display = "none";
            break;
        case "month":
            switch(strSelectMode)
            {
                case "day":
                    oTxt["month"] = _CTB_StrToNum(strValue);
                    _CTB_ChangeModeDown(strTxtID);
                    break;
                case "month":
                    oTxt["month"] = _CTB_StrToNum(strValue);
                    oTxt.value = _CTB_GetDate(strTxtID);
                    oCalendar.style.display = "none";
                    break;
            }
            break;
        case "year":
            switch(strSelectMode)
            {
                case "day":
                case "month":
                    oTxt["year"] = strValue;
                    _CTB_ChangeModeDown(strTxtID);
                    break;
                case "year":
                    oTxt["year"] = strValue;
                    oTxt.value = _CTB_GetDate(strTxtID);
                    oCalendar.style.display = "none";
                    break;
            }
            break;
    }
}

function _CTB_GetDate(strTxtID)
{
    var oTxt = document.getElementById(strTxtID);
    var strSelectMode = oTxt.getAttribute("select_mode");
    var strFormatMode = oTxt.getAttribute("format_mode");
    var numYear = oTxt["year"];
    var numMonth = oTxt["month"];
    var numDay = oTxt["day"];
    switch(strSelectMode){
        case "day":
            switch(strFormatMode){
                case "YYYY-MM-DD":
                    return _CTB_NumToStr(numYear,4) + "-" + _CTB_NumToStr(numMonth,2) + "-" + _CTB_NumToStr(numDay,2);
                case "YYYYMMDD":
                    return _CTB_NumToStr(numYear,4) + _CTB_NumToStr(numMonth,2) + _CTB_NumToStr(numDay,2);
            }
        case "month":
            switch(strFormatMode){
                case "YYYY-MM-DD":
                    return _CTB_NumToStr(numYear,4) + "-" + _CTB_NumToStr(numMonth,2);
                case "YYYYMMDD":
                    return _CTB_NumToStr(numYear,4) + _CTB_NumToStr(numMonth,2);
            }
        case "year":
            switch(strFormatMode){
                case "YYYY-MM-DD":
                    return _CTB_NumToStr(numYear,4);
                case "YYYYMMDD":
                    return _CTB_NumToStr(numYear,4);
            }
    }
   
}

function _CTB_ChangeModeUp(strTxtID)
{
    var oTxt = document.getElementById(strTxtID);
    var strCalendarMode = oTxt.getAttribute("calendar_mode");

    switch(strCalendarMode)
    {
        case "day":
            oTxt.setAttribute("calendar_mode", "month");
            _CTB_InitCalendar(strTxtID);
            break;
        case "month":
            oTxt.setAttribute("calendar_mode", "year");
            _CTB_InitCalendar(strTxtID);
            break;
        default:
            return;
    }
}

function _CTB_ChangeModeDown(strTxtID)
{
    var oTxt = document.getElementById(strTxtID);
    var strCalendarMode = oTxt.getAttribute("calendar_mode");
     
    switch(strCalendarMode)
    {            
        case "month":
            oTxt.setAttribute("calendar_mode", "day");
            _CTB_InitCalendar(strTxtID);
            break;
        case "year":
            oTxt.setAttribute("calendar_mode", "month");
            _CTB_InitCalendar(strTxtID);
            break;
        default:
            return;
    }
}

function _CTB_InitCalendar(strTxtID)
{
    var oTxt = document.getElementById(strTxtID);
    var strCalendarMode = oTxt.getAttribute("calendar_mode");
    
    switch(strCalendarMode)
    {
        case "day": 
            _CTB_InitCalendarDay(strTxtID);
            break;
        case "month":
            _CTB_InitCalendarMonth(strTxtID);
            break;
        case "year":
            _CTB_InitCalendarYear(strTxtID);
            break;
    }
}

function _CTB_InitCalendarDay(strTxtID)
{
    var oTxt = document.getElementById(strTxtID);
    var oTitle = document.getElementById(strTxtID + "_Calendar_Title");
    var oYearMonth = document.getElementById(strTxtID + "_Calendar_Main");
    var oDay = document.getElementById(strTxtID + "_Calendar_Main_");
    var oMain_ = oDay.getElementsByTagName("TD");
    var numYear = oTxt["year"];
    var numMonth = oTxt["month"];
    var numDay = oTxt["day"];
    var strFormatMode = oTxt.getAttribute("format_mode");
    var numMaxDay = _CTB_GetMaxDay(numYear,numMonth - 1);
    var numFirstDay = new Date(numYear,numMonth - 1, 1).getDay();
    var numValidDay = 1;
    var strSelectDate = oTxt["select_date"];
    var strMinDate = oTxt.getAttribute("min_date");
    var strMaxDate = oTxt.getAttribute("max_date");
    
    oYearMonth.style.display = "none";
    oDay.style.display = "";

    switch(strFormatMode)
    {
        case "YYYY-MM-DD":
            oTitle.innerHTML = _CTB_NumToStr(numYear,4) + "-" + _CTB_NumToStr(numMonth,2);
            break;
        case "YYYYMMDD":
            oTitle.innerHTML = _CTB_NumToStr(numYear,4) + _CTB_NumToStr(numMonth,2);
            break;
    }
    
    for(var numI = 0; numI < oMain_.length; numI ++)
    {            
        if(numValidDay <= numMaxDay && numI >= numFirstDay)
        {
            if(_CTB_NumToStr(numYear,4) + _CTB_NumToStr(numMonth,2) + _CTB_NumToStr(numValidDay,2) < strMinDate)
            {
                oMain_[numI].innerHTML = numValidDay.toString();
                oMain_[numI]["value"] = "";
                oMain_[numI].className = "CTB_Disabled_Day";
            }
            else if(_CTB_NumToStr(numYear,4) + _CTB_NumToStr(numMonth,2) + _CTB_NumToStr(numValidDay,2) > strMaxDate)
            {
                oMain_[numI].innerHTML = numValidDay.toString();
                oMain_[numI]["value"] = "";
                oMain_[numI].className = "CTB_Disabled_Day";
            }
            else
            {                
                oMain_[numI].innerHTML = numValidDay.toString();
                oMain_[numI]["value"] = _CTB_NumToStr(numValidDay,2);
                                    
                if(strSelectDate == _CTB_NumToStr(numYear,4) + _CTB_NumToStr(numMonth,2) + _CTB_NumToStr(numValidDay,2)){
                    oMain_[numI].className = "CTB_Selected_Day";
                }
                else{ 
                    oMain_[numI].className = "CTB_Valid_Day";
                }
            }
            
            numValidDay += 1;
        }
        else
        {
            oMain_[numI].innerHTML = "";
            oMain_[numI]["value"] = "";
            oMain_[numI].className = "";
        }
    }
}

function _CTB_InitCalendarMonth(strTxtID)
{
    var oTxt = document.getElementById(strTxtID);
    var oTitle = document.getElementById(strTxtID + "_Calendar_Title");
    var oYearMonth = document.getElementById(strTxtID + "_Calendar_Main");
    var oDay = document.getElementById(strTxtID + "_Calendar_Main_");
    var oMain = oYearMonth.getElementsByTagName("TD");
    var numYear = oTxt["year"];
    var numMonth = oTxt["month"];
    var numValidMonth = 1;  
    var strSelectDate = oTxt["select_date"].substr(0,6);
    var strMinDate = oTxt.getAttribute("min_date").substr(0,6);
    var strMaxDate = oTxt.getAttribute("max_date").substr(0,6);
            
    oYearMonth.style.display = "";
    oDay.style.display = "none";
    
    oTitle.innerHTML = numYear;
    
    for(var numI = 0; numI < oMain.length; numI ++)
    {
        if(_CTB_NumToStr(numYear,4) + _CTB_NumToStr(numValidMonth,2) < strMinDate)
        {
            oMain[numI].innerHTML = numValidMonth.toString() + "月";
            oMain[numI]["value"] = "";
            oMain[numI].className = "CTB_Disabled_Year_Month";
        }
        else if(_CTB_NumToStr(numYear,4) + _CTB_NumToStr(numValidMonth,2) > strMaxDate)
        {
            oMain[numI].innerHTML = numValidMonth.toString() + "月";
            oMain[numI]["value"] = "";
            oMain[numI].className = "CTB_Disabled_Year_Month";
        }
        else
        {
            if(strSelectDate == _CTB_NumToStr(numYear,4) + _CTB_NumToStr(numValidMonth,2)){
                oMain[numI].className = "CTB_Selected_Year_Month";}
            else{
                oMain[numI].className = "CTB_Valid_Year_Month";}
        
            oMain[numI].innerHTML = numValidMonth.toString() + "月";
            oMain[numI]["value"] = _CTB_NumToStr(numValidMonth,2);
        }
        
        numValidMonth += 1;
    }
}    

function _CTB_InitCalendarYear(strTxtID)
{
    var oTxt = document.getElementById(strTxtID);
    var oTitle = document.getElementById(strTxtID + "_Calendar_Title");
    var oYearMonth = document.getElementById(strTxtID + "_Calendar_Main");
    var oDay = document.getElementById(strTxtID + "_Calendar_Main_");
    var oMain = oYearMonth.getElementsByTagName("TD");
    var numYear = oTxt["year"];
    var numValidYear = numYear - 4;
    var strSelectDate = oTxt["select_date"].substr(0,4);
    var strMinDate = oTxt.getAttribute("min_date").substr(0,4);
    var strMaxDate = oTxt.getAttribute("max_date").substr(0,4);

    oYearMonth.style.display = "";
    oDay.style.display = "none";  
    
    oTitle.innerHTML = _CTB_NumToStr(numValidYear,4) + "-" + _CTB_NumToStr((numValidYear + 11),4);
    
    for(var numI = 0; numI < oMain.length; numI ++)
    {
        if(_CTB_NumToStr(numValidYear,4) < strMinDate)
        {
            oMain[numI].innerHTML = numValidYear.toString();
            oMain[numI]["value"] = "";
            oMain[numI].className = "CTB_Disabled_Year_Month";
        }
        else if(_CTB_NumToStr(numValidYear,4) > strMaxDate)
        {
            oMain[numI].innerHTML = numValidYear.toString();
            oMain[numI]["value"] = "";
            oMain[numI].className = "CTB_Disabled_Year_Month";
        }
        else
        {
            if(strSelectDate == _CTB_NumToStr(numValidYear, 4)){
                oMain[numI].className = "CTB_Selected_Year_Month";}
            else{
                oMain[numI].className = "CTB_Valid_Year_Month";}
        
            oMain[numI].innerHTML = numValidYear.toString();
            oMain[numI]["value"] = _CTB_NumToStr(numValidYear,4);
        }       
        
        numValidYear += 1;
    }

}

function _CTB_PrevPage(strTxtID)
{
    var oTxt = document.getElementById(strTxtID);
    var strCalendarMode = oTxt.getAttribute("calendar_mode");
    var numYear = oTxt["year"] * 1;
    var numMonth = oTxt["month"] * 1;
    
    if(isNaN(numYear) || isNaN(numMonth))
        return;
    
    switch(strCalendarMode)
    {
        case "day":
            if(numMonth > 1)
                oTxt["month"] = numMonth - 1;
            else
            {
                oTxt["year"] = numYear - 1;
                oTxt["month"] = 12;
            }
            _CTB_InitCalendar(strTxtID);
            break;
        case "month":
            oTxt["year"] = numYear - 1;
            _CTB_InitCalendar(strTxtID);
            break;
        case "year":
            oTxt["year"] = numYear - 12;
            _CTB_InitCalendar(strTxtID);
            break;
    }
}

function _CTB_NextPage(strTxtID)
{
    var oTxt = document.getElementById(strTxtID);
    var strCalendarMode = oTxt.getAttribute("calendar_mode");
    var numYear = oTxt["year"] * 1;
    var numMonth = oTxt["month"] * 1;
    
    if(isNaN(numYear) || isNaN(numMonth))
        return;
    
    switch(strCalendarMode)
    {
        case "day":
            if(numMonth < 12)
                oTxt["month"] = numMonth + 1;
            else
            {
                oTxt["year"] = numYear + 1;
                oTxt["month"] = 1;
            }
            _CTB_InitCalendar(strTxtID);
            break;
        case "month":
            oTxt["year"] = numYear + 1;
            _CTB_InitCalendar(strTxtID);
            break;
        case "year":
            oTxt["year"] = numYear + 12;
            _CTB_InitCalendar(strTxtID);
            break;
    }
}

function _CTB_IS_ON(strTxtID)
{
    var oTxt = document.getElementById(strTxtID);
    var oEvent = window.event;
    var oSender = oEvent?oEvent.srcElement:null;
    var oOld;
    
    oTxt.setAttribute("is_on", "true");
    
    if(!oSender){ return; }
    if(oSender.tagName == "TD" || oSender.tagName == "TH"){
        oOld = oTxt["hover"];
        oTxt["hover"] = oSender;
        if(oOld){
            switch(oOld.className){
                case "CTB_Valid_Year_Month_Hover":
                    oOld.className = "CTB_Valid_Year_Month";
                    break;
                case "CTB_Disabled_Year_Month_Hover":
                    oOld.className = "CTB_Disabled_Year_Month";
                    break;
                case "CTB_Valid_Day_Hover":
                    oOld.className = "CTB_Valid_Day";
                    break;
                case "CTB_Disabled_Day_Hover":
                    oOld.className = "CTB_Disabled_Day";
                    break;
                case "CTB_Day_TH_Hover":
                    oOld.className = "CTB_Day_TH";
                    break;
                case "CTB_Prev_Hover":
                    oOld.className = "CTB_Prev";
                    break;
                case "CTB_Title_Hover":
                    oOld.className = "CTB_Title";
                    break;
                case "CTB_Next_Hover":
                    oOld.className = "CTB_Next";
                    break;
            }
        }
        if(oSender){
            switch(oSender.className){
                case "CTB_Valid_Year_Month":
                    oSender.className = "CTB_Valid_Year_Month_Hover";
                    break;
                case "CTB_Disabled_Year_Month":
                    oSender.className = "CTB_Disabled_Year_Month_Hover";
                    break;
                case "CTB_Valid_Day":
                    oSender.className = "CTB_Valid_Day_Hover";
                    break;
                case "CTB_Disabled_Day":
                    oSender.className = "CTB_Disabled_Day_Hover";
                    break;
                case "CTB_Day_TH":
                    oSender.className = "CTB_Day_TH_Hover";
                    break;
               case "CTB_Prev":
                    oSender.className = "CTB_Prev_Hover";
                    break;
                case "CTB_Title":
                    oSender.className = "CTB_Title_Hover";
                    break;
                case "CTB_Next":
                    oSender.className = "CTB_Next_Hover";
                    break;
            }
        }
    }
}

function _CTB_IS_NOT_ON(strTxtID)
{
    var oTxt = document.getElementById(strTxtID);

    oTxt.setAttribute("is_on", "false");
}

function _CTB_FOCUS_TXT(strTxtID, ev)
{
    var oTxt = document.getElementById(strTxtID);
    var oEvent = ev || window.event;
    var oSender = oEvent.target || oEvent.srcElement;
    
    if(oSender.tagName == "TD")
        _CTB_SetValue(strTxtID,oSender);
    
    if(oSender.tagName == "TH")
    {
        switch(oSender.id)
        {
            case strTxtID + "_Calendar_Prev":
                _CTB_PrevPage(strTxtID);
                break;
            case strTxtID + "_Calendar_Title":
                _CTB_ChangeModeUp(strTxtID);
                break;
            case strTxtID + "_Calendar_Next":
                _CTB_NextPage(strTxtID);
                break;
        }
    }
    
    oTxt.focus();
}

function _CTB_GetMaxDay(numYear,numMonth)
{
    var numNextMonth,numNextYear,dtDate,dtNextDate,numMaxDay;
    numNextMonth = numMonth + 1;
    if(numNextMonth > 11)
    {
     numNextYear = numYear + 1;
     numNextMonth = 0;
    }
    else 
    {
     numNextYear = numYear; 
    }
    dtDate = new Date(numYear, numMonth, 1);
    dtNextDate = new Date(numNextYear, numNextMonth, 1);
    numMaxDay = (dtNextDate - dtDate)/(24*60*60*1000);
    
    return numMaxDay;
}

function _CTB_StrToNum(strParm)
{
    if(typeof(strParm) != "string"){return strParm}
    
    var numReturn = strParm * 1;
    
    if(isNaN(numReturn)){return 0;}
    else{return numReturn;}
}

function _CTB_NumToStr(numParm, numLength)
{
    if(typeof(numParm) != "number"){return numParm;}

    var strReturn = numParm.toString();
    
    if(strReturn.length >= numLength){numLength = 0;}
    else{numLength = numLength - strReturn.length;}
    
    for(numI = 0 ; numI < numLength ; numI ++)
    {
        strReturn = "0" + strReturn;
    }
    
    return strReturn;
}

function _CTB_CheckDate(strTxtID)
{
    var oTxt = document.getElementById(strTxtID);
    var strFormatMode = oTxt.getAttribute("format_mode");

    switch(strFormatMode){
        case "YYYY-MM-DD":
            _CTB_CheckDate_1(strTxtID);
            break;
        case "YYYYMMDD":
            _CTB_CheckDate_2(strTxtID);
            break;}
}

function _CTB_CheckDate_1(strTxtID)
{
    var oTxt = document.getElementById(strTxtID);
    var strCalendarMode = oTxt.getAttribute("calendar_mode");
    var strTxt = oTxt.value;
    var numLength = strTxt.length;
    var oMatch;
    
    if(numLength >= 10)
    {
        oMatch = strTxt.substr(0,10).match(/((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29))$/g);
        if(oMatch != null){return;}
        else{numLength = 7;}
    }
    
    if(numLength >= 7 && numLength < 10)
    {
        oMatch = strTxt.substr(0,7).match(/((1[6-9]|[2-9]\d)\d{2})-(0?[1-9]|1?[0-2])$/g);
        if(oMatch != null)
        {
            if(strCalendarMode == "day"){ oTxt.value = strTxt.substr(0,7) + "-01"; }
            return;
        }
        else{numLength = 4;}
    }
    
    if(numLength >= 4 && numLength < 7)
    {
        oMatch = strTxt.substr(0,4).match(/((1[6-9]|[2-9]\d)\d{2})$/g);
        if(oMatch != null)
        {
            if(strCalendarMode == "day"){ oTxt.value = strTxt.substr(0,4) + "-01-01"; }
            else if(strCalendarMode == "month"){ oTxt.value = strTxt.substr(0,4) + "-01"; }
            return;
        }
        else{numLength = 0;}
    }
    
    if(numLength < 4)
    {
        oTxt.value = "";
    }
}

function _CTB_CheckDate_2(strTxtID)
{
    var oTxt = document.getElementById(strTxtID);
    var strCalendarMode = oTxt.getAttribute("calendar_mode");
    var strTxt = oTxt.value;
    var numLength = strTxt.length;
    var oMatch;
    
    if(numLength >= 8)
    {
        oMatch = strTxt.substr(0,8).match(/((((1[6-9]|[2-9]\d)\d{2})(0?[13578]|1[02])(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})(0?[13456789]|1[012])(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})(0?2)(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))(0?2)(29)))$/g);
        if(oMatch != null){return;}
        else{numLength = 7;}
    }
    
    if(numLength >= 6 && numLength < 8)
    {
        oMatch = strTxt.substr(0,6).match(/((1[6-9]|[2-9]\d)\d{2})(0?[1-9]|1?[0-2])$/g);
        if(oMatch != null)
        {
            if(strCalendarMode == "day"){ oTxt.value = strTxt.substr(0,6) + "01"; }
            return;
        }
        else{numLength = 4;}
    }
    
    if(numLength >= 4 && numLength < 6)
    {
        oMatch = strTxt.substr(0,4).match(/((1[6-9]|[2-9]\d)\d{2})$/g);
        if(oMatch != null)
        {
            if(strCalendarMode == "day"){ oTxt.value = strTxt.substr(0,4) + "0101"; }
            else if(strCalendarMode == "month"){ oTxt.value = strTxt.substr(0,4) + "01"; }
            return;
        }
        else{numLength = 0;}
    }
    
    if(numLength < 4)
    {
        oTxt.value = "";
    }
}
