function isdefined(variable)
{
    return (typeof (window[variable]) == "undefined") ? false : true;
}

var timeoutDelay = 100;
var nb = "&nbsp;"; // non-breaking space

function buildPager(grid, pagerSpan, First, Last)
{
    var pager = "";
    var mid = Math.floor(pagerSpan / 2);
    var startPage = grid.PageCount <= pagerSpan ? 0 : Math.max(0, grid.CurrentPageIndex - mid);
    // adjust range for last few pages
    if (grid.PageCount > pagerSpan)
        startPage = grid.CurrentPageIndex < (grid.PageCount - mid) ? startPage : grid.PageCount - pagerSpan;

    var endPage = grid.PageCount <= pagerSpan ? grid.PageCount : Math.min(startPage + pagerSpan, grid.PageCount);

    if (grid.PageCount > pagerSpan && grid.CurrentPageIndex > mid)
    {
        pager += "<a href=\"#\" onclick=\"" + grid.Id + ".Page(0);return false;\">&laquo; " + First + "</a>" + nb + "..." + nb;
        pager += "<a href=\"#\" onclick=\"" + grid.Id + ".PreviousPage();return false;\">&lt;</a>" + nb;
    }

    for (var page = startPage; page < endPage; page++)
    {
        var showPage = page + 1;
        if (page == grid.CurrentPageIndex)
            pager += "<b>" + showPage + "</b>" + nb;
        else 
            pager += "<a href=\"#\" onclick=\"" + grid.Id + ".Page(" + page + ");return false;\">" + showPage + "</a>" + nb;
    }

    if (grid.PageCount > pagerSpan && grid.CurrentPageIndex < grid.PageCount - mid)
    {
        pager += "<a href=\"#\" onclick=\"" + grid.Id + ".NextPage();return false;\">></a>" + nb + "..." + nb;
        pager += "<a href=\"#\" onclick=\"" + grid.Id + ".Page(" + (grid.PageCount - 1) + ");return false;\">" + Last + " &raquo;</a>" + nb;
    }

    return pager;
}

function buildPageXofY(grid, Page, of, items)
{
    var pageXofY = "";

    // Note: You can trap an empty Grid here to change the default "Page 1 of 0 (0 items)" text
    if (grid.PageCount > 0)
        pageXofY = Page + nb + "<b>" + (grid.CurrentPageIndex + 1) + "</b>" + nb + of + nb + "<b>" + (grid.PageCount) + "</b>, " + grid.RecordCount + nb + items;

    return pageXofY;
}

function GetFilterString(Letter, Field)
{
    return Field + " LIKE '" + Letter + "%' OR " + Field + " LIKE '" + Letter.toLowerCase() + "'";
}

function GetSearchString(FilterEdit, DescriptionEdit)
{
    var FilterText = '';
    var FilterValue = GetInputValue(FilterEdit);
    var DescriptionValue = GetInputValue(DescriptionEdit);
    if (FilterValue != DescriptionValue)
        FilterText = FilterValue;
        
    return FilterText;
}

function UnselectAllGridItems(Grid, UnselectAll)
{
    if (UnselectAll)
    {
        var SelectedItems = Grid.getSelectedItems();
        if (SelectedItems.length != 0)
        {
            for (i = 0; i < SelectedItems.length; i++)
                Grid.unSelect(SelectedItems[i]);
        }
    }
}