//логгирование ошибок
(function() {
    var CURRENT_COUNT = 0;
    var CURRENT_AJAX_COUNT = 0;
    var CURRENT_AJAXE_COUNT = 0;
    var ERROR_LIMIT = 25;
    var REQUEST_URL = 'http://img-css.friends.yandex.net/favicon.ico';
    var req = new Image();

    var send_request = function(query) {
        query.random = Math.random();
        query = '?' + y5.Url('').replaceParams(query).query();
        req.src = REQUEST_URL + query;
    }

    window.onerror = function (msg, url, line_num, info) {
        if (CURRENT_COUNT == ERROR_LIMIT) {
            window.onerror = function() {} 
        }

        info = info || {non_vital: false}

        var is_css_error = y5.is_ie && line_num == 1;
        var is_webchat = url.indexOf('webchat') != -1;
        var non_vital = is_css_error || is_webchat || info.non_vital;
        if (non_vital) {
            return;
        }

        var info = {
            navigator: navigator.userAgent,
            url: location.href,
            ref: document.referrer,
            error_type: 'YARU-JS-ERROR',
            message: msg,
            error_url: url,
            line: line_num,
            host_source_id: null,
            host_source_login: null,
            current_user_id: null,
            current_user_login:null
        };
        if (window.g_globals) {
            info.host_source_id = g_globals.current_location.source.id;
            info.host_source_login = g_globals.current_location.source.login 
        }
        if (window.g_source) {
            info.current_user_id = g_source.id;
            info.current_user_login = g_source.login;
        }

        CURRENT_COUNT++;
        if (CURRENT_COUNT > ERROR_LIMIT) {
            info.too_much_errors = true;
        }

        send_request(info);
    }


    var onajaxerror = function(evt) {
        var ajax = evt[0];
        var response = evt[1];
        if (CURRENT_AJAX_COUNT == ERROR_LIMIT) {
            onajaxerror = function() {} 
        }

        var response_text = (response.responseText || 'EMPTY_RESPONSE').substring(0, 200);
        var request_url = (ajax && ajax.url) ? ajax.url.path() : 'EMPTY_URL';

        //if (request_url.indexOf('webchat') != -1) {
        if (request_url.indexOf('webchat') != -1 || request_url.indexOf('favicon.ico') != -1) {
            return;
        } 

        var info = {
            navigator: navigator.userAgent,
            url: location.href,
            ref: document.referrer,
            error_type: 'YARU-JS-AJAX-ERROR',
            host_source_id: null,
            host_source_login: null,
            current_user_id: null,
            current_user_login:null,
            request_url: request_url,
            response_text: response_text
       };
        if (window.g_globals) {
            info.host_source_id = g_globals.current_location.source.id;
            info.host_source_login = g_globals.current_location.source.login 
        }
        if (window.g_source) {
            info.current_user_id = g_source.id;
            info.current_user_login = g_source.login;
        }

        CURRENT_AJAX_COUNT++;
        if (CURRENT_AJAX_COUNT > ERROR_LIMIT) {
            info.too_much_errors = true;
        }

        send_request(info);
        
        /*
        console.dir(info);
        console.log(arguments);
        */
    }


    var on_ajax_exception = function(evt) {
        var ajax = evt[0];
        var err = evt[1];

        if (CURRENT_AJAXE_COUNT == ERROR_LIMIT) {
            on_ajax_exception = function() {} 
        }

        var request_url = (ajax && ajax.url) ? ajax.url.path() : 'EMPTY_URL';
        if (request_url.indexOf('webchat') != -1 || request_url.indexOf('favicon.ico') != -1) {
            return;
        } 

        var info = {
            navigator: navigator.userAgent,
            url: location.href,
            ref: document.referrer,
            error_type: 'YARU-JS-AJAX-EXCEPTION',
            host_source_id: null,
            host_source_login: null,
            current_user_id: null,
            current_user_login:null,
            error_message: err.message,
            error_name: err.name,
            request_url: request_url
       };
        if (window.g_globals) {
            info.host_source_id = g_globals.current_location.source.id;
            info.host_source_login = g_globals.current_location.source.login 
        }
        if (window.g_source) {
            info.current_user_id = g_source.id;
            info.current_user_login = g_source.login;
        }

        CURRENT_AJAXE_COUNT++;
        if (CURRENT_AJAXE_COUNT > ERROR_LIMIT) {
            info.too_much_errors = true;
        }

        send_request(info);
    }

    y5.Events.observe('request:error', onajaxerror, y5, true)
    y5.Events.observe('request:exception', on_ajax_exception, y5, true);
})()
