
function getElementsByClassName(strClass, strTag, objContElm) {
  strTag = strTag || "*";
  objContElm = objContElm || document;
  var objColl = objContElm.getElementsByTagName(strTag);
  if (!objColl.length &&  strTag == "*" &&  objContElm.all) objColl = objContElm.all;
  var arr = new Array();
  var delim = strClass.indexOf('|') != -1  ? '|' : ' ';
  var arrClass = strClass.split(delim);
  for (var i = 0, j = objColl.length; i < j; i++) {
    var arrObjClass = objColl[i].className.split(' ');
    if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
    var c = 0;
    comparisonLoop:
    for (var k = 0, l = arrObjClass.length; k < l; k++) {
      for (var m = 0, n = arrClass.length; m < n; m++) {
        if (arrClass[m] == arrObjClass[k]) c++;
        if (( delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {
          arr.push(objColl[i]);
          break comparisonLoop;
        }
      }
    }
  }
  return arr;
}

function enableFormJS() {
  // In the event that we've just loaded an "Action Unauthorized"
  // this means the back-end has discovered someone's trying to
  // tamper.  For "cleaner" user experience, we disable all
  // buttons.
  var titles = getElementsByClassName('UNAUTHORIZED');
  if (titles.length == 1) {
    var buttons = getElementsByClassName('button');
    var boxes = getElementsByClassName('contentbox');
    buttons.each( function(obj) {
      obj.onclick = function() { alert("Action Unauthorized"); return false; }
    });
    var keeper = titles[0].parentNode.parentNode.parentNode;
    //alert('set keeper to'+keeper.innerHTML);
    var mainParent = keeper.parentNode;
    mainParent.className = (mainParent.className == 'mainContent') ? 'mainContent-full' : mainParent.className;
    mainParent = mainParent.parentNode;
    mainParent.className = (mainParent.className == 'mainContent') ? 'mainContent-full' : mainParent.className;
    boxes.each (function(obj) {
      if ((obj != keeper) && (obj != keeper.parentNode)) {
        //alert('hiding'+obj.innerHTML);
        obj.style.display = 'none';
      }
    });
    if (window.ie) {
      alert("Action Unauthorized");
    }
    return false;
  }

  // Let's detect whether there's flashcontent.  If there is, then
  // we'll instantiate the SWFObject here.
  var flashcontents = getElementsByClassName('flashcontent');
  flashcontents.each(function(el, i) {
    var myid = el.id;
    var splitresult  = myid.split('_');
    var so = new SWFObject("presentation/"+splitresult[0]+".swf", splitresult[0], "100%", "400", "8", "#FFFFFF");
    so.addVariable("path", "/");  
    so.addVariable("settings_file", escape("presentation/"+splitresult[0]+"_settings.xml"));  
    so.addVariable("data_file", escape("analyze_mail.php?type="+splitresult[1]));  
    so.addVariable("preloader_color", "#999999");  
    so.write("amcolumn_mailusageall");
  });

  // The rest of this script is all about managing forms
  // that have addressfields.  For enabling radio button
  // scrolly button functionality or attaching hide
  // behavior to select dropdowns (ie only) on tooltip hover
  if (!$('addressfields')) {
    return false;
  }

  var addr_slide = new Fx.Slide($('addressfields'), { duration: 200 });
  if ($('addressfields').className == 'addressfields_default_open') {
    $('addressfields').style.display = 'block';
    addr_slide.slideIn();
  }
  var radiobuttons = getElementsByClassName('radio');
  radiobuttons.each( function(radiobutton, i) {
    // Don't be tempted to do onchange, that doesn't actually execute
    // until you move past that field in IE.
    if (radiobutton.value == 'client') {
      radiobutton.onclick = function() {
        radiobutton.checked && addr_slide.slideOut();
      }
    }
    if (radiobutton.value == 'user') {
      radiobutton.onclick = function() {
        $('addressfields').style.display = 'block';
        radiobutton.checked && addr_slide.slideIn();
      }
    }
  });

  // LAME!  Must hide select dropdown in IE
  // If we don't do this, the select field is always on top
  // of the tooltip hover.  IE bug.
  if (window.ie6) {
    var tooltips = getElementsByClassName('cancauseoverlap');
    var selects = getElementsByClassName('overlapstooltip');
    if (selects.length == 0) {
      return; // nothing to do, no selects overlap tooltip
    }
    tooltips.each( function(tooltip, i) {
      tooltip.onmouseover = function() {
        selects.each( function(select, i) {
          select.style.visibility = 'hidden';
        });
      }
      tooltip.onmouseout = function() {
        selects.each( function(select, i) {
          select.style.visibility = 'visible';
        });
      }
    });
  }
}

// getAjax loads content into a specific element.
// Arguments:
//   location - URL from which to load content
//   panel    - This tells getAjax where it was called from -- the account
//              or domain tab.  Variables $_GET['back'], $_GET['topbox_id'], and
//              $_GET['panel'] are based on this value.
//   scroll   - Tells getAjax whether it should scroll up and scroll down
//   ...      - any other arguments passed to this function will be concatenated
//              as GET parameters
function getAjax(location, panel, scroll) {
  var lastpos = document.location.href.length - 1;
  dlh = document.location.href;
  if ((dlh.charAt(lastpos) != '#') && (dlh.charAt(lastpos) != '/')) {
    document.location.href = '/';
    return;
  }
  var back = (panel == 'domain') ? 'domainadmin_intro.html' : 'usercenter_intro.html';
  var topbox_id = panel+"_topbox"
  get = '?back='+back+'&panel='+panel;
  for (i = 2; i < arguments.length; i++) {
    get = get+'&'+arguments[i];
  }

  if (window.ie7) {
    scroll = false;
  }

  if (scroll) {
    var slider = new Fx.Slide(topbox_id, { duration: 200 });
    topbox_titles = getElementsByClassName('topbox_title');
    topbox_titles.each ( function(title, i) {
      title.style.display = 'none';
    });
    slider.toggle().chain(function() {
      new Ajax(location+get, {
        update: topbox_id,
        method: 'get'
      }).request().chain(function() {
        slider.toggle().chain(function() {
          ($(topbox_id)).parentNode.setStyle('overflow', 'visible');
          ($(topbox_id)).parentNode.setStyle('height', 'auto');
          eval(enableFormJS());
          topbox_titles = getElementsByClassName('topbox_title');
          topbox_titles.each ( function(title, i) {
            title.style.display = 'inline';
          });
        });
      });
    });
  } // scroll
  else {
    new Ajax(location+get, {
      update: topbox_id,
      method: 'get',
      onComplete: function() {
      eval(enableFormJS());
      topbox_titles = getElementsByClassName('topbox_title');
      topbox_titles.each ( function(title, i) {
        title.style.display = 'inline';
        });
      }
    }).request();
  }
}

function validate_new_password(pass1, pass2, status) {
  pass1_length = ($(pass1)).value.length;
  pass2_length = ($(pass2)).value.length;
  statustext = '';
  if ( (pass1_length > 0) && (pass2_length > 0) ) {
    if (($(pass1)).value == ($(pass2)).value) {
      if (pass1_length < 6) {
        statustext = '<span class="error">Passwords must be at least 6 characters long.</span>';
      }
      else {
        statustext = '';
      }
    }
    else {
      statustext = '<span class="error">Passwords do not match.</span>';
    }
  }
  ($(status)).innerHTML = statustext;
}

// To cover IE 5.0's lack of the push method
Array.prototype.push = function(value) {
  this[this.length] = value;
}


// Add to this addEvent function anything you'd like to attach
// to objects out there in the world wide DOM.
window.addEvent('load', function() {

  topbox_titles = getElementsByClassName('topbox_title');
  topbox_titles.each ( function(title, i) {
    title.style.display = 'inline';
  });

  /* SLIDERS */
  var collapseables = getElementsByClassName('collapseable');
  var collapsecontrol = getElementsByClassName('collapsecontrol');
  var accordions = getElementsByClassName('accordion');

  collapseables.each( function (collapseable,i) {
    var slider = new Fx.Slide(collapseable, {duration: 400, transition: Fx.Transitions.Quad});
    collapsecontrol[i].onclick = function(e) {
      e = new Event(e);
      slider.toggle();
      e.stop();
    }
    slider.toggle();
    collapseable.style.display = 'block';
  });


  /* ACCORDION IN DOMAIN ADMINISTRATION */
  togglebars = getElementsByClassName('userListToggle');
  insets = getElementsByClassName('userListContent');
  var accordion = new Fx.Accordion(togglebars, insets, {
	opacity: false,
        start: 'all-closed',
	transition: Fx.Transitions.Quad,
        onActive: function (toggler, element) {
          toggler.className = 'togglebar inactivetoggle';
          toggler.childNodes[0].childNodes[1].className = 'adminButtons_visible';
        },
	onComplete: function() {
          insets.each ( function (inset, i) {
            if (inset.style.height != '0px') {
              inset.setStyle('overflow', 'visible');
            }
          });
	},
	onBackground: function(toggler, element) {
          toggler.className = 'togglebar';
          toggler.childNodes[0].childNodes[1].className = 'adminButtons';
          insets.each ( function (inset, i) {
            if (element != inset) {
              element.setStyle('overflow', 'hidden');
            }
          });
	}
  });

});

