var __currentHostName = 'umi.ru'; var __currentPartnerId = 0; function _api_call(api_name, arguments, callbackAfter, callbackBefore, bErrorCallback, bUsePost, interval_ms, server_id) { var server = 4; if(server_id != undefined){ server = !isNaN(parseInt(server_id)) ? server_id : ''; } else if(!parseInt(server)){ server = ''; } //test var callback = callbackAfter, need_err_callback = (bErrorCallback == undefined || bErrorCallback), method = (bUsePost == undefined || !bUsePost) ? 'GET' : 'POST' , url = document.location.protocol + "//api" + server + ".umi.ru/"; if(!interval_ms){ interval_ms = 500; } function customAjaxRequest(url, method, callback, data){ if(!data){ data = {}; } if(!data.__CURRENT_HOSTNAME__){ data.__CURRENT_HOSTNAME__ = __currentHostName; } if(!data.__CURRENT_PARTNER_ID__){ data.__CURRENT_PARTNER_ID__ = __currentPartnerId; } if(!data.__FROM__){ data.__FROM__ = document.location.hostname; } if(method == "POST") { var oDate = new Date(); var timestamp = oDate.getTime(); var form = jQuery('
'); form.attr('id', 'postapi_form_' + timestamp); form.css('display', 'none'); form.attr('action', '/adminzone/proxyapi/?api=' + api_name + '&_=' + timestamp); form.attr('target', 'postapi_iframe_' + timestamp); form.attr('method', 'POST'); for(var i in data) { data[i] = data[i] + ""; data[i] = data[i].replace(/\'/g, '"'); form.append(""); } var iframe = jQuery(''); iframe.css('display', 'none'); iframe.attr('id', 'postapi_iframe_' + timestamp); iframe.attr('name', 'postapi_iframe_' + timestamp); jQuery(document.body).append(form); jQuery(document.body).append(iframe); iframe.load(function() { var data = jQuery.parseJSON(jQuery(this).contents().find('body').text()); if(callback) { callback(data); } form.remove(); iframe.remove(); }); form.submit(); } else { jQuery.ajax({ url: url, dataType: "jsonp", data: data, crossDomain: true, xhrFields: { withCredentials: true }, jsonp: "jsoncallback", success: callback }); } } function getResult(task, api, serverId){ customAjaxRequest(_api_call.getResultUrl(serverId) + '?task=' + task + '&api=' + api, 'get', function(data){ if(!data.wait){ if(data.auth === false){ _api_error_auth(api_name); } else { if(data.errors && data.errors.length && need_err_callback){ _api_error_alert(data.errors, data.forceReAuth || false); if (typeof reportError === 'function') { reportError(data.errors.join(" "), "api_" + api_name); } } if(callback){ callback(data); } } } else { setTimeout(function(tNumber, sApi, serverId) {return function() {getResult(tNumber, sApi, serverId);} } (task, api, serverId), interval_ms); } }); } function request(api_name, serverId, arguments) { customAjaxRequest(_api_call.getCallUrl(api_name, serverId), method, function(data) { if(data.result != undefined && data.errors != undefined && data.task == undefined){ if(data.auth === false){ _api_error_auth(api_name); } else { if(data.errors && data.errors.length && need_err_callback){ _api_error_alert(data.errors, data.forceReAuth || false); if (typeof reportError === 'function') { reportError(data.errors.join(" "), "api_" + api_name); } } if(callback){ callback(data); } } } else if(data.wait){ _api_error_log(['Дождитесь завершения предыдущей операции']); if(callback){ callback(data); } } else { setTimeout(function(tNumber, sApi, serverId) {return function() {getResult(tNumber, sApi, serverId);} } (data.task, api_name, serverId), interval_ms); } }, arguments); } if(callbackBefore){ callbackBefore(); } request(api_name, server, arguments); } _api_call.getBaseUrl = function(serverId) { var server = (typeof serverId !== 'undefined') ? serverId : '4'; var url = document.location.protocol + "//api" + server + ".umi.ru/"; return url; } _api_call.getCallUrl = function(apiName, serverId) { return _api_call.getBaseUrl(serverId) + apiName; } _api_call.getResultUrl = function(serverId) { return _api_call.getBaseUrl(serverId) + 'result.php'; } function _api_call_server(server, api_name, arguments, callbackAfter, callbackBefore, bErrorCallback, bUsePost, interval_ms, server_id) { _api_call(api_name, arguments, callbackAfter, callbackBefore, bErrorCallback, bUsePost, interval_ms, server); } function _api_error_alert(aMessageRows, forceReAuth){ if(typeof dialogs != "undefined"){ var DialogInst = dialogs.get(); if(DialogInst){ var callbackReAuth = forceReAuth ? function() { window.location.reload(true); } : undefined; DialogInst.Alert({"text":aMessageRows.join("
"), "width":'350'}, callbackReAuth); } } else { alert(aMessageRows.join("\n")); } } function _api_error_auth(api){ var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'), bExit = false; for(var i = 0; i < hashes.length; i++) { hash = hashes[i].split('='); if(hash[0] == 'exit' && hash[1] == 'true'){ return; } } if(jQuery('#loginFormWrapper').length){ if(typeof window['showLoginWindow'] == 'function') { showLoginWindow(); } _api_error_alert(["Превышен интервал бездействия.", "Необходимо заново авторизоваться."]); } else { if(window.top.document.location.href.indexOf('?') > 0){ if(window.top.document.location.href.indexOf('session=fail') == -1){ window.top.document.location.href = window.top.document.location.href + '&session=fail'; } } else { window.top.document.location.href = window.top.document.location.href + '?session=fail'; } } } function _api_error_log(errors){ if(errors && errors.length){ _api_error_alert(errors); } }