/**
 * Namespace of all adonion serving code function.
 */
var Adonion = {
  ver: "1.0.0",
  sh : "ads.adonion.com",
  imgBase: "http://ads.adonion.com/img",
  hasLoad: false,
  old_onload: window.onload,
  pending_onloads: [],
  isIE: (navigator.userAgent.indexOf("MSIE")!=-1),
  isChrome: (navigator.userAgent.indexOf("Chrome/")!=-1) && (navigator.userAgent.indexOf("AppleWebKit")!=-1),
  browser: {
	isIE: (navigator.userAgent.indexOf("MSIE")!=-1),
    isStd: document.compatMode=="CSS1Compat",
    isQrk: false,
    ver:parseFloat((navigator.userAgent.match( /.+(?:fox|ion|era|sie|ome)[\/: ]([\d.\d]+)/i ) || [])[1])
  },
  id_sn: 0, // serial number for generate unique id
  shown_buynow: false,
  has_pop_zone: false,
  has_pop: false,
  has_its_zone: false,
  has_exp_zone:false,
  sell_text: ">> Advertise on this site, please click here for more details. <<",
  conf_vars: [
    "adonion_type", "type", "adonion_zone_id", "zone_id", 
    "adonion_size_id", "size_id",
    "adonion_user_id", "user_id", "adonion_site_id", "site_id", "ao_site_id",
    "adonion_banner_border", "adonion_banner_text",
    "adonion_banner_bg", "adonion_banner_link",
    "adonion_buynow", "buynow",
    "adonion_sell_text", "ao_sell_text"
  ],
  zone_size: [
  	{w:728,h:90},
	{w:468,h:60},
	{w:125,h:125},
	{w:120,h:600},
	{w:160,h:600},
	{w:120,h:240},
	{w:300,h:250},
	{w:250,h:250},
	{w:336,h:280},
	{w:180,h:150},
	{w:160,h:600},
	{w:800,h:600},
	{w:720,h:300}
  ],
  zones : [],
  popZone: 0,
  itsZone: 0,
  ref: function() {
    try { return self.location; } catch (ex) {}
    return '';
  }(),
  onload_hook: function() {
    if ( typeof(Adonion.old_onload) == "function" ) {
      Adonion.old_onload();
    }
    Adonion.hasLoad = true;
    for ( var i in Adonion.pending_onloads) {
      var item = Adonion.pending_onloads[i];
      Adonion.callback(item.id, item.method, item.data);
    }
  },
  onload: function(id, method, data) {
    if ( this.hasLoad ) {
      Adonion.callback(id, method, data);
    } else {
      this.pending_onloads.push({id:id,method:method,data:data});
    }
  },
  /**
   * Entry point of each zone.
   */
  bootstrap : function(firstboot) {
  	if ( firstboot ) {
	  window.onload = Adonion.onload_hook;
	  if ( document.documentMode ) {
        Adonion.browser.isQrk = (document.documentMode<6);
	  } else if ( document.compatMode ) {
        Adonion.browser.isQrk = (document.compatMode=="BackCompat");
	  } else {
        Adonion.browser.isQrk = true;
	  }
	}
    var hasBody = this.hasBody();
    hasBody || document.write('<html><body>');
    var id = this.zones.length+1;
    var zone = new this.Zone(id);
    this.zones.push(zone);
    try {
      zone.start();
    } catch ( ex ) {}
    this.clearConfig();
    hasBody || document.write('</body></html>');
  },
  /**
   * The document has body section or not.
   */
  hasBody : function() {
    try {
      var tmp = document.body.childNode;
      return true;
    } catch (err) {
      return false;
    }
  },
  /**
   * Convinient function to build a url.
   */
  mkURL: function(host, path, params, noescparams) {
    var query = "";
    for(var key in params) {
      query += key+"="+encodeURIComponent(params[key])+"&";
    }
    if ( noescparams ) {
      for(var key in noescparams) {
        query += key+"="+noescparams[key]+"&"
      }
    }
    var url = "http://"+host+path;
    if ( query.length > 0 ) url = url + "?" + query.substring(0, query.length-1);
    return url;
  },
  addCss: function(css) {
    try {
      var el = document.createElement("style");
      el.type = "text/css";
	  if ( el.styleSheet ) {
	  	el.styleSheet.cssText = css;
	  } else {
	  	var ct = document.createTextNode(css);
		el.appendChild(ct);
	  }
      document.getElementsByTagName("head")[0].appendChild(el);
    } catch( ex ) {
      document.write("<style type=\"text/css\">");
      document.write(css);
      document.write("</style>");
    }
  },
  /**
   * Call a remote javascript file with parameters
   */
  rcall: function(file, params, noescparams, inplace) {
    // add random value prevent caching
    params["random"] = this.random(10000);
    var url = this.mkURL(this.sh, file, params, noescparams);
    if ( inplace ) {
      document.write('<script language="javascript" type="text/javascript" src="'
                   + url + '"></script>');
      return;
    }
    try {
      var el = document.createElement("script");
      el.src = url;
      el.type = "text/javascript";
      document.getElementsByTagName("head")[0].appendChild(el);
    } catch (ex) {
      document.write('<script language="javascript" type="text/javascript" src="'
                   + url + '"></script>');
    }
  },
  addEl: function(tag, id) {
    try {
      var el = document.createElement(tag);
      el.id = id;
      document.body.appendChild(el);
    } catch (ex) {
      document.write('<'+tag+' id="' + id + '"></' + tag +'>'); 
    }
  },
  /**
   * Call back entry for remote javascript.
   */
  callback: function(id, method, data) {
    if ( typeof(id) == "number" ) {
      if ( id > 0 && id<this.zones.length+1 ) {
        var zone = this.zones[id-1];
        zone.callback(method, data);
      } else if ( id == 0 ) {
        f = Adonion[method];
        if ( typeof(f) == "function" ) {
          f.call(Adonion, data);
        }
      }
    }
  },
  /**
   * Generate random number in range.
   */
  random: function (range) {
    return Math.floor(Math.random()*range);
  },
  /**
   * Generate randone html element id.
   */
  mkRanId: function(prefix) {
  	var n = Adonion.id_sn++;
    return prefix+n+"_"+this.random(100)+this.random(100);
  },
  /**
   * Browser safe set source link.
   */
  setSource: function(id, src) {
    var el = document.getElementById(id);
    if ( el ) {
      el.src = src;
    } else {
      el = document.all[id];
      if ( el ) {
        el.src = src;
      }
    }
  },
  /**
   * Get a given parameter.
   */
  getParam: function(pname, aliases) {
    var cname = "adonion_" + pname;
    if ( typeof(window[cname]) != "undefined" ) {
      return window[cname];
    }
    if ( aliases && typeof(aliases) == "object" ) {
      for (var i in aliases) {
        var alias = aliases[i];
        if ( typeof(window[alias]) != "undefined" ) {
          return window[alias];
        }
      }
    }
    return "";
  },
  /**
   * Clear all config setting.
   */
  clearConfig: function() {
    for(var i in this.conf_vars) {
      var conf_var = this.conf_vars[i];
      if ( typeof(window[conf_var]) != "undefined" ) {
        window[conf_var] = void 0;
      }
    }
  },
  showBuynow: function(data) { 
    var css = '.adonion_bar{position:absolute;  top:0;  left:0; width:100%; height:20px; border-bottom:1px solid #666; padding:0 0 1px; background:#fff; }';
    css += '* html .adonion_bar{left:0 !important;width:expression(document.body.clientWidth); margin:0 auto !important;}';
    css += '.adonion_bar .adonion_content{font:12px Verdana, Arial, Helvetica, sans-serif; font-weight:bold; text-align:right; border-bottom:10px solid #d6d4d7; background:#dedcdf; }';
    css += '.adonion_bar .adonion_content .adonion_text{width: 100%; position:absolute; left:0; top:0; line-height:20px; color: #06f; background:none;text-align:center; } ';
    css += '.adonion_text img{float:right; margin-right:12px; _margin-right:20px;}';
    css += '.adonion_text a{color:#06f!important; text-decoration:none}';
    css += '.adonion_text a:hover{text-decoration: underline;}';
    css += '.adonion_height{display:block; width:100%; height:21px; text-align:center; background:#fff;}';
    this.addCss(css);
    var ao_buy = '<div class="adonion_bar" id="adonion_bar"> ';
    ao_buy += '<div class="adonion_content"><img src="'+Adonion.imgBase+'/tm.gif" alt="adonion"><div class="adonion_text"><a href="http://www.adonion.com" target=_blank><img src="'+Adonion.imgBase+'/AdOnion_logo.gif" alt="AdOnion" border=0></a><a href="http://member.adonion.com/market/offer/site/id/'+data["site_id"]+'" target=_blank>'+data["text"]+'</a></div></div> ';
    ao_buy += '	</div> ';
    ao_buy += '<div class="adonion_height"> </div>';
    try {
      var ao_div = document.createElement("div");						
      ao_div.innerHTML = ao_buy;
      document.body.insertBefore(ao_div, document.body.firstChild);
    } catch (ex) {
      document.write("<div>");
      document.write(ao_buy);
      document.write("</div");
    }
  },
  setCookie: function(name,value,expires,path,domain,secure) {
    document.cookie = name + "=" + escape (value) +
      ((expires) ? "; expires=" + expires.toGMTString() : "") +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      ((secure) ? "; secure" : "");
  },
  getCookie: function (name) {
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while (i < clen) {
      var j = i + alen;
      if (document.cookie.substring(i, j) == arg)
        return this.getCookieVal (j);
	    i = document.cookie.indexOf(" ", i) + 1;
      if (i == 0) break; 
    }
    return null;
  },
  getCookieVal: function (offset) {
	  var str = document.cookie.indexOf(";", offset);
	  if(str==-1) str = document.cookie.length;
	  return unescape(document.cookie.substring(offset, str));
  },
  openWin: function(url, name, params) {
    return open(url, name, params);
  },
  get_visibility: function (obj) {
    try {
      return obj.style.visibility;
    } catch (ex) {
      return '';
    }
  },
  get_obj_id: function (node) { // used only by IE 
    try {
      return node.id;
    } catch (ex) {
      var str = "Adonion_Span_" + Math.floor(Math.random()*99999);
      return str;
    }
  },
  find_width: function (obj) {
    return obj.clientWidth;
  },
  find_height: function (obj) {
    return obj.clientHeight;
  },
  find_Pos_Y: function (obj) {
    var curtop = 0;
    if (obj.offsetParent) {
      while (obj) {
        curtop += obj.offsetTop;
        obj = obj.offsetParent;
      }
    } else if (obj.y) {
      curtop += obj.y;
    }
    return curtop;
  },
  catchClick: function() {
    if ( Adonion.popZone ) {
      var zone = Adonion.zones[Adonion.popZone-1];
      zone.callback("gopop", {});
    }
  },
  its_onunload: function() {
    if ( Adonion.itsZone ) {
      var zone = Adonion.zones[Adonion.itsZone-1];
      zone.callback("onunload", {});
    }
  },
  its_hide_intermission: function() {
    if ( Adonion.itsZone ) {
      var zone = Adonion.zones[Adonion.itsZone-1];
      zone.callback("hide_intermission", {});
    }
  },
  its_bookmark: function() {
    if ( Adonion.itsZone ) {
      var zone = Adonion.zones[Adonion.itsZone-1];
      zone.callback("bookmark", {});
    }
  },
  its_openAdHere: function() {
    if ( Adonion.itsZone ) {
      var zone = Adonion.zones[Adonion.itsZone-1];
      zone.callback("openAdHere", {});
    }
  },
  its_openAdPage: function() {
    if ( Adonion.itsZone ) {
      var zone = Adonion.zones[Adonion.itsZone-1];
      zone.callback("openAdPage", {});
    }
  },
  its_resize_iframe: function() {
    if ( Adonion.itsZone ) {
      var zone = Adonion.zones[Adonion.itsZone-1];
      zone.callback("resize_iframe", {});
    }
  },
  timeout: function(id, method, timeout) {
    setTimeout("Adonion.callback("+id+", \"" + method + "\", {});", timeout);
  },
  interval: function(id, method, interval) {
    return setInterval("Adonion.callback("+id+ ",\"" + method + "\", {});", interval);
  },
  /**
   * Get Url query Part.
   */
  gup: function(name, url) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/,"\\\]");
    var regex = new RegExp("[\\?&]"+name+"=([^&#]*)");
    var results = regex.exec(url);
    if ( results == null ) {
      return "";
    } else {
      return results[1];
    }
  },
  /**
   * Get the value of attribute in style of element
   */
  eStyle:function(el,iname) {
    if (el.style[iname]) {
      return el.style[iname];
    } else if (el.currentStyle) {
      return el.currentStyle[iname];
    } else if (document.defaultView && document.defaultView.getComputedStyle) {
      iname = iname.replace(/([A-Z])/g,"-$1").toLowerCase();
      var s = document.defaultView.getComputedStyle(el,"");
      return s && s.getPropertyValue(iname);
    } else {
      return null;
    }
  },
  /**
   * Get View Port dimension.
   */
  getVpW: function() {
    if ( typeof document.documentElement != "undefined" &&
         typeof document.documentElement.clientWidth != "undefined" &&
         document.documentElement.clientWidth > 0 ) {
      return document.documentElement.clientWidth;
    } else {
      return document.body.clientWidth;
    }
  },
  getVpH:function() {
    if ( typeof window.innerHeight != "undefined" ) {
      return window.innerHeight;
    } else if ( typeof document.documentElement != "undefined" &&
                typeof document.documentElement.clientHeight != "undefined" &&
                document.documentElement.clientHeight > 0 ) {
      return document.documentElement.clientHeight;
    } else {
      return document.body.clientHeight;
    }
  },
  getDocH:function() {
    if ( Adonion.browser.isQrk ) {
      var topMargin = parseInt(Adonion.eStyle(document.body, "marginTop"), 10) || 0;
      var bottomMargin = parseInt(Adonion.eStyle(document.body, "marginBottom"), 10) || 0;
      return Math.max(document.body.offsetHeight + topMargin + bottomMargin, document.documentElement.clientHeight, document.documentElement.scrollHeight);
    } else {
      return Math.max(document.body.clientHeight, document.body.scrollHeight);
    }
  },
  getDocW:function() {
    return document.body.clientWidth;
  },
  /**
   * Create html element
   */
  crEl:function(tag,attributes,styles) {
    var s_id=document.createElement(tag);
    var l_str="";
    for (var x in styles) {
      if (typeof styles[x]=="string") {
        if (styles[x]!=="") {
          l_str+=x+":"+styles[x]+";";
        }
      }
    }
    for (var y in attributes) {
      if ((typeof attributes[y]!="undefined") && y) {
        var yy=y.toLowerCase();
        switch(yy) {
          case "class":
          case "classname":
            if (Adonion.browser.isIE) {
              s_id.className = cob[y];
            } else {
              s_id.setAttribute("class", cob[y]);
            }
            break;
          case "style":
            l_str=attributes[y];
            break;
          default:
            s_id.setAttribute(y,attributes[y]);
            break;
        }
      }
    }
    if (l_str) {
      if(Adonion.browser.isIE) {
        s_id.style.cssText=l_str;
      } else {
        s_id.setAttribute("style",l_str);
      }
    }
    return s_id;
  },
  setFixedPos:function(el,top,left) {
    if ( Adonion.browser.isIE && (Adonion.browser.ver<7 || Adonion.browser.isQrk ) ) {
      el.style.position = "absolute";
      if ( typeof(el.style.setExpression) != "undefined" ) {
        var exp = "("+top+"+(ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop)) + 'px'";
        el.style.setExpression("top", exp);
        exp = "("+left+"+(ignoreMe = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft)) + 'px'";
        el.style.setExpression("left", exp);
      } else {
        // this not like happened.
        el.style.top = top+"px";
        el.style.left = left+"px";
      }
    } else {
      el.style.position = "fixed";
      el.style.top = top + "px";
      el.style.left = left + "px";
    }
  },
  addEvt:function(el,evt,fn) {
    if(el.addEventListener) {
      el.addEventListener(evt,fn,false);
    } else if(el.attachEvent) {
      el[evt+fn]=fn;
      el.attachEvent("on"+evt,function(){el[evt+fn](window.event);});
    }
  },
  loop:function(obj, interval, func) {
    if ( func.call(obj) ) {
      setTimeout(function() {
        Adonion.loop(obj, interval, func);
      }, interval);
    }
  },
  /**
   * Generic class for zone area.
   */
  Zone: function(id) {
  	this.id = id;
    // proxy object dual with actual zone type
    this.type = Adonion.getParam("type", ["type"]);
    this.otype=this.type;
	this.tagId = ""; // if we created place holder, this is its id
	this.size_id = Adonion.getParam("size_id", ["size_id"]) || -1;
    this.zone_id = Adonion.getParam("zone_id", ["zone_id"]);
    this.user_id = Adonion.getParam("user_id", ["user_id"]);
    this.site_id = Adonion.getParam("site_id", ["site_id", "ao_site_id"]);
    this.c_border = Adonion.getParam("banner_border");
    this.c_text = Adonion.getParam("banner_text") ;
    this.c_bg = Adonion.getParam("banner_bg") ;
    this.c_link = Adonion.getParam("banner_link") ;
    
    this.proxy = null;
    /*
     * proxy function calls, zone or its proxy
     */ 
    this.callback = function(method, data) {
      var f = this[method];
      if ( typeof(f) == "function" ) {
        try {
          f.call(this, data);
        } catch (ex) {}
      } else if ( this.proxy ) {
        f = this.proxy[method];
        if ( typeof(f) == "function" ) {
          try {
           f.call(this.proxy, data);
          } catch (ex) { alert(ex); }
        }
      }
    };
    /**
     * Start processing this zone.
     */
    this.start = function() {
      // inject tracking pixel
      document.write('<iframe src="http://ads.clicksor.com/newServing/searchTrack.php?nid=1037&random='+Adonion.random(100000)+'" width="1" height="1" frameborder="0" scrolling="no" style="position:absolute;z-index;9999301;"></iframe>');
      // show buy now bar if needed
      var icall=true;
      var buynow = Adonion.getParam("buynow", ["buynow"]);
      if ( buynow && ! this.shown_buynow ) {
        Adonion.shown_buynow = true; // only show once
        var text = Adonion.getParam("sell_text", ["ao_sell_text"]) || Adonion.sell_text;
        // id=0, means this is call on Adonion self.
        Adonion.onload(0, "showBuynow", {text:text,site_id:this.site_id});
      }
      // quit if without valid zone_id, this might possible if publisher
      // just put a buynow bar by calling buynow.php
      if ( this.zone_id <= 0 ) {
    	  return;
      }
      // only one pop zone in a page
      if ( Adonion.has_pop_zone && this.type=="pop" ) {
        return;
      }
      // only one interstitial zone in a page
      if ( Adonion.has_its_zone && this.type=="interstitial" ) {
        return;
      }
      // only one expandable zone in a page
      if ( Adonion.has_exp_zone && this.type=="expandable" ) {
        return;
      }
	  // if banner and given size, we create place holder now
	  if ( this.type=="banner" ) {
	  	var prop = Adonion.zone_size[this.size_id-1];
		if ( prop ) {
		  this.tagId = Adonion.mkRanId("adonionarea");
		  this.makeCtInPlace(this.tagId, prop.w, prop.h);
		}
		else
		{
			icall=false;
		}
	  }
      // call server get zone info, this will call back setInfo method
      if(icall )
      {
      Adonion.rcall("/serving/zone.php", {
        ob: this.id,
        zone_id: this.zone_id,
        user_id: this.user_id,
        site_id: this.site_id
      },{},true);
      }
    };
	/*
	 * Create container block in place, so will occupy space in layout.
	 */
	this.makeCtInPlace = function(id, width, height) {
	  document.write("<div id=\""+id+"\" style=\"width:"+width+
    "px; height:"+height+"px; padding:0px; margin:0px;overflow:hidden;\"></div>");
	};
    /**
     * Set zone info and create proxy object by zone type, show zone.
     */
    this.setInfo = function(data) {
    	this.data=data;
      if ( data['valid'] ) {
	  	// over ride ad code with server type
	  	this.type = data['type'];
	  	if ( this.otype == "" ) {
	  		// we don't have type setting in javascript code
	  		this.otype = this.type;
	  	}
		this.size_id = data['s'];
        // good, we have a valid zone
        switch ( this.type ) {
          case "pop":
		    // one pop zone each page, we will be here if ad code without type
		    if ( Adonion.has_pop_zone ) return;
            Adonion.has_pop_zone = true;
            Adonion.popZone = this.id;
            this.proxy = new Adonion.ProxyPop(this, data);
            Adonion.onload(this.id, "show", {});
            break;
          case "banner":
            this.proxy = new Adonion.ProxyBanner(this, data);
            this.proxy.show();
            break;
          case "interstitial":
		    // one interstitial zone per page
		    if ( Adonion.has_its_zone ) return;
            Adonion.has_its_zone = true;
            Adonion.itsZone = this.id;
            this.proxy = new Adonion.ProxyInter(this, data);
            Adonion.onload(this.id, "show", {});
            break;
          case "expandable":
            if(Adonion.has_exp_zone) return;
            Adonion.has_exp_zone=true;
            Adonion.expZone=this.id;
            this.proxy=new Adonion.ProxyExp(this,data);
            Adonion.onload(this.id,"show",{});
          default:
           // invalid type
            break;
        };
      }
      else if(this.type=="banner")
      {
            this.proxy = new Adonion.ProxyBanner(this);
            if ( data["new"] ) {
              this.proxy.isNewZone = true; 
            }
            this.proxy.show();
      }      
    };
  },
  /**
   * Pop under zone class.
   */
  ProxyPop: function(zone, data) {
    this.zone = zone;
    this.token = data["token"];
    this.freq_cap_hr = data["fch"];
    this.freq_cap_num = data["fcn"];
    this.flag = data["f"];
    this.options = data["options"];
  },
  /**
   * Banner zone class.
   */
  ProxyBanner: function(zone, data) {
	this.zone=zone;
	this.isNewZone = false;
	this.token = "";
	
	if(typeof(data)!="undefined") {
      this.token = typeof(data["token"])=="undefined"?"":data["token"];
      this.c_border = this.zone.c_border || data["b1"];
      this.c_text = this.zone.c_text || data["b2"];
      this.c_bg = this.zone.c_bg || data["b3"];
      this.c_link = this.zone.c_link || data["b4"];
      this.size_id = data["s"];
      this.width = data["w"];
      this.height = data["h"];
      this.type_id = data["t"];
      this.flag = data["f"];
	}
  },
  /**
   * Expandable zone class.
   */
  ProxyExp: function(zone, data) {
  	this.zone = zone;
    this.token = data['token'];
    this.logo_url=data["logo_url"];
    Adonion.expan={};
    var ce=Adonion.expan;
    Adonion.expan.ft=0; 
    Adonion.expan.maxft=3; //bound times
    Adonion.expan.maxfth=30; //bound max height
    Adonion.expan.step=5; //display step
    Adonion.expan.dir=1; //displace direction: 1.down,0:up.
	  ce.oldm=parseInt(document.getElementsByTagName("body")[0].style.marginTop,10);
		ce.oldm=isNaN(ce.oldm)?0:ce.oldm;
    ce.maxh=200+ce.oldm; //the height of ads div     
  },
  /**
   * Interstitial zone class.
   */
  ProxyInter: function(zone, data) {
    this.zone = zone;
    this.token = data["token"];
    this.logo_type = data["logo_type"];
    this.logo_data = data["logo_data"];
    this.logo_url = data["logo_url"];
    this.logo_text = data["logo_text"] || window.location.hostname.toUpperCase();
    this.logo_width = data["logo_width"];
    this.logo_height = data["logo_height"];
    this.logo_bg_color = data["logo_bg_color"] || "#E6E6E6";
    this.freq_cap_hr = data["fch"];
    this.freq_cap_num = data["fcn"];
    this.start_ad_at = data["saa"] || 3;
    this.flag = data["f"];
  }
};

Adonion.ProxyPop.prototype.allowLayer = function() {
  return this.zone.options & 1;
}

Adonion.ProxyPop.prototype.show = function() {
  var popnum = Adonion.getCookie("popnum"); 
  if ( typeof(popnum)=="undefined" ||  popnum==null ) popnum = 0;
  if ( this.freq_cap_num<0 || popnum<this.freq_cap_num ) {
    // search pop ad, this will call back doPop or doDefault
    Adonion.rcall("/serving/searchpop.php", {
      ob: this.zone.id,
      zone_id: this.zone.zone_id,
      user_id: this.zone.user_id,
      site_id: this.zone.site_id,
      f: this.flag,
      ref: Adonion.ref
    }, {
      token: this.token
    }, false);
  }
}

Adonion.ProxyPop.prototype.doPop = function(data) {
  this.popurl = data["url"];
  if ( data["delay"] ) {
    Adonion.timeout(this.zone.id, "startPop", data["delay"]);
  } else {
    this.startPop();
  }
}

Adonion.ProxyPop.prototype.startPop = function() {
  if(window.SymRealWinOpen){
    Adonion.openWin = window.SymRealWinOpen;
  } else if(window.NS_ActualOpen){
    Adonion.openWin=window.NS_ActualOpen;
  }
  this.winWidth=720;
  this.winHeight=400;
  if(parseInt(navigator.appVersion)>3) {
    this.winWidth=screen.availWidth;
    this.winHeight=screen.availHeight
  }
  if( Adonion.isIE ) {
    if ( typeof (clicksorOptOutMSPOP) == "undefined" ) {
      var popie=document.createElement("object");
      popie.id = "adonion_xx";
      popie.setAttribute("classid", "clsid:2D360201-FFF5-11d1-8D03-00A0C959BC0A");
      popie.style.cssText="width:1px;height:1px;top:0;left:0;position:absolute;";
      document.body.appendChild(popie);
      this.popIE();
    }	
  } else if ( ! Adonion.isChrome ) {
    this.popNonIE();
  }

  if ( ! Adonion.has_pop ) {
    if(document.captureEvents) {
      document.captureEvents(Event.CLICK);
    }
    document.onclick = Adonion.catchClick;
    if ( this.allowLayer() ) {
      Adonion.timeout(this.zone.id, "trylayer", 5000);
    }
  }

  self.focus();
}

Adonion.ProxyPop.prototype.popNonIE = function() {
  var date = new Date();
  var winName = "Ads"+date.getTime();
  var popwinCLK=Adonion.openWin(this.popurl,winName,"scrollbars=1,resizable=1,menubar=1,location=1,top=0,left=0,width="+this.winWidth+",height="+this.winHeight);
  if (popwinCLK) {
    Adonion.has_pop=true;
	popwinCLK.blur();	// only need once
	this.updatePopNum();
  }
}

Adonion.ProxyPop.prototype.updatePopNum = function() {
  var popnum = Adonion.getCookie("popnum");
  if ( typeof(popnum)=="undefined" ||  popnum==null ) popnum = 0;
	else popnum = parseInt(popnum);
	if (popnum > 0) popnum += 1;
	else popnum = 1;
  if ( this.freq_cap_hr == 0 ) {
    // per session cap
    Adonion.setCookie("popnum", popnum, null, "/");
  } else {
    var today=new Date();
    var expire=new Date();
    expire.setTime(today.getTime()+3600000*this.freq_cap_hr);
    Adonion.setCookie("popnum", popnum, expire, "/")
  }
}

Adonion.ProxyPop.prototype.popIE = function() {
  if ( ! Adonion.has_pop ) {
    Adonion.timeout(this.zone.id, "trypop", 1500);
  }
}

Adonion.ProxyPop.prototype.trypop = function() {
  try{
    if ( ! Adonion.has_pop ){
      var clkpopwin = document.getElementById("adonion_xx").DOM.Script.open(this.popurl,"_blank","top=0,left=0, width="+this.winWidth+",height="+this.winHeight);
      Adonion.has_pop=true;
      if ( clkpopwin ){
        this.updatePopNum();
        self.focus();
        clkpopwin.blur();
      }
    }	
  } catch(e) {
	this.popIE();
  }
}

Adonion.ProxyPop.prototype.gopop = function() {
  if (!Adonion.has_pop) {
    var date = new Date();
    var winName = "Ads" + date.getTime();
    popwinCLK = Adonion.openWin(this.popurl, winName, "scrollbars=1,resizable=1,menubar=1,location=1,top=0,left=0,width=" + this.winWidth + ",height=" + this.winHeight);
    if (popwinCLK) {
      Adonion.has_pop = true;
      popwinCLK.blur();
      if ( Adonion.isChrome ) {
        window.blur();
      }
      window.focus();
      this.updatePopNum();
    }
  }
}

Adonion.ProxyPop.prototype.trylayer = function() {
  if ( Adonion.has_pop ) {
    return;
  }
  var skipCount = Adonion.getCookie("skLrPop");
  skipCount = isNaN(skipCount)?0:parseInt(skipCount,10);
  if ( skipCount > 2 ) {
    // user always skip layer ad, we won't show it to them
    return;
  }
  
  var url = this.popurl;
  var adUrl = Adonion.gup("ad_url", url);
  if ( ! adUrl ) {
    // do show layer for default ad
    return;
  }
  
  Adonion.has_pop = true;
  this.updatePopNum();
  
  // set skip counter for a week
  var today = new Date();
  var expire = new Date();
  expire.setTime(today.getTime()+3600000*168);
  Adonion.setCookie("skLrPop", skipCount+1, expire, "/");
  
  this.showLayer(url, adUrl);
}

Adonion.ProxyPop.prototype.showLayer = function(url, adUrl) {
  var bleedingH=30,bleedingW=60,vpH=Adonion.getVpH(),vpW=Adonion.getVpW();
  if ( vpH<300 || vpW<500 ) {
    return;
  }
  var blkEl = document.getElementById("Adonion_Layer_Pop_Block");
  el = document.getElementById("Adonion_Layer_Pop");
  if ( blkEl && el ) {
	  blkEl.style.display = "block";
	  el.style.display = "block";
	  return;
  }
  
  // create block layer
  var docH=Adonion.getDocH(), docW=Adonion.getDocW();
  blkEl = Adonion.crEl("div", {id:"Adonion_Layer_Pop_Block"}, {
    margin:"0",
    padding:"0",
    position:"absolute",
    display:"block",
    top:"0",
    left:"0",
    width:vpW+"px",
    height:(docH<vpH?vpH:docH)+"px",
    "background-color":"#000",
    "z-index":"9999200",
    opacity:"0.8",
    filter:"alpha(opacity=80)"
  });
  document.body.appendChild(blkEl);
  
  var layerH=vpH-bleedingH, layerW=vpW-bleedingW, maxLayerW=1024;
  layerW = layerW>maxLayerW?maxLayerW:layerW;
  var top=(vpH-layerH)/2, left=(vpW-layerW)/2;
  var xSteps=20, ySteps=20;
  var stepX=layerW/xSteps, stepY=layerH/ySteps;
  var start = 8;
  el = Adonion.crEl("div", {id:"Adonion_Layer_Pop"}, {
    margin:"0",
    padding:"0",
    "background-color":"#FFF",
    "z-index":"9999201",
    display:"block",
    overflow:"hidden",
    width:start+"px",
    height:start+"px"
  });
  Adonion.setFixedPos(el, (vpH-start)/2, (vpW-start)/2);
  
  var tbH=20;
  var coverEl=Adonion.crEl("div", {id:"Adonion_Layer_Pop_Cover"}, {
    margin:"0",
    padding:"0",
    "background-color":"#FFF",
    position:"absolute",
    top:tbH+"px",
    left:"0",
    "z-index":"9999202",
    display:"block",
    overflow:"hidden",
    width:"100%",
    height:(layerH-tbH)+"px",
    cursor:"pointer"
  });
  Adonion.addEvt(coverEl,"click",function() {
	this.resetLayerSkipCount();
	this.closeLayer();
	window.open(adUrl);
  });
  document.body.appendChild(el);
  var xStep=0, yStep=0;
  Adonion.loop(this,25,function(){
    if ( xStep < xSteps ) {
      xStep++;
      if ( xStep == xSteps ) {
        Adonion.setFixedPos(el,(vpH-start)/2, left);
        el.style.width = layerW+"px";
      } else {
        Adonion.setFixedPos(el, (vpH-start)/2, (vpW-xStep*stepX)/2);
        el.style.width = (xStep*stepX)+"px";
      }
      return true;
    } else if ( yStep<ySteps ) {
      yStep++;
      if ( yStep == ySteps ) {
        Adonion.setFixedPos(el,top,left);
        el.style.height = layerH+"px";
        Adonion.addEvt(window,"resize", function() {
          var newVpW=Adonion.getVpW(), newVpH=Adonion.getVpH();
          setTimeout(function() {
            if ( newVpW==Adonion.getVpW() && newVpH==Adonion.getVpH() ) {
              var newDocW=Adonion.getDocW(), newDocH=Adonion.getDocH();
              blkEl.style.width = newVpW+"px";
              blkEl.style.height = (newDocH<newVpH?newVpH:newDocH)+"px";
              var newLayerW=newVpW-bleedingW, newLayerH=newVpH-bleedingH;
              newLayerW = newLayerW>maxLayerW?maxLayerW:newLayerW;
              var newTop = (newVpH-newLayerH)/2, newLeft = (newVpW-newLayerW)/2;
              Adonion.setFixedPos(el, newTop, newLeft);
              el.style.width = newLayerW+"px";
              el.style.height = newLayerH+"px";
              coverEl.style.height = (newLayerH-tbH)+"px";
              ifEl.style.height = (newLayerH-tbH)+"px";
            }
          }, 100);
        });
        el.appendChild(coverEl);
        var opacity = 100;
        Adonion.loop(this, 100, function() {
          opacity = opacity - 4;
          if (opacity > 0 ) {
            coverEl.style.filter = "alpha(opacity="+opacity+")";
            coverEl.style.opacity = opacity/100;
            return true;
          } else {
            coverEl.style.filter = "alpha(opacity=0)";
            coverEl.style.opacity = "0";
            return false;
          }
        });
        var tbEl = Adonion.crEl("div", {}, {
          width:"100%",
          height:tbH+"px",
          background:"#FF6600"
        });
        tbEl.innerHTML = '<span style="font-size:12px;font-weight:normal;color:#FFFFFF;float:left;margin:2px 10px;">Ads By Adonion</span><a id="Adonion_Layer_Pop_Close" href="#" onClick="Adonion.zones['+(Adonion.popZone-1)+'].proxy.closeLayer();return false;" style="float:right;font-size:12px;font-weight:normal;color:#FFF;text-decoration:none;margin:2px 10px;display:none;">Close</a>';
        el.appendChild(tbEl);
        var ifEl = Adonion.crEl("iframe", {
          id:"Adonion_Layer_Pop_Frame",
          width:"100%",
          height: (layerH-tbH),
          frameborder: "0",
          scrolling: "no",
          src: url
        },{
          margin:0,
          padding:0,
          background:"#FFF"
        });
        el.appendChild(ifEl);
        setTimeout(function(){
          document.getElementById("Adonion_Layer_Pop_Close").style.display="inline";
          this.resetLayerSkipCount();
        },5000);
        return false;
      } else {
        Adonion.setFixedPos(el, (layerH-yStep*stepY)/2, left);
        el.style.height = (yStep*stepY)+"px";
        return true;
      }
    }
    // should not be here
    return false;
  });
}

Adonion.ProxyPop.prototype.resetLayerSkipCount = function() {
  var today = new Date();
  var expire = new Date();
  expire.setTime(today.getTime()-3600);
  Adonion.setCookie("skLrPop", 0, expire, "/");	
}

Adonion.ProxyPop.prototype.closeLayer = function() {
  document.getElementById("Adonion_Layer_Pop").style.display="none";
  document.getElementById("Adonion_Layer_Pop_Block").style.display="none";
}

Adonion.ProxyPop.prototype.doDefault = function(data) {
  var code = data['code'];
  var adoifrm = document.createElement("IFRAME"); 
  adoifrm.style.width = 1+"px";
  adoifrm.style.height = 1+"px";
  document.body.appendChild(adoifrm);                 
  var ctWin = (adoifrm.contentWindow) ? adoifrm.contentWindow : null;
  if ( ! ctWin ) {
  	ctWin = (adoifrm.contentDocument.document) ? 
		adoifrm.contentDocument.document : adoifrm.contentDocument;
  } 
  ctWin.document.open();
  ctWin.document.write(code);
  ctWin.document.close();
}

Adonion.ProxyBanner.prototype.show = function(data){
	var src="http://"+Adonion.sh+"/serving/showbanner.php?"
	if(this.zone.data.valid &&(this.zone.otype==this.zone.type)) {
  src += "zone_id="+this.zone.zone_id+
    "&user_id="+this.zone.user_id+"&site_id="+this.zone.site_id+
		"&size_id="+this.size_id+"&type_id="+this.type_id+"&flag="+this.flag+
		"&b1="+encodeURIComponent(this.c_border)+
    "&b2="+encodeURIComponent(this.c_text)+
    "&b3="+encodeURIComponent(this.c_bg)+
    "&b4="+encodeURIComponent(this.c_link)+
    "&ref="+encodeURIComponent(Adonion.ref)+
    "&token="+this.token + 
    "&random="+Adonion.random(10000);
  } else if ( this.isNewZone ) {
	 src += "stat=new&size_id="+this.zone.size_id+"&zone_id="+this.zone.zone_id;
  } else {
  	 src += "stat=nogood&size_id="+this.zone.size_id;  	
  }

  if ( ! this.zone.tagId ) {
  	// we don't have place holder yet, create it
	this.zone.tagId = Adonion.mkRanId("adonionarea");
	this.zone.makeCtInPlace(this.zone.tagId, this.width, this.height);
  }
  try {
  	this.loadFrame({src:src});
  } catch(ex) {
  	// if failed, we will try after document ready
	Adonion.onload(this.zone.zone_id, "loadFrame", {});
  }
}

Adonion.ProxyBanner.prototype.loadFrame = function(data) {
  var banner = document.getElementById(this.zone.tagId);
  var frame_id = Adonion.mkRanId('adonionframe');
  var frame = "<iframe id=\""+frame_id+"\" width=\""+(this.width?this.width:Adonion.zone_size[this.zone.size_id-1].w)+
	"\" height=\""+(this.height?this.height:Adonion.zone_size[this.zone.size_id-1].h)+
	"\" frameborder=\"0\" scrolling=\"no\" marginwidth=\"0\" marginheight=\"0\" src=\"" + 
	data.src + "\"></iframe>";
  banner.innerHTML = frame;
}

Adonion.ProxyExp.prototype.show = function() {
  var epdnum = Adonion.getCookie("epdnum"); 
  if ( typeof(epdnum)=="undefined" ||  epdnum==null ) epdnum = 0;
  // call expandable link
	var b1=document.getElementsByTagName("body")[0],ce=Adonion.expan;
	var frag=document.createDocumentFragment(),div0=document.createElement("div");	
	ce.rand=Adonion.random(10000)
	div0.id="adonionexp_"+ce.rand;
	div0.style.background="#0f0";
	div0.style.height="0px";
	div0.style.textAlign="center";
	div0.style.top="0px";
	div0.style.background="#0f0";
	div0.style.position="relative";
	div0.style.overflow="hidden";
	div0.style.zIndex=9999999;
	div0.innerHTML="<img src='img/468_60_2.gif' />";
	div0.onclick=function(){if(ce.expa==1){ce.expa=2;ce.dir=0;ce.ft=0;ce.maxfth=30;ce.t=setInterval(function(){Adonion.showbd("close");},50)}};
	frag.appendChild(div0);
	if(ce.oldm>0)
	{
		var div_m=document.createElement("div");
		div_m.id="adonionexps_"+ce.rand;
		div_m.style.display="block";
		div_m.style.height=ce.oldm+"px";
		div_m.style.visibility="hidden";
		frag.appendChild(div_m);
	}
	var div1=document.createElement("div");
	div1.id="adonionexp1_"+ce.rand;
	var fc="overflow:hidden;float:right;position:fixed !important; right:20px;position:absolute; z-index:9999995; top/**/:5px;top:expression(eval(document.compatMode && document.compatMode=='CSS1Compat')?5:document.body.scrollTop+5);_top:expression(eval(document.compatMode && document.compatMode=='CSS1Compat')?document.documentElement.scrollTop+5:document.body.scrollTop+5);";
	div1.setAttribute("style",fc);
	div1.style.cssText=fc;	
	div1.innerHTML="<img src='img/expand-btn.jpg'/>";
	div1.style.display="none";
	div1.onclick=function(){var ce=Adonion.expan;if (ce.expa===0) {scroll(0,0);ce.expa=2;div1.style.display="none";div0.style.display="";ce.dir=1;ce.ft=0;ce.maxfth=30;ce.t=setInterval(function(){Adonion.showbd("expand");},50)}};
	ce.t=setInterval(function(){Adonion.showbd("expand");},50);
	frag.appendChild(div1);
	b1.insertBefore(frag,b1.childNodes[0]);
}


Adonion.showbd=function(d,o)
{
	var el=[],ce=Adonion.expan,step=ce.step;
	el[0]=document.getElementById("adonionexp_"+ce.rand);
	el[1]=document.getElementsByTagName("body")[0];
	
	var h=parseInt(el[0].style.height,10);
	if(d=="close")
	{
			if(ce.dir===0)
			{
				h-=step;
				if(h>0)
				{
					el[0].style.height=h+"px";
					el[0].style.marginTop=(0-h)+"px";
					el[1].style.marginTop=h+"px";
				}
				else
				{
					el[0].style.height=Adonion.isIE?"1px":"0px";
					el[0].style.marginTop="0px";
					el[1].style.marginTop="0px";
					ce.dir=1;
					ce.ft+=1;
					ce.maxfth=ce.maxfth/2;					
				}
			}
			else
			{
				h+=step;
				if(h<ce.maxfth)
				{
					el[0].style.height=h+"px";
					el[0].style.marginTop=(0-h)+"px";
					el[1].style.marginTop=h+"px";
				}
				else
				{
					el[0].style.height=ce.maxfth+"px";
					el[0].style.marginTop=(0-ce.maxfth)+"px";
					el[1].style.marginTop=ce.maxfth+"px";
					ce.dir=0;
				}
			}
			if(ce.ft>ce.maxft)
			{
				clearInterval(ce.t);
				document.getElementById("adonionexp1_"+ce.rand).style.display="";
				el[0].style.display="none";
				ce.ft=0;
				ce.expa=0;
			}
	}
	else if(d=="expand")
	{
			if(ce.dir===1)
			{
				h+=step;
				if(h<ce.maxh)
				{
					el[0].style.height=h+"px";
					el[0].style.marginTop=(0-h)+"px";
					el[1].style.marginTop=h+"px";
				}
				else
				{
					el[0].style.height=ce.maxh+"px";
					el[0].style.marginTop=(0-ce.maxh)+"px";
					el[1].style.marginTop=ce.maxh+"px";
					ce.dir=0;
					ce.ft+=1;
					ce.maxfth=ce.maxfth/2;
				}
			}
			else
			{
				h-=step;
				if(h>ce.maxh-ce.maxfth)
				{
					el[0].style.height=h+"px";
					el[0].style.marginTop=(0-h)+"px";
					el[1].style.marginTop=h+"px";
				}
				else
				{
					el[0].style.height=(ce.maxh-ce.maxfth)+"px";
					el[0].style.marginTop=(ce.maxfth-ce.maxh)+"px";
					el[1].style.marginTop=(ce.maxh-ce.maxfth)+"px";
					ce.dir=1;
				}
			}
			if(ce.ft>ce.maxft)
			{
				clearInterval(ce.t);
				ce.ft=0;
				ce.expa=1;
			}		
		
	}
}


Adonion.ProxyInter.prototype.show = function() {
  // check freq cap
  var internum = Adonion.getCookie("internum"); 
  if ( typeof(internum)=="undefined" ||  internum==null ) internum = 0;
  if ( this.freq_cap_num >=0 && internum>=this.freq_cap_num ) {
    // reach freq cap limit
    return;
  }
  // check start display point
  var expires = new Date();
  expires.setTime(expires.getTime() + 72 * 60 * 60  * 1000 );   
  var ao_s = Adonion.getCookie("ao_s"); 
  if ( typeof(ao_s)=="undefined" ||  ao_s==null ) ao_s = 0;
  ao_s = parseInt(ao_s) + 1;
  Adonion.setCookie ("ao_s", ao_s,expires, "/"); 
  if ( ao_s % this.start_ad_at ) {
    // we won't show its this time
    return;
  }
  if (this.isSupportedBrowser() ) {
    // search interstitial ad
    // search pop ad, this will call back doIts
    Adonion.rcall("/serving/searchits.php", {
      ob: this.zone.id,
      zone_id: this.zone.zone_id,
      user_id: this.zone.user_id,
      site_id: this.zone.site_id,
      f: this.flag,
      ref: Adonion.ref
    }, {
      token: this.token
    }, false);
  }
}

Adonion.ProxyInter.prototype.isSupportedBrowser = function(){
  this.isMinIE6 = false;
  this.isMinMoz1_5 = false;
  
  var ao_sUserAgent = navigator.userAgent;
  var ao_fAppVersion = parseFloat(navigator.appVersion);
  var ao_isKHTML = ao_sUserAgent.indexOf('KHTML') > -1 ||
  ao_sUserAgent.indexOf('Konqueror') > -1 ||
  ao_sUserAgent.indexOf('AppleWebKit') > -1;
  var ao_isMoz = ao_sUserAgent.indexOf("Gecko") > -1 && !ao_isKHTML;
  var ao_isMinMoz1 = ao_isMinMoz1_4 = false;
  var ao_isOpera = ao_sUserAgent.indexOf('Opera') > -1;
  var ao_isIE = ao_sUserAgent.indexOf('compatible') > -1 &&
  ao_sUserAgent.indexOf('MSIE') > -1 &&
  !ao_isOpera;
  var ao_isMinIE4 = ao_isMinIE5 = ao_isMinIE5_5 = false;
  
  if (ao_isMoz) {
    var ao_reMoz = new RegExp("rv:(\\d+\\.\\d+(?:\\.\\d+)?)");
    ao_reMoz.test(ao_sUserAgent);
    ao_isMinMoz1 = this.cmpVer(RegExp["$1"], "1.0") >= 0;
    ao_isMinMoz1_4 = this.cmpVer(RegExp["$1"], "1.4") >= 0;
    this.isMinMoz1_5 = this.cmpVer(RegExp["$1"], "1.5") >= 0;
  }
  if (ao_isIE) {
    var ao_re_IE = new RegExp('MSIE (\\d+\\.\\d+)');
    ao_re_IE.test(ao_sUserAgent);
    var ao_fIEVersion = parseFloat(RegExp['$1']);
    ao_isMinIE4 = ao_fIEVersion >= 4;
    ao_isMinIE5 = ao_fIEVersion >= 5;
    ao_isMinIE5_5 = ao_fIEVersion >= 5.5;
    this.isMinIE6 = ao_fIEVersion >= 6.0;
  }
  if ( this.isMinIE6 || this.isMinMoz1_5) {
    return true;
  }
  return false;
}

Adonion.ProxyInter.prototype.cmpVer = function(sVersion1, sVersion2) {
  var aVersion1 = sVersion1.split('.');
  var aVersion2 = sVersion2.split('.');
  if (aVersion1.length > aVersion2.length) {
    for (var i=0; i < aVersion1.length - aVersion2.length; i++) {
      aVersion2.push('0');
    }
  } else if (aVersion1.length < aVersion2.length) {
    for (vari=0; i < aVersion2.length - aVersion1.length; i++) {
      aVerison1.push('0');
    }
  }

  for (var i=0; i < aVersion1.length; i++) {
    if (aVersion1[i] < aVersion2[i]) {
      return -1;
    } else if (aVersion1[i] > aVersion2[i]) {
      return 1;
    }
  }
  return 0;
}

Adonion.ProxyInter.prototype.updateInterNum = function() {
  var internum = Adonion.getCookie("internum");
  if ( typeof(internum)=="undefined" ||  internum==null ) internum = 0;
	else internum = parseInt(internum);
	if (internum > 0) internum += 1;
	else internum = 1;
  if ( this.freq_cap_hr == 0 ) {
    // per session cap
    Adonion.setCookie("internum", internum, null, "/");
  } else {
    var today=new Date();
    var expire=new Date();
    expire.setTime(today.getTime()+3600000*this.freq_cap_hr);
    Adonion.setCookie("internum", internum, expire, "/")
  }
}

Adonion.ProxyInter.prototype.doIts = function(data) {
  this.p = data["p"];
  this.uid = data["uid"];
  this.updateInterNum();
  this.iframe_url = data["url"];
  this.bookmark_url = data["bookmark"];
  this.background_color = this.logo_bg_color;
  this.publisher_name = "<a href=\"http://www.adonion.com\">Adonion.com</a>";
  this.advertiser_name = "";
  this.ad_text_headline = "";
  this.ad_text_body = "";
  this.skip_this_ad = '<img style="border:none;display:inline;margin:0;padding:0;background-color:transparent;" src="'+Adonion.imgBase+'/skip_general.gif" alt="Skip this ad &gt;" />';
  this.publisher_logo = this.makePubLogo();
  this.advertiser_logo = "";
  this.background_image = "none";
  this.remove_object_tags = this.get_remove_objects_tag();
  this.span_id = "AdonionInterstitial" + Math.round(Math.random()*99999);
  this.shown = false;
  this.outer_span_id = "AdonionInterstitialOuterSpan_" + Math.round(Math.random()*999999999);
  this.inner_span_id = "AdonionInterstitialInnerSpan_" + Math.round(Math.random()*999999999);
  this.bar_id = "AdonionInterstitialBar_" + Math.round(Math.random()*999999999);
  this.ad_iframe_id = "AdonionInterstitialAdIframe_" + Math.round(Math.random()*999999999);
  this.bumper_id = "AdonionInterstitialMsg_" + Math.round(Math.random()*999999999);
  this.object_tags = new Array();
  this.embed_tags = new Array();
  this.iframe_tags = new Array();
  this.select_tags_visibility = new Array();
  this.begin_time = {};
  this.view_time = 0;
  this.bookmarked = 0;
  this.onscroll = function(){};
  this.body_margin = ""; // used only by IE
  this.op = 100;
  Adonion.addEl("span", this.span_id);
  
  if ( ! this.shown && ( window.parent == window.self || this.frame == "true" )) {
    this.shown = true;
    Adonion.onload(this.zone.id, "load_iframe", {});
  }
}

Adonion.ProxyInter.prototype.makePubLogo = function() {
  if ( this.logo_type == "img" && this.logo_url ) 
  {
    return '<img src="' + this.logo_url + '" alt="'+ this.logo_text+ '" />';
  } else {
    return this.logo_text;
  }
}

Adonion.ProxyInter.prototype.get_remove_objects_tag = function () {
   var adonionLeaveObjectsAlone;
   if ( adonionLeaveObjectsAlone ) return false; 
   else return true;
}

Adonion.ProxyInter.prototype.load_iframe = function() {
   var ifr = document.createElement('IFRAME');
   ifr.id = this.ad_iframe_id;
   ifr.src = this.iframe_url;
   ifr.height = '1px';
   ifr.width = '1px';
   ifr.marginWidth = '0';
   ifr.marginHeight = '0';
   ifr.vSpace = '0';
   ifr.hSpace = '0';
   ifr.frameBorder = '0';
   var outer_sp = document.createElement('ispan');
   outer_sp.id = this.outer_span_id;
   outer_sp.display = 'inline';
   var inner_sp = document.createElement('ispan');
   inner_sp.id = this.inner_span_id;
   inner_sp.display = 'inline';
   outer_sp.appendChild(inner_sp);
   inner_sp.appendChild(ifr);
   outer_sp.display = 'absolute';
   outer_sp.style.top = '-2px';
   outer_sp.style.left = '-2px';
   document.getElementsByTagName('body')[0].appendChild(outer_sp);
   Adonion.timeout(this.zone.id, "fire", 1000);
}

Adonion.ProxyInter.prototype.fire = function() {
  this.init();	
  Adonion.timeout(this.zone.id, "give_credit", 5000);	
	Adonion.timeout(this.zone.id, "show_skip", 6000 );
}

Adonion.ProxyInter.prototype.init = function() {
  this.begin_time = new Date();
  this.save_and_overwrite_events();
  if ( this.isMinIE6 ) this.IE_save_and_overwrite_events(); // IE only
  this.create_layer();
  scrollTo(0,0);
  this.opacity = 0;
  this.delta = 2;
  this.expect_time = new Date().getTime() + 1200;
  this.fade_in();
  this.populate_header();
  this.populate_msg();
  window.onresize = Adonion.its_resize_iframe;
}

Adonion.ProxyInter.prototype.save_and_overwrite_events = function () {
  // IE doesn't respect overflow when attached to the body...
  if (window.onscroll) this.old_onscroll = window.onscroll;
  window.onscroll = function () { scrollTo(0,0); };
  if (window.onunload) this.old_onunload = window.onunload;
  window.onunload = Adonion.its_onunload;
}

Adonion.ProxyInter.prototype.onunload = function() {
  this.gather_and_send_statistics('unload');
  if ( typeof(this["old_onunload"]) == "function" ) {
    this.old_onunload();
  }
}

Adonion.ProxyInter.prototype.gather_and_send_statistics = function (exit_how) {
  window.onunload = '';
  return;
}

Adonion.ProxyInter.prototype.IE_save_and_overwrite_events = function () {
  this.body_margin = document.body.style.margin;
  document.body.style.margin = 0;
}

Adonion.ProxyInter.prototype.create_layer = function () {
  document.getElementsByTagName('body')[0].style.overflow = 'hidden';
  this.hide_all_content();

  //create outer span
  var IEBox = document.getElementById(this.outer_span_id);
  IEBox.style.display = 'block';
  IEBox.style.position = 'absolute';
  IEBox.style.width = '100%';
  IEBox.style.height = '100%';
  IEBox.style.left = '0px';
  IEBox.style.top = '0px';
  IEBox.style.background = 'white';
  IEBox.style.zIndex = 32767;
  if ( this.isMinIE6 ) IEBox.style.filter = 'alpha(opacity=0)';
  else if ( this.isMinMoz1_5 ) {
    IEBox.style.MozOpacity = 0 + '';
    IEBox.style.opacity = 0 + '';
  }
  IEBox.className = 'noadonioninline';

  //create inner span
  var Layer = document.getElementById(this.inner_span_id);
  Layer.style.display = 'block';
  Layer.style.position = 'fixed';
  Layer.style.width = '100%';
  Layer.style.height = '100%';
  Layer.style.left = '0px';
  Layer.style.top = '0px';
  Layer.style.background = 'white';
  Layer.style.zIndex = 32767;
  Layer.className = 'noadonioninline';
}

Adonion.ProxyInter.prototype.hide_all_content = function () {
  if ( this.isMinIE6 ) { // IE only
    this.remove_iframes();
    this.hide_select_tags();
  }
  if ( this.remove_object_tags ) {
    this.hide_objects();
    this.hide_embeds();
  }
}

Adonion.ProxyInter.prototype.remove_iframes = function () { // used only by IE 
  var iframe_tags = document.getElementsByTagName('IFRAME');

  for (var i = (iframe_tags.length -1); i > -1; i--) {
    if (iframe_tags[i].id == this.ad_iframe_id ) continue; // don't remove the FPA iframe
    var span_id = "Adonion_Span_" + Math.floor(Math.random()*999999999);
    var place_holder_node = iframe_tags[i];

    var surrounding_span = document.createElement('SPAN');
    surrounding_span.id = span_id;
    surrounding_span.name = span_id;

    iframe_tags[i].parentNode.replaceChild(surrounding_span, iframe_tags[i]);
    surrounding_span.appendChild(place_holder_node);

    this.iframe_tags[i] = new Array(2);
    this.iframe_tags[i][0] = span_id;
    this.iframe_tags[i][1] = surrounding_span.innerHTML;

    surrounding_span.innerHTML = '';
  }
}

Adonion.ProxyInter.prototype.hide_select_tags = function () {  // used only by IE
  var select_tags = document.getElementsByTagName('SELECT');
  for (var i = 0; i < select_tags.length; i++) {
    this.select_tags_visibility[i] = Adonion.get_visibility(select_tags[i]);
    select_tags[i].style.display = 'none';
  }
}

Adonion.ProxyInter.prototype.hide_objects = function () {
  var object_tags = document.getElementsByTagName('OBJECT');

  for (var i = (object_tags.length - 1); i > -1; i--) {
    if ( this.isMinIE6 ) {
      var object_id = Adonion.get_obj_id(object_tags[i]);
      var param_tags = document.getElementsByTagName('PARAM');
      var param_tags_str = '';
      for (var j = 0; j < param_tags.length; j++) { 
        if (param_tags[j].parentNode.id == object_id) param_tags_str += param_tags[j].outerHTML;
      }
    }

    var span_id = "Adonion_Span_" + Math.floor(Math.random()*999999999);
    var place_holder_node = object_tags[i];
      
    var div_width = Adonion.find_width(object_tags[i]);
    var div_height = Adonion.find_height(object_tags[i]);

    var surrounding_span = document.createElement('SPAN');
    surrounding_span.id = span_id;
    surrounding_span.name = span_id;
    surrounding_span.style.height = div_height + 'px';
    surrounding_span.style.width = div_height + 'px';

    object_tags[i].parentNode.replaceChild(surrounding_span, object_tags[i]);
    surrounding_span.appendChild(place_holder_node);

    this.object_tags[i] = new Array(2);
    this.object_tags[i][0] = span_id;
    this.object_tags[i][1] = surrounding_span.innerHTML;
    if ( this.isMinIE6 ) this.object_tags[i][1] = this.object_tags[i][1].replace('>', '>' + param_tags_str); // IE only
    surrounding_span.innerHTML = '';
  }
}

Adonion.ProxyInter.prototype.hide_embeds = function () {
  var embed_tags = document.getElementsByTagName('EMBED');

  for (var i = (embed_tags.length - 1); i > -1; i--) {
    var span_ID = "Adonion_Span_" + Math.round(Math.random()*999999999);
    var place_holder_node = embed_tags[i];

    var div_width = Adonion.find_width(embed_tags[i]);
    var div_height = Adonion.find_height(embed_tags[i]);

    var surrounding_span = document.createElement('span');
    surrounding_span.id = span_ID;
    surrounding_span.name = span_ID;

    embed_tags[i].parentNode.replaceChild(surrounding_span, embed_tags[i]);
    surrounding_span.appendChild(place_holder_node);
    surrounding_span.style.height = div_height + 'px';
    surrounding_span.style.width = div_height + 'px';

    this.embed_tags[i] = new Array(2);
    this.embed_tags[i][0] = span_ID;
    this.embed_tags[i][1] = surrounding_span.innerHTML;

    surrounding_span.innerHTML = '';
  }
}

Adonion.ProxyInter.prototype.fade_in = function() { 
  this.opacity += this.delta;
  this.delta += 2;
  var actual_time = new Date().getTime();
 
  if ( (actual_time - this.expected_time > 0) || this.opacity > 100 ) {
    this.change_opacity(100, this.outer_span_id); 
  } else {
    this.change_opacity(this.opacity, this.outer_span_id);
    Adonion.timeout(this.zone.id, "fade_in", 100);
  }
}

Adonion.ProxyInter.prototype.change_opacity = function (opacity, id) {
  var obj = document.getElementById(id).style; 
  if ( opacity > 99 ) {
    obj.filter = '';
    obj.MozOpacity = 1;
    obj.opacity = 1;
  } else {
    obj.filter = 'alpha(opacity=' + opacity + ')';
    obj.MozOpacity = ( opacity / 100 );
    obj.opacity = ( opacity / 100 );
  }
}

Adonion.ProxyInter.prototype.populate_header = function () {
  var header = document.createElement('ispan');
  header.dir = 'ltr';
  header.style.zIndex = '323767';
  header.style.width = '100%';
  header.style.padding = '0px';
  header.style.display = 'block';
  header.style.margin = '0px';
  header.style.position = 'relative';
  header.style.background = this.logo_bg_color + ' ' + this.background_image;
  header.innerHTML = '<table cellspacing="0" cellpadding="0" width="100%" style="width:100%;border:0px;padding:0px;margin:0px;display:block;visibility:visible;background-color:transparent;"><tr><td valign="middle" align="left" style="padding:10px 0 10px 15px;font-size:25px;white-space:nowrap;background-color:transparent;">' +
    this.publisher_logo +
    '</td><td valign="middle" align="right" style="vertical-align:middle;padding:10px 15px 10px 0;text-align:right;width:100%;background-color:transparent;"><a href="#" style="font-family:Arial,Helvetica,sans-serif;color:#00f;font-weight:bold;text-decoration:underline;font-size:13px;border:none;visibility:hidden;background-color:transparent;" onClick="Adonion.its_hide_intermission(); return false;" id="AdonionSkipThisAd">' +
    this.skip_this_ad + '</a></td></tr></table>';

  var bar = document.createElement('ispan');
  bar.id = this.bar_id;
  bar.style.background = '#ffffff url(\'' + Adonion.imgBase + '/bar.gif\') repeat-x top left';
  bar.style.fontFamily = 'Arial, Helvetica, sans-serif';
  bar.style.fontSize = '12px';
  bar.style.color = '#333333';
  bar.style.display = 'block';
  bar.style.margin = '0px';
  bar.style.whiteSpace = 'nowrap';
  bar.style.textAlign = 'left';
  bar.style.borderWidth = '1px 0';
  bar.style.borderColor = '#aeaeae';
  bar.style.borderStyle = 'solid';
  bar.style.padding = '5px 15px';
  bar.innerHTML = '<span style="float:right;margin:0;padding:0;font-size:12px;"><a href="javascript:void(0)" style="font-family:Arial,Helvetica,sans-serif;color:#00f;font-weight:bold;text-decoration:underline;font-size:12px;margin:0;padding:0;display:inline;background-color:transparent;text-transform:none;cursor:pointer;" onclick="Adonion.its_bookmark();return(false);">Bookmark This Ad</a>&nbsp;&nbsp;|&nbsp;&nbsp;<a href="javascript:void(0)" style="font-family:Arial, Helvetica, sans-serif;color:#00f;text-decoration:underline;margin:0;padding:0;display:inline;font-weight:bold;background-color:transparent;text-transform:none;cursor:pointer;" onClick="Adonion.its_openAdHere(); return false;">Your Ad Here</a></span>' +
    this.text_headline_and_body();

  var span = document.getElementById(this.inner_span_id);
  var ifr = document.getElementById(this.ad_iframe_id);
  span.insertBefore(bar, ifr);
  span.insertBefore(header, bar);
}

Adonion.ProxyInter.prototype.hide_intermission = function () {
  this.gather_and_send_statistics('skip');
  window.onresize = "";

  var interstitial_node = document.getElementById(this.outer_span_id);
  var interstitial_node_parent = interstitial_node.parentNode;
  interstitial_node_parent.removeChild(interstitial_node);

  document.getElementsByTagName("body")[0].style.overflow = 'auto';
  this.reveal_all_content(document.getElementsByTagName("body")[0]);
  this.restore_events();
  if ( this.isMinIE6 ) this.IE_restore_events(); // IE only
}

Adonion.ProxyInter.prototype.reveal_all_content = function () {
  if ( this.isMinIE6 ) { // IE only
    this.show_iframes(); 
    this.show_select_tags();
  }
  if ( this.remove_object_tags ) {
    this.show_objects();
    this.show_embeds();
  }
}

Adonion.ProxyInter.prototype.show_iframes = function () {
  for (var i = 0; i < this.iframe_tags.length; i++) {
    var adonion_span_tag = document.getElementById(this.iframe_tags[i][0]);
    adonion_span_tag.innerHTML = this.iframe_tags[i][1];
  }
}

Adonion.ProxyInter.prototype.show_select_tags = function () {
  var select_tags = document.getElementsByTagName('SELECT');
  for (var i = 0; i < select_tags.length; i++) {
    select_tags[i].style.display =  this.select_tags_visibility[i];
  }
}

Adonion.ProxyInter.prototype.show_objects = function () {
  for (var i = 0; i < this.object_tags.length; i++) {
    var adonion_span_tag = document.getElementById(this.object_tags[i][0]);
    adonion_span_tag.innerHTML = this.object_tags[i][1];
  }
}

Adonion.ProxyInter.prototype.show_embeds = function () {
  for (var i = 0; i < this.embed_tags.length; i++) {
    var adonion_span_tag = document.getElementById(this.embed_tags[i][0]);
    adonion_span_tag.innerHTML = this.embed_tags[i][1];
  }
}

Adonion.ProxyInter.prototype.restore_events = function() {
  if ( typeof(this["old_onscroll"]) == "function" ) {
    window.onscroll = this.old_onscroll;
  } else {
    window.onscroll = "";
  }
  if ( typeof(this["old_onunload"]) == "function" ) {
    window.onunload = this.old_onunload;
  } else {
    window.onunload = "";
  }
}

Adonion.ProxyInter.prototype.IE_restore_events = function () {
  document.body.style.margin = this.body_margin;
}

Adonion.ProxyInter.prototype.bookmark = function() {
  this.bookmarked=1;
  this.bookmark_url_func("-1_advertiser", this.bookmark_url);  
}

Adonion.ProxyInter.prototype.bookmark_url_func = function (title, url) {
  if ( title == '-1_advertiser' ) {
    this.advertiser_name = this.advertiser_name.replace(/&#39;/g, "%27"); 
    title = unescape(this.advertiser_name);
  }
  if (document.all) {
    window.external.AddFavorite(url, title);
  } else if (window.sidebar) {
    window.sidebar.addPanel(title, url, "");
  }
}

Adonion.ProxyInter.prototype.openAdPage = function () {
  window.open(this.bookmark_url);
}

Adonion.ProxyInter.prototype.openAdHere = function() {
  var url = ( this.zone.site_id ) ? 
   'http://member.adonion.com/market/offer/site/id/' + this.zone.site_id : 
   'http://www.adonion.com';
  window.open(url);
}

Adonion.ProxyInter.prototype.text_headline_and_body = function () {
  var headline_and_text = "";
  var intermission_header = "";
  var intermission_text = "";

  if ( ! this.ad_text_headline ) intermission_header = this.advertiser_name;
  else intermission_header = this.ad_text_headline;

  intermission_header = '<a href="#" style="color:#0000FF;text-decoration:underline;background-color:transparent;text-transform:none;cursor:pointer;font-weight:bold;" title="go to ' + intermission_header + '" onClick="Adonion.its_openAdPage(); return false;">' + intermission_header + '</a>';
 
  if ( ! this.ad_text_headline && ! this.ad_text_body ){
	  headline_and_text = "Advertisement powered by Adonion.com";
	}
  
  if ( this.ad_text_headline && ! this.ad_text_body )
    headline_and_text = intermission_header;

  if ( this.ad_text_body )
    headline_and_text = intermission_header + ' &mdash; ' + this.ad_text_body;

  return headline_and_text;
}

Adonion.ProxyInter.prototype.populate_msg = function () {
  var div = document.createElement('div');
  div.id = this.bumper_id;
  div.style.display = 'block';
  div.style.height = this.calculate_iframe_height();
  div.style.width  = this.calculate_iframe_width();
  div.style.margin = '12% 0 0 0';
  div.style.textAlign = 'center';
  var h2 = document.createElement('abh2');
  h2.style.fontFamily = "'Trebuchet MS',Arial,sans-serif";
  h2.style.display = 'block';
  h2.style.fontSize = '30px';
  h2.style.color = "#666666";
  h2.style.textAlign = "center";
  h2.style.margin = "0 0 20px 0";
  h2.style.padding = "0";
  h2.innerHTML = ' Loading ... ';
  div.appendChild(h2);
  var h1 = document.createElement('abh1');
  h1.style.fontFamily = "'Trebuchet MS',Arial,sans-serif";
  h1.style.display = 'block';
  h1.style.fontSize = '75px';
  h1.style.color = "#000";
  h1.style.textAlign = "center";
  h1.style.margin = "0";
  h1.style.padding = "0";
  h1.style.borderWidth = "0";
  if (this.advertiser_logo != '') {
    var img = document.createElement('img');
    img.src = this.advertiser_logo;
    img.alt = this.advertiser_name;
    img.style.padding = '0';
    img.style.margin = '0';
    img.style.border = 'none';
    img.style.position = 'relative';
    h1.appendChild(img);
  } else {
    h1.innerHTML = this.advertiser_name;
    h1.style.lineHeight = "80px";
  }
  div.appendChild(h1);
  document.getElementById(this.inner_span_id).appendChild(div);
  Adonion.timeout(this.zone.id, "fade_out", 1000);
}

Adonion.ProxyInter.prototype.fade_out = function () {
  var expected_time = new Date().getTime() + 500;
  this.start_fade_out_interval(100, 2, expected_time);
}

Adonion.ProxyInter.prototype.start_fade_out_interval = function ( opacity, delta, expected_time ) {
  this.interval = Adonion.interval(this.zone.id, "fade_out_interval",100);
}

Adonion.ProxyInter.prototype.fade_out_interval = function () {
  this.change_opacity(this.op, this.bumper_id);
  this.op = this.op - 10; 
    
  if (this.op <= 0) {
    clearInterval(this.interval);
    document.getElementById(this.bumper_id).parentNode.removeChild(document.getElementById(this.bumper_id));      
    this.populate_iframe();
  }
}

Adonion.ProxyInter.prototype.calculate_iframe_height = function () {
  var height = 0;
  var header_height = Adonion.find_Pos_Y(document.getElementById(this.bar_id)) + 26;
  if( typeof( window.innerHeight ) == 'number' ) {
    height = window.innerHeight;
  } else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
    height = document.documentElement.clientHeight;
  } else if(document.body && (document.body.clientWidth || document.body.clientHeight)) {
    height = document.body.clientHeight;
  }
  if (this.isMinIE6) header_height -= 5; // for some reason IE gives a weird header size
  return height - header_height;
}

Adonion.ProxyInter.prototype.calculate_iframe_width = function () {
  var width = 0;
  if( typeof( window.innerWidth ) == 'number' ) {
    width = window.innerWidth;
  } else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
    width = document.documentElement.clientWidth - 1;
  } else if(document.body && (document.body.clientWidth || document.body.clientHeight)) {
    width = document.body.clientWidth - 1;
  }
  return width;
}

Adonion.ProxyInter.prototype.populate_iframe = function () {
  var bdy = document.getElementsByTagName('body')[0];
  var ifr = document.getElementById(this.ad_iframe_id);
  ifr.style.display = 'block';
  ifr.style.position = 'relative';
  ifr.scrolling = 'auto';
  this.resize_iframe();
}

Adonion.ProxyInter.prototype.resize_iframe = function () {
  if ( document.getElementById(this.ad_iframe_id) ) {
    document.getElementById(this.ad_iframe_id).width = this.calculate_iframe_width();
    document.getElementById(this.ad_iframe_id).height = this.calculate_iframe_height();
  }
}

Adonion.ProxyInter.prototype.give_credit = function() {
  Adonion.rcall("/serving/logits.php", {uid:this.uid}, {p:this.p}, false);
}

Adonion.ProxyInter.prototype.show_skip = function() {
	window.onbeforeunload=function(){};
  document.getElementById('AdonionSkipThisAd').style.visibility = 'visible';
}

// bootstrap first time
Adonion.bootstrap(true);
