/**
* Steuerscript fuer stromvonuns.de
*
* <i-D> internet & Design GmbH & Co. KG
* Erfurter Str. 35
* 99423 Weimar
* Deutschland
* Fon:     03643 7785 0
* Fax:     03643 7785 29
* E-Mail:  office@i-d.de
* Web:     http://www.i.d.de/
*
* @author Niels Bobogk <niels@i-d.de>
* @author Michael Waack <m.waack@i-d.de>
* @copy 2009 <i-D> internet & Design GmbH & Co. KG
*/  

iD.loadModule('iD.Toolbox');
iD.loadModule('iD.DropDown');
iD.loadModule('iD.Slideshow');
iD.loadModule('iD.Scrollbar');

iD.loadCss('/css/script-only.css');
 
// ----------------------------------------------------------------------------------------

// config

// Pfad zum Ajax-Remote
var PATH_GLOSSAR_AJAX = '/glossar/glossar.xmldata.ajax.php';

// ----------------------------------------------------------------------------------------

/**
* Startprozedur; erzeugt alle erforderlichen Controls
*/
StromVonUns = {
	// sammelt alle dropdowns der Seite
	DropDowns: [],
	
	/**
	* Initialisierung der einzelnen Controls
	*/
	init: function() {
		
		// IE6 Fehler bei nicht zugelassenen unsicheren ActiveX
		if (Prototype.Browser.IE) {
			try {
				var aTst = new ActiveXObject('Microsoft.XMLHTTP');
			}
			catch(e) {
				for(i=0;i<$$('noscript').length;i++) {
					// bei id:Book kein noscript
					// evtl. dem noscript eine id geben?
					if(!($$('noscript')[i].ancestors()[0].descendants().length>=2 && $$('noscript')[i].ancestors()[0].descendants()[1].id=='Book'))
						$$('noscript')[i].ancestors()[0].insert($$('noscript')[i].innerHTML);

				}
				return;
			}
		}		
		
		// Splashscreen
		StromVonUns.Slideshow.init();
		
		// Dropdowns		
		$$('select.iD_DropDown').each( function(elem) {
			StromVonUns.DropDowns.push(new iD.DropDown(elem));
		});
		// Bookmark-Link
		$$('li.iD_Toolbox_BookmarkLink').each( function(elem) {
			iD.Toolbox.bookmarkLink(elem);
		});

		// Glossar
		StromVonUns.Glossar.init();
		
		// Hamstercam
		StromVonUns.Hamstercam.init("http://www.stromvonuns.de/hamstercam/image.jpg", $("slideshowHamster"));		
	}		
}

// ----------------------------------------------------------------------------------------

/**
* Initiierung der Hamster-Cam
* wird bei Mousedown auf den entsprechenden Link ueber der
* Slideshow angezeigt und beim naechsten Klick wieder verborgen
* periodische Aktualisierung erfolgt nur waehrend der Sichtbarkeitsphase
*/
StromVonUns.Hamstercam = {  
	/**
	* Erstellen des Anzeigecontainers und vorbereiten des Anzeigeknopfs
	*/
	init: function(pathImgHamster, parentNode) {
		// Container mit Bild
//		this.path = pathImgHamster;
//		this.container = new Element("div", { "id" : "hamsterCamContainer" });
//		this.img = new Image();
//		this.img.src = this.path;
//		this.container.insert(this.img);


		// Schliessen-Button
		//this.btnClose = new Element("button", {"class" : "close"}).insert("Beenden");
		//$(this.container).insert(this.btnClose);
		//Event.observe(this.btnClose, "click", this.toggleCamVis.bindAsEventListener(this), false);
		// Horstfilm:
		$('horstfilm').setStyle({'position':'absolute','top':'0','zIndex':'500'});
		this.container = $('horstfilm');
		$(this.container).hide();
		this.camVis = false;
		
		// Startknopf
		this.btnStartStop = $("linkHamstercam");
		this.btnStartStop.href = 'javascript:';
		if (this.btnStartStop) {
			Event.observe(this.btnStartStop, "mousedown", this.toggleCamVis.bindAsEventListener(this), false); 
			// Einfuegen der Cam im selben Container wie die Slideshow
			if (parentNode) {
				$(parentNode).insert(this.container);
			}
		}
	},
	
	/**
	* Anzeigen/Verbergen der Hamstercam
	*/
	toggleCamVis: function(event) {
		Event.stop(event);
		
		// Ausblenden, wenn sichbar
		if (this.camVis) {
			this.container.hide();
			this.camVis = false;
			$(this.perEx).stop();
			Event.stopObserving($('slideshowHamster_Controls'), "click", this.campaignEvent, false);
		}
		// Einblenden, wenn unsichtbar
		else {
			this.campaignEvent = this.toggleCamVis.bindAsEventListener(this);
			Event.observe($('slideshowHamster_Controls'), "click", this.campaignEvent, false);
			this.perEx = new PeriodicalExecuter( function(pe) {
				// periodisches Neuladen des Cam-Bildes
				//StromVonUns.Hamstercam.img.src = StromVonUns.Hamstercam.path + "?" + Math.random();
			// Aktialisierungsrate in Sekunden
			}, 2);
			this.container.show();
			this.camVis = true;
		}
	}
}

// ----------------------------------------------------------------------------------------

/**
* Energielexikon oben links
*/
StromVonUns.Glossar = {
	/**
	* Initialisierung
	* Events der Dropdownlisten auffangen
	*/
	init: function() { 
		this.scrollbar = new iD.Scrollbar('jsScroll');  
		
		this.a = "kuz";
		
		// Index- und Term-Dropdown erfassen
		for (var i = 0; i < StromVonUns.DropDowns.length; i++) {
			if (StromVonUns.DropDowns[i].id == "glossarLetter") {	
				this.ddLetter = StromVonUns.DropDowns[i];
			} else if (StromVonUns.DropDowns[i].id == "glossarTerm") {	
				this.ddTerms = StromVonUns.DropDowns[i];
			}
		}
		
		// Events erfassen
		document.observe("iD.DropDown:change", this.indexChanged.bindAsEventListener(this));
		document.observe("iD.DropDown:change", this.termChanged.bindAsEventListener(this));
		document.observe("iD.DropDown:importComplete", this.termChanged.bindAsEventListener(this));
	},
	
	/**
	* Change-Event beim Wechseln des Buchstabenindex verarbeiten;
	* Liste der Glossareintraege wird erneuert
	*
	* @param object Event
	*/
	indexChanged: function(event) {
		// beim Wechseln des Index-Buchstabens Glossarliste akualisieren 
		// Kennzeichen ist die Knoten-id des urspruenglichen <select>
		if (this.ddLetter && this.ddTerms && event.memo.object == this.ddLetter) {
			// neue Werte fuer Glossarliste laden
			var path = PATH_GLOSSAR_AJAX + "?do=term&letter=" + this.ddLetter.selectedItem().value;
			new Ajax.Request(path, {
					method: 'get',
					asynchronous  : false,
					onSuccess: function(transport) {
						StromVonUns.Glossar.ddTerms.importItemsFromJSON(transport.responseText, true);
					}
				}
			);	
		}
	},
	
	/**
	* Change-Event beim Wechseln der Glossarliste verarbeiten;
	* Beschreibung des Glossareintrags laden und anzeigen
	*
	* @param object Event
	*/
	termChanged: function(event) {
		// beim Wechseln des Glossareintrages den Text akualisieren 
		// Kennzeichen ist die Knoten-id des urspruenglichen <select>
		if (this.ddTerms && event.memo.object == this.ddTerms) {
			// neue Werte fuer Glossarliste laden
			if (this.ddTerms.selectedItem() != undefined) { 
				var path = PATH_GLOSSAR_AJAX + "?do=description&letter=" + this.ddLetter.selectedItem().value + "&term=" + this.ddTerms.selectedItem().value;
			}
			else {
				var path = PATH_GLOSSAR_AJAX + "?do=term&letter=" + this.ddLetter.selectedItem().value;
			}
			
			gScrollBar = this.scrollbar;
			
			new Ajax.Request(path, {
					method: 'get',
					asynchronous  : false,
					onSuccess: function(transport) {
						$('glossarText').update(transport.responseText);
						gScrollBar.update();
					}
				}
			);	
		}
	}
}
var gScrollBar = null;

// ----------------------------------------------------------------------------------------

/**
* Vorbereitung der Slideshow mit Hamster Horst sowie
* Initiierung des Splashscreens
*/
StromVonUns.Slideshow = {
	/** 
	* short cut auf die eigene, statische Klasse
	*/
	_self: this,
	
	/**
	* ob splashScreen ausfefuehrt wird oder nicht
	*/
	isSplashScreen: false,
	
	/**
	* Ladetext
	*/
	splashScreenText: new Element('p', { "id" : "splashScreenText", "class" : "text" }).insert("Animation abbrechen&hellip;"),
	
	/**
	* splashscreen-Container
	*/
	splashContainer: new Element('div', { "id" : "splashScreenContainer"} ).insert(),
	
	/**
	* grosses Bild vom Hamster
	*/
	splashScreenImg: new Image(),
	
	/**
	* Startprozedur
	*/
	init: function() {		
		_self = StromVonUns.Slideshow;
		$(_self.splashContainer).insert(_self.splashScreenText);
		_self.splashScreenImg.id = 'splashScreenImg';
		//_self.splashScreenInit();
		
		Event.observe($(_self.splashScreenText), "click", this.splashscreenFadeOut.bindAsEventListener(this));
		
		if (typeof iD.Slideshow != 'undefined') {
			// config-Datei laden
			new Ajax.Request('/js/config.slideshow.horst.js', {
					method: 'get',
					asynchronous  : false,
					onSuccess: function(transport) {	
						// Slideshow erstellen; beim Start mit Zufallsbild
						_self.slideshowHamster = new iD.Slideshow($('slideshowHamster'), transport.responseText, false, -1, true, false);
					
						// Steuerelemente plazieren
						$('slideshowHamster_Controls').insert(_self.slideshowHamster.ButtonPrevious); 
						$('slideshowHamster_Controls').insert(new Element("img", { "src" : "/img/txt-kampagne-blaettern.png", "id" : "slideshowTxtKampagneBlaettern" }));
						$('slideshowHamster_Controls').insert(_self.slideshowHamster.ButtonNext);
						
						// zu linearem Modus wechseln
						_self.slideshowHamster.switchToLinear();
						
						// splashscreen-Bild laden
						if (_self.isSplashScreen) {
							// warten, bis Originalbild vorhanden ist
							new PeriodicalExecuter( function(pe) {
								var itemOrig = _self.slideshowHamster.getCurrentSlideshowItem();
								var imgOrig = itemOrig.img;
								
								if (itemOrig && itemOrig.readyState() > 0 && imgOrig && imgOrig.src && imgOrig.complete) {
									pe.stop();
									
									// Grossansicht laden
									_self.splashScreenImg.src = imgOrig.src.replace('.jpg', '-big.jpg');
									$$('body')[0].insert(_self.splashScreenImg);									
									
									// warten, bis Grossbild geladen ist
									new PeriodicalExecuter( function(pe2) {
										if (_self.splashScreenImg.complete) {
											pe2.stop();
											
											//$(_self.splashScreenText).update('Fertig!');
											
											$(_self.splashScreenImg).setStyle({ 
												'left' : ((document.documentElement.clientWidth / 2) - (_self.splashScreenImg.width / 2)) + 'px',
												'top' : ((document.documentElement.clientHeight / 2) - (_self.splashScreenImg.getHeight() / 2)) + 'px'
											});

											// splashscreen ausblenden
											setTimeout('_self.splashscreenFadeOut()', 3000);
										}
									}, 0.5);
								}
							}, 0.5);							
						}
					}
				}
			);
		}
	},
	
	/**
	* Wenn cookies erlaubt sind und noch nicht der splashscreen gezeigt wurde,
	* wird das spaeter oben eingefuegte Hamsterbild in einer Grossversion als
	* splashscreen gezeigt. Ist die Seite fertig geladen und eine bestimmte Zeitdauer vergangen,
	* zoomt der splashscreen zum Bild oben ein und "fadet" dabei aus
	*/
	splashScreenInit: function() {
		if (navigator.cookieEnabled) {
			var c = document.cookie;
			// noch nicht angezeigt
			if (c.toLowerCase().indexOf('splashscreen=true') == -1) {
				_self.isSplashScreen = true;
				// damit Hoehe ermittelt werden kann;
				// wird nach dem Ausblenden zurueckgesetzt
				$('wrap').absolutize();
				// Groesse des Containers anpassen
				$(_self.splashContainer).setStyle( {"height" : $('wrap').getHeight() + 'px'});
				// Container einfuegen
				$$('body')[0].insert(_self.splashContainer);
			}
		}
	},
	
	/**
	* Ausblenden des splashscreens
	*/
	splashscreenFadeOut: function() {
		var orig = _self.slideshowHamster.getCurrentSlideshowItem();
		var pos = iD.Toolbox.cumulativeOffset(orig.img);
		
		// IE macht Probleme beim Faden von dynamisch erzeugten Containern
		try {
			$(_self.splashContainer).fade();
		} catch(e) {
			$(_self.splashContainer).hide();	
		}
		$(_self.splashScreenImg).morph (
			'width:' + orig.img.width + 'px; ' +
			'height:' + orig.img.height + 'px; ' + 
			'top: ' + pos.y + 'px;' +
			'left:' + pos.x + 'px'
		);
		$(_self.splashScreenImg).fade({
			afterFinish: function() {	
				// wrap wieder statisch positionieren, sonst Probleme beim window resize
				$('wrap').setStyle( {"position" : "static"} );	
			}	
		});
		
		_self.setCookie();		
		_self.slideshowHamster.load();
	},
	
	/**
	* wenn Splashscreen bereits angezeigt wurde, dann Signal-Cookie setzen
	*/
	setCookie: function() {
		document.cookie = "splashscreen=true;"
	}
}

// ----------------------------------------------------------------------------------------

document.observe("dom:loaded", StromVonUns.init);
document.observe("dom:loaded", ImageBook);

