﻿var blnPageLoad = false;
var postBackElem;

function pageLoad() {
    var pageRequestManager = Sys.WebForms.PageRequestManager.getInstance();
    if (!blnPageLoad) {

        // Handle the beginRequest event so that the element that triggered the request	    
        // can be captured. 
        pageRequestManager.add_beginRequest(beginRequest);

        // Handle pageLoaded event to allow re-application of behavioural scripts to
        // DOM elements that have been recreated during an update
        pageRequestManager.add_pageLoaded(pageLoaded);

        // Handle the endRequest event in case of exceptions being raised during postbacks.
        pageRequestManager.add_endRequest(endRequest);

        resizeContentDiv();

        blnPageLoad = true;
    }
    if (pageRequestManager.get_isInAsyncPostBack())
    {
        setupMenu();
	    InitGrid();
    }    
}

var postBackTriggerElement;


function beginRequest(sender, args) {
    // Store a reference to the control that triggered the request for later use
    postBackTriggerElement = args.get_postBackElement();
}


function pageLoaded(sender, args) {
    var updatedPanels = args.get_panelsUpdated();
    var updatePanel;

    for (i = 0; i < updatedPanels.length; i++) {
        updatePanel = $get(updatedPanels[i].id);
        if (updatePanel != null) {
            // Re-attach the toggling behaviour, if required, 
            // to controls within updated panels that have been changed. 
            panelToggle(updatePanel);
        }
    }
    resizeContentDiv();
}

function endRequest(sender, args) {
    // Clear the reference to the control that triggered the request
    postBackTriggerElement = null;

    // Check if an exception has been saved by the async error handler    
    if (args.get_error() != undefined) {
        var errorMessage = args.get_error().message;
        
        // Tell the framework the error has been handled.        
        args.set_errorHandled(true);
        
        // For AJAX framework exceptions strip the exception type from the message. 
        // eg Sys.PageRequestManager.TimeoutException:                  
        errorMessage = errorMessage.replace(/^(?:\w+.)+:/, '');
                
        // Extra error handling instructions can be appended to the end of the error message
        var errorMetaInfoPattern = /(\<(.*)\>\<(.*)\>)$/;
        var errorMetaInfo = errorMetaInfoPattern.exec(errorMessage);
        var showAlert = 'False';
        if (errorMetaInfo != null && errorMetaInfo.length == 4)
        {
            var redirectUrl = errorMetaInfo[2];
            showAlert = errorMetaInfo[3];
        }
        
        errorMessage = errorMessage.replace(errorMetaInfoPattern, '');

        if (showAlert === 'True')
        {
            alert(errorMessage);
        }
        
        if (redirectUrl) 
        {
            window.location.href = redirectUrl;
        }
    }
}

var doKeepAlive = false;

function KeepAliveInit(sender) {
    doKeepAlive = true;
}


function PerfMonInit(sender) {
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    if (!prm.get_isInAsyncPostBack())
    {
        prm.add_initializeRequest(InitializeRequest);
        prm.add_beginRequest(BeginRequest);
        prm.add_pageLoading(PageLoading);
        prm.add_endRequest(EndRequest);
    }
}

function GetDateFormatted(date)
{
    var year = date.getUTCFullYear();
    var month = date.getUTCMonth() + 1;
    if (month < 10) month = "0" + month;
    var day = date.getUTCDate();
    if (day < 10) day = "0" + day;
    var hours = date.getUTCHours();
    if (hours < 10) hours = "0" + hours;
    var minutes = date.getUTCMinutes();
    if (minutes < 10) minutes = "0" + minutes;
    var seconds = date.getUTCSeconds();
    if (seconds < 10) seconds = "0" + seconds;
    var milliseconds = date.getUTCMilliseconds()
    if (milliseconds < 10) milliseconds = "00" + milliseconds;
    else if (milliseconds < 100) milliseconds = "0" + milliseconds;

    formattedValue = year + "-" + month  + "-" + day + " " + hours + ":" + minutes + ":" + seconds + "." + milliseconds;
    return formattedValue;
}

var initialTimeStamp;
var beginTimeStamp;
var timerID = 0;

function InitializeRequest(sender, args) {
    ClearFields();
    initialTimeStamp = GetDateFormatted(new Date());
    beginTimeStamp = "";
    $get('PerfInitRequest').value = initialTimeStamp;
    
    if (doKeepAlive && timerID != 0)
    {
        clearTimeout(timerID);
    }
}

function BeginRequest(sender, args) {
    beginTimeStamp = GetDateFormatted(new Date());
    $get('PerfBeginRequest').value = beginTimeStamp;
}

function PageLoading(sender, args) {
    $get('PerfPageLoading').value = GetDateFormatted(new Date());
}

function EndRequest(sender, args) {
    var endTimeStamp = GetDateFormatted(new Date());
    $get('PerfEndRequest').value = endTimeStamp;
    
    if (args.get_error() != undefined) {
        ClearFields();
        var errorMsg = args.get_error().message;
        PageMethods.LogError(initialTimeStamp, beginTimeStamp, endTimeStamp, errorMsg);
    }
    
    if (doKeepAlive)
    {
        timerID = setTimeout("CallKeepalive()", 55000);
    }
}

function CallKeepalive()
{
    PageMethods.KeepAlive();
    timerID = setTimeout("CallKeepalive()", 55000);
}

function ClearFields()
{
    $get('PerfInitRequest').value = "";
    $get('PerfBeginRequest').value = "";
    $get('PerfPageLoading').value = "";
    $get('PerfEndRequest').value = "";
}

// required by ASP.NET AJAX framework
if (typeof (Sys) !== "undefined") {
    Sys.Application.notifyScriptLoaded();
}