/*************************************************
* Konfiguration
*************************************************/

// Horizontale Ziel-Position (0 = zentriert)
AquilaConfigNewPosX = 0;
// Vertikale Ziel-Position (0 = zentriert)
AquilaConfigNewPosY = 35;
// Geschwindigkeit 1-10 (1 = schnell, 10 = langsam)
AquilaConfigSpeed = 3;

/*************************************************
* Aquila
*************************************************/

function Aquila() {
	// Variablen initialisieren
	AquilaActive = null;
	AquilaObjBody = null;
	AquilaObjLink = null;
	AquilaObjSmall = null;
	AquilaObjBig = null;
	// Laden
	AquilaLoad();
	}

/*************************************************
* Laden
*************************************************/

function AquilaLoad() {
	// Body-Tag gefunden?
	if(document.getElementsByTagName('body').length > 0) {
		AquilaObjBody = document.getElementsByTagName('body')[0];
		AquilaInit();
		}
	// Ansonsten rekursiver Aufruf
	else {
		setTimeout('AquilaLoad()', 10);
		}
	}

/*************************************************
* Initialisieren
*************************************************/

function AquilaInit() {
	// Betreffende Links finden
	var AquilaLinks = document.getElementsByTagName('a');
	// Links belegen
	for(i = 0; i < AquilaLinks.length; i++) {
		var AquilaLink = AquilaLinks[i];
		if((AquilaLink.getAttribute('href')) && (AquilaLink.getAttribute('rel') == 'aquila')) {
			AquilaLink.onclick = function() {
				AquilaStart(this);
				return false;
				}
			AquilaLink.className = 'aquila';
			}
		}
	// Container erzeugen
	var AquilaElementContainer = document.createElement('div');
	AquilaElementContainer.setAttribute('id', 'Aquila');
	AquilaElementContainer.style.display = 'none';
	AquilaElementContainer.style.position = 'absolute';
	AquilaElementContainer.style.top = '0';
	AquilaElementContainer.style.left = '0';
	AquilaElementContainer.style.zIndex = '99';
	AquilaElementContainer.style.width = '0px';
	AquilaElementContainer.style.height = '0px';
	// Link erzeugen
	var AquilaElementLink = document.createElement('a');
	AquilaElementLink.setAttribute('id', 'AquilaLink');
	AquilaElementLink.setAttribute('href', '#');
	AquilaElementLink.style.color = 'transparent';
	AquilaElementLink.onclick = function() {
		AquilaStop();
		return false;
		}
	// Bild erzeugen
	var AquilaElementImage = document.createElement('img');
	AquilaElementImage.setAttribute('id', 'AquilaImage');
	AquilaElementImage.style.opacity = 0;
	AquilaElementImage.style.filter = 'Alpha(opacity=0)';
	AquilaElementImage.style.border = 0;
	// Elemente einbinden
	AquilaObjBody.appendChild(AquilaElementContainer);
	AquilaElementContainer.appendChild(AquilaElementLink);
	AquilaElementLink.appendChild(AquilaElementImage);
	}

/*************************************************
* Starten
*************************************************/

function AquilaStart(AquilaLink) {
	// Objekte bestimmen
	AquilaObjLink = AquilaLink;
	// Laufende Vorgaenge beenden
	AquilaStop();
	// Status ueberpruefen
	AquilaCheckStatus();
	}

/*************************************************
* Status ueberpruefen
*************************************************/

function AquilaCheckStatus() {
	if(AquilaActive == null || AquilaActive == '0') {
		AquilaActive = 1;
		// Objekte bestimmen
		AquilaObjSmall = AquilaObjLink.firstChild;
		AquilaObjBig = new Image();
		AquilaObjBig.src = AquilaObjLink.href;
		// Bild vorladen
		AquilaPreloadImage();
		}
	else {
		setTimeout('AquilaCheckStatus()', 10);
		}
	}

/*************************************************
* Bild vorladen
*************************************************/

function AquilaPreloadImage() {
	if(AquilaObjBig.complete) {
		AquilaIncrease();
		}
	else {
		setTimeout('AquilaPreloadImage()', 10);
		}
	}

/*************************************************
* Bild vergroessern
*************************************************/

function AquilaIncrease() {
	// Bild vorbereiten
	AquilaObjSmallRect = AquilaRect(AquilaObjSmall);
	document.getElementById('AquilaImage').src = AquilaObjLink.href;
	document.getElementById('AquilaImage').width = AquilaObjSmall.width;
	document.getElementById('AquilaImage').height = AquilaObjSmall.height;
	document.getElementById('Aquila').style.top = AquilaObjSmallRect.top+'px';
	document.getElementById('Aquila').style.left = AquilaObjSmallRect.left+'px';
	document.getElementById('Aquila').style.display = 'block';
	// Ziel-Koordinaten ermitteln
	AquilaNewPosX = ((typeof AquilaConfigNewPosX !== 'undefined') && (AquilaConfigNewPosX > 0))?AquilaConfigNewPosX:((document.documentElement.clientWidth/2)-(AquilaObjBig.width/2))+document.documentElement.scrollLeft;
	AquilaNewPosY = ((typeof AquilaConfigNewPosY !== 'undefined') && (AquilaConfigNewPosY > 0))?AquilaConfigNewPosY:((document.documentElement.clientHeight/2)-(AquilaObjBig.height/2))+document.documentElement.scrollTop;
	// Horizontale Bewegung berechnen
	if(AquilaObjSmallRect.left < AquilaNewPosX) {
		AquilaDirectionX = 'right';
		AquilaWayX = AquilaNewPosX-AquilaObjSmallRect.left;
		}
	else {
		AquilaDirectionX = 'left';
		AquilaWayX = AquilaObjSmallRect.left-AquilaNewPosX;
		}
	// Vertikale Bewegung berechnen
	if(AquilaObjSmallRect.top < AquilaNewPosY) {
		AquilaDirectionY = 'down';
		AquilaWayY = AquilaNewPosY-AquilaObjSmallRect.top;
		}
	else {
		AquilaDirectionY = 'up';
		AquilaWayY = AquilaObjSmallRect.top-AquilaNewPosY;
		}
	// Schritte berechnen
	AquilaStepsX = AquilaWayX/10;
	AquilaStepsY = AquilaWayY/10;
	AquilaStepsWidth = (AquilaObjBig.width-AquilaObjSmall.width)/10;
	AquilaStepsHeight = (AquilaObjBig.height-AquilaObjSmall.height)/10;
	AquilaStepsVisible = 1/10;
	// Prozess starten
	var TimeInterval = AquilaConfigSpeed*10;
	var TimeStart = TimeInterval;
	for(i = 1; i <= 10; i++) {
		setTimeout('AquilaProcess('+i+', 1)', TimeStart);
		TimeStart = TimeStart+TimeInterval;
		}
	}

/*************************************************
* Prozess
*************************************************/

function AquilaProcess(AquilaProcessTime, AquilaProcessMode) {
	// Vergroessern
	if(AquilaProcessMode == 1) {
		// Endgueltiger Zustand
		if(AquilaProcessTime == 10) {
			document.getElementById('Aquila').style.top = AquilaNewPosY+'px';
			document.getElementById('Aquila').style.left = AquilaNewPosX+'px';
			document.getElementById('AquilaImage').width = AquilaObjBig.width;
			document.getElementById('AquilaImage').height = AquilaObjBig.height;
			document.getElementById('AquilaImage').style.opacity = 1;
			document.getElementById('AquilaImage').style.filter = 'Alpha(opacity=100)';
			}
		// Schritte
		else {
			// Groesse und Sichtbarkeit
			document.getElementById('AquilaImage').width += AquilaStepsWidth;
			document.getElementById('AquilaImage').height += AquilaStepsHeight;
			document.getElementById('AquilaImage').style.opacity = parseFloat(document.getElementById('AquilaImage').style.opacity)+parseFloat(AquilaStepsVisible);
			document.getElementById('AquilaImage').style.filter = 'Alpha(opacity='+parseFloat(document.getElementById('AquilaImage').style.opacity)*100+')';
			// Horizontal bewegen
			if(AquilaDirectionX == 'left') {
				document.getElementById('Aquila').style.left = parseInt(String(document.getElementById('Aquila').style.left).replace(/px/, ''))-Math.round(AquilaStepsX)+'px';
				}
			else {
				document.getElementById('Aquila').style.left = parseInt(String(document.getElementById('Aquila').style.left).replace(/px/, ''))+Math.round(AquilaStepsX)+'px';
				}
			// Vertikal bewegen
			if(AquilaDirectionY == 'up') {
				document.getElementById('Aquila').style.top = parseInt(String(document.getElementById('Aquila').style.top).replace(/px/, ''))-Math.round(AquilaStepsY)+'px';
				}
			else {
				document.getElementById('Aquila').style.top = parseInt(String(document.getElementById('Aquila').style.top).replace(/px/, ''))+Math.round(AquilaStepsY)+'px';
				}
			}
		}
	// Verkleinern
	else {
		// Endgueltiger Zustand
		if(AquilaProcessTime == 10) {
			document.getElementById('Aquila').style.display = 'none';
			document.getElementById('AquilaImage').src = '';
			document.getElementById('AquilaImage').style.opacity = 0;
			document.getElementById('AquilaImage').style.filter = 'Alpha(opacity=0)';
			document.getElementById('AquilaImage').width = AquilaObjSmall.width;
			document.getElementById('AquilaImage').height = AquilaObjSmall.height;
			AquilaActive = 0;
			}
		// Schritte
		else {
			// Groesse und Sichtbarkeit
			document.getElementById('AquilaImage').width -= AquilaStepsWidth;
			document.getElementById('AquilaImage').height -= AquilaStepsHeight;
			document.getElementById('AquilaImage').style.opacity = parseFloat(document.getElementById('AquilaImage').style.opacity)-parseFloat(AquilaStepsVisible);
			document.getElementById('AquilaImage').style.filter = 'Alpha(opacity='+parseFloat(document.getElementById('AquilaImage').style.opacity)*100+')';
			// Horizontal bewegen
			if(AquilaDirectionX == 'left') {
				document.getElementById('Aquila').style.left = parseInt(String(document.getElementById('Aquila').style.left).replace(/px/, ''))+Math.round(AquilaStepsX)+'px';
				}
			else {
				document.getElementById('Aquila').style.left = parseInt(String(document.getElementById('Aquila').style.left).replace(/px/, ''))-Math.round(AquilaStepsX)+'px';
				}
			// Vertikal bewegen
			if(AquilaDirectionY == 'up') {
				document.getElementById('Aquila').style.top = parseInt(String(document.getElementById('Aquila').style.top).replace(/px/, ''))+Math.round(AquilaStepsY)+'px';
				}
			else {
				document.getElementById('Aquila').style.top = parseInt(String(document.getElementById('Aquila').style.top).replace(/px/, ''))-Math.round(AquilaStepsY)+'px';
				}
			}
		}
	}

/*************************************************
* Bild-Dimensionen ermitteln
*************************************************/

function AquilaRect(element) {
	// Objekt bestimmen
	var Rect = new Object();
	Rect.top = 0;
	Rect.left = 0;
	Rect.width = 0;
	Rect.height = 0;
	// Kein Element
	if(!element) {
		return Rect;
		}
	// Element
	else {
		if(typeof element == 'string') {
			element = document.getElementById(element);
			}
		if(typeof element == 'object') {
			if(typeof element.offsetTop !== 'undefined') {
				Rect.height = element.offsetHeight;
				Rect.width = element.offsetWidth;
				Rect.left = Rect.top = 0;
				while (element && element.tagName != 'BODY') {
					Rect.top  += parseInt(element.offsetTop);
					Rect.left += parseInt(element.offsetLeft);
					element = element.offsetParent;
					}
				}
			}
		}
	return Rect;
	}

/*************************************************
* Zoom beenden
*************************************************/

function AquilaStop() {
	if(AquilaActive == '1') {
		var TimeInterval = AquilaConfigSpeed*10;
		var TimeStart = TimeInterval;
		for(i = 1; i <= 10; i++) {
			setTimeout('AquilaProcess('+i+', 0)', TimeStart);
			TimeStart = TimeStart+TimeInterval;
			}
		}
	}

/*************************************************
* Initialisierung starten
*************************************************/

Aquila();