(function(window) { var DEFAULT_URL = { protocol : window.location.protocol, host: 'docdoc.ru' }; var HOSTS_PATTERNS = [ /docdoc.ru/, /front.*.docdoc.pro/, /topdoc.ru/, /td.*.docdoc.pro/ ]; var WIDGETS_PATH = '/widget/js'; var partners = [ '5895' ]; var widgetUrl = getWidgetsUrl(); window.DOCDOC_HOST = getServerHost(widgetUrl.host); var widgetCacheParam = widgetUrl.search; var DEFAULT_HOST = window.DOCDOC_HOST; var inProgress = false; var widgetsParams = []; function getUrl(src) { if (!src || src == '') { return {}; } var parser = document.createElement('a'); parser.href = src; return { protocol : parser.protocol, host : parser.host, path : parser.pathname, search: parser.search }; } function getHostPattern(url) { for(var i = 0;i < HOSTS_PATTERNS.length; i++) { if (HOSTS_PATTERNS[i].test(url.host)) { return HOSTS_PATTERNS[i]; } } } function getValidUrlByScript(script) { var url = getUrl(script.getAttribute('src')); if (url.path == WIDGETS_PATH || url.path == 'widget/js') { var pattern = getHostPattern(url); return pattern ? url : null; } } /* Определяем node script в DOM модели из которого запущен скрипт. */ /* Это или currentScript, а если браузер его не поддерживает, то */ /* берем скрипт в верстке, который нам подходит по паттернам */ function getWidgetsUrl() { if (document.currentScript && document.currentScript.getAttribute) { return getValidUrlByScript(document.currentScript) || DEFAULT_URL; } var scripts = document.getElementsByTagName('script'); for (var i = 0; i < scripts.length; i++) { var url = getValidUrlByScript(scripts[i]); if (url) return url; } return DEFAULT_URL; } function loadScript(version, callback) { var script = document.createElement('script'); script.src = [ window.location.protocol === 'https:' ? 'https:' : 'http:', '//', window.DOCDOC_HOST || DEFAULT_HOST, '/widget/widgets_v', version, '.js', widgetCacheParam ].join(''); script.onload = callback; document.body.appendChild(script); } function getVersion(params) { if (partners.indexOf(params.pid) < 0) { return '2'; } if (WIDGETS[params.widget] == null) { return '2'; } return '3'; } window.DdWidget = function(params) { var version = getVersion(params); widgetsParams.push(params); if (inProgress == null) return applyWidgets(version); if (inProgress) return; inProgress = true; loadScript(version, function() { applyWidgets(version); inProgress = null; }); }; function applyWidgets(version) { if (version == '2') { return widgetsParams.forEach(function(p) { window.DdWidget(p); }); } widgetsParams.forEach(function(p) { WIDGETS[p.widget](p); }); } function getServerHost(defaultHost) { var scripts = document.getElementsByTagName('script'); for (var i = 0; i < scripts.length; i++) { var url = document.createElement('a'); url.href = scripts[i].src; if (url.pathname == '/widget/js' && checkHost(url.host)) { return url.host; } } return defaultHost; } function checkHost(host) { var hosts = host.split('.'); return ((hosts[hosts.length - 2] == 'docdoc') || (hosts[hosts.length - 2] == 'topdoc') && (hosts[hosts.length - 1] == 'ru' || hosts[hosts.length - 1] == 'pro')); } var WIDGETS = { DoctorList : function(params) { DocDoc.DoctorsList(params.pid) .city(params.city, true) .region(null, true) .specialisation(params.sector, true) .limit(params.limit || 10) .init(params.container); }, ClinicList : function(params) { DocDoc.ClinicsList(params.pid) .city(params.city, true) .region(null, true) .specialisation(params.sector, true) .limit(params.limit || 10) .init(params.container); } }; window.DdFeedAsyncInit && setTimeout(window.DdFeedAsyncInit, 0); })(window);