function adriver(ph, prm, defer){
if(this instanceof adriver){
var p = null;
if (typeof(ph) == "string"){
p = document.getElementById(ph);
}else{
p = ph; ph = p.id;
}
if (!p) {
if (!adriver.isDomReady) adriver.onDomReady(function(){new adriver(ph, prm, defer)});
return null
}
if (adriver.items[ph]){return adriver.items[ph]}
adriver.items[ph] = this;
this.p = p;
this.defer = defer;
this.prm = adriver.extend(prm, {ph: ph});
this.loadCompleteQueue = new adriver.queue();
this.domReadyQueue = new adriver.queue(adriver.isDomReady);
var my = this;
adriver.initQueue.push(function(){my.init()});
return this;
}else{
return arguments.length ? adriver.items[ph] : adriver.items;
}
}
adriver.prototype = {
isLoading: 0,
init: function(){},
loadComplete: function(){},
domReady: function(){},
onLoadComplete: function(f){
var my = this;
this.loadCompleteQueue.push(function(){f.call(my)});
return this;
},
onDomReady: function(f){
this.domReadyQueue.push(f);
return this;
},
reset: function(){
this.loadCompleteQueue.flush();
this.domReadyQueue.flush(adriver.isDomReady);
return this;
}
}
adriver.loadScript = function(req){
try {
req = req.replace(/!\[rnd\]/,Math.round(Math.random()*9999999));
var head = document.getElementsByTagName("head")[0];
var s = document.createElement("script");
s.setAttribute("type", "text/javascript");
s.setAttribute("charset", "windows-1251");
s.setAttribute("src", req);
s.onreadystatechange = function(){if(/loaded|complete/.test(this.readyState))head.removeChild(s)};
s.onload = function(e){head.removeChild(s)};
head.insertBefore(s, head.firstChild);
}catch(e){}
}
adriver.extend = function(){
var l = arguments[0];
for (var i = 1, len = arguments.length; i<len; i++){
var r = arguments[i];
for (var j in r){
if(r.hasOwnProperty(j)){
if(r[j] instanceof Object){if(l[j]){adriver.extend(l[j], r[j]);}else{l[j] = adriver.extend(r[j] instanceof Array ? [] : {}, r[j]);}}else{l[j] = r[j];}
}
}
}
return l
}
adriver.queue = function(flag){this.q = []; this.flag = flag ? true: false}
adriver.queue.prototype = {
push: function(f){this.flag ? f() : this.q.push(f)},
unshift: function(f){this.flag ? f() : this.q.unshift(f)},
execute: function(flag){var f; var undefined; while (f = this.q.shift()) f(); if(flag == undefined) flag=true; this.flag = flag ? true : false},
flush: function(flag){this.q.length = 0; this.flag = flag ? true: false}
}
adriver.Plugin = function(id){
if(this instanceof adriver.Plugin){
if(id && !adriver.plugins[id]){
this.id = id;
this.q = new adriver.queue();
this.loadingStatus = 0;
adriver.plugins[id] = this;
return this;
}
}
return adriver.plugins[id];
}
adriver.Plugin.prototype = {
load: function(){
this.loadingStatus = 1;
var suffix = this.id.substr(this.id.lastIndexOf('.')+1);
var pluginPath = adriver.pluginPath[suffix] || adriver.defaultMirror + "/plugins/";
adriver.loadScript(pluginPath + this.id + ".js");
},
loadComplete: function(){this.loadingStatus = 2; this.q.execute(); return this},
onLoadComplete: function(f){this.q.push(f); return this}
}
adriver.Plugin.require = function(){
var me = this, counter = 0;
this.q = new adriver.queue();
for (var i = 0, len = arguments.length; i < len; i ++){
var p = new adriver.Plugin(arguments[i]);
if(p.loadingStatus != 2){
counter++;
p.onLoadComplete(function(){if(counter-- == 1){me.q.execute()}});
if(!p.loadingStatus) p.load();
}
}
if(!counter){this.q.execute()}
}
adriver.Plugin.require.prototype.onLoadComplete = function(f){this.q.push(f); return this}
adriver.onDomReady = function(f){
adriver.domReadyQueue.push(f);
}
adriver.onBeforeDomReady = function(f){
adriver.domReadyQueue.unshift(f);
}
adriver.domReady = function(){
adriver.isDomReady = true;
adriver.domReadyQueue.execute();
}
adriver.checkDomReady = function(f){
try {
var d = document, oldOnload = window.onload;
if(/WebKit/i.test(navigator.userAgent)){(function(){/loaded|complete/.test(d.readyState) ? f() : setTimeout (arguments.callee, 100)})()}
else if(d.addEventListener){d.addEventListener("DOMContentLoaded", f, false)}
else if(d.all && !window.opera){
document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");
document.getElementById("__onDOMContentLoaded").onreadystatechange = function(){if(this.readyState == "complete" ){f()}}
}
window.onload = function(){if(oldOnload) oldOnload(); f()}
} catch (e){}
}
adriver.onLoadComplete = function(f){
adriver.loadCompleteQueue.push(f);
return adriver;
}
adriver.loadComplete = function(){
adriver.loadCompleteQueue.execute();
return adriver;
}
adriver.setDefaults = function(defaults){adriver.extend(adriver.defaults, defaults)}
adriver.setOptions = function(options){adriver.extend(adriver.options, options)}
adriver.setPluginPath = function(path){adriver.extend(adriver.pluginPath, path)}
adriver.start = function(){
adriver.version = "2.3.1";
adriver.items = {};
adriver.defaults = {tail256: escape(document.referrer || 'unknown')};
adriver.options = {};
adriver.plugins = {};
adriver.pluginPath = {};
adriver.redirectHost = "
http://ad.adriver.ru";
adriver.defaultMirror = "
http://content.adriver.ru";
adriver.isDomReady = false;
adriver.domReadyQueue = new adriver.queue();
adriver.loadCompleteQueue = new adriver.queue();
adriver.initQueue = new adriver.queue();
adriver.checkDomReady(adriver.domReady);
new adriver.Plugin.require("autoUpdate.adriver").onLoadComplete(function(){
adriver.initQueue.execute();
});
}
adriver.start();