Effect.ResizeWindow = Class.create(); 
Object.extend(Object.extend(Effect.ResizeWindow.prototype, Effect.Base.prototype), { 
initialize: function(win, top, left, width, height) { 
this.window = win; 
this.window.resizing = true; 
var size = win.getSize(); 
this.initWidth = parseFloat(size.width); 
this.initHeight = parseFloat(size.height); 
var location = win.getLocation(); 
this.initTop = parseFloat(location.top); 
this.initLeft = parseFloat(location.left); 
this.width = width != null ? parseFloat(width) : this.initWidth; 
this.height = height != null ? parseFloat(height) : this.initHeight; 
this.top = top != null ? parseFloat(top) : this.initTop; 
this.left = left != null ? parseFloat(left) : this.initLeft; 
this.dx = this.left - this.initLeft; 
this.dy = this.top - this.initTop; 
this.dw = this.width - this.initWidth; 
this.dh = this.height - this.initHeight; 
this.r2 = $(this.window.getId() + "_row2"); 
this.content = $(this.window.getId() + "_content"); 
this.contentOverflow = this.content.getStyle("overflow") || "auto"; 
this.content.setStyle({overflow: "hidden"}); 
// Wired mode 
if (this.window.options.wiredDrag) { 
this.window.currentDrag = win._createWiredElement(); 
this.window.currentDrag.show(); 
this.window.element.hide(); 
} 
this.start(arguments[5]); 
}, 
update: function(position) { 
var width = Math.floor(this.initWidth + this.dw * position); 
var height = Math.floor(this.initHeight + this.dh * position); 
var top = Math.floor(this.initTop + this.dy * position); 
var left = Math.floor(this.initLeft + this.dx * position); 
if (window.ie) { 
if (Math.floor(height) == 0) 
this.r2.hide(); 
else if (Math.floor(height) >1) 
this.r2.show(); 
} 
this.r2.setStyle({height: height}); 
this.window.setSize(width, height); 
this.window.setLocation(top, left); 
}, 
finish: function(position) { 
// Wired mode 
if (this.window.options.wiredDrag) { 
this.window._hideWiredElement(); 
this.window.element.show(); 
} 
this.window.setSize(this.width, this.height); 
this.window.setLocation(this.top, this.left); 
this.r2.setStyle({height: null}); 
this.content.setStyle({overflow: this.contentOverflow}); 
this.window.resizing = false; 
} 
}); 
Effect.ModalSlideDown = function(element) { 
var windowScroll = WindowUtilities.getWindowScroll(); 
var height = element.getStyle("height"); 
element.setStyle({top: - (parseFloat(height) - windowScroll.top) + "px"}); 
element.show(); 
return new Effect.Move(element, Object.extend({ x: 0, y: parseFloat(height) }, arguments[1] || {})); 
}; 
Effect.ModalSlideUp = function(element) { 
var height = element.getStyle("height"); 
return new Effect.Move(element, Object.extend({ x: 0, y: -parseFloat(height) }, arguments[1] || {})); 
}; 
PopupEffect = Class.create(); 
PopupEffect.prototype = { 
initialize: function(htmlElement) { 
this.html = $(htmlElement); 
this.options = Object.extend({className: "popup_effect", duration: 0.4}, arguments[1] || {}); 
}, 
show: function(element, options) { 
var position = Position.cumulativeOffset(this.html); 
var size = this.html.getDimensions(); 
var bounds = element.win.getBounds(); 
this.window = element.win; 
// Create a div 
if (!this.div) { 
this.div = document.createElement("div"); 
this.div.className = this.options.className; 
this.div.style.height = size.height + "px"; 
this.div.style.width = size.width + "px"; 
this.div.style.top = position[1] + "px"; 
this.div.style.left = position[0] + "px"; 
this.div.style.position = "absolute" 
document.body.appendChild(this.div); 
} 
if (this.options.fromOpacity) 
$(this.div).setStyle({opacity: this.options.fromOpacity}) 
$(this.div).show(); 
var style = "top:" + bounds.top + ";left:" +bounds.left + ";width:" + bounds.width +";height:" + bounds.height; 
if (this.options.toOpacity) 
style += ";opacity:" + this.options.toOpacity; 
new Effect.Morph(this.div ,{style: style, duration: this.options.duration, afterFinish: this._showWindow.bind(this)}); 
}, 
hide: function(element, options) { 
var position = Position.cumulativeOffset(this.html); 
var size = this.html.getDimensions(); 
this.window.visible = true; 
var bounds = this.window.getBounds(); 
this.window.visible = false; 
this.window.element.hide(); 
this.div.style.height = bounds.height; 
this.div.style.width = bounds.width; 
this.div.style.top = bounds.top; 
this.div.style.left = bounds.left; 
if (this.options.toOpacity) 
$(this.div).setStyle({opacity: this.options.toOpacity}) 
$(this.div).show(); 
var style = "top:" + position[1] + "px;left:" + position[0] + "px;width:" + size.width +"px;height:" + size.height + "px"; 
if (this.options.fromOpacity) 
style += ";opacity:" + this.options.fromOpacity; 
new Effect.Morph(this.div ,{style: style, duration: this.options.duration, afterFinish: this._hideDiv.bind(this)}); 
}, 
_showWindow: function() { 
this.div.hide(); 
this.window.element.show(); 
}, 
_hideDiv: function() { 
this.div.hide(); 
} 
}

