﻿
/*
    Computer Science Group, LLC
    225-766-2397 office
    225-205-0263 cell
    darrell@computersciencegroup.com
    Copyright © 2008 Computer Science Group, LLC, All rights reserved.
*/

//csgTextBoxDateTime(<opCsgTextBoxID>)
//10/05/2009
function csgTextBoxDateTime(opCsgTextBoxID)
{
    //cannot continue if textbox is not found.
    if (!document.getElementById(opCsgTextBoxID))
    {
        alert("TextBox " + opCsgTextBoxID + " not found.");
        return;
    }
    /****************************************************************************************
    //Inherits from csgTextBox
    ****************************************************************************************/
    this.parent = new csgTextBox(opCsgTextBoxID);
    var oCsgTextBoxDate = this;
    /****************************************************************************************
    events
    ****************************************************************************************/
    //onkeypress - replace onkeypress event from csgTextBox
    this.onKeyPress = function()
    {
        var j;
        if (oCsgTextBoxDate.parent.isDateCode(event.keyCode) == false) { event.keyCode  = null; }
        else
        {
            //allow only one '/'
            if (event.keyCode == 47)
            {
                j=0;
                for (var i=0; i<oCsgTextBoxDate.parent.textBox.value.length; i++)
                {
                    if (oCsgTextBoxDate.parent.textBox.value.substr(i, 1) == "/")
                    {
                        j++;
                        if (j == 2)
                        {
                            event.keyCode = null;
                            break;
                        }
                    }
                }
            }
        }
        if (ocsgPage.textBoxOnKeyPress) { ocsgPage.textBoxOnKeyPress(oCsgTextBoxDate.parent); }
    }
    this.parent.textBox.onkeypress = oCsgTextBoxDate.onKeyPress;	
    //onblur - replace onblur event from csgTextBox
    this.onBlur = function()
    {
        var oValue;
        event.srcElement.className = oCsgTextBoxDate.parent.cssClassCsgTextBox;
        if (oCsgTextBoxDate.isValidDateTime(oCsgTextBoxDate.parent.textBox.value) == false)
        {
            oValue = oCsgTextBoxDate.parent.textBox.value;
            event.srcElement.className = oCsgTextBoxDate.parent.cssClassCsgTextBoxBadValue;
        }
        else
        {
            oValue = oCsgTextBoxDate.formatTheDateTime(oCsgTextBoxDate.parent.textBox.value);
            if (!oValue)
            {
                if (oCsgTextBoxDate.parent.textBox.value)
                {
                    oValue = oCsgTextBoxDate.parent.textBox.value;
                    event.srcElement.className = oCsgTextBoxDate.parent.cssClassCsgTextBoxBadValue;
                }
            }
            event.srcElement.value = oValue;
        }
        if (ocsgPage.textBoxOnBlur) { ocsgPage.textBoxOnBlur(oCsgTextBoxDate.parent); }
    }
    this.parent.textBox.onblur = oCsgTextBoxDate.onBlur;	
    /****************************************************************************************
    methods
    ****************************************************************************************/
    //formatTheDateTime(<opDateTime>)
    //09/17/2008
    this.formatTheDateTime = function(opDateTime)
    {
        var oformatTheDateTime = "";
        var oTimePart;
        var oDatePart = oCsgTextBoxDate.getDatePart(opDateTime);
        if (oDatePart)
        {
            oformatTheDateTime = oDatePart;
            oTimePart = oCsgTextBoxDate.getTimePart(opDateTime);
            if (oTimePart) { oformatTheDateTime = oDatePart + " " + oTimePart; }
        }
        return oformatTheDateTime
    }
    //getDatePart(<opDateTime>)
    //10/05/2009
    this.getDatePart = function(opDateTime)
    {
        var oArray = opDateTime.split(" ");
        var oDatePart = false;
        try { oDatePart = oCsgTextBoxDate.formatDatePart((typeof oArray[0] != "undefined" ? oArray[0] : false)); }
        catch (e) { }
        return oDatePart;
    }
    //getDatePart(<opDateTime>)
    //10/05/2009
    this.getTimePart = function(opDateTime)
    {
        var oArray = opDateTime.split(" ");
        var oTimePart = false;
        try { oTimePart = oCsgTextBoxDate.formatTimePart((typeof oArray[1] != "undefined" ? oArray[1] : false)); }
        catch (e) { }
        return oTimePart;
    }
    //formatDatePart(<opDatePart>)
    //10/05/2009
    this.formatDatePart = function(opDatePart)
    {
        var sMonth;
        var sDay;
        var sYear;
        var oArray;
        var oDatePart = opDatePart;
        if (oDatePart)
        {
            //date entered without '/'
            if (oDatePart.indexOf("/") < 0)
            {
                //mmddyyyy
                if (oDatePart.length == 8)
                {
                    oDatePart = oDatePart.substr(0,2) + "/" + oDatePart.substr(2,2) + "/" + oDatePart.substr(4);
                }
                else
                {
                    //mmddyy
                    if (oDatePart.length == 6)
                    {
                        oDatePart = oDatePart.substr(0,2) + "/" + oDatePart.substr(2,2) + "/" + oCsgTextBoxDate.convertTwoDigitYearToFourDigitYear(oDatePart.substr(4));
                    }
                }
            }
            else
            {
                oArray = oDatePart.split("/");
                if (oArray.length == 3)
                {
                    sMonth = oArray[0];
                    if (sMonth.length < 2) { sMonth = "0" + sMonth; }
                    sDay = oArray[1];
                    if (sDay.length < 2) { sDay = "0" + sDay; }
                    sYear = oArray[2];
                    if (sYear.length == 2) { sYear = oCsgTextBoxDate.convertTwoDigitYearToFourDigitYear(sYear); }
                    oDatePart = sMonth + "/" + sDay + "/" + sYear;
                }
            }
        }
        return oDatePart;
    }
    //convertTwoDigitYearToFourDigitYear(<opYear>)
    //09/18/2008
    this.convertTwoDigitYearToFourDigitYear = function(opYear)
    {
        var iThisYear;
        var sThisYear;
        var sYearPart;
        var iYearPart;
        var sCenturyPart;
        var iCenturyPart;
        var iYear;
        var sYear;
        if (opYear)
        {
            sYear = opYear.toString();
            if (sYear.length == 2)
            {
                if (sYear.substr(0,1) == "0") { iYear = parseInt(sYear.substr(1,1)); }
                else { iYear = parseInt(sYear); }
                iThisYear = (new Date()).getFullYear();
                sThisYear = iThisYear.toString();
                sCenturyPart = sThisYear.substr(0,2);
                sYearPart = sThisYear.substr(2);
                if (sYearPart.substr(0,1) == "0") { iYearPart = parseInt(sYearPart.substr(1,1)); }
                else { iYearPart = parseInt(sYearPart); }
                if (iYear <= iYearPart) { sYear = sCenturyPart + sYear.toString(); }
                else
                {
                    iCenturyPart = parseInt(sCenturyPart) - 1;
                    if (sYear.length == 1) { sYear = "0" + sYear; }
                    sYear = iCenturyPart.toString() + sYear;
                }
            }
        }
        return sYear;
    }
    //formatTimePart(<opTimePart>)
    //10/05/2009
    this.formatTimePart = function(opTimePart)
    {
        var sHours;
        var sMinutes;
        var sSeconds;
        var oArray;
        var oTimePart = opTimePart;
        if (oTimePart)
        {
            //time entered without ':'
            if (oTimePart.indexOf(":") < 0)
            {
                oTimePart = oTimePart.substr(0,2) + ":" + oTimePart.substr(2,2) + ":" + oTimePart.substr(4);
            }
            else
            {
                oArray = oTimePart.split(":");
                if (oArray.length == 3)
                {
                    //hours
                    sHours = "";
                    try
                    {
                        sHours = oArray[0];
                        if (parseInt(sHours) > 23) { sHours = "00"; }
                    }
                    catch (e) { sHours = "00"; }
                    if (sHours.length < 2) { sHours = "0" + sHours; }
                    //minutes
                    sMinutes = "";
                    try
                    {
                        sMinutes = oArray[1];
                        if (parseInt(sMinutes) > 59) { sMinutes = "00"; }
                    }
                    catch (e) { sMinutes = "00"; }
                    if (sMinutes.length < 2) { sMinutes = "0" + sMinutes; }
                    //seconds
                    sSeconds = "";
                    try
                    {
                        sSeconds = oArray[2];
                        if (parseInt(sSeconds) > 59) { sSeconds = "00"; }
                    }
                    catch (e) { sSeconds = "00"; }
                    if (sSeconds.length < 2) { sSeconds = "0" + sSeconds; }
                    //
                    oTimePart = sHours + ":" + sMinutes + ":" + sSeconds;
                }
            }
        }
        return oTimePart;
    }    
    //isValidDateTime(<opDateTime>)
    //10/05/2009
    this.isValidDateTime = function(opDateTime)
    {
        var oTimePart;
        var oDatePart = oCsgTextBoxDate.getDatePart(opDateTime);
        var oisValidDateTime = true;
        if (oDatePart)
        {
            oisValidDateTime = oCsgTextBoxDate.isAValidDate(oDatePart);
            if (oisValidDateTime)
            {
                oTimePart = oCsgTextBoxDate.getTimePart(opDateTime);
                if (oTimePart)
                {
                    oisValidDateTime = oCsgTextBoxDate.isAValidTime(oTimePart);
                }            
            }
        }
        return oisValidDateTime;
    }
    //isAValidDate(<opDatePart>)
    //10/05/2009
    this.isAValidDate = function(opDatePart)
    {
        var oisAValidDate = false;
        if (typeof opDatePart == "string")
        {
            if (opDatePart)
            {
                try { oisAValidDate = (parseDate(opDatePart) != null); }
                catch (e) { }
            }
        }
       return oisAValidDate;
    }
    //isAValidTime(<opTimePart>)
    //10/05/2009
    this.isAValidTime = function(opTimePart)
    {
        var sHours;
        var sMinutes;
        var sSeconds;
        var iHours;
        var iMinutes;
        var iSeconds;
        var bisAValidTime = false;
        var oArray;
        if (typeof opTimePart == "string")
        {
            if (opTimePart)
            {
                if (opTimePart.length == 8)
                {
                    try
                    {
                        oArray = opTimePart.split(":");
                        sHours = oArray[0];
                        iHours = parseInt(sHours);
                        if ((iHours >= 0) && (iHours <= 23))
                        {
                            sMinutes = oArray[1];
                            iMinutes = parseInt(sMinutes);
                            if ((iMinutes >= 0) && (iMinutes <= 60))
                            {
                                sSeconds = oArray[2];
                                iSeconds = parseInt(sSeconds);
                                if ((iSeconds >= 0) && (iSeconds <= 60))
                                {
                                    bisAValidTime = true;
                                }
                            }
                        }
                    }
                    catch (e) { }
                }
            }
        }
       return bisAValidTime;
    }
    //addTimePartToDate(<opTimePart>)
    //10/05/2009
    this.addTimePartToDate = function(opTextBox)
    {
        var oDate = parseDate(opTextBox.value);
        var oNow = new Date();
        return (oDate.getMonth() + 1).toString() + "/" + 
                    oDate.getDate().toString() + "/" + 
                    (oDate.getFullYear()).toString() + " " + 
                    (oNow.getHours() + 1).toString() + ":" + 
                    (oNow.getMinutes() + 1).toString() + ":" + 
                    (oNow.getSeconds() + 1).toString();
    }
    
}