Element.implement({
	rescale : function(options){
		options = $extend({
			src : false,
			url : "http://www.satcom-easylink.com/",
			nextImage : false,
			prevIamge : false,
			index : 0,
			altText : "",
			preloadImage : "layout/design/loading.gif",
			closeIcon : "layout/design/close.png",
			nextIcon : "layout/design/next.png",
			prevIcon : "layout/design/prev.png",
			overlayBackgroundColor : '#002047',
			lowerOverlayColor : '#fff',
			lowerOverlayBorder : '2px solid #e9e9e9' // Border Top Only
		}, options);
		var img=this,
			startTop=img.getPosition().y,
			startLeft=img.getPosition().x,
			startWidth=img.getSize().x,
			startHeight=img.getSize().y,
			endHeight=0,
			endWidth=0,
			images=new Array(options.src);
		var loading = new Element('img', {
			'src' : options.url+""+options.preloadImage,
			'styles' : {
				'position':'absolute',
				'left':'40%',
				'top':'40%',
				'border':'0px'
			}
		}).inject(img, 'after');
		new Asset.images(options.src, {onComplete:function(){
				img.overlayContainer = new Element('div',{
					'styles':{
						'display':'inline',
						'position':'absolute',
						'left':0,
						'top':0
					}
				}).inject($(document.body));
				var overlayBackground = new Element('div',{
					'styles':{
						'display':'inline',
						'position':'absolute',
						'top':'0px',
						'left':'0px',
						'width':$(document).getScrollSize().x,
						'height':$(document.body).getScrollSize().y,
						'background':options.overlayBackgroundColor
					},
					'opacity':.75
				}).inject(img.overlayContainer);
				var lowerOverlay = new Element('div',{
					'styles':{
						'display':'inline',
						'position':'absolute',
						'top':'0px',
						'left':'0px',
						'width':$(document.body).getScrollSize().x,
						'background' : options.lowerOverlayColor,
						'border-top' : options.lowerOverlayBorder
					}
				}).inject(img.overlayContainer);
				var image = new Element('img', {
					'styles' : {
						'position':'absolute'
					},
					'src' : images[0]
				}).inject(img.overlayContainer);
				var finalSize = new Array();
				var finalPosition = new Array();
				finalSize['x']=image.getSize().x;
				finalSize['y']=image.getSize().y;
				finalPosition['x']=($(document.body).getSize().x/2)-(finalSize.x/2);
				finalPosition['y']=($(document.body).getSize().y/2)+($(document.body).getScroll().y)-(finalSize.y/2)+17;
				var close = new Element('img',{
					'src':options.url+''+options.closeIcon,
					'styles':{
						'position':'absolute',
						'cursor':'pointer',
						'zIndex':'1000',
						'behavior':'url('+options.url+'js/iepngfix.htc)',
						'top':finalPosition.y-32,
						'left':finalPosition.x+finalSize.x-30
					}
				}).inject(img.overlayContainer);
				
				
				/*Änderung*/
				if(img.get('alt')!==null){
					var altText = img.get('alt');
				}else{
					var altText = "";
				}
				var altTextElement = new Element('h4',{
					'text':altText,
					'styles':{
						'zIndex':'1000',
						'position':'absolute',
						'top':finalPosition.y+finalSize.y+10,
						'left':finalPosition.x+(finalSize.x/2)-150,
						'width':300
					}
				}).inject(img.overlayContainer);
				
				
				close.fade('hide');
				close.fade('in');
				var prev,next;
				var prevEvent = function(){
					if(options.index-1===0){
						prev.dispose();
						prev = false;
						options.index--;
					}else{
						if(typeof next === "undefined" || next === false){
							next = new Element('img',{
								'src':options.url+''+options.nextIcon,
								'styles':{
									'position':'absolute',
									'cursor':'pointer',
									'zIndex':'1000',
									'behavior':'url('+options.url+'js/iepngfix.htc)',
									'top':finalPosition.y + finalSize.y / 2,
									'left':finalPosition.x + finalSize.x - 20
								}
							}).inject(img.overlayContainer);
							next.addEvent('click', nextEvent);
						}
						options.index--;
					}
					new Asset.images(bilder[options.index], {
						onComplete : prevNextCompleteFunction
					});
				}
				var nextEvent = function(){
					if(options.index === bilder.length-2){
						next.dispose();
						next = false;
						options.index++;
					}else{
						if(typeof prev === "undefined" || prev === false){
							prev = new Element('img',{
								'src':options.url+''+options.prevIcon,
								'styles':{
									'position':'absolute',
									'cursor':'pointer',
									'zIndex':'1000',
									'behavior':'url('+options.url+'js/iepngfix.htc)',
									'top':finalPosition.y + finalSize.y / 2,
									'left':finalPosition.x - 40
								}
							}).inject(img.overlayContainer);
							prev.addEvent('click', prevEvent);
						}
						options.index++;
					}
					new Asset.images(bilder[options.index], {
						onComplete : prevNextCompleteFunction
					});
				}
				var prevNextCompleteFunction = function(){
					image.unreflect();
					var tempImage = new Element('img',{
						'src':bilder[options.index]
					}).inject(img.overlayContainer);
					try{
						var tempFinalSize = new Array();
						var tempFinalPosition = new Array();
						tempFinalSize['x']=tempImage.getSize().x;
						tempFinalSize['y']=tempImage.getSize().y;
						tempFinalPosition['x']=($(document.body).getSize().x/2)-(tempFinalSize.x/2);
						tempFinalPosition['y']=($(document.body).getSize().y/2)+($(document.body).getScroll().y)-(tempFinalSize.y/2)+17;
					}catch(e){alert(e)}
					tempImage.setStyles({
						'position':'absolute',
						'top':tempFinalPosition.y,
						'left':tempFinalPosition.x
					});
					
					altTextElement.set('text',text[options.index]);
					altTextElement.setStyles({
						'top':tempFinalPosition.y+tempFinalSize.y+10,
						'left':tempFinalPosition.x+(tempFinalSize.x/2)-150
					});
					
					tempImage.fade('hide');
					var fadeOut = new Fx.Tween(image, {onComplete:function(){
						tempImage.fade('show');
						image = tempImage;
						tempImage = "undefined";
						image.getParent().setStyle('zIndex',0);
						image.reflect();
						image.getParent().fade('hide');
						image.getParent().fade('in');
						
					}});
					if(typeof next !== "undefined" && next !== false){
						nextMorph = new Fx.Morph(next);
						nextMorph.start({
							'top':tempFinalPosition.y + tempFinalSize.y / 2,
							'left':tempFinalPosition.x + tempFinalSize.x - 20
						});
					}
					if(typeof prev !== "undefined" && prev !== false){
						prevMorph = new Fx.Morph(prev);
						prevMorph.start({
							'top':tempFinalPosition.y + tempFinalSize.y / 2,
							'left':tempFinalPosition.x - 40
						});
					}
					closeMorph = new Fx.Morph(close);
					closeMorph.start({
						'top':tempFinalPosition.y-32,
						'left':tempFinalPosition.x+tempFinalSize.x-30
					});
					fadeOut.start('opacity',0);	
				}
				if(options.nextImage !== false){
					next = new Element('img',{
						'src':options.url+''+options.nextIcon,
						'styles':{
							'position':'absolute',
							'cursor':'pointer',
							'zIndex':'1000',
							'behavior':'url('+options.url+'js/iepngfix.htc)',
							'top':finalPosition.y + finalSize.y / 2,
							'left':finalPosition.x + finalSize.x -20
						}
					}).inject(img.overlayContainer);
					
					next.addEvent('click', nextEvent);
				}
				if(options.prevImage !== false){
					prev = new Element('img',{
						'src':options.url+''+options.prevIcon,
						'styles':{
							'position':'absolute',
							'cursor':'pointer',
							'zIndex':'1000',
							'behavior':'url('+options.url+'js/iepngfix.htc)',
							'top':finalPosition.y + finalSize.y / 2,
							'left':finalPosition.x - 40
						}
					}).inject(img.overlayContainer);
					prev.addEvent('click', prevEvent);
				}

				image.setStyles({
					'top':startTop,
					'left':startLeft,
					'width':startWidth,
					'height':startHeight
				});
			lowerOverlay.setStyles({
				'top':$(document.body).getScroll().y+$(document.body).getSize().y,
				'height':$(document.body).getScrollSize().y-(($(document.body).getSize().y/2)+($(document.body).getScroll().y)+(finalSize.y/2))+40
			});
			img.scrollIn = new Fx.Tween(lowerOverlay);
			img.scrollIn.start('top',($(document.body).getSize().y/2)+($(document.body).getScroll().y)+(finalSize.y/2)-40+"px");
			img.zoom = new Fx.Morph(image,{
				duration:300,
				onComplete:function(){
					if (Browser.Engine.trident) {
						var reflectionInner = image.reflect().getParent().getElements('img')[1];
						var reflection = new Element('div').wraps(reflectionInner);
					}else{
						var reflection = image.reflect().getParent().getElement('canvas');
					}
					reflection.fade('hide')
					reflection.fade('in');
				}
			});
			img.zoom.start({
				'width':finalSize.x,
				'height':finalSize.y,
				'left':finalPosition.x,
				'top':finalPosition.y,
				'opacity':1
			});
			loading.dispose();
			close.addEvent('click', function(){
				image.unreflect();
				img.overlayContainer.fade('out');
				img.zoom = new Fx.Morph(image,{
					duration:300,
					onComplete:function(){
						$(document.body).removeEvents('click');
						img.overlayContainer.dispose();
					}
				})
				img.zoom.start({
					'width':startWidth,
					'height':startHeight,
					'left':startLeft,
					'top':startTop
				});
			});
		}});
	},
/*!
	reflection for mootools v1.43
	(c) 2006-2009 Christophe Beyls <http://www.digitalia.be>
	MIT-style license.
*/
	reflect: function(options) {
		var img = this;
		if (img.get("tag") == "img") {
			options = $extend({
				height: 1/3,
				opacity: 0.5
			}, options);
			img.unreflect();
			function doReflect() {
				var imageWidth = img.width, imageHeight = img.height, reflection, reflectionHeight, wrapper, context, gradient;
				reflectionHeight = Math.floor((options.height > 1) ? Math.min(imageHeight, options.height) : imageHeight * options.height);
				if (Browser.Engine.trident) {
					reflection = new Element("img", {src: img.src, styles: {
						width: imageWidth,
						height: imageHeight,
						marginBottom: reflectionHeight - imageHeight,
						filter: "flipv progid:DXImageTransform.Microsoft.Alpha(opacity=" + (options.opacity * 100) + ", style=1, finishOpacity=0, startx=0, starty=0, finishx=0, finishy=" + (reflectionHeight / imageHeight * 100) + ")"
					}});
				} else {
					reflection = new Element("canvas");
					if (!reflection.getContext) return;
					try {
						context = reflection.setProperties({width: imageWidth, height: reflectionHeight}).getContext("2d");
						context.save();
						context.translate(0, imageHeight-1);
						context.scale(1, -1);
						context.drawImage(img, 0, 0, imageWidth, imageHeight);
						context.restore();
						context.globalCompositeOperation = "destination-out";

						gradient = context.createLinearGradient(0, 0, 0, reflectionHeight);
						gradient.addColorStop(0, "rgba(255, 255, 255, " + (1 - options.opacity) + ")");
						gradient.addColorStop(1, "rgba(255, 255, 255, 1.0)");
						context.fillStyle = gradient;
						context.rect(0, 0, imageWidth, reflectionHeight);
						context.fill();
					} catch (e) {
						return;
					}
				}
				reflection.setStyles({display: "block", border: 0});
				wrapper = new Element(($(img.parentNode).get("tag") == "a") ? "span" : "div").injectAfter(img).adopt(img, reflection);
				wrapper.className = img.className;
				img.store("reflected", wrapper.style.cssText = img.style.cssText);
				wrapper.setStyles({width: imageWidth, height: imageHeight + reflectionHeight, overflow: "hidden"});
				img.style.cssText = "display: block; border: 0px";
				img.className = "reflected";
			}
			if (img.complete) doReflect();
			else img.onload = doReflect;
		}

		return img;
	},
	unreflect: function() {
		var img = this, reflected = this.retrieve("reflected"), wrapper;
		img.onload = $empty;
		if (reflected !== null) {
			wrapper = img.parentNode;
			img.className = wrapper.className;
			img.style.cssText = reflected;
			img.store("reflected", null);
			wrapper.parentNode.replaceChild(img, wrapper);
		}
		return img;
	}
});
