function DisplayAd(ajax_url,zoneareas,zones,settings) {
  this.ajax_url = ajax_url;
  this.zoneareas = zoneareas;
  this.zonearea_vertmargin = null;
  this.zonearea_horzmargin = null;
  this.zones = zones;
  this.zone_vertmargin = null;
  this.zone_horzmargin = null;
  this.settings = settings;
  this.repeat_ads = null;
  this.charge_repeats = null;
  this.rotate_ads = null;
  this.rotate_secs = null;
  this.isadmin = null;
  this.adlist = null;
  this.repeatlist = new Array();

  if (typeof DisplayAd._initialized == "undefined") {

    DisplayAd.prototype.setAdmin = function (isadmin) {
      this.isadmin = isadmin;
    }

    DisplayAd.prototype.init = function () {
      var myDivs = document.getElementsByTagName('div');

      if (this.settings) {
        this.setSettings();
      }

      if (this.zoneareas) {
        this.setZoneareaMargins();
        this.setZoneareaPDimensions();
      }

      if (this.zones.margins) {
        this.setZoneMargins();
      }

      if (this.repeat_ads) {
        this.initRepeatingAds(this);
      }


      if (this.rotate_ads) {
        //this.startRotate();
        //addEvent(window,'blur',display_ad.stopRotate,false);
        //addEvent(window,'focus',display_ad.startRotate,false);
      }
      if (this.repeatlist) {
        this.sendRepeatList(this);
      }

      this.setAdEmailLinks();
    }

    DisplayAd.prototype.sendRepeatList = function (pageObj) {
//showArray(pageObj.repeatlist);
      if (pageObj && pageObj.repeatlist) {
        var repeatlist = "";
        for (var i in pageObj.repeatlist) {
          if (pageObj.repeatlist[i].count) {
            repeatlist += i+"_"+pageObj.repeatlist[i].count+",";
          }
        }
      }
//alert(repeatlist);
      if (repeatlist) {
        var url = pageObj.ajax_url+"&ajax=1";
        url += "&repeatlist="+repeatlist;

  //alert(url);
        myContent = new AjaxContent(url);
        //myContent.setShowResponse(true);
        myContent.getContent();
      }
    }

    DisplayAd.prototype.setAdEmailLinks = function () {
      // set listeners on any ads that are linked to email

      var myDivs = document.getElementsByTagName('div');
      var myLinks = null;
      var i = 0;
      var j = 0;

      for (i=0;i<myDivs.length;i++) {
        if (myDivs[i].className.indexOf("adlandszone") != -1) {
          myLinks = myDivs[i].getElementsByTagName('a');
          for (j=0;j<myLinks.length;j++) {
            if (myLinks[j].className.indexOf("ademail") != -1) {
              myLinks[j].pageObj = this;
              addEvent(myLinks[j], 'click', this.logClickOnEmail, false);
            }
          }
        }
      }
    }

    DisplayAd.prototype.logClickOnEmail = function (e) {
      //this function only called when ad link type is to open email,
      // in which case we need to log impression other way than normal clickthroughs
      var el = null;
      el = getTarget(e);

      if (!el) {
        return;
      }
      var pageObj = (this.pageObj) ? this.pageObj : el.pageObj;
      if (el.nodeName != "a") {
        el = ascendDOM(el,"a");
      }
      if (el.className.indexOf("ademail") != -1) {
        var pieces = splitElId(el);
        var adid = pieces[1];
        var campaignid = pieces[2];
        var packageid = pieces[3];
        if (!adid || !campaignid || !packageid) {
          return;
        }
        var url = "adlands/?page=clickthrough&ad_id="+adid+"&campaign_id="+campaignid
                +"&package_id="+packageid+"&clicktype=email";

  //alert(url);
        myContent = new AjaxContent(url);
        myContent.getContent();
      }
    }

    DisplayAd.prototype.stopRotate = function () {
      //alert("stopRotate");
      //alert(DISPLAY_AD_TIMEOUT_ID);
      clearInterval(DISPLAY_AD_TIMEOUT_ID);
    }

    DisplayAd.prototype.startRotate = function () {
      var secs = display_ad.rotate_ads * 1000;
      DISPLAY_AD_TIMEOUT_ID = setInterval("display_ad.rotateAds()", secs);
    }

    DisplayAd.prototype.rotateAds = function () {
      var myDivs = document.getElementsByTagName('div');

      for (i=0;i<myDivs.length;i++) {
        if (myDivs[i].className.indexOf("adlandszone") != -1) {
          myDivs[i].pageObj = display_ad;
          display_ad.showAd(myDivs[i]);
        }
      }
    }

    DisplayAd.prototype.setSettings = function () {
      if (this.settings) {
        if (this.settings.repeat_ads) {
          this.repeat_ads = this.settings.repeat_ads;
        }
        if (this.settings.charge_repeats) {
          this.charge_repeats = this.settings.charge_repeats;
        }
        if (this.settings.rotate_ads) {
          this.rotate_ads = this.settings.rotate_ads;
        }
        if (this.settings.rotate_secs) {
          this.rotate_secs = this.settings.rotate_secs;
        }
      }
    }

    DisplayAd.prototype.initRepeatingAds = function (pageObj) {
      var myDivs = document.getElementsByTagName('div');
      var myZones = null;
      var pageObj = pageObj;
      var pieces = null;
      var zonearea_id = null;
      pageObj.adlist = new Object();
      pageObj.adlist.length = 0;
      pageObj.adlist.zoneareas = new Object();

      for (var i=0;i<myDivs.length;i++) {
        if (myDivs[i].className.indexOf("zonearea") != -1) {
          zonearea_id = pageObj.regZoneArea(myDivs[i],pageObj);
          if (zonearea_id) {
//alert("initRepeatingAds :"+zonearea_id);
            pageObj.regAds(zonearea_id,pageObj);
          }
        }
      }
      //alert(pageObj.adlist.length);
      //showArray(pageObj.adlist);
    }

    DisplayAd.prototype.regZoneArea = function (zonearea,pageObj) {
      if (!zonearea || !pageObj) {
        return;
      }

      var zonearea_id = zonearea.id;
      var pieces = null;
      var zone_id = null;
      var zone_count = 0;
      if (pageObj.adlist.zoneareas[zonearea_id]) {
        return null;
      }
      pageObj.adlist.length++;
      pageObj.adlist.zoneareas[zonearea_id] = new Object();
      pageObj.adlist.zoneareas[zonearea_id].length = 0;
      pageObj.adlist.zoneareas[zonearea_id].id = zonearea.id;
      pageObj.adlist.zoneareas[zonearea_id].zones = new Object();
      myZones = zonearea.getElementsByTagName('div');

      var adlist = null;

//alert("regZoneArea: "+zonearea_id+" :: "+zonearea.innerHTML);
      for (var i=0;i<myZones.length;i++) {
        if (myZones[i].className.indexOf("adlandszone") != -1) {
//showArray(myZones[i]);
          pieces = splitElId(myZones[i]);
          zone_id = pieces[3];
          if (pageObj.zones[zone_id]) {
            myZones[i].pageObj = pageObj;
            pageObj.setAdList(zonearea_id,myZones[i],pageObj);
          }
        }
      }
      return zonearea_id;
    }

    DisplayAd.prototype.setAdList = function (zonearea_id,myZone,pageObj) {
      var pieces = splitElId(myZone);
      var zone_id = pieces[3];
      pageObj.adlist.zoneareas[zonearea_id].zones[zone_id] = myZone;
      pageObj.adlist.zoneareas[zonearea_id].length++;
    }

    DisplayAd.prototype.regAds = function (zonearea_id,pageObj) {
      var zoneLength=0;
      var i=0;
      var myZone = null;
      var myPic = null;
      var ad_type = null;
      var calling_div_id = null;
      var pieces = null;
      var zone_id = null;
      var adinfo = null;
      var adinfo_pieces = null;
      var ad_type = null;
//alert("regAds start :"+zonearea_id);

      if (pageObj && pageObj.adlist && pageObj.adlist.zoneareas) {
//showArray(pageObj.adlist.zoneareas);
        if (pageObj.adlist.zoneareas[zonearea_id]) {
          zoneLength = pageObj.adlist.zoneareas[zonearea_id].length;
          zonearea_id = pageObj.adlist.zoneareas[zonearea_id].id;
          if (zoneLength>0 && pageObj.adlist.zoneareas[zonearea_id].zones) {
//showArray(pageObj.adlist.zoneareas[zonearea_id].zones);
            for (i in pageObj.adlist.zoneareas[zonearea_id].zones) {
              myZone = null;
              adinfo = null;
              myZone = pageObj.adlist.zoneareas[zonearea_id].zones[i];
              if (myZone) {
//alert("start i :"+i);
//alert(myZone.innerHTML);
//showArray(myZone);
                pieces = splitElId(myZone);
                zone_id = pieces[3];
                adinfo = myZone.getElementsByTagName('div');
//alert("myZone :"+zone_id);
                if (adinfo[0]) {
//alert("adinfo :"+zone_id);
//alert(adinfo[0]);
                  adinfo_pieces = splitElId(adinfo[0]);
                  ad_type = adinfo_pieces[0];

                  calling_div_id = myZone.id;
                  switch(ad_type) {
                    case "banner":
                      myPic = myZone.getElementsByTagName('img');
                      pic_width = myPic[0].width;
                      pic_height = myPic[0].height;
                      pageObj.logSize(zonearea_id,pageObj,ad_type,zone_id,pic_width,pic_height);
                      pageObj.setZoneCSS(calling_div_id,zonearea_id,ad_type);
                      break;
                    case "text":
                      pageObj.logSize(zonearea_id,pageObj,ad_type,zone_id);
                      pageObj.setZoneCSS(calling_div_id,zonearea_id,ad_type);
                      break;
                  }
                }
              }
              if (pageObj.zoneareas[zonearea_id].zonelist) {
                pageObj.zoneareas[zonearea_id].zonelist[zone_id] = 1;
              }
//alert("end i :"+i);
            }
//alert("regAds :"+zonearea_id);
            pageObj.checkIfRepeat(zonearea_id,pageObj);
          }
        }
      }
    }

    DisplayAd.prototype.setZoneareaMargins = function () {
      //used when admin is allowing repeat of ad blocks
      if (this.zoneareas['margins']) {
        if (this.zoneareas['margins'].vertmargin) {
          //sets vertical margin between repeating ad blocks
          this.zonearea_vertmargin = parseInt(zoneareas['margins'].vertmargin);
        } else {
          this.zonearea_vertmargin = null;
        }
        if (this.zoneareas['margins'].horzmargin) {
          //sets horizontal margin between repeating ad blocks
          this.zonearea_horzmargin = parseInt(zoneareas['margins'].horzmargin);
        } else {
          this.zonearea_horzmargin = null;
        }
      }
    }

    DisplayAd.prototype.setZoneMargins = function () {
      //used when admin is allowing repeat of ad blocks
      if (this.zones['margins']) {
        if (this.zones['margins'].vertmargin) {
          //sets vertical margin between repeating ad blocks
          this.zone_vertmargin = parseInt(zones['margins'].vertmargin);
        } else {
          this.zone_vertmargin = null;
        }
        if (this.zones['margins'].horzmargin) {
          //sets horizontal margin between repeating ad blocks
          this.zone_horzmargin = parseInt(zones['margins'].horzmargin);
        } else {
          this.zone_horzmargin = null;
        }
      }
    }

    DisplayAd.prototype.setZoneareaPDimensions = function () {
      var myDivs = document.getElementsByTagName('div');
      var myZones = null;
      var pieces = null;
      var zone_num = null;

      for (var i=0;i<myDivs.length;i++) {
        if (myDivs[i].className.indexOf("zonearea") != -1) {
          this.zoneareas[myDivs[i].id] = new Object();
          this.zoneareas[myDivs[i].id].parentWidth = this.getZoneAreaPWidth(myDivs[i].id);
          this.zoneareas[myDivs[i].id].parentHeight = this.getZoneAreaPHeight(myDivs[i].id);
          if (myDivs[i].className.indexOf("vertical") != -1) {
            this.zoneareas[myDivs[i].id].orientation = "vertical";
          } else {
            this.zoneareas[myDivs[i].id].orientation = "horizontal";
          }
          this.zoneareas[myDivs[i].id].zonelist = new Array();
          myZones = myDivs[i].getElementsByTagName('div');

          // determine last zone in zonearea so we know when to check to see if can repeat
          for (var j=0;j<myZones.length;j++) {
            if (myZones[j].className.indexOf("adlandszone") != -1) {
              pieces = splitElId(myZones[j]);
              zone_num = pieces[3];
              if (this.zones[zone_num]) {
                this.zoneareas[myDivs[i].id].zonelist[zone_num] = 0;
              }
            }
          }
//alert(this.zoneareas[myDivs[i].id].lastzone);
        }
      }
    }

    DisplayAd.prototype.setZoneCSS = function (el_id,zonearea_id,ad_type) {
      var el = getRef(el_id);
//alert(el_id);
      if (!el) {
        return;
      }
      var pageObj = el.pageObj;
      var pieces = splitElId(el);
      var zone_num = pieces[3];
      if (!pageObj.zones[zone_num]) {
        return;
      }
      var orientation = pageObj.zoneareas[zonearea_id].orientation;

//alert(el_id+":"+el.offsetHeight+":"+pageObj.zone_vertmargin);
      if (pageObj.zone_vertmargin && orientation == "vertical") {
        changeStyle(el.id,"marginBottom",pageObj.zone_vertmargin+"px");
      } else if (pageObj.zone_horzmargin && orientation == "horizontal") {
        changeStyle(el.id,"marginRight",pageObj.zone_horzmargin+"px");
      }
//alert(el.style["marginTop"]);
      switch (ad_type) {
        case "text":
          var zwidth = pageObj.zones[zone_num].zwidth;
          var zheight = pageObj.zones[zone_num].zheight;

          changeStyle(el.id,"width",zwidth+"px");
          changeStyle(el.id,"height",zheight+"px");
          break;
      }
    }

    DisplayAd.prototype.getZoneAreaPHeight = function (zonearea) {
      var myDiv = document.getElementById(zonearea);
      // check if we have any additionals vspace to handle
      var vspaceDivs = myDiv.getElementsByTagName('div');
      var pHeight = myDiv.parentNode.offsetHeight;
      //alert(pHeight);
      for (var i=0;i<vspaceDivs.length;i++) {
        if (vspaceDivs[i].className.indexOf("adlandsvspace") != -1) {
          pHeight -= vspaceDivs[i].offsetHeight;
        }
      }
      //alert(pHeight);
      return pHeight;
    }

    DisplayAd.prototype.getZoneAreaPWidth = function (zonearea) {
      var myDiv = document.getElementById(zonearea);
      var hspaceDivs = myDiv.getElementsByTagName('div');
      var pWidth = myDiv.parentNode.offsetWidth;
      //alert(pHeight);
      for (var i=0;i<hspaceDivs.length;i++) {
        if (hspaceDivs[i].className.indexOf("adlandshspace") != -1) {
          pWidth -= hspaceDivs[i].offsetWidth;
        }
      }
      return pWidth;
    }

    DisplayAd.prototype.getZoneAreaTotalHeight = function (zonearea) {
      var myDiv = document.getElementById(zonearea);
      if (!myDiv) return null;

      var myDivs = myDiv.getElementsByTagName('div');
      var pieces = null;
      var zone_num = null;

      var total_height = 0;
      for (var i=0;i<myDivs.length;i++) {
        if (myDivs[i].className.indexOf("adlandszone") != -1) {
          pieces = splitElId(myDivs[i]);
          zone_num = pieces[3];
          total_height += this.zoneareas[zone_num].zheight;
          if (this.zonearea_vertmargin) {
            total_height += this.zonearea_vertmargin;
          }
        }
      }
      return total_height;
    }

    DisplayAd.prototype.getZoneAreaTotalWidth = function (zonearea) {
      var myDiv = document.getElementById(zonearea);
      if (!myDiv) return null;

      var myDivs = myDiv.getElementsByTagName('div');
      var pieces = null;
      var zone_num = null;

      var total_width = 0;
      for (var i=0;i<myDivs.length;i++) {
        if (myDivs[i].className.indexOf("adlandszone") != -1) {
          pieces = splitElId(myDivs[i]);
          zone_num = pieces[3];
          total_width += this.zoneareas[zone_num].zwidth;
          if (this.zonearea_horzmargin) {
            total_width += this.zonearea_horzmargin;
          }
        }
      }
      return total_width;
    }

    DisplayAd.prototype.buildRepeatingAds = function (zonearea_id,pageObj) {
      var zonearea = document.getElementsByTagName('zonearea_id');
      var newZoneareas = new Array();
      var newZonearea = null;

      var excessHeight = pageObj.zoneareas[zonearea_id].parentHeight;
      var excessWidth = pageObj.zoneareas[zonearea_id].parentWidth;
      var orientation = pageObj.zoneareas[zonearea_id].orientation;
      var vertmargin = pageObj.zonearea_vertmargin;
      var horzmargin = pageObj.zonearea_horzmargin;

      switch (orientation) {
        case "vertical":
          if (excessHeight) {
            newZonearea = pageObj.buildRepeatingAdsVertical(pageObj,zonearea_id,excessHeight);
            if (newZonearea) {
              newZoneareas.push(newZonearea);
            }
          }
          break;
        case "horizontal":
          if (excessWidth) {

          }
          break;
      }
      if (newZoneareas) {
        for (i=0;i<newZoneareas.length;i++) {
          newZoneareas[i].className = "zonearea";
        }
      }
    }

    DisplayAd.prototype.buildRepeatingAdsVertical = function (pageObj,zonearea_id,excessHeight) {
      var zonearea = document.getElementById(zonearea_id);
      if (!zonearea) return null;
      if (!pageObj.zoneareas) return null;

      var pieces = splitElId(zonearea);
          //showArray(pieces);
      var zonearea_num = pieces[1];
      var area_count = pieces[2];

      var myParent = zonearea.parentNode;
      var parentHeight = 0;
      var myDivs = zonearea.getElementsByTagName('div');
      var zone_num = null;
      var i = 0;
      var parentHeight = excessHeight;
      var excessHeight = excessHeight;
      var zheight = 0;

      var firstZone = true;
      pieces = null;
      var newZonearea = null;
      var newZone = null;
      var newZones = new Array();
      var zone_spacer = null;
      var adinfo = null;
      var adinfo_pieces = null;
      var ademail = null; //only if there are ads that link to email
      var ademail_pieces = null; //only if there are ads that link to email
      var email_count = 0; //only if there are ads that link to email
      var ad_type = null;
      var campaignid = null;
      var packageid = null;
      var lastzone = pageObj.zoneareas[zonearea_id].lastzone;

//showArray(pageObj.zones);
//alert("buildRepeatingAdsVertical start "+parentHeight);
      while (excessHeight>0 && i<myDivs.length) {
        if (myDivs[i].className.indexOf("adlandszone") != -1) {
          pieces = splitElId(myDivs[i]);
          zone_num = pieces[3];
          if (pageObj.zones[zone_num]) {
            zheight = pageObj.zones[zone_num].zheight;


//alert(zone_num+":"+zheight+":"+excessHeight);
          if (zheight<excessHeight) {
            if (firstZone) {
              area_count++;
              newZonearea = document.createElement('div');
              if (pageObj.zonearea_vertmargin) {
                newZonearea.style.marginTop = pageObj.zonearea_vertmargin+"px";
              }
              newZonearea.id = "zonearea_"+zonearea_num+"_"+area_count;
              pageObj.zoneareas[newZonearea.id] = new Object();
              pageObj.zoneareas[newZonearea.id].zonelist = pageObj.zoneareas[zonearea_id].zonelist;
              firstZone = false;
//alert("newZonearea "+newZonearea.id);
            }
//showArray(pageObj.adlist.zoneareas[zonearea_id]);
            newZone = document.createElement('div');
            newZone.id = "zone_"+zonearea_num+"_"+area_count+"_"+zone_num+"_isrepeat";
//alert("newZone "+newZone.id);
            newZone.className = "adlandszone";
            if (pageObj.repeat_ads == 1 && pageObj.adlist.zoneareas[zonearea_id].zones[zone_num]) {
              // we are only repeating ads
              newZone.innerHTML = pageObj.adlist.zoneareas[zonearea_id].zones[zone_num].innerHTML;
//alert(newZone.innerHTML);
              adinfo = getChildByClass(newZone,"adinfo");
              if (adinfo) {
                ademail = getChildByClass(newZone,"ademail");
                if (ademail) {
                  //only if there are ads that link to email
                  ademail_pieces = splitElId(ademail);
                  email_adid = ademail_pieces[1];
                  email_campaignid = ademail_pieces[2];
                  email_packageid = ademail_pieces[3];
                  email_count = ++ademail_pieces[4];
                  ademail.id = "ademail_"+email_adid+"_"+email_campaignid+"_"+email_packageid+"_"+email_count;
                  ademail.pageObj = pageObj;
                  addEvent(ademail, 'click', pageObj.logClickOnEmail, false);
                }

                adinfo_pieces = splitElId(adinfo);
                ad_type = adinfo_pieces[0];
                campaignid = adinfo_pieces[1];
                packageid = adinfo_pieces[2];
                if (pageObj.repeatlist[campaignid+"_"+packageid]) {
                  pageObj.repeatlist[campaignid+"_"+packageid].count++;
                } else {
                  pageObj.repeatlist[campaignid+"_"+packageid] = new Object();
                  pageObj.repeatlist[campaignid+"_"+packageid].count = 1;
                }
                adinfo.id = ad_type+"_"+campaignid+"_"+packageid+"_"+area_count;
//alert(newZone.innerHTML);
//showArray(pageObj.repeatlist);
              }
            }
            newZonearea.appendChild(newZone);
            newZones.push(newZone);
          }
          excessHeight -= zheight;
          }
//alert(zone_num+" "+excessHeight);
        }
        i++;
      }
//alert("buildRepeatingAdsVertical end "+parentHeight);
      if (newZonearea) {
//alert("newZonearea :"+newZonearea.innerHTML);
        pageObj.zoneareas[newZonearea.id].parentHeight = parentHeight;
        pageObj.zoneareas[newZonearea.id].orientation = "vertical";
//alert(lastzone);
        if (pageObj.zoneareas[newZonearea.id].zonelist) {
          for (var j in pageObj.zoneareas[newZonearea.id].zonelist) {
            pageObj.zoneareas[newZonearea.id].zonelist[j] = 0;
          }
        }
        myParent.appendChild(newZonearea);
        if (newZones) {
          if (pageObj.repeat_ads == 1) {
//showArray(pageObj.adlist.zoneareas[zonearea_id].zones[zone_num]);
            pageObj.regZoneArea(newZonearea,pageObj);
            pageObj.regAds(newZonearea.id,pageObj);
          } else {
            // Disabling for now, only allowing for repeat ads, not repeat zones
            //for (i=0;i<newZones.length;i++) {
            //  newZones[i].pageObj = pageObj;
            //  pageObj.getAd(newZones[i]);
            //}
          }
        }
        return newZonearea;
      } else {
        return null;
      }
    }

    DisplayAd.prototype.startRepeat = function (zonearea_id,pageObj) {
      var excessHeight = pageObj.zoneareas[zonearea_id].parentHeight;
      var excessWidth = pageObj.zoneareas[zonearea_id].parentWidth;
      var orientation = pageObj.zoneareas[zonearea_id].orientation;
      var vertmargin = pageObj.zonearea_vertmargin;
      var horzmargin = pageObj.zonearea_horzmargin;

//alert("startRepeat start excessHeight "+excessHeight);
      switch (orientation) {
        case "vertical":
          excessHeight -= vertmargin;
          if (excessHeight>0) {
            pageObj.zoneareas[zonearea_id].parentHeight = excessHeight;
          }
          break;
        case "horizontal":
          excessWidth -= horzmargin;
          if (excessWidth>0) {
            pageObj.zoneareas[zonearea_id].parentWidth = excessWidth;
          }
          break;
      }
//alert("startRepeat end excessHeight "+excessHeight);
      if (excessHeight > 0) {
        pageObj.buildRepeatingAds(zonearea_id,pageObj);
      }
    }

    DisplayAd.prototype.logSize = function (zonearea_id,pageObj,ad_type,zone_id,pic_width,pic_height) {
      if (!pageObj.repeat_ads) {
        return;
      }
      if (!pageObj.zones[zone_id]) {
        return;
      }

      var total_height = pageObj.zoneareas[zonearea_id].parentHeight;
      var total_width = pageObj.zoneareas[zonearea_id].parentWidth;
      var orientation = pageObj.zoneareas[zonearea_id].orientation;
      var ad_height = 0;
      var ad_width = 0;

//alert("logSize zonearea_id "+zonearea_id);
//alert("logSize start "+zone_id+" "+total_height);
      switch (ad_type) {
        case "banner":
          ad_height = pic_height;
          ad_width = pic_width;
          break;
        case "text":
          ad_height = pageObj.zones[zone_id].zheight;
          ad_width = pageObj.zones[zone_id].zwidth;
          break;
      }
//alert(ad_height);
      if (pageObj.zone_vertmargin && orientation == "vertical") {
        ad_height += parseInt(pageObj.zone_vertmargin);
      } else if (pageObj.zone_horzmargin && orientation == "horizontal") {
        ad_width += parseInt(pageObj.zone_horzmargin);
      }

      switch (orientation) {
        case "vertical":
          total_height -= ad_height;
//alert("logSize end "+zone_id+" "+total_height);
          if (total_height<=0) {
            return;
          }
          pageObj.zoneareas[zonearea_id].parentHeight = total_height;
          break;
        case "horizontal":
          total_width -= ad_width;
          if (total_width<=0) {
            return;
          }
          pageObj.zoneareas[zonearea_id].parentWidth = total_width;
          break;
        default:
          return;
      }

//alert("logSize");
    }

    DisplayAd.prototype.checkIfRepeat = function (zonearea_id,pageObj) {
      if (!pageObj.repeat_ads) {
        return;
      }
//alert("checkIfRepeat :"+zonearea_id);
      if (pageObj.zoneareas[zonearea_id] && pageObj.zoneareas[zonearea_id].zonelist) {
//showArray(pageObj.zoneareas[zonearea_id].zonelist);
        for (var i in pageObj.zoneareas[zonearea_id].zonelist) {
          if (pageObj.zoneareas[zonearea_id].zonelist[i] < 1) {
            return false;
          }
        }
      }
//alert("repeating :"+zonearea_id);
      pageObj.startRepeat(zonearea_id,pageObj);
    }

    DisplayAd.prototype.getAd = function (el) {
      if (!el) {
        return;
      }
      var pageObj = el.pageObj;

      var pieces = splitElId(el);
      var param = pieces[3];
      var isrepeat = pieces[4]; //if we have repeating zones

      var url = pageObj.ajax_url+"&ajax=1&param="+param;
      if (isrepeat) {
        url += "&isrepeat=1";
      }
      url += "&calling_div="+el.id; //need this so we can populate from return xml

//alert(url);
      myContent = new AjaxContent(url);
      myContent.setCallObj(pageObj);
      myContent.setCallBack(pageObj.showAd);
      myContent.setReturnContent(true);
if (pageObj.isadmin) {
      //myContent.setShowResponse(true);
}
      //myContent.setShowResponse(true);
      myContent.getContent();
    }

    DisplayAd.prototype.showAd = function (results,pageObj) {
      //alert(results);
      var pageObj = pageObj.calling_obj;

      if (results && results.getElementsByTagName("zone_id")[0]) {
        var zone_id = results.getElementsByTagName("zone_id")[0].firstChild.nodeValue;
        var calling_div_id = results.getElementsByTagName("calling_div")[0].firstChild.nodeValue;
        var calling_div = document.getElementById(calling_div_id);
        var zonearea = calling_div.parentNode;
        if (results.getElementsByTagName("display_content")[0]) {
          // we have an ad to display

          var ad_type = results.getElementsByTagName("ad_type")[0].firstChild.nodeValue;
          var display_content = results.getElementsByTagName("display_content");

          //var theContent = getXMLElContent(display_content[0]);
          var theContent = results.getElementsByTagName("display_content")[0].firstChild.data;
          //alert(theContent);
          changeText(calling_div_id,theContent);

//alert(calling_div_id+" "+theContent);

          switch (ad_type) {
            case "text":
              pageObj.logSize(zonearea.id,pageObj,ad_type,zone_id);
              pageObj.setZoneCSS(calling_div_id,zonearea.id,ad_type);
              break;
            case "banner":
              if (results.getElementsByTagName("pic_width")[0].firstChild &&
                  results.getElementsByTagName("pic_height")[0].firstChild) {
                var pic_width = parseInt(results.getElementsByTagName("pic_width")[0].firstChild.nodeValue);
                var pic_height = parseInt(results.getElementsByTagName("pic_height")[0].firstChild.nodeValue);
              }
              pageObj.logSize(zonearea.id,pageObj,ad_type,zone_id,pic_width,pic_height);
              pageObj.setZoneCSS(calling_div_id,zonearea.id,ad_type);
              break;
          }
        }
      }
    }

    DisplayAd._initialized = true;
  }
}

function initPage_obj() {
  display_ad.initLinks();
}

var DISPLAY_AD_TIMEOUT_ID;
gcd_al = true;
