﻿// the VS debugger has trouble breaking on js in viewpages. When you want to break on javacript
// thats contained in a view page you can just call the function jsBP();
// Alternatively you can copy code here - but the jsBP() is better

// If Vis Studio doesn't load this for debugging - make sure you turn on script debugging in IE options/advanced
// there are 2 checkboxes 

function jsBP() {
    var s = "breakpoint"; //set breakpoint here and then step to go into views javascript
    return s;
}

function SetDisplay(elem, displayType) {
    $(elem).css('display', displayType);
}

// older versions of IE don't support textContent and Firefox doesn't support innerHTML
function GetTextContent(elem) {
    var tx = elem.textContent;
    if (tx == undefined)
        tx = elem.innerHTML;
    return tx;
}
function SetTextContent(elem, target) {
    var tx = elem.textContent;
    if (tx == undefined)
        elem.innerHTML = target;
    else
        elem.textContent = target;
}
function defTxt(tVal) {
    if (tVal == undefined)
        return "";
    else
        return tVal;
}

// selecting options in drop down lists:
function selectOptionByText(optselector, txtVal) {
    // the optselector passed in should look something like 'select#my-select option'
    // $("select#my-select option")
    $(optselector)
       .each(function () { this.selected = (this.text == txtVal); });
}

// it's easier to select an option by value
function selectOptionByVal(selselector, xVal) {
    // where selselector selects the <select> element
    $(selselector).val(xVal);
}

function GetSelectedText(elementId) {
    var elt = document.getElementById(elementId);

    if (elt.selectedIndex == -1)
        return null;

    return elt.options[elt.selectedIndex].text;
}

function GetSelectedValue(elementId) {
    var elt = document.getElementById(elementId);

    if (elt.selectedIndex == -1)
        return null;

    return elt.options[elt.selectedIndex].value;   //untested
}

//function DisplayHdrMessage() {
//    var hidFld = $('#hdrMessage')[0];
//    var msg = "";
//    if (hidFld != null)
//        msg = hidFld.value;
//    var hdrPanel = $('#hdrMessageDiv')[0];
//    if ((drPanel != null) && (msg.length > 0))
//        hdrPanel.html(msg);
//}

function testValue(x, len) {
    if (x[0] != null) {
        if (x[0].value != null) {
            if (x[0].value.length > len)
                return true;
        }
    }
    return false;
}

// checkTimeInput - to filter time input 
// setup like :  $('.editTime').bind('keyup', function (e) { checkTimeInput(e, '.editTime'); }); 

var userEnteredHour = 12;
var userEnteredMin = 0;
var lastTime = ""; 

function checkTimeInput(e, ctrl) {

    var timeIn = $(ctrl)[0].value;
    if (timeIn == "") {
        lastTime = timeIn;
        return;
    }
    var h = 0;
    var m = 0;
    var minute = "?";
    var ok = true;

    var userEnteredTimeFrame = "?";

    var segs = timeIn.split(/:/);
    if (segs.length > 0) {
        if (segs[0].match(/^\d+$/)) {
            h = parseInt(segs[0]);
            if (h > 12)
                ok = false;
            else
                userEnteredHour = h;
        }
        else
            ok = false;
    }
    if (segs.length > 1) {
        var mSegs = segs[1].split(" ");
        if (mSegs.length > 0) {
            if (mSegs[0].length > 0) {
                if (mSegs[0].match(/^\d+$/)) {
                    minute = mSegs[0];
                    m = parseInt(mSegs[0]);
                    if (m > 60)
                        ok = false;
                    else
                        userEnteredMin = m;
                }
                else
                    ok = false;
                if (ok && (mSegs.length > 1)) {
                    if (mSegs[1].length > 0) {
                        if (mSegs[1].match(/[aApP][mM]?/)) {
                            if (  (mSegs[1].startsWith("A")) || (mSegs[1].startsWith("a")) )
                                userEnteredTimeFrame = "AM";
                            else
                                userEnteredTimeFrame = "PM";
                            if (  (mSegs[1].length > 1) && (!  (mSegs[1].match(/[aApP][mM]$/)) )  )
                                ok = false;
                        }
                        else if (mSegs[1].match(/[mM]/)) {
                            timeIn = userEnteredHour + ":" + userEnteredMin;
                        }
                        else
                            ok = false;
                    }
                }
            }
        }
    }
    if (ok) {
        if ((minute != "?") && (userEnteredTimeFrame != "?")) {
            if (minute.length == 1)
                timeIn = userEnteredHour + ":" + userEnteredMin + " " + userEnteredTimeFrame;
        }
        lastTime = timeIn;
    }
    else
        $(ctrl)[0].value = lastTime;
        //$('.editTime')[0].value = userEnteredHour + ":" + userEnteredMin + " " + userEnteredTimeFrame;
}

//********************* Date Validation *************************

var lastDate = "";

function checkDateInput(e, ctrl) {

    var dateIn = $(ctrl)[0].value;
    if (dateIn == "") {
        lastDate = dateIn;
        return;
    }
    var mo = 0;
    var day = 0;
    var yr = 0;
    var ok = true;

    var userEneteredDate = "?";

    var segs = dateIn.split('/');
    if (segs.length > 0) {
        if (segs[0].match(/^\d+$/)) {
            mo = parseInt(segs[0]);
            if (mo > 12)
                ok = false;
            //else
            //    userEnteredMo = h;
        }
        else
            ok = false;
    }
    if (segs.length > 1) {
        if (segs[1].length > 0) {
            if (segs[1].match(/^\d+$/)) {
                day =  parseInt(segs[1]);
                if (day > 31)
                    ok = false;
            }
            else
                ok = false;
        }
    }
    if (segs.length > 2) {
        if (segs[2].length > 0) {
            if (segs[2].match(/^\d+$/)) {
                year = parseInt(segs[2]);
                //if (year < 100)
                //    ok = false;
            }
            else
                ok = false;
        }
    }
    if (ok) {
        lastDate = dateIn;
    }
    else
        $(ctrl)[0].value = lastDate;
}

var lastEmail = "";

function checkEmailInput(e, ctrl) {
    //var emailIn = $(ctrl)[0].value;
    var emailIn = e.target.value;
    if (emailIn == "") {
        lastEmail = emailIn;
        return true;
    }
    var uName = "";
    var domain = "";
    var ext = "";
    var atsegs = emailIn.split('@');
    var clr = '#900';
    var complete = false;
    if (atsegs.length > 0) {
        uName = atsegs[0];
        if ((atsegs[1] != null) && (atsegs[1].length > 0)) {
            var dsegs = atsegs[1].split('.');
            domain = dsegs[0];
            if (dsegs.length > 0) {
                ext = dsegs[1];
                if ((ext != null) && (ext.length > 1)) {
                    clr = '#000';
                    complete = true;
                }
            }
        }
    }
    e.target.style.color = clr;
    return complete;
}

var lastPhone = "";
function checkPhoneInput(e, ctrl) {
    var pIn = e.target.value;
    if (pIn == "") {
        lastPhone = pIn;
        return true;
    }
    var clr = '#900';
    var pForm = "";
    var digits = "0123456789";
    var extras = "- x";
    var c = '?';
    var index = 0;
    var complete = false;
    for (i = 0; i < pIn.length; i++) {
        c = pIn.charAt(i);
        if (digits.indexOf(c) > -1) {
            pForm += c;
            index++;
            if ((index == 3) || (index == 7)) {
                if (index < pIn.length) {
                    pForm += '-';
                    index++;
                }
            }
        }
        else if (extras.indexOf(c) > -1) {
            if ((index == 3) || (index == 7)) {
                continue;
            }
            else if (index > 11) {
                pForm += c;
                index++;
            }
        }
    }
    if (index >= 12) {
        clr = '#000';
        complete = true;
    }
    e.target.style.color = clr;
    e.target.value = pForm;
    return complete;
}

function isProperDate(argDate) {
    var tmpDay = getDay(argDate)
    var tmpMon = getMonth(argDate)
    var tmpYear = getYear(argDate)

    return isProperDay(tmpDay, tmpMon, tmpYear) && isProperMonth(tmpMon) && isProperYear(tmpYear)
}
function isWhiteSpace(argWhiteSpace) {
    argWs = argWhiteSpace.toString()

    for (var intI = 0; intI < argWs.length; intI++)
        if (argWs.charAt(intI) != ' ' && argWs.charAt(intI) != '\t')
            return false

        return true
}
function isLeapYear(argYear) {
    return ((argYear % 4 == 0) && (argYear % 100 != 0)) || (argYear % 400 == 0)
}
function daysInMonth(argMonth, argYear) {
    switch (Number(argMonth)) {
        case 1: 	// Jan
        case 3: 	// Mar
        case 5: 	// May
        case 7: 	// Jul
        case 8: 	// Aug
        case 10: 	// Oct
        case 12: 	// Dec
            return 31;
            break;

        case 4: 	// Apr
        case 6: 	// Jun
        case 9: 	// Sep
        case 11: 	// Nov
            return 30;
            break;

        case 2: 	// Feb
            if (isLeapYear(argYear))
                return 29
            else
                return 28
            break;

        default:
            return 0;
    }
}
function getDateSeparator(argDate) {
    // Are there invalid separators?
    if ((argDate.indexOf('-') > 0) && (argDate.indexOf('/') > 0))
        return ' '

    if (argDate.indexOf('-') > 0)
        return '-'
    else
        if (argDate.indexOf('/') > 0)
            return '/'
        else
            return ' '
}
function getYear(argDate) {
    var dateSep = getDateSeparator(argDate)

    if (dateSep == ' ')
        return 0

    if (argDate.split(dateSep).length == 3)
        return argDate.split(dateSep)[2]
    else
        return 0
}
function getMonth(argDate) {
    var dateSep = getDateSeparator(argDate)

    if (dateSep == ' ')
        return 0

    if (argDate.split(dateSep).length == 3)
        return argDate.split(dateSep)[0]
    else
        return 0
}
function getDay(argDate) {
    var dateSep = getDateSeparator(argDate)

    if (dateSep == ' ')
        return 0

    if (argDate.split(dateSep).length == 3)
        return argDate.split(dateSep)[1]
    else
        return 0
}
function isProperDay(argDay, argMonth, argYear) {
    if ((isWhiteSpace(argDay)) || (argDay == 0))
        return false

    if ((argDay > 0) && (argDay < daysInMonth(argMonth, argYear) + 1))
        return true
    else
        return false
}
function isProperMonth(argMonth) {
    if ((isWhiteSpace(argMonth)) || (argMonth == 0))
        return false

    if ((argMonth > 0) && (argMonth < 13))
        return true
    else
        return false
}
function isProperYear(argYear) {
    if ((isWhiteSpace(argYear)) || (argYear.toString().length > 4) || (argYear.toString().length == 3))
        return false

    switch (argYear.toString().length) {
        case 1:
            if (argYear >= 0 && argYear < 10)
                return true
            else
                return false

        case 2:
            if (argYear >= 0 && argYear < 100)
                return true
            else
                return false

        case 4:
            if (((argYear >= 1900) || (argYear >= 2000)) && ((argYear < 3000) || (argYear < 2000)))
                return true
            else
                return false

        default:
            return false
    }
}

function validatePhoneNumber(elementValue) {
    var phoneNumberPattern = /^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/;
    return phoneNumberPattern.test(elementValue);
}

//function ValidateEmailAddress(elementValue) {
//    var varRegExp = '/^[A-Z0-9!#\\$%&\'\\*\\+\\-/=\\?\\^_`\\{\\|\\}~][A-Z0-9!#\\$%&\'\\*\\+\\-/=\\?\\^_`\\{\\|\\}~\\.]{0,62}@([A-Z0-9](?:[A-Z0-9\\-]{0,61}[A-Z0-9])?(\\.[A-Z0-9](?:[A-Z0-9\\-]{0,61}[A-Z0-9])?)+)$/';
//    if (elementValue != '') {
//        var reg = new RegExp(varRegExp, "i");
//        var match = reg.exec(elementValue);
//        if ((match) && (match.length = 3) && (match[1].length <= 255) 
//                && ((match[2].length >= 3) & (match[2].length <= 7)))
//            return true;
//    }
//    return false;
//}

