
/*global de*/
de = this.de || {};
de.datev = de.datev || {};
de.datev.portal = de.datev.portal || {};
de.datev.portal.startseite = function () {
    var thisNamespace = de.datev.portal.startseite || {};

////////////////////////////////////////////////////////////////
/////////// Registersteuerung auf der Startseite////////////////
////////////////////////////////////////////////////////////////

	//(2)
	var init = function () {

		var dom = de.datev.dom;
		var events = de.datev.events;
		//(2a)Register: aktuelle Tabe aus URL auslesen
		var url = location.href;
		var id = de.datev.getUrlAnchor(url);
		if (id) {
			selectCurrent(document.getElementById(id));
		}


		//(2b)Register: Eventvergabe
		var einstiegsbox= document.getElementById("startseite_inhalte");
		if(einstiegsbox) {
			var alleRegister= einstiegsbox.getElementsByTagName("dt");

			if (alleRegister.length>0) for(var i = 0; i < alleRegister.length; i++) {

				var alleLinks = alleRegister[i].getElementsByTagName("a");
				if (alleLinks.length>0) for(var j = 0; j < alleLinks.length; j++) {

					var currentLink = alleLinks[j];

					events.addEvent(currentLink, "click", function(evt) {

						try {

							var sourceClick = dom.getParent(events.getSrcElement(evt), "a");
							selectCurrent(sourceClick);
						}
						catch(e){}
					});

					events.addEvent(currentLink, "mouseover", function(evt) {

						var currentOver = events.getSrcElement(evt);
						dom.removeClass(currentOver, "out");

						window.setTimeout(
								function() {
									try {

										//Nur anzeigen, wenn ich während des Timeouts nicht rausgehe
										if(!dom.hasClass(currentOver, "out")){
												selectCurrent(currentOver);
										}
									}
									catch(e) {}
								}, 400);
					});

					events.addEvent(currentLink, "focus", function(evt) {

						var sourceFocus = events.getSrcElement(evt);
						selectCurrent(sourceFocus);
					});


					events.addEvent(currentLink, "mouseout", function(evt) {
						/*Sonderbehandlung fuer das mouseout-Event:
							Im Firefox liefert die events.getSrcElement()-Methode den falschen Knoten.
						*/
						var sourceMouseOut = evt.fromElement; //fuer IE
						if(!sourceMouseOut) {
							var sourceMouseOut = evt.target; //fuer Firefox
						}
						dom.addClass(sourceMouseOut, "out");
					});

				}//end - if(alleLinks)
			}//end - if(alleRegister)
		}//end - if(einstiegsbox)


		//(2c)Newsletter: Eventvergabe Inputfeld
		var newsletterInput = document.getElementById("parm1");
		if(newsletterInput) {

			events.addEvent(newsletterInput, "focus", function() {

				if(newsletterInput.value === "E-Mail-Adresse") {
					newsletterInput.value ="";
				}
			});

			events.addEvent(newsletterInput, "blur", function() {

				if(newsletterInput.value  === "") {
					newsletterInput.value  ="E-Mail-Adresse";
				}
			});
		}// end- if(newsletterInput)
	};

	//(3) Registerauswahl
	var selectCurrent = function (currentLink) {

		var dom = de.datev.dom;

		if(currentLink) {

			//(3a) im relevanten Block (dl) alles zuruecksetzen...
			var relevanterParent = currentLink.parentNode.parentNode;

			var relevanteRegister = relevanterParent.getElementsByTagName("dt");
			var relevanteInhalte = relevanterParent.getElementsByTagName("dd");


			//...Register
			if (relevanteRegister.length>0) for(var i = 0; i < relevanteRegister.length; i++) {
				var relevanterLink = relevanteRegister[i].getElementsByTagName("a")[0];
				if(relevanterLink && dom.hasClass(relevanterLink, "aktiv")) {
					dom.removeClass(relevanterLink, "aktiv");
				}
			}

			//...Inhalte
			if (relevanteInhalte.length>0) for(var j = 0; j < relevanteInhalte.length; j++) {

				dom.addClass(relevanteInhalte[j], "invisible");
			}

			//(3b) Aktuelle Tabe kennzeichnen
			dom.addClass(currentLink, "aktiv");


			//(3c)Aktuellen Inhalt darstellen
			var currentId = currentLink.parentNode.id;
			var currentInhalt = document.getElementById(currentId + '_inhalt');

			if(currentInhalt && dom.hasClass(currentInhalt, "invisible")) {
				dom.removeClass(currentInhalt, "invisible");
			}

		}//end - currentLink

	};

    //////////////////////////////////////////////////////
    // PUBLIC
    //////////////////////////////////////////////////////
    thisNamespace.init = init;

    return thisNamespace;
}(); // de.datev.portal.startseite

////////////////////////////////////////////////////////////////
// (1) Ausfuehrung
////////////////////////////////////////////////////////////////
de.datev.events.addEvent(window, "load", de.datev.portal.startseite.init);
