/**
 * Maus X-Position
 */
var clientX;

/**
 * Maus Y-Position
 */
var clientY;

/**
 * Setzt die Ereignisse bei den die Maus-Koordinaten ermittelt werden sollen
 */
function setMouseMove() {
	document.onmousemove = checkHoverBaseEntries;
	document.onload = checkHoverBaseEntries;
}

/**
 * Karten-Funktionen auf das Dokument und das Kartenbild anwenden
 */
function maps() {
	setMouseMove();
}

/**
 * Kontrolliert die Mausposition und setzt diese. Dann werden alle popup-Divs
 * ausgelesen und durchlaufen: ist die Maus innerhalb des Basiseintrags, 
 * dann zeige diesen an. Der Parameter "eventHandle" ist für Browser-Kompabilität
 */
function checkHoverBaseEntries(eventHandle) {

  if (!eventHandle) 
	eventHandle = window.event;

	/**
	 * Wie weit ist gescrollt - die Variablen
	 */
	var scrollX, scrollY;

	/**
	 * scroll-Werte auslesen - Browserunterschiedlich
	 * siehe selfhtml und tc-wiki
	 */
	if (typeof window.pageXOffset != 'undefined') {
		scrollX = window.pageXOffset;
		scrollY = window.pageYOffset;
	} else if (document.documentElement) {
		scrollX = document.documentElement.scrollLeft;
		scrollY = document.documentElement.scrollTop;
	} else {
		scrollX = document.body.scrollLeft;
		scrollY = document.body.scrollTop;
	}

	/**
	 * scroll-Werte zu Maus-Position addieren, um Position im Dokument zu haben
	 */
    clientX = eventHandle.clientX + scrollX;
    clientY = eventHandle.clientY + scrollY;

	/**
	 * popup-DIVs einlesen
	 */
	var popupDivs = document.getElementsByTagName('div');

	/**
	 * Durchlaufen der DIVs und kontrollieren, ob diese noch
	 * angezeigt werdenmüssen
	 */
	for (var i = 0; i < popupDivs.length; i++) {
		if (popupDivs[i].id != null) {
			if (popupDivs[i].id.indexOf('popup') != -1) {
				checkShowHideHoverBaseEntry(popupDivs[i].id.substr(5, 9));
			}
		}
	}
}

/**
 * Gibt den Namen / Id eines popup-DIVs zurück
 */
function getBaseEntryPopUpName(customerNo) {
	return 'popup' + customerNo;
}

/**
 * Sofern der DIV für ein Basiseintrag - popup noch nicht besteht, wird dieser
 * erstellt und zurückgegeben
 */
function createBaseEntryPopUp(customerNo) {
	var popup = getBaseEntryPopUpName(customerNo);
	if (document.getElementById(popup) == null) {
	
		var div = document.createElement('div');
		div.id	= popup;

		var city = new TC_CityManagement_JS();
		div.style.cssText = 'padding-top: 15px;';

		div.innerHTML = city.readBaseEntry(customerNo);
		//show(city__request);
		//var blub = div.getElementsByTagName('div')[0].getElementsByTagName('div')[0];

		return div;
	} else {
		return false;
	}
}

/**
 * liest die Höhe und Breite eines Basiseintrags aus und gibt diese
 * Werte als Array zurück
 */
function getBaseEntrySize(customerNo) {
		var popup = getBaseEntryPopUpName(customerNo);

		var div = document.getElementById(popup);

		if (div != null) {
			/**
			 * DIVs innerhalb des popups
			 */
			var innerDivs = div.getElementsByTagName('div');
	
			/**
			 * Basiseintrag Höhe und Breite
			 */
		 	var returnValue = new Array();
		 	//alert('blah');
			returnValue['width'] = 0;
			returnValue['height'] = 0;
	
			for (var i = 0; i < innerDivs.length; i++) {
				if (returnValue['width'] < innerDivs[i].offsetWidth) {
					returnValue['width'] = innerDivs[i].offsetWidth;
				}
				
				if (returnValue['height'] < innerDivs[i].offsetHeight) {
					returnValue['height'] = innerDivs[i].offsetHeight;
				}
			}
		} else {
			var returnValue = false;
		}
		return returnValue;
}

/**
 * Zeigt den Basiseintrag in der Seite an der Mausposition oder an Stelle x y an
 */
function showHoverBaseEntry(customerNo, x, y) {

	if (typeof x == 'undefined') {
		x = clientX;
	}

	if (typeof y == 'undefined') {
		y = clientY;
	}

	/**
	 * Name des PopUp-DIVS
	 */
	var popup = getBaseEntryPopUpName(customerNo);
	
	/**
	 * generiert das DIV-Objekt
	 */
	var div = createBaseEntryPopUp(customerNo);

	/**
	 * besteht der DIV schon
	 */
	if (div) {
		/**
		 * hängt den DIV an den BODY-Tag an
		 */
		document.getElementsByTagName('body')[0].appendChild(div);
		div.style.cssText = 'position: absolute; z-index: 100; filter: Shadow(color=#666666, direction=135); padding-right: 10px;';
		showAddInfos(customerNo, false);
	} else {
		div = document.getElementById(popup);
		div.style.display =  '';
	}

	/**
	 * Basiseintrag Höhe und Breite
	 */
	var size = getBaseEntrySize(customerNo);
	var baseEntryWidth = size['width'];
	var baseEntryHeight = size['height'];

	/**
	 * Seitenhöhe und Seitenbreite
	 */
	var pageX = document.body.offsetWidth;
	var pageY = 0;
	var divBodyElements = document.getElementsByTagName('div');
	for (var i = 0; i < divBodyElements.length; i++) {
		pageY += divBodyElements[i].offsetHeight;
	}

	//pageY = document.body.clientHeight;

	/**
	 * Basiseintrag rechts ordentlich positionieren
	 */
	if ((x + baseEntryWidth) > pageX) {
		x = x - ((x + baseEntryWidth) - pageX);
	}

	/**
	 * Basiseintrag unten ordentlich positionieren
	 */
	if ((y + baseEntryHeight) > pageY) {
		y = y - ((y + baseEntryHeight) - pageY);
	}

	div.style.left = x + 'px';
	div.style.top = y + 'px';

	showElement(popup);
}

/**
 * Prüft, ob der Basiseintrag für eine Kundennummer noch angezeigt werden muss
 * oder nicht - wird dauerthaft für alle bisher aufgerufenen Basiseinträge
 * durchgeführt
 */
function checkShowHideHoverBaseEntry(customerNo) {

	/**
	 * Name des PopUp-DIV
	 */
	var popup = getBaseEntryPopUpName(customerNo);
	var div = document.getElementById(popup);

	/**
	 * Prüfen, ob des den DIV wirklich gibt
	 */
	if (div != null) {
		if (div.style.display == '') {

			/**
			 * Position des Cursors in der Seite weitergeben
			 */
			var mouseX = clientX;
			var mouseY = clientY;

			/**
			 * Position und Größe des Basiseintrags auslesen
			 */
			var baseEntrySize = getBaseEntrySize(customerNo);
			var baseEntryPos = getPos(popup);

			var tolerance = 5;

			/**
			 * Befindet sich die Mausposition innerhalb oder ausserhalb des
			 * Basiseintrag. Bei ausserhalb wird Basiseintrag ausgeblendet.
			 */
			if (mouseX < (baseEntryPos[0] - tolerance) || mouseX > (baseEntryPos[0] + baseEntrySize['width'] + tolerance)) {
				hideHoverBaseEntry(customerNo);
			}
			
			if (mouseY < (baseEntryPos[1] - tolerance) || mouseY > (baseEntryPos[1] + baseEntrySize['height'] + tolerance)) {
				hideHoverBaseEntry(customerNo);
			}
		}

	}
}

/**
 * Blendet ein DIV-Popup in der Karte wieder aus
 * Dieses passiert nicht sofort, sondern nach einer gewissen Zeit
 */
function hideHoverBaseEntry(customerNo) {
	var popup = getBaseEntryPopUpName(customerNo);
	window.setTimeout('hideElement(\'' + popup + '\')', 500);
}

/**
 * Blendet einen Div mit der Id divId ein
 */
function showElement(elementId) {

	if (document.getElementById(elementId) != null) {
			document.getElementById(elementId).style.display = '';
	}
}

/**
 * Blendet einen Div mit der Id divId aus
 */
function hideElement(elementId) {
	if (document.getElementById(elementId) != null) {
			document.getElementById(elementId).style.display = 'none';
	}
}

/**
 * Erstellt ein Bild via Javascript und returnt es
 */
function createImage(img, width, height, title) {
	var image = document.createElement('img');
	image.src = img;

	image.style.cssText = '';

	if (typeof width != 'undefined') {
		image.style.cssText = image.style.cssText + 'width: ' + width + 'px;';
	}

	if (typeof height != 'undefined') {
	 	image.style.cssText = image.style.cssText + 'height: ' + height + 'px;'
	}

	if (typeof title == 'undefined') {
		title = '';
	}

	image.title = image.alt = title;
	return image;
}

/**
 * Zeigt einen Basiseintrag in der Firmenliste an
 */
function showBaseEntryCompanyList(customerNo) {
	var popup = getBaseEntryPopUpName(customerNo);
	var divID = 'companylist' + customerNo;
	var companyDiv = document.getElementById(divID);

	var div = createBaseEntryPopUp(customerNo);

	/**
	 * Wenn ein DIV erstellt wurde, wird dieser an den companylist-Div angehängt
	 */
	if (div) {
		/**
		 * DIVs innerhalb des popups
		 */
		var innerDivs = div.getElementsByTagName('div');

		innerDivs[1].style.cssText = 'margin: auto;';

		companyDiv.appendChild(div);
	}

	/**
	 * Blendet gleich die "Weiteren Informationen" ein
	 */
	showAddInfos(customerNo, false);

	/**
	 * Bei erneutem Klick auf den Firmennamen wird der Basiseintrag
	 * wieder ausgeblendet
	 */
	companyDiv.getElementsByTagName('a')[0].href = 'javascript:hideBaseEntryCompanyList(\'' + customerNo + '\')';

	/**
	 * abschliessend wird der DIV eingeblendet
	 */
	showElement(popup);
}

/**
 * Blendet den Basiseintrag in der Firmenliste wieder aus
 */
function hideBaseEntryCompanyList(customerNo) {
	/**
	 * Der HREF des Firmennamens wird wieder auf anzeigen gesetzt
	 */
	document.getElementById('companylist' + customerNo).getElementsByTagName('a')[0].href = 'javascript:showBaseEntryCompanyList(\'' + customerNo + '\')';

	/**
	 * popup-DIV wird wieder ausgeblendet
	 */
	hideElement('popup' + customerNo);
}

/**
 * Generiert die "Weiteren Informationen"
 * Wenn close = true, werden weiteren Informationen nicht gleich angezeigt
 */
function showAddInfos(customerNo, close) {
	if (typeof close == 'undefined') {
		close = true;
	}

	/**
	 *Allgemeine Informartionen
	 */
	var aktuellesStade = Array();
	aktuellesStade['width'] = 220;
	aktuellesStade['height'] = 38;
	aktuellesStade['text'] = 'Aktuelles Stade';
	aktuellesStade['link'] = 'http://www.aktuelles-stade.de/';
	aktuellesStade['img'] = '/img/stadeAktuellBig.gif';

	/**
	 *DIV für ZusatzInfos des Kunden ansprechen
	 */
	var addInfos = document.getElementById('c' + customerNo);

	/**
	 * Wenn keine "Weiteren Informationen" bestehen
	 */
	if (addInfos != null) {
		/**
		 * Prüfen, schon "Weitere Informationen generiert wurden"
		 */
		if (addInfos.getElementsByTagName('div').length == 0) {

			/**
			 * Einen DIV als HauptDIV darin einfügen
			 */
			var block = document.createElement('div');
			addInfos.appendChild(block);
			block.style.width = "100%";		
			/**
			 * Div mit float: left in block einfügen
			 */
			var leftDiv = document.createElement('div');
			leftDiv.className = 'left';
			block.appendChild(leftDiv);
	
			/**
			 * Div mit float: right in block einfügen
			 */
			var rightDiv = document.createElement('div');
			rightDiv.className = 'right';
			block.appendChild(rightDiv);
		
			/**
			 * <br class="clear" /> als Element erzeugen
			 */
			var brClear = document.createElement('br');
			brClear.className = 'clear fix';
		
			
			/**
			 * close Window einbauen
			 */
			if (close == true) {
				var divCloseWindow = document.createElement('a');
				divCloseWindow.className = 'closeWindow';
				divCloseWindow.appendChild(document.createTextNode('X'));
				divCloseWindow.href = 'javascript:hideAddInfos(\'' + customerNo + '\')';
				divCloseWindow.title = 'Weitere Informationen schliessen';
				rightDiv.appendChild(divCloseWindow);
			}

			/**
			 * BR clear für Optik
			 * brClear.className = 'clear fix';
			 */
			rightDiv.appendChild(brClear);
	
			/**
			 * Zusätzliches Bild anzeigen
			 */
			var picture = getpicture(customerNo);
			if (picture) {
				var addInfosImg = createImage('/img/cms/add_infos/picture/' + picture['name'], picture['width'], picture['height']);
				leftDiv.appendChild(addInfosImg);
			}

			/**
			 * Prüfen Mitgliedschaft "Aktuelles Stade"
			 * Wenn ja, dann wird diese mit Logo eingebaut
			 */
			if (getmembership(customerNo)) {
				/**
				 * Text: "Mitglied im"
				 */
				var h3 = document.createElement('h3');
				rightDiv.appendChild(h3).appendChild(document.createTextNode('Mitglied im'));

				/**
				 * Link zur Mitgliedschaft http://www.aktuelles-stade.de
				 */
				var memberShipA = document.createElement('a');
				memberShipA.target = '_blank';
				memberShipA.title = aktuellesStade['text'];
				memberShipA.href = aktuellesStade['link'];

				/**
				 * Bild / Logo vom aktuellen Stade
				 */
				var memberShipImg = createImage(aktuellesStade['img'], aktuellesStade['width'], aktuellesStade['height'], aktuellesStade['text']);
				h3.appendChild(memberShipA).appendChild(memberShipImg);
			} else {
				rightDiv.innerHTML = rightDiv.innerHTML;
			}

			/**
			 * BR clear = all einfügen
			 * brClear.className = 'clear fix';
			 */
//alert('hier');
			block.appendChild(brClear);
		}
	}

	/**
	 * DIV sichtbar schalten
	 */
	showElement('c' + customerNo);

	/**
	 * Den "Weitere Informationen" - Div ausschalten
	 */
	hideElement('m' + customerNo);
}

/**
 * Blendet die "Weiteren Informationen" aus und die Navigation 
 * für die "Weiteren Informationen" wieder ein
 */
function hideAddInfos(customerNo) {
	hideElement('c' + customerNo);
	showElement('m' + customerNo);
}

/**
 * Existiert ein Bild zu dem Kunden
 */
function getpicture(customerNo) {
	var city = new TC_CityManagement_JS();
	return city.getPicture(customerNo);
}

/**
 * Prüft, ob der Kunde Mitglied im Aktuellen Stade ist
 */
function getmembership(customerNo) {
	var city = new TC_CityManagement_JS();
	return city.getMemberShip(customerNo);
}

/**
 * Karten-Funktionen auf das Dokument und das Kartenbild anwenden
 */
function virtualTour() {
	setMouseMove();
}