﻿
var campus_global_settings = {};


function getHostName(url) {
    if (url == null || url == '') return null;
    var match = url.match(/:\/\/(www[0-9]?\.)?(.[^/:]+)/i);
    if (match != null && match.length > 2 &&
        typeof match[2] === 'string' && match[2].length > 0) {
        return match[2];
    }
    else {
        return null;
    }
}

/**
* Atrapa y registra todas las excepciones no controladas
*/
window.onerror = function (errorMsg, url, lineNumber, column, errorObj) {

    //comprobar que la url sea del dominio del campus o cdn
    var hostname = getHostName(url);
    if (hostname == getHostName(window.location.href.toString()) || hostname == getHostName(campus_global_settings.PC.cdn_url)) {

        //Safari solo se trae los 3 primeros parámetros, no hay nada que hacer

        var formContents = {
            errorMsg: errorMsg,
            url: url,
            lineNumber: lineNumber,
            column: column,
            errorObj: errorObj, //Chrome y firefox tienen problemas para convertirlo en string, IE lo convierte bien
            isUnmanaged: true
        };

        //Ni Chrome ni firefox  pueden convertir el objeto errorObj en string, así que lo separamos en mensaje y stack
        try { formContents.objStack = errorObj.stack; } catch (e) { }
        try { formContents.objMessage = errorObj.message; } catch (e) { }

        //Navegadores viejos no traen el objeto errorObj, Pero se puede obtener el caller 
        try { formContents.caller = arguments.callee.caller.toString(); } catch (e) { }

        try {
            BrowserDetect.init();
            formContents.browser = 'browser:' + BrowserDetect.browser + ', version: ' + BrowserDetect.version + ', OS: ' + BrowserDetect.OS;
        } catch (e) { }

        //urls
        try { formContents.url1 = window.location.href.toString(); } catch (e) { }
        try { formContents.url2 = document.referrer.toString(); } catch (e) { }

        campus_global_settings.PostServer(formContents);
    }
}


/**
* Registra el error de las excepciones controladas
*/
campus_global_settings.LogClientError = function (errorObj) {

    var formContents = {
        errorObj: errorObj,
        isUnmanaged: false
    };

    //Ni Chrome ni firefox  pueden convertir el objeto errorObj en string, así que lo separamos en mensaje y stack
    try { formContents.objStack = errorObj.stack; } catch (e) { }
    try { formContents.objMessage = errorObj.message; } catch (e) { }

    campus_global_settings.PostServer(formContents);
}



campus_global_settings.PostServer = function (formContents) {

    try {
        $.ajax({
            type: "POST",
            url: campus_global_settings.PC.appRoot + "/_Modules/error_tracking/CampusErrorTrackingService.asmx/ClientSideErrorTracking",
            data: JSON.stringify({ param: JSON.stringify(formContents) }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) { },
            failure: function () { },
            error: function () { },
            async: false,
            complete: function () { }
        });
    } catch (e) { }
}