//for more ajcombo effects
Effect.AjSet = {
    'slide': ['SlideDownAj','SlideUp'],
    'blind': ['BlindDown','BlindUp'],
    'appear': ['Appear','Fade'],
	'phase': ['AjPhase','AjPhase'],
	'switch': ['Appear','SwitchOff'],
	'grow': ['Grow','Shrink'],
	'shrink': ['Appear','Shrink'],
	'simple': ['Simple','Simple'],
    'apblind': ['Appear','BlindUp']
  }

Effect.ajcombo = function(element, effect) {
    element = $(element);
    effect = (effect || 'appear').toLowerCase();
    var options = Object.extend({
      queue: { position:'end', scope:(element.id || 'global') }
    }, arguments[2] || {});
    Effect[Element.visible(element) ? 
      Effect.AjSet[effect][1] : Effect.AjSet[effect][0]](element, options);
  }
//main script
Effect.Spoiler = function(element, effect, me, show, hide) {
    element = $(element);
    if (element.style.display != 'none') {
      me.innerHTML = show;
    } else {
      me.innerHTML = hide;
        }
	if(me.className.indexOf("collapsed") > -1) {
		me.className = me.className.replace(" collapsed", "");
	} else {
		me.className += " collapsed";
	}
	new Effect.ajcombo(element, effect, arguments[5] || {});
  }

//combo effect
Effect.Collapse = function(element, effect, me) {
    element = $(element);
	new Effect.ajcombo(element, effect, arguments[3] || {});
	if (me.className.indexOf("collapsed") > -1) {
		me.className = me.className.replace(" collapsed", "");
	}else{
		me.className += " collapsed";
	}
  }
//just show/hide
Effect.Simple = function(element) {
  element = $(element);
	if (element.style.display == 'none') 
	element.style.display = 'block';
	else	element.style.display = 'none'; 
  }
//for IE Fix
Effect.SlideDownAj = function(element) {
  element = $(element);
  element.cleanWhitespace();
  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
  var oldInnerBottom = $(element.firstChild).getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({ 
    scaleContent: false, 
    scaleX: false, 
    scaleFrom: window.opera ? 0 : 1,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
//    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.firstChild.makePositioned();
      if(window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping();
      effect.element.setStyle({height: '0px'});
      effect.element.show(); },
    afterUpdateInternal: function(effect) {
      effect.element.firstChild.setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' }); 
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping(); 
      // IE will crash if child is undoPositioned first
      if(/MSIE/.test(navigator.userAgent)){
        effect.element.undoPositioned();
        effect.element.firstChild.undoPositioned();
      }else{
        effect.element.firstChild.undoPositioned();
        effect.element.undoPositioned();
      }
      effect.element.firstChild.setStyle({bottom: oldInnerBottom}); }
    }, arguments[1] || {})
  );
}
//form k2(http://getk2.com) theme
Effect.AjPhaseIn = function(element) {
  element = $(element);
  new Effect.BlindDown(element, arguments[1] || {});
  new Effect.Appear(element, '', arguments[2] || arguments[1] || {});
}

Effect.AjPhaseOut = function(element) {
  element = $(element);
  new Effect.Fade(element, arguments[1] || {});
  new Effect.BlindUp(element, '', arguments[2] || arguments[1] || {});
}

//to make 'Phase' work with ajcombo
Effect.AjPhase = function(element) {
  element = $(element);
  if (element.style.display == 'none')
    new Effect.AjPhaseIn(element, arguments[1] || {}, arguments[2] || arguments[1] || {});
  else new Effect.AjPhaseOut(element, arguments[1] || {}, arguments[2] || arguments[1] || {});
}