CC = {
  dropzones : [],
  widths : {"ca-2":"N","ca-4":"M","ca-6":"W","ca-8":"F"},
  ae_extjs : [],
  makeDragZone : function(el) {
    var dz = new Ext.dd.DragZone(Ext.get(el), {
      ddGroup : "portlet",
      getDragData: function(e) {
        return CC.getDrag(e);
      },
      getRepairXY: function() {
          return this.dragData.repairXY;
      }
    });
  },
  makeDropZone : function(el) {
    var g = Ext.get(el);
    var dz = new Ext.dd.DropZone(g, {
      ddGroup : "portlet",
      getTargetFromEvent: function(e) {
          //return e.getTarget('.ca-p');
          return this.getEl();
      },
      onNodeEnter : function(target, dd, e, data) {
        if (this.dropValid(target, data)) {
          Ext.fly(target).addClass('ca-h');
        }
      },
      onNodeOut : function(target, dd, e, data) {
        if (this.dropValid(target, data)) {
          Ext.fly(target).removeClass('ca-h');
        }
      },
      onNodeOver : function(target, dd, e, data) {
        if (this.dropValid(target, data)) {
          return Ext.dd.DropZone.prototype.dropAllowed;
        }
        return Ext.dd.DropZone.prototype.dropNotAllowed;
      },
      onNodeDrop : function(target, dd, e, data) {
        if (this.dropValid(target, data)) {
          CC.dropped(data.sourceEl, target);
          return true;
        }
        return false;
      },
      dropValid : function(target, data) {
        return ! (target == data.before || target == data.after);
      }
    });
    CC.dropzones.push(dz);
  },
  removeDropZone : function(el) {
    for (var i = 0; i < CC.dropzones.length; i++) {
      var dz = CC.dropzones[i];
      if (dz.getEl() == el) {
        CC.dropzones.splice(i, 1);
        return;
      }
    }
  },
  padDropZones : function() {
    for (var i = 0; i < CC.dropzones.length; i++) {
      var dz = CC.dropzones[i];
      var xel = Ext.get(dz.getEl());
      var top = 10, bottom = 1000;
      if (xel.prev()) {
        var h = xel.prev().getHeight();
        top = h/2;
      }
      if (xel.next()) {
        var h = xel.next().getHeight();
        bottom = h/2;
      }
      dz.setPadding(top, 8, bottom, 8);
    }
  },
  makeDD : function() {
    dragzones = Ext.DomQuery.select("div[class*=ca-d] div[class*=cp-t]");
    for (var i = 0; i < dragzones.length; i++) {
      CC.makeDragZone(dragzones[i]);
    }
    dropzones = Ext.DomQuery.select("div[class*=ca-p]");
    for (var i = 0; i < dropzones.length; i++) {
      CC.makeDropZone(dropzones[i]);
    }
    CC.padDropZones();
  },
  getDrag : function(e) {
    var sourceEl = e.getTarget(".ca-d", 10);
    if (sourceEl) {
      d = sourceEl.cloneNode(true);
      d.id = Ext.id();
      d.style.width = Ext.fly(sourceEl).getWidth() + "px";
      dc = Ext.DomQuery.selectNode("div.cp-c", d);
      if (dc) {
        dc.innerHTML="";
        Ext.fly(dc).setHeight(25);
      }
      var dragData;
      return dragData = {
        sourceEl: sourceEl,
        repairXY: Ext.fly(sourceEl).getXY(),
        ddel: d,
        before : sourceEl.previousSibling,
        after : sourceEl.nextSibling

      }
    }
  },
  dropped : function(s, t) {
    var spc = s.previousSibling;
    var td = t.parentNode.parentNode;
    var oldpos = spc.getAttribute("name").split("_");
    var newpos = t.getAttribute("name").split("_");
    t.parentNode.insertBefore(spc, t);
    t.parentNode.insertBefore(s, t);
    CC.movePortlet(s.id, td.className, oldpos[1], oldpos[2], newpos[1], newpos[2]);
    CC.padDropZones();
  },
  dropspot : function(cls) {
    var validcell = Ext.DomQuery.selectNode("td[class*="+cls+"]");
    if (validcell) {
      var validspacer = Ext.DomQuery.selectNode("div[class`=cp-s.ca-p]", validcell);
      if (validspacer) {
        var dspot = validspacer.getAttribute("name").split("_");
        return { "cell" : dspot[1], "seq" : dspot[2], "ins" : validspacer };
      }
    }
    return false; // no place to put a new app.
  },
  tabclick : function(name) {
    if (name.indexOf("http://") == 0) {
      document.location.href = name;
    } else {
      document.location.href = CC.address + name;
    }
  },
  subtabclick : function(menu) {
    CC.tabclick(menu.val);
  },
  changeGroup : function(el) {
    var v = el.getValue();
    if (v != 0) {
      document.location.href = "http://" + v + CC.page;
    }
  },
  tagClick : function(e) {
    var evt = window.event? window.event : e;
    targ = evt.srcElement ? event.srcElement : e.target;
    if (targ.tagName.toLowerCase() == "a") {
      Grouply.doSearch({tags:targ.innerHTML,group_ids:CC.sid});
    }
  },
  dj : function() {
    Grouply.deferredJs("");
  },
  loaded : function() {
    Grouply.setTimeZone();
    Grouply.executeReadies();
    CC.wrapsplit(document);
    CC.elipse(document);
    Grouply.makeHH();
    CC.makeDD();
    CC.dj();
  },
  movePortlet : function(odomid, columncls, oldcell, oldseq, newcell, newseq) {
    if (oldcell == newcell && newseq > oldseq) {
      newseq--;
    }
    var spacers = Ext.DomQuery.select("div[name^=spp_]");
    for (var i = 0; i < spacers.length; i++) {
      var oname = spacers[i].getAttribute('name');
      var ss = oname.split("_");
      if (ss[1] != oldcell && ss[1] != newcell) {
        continue;
      }
      if (ss[1] == oldcell && ss[2] == oldseq) {
        ss[1] = newcell;
        ss[2] = newseq;
        if (oldcell != 0 && newcell != 0) {
          CC.movePortlet2(ss[3], ss[1], ss[2]);
          var domid = 'cc_p_' + ss[3];
          CC.checkSizeChange(domid, columncls);
        }
      } else {
        if (ss[1] == oldcell && ss[2] > oldseq) {
          ss[2] = +ss[2] -1;
        }
        if (ss[1] == newcell && ss[2] >= newseq) {
          ss[2] = +ss[2] +1;
        }
      }
      var nname = ss.join("_");
      if (nname != oname) {
        spacers[i].setAttribute("name", nname);
        var domid = 'cc_p_' + ss[3];
        if (CC.portlets[domid]) {
          CC.portlets[domid].cell = ss[1];
          CC.portlets[domid].seq = ss[2];
        }
      }
    }
  },
  addPortlet : function(modelname, celltype, cb) {
    if (CC.addingPortlet) {
      return false;
    }
    var cls;
    for (cls in CC.widths) {
      if (CC.widths[cls] == celltype) {
        break;
      }
    }
    var insp = CC.dropspot(cls);
    if (insp) {
      CC.addingPortlet = true;
      CC.addingPortletCallback = cb;
      CC.insertpoint = insp;
      Grouply.ajax(CC.address + "/ajax/cst.ajax",
        {sid : CC.sid, action: "addportlet", pg : CC.page, m : modelname, nc : insp.cell, ns : insp.seq, n : 1 },
          CC.portletAdded);
    }
    return true;
  },
  portletAdded : function(options, success, response) {
    if (success) {
      CC.addingPortlet = false;
      var newhtml = response.responseText;
      var idpos = newhtml.indexOf("cc_p_");
      if (idpos == -1) {
        return;
      }
      var i2 = newhtml.indexOf('"', idpos);
      var id = newhtml.substring(idpos+5, i2);
      var domid = newhtml.substring(idpos, i2);
      var el = Ext.get(CC.insertpoint.ins);
      var portlet = Ext.DomHelper.insertHtml('beforeBegin', CC.insertpoint.ins, newhtml);
      var spacer = Ext.DomHelper.insertBefore(portlet, {"tag":'div', "class":'cp-s ca-p', "name":"spp_0_0_"+id});
      CC.makeDragZone(portlet);
      CC.makeDropZone(spacer);
      CC.movePortlet(domid, "", 0, 0, CC.insertpoint.cell, CC.insertpoint.seq);
      Grouply.deferredJs(domid);
      if (CC.addingPortletCallback) {
        CC.addingPortletCallback();
      }
    }
  },
  removePortlet : function(pid) {
    Grouply.confirm(CC.i18n.confirm_remove, function(){CC.doRemovePortlet(pid, 'rm')});
  },
  hidePortlet : function(pid) {
    Grouply.confirm(CC.i18n.confirm_hide, function(){CC.doRemovePortlet(pid, 'hide')});
  },
  removePromoPopup : function(href) {
    Grouply.ajax(CC.address + "/ajax/promopopupvisit.ajax",
        {ptype : 'promo' });

    var s = CC.i18n.upgrade + "<br/><br/><a href=\"" + href + "\">" + CC.i18n.detail_click + "</a>";
    Grouply.alert(s, false, false, false, {ok:CC.i18n.close});
  },
  hidePromoPortlet : function(pid) {
    Grouply.confirm(CC.i18n.confirm_remove, function(){CC.doRemovePortlet(pid, 'promo')});
  },
  dismissPW : function() {
    pws = Ext.DomQuery.select("div[class*=premium_warn]");
    for (var i = 0; i < pws.length; i++) {
      Grouply.hideEl(pws[i]);
    }
  },
  removeAdsPopup : function(href) {
    Grouply.ajax(CC.address + "/ajax/promopopupvisit.ajax",
        {ptype : 'ads' });
    var s = cc.i18n.remove_ads + "<br/><br/><a href=\"" + href + "\">" + CC.i18n.detail_click + "</a>";
    Grouply.alert(s, false, false, false, {ok:CC.i18n.close});
  },
  doRemovePortlet : function(pid, rmtype) {
    var domid = "cc_p_"+pid;
    var pel = Ext.get(domid);
    var ss = pel.prev();
    var pos = ss.dom.getAttribute("name").split("_");
    pel.remove();
    CC.removeDropZone(ss.dom);
    ss.remove();
    CC.movePortlet(domid, false, pos[1], pos[2], 0, 0);
    switch(rmtype) {
      case 'rm':
        Grouply.ajax(CC.address + "/ajax/cst.ajax",
          {sid : CC.sid, action : "rmportlet", pg : CC.page, pid : pid, n:1});
        break;
      case 'promo':
        Grouply.ajax(CC.address + "/ajax/cst.ajax",
          {sid : CC.sid, action : "update", pg : CC.page, n: 1, udc : "{\""+pid+"\":{\"p_view\":\"-remove_promo_link\"}}" });
        break;
      case 'hide':
        Grouply.ajax(CC.address + "/ajax/cst.ajax",
          {sid : CC.sid, action : "override", pg : CC.page, n: 1, udc : "{\""+pid+"\":{\"p_view\":\"none\"}}" });
        break;
    }
  },
  checkSizeChange : function (id, cls) {
    if (CC.portlets[id]) {
      nwid = "";
      for (w in CC.widths) {
        if (cls.indexOf(w) != -1) {
          nwid = CC.widths[w];
          break;
        }
      }
      if (nwid != "" && nwid != CC.portlets[id].cellSize) {
        CC.portlets[id].cellSize = nwid;
        if (CC.portlets[id].sizechg == "reload") {
          CC.ajax.reload(id);
        }
        else if (CC.portlets[id].sizechg.indexOf(".") > 0) {
          var sfunc = eval(CC.portlets[id].sizechg);
          sfunc(id, nwid);
        }
      }
    }
  },
  ajax : {
    reload : function(id, noIndicator, cb) {
      var contentdivs = Ext.DomQuery.select("div[id="+id+"]>div[class*=cp-ce]");
      if (contentdivs.length == 1) {
        CC.portletAECleanup(id);
        var div = contentdivs[0];
        params = CC.portlets[id];
        if (params['rfpg'] && params['rfpg'] == 1) // reload page if trying to reload portlet that requires page refresh
        {
          CC.reloadPage();
          return;
        }
        for (p in params)
        {
          if (typeof(params[p]) == 'object')
          {
            obj = params[p];
            delete(params[p]);

            for (q in obj)
            {
              if (typeof(obj[q]) != 'function')
              {
                params[p+'['+q+']'] = obj[q];
              }
            }

          }
        }
        params['theme'] = CC.theme;
        params['var'] = CC.variation;
        params['page'] = CC.page;

        Grouply.ajaxload(div, CC.address + "/ajax/portlet.ajax", params, function(){CC.ajax.reloaded(div, id, cb)}, false, noIndicator);
      }
    },
    reloaded : function(div, id, cb) {
      CC.wrapsplit(div);
      CC.elipse(div);
      Grouply.makeHH();
      Grouply.deferredJs(id);
      if (cb) {
        cb();
      }
    }
  },

  portletAECleanup : function (id)
  {
    if (CC.ae_extjs[id])
    {
      tocleanup = CC.ae_extjs[id];
      for (i in tocleanup)
      {
        if (typeof(tocleanup[i]) == 'string')
        {
          Grouply.unregister(tocleanup[i]);
        }
      }
    }
  },

  setWrapSplit : function(div, span) {
  },

  setElipse : function(div, span) {
    var divsize = Ext.get(div).getSize();
    var spansize = Ext.get(span).getSize();
    var divheight = divsize.height;
    var spanheight = spansize.height;
    //todo: deal with spans whose height is okay but width is off.
    var m = div.className.match(/ca-e[0-9]/);
    if (m.length != 1) {
      return;
    }
    span.innerHTML = span.innerHTML.replace(/&nbsp;/g, ' ');
    var lines = + m[0].substring(4);
    var cb = div.className.match(/ca-ecb/) != null;
    var ml = div.className.match(/ca-emore/) != null;
    var lineheight = divheight/lines;
    if (spanheight > divheight) {
      var ell = cb ? " .." : " ...";
      var el2 = cb ? "..." : " ...";
      if (ml) {
        ell = " ..." + Grouply.i18n.more;
        cb = false;
      }
      var spanlines = Math.round(spanheight / lineheight);
      var otext = span.innerHTML;
      var acpl = Math.round(otext.length/spanlines);
      //var cmin = 1 + ((lines-1)*acpl);
      var cmin = 1;
      if (!cb) {
        var cmin = otext.indexOf(" ", cmin);
      }
      var lastcmin;
      spanlines = 0;
      while (spanlines <= lines) {
        lastcmin = cmin;
        cmin++; // todo: make sure we are skipping over br's
        if (!cb) {
          var stext = otext.substring(cmin);
          var nmin = stext.search(/\s|\n|<br>|<br\/>|<BR>|<BR\/>|\.|,|_|-/);
          if (nmin == -1) {
            cmin = nmin;
          }
          else cmin += nmin;
          //cmin = otext.indexOf(" ", cmin);
        }
        if (cmin >= otext.length || cmin == -1) {
          break;
        }
        var ctext = otext.substring(0, cmin ) + ell;
        span.innerHTML = ctext;
        spanheight = Ext.get(span).getSize().height;
        spanlines = Math.round(spanheight / lineheight);
      }
      if (ml) {
        var text1 = otext.substring(0, lastcmin);
        var text2 = otext.substring(lastcmin);
        var moreid = Ext.id();
        var lessid = moreid + "_less";
        div.innerHTML = "<span>" + text1 + " </span><a onclick='CC.emore(this)' id='"+moreid+ "' style='cursor:pointer'>..." + Grouply.i18n.more + "</a>"
          + "<span id='" + lessid + "' style='display:none'>" + text2 + "<a onclick='CC.eless(this)' style='cursor:pointer'> " + Grouply.i18n.less + "</a>";
        Ext.get(div).removeClass(m);
      } else {
        span.innerHTML = otext.substring(0, lastcmin ) + el2;
      }
    }
  },
  elipse : function(div) {
    var elipsedivs = Ext.DomQuery.select("div[class*=ca-e]", div);
    for (var i = 0; i < elipsedivs.length; i++) {
      var el = elipsedivs[i];
      var spans = Ext.DomQuery.select("span", el);
      var anchors = Ext.DomQuery.select("a", el);
      if (spans.length == 1) {
        var span = spans[0];
      } else if (anchors.length == 1) {
        var span = anchors[0];
      } else {
        continue;
      }
      CC.setElipse(el, span);
    }
  },
  emore : function(el) {
    var lessel = document.getElementById(el.id + "_less");
    el.style.display = "none";
    lessel.style.display = "";
  },
  eless : function(el) {
    var lessel = document.getElementById(el.parentNode.id);
    var moreelid = el.parentNode.id.substring(0, el.parentNode.id.length -5);
    var moreel = document.getElementById(moreelid);
    moreel.style.display = "";
    lessel.style.display = "none";
  },
  wrapsplit : function(div) {
    var wrapsplitdivs = Ext.DomQuery.select("div[class*=ca-b]", div);
    for (var i = 0; i < wrapsplitdivs.length; i++) {
      var el = wrapsplitdivs[i];
      var spans = Ext.DomQuery.select("span", el);
      var anchors = Ext.DomQuery.select("a", el);
      if (spans.length == 1) {
        var span = spans[0];
      } else if (anchors.length == 1) {
        var span = anchors[0];
      } else {
        continue;
      }
      CC.setWrapSplit(el, span);
    }
  },
  setTheme : function(el) {
    var newtheme = el.getAttribute('name');
    var udc = {};
    udc[CC.sid] = { "theme":newtheme };
    CC.update(Ext.util.JSON.encode(udc), CC.reloadPage);
  },
  reloadPage : function() {
    window.location.href = window.location.href;
  },
  cst : function(action) {
    Grouply.ajax(CC.address + "/ajax/cst.ajax", {sid : CC.sid, action : action}, CC.reloadPage);
  },
  update : function(udc, cb) {
    Grouply.ajax(CC.address + "/ajax/cst.ajax", {sid : CC.sid, action: "update", pg : CC.page, udc : udc, n : 1 }, cb);
  },
  override : function(udc, cb) {
    Grouply.ajax(CC.address + "/ajax/cst.ajax", {sid : CC.sid, action: "override", pg : CC.page, udc : udc, n : 1 }, cb);
  },
  updateTheme : function(udc, theme, cb) {
    Grouply.ajax(CC.address + "/ajax/cst.ajax", {sid : CC.sid, action: "updatetheme", pg : CC.page, udc : udc, theme : theme, n : 1 }, cb);
  },
  updateTabs : function(udc, cb) {
    Grouply.ajax(CC.address + "/ajax/cst.ajax", {sid : CC.sid, action: "updatetabs", pg : CC.page, udc : udc, n : 1 }, cb);
  },
  updateSG : function(page, desc, cb) {
    Grouply.ajax(CC.address + "/ajax/cst.ajax", {sid : CC.sid, action: "updatesg", pg : page, desc : desc, n : 1 }, cb);
  },
  updatePortlet : function (pid, cb) {
    var udc = {};
    udc[pid] = { };
    portletid = 'cc_p_'+pid;
    aeid = 'cc_ae'+pid;
    exposed = CC.portlets[portletid].exposed;
    formel = document.getElementById(aeid+'_form');
    for(i=0;i < exposed.length; i++)
    {
      elname = aeid+exposed[i];
      if (Grouply.get(elname))
      {
        val = Grouply.get(elname).getValue();
        if (val === false) // dont want to save booleans, since it causes issues as when we send boolean value through POST, it gets interpreted as strings "true" or "false"
        {
          val = 0;
        } else if (val === true)
        {
          val = Grouply.get(elname).getRawValue();
        }
        udc[pid][exposed[i]] = val;
        CC.portlets[portletid][exposed[i]] = val;
      } else if (formel && formel[elname]) // handle nonextjs input elements
      {
        inputelgroup = formel[elname];
        if (typeof(inputelgroup) == 'object' && inputelgroup.length > 0)
        {
          // handle old style radio groups
          for (j=0;j<inputelgroup.length;j++)
          {
            inputel = inputelgroup[j];
            if (inputel.checked)
            {
              udc[pid][exposed[i]] = inputel.value;
              CC.portlets[portletid][exposed[i]] = inputel.value;
              break;
            }
          }
        }

        // handle more non-extjs elements here
      }
    }

    CC.update(Ext.util.JSON.encode(udc), function () { CC.toggleAE(pid, false, true); CC.ajax.reload(portletid); } );

  },

  restorePortletDefaults : function (pid, cb)
  {
    var udc = {};
    udc[pid] = 'def';
    var portletid = 'cc_p_'+pid;
    var exposed = CC.portlets[portletid].exposed;
    if (exposed.length > 0) // here we want to reset defaults, so dont want to pass in exposed attribute values.
    {
      for (var i=0;i<exposed.length;i++)
      {
        delete(CC.portlets[portletid][exposed[i]]);
      }
    }
    CC.update(Ext.util.JSON.encode(udc), function () { CC.toggleAE(pid, false, true); CC.ajax.reload(portletid); } );
  },

  movePortlet2 : function(pid, newcell, newseq) {
    Grouply.ajax(CC.address + "/ajax/cst.ajax", {sid : CC.sid, action: "moveportlet", pg : CC.page, pid : pid, nc: newcell, ns: newseq});
  },
  toggleNavAE : function(cid, open, sel_el) {
    if (Ext.isIE6) {
      Grouply.alert(CC.i18n.ie6_warning
        + "<a href='http://www.microsoft.com/windows/internet-explorer/'>" + CC.i18n.ie6_link + "</a>.",
        CC.i18n.ie6_title, null, null, {ok:CC.i18n.close});
      return;
    }
    if (open) {
      if (CC.navAE) {
        if (CC.navAE == cid) {
          return; // already open.
        }
        CC.toggleAE(CC.navAE, false, true);
      }
      CC.navAE = cid;
    } else {
      CC.navAE = null;
    }
    CC.toggleAE(cid, open, sel_el);
  },
  toggleAE : function(cid, open, sel_el) {
    var el = document.getElementById("cc_ae"+cid);
    if (el) {
      el.style.display = open ? "block" : "none";
    }
    if (sel_el) {
      if (open) {
        if (sel_el == "find") {
          sel_el = document.getElementById("cc_ae_icon_"+cid);
        }
        CC.aeEls[cid] = sel_el;
        Ext.get(sel_el).addClass("ca-s");

        if (Grouply.get('cc_ae'+cid+'desc_text'))
        {
          Grouply.convertEditorToolbar('cc_ae'+cid+'desc_text');
        }

      } else {
        sel_el = CC.aeEls[cid];
        if (sel_el) {
          Ext.get(sel_el).removeClass("ca-s");
        }
      }
    }
  },
  setNoSummary : function (cb, checked) // called whenever No summary radio button is checked/unchecked in message portlet attribute editor
  {
    var aeid = cb.container.id.match(/cc_ae\d+/);
    var iconid = aeid + 'icon';
    if (!iconid)
    {
      return;
    }

    var el = Grouply.get(iconid);
    if (!el)
    {
      return;
    }

    if (checked)
    {
      el.hide();
      el.setValue(false);
    } else
    {
      el.show();
      el.setValue(true);
    }


  },
  setAeView : function (cb)
  {
    var newval = cb.getValue();
    var aeid = cb.container.id.match(/cc_ae\d+/);
    var rowsid = aeid + 'rows';
    if (!rowsid) {
      return;
    }

    var el = Ext.get(rowsid);
    if (!el) {
      return;
    }
    var tr = el.findParentNode("tr");
    if (!tr) {
      return;
    }
    el = Ext.get(tr);
    tr = el.findParentNode("tr");
    if (!tr) {
      return;
    }
    el = Ext.get(tr);

    if (newval == "slide") {
      el.hide();
    } else {
      el.show();
    }
  },
  i10e : function(menu) {
    Grouply.ajax(CC.address + "/ajax/i10e.ajax",
      { g : CC.sid, i: menu.val }
        , CC.reloadPage
        );
  },

  showLeaveGroup : function () {
    Grouply.alert(CC.i18n.confirm_leave, CC.i18n.confirm_leave_title, CC.leaveGroup, CC, Ext.MessageBox.OKCANCEL);
  },

  leaveGroup : function (btn, text)
  {
    if (btn == 'ok')
    {
      Grouply.ajax(CC.address + "/ajax/leavegroup.ajax", null, CC.leaveGroupCallback);
    }
  },

  leaveGroupCallback : function (options, success, response)
  {
    var result = Ext.util.JSON.decode(response.responseText);

    if (!result)
    {
      Grouply.alert(CC.i18n.process_error, CC.i18n.leave_error);
      return;
    }

    if (result['status'] > 0)
    {
      Grouply.alert(result['msg'], CC.i18n.leave_success, function() { window.location.href=CC.address+'/home'; });
    } else
    {
      Grouply.alert(result['msg'],  CC.i18n.leave_error);
    }
  },

  portlet : {
    resizeObjects : function (id)
    {

      var div = Ext.get(id).child('div.cp-c');
      if (div)
      {
        var contentwidth = div.getWidth(true);

        var contentobjects = Ext.DomQuery.select("div#"+id+" div.cp-c object, div#"+id+" div.cp-c embed");

        for (var i=0; i < contentobjects.length; i++)
        {
          var objwidth = contentobjects[i].width;
          var objheight = contentobjects[i].height;

          contentobjects[i].setAttribute("wmode", "transparent");

          if (objwidth && objwidth > contentwidth)
          {
            // resize but keep aspect ratio
            var newwidth = contentwidth;
            contentobjects[i].width = newwidth;
            // find height
            if (objheight)
            {
              var newheight = objheight * newwidth / objwidth;
              contentobjects[i].height = newheight;
            }

          }
        }
      }
    }

  },

  usersOnly : function ()
  {
    if (CC.viewer['anonymous'] == 0)
    {
      return true;
    }

    Grouply.alert(CC.i18n.users_only, CC.i18n.please_login);

    return false;
  },

  membersOnly : function ()
  {
    if (!CC.usersOnly())
    {
      return false;
    }

    if (CC.viewer['type'] >= 0)
    {
      return true;
    }

    Grouply.alert(CC.i18n.members_only, CC.i18n.members_only_title);

    return false;
  },

  portlets : {},
  aeEls : {},
  navAE : null,
  theme : "",
  variation : ""
}
