﻿var AJAXError = $('#AJAXError');

$(document).ready(function() {
     AJAXError.hide();     
});

function DoServerSideErrorHandlingTest()
{
    CallBYOService2("ThrowFaultException", 120, OnFakeErrorSuccess, OnFakeErrorError);
}

function OnFakeErrorSuccess(result, textStatus) 
{
    //showErrorMsg('What?  No Error????  MY CALLER WAS SUPPOSE TO PRODUCE AN ERROR.  YOU SHOULD NOT BE SEEING ME.');
    $.unblockUI();
}

function OnFakeErrorError(XMLHttpRequest, textStatus) 
{
    $.unblockUI();
    //alert("OnFakeErrorError Handler: \n textStatus:  " + textStatus + "\n"  + JSON.stringify(XMLHttpRequest));
    OnServerErrorHandler(XMLHttpRequest, textStatus);
}

function DoClientSideErrorHandlingTest()
{
    try
    {
        doInit();
    }
    catch(err)
    {
       OnClientErrorHandler(err, "Test for Client Side Error Handling", showClientErrorObject);
    }
}

/********SERVER SIDE ERROR HANDLER*********/
function OnServerErrorHandler(XMLHttpRequest, textStatus)
{
    var defaultErrorMessage = "Unknown error occurred in callback.";
    
    if (typeof XMLHttpRequest == "string") 
    {
        showErrorMsg(XMLHttpRequest);
        return;
    }
    else if(typeof (XMLHttpRequest) == "object")
    {
        var errorObject = XMLHttpRequest;
        
        if(errorObject.ErrorId)
        {
            showServerErrorObject(errorObject);
        }
        else
        {
            showErrorMsg(defaultErrorMessage);
        }
    }
    else if (typeof (XMLHttpRequest.responseText) == "string" && XMLHttpRequest.responseText != "")
    {
        var err = JSON.parse(XMLHttpRequest.responseText);

        switch (err.ExceptionType) 
        {
            case 'System.Exception':
                showErrorMsg(err.Message);
                return;
            default:
                showErrorMsg(XMLHttpRequest.responseText);
                return;
        }
    } 
    else 
    {
        showErrorMsg(defaultErrorMessage);
    }
}


/******CLIENT SIDE ERROR HANDLER*************/
function OnClientErrorHandler(error, customMessage, onSuccessCallback)
{
    try
    {
        var globalErrorObject = new GlobalClientErrorObject(error, customMessage);
        globalErrorObject.Save(onSuccessCallback);
    }
    catch(error)
    {
        alert("Error happened in Global Error Object: \n" + "    - " +  error.message);
    }
}
/********DISPLAY SERVER/CLIENT ERROR TO USER*******/
function showClientErrorObject(errorObject)
{
    pingAjaxError();
    //AJAXError.ParseClientErrorObject({ errorObject: errorObject });
    AJAXError.ShowBYOFriendlyError({ errorObject: errorObject });
}

function showServerErrorObject(errorObject)
{
    pingAjaxError();
    //AJAXError.ParseServerErrorObject({ errorObject: errorObject });
    AJAXError.ShowBYOFriendlyError({ errorObject: errorObject });
}

function showErrorMsg(Msg)
{
    pingAjaxError();
    //AJAXError.ParseErrorMessage({ Message: Msg });
    AJAXError.ShowBYOFriendlyError({ Message: Msg });
}

function pingAjaxError()
{
    //If the error element was added after $.Ready we need to regrab it.
    if (!AJAXError || AJAXError.length === 0) 
    {
        AJAXError = $("#AJAXError");
    }
}

//Friendly Message S-5377
$.fn.ShowBYOFriendlyError = function (options) {
    $.blockUI({ message: '<img src="https://cache.bmwusa.com/image_3ca0ba78-abee-4b62-9717-2fc0b6910b05.arox" style="cursor:pointer" onclick="OnClearErrorButtonClick();" />' });
    $(".blockMsg").width("632px");
    var left = ($(window).width() - $(".blockMsg").outerWidth()) / 2;
    $(".blockMsg").css("left", left);
}

$.fn.ParseClientErrorObject = function(options)
{
    //if (this.length == 0) { return;}
    
    var settings = 
    {
        errorObject : null
    };
    
    if (options) 
    {
        $.extend(settings, options);
    }
    
    //clear out contents; load html structure and templates, then parsetemplates with data
    this.load(TEMPLATE_ERRORHANDLER, function ()
    {
        var output = $('#ByoClientErrorHandlerTemplate').parseTemplate(settings.errorObject);
        $.blockUI({ message: output });
        $("#clearErrorButton").bind("click", OnClearErrorButtonClick );
    });
}

$.fn.ParseServerErrorObject = function(options)
{
    if (this.length == 0) { return;}
    
    var settings = 
    {
        errorObject : null
    };
    
    if (options) 
    {
        $.extend(settings, options);
    }
    
    //clear out contents; load html structure and templates, then parsetemplates with data
    this.load(TEMPLATE_ERRORHANDLER, function ()
    {
        var output = $('#ByoErrorHandlerDefaultTemplate').parseTemplate(settings.errorObject);
        $.blockUI({ message: output });
        $("#clearErrorButton").bind("click", OnClearErrorButtonClick );
    });
}

$.fn.ParseErrorMessage = function(options) {

    if (this.length === 0) { return };

    // Default settings
    var settings = 
    {
        Message: "[Status Message]"
    };
    
    if (options) 
    {
        $.extend(settings, options);
    }

    //clear out contents; load html structure and templates, then parsetemplates with data
    this.load(TEMPLATE_ERRORHANDLER, function ()
    {
        var output = $('#ByoErrorHandlerMessageTemplate').parseTemplate(settings);
         
        $.blockUI({ message: output });
        
        $("#clearErrorButton").bind("click", OnClearErrorButtonClick );
    });
};

var OnClearErrorButtonClick = function()
{
    $.unblockUI();
}

