Element.implement({
	zoom: function(source, onComplete)
	{
		if(!$defined(onComplete))var onComlpete = $empty;
		var coordinates = source.getCoordinates();
		this.originalDimensions = this.getCoordinates();
		var width = this.getStyle("width");
		var height = this.getStyle("height");
		this.setStyles({"opacity":"0","z-index":"10000","width":"0", "height":"0","position":"absolute", "top":coordinates.top+"px", "left":coordinates.left+"px"});
		this.set("morph",{duration:100, onComplete:onComplete});
		this.morph({"width":width,"height":height,
			"opacity":"1","top":this.getAbsoluteTop()+"px", "left":this.getAbsoluteLeft()+"px"
		});
		
	},
    getAbsoluteTop : function()
    {
		return  window.getScrollTop() + (window.getHeight() / 5);
    },
    getAbsoluteLeft : function()
    {
    	return ($(document.body).getSize().x-this.originalDimensions.width)/2;
    },
    getRealLeft : function()
    {
    	return ($(document.body).getSize().x-this.getStyle("width").toInt())/2;
    },
    fullScreen: function(source, onComplete)
    {
    	//if(!$defined(onComplete))var onComlpete = $empty;
    	var coordinates = source.getCoordinates();
		this.originalDimensions = window.getCoordinates();
		this.setStyles({"opacity":"0","z-index":"10000","width":"0", "height":"0","position":"absolute", "top":coordinates.top+"px", "left":coordinates.left+"px"});
		this.set("morph",{duration:100, onComplete:onComplete});
		this.morph({"width":this.originalDimensions.width - 80 +"px","height":this.originalDimensions.height - 80 +"px",
			"opacity":"1","top":window.getScrollTop() + 40 + "px", "left":this.getStyle("width").toInt()/4 + 40 + "px"
		});
    },
    center: function(source, onComplete)
    {
    	//if(!$defined(onComplete))var onComlpete = $empty;
    	
    	var coordinates = source.getCoordinates();
		this.originalDimensions = this.getCoordinates();
		
		
		this.setStyles({"opacity":"0","z-index":"10000","width":"0", "height":"0","position":"absolute", "top":coordinates.top+"px", "left":coordinates.left+"px"});
		this.set("morph",{duration:100, onComplete:onComplete});
		
		var left = window.getCoordinates().width/2 - this.originalDimensions.width/2;
		
		this.morph({"width":this.originalDimensions.width +"px","height":this.originalDimensions.height +"px",
			"opacity":"1","top":window.getScrollTop() + 40 + "px", "left":left+ "px"
		});
    },
    recalculePosition: function(onComplete)
    {
    	var scrollPosition = window.getScrollTop();
    	var heightWindow = window.getHeight();
    	var thisTop = this.getStyle("top").toInt();
    	var validBottom = scrollPosition+heightWindow-this.getStyle("height").toInt();
    	
    	if(thisTop > validBottom || thisTop < scrollPosition )
    	{
    		this.set("morph",{onComplete:onComplete, duration:"150"});
    		this.morph({"top":this.getAbsoluteTop(),"left":this.getRealLeft()});
    	}
    	else
    		onComplete();
    },
    cloneSize : function(element)
	{
		var dimensions = element.getSize();
		
		if(element.getChildren("img")[0])
			dimensions = element.getChildren("img")[0].getSize();
		
		
        this.setStyles({width:dimensions.x+"px", height: dimensions.y+"px"});
	},
	injectOver : function(element)
	{
		var position = element.getPosition();
		var top = position.y+"px";
		var left = position.x+"px";
		
		if(element.getChildren()[0])
		{
			childrens = element.getChildren();
			top = childrens[0].getPosition().y+"px";
		}
		
		this.setStyles({position:"absolute",top:top,left:position.x+"px", "z-index":1000});
		this.inject(document.body,"bottom");
	},
	hoverOnlineEdit: function(element)
	{
		var position = element.getPosition();
		
		var child = element.getFirst();
		
		if(child)
		{
			if(child.hasClass("onlineEditData")) child = child.getNext();
			if(child) position = child.getPosition();
		}
		
		var top = position.y +"px";
		var width = this.getSize().x;
		var left = (position.x - width - 17) + "px";
		
		this.setStyles({"position":"absolute", "top":top, "left":left, "z-index":1000});
		this.inject(document.body,"bottom");
	}
});

