﻿function DoPopupClose(sender, args)
{
    var oInput = sender.get_dateInput();

    oInput.focus();
}

function DoPopupOpen(sender, args)
{
    var oCalendar = sender.get_calendar();

    // oCalendar.focus();
}

function GetRadWindow()
{
    var oWindow = null;

    if (window.radWindow)
    {
        oWindow = window.radWindow;
    }
    else if (window.frameElement.radWindow)
    {
        oWindow = window.frameElement.radWindow;
    }

    return oWindow;
}

function OpenWindow(windowName)
{
    // get the window manager
    var oManager = GetRadWindowManager();

    // get reference to the window
    var oWnd = oManager.GetWindowByName(windowName);
    if (!oWnd)
    {
        return;
    }

    // finaly show the window
    oWnd.Show();

    // use instead of a reload to force a refresh that does not prompt security dialogs
    oWnd.SetUrl(oWnd.GetUrl());
}

function CloseRadWindow()
{
    var currentWindow = GetRadWindow();

    currentWindow.Close();
}

//supported masks are:
// - MM/dd/yyyy, dd/MM/yyyy, yyyy/dd/MM and so on.
// - MM/dd/yy, dd/MM/yy, yy/dd/MM and so on.
// - supported separators - '/' or/and '.'
// - supported date range: 01/01/1000 to 12/31/2999

function IsDigit(symbol)
{
    return (symbol > 47 && symbol < 58);
}

function TryParseInt(valueToBeValidate, defaultValue)
{
    var retValue = defaultValue;
    if (!isNaN(valueToBeValidate))
    {
        retValue = valueToBeValidate;
    }
    return retValue;
}

function IsValidDataCharacter(sender, args, mask, maskType)
{
    var charCount = TryParseInt(sender.get_caretPosition(), -1);

    if (charCount == -1) charCount = sender.get_caretPosition()[0];

    //var charCount = sender.get_textBoxValue().length;
    var keycode = args.get_keyCode();
    var prevkey = sender.get_textBoxValue().charAt(charCount - 1);

    if (keycode == 8) return true; //firefox fix
    if (mask.length < 8) return false;
    mask = mask.replace("MM", "MO");
    mask = mask.replace("dd", "DA");

    if (mask.length == 10)
        mask = mask.replace("yyyy", "YERS");
    if (mask.length == 8)
        mask = mask.replace("yy", "RS");

    var selection = mask.charAt(charCount);
    switch (selection)
    {
        case '.': if (maskType == "1" && keycode == 32) return true; if (maskType == "1") return false; sender.set_textBoxValue(sender.get_textBoxValue() + "."); return (IsValidDataCharacter(sender, args, mask, maskType) && maskType != "1");
        case '/': if (maskType == "1" && keycode == 47) return true; if (maskType == "1") return false; sender.set_textBoxValue(sender.get_textBoxValue() + "/"); return (IsValidDataCharacter(sender, args, mask, maskType) && maskType != "1");
        case 'E':
        case 'R':
        case 'S': return IsDigit(keycode);
        case 'Y': return (keycode == 49 || keycode == 50);
        case 'D': return (keycode > 47 && keycode < 52);
        case 'A': return (IsDigit(keycode) && ((prevkey == '3' && keycode < 50) || (prevkey == '1' || prevkey == '2') || (prevkey == '0' && keycode != 48)));
        case 'M': return (keycode == 48 || keycode == 49);
        case 'O': return (IsDigit(keycode) && ((prevkey == '1' && keycode < 51) || (prevkey == '0' && keycode != 48)));
    }
}

function DatePickerKeyPress(sender, args)
{
    if (!IsValidDataCharacter(sender, args, "yyyy/MM/dd", "2"))
        args.set_cancel(true); //throw error
}

function OnError(sender, args)
{
    alert("Date is invalid / greater than expected range.");
    sender.focus();
}

