// ------------------------------ EXTRA EFFECTS

Effect.MoveAndResizeTo = Class.create();
Object.extend(Object.extend(Effect.MoveAndResizeTo.prototype, Effect.Base.prototype), {
  initialize: function(element, bounds, options) {
    var prop = null;
    
    this.element = $(element);
    this.bounds = bounds;
    this.original = {};
    
    for( prop in this.bounds ) {
      this.original[prop] = parseFloat(Element.getStyle(this.element,prop)  || 0);
    }

    this.effective = Voy.getEffectiveBounds(bounds);
    this.options = ( options || {} );
    
    // Check to see if we need to do anything
    for( prop in this.bounds ) {
      if( this.original[prop] != this.effective[prop] ) {
        this.start(this.options);
        break;
      }
    }
  },
  update: function(position) {
    for( var prop in this.bounds ) {
	    if( this.bounds[prop] ) {
	      var value = ( this.effective[prop] * (position) ) + ( this.original[prop] * ( 1 - position ) );
	      this.element.style[prop] = value + 'px';
	    }
    }
  }
});

Effect.Center = function( element, parentElement, keepExistingDisplayStyle ) {
  keepExistingDisplayStyle = keepExistingDisplayStyle || false;
  // if you want to center to the window, parentElement should be null
  try {
   element = $( element );
   if ( Voy.isDefined( parentElement ) ) {
     parentElement = $( parentElement );
     // TODO: should probably check to make sure the element is a child of the parent but for now assume it is... ;)
   }
  } catch( e ) { return; }
  
  var parentWidth  = 0;
  var parentHeight = 0;
  var scrollY = 0;
  element.style.position = 'absolute';
  if ( ! keepExistingDisplayStyle ) {
    element.style.display  = 'block';
  }
  element.style.zIndex = 999;
  
  if ( Voy.isUndefined( parentElement ) ) {
    if ( typeof( window.innerWidth ) == 'number' ) {
    	parentWidth  = window.innerWidth;
      parentHeight = window.innerHeight;
    } else if ( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
      parentWidth  = document.documentElement.clientWidth;
      parentHeight = document.documentElement.clientHeight;
    } else if ( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
      parentWidth  = document.body.clientWidth;
      parentHeight = document.body.clientHeight;
    }
    if ( document.documentElement && document.documentElement.scrollTop ) {
  	  scrollY = document.documentElement.scrollTop;
    } else if ( document.body && document.body.scrollTop ) {
      scrollY = document.body.scrollTop;
    } else if ( window.pageYOffset ) {
      scrollY = window.pageYOffset;
    } else if ( window.scrollY ) {
      scrollY = window.scrollY;
    }
  } else {
    var parentElementDimensions = Element.getDimensions( parentElement );
    parentWidth = parentElementDimensions.width;
    parentHeight = parentElementDimensions.height;
    //scrollY = 0;
  }
  
  var elementDimensions = Element.getDimensions( element );
  
  var setX = ( parentWidth  - elementDimensions.width  ) / 2;
  var setY = ( parentHeight - elementDimensions.height ) / 2 + scrollY;
  
  setX = ( setX < 0 ) ? 0 : setX;
  setY = ( setY < 0 ) ? 0 : setY;
  
  element.style.left = parseInt( setX ) + "px";
  element.style.top  = parseInt( setY ) + "px";

}
