﻿
function ToggleNav(topMenuContainer, index, subMenuContainer)
{
    var topNavLIs   = topMenuContainer.getElementsByTagName('li');
    for (var i=0; i<topNavLIs.length; i++)
    {
        topNavLIs[i].className = '';
    }
    topNavLIs[index].className = 'selectedListItem';
    
    var subNavDivs = subMenuContainer.getElementsByTagName('div');
    for (var i=0; i<subNavDivs.length; i++)
    {
        subNavDivs[i].style.display = 'none';
    }
    subNavDivs[index].style.display = 'block';    
}

function ConfirmDelete(message)
{
    if(!confirm(message))
        return false;
}

function SelectAll(isSelectAll, container)
{   
    var elems = document.getElementsByTagName('input');
    for (var i = 0; i < elems.length; i++) 
    { 
        if (elems[i].id.indexOf(container) > -1 && elems[i].type == 'checkbox')
        {
            elems[i].checked = isSelectAll;
        }
    }
}

function ResetTextBoxes(container)
{
    var div = document.getElementById(container);
    var elems = div.getElementsByTagName('input');
    for (var i = 0; i < elems.length; i++) 
    { 
        if (elems[i].type == 'text')
        {
            elems[i].value = "";
        }
    }
    elems = div.getElementsByTagName('select');
    for (var i = 0; i < elems.length; i++) 
    { 
        elems[i].selectedIndex = 0;
    }
}

function HideDivPopup(divID) // Used by Admin/UserAddEdit.aspx
{
    var div = document.getElementById(document.getElementById(divID).value);
    div.style.display = "none";
}

function ToggleDivDisplay(divToDisplay, divsToHide)
{
    var arrDivsToHide   = divsToHide.split(',');
    for (var i=0; i<arrDivsToHide.length; i++)
    {
        document.getElementById(arrDivsToHide[i]).style.display = 'none';
    }
    divToDisplay.style.display = 'block';
}

function ChangeCSSClass(obj, css)
{
    obj.className = css;
}

function ActiveTabChanged(sender, e)
{
    var tabcontainer    = sender._element;
    var tabselected     = sender.get_activeTab()._element;
    __doPostBack(tabcontainer.id, sender.get_activeTab().get_headerText());
}

/* Function to use instead of DefaultButton for asp:Panels
   The built-in js function doesn't work in Firefox */
var __crossBrowserDefaultFired = false;
function CrossBrowser_FireDefaultButton(e, target)
{
    var key = window.event ? e.keyCode : e.which;
    if (!__crossBrowserDefaultFired && key == 13 && !(e.srcElement && (e.srcElement.tagName.toLowerCase() == "textarea")))
    {
        var defaultButton = document.getElementById(target);
        if (defaultButton && typeof(defaultButton.click) != "undefined")
        {
            __crossBrowserDefaultFired = true;
            defaultButton.click();
            e.cancelBubble = true;
            if (e.stopPropagation) e.stopPropagation();
            return false;
        }
    }
    return true;
}

function AJAXTimeOutHandler(optionalText)
{
    var probPersists = '\r\n\r\nIf the problem persists please contact customer support.';
    if (optionalText && optionalText.length > 0)
    {
        alert(optionalText + probPersists);
    }
    else
    {
        alert('The request has taken longer than expected.  Please try again.' + probPersists);
    }
}

function AJAXErrorHandler()
{
    alert('An error has occurred.  Please try again.  If the problem persists please contact customer support.');
}


function ShowCountdown(displayElement, seconds)
{
    $get(displayElement).innerHTML = seconds;
    if (seconds > 0)
    {
        seconds -= 1;
        setTimeout('ShowCountdown("' + displayElement + '", ' + seconds + ')', 1000);
    }
}

function HighlightSuccessfulSave(control)
{
    scroll(0, 0);
    control.style.backgroundColor = '#008000';
    control.style.color = '#FFFFFF';
    setTimeout(function(){
        AjaxControlToolkit.Animation.ResizeAnimation.play(control, 1, 25, null, 0, 'px');
        }, 4000);
}

// Grid Navigation with Arrow Keys Begin
var _controlToFocusOnExit; // used to set the focus when closing the search grid with the escape key
var _gridHandleKeys;

function HandleKeysPageLoading(sender, args)
{
    Sys.Application.add_load(HandleKeys);
}

function HandleKeys(sender, args)
{
    if (_gridHandleKeys != null)
    {
        InitializeKeyVariables();
        allRows = _gridHandleKeys.getElementsByTagName('tr')
        var itemRows = new Array();
        for (var i=1; i<allRows.length; i++)
        {
            if (allRows[i].className != pagerRowClass) { itemRows.push(allRows[i]); }
        }
        itemRowCount = itemRows.length;
        
        $clearHandlers(_gridHandleKeys);
        $clearHandlers(document);
        
        $addHandler(_gridHandleKeys, 'mouseover', MouseHandler);
        $addHandler(document, 'keydown', KeyHandler);
    }
    _gridHandleKeys = null;
    Sys.Application.remove_load(HandleKeys);
}

function InitializeKeyVariables()
{
    /// <summary>Initialize variables</summary>
    
    curItemRowIndex     = 1;
    prevItemRowIndex    = curItemRowIndex + 1;
    prevClassName       = '';
    isFirstTime         = true;
    allRows             = null;
    itemRowCount        = null;
    isMousing           = false;
}
        
function IgnoreKeys(grid)
{
    /// <summary>Disable handling of key and mouse events</summary>
    /// <param name="grid">Grid to navigate</param>
    
    if (grid) { $removeHandler(grid, 'mouseover', MouseHandler); }
    if (document) { $removeHandler(document, 'keydown', KeyHandler); }
}
        
function MouseHandler(e)
{
    /// <summary>Event handler for mouseover event</summary>
    
    if (!isMousing && allRows != null && allRows.length > curItemRowIndex)
    {
        if (prevClassName.length > 0)
        {
            allRows[curItemRowIndex].className = prevClassName;
        }
        curItemRowIndex = 1;
        prevItemRowIndex = curItemRowIndex + 1;
        prevClassName = '';
        isMousing = true;
        isFirstTime = true;
    }
}

var _isArrowKey = false;
function KeyHandler(e)
{
    /// <summary>Event handler for keydown event</summary>
    
    isMousing = false;
    var hasChanged = false;
    switch(e.keyCode)
    {
        case 38:
            // up
            _isArrowKey = true;
            if (curItemRowIndex > 1)
            {
                curItemRowIndex--;
                prevItemRowIndex = curItemRowIndex + 1;
                hasChanged = true;
            }
            if (e.preventDefault) { e.preventDefault(); }
            e.returnValue = false;
            break;
        case 40:
            // down
            _isArrowKey = true;
            if (curItemRowIndex < itemRowCount && !isFirstTime)
            {
                curItemRowIndex++;
                prevItemRowIndex = curItemRowIndex - 1;
                hasChanged = true;
            }
            if (e.preventDefault) { e.preventDefault(); }
            e.returnValue = false;
            break;
        case 13:
            // enter
            if(_isArrowKey)
            {
                if (allRows[curItemRowIndex].fireEvent) { allRows[curItemRowIndex].fireEvent('onclick'); }
                else if (allRows[curItemRowIndex].dispatchEvent)
                {
                    var clickEvent = window.document.createEvent('MouseEvent');
                    clickEvent.initEvent('click', false, true);
                    allRows[curItemRowIndex].dispatchEvent(clickEvent);
                }
            }
            else return;
            break;
        case 27:
            // ESC Key
            $get(allRows[0].parentNode.parentNode.id).style.display = "none";
            $clearHandlers(document);
            _controlToFocusOnExit.focus();
            _controlToFocusOnExit.select();
            break;
        default: 
            _isArrowKey = false;
            return; // Get out if the key is not the UP, DOWN, OR ENTER keys
    }
    if ((hasChanged || isFirstTime) && allRows != null && allRows.length > curItemRowIndex)
    {
        if (hasChanged) { allRows[prevItemRowIndex].className = prevClassName; }
        prevClassName = allRows[curItemRowIndex].className;
        allRows[curItemRowIndex].className = currentRowClass;
        isFirstTime = false;
    }
    return false;
}

// Grid Navigation with Arrow Keys End

function ToggleDrugWarnings(divToShow, divsToHide, linkToDisable, linksToEnable)
{
    divToShow.style.display = 'block';
    linkToDisable.disabled = true;
    
    for (var i=0; i<divsToHide.length; i++)
    {
        divsToHide[i].style.display = 'none';
    }
    
    for (var i=0; i<linksToEnable.length; i++)
    {
        linksToEnable[i].disabled = false;
    }
}

function FormatCurrency(num, showCents) 
{
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num))
        num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num * 100 + 0.50000000001);
    if(showCents)
    {
        cents = num % 100;
        if(cents < 10) { cents = "0" + cents; }
    }
    else cents = 0;
    num = Math.floor(num / 100).toString();
    for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++)
        num = num.substring(0, num.length - (4 * i + 3)) +',' + num.substring(num.length-(4*i+3));
    if(showCents)
    {
        return (((sign)?'':'-') + '$' + num + '.' + cents);
    }
    else return (((sign)?'':'-') + '$' + num);
}

function EnsureChanges()
{
    var navigateAwayMessage = "You have made some changes which will be lost if you leave this page. Do you want to leave this page?";
    var elems = document.getElementsByTagName('input');
    var selects = document.getElementsByTagName('select')
    // Ignore what may look like a comment below.  This is just a literal regular expression and VS 2008 IDE is just parsing it as comments when it is really part of the expression
    var regEx = /\$|-|\(|\)|\}|\{|_|\s|\//g;
    if(!saving)            
    {
        for (var i = 0; i < elems.length; i++)
        {
            if(elems[i].type == "text")
            {
                if(elems[i].value.replace(regEx, '') != elems[i].defaultValue.replace(regEx, ''))
                {
                    //alert(elems[i].value);
                    //alert(elems[i].defaultValue);
                    return navigateAwayMessage;
                }
            }
            else if(elems[i].type == "checkbox" || elems[i].type == "radio")
            {
                if(elems[i].checked != elems[i].defaultChecked)
                {
                    //alert(elems[i].checked);
                    //alert(elems[i].defaultChecked);
                    return navigateAwayMessage;
                }
            }
        }
        for (var i = 0; i < selects.length; i++)
        {
            var options = selects[i].options
            for(var j = 0; j < options.length; j++)
            {
                if(options[j].defaultSelected) // Only compare when the default selected item is found
                {
                    if(options[j].selected != options[j].defaultSelected)
                    {
                        //alert(selects[i].selectedIndex);
                        //alert(options[j].selected);
                        //alert(options[j].defaultSelected);
                        return navigateAwayMessage;
                    }
                }
            }
        }
    }
}

// === Begin ASPxScheduler Appointment Template Functions ===

function UpdatePatientShowedStatus(element) {
    cbPatientShowed.SendCallback(element.id);
}

function ChangeBackgroundColor(s, e) {
    var srcArray = $get(e.parameter).src.split('/');
    var src = srcArray[srcArray.length - 1];
    var newSrc = 'https://';

    if (src == 'greencheck.png') {
        src = 'redx.png';
        $get(e.parameter).alt = "Indicates patient has NOT shown. Click to change.";
    }
    else {
        src = 'greencheck.png';
        $get(e.parameter).alt = "Indicates patient has shown. Click to change.";
    }

    for (var i = 2; i < srcArray.length - 1; i++) {
        newSrc = newSrc + srcArray[i] + '/';
    }

    $get(e.parameter).src = newSrc + src;
}

// === End ASPxScheduler Appointment Template Functions ===

// === Begin ASPxScheduler Appointment Form Functions ===

function ValidateDateTime(s, e) {

    // Build a start and end date for resetting the end date if the start date is greater, then reset it if necessary
    var startJustDate = new Date(startDate.GetDate().getFullYear(), startDate.GetDate().getMonth(), startDate.GetDate().getDay(), 0, 0, 1);
    var endJustDate = new Date(endDate.GetDate().getFullYear(), endDate.GetDate().getMonth(), endDate.GetDate().getDay(), 0, 0, 1);
    if (startJustDate > endJustDate) {
        endDate.SetDate(startDate.GetDate());
    }
    
    // Date time components
    var sDate = startDate.GetDate();
    var eDate = endDate.GetDate();
    var sHour = startHour.GetValue();
    var eHour = endHour.GetValue();
    var sMin = startMin.GetValue();
    var eMin = endMin.GetValue();
    
    // Convert hours to 24 hour format
    if (startAMPM.GetValue() == "PM" && sHour < 12)
        sHour = sHour + 12;
    else if (startAMPM.GetValue() == "AM" && sHour == 12)
        sHour = 0;
    if (endAMPM.GetValue() == "PM" && eHour < 12)
        eHour = eHour + 12;
    else if (endAMPM.GetValue() == "AM" && eHour == 12)
        eHour = 0;

    // Build the start and end date time
    var startDateTime = new Date(sDate.getFullYear(), sDate.getMonth(), sDate.getDay(), sHour, sMin, 0);
    var endDateTime = new Date(eDate.getFullYear(), eDate.getMonth(), eDate.getDay(), eHour, eMin, 0);

    // Check for valid date time
    if (startDateTime >= endDateTime) {
        e.isValid = false;
        endAMPM.SetIsValid(false);
    }
    else {
        e.isValid = true;
        endAMPM.SetIsValid(true);
    }
}

// === End ASPxScheduler Appointment Form Functions ===