/**
 * @author neo
 */
 PsControllerClass = new Class({
	Implements: [Events],

	initScrollAreas:function(){
		//for the scrollbars
		var that = this;
		$$('.scrollBar').each(function(item){
			item.addEvents({
				mouseenter: function(){
					that.scrollAlreadyUsed = true;
					if (that.showNavigationHint==true){
						//Roar initialisieren
						that.myRoar.setDuration(15000);
						that.myRoar.alert('Prima :)', 
							'Sie haben einen kleinen Helfer sehr glücklich gemacht!'+
							'<br><br>'+
							'Je weiter Sie den Mauszeiger in Richtung oberes oder unteres'+
							' Fensterende bewegen desto schneller wird das Fenster scrollen.'+
							'<br><br>'+
							'Falls Sie schnell an den Seitenanfang oder das Ende kommen möchten,'+
							' benutzen Sie die Pfeile in der Mitte des Fensterrands.'+
							'<br><br>'+
							' Viel Spaß weiterhin.'
						);
					}
					that.showNavigationHint = false;
					
					var showNav = false;
					var yPosition = document.body.getScroll().y;
					var maxPosition = document.body.getScrollSize().y; 
					var bottomPosition = $(window).getSize().y+yPosition;
					
					if (this.get('class').replace('scrollBar ', '') == 'top') {
						showNav = yPosition > 0;
					} else {
						showNav = bottomPosition<maxPosition;
					}
					this.store('shown',showNav);
					if(showNav){	
						this.morph({ 'opacity':[0.001,0.9] });	
					}
				},
		        mouseleave: function(){
					if (this.retrieve('shown',false)){
						this.morph({ 'opacity': [0.9, 0.001] });
					}
		        }
			});
		});	
	},
	initLinkAlert:function(){
		var graphicsDir = './pictures/linkalert/';
		var context = new LinkAlert({
			extensions: {
				/*doc: graphicsDir + 'word.png',
				js: graphicsDir + 'js.png',*/
				pdf: graphicsDir + 'pdf.png',
				/*txt: graphicsDir + 'text.gif',
				xls: graphicsDir + 'xls.png',*/
				jpg: graphicsDir + 'jpg.png',
				png: graphicsDir + 'jpg.png'
			},
			protocols: {
				/*
				ftp: graphicsDir + 'ftp.png',
				https: graphicsDir + 'secure.png',
				'javascript:': graphicsDir + 'js.png'
				*/
			},
			preloadImages: true,
			sticky: true,
			onShow: function(el,image) {
				this.image.fade('in');
			},
			onHide: function(el,image) {
				this.image.fade('out');
			}
		});
	},
	initWheel:function(){
		//Event registrieren
		document.addEvent('mousewheel', function(event){
			event = new Event(event);
			if (this.visits == 0) {
				if (!this.scrollAlreadyUsed) {
					if (this.wheelUsageCount == 30) {
						this.myRoar.alert('Tipp', 'Sie können anstatt des Mausrads auch einfach an die oberen und unteren Fensterränder gehen.');
					}
					if (this.wheelUsageCount == 50) {
						this.myRoar.alert('Ehrlich!', 'Vertrauen Sie mir... es funktioniert wirklich: Einfach den Mauszeiger an den oberen oder unteren Rand bewegen :)');
					}
					if (this.wheelUsageCount == 100) {
						this.myRoar.alert('Angebot zur Güte:', 'Ok, Sie versprechen mir, es einmal zu versuchen und ich werde ab sofort still sein! Einverstanden? ;)');
						this.showNavigationHint = true;
					}
				}
			}
			document.window.scrollTo(document.window.getScroll().x, document.window.getScroll().y - (event.wheel * 50));
			this.wheelUsageCount++;
		}.bind(this));
	},
	removeHeight:function(element){
		var visibility = element.getStyle('visibility');
		var opacity = element.getStyle('opacity');
		element.set('style','visibility:'+visibility+';opacity:'+opacity+';');
	},
	initContainerSize:function(){
		var widgets = document.id('widgets');
		var content = document.id('content');  
		widgets.set('style','');
		var contentMargins = parseInt(content.getStyle('padding-top'))+parseInt(content.getStyle('padding-bottom'));
		contentMargins = contentMargins + parseInt(content.getStyle('margin-top'))+parseInt(content.getStyle('margin-bottom'));
		var contentHeight = content.getSize().y+contentMargins+100;
		var widgetsHeight = widgets.getSize().y;
		if (contentHeight != widgetsHeight) {
			if (contentHeight > widgetsHeight) {
				widgets.setStyle('height', contentHeight+contentMargins);
				content.setStyle('height', contentHeight);
			}
			else {
				content.setStyle('height', 720);
				widgets.setStyle('height', 700);
			}
		}
	},
	initHelpers:function(){
		this.initScrollAreas();
		this.initWheel();
		this.initLinkAlert();
		this.initContainerSize();
	},
	initContent:function(){
		var id = Cookie.read('PsId');
		var lang = Cookie.read("PsLanguage");
		if (id!=null){
			this.currentId = id;
		}

		//get the content an set the language
		if (lang!=null){
			this.setLanguage(lang);	
		} else{
			this.setLanguage('de');
		}
		
	},
	
	setLanguage: function(languagecode){
        if (
            (languagecode == 'de') ||
            (languagecode == 'en')
            ) {
            this.Language = languagecode;
			this.getContent(this.currentId);
        } else {
            this.Language = 'en';
        }
        Cookie.write("PsLanguage",this.Language,{duration: 31});
    },
    fillTableOfContents:function(insertInto,searchForArr){
        insertInto = document.id(insertInto);
        var content = document.id('content');
		var elements = new Array();
		var newElements = new Array();
        insertInto.empty();
        var list = new Element('ol').inject(insertInto,'bottom');
		
		//Add first element ("toTop")
		var tocFirstListItem = new Element('li', {
	        'id':'tocfirst'
		});
	    var tocFirstLink = new Element('a',{
			'html':'Zum Seitenanfang',
			'href':'#',
			'onclick':'pscontroller.scrollPageTo("top"); return false;'
	    });
	    tocFirstListItem.inject(list,'bottom');
		tocFirstLink.inject(tocFirstListItem,'bottom');
		newElements.push(tocFirstListItem);
		
		//Die übrigen Elemente
		searchForArr.each(function(headline,firstIndex){
			elements = content.getElements(headline);
            elements.each(function(item,index){
                var text = item.get('text');
                var tocListItem = new Element('li', { });
			    var tocLink = new Element('a',{
			        'href':'#'+'id'+firstIndex+'_'+index,
			        'html':text
			    });
                //Sprungmarke definieren
                item.set('id','id'+firstIndex+'_'+index);
                //Inhaltsverzeichnis aufbauen
			    tocListItem.inject(list,'bottom');
			    tocLink.inject(tocListItem,'bottom');
				newElements.push(tocListItem);
            });
		});
		newElements.each(function(item){
		    var color = item.getStyle('background-color');
			item.addEvent('mouseenter',function(){
				item.morph({
					'opacity': [0.3, 1],
					'background-color': [color, '#3c004c']
				});
			});
			item.addEvent('mouseleave',function(){
				item.morph({
					'opacity': [1, 0.3],
					'background-color': ['#3c004c', color]
				});
			});
		});

    },
	initAccordion:function(actors,contents){
		this.accordion = new Accordion($$(actors),$$('.lessonDescription'), {
			display:0,
			onActive: function(toggler) { toggler.morph('.lessonSelected'); },
			onBackground: function(toggler) { toggler.morph('.lesson').setStyle('background-color','transparent'); }
		});
	},
	preloadImages:function(container, chain){
		container = document.id(container);
		var elements = container.getElements('img');
		var paths = new Array();
		elements.each(function(item){
			paths.push(item.get('src'));
		});
		if (paths.length > 0) {
			new Asset.images(paths, {
				onComplete: function(){
					chain.callChain();
				}
			});
		} else{
			chain.callChain();
		}
	},
    getContent: function(id){
        this.CurrentContentId = id;
		var that = this;		
        var req = new Request.HTML({
            method: 'get',
            url: './php/ajaxcontent.php',
            data: { 
                'id' : id,
                'lang':this.Language
            },
            evalScripts: false,
            onRequest: function() { 
                $('contentloader').fade('in').setStyle('display','block');
            },
            onSuccess: function(responseTree, responseElements, responseHTML,responseJavaScript){
				var contentEl=document.id('content');
				var selectorEl=document.id('selectors');
				var myFx = new Fx.Tween(contentEl);
				var myTempEl = new Element('div',{});
				myFx.chain(
					function(){ document.id('contentloader').fade('out').setStyle('display','block'); this.callChain();},
					function(){ selectorEl.tween('opacity', 0.1); this.start('opacity', 0.1);},
					/*function(){ myTempEl.set('html',responseHTML); that.preloadImages(myTempEl,myFx); },*/
					function(){ that.removeHeight(document.id('content')); contentEl.set('html',responseHTML);that.initContainerSize(); this.callChain();},
					function(){ that.fillTableOfContents('toc',['h2','h3']); new SmoothScroll({duration:800},window); this.callChain(); },
					function(){ eval(responseJavaScript); selectorEl.tween('opacity', 1); this.start('opacity', 1); },
					function(){ that.initLinkAlert(); this.callChain(); },
					//Am Schluss, da initAccordion unter Umständen die Höhe verändert und nicht mehr zum Ende gescrollt werden kann 
					function(){ that.initAccordion('.lesson','.lessonDescription'); }
				).callChain();
                Cookie.write("PsId",id,{duration:1});
            }
            }).send();  
    },
	collapseNavigationDescription:function(){
		$$('.navigationitem p').each(function(navi,index){
			navi.set('slide', {duration: 1000});
			if (index != this.currentId) {
				navi.slide('out');
			} else {
				navi.slide('in');
			}
		},this);
	},
	initContentNavigation:function(){
		var i=0;
		var that = this;
		$$('.navigationitem').each(
			function(item){
			    var color = item.getStyle('background-color');
			    var width = item.getStyle('width');
			    var padding = item.getStyle('padding');
				item.store('id',i++);
				var myFx = new Fx.Slide(item.getElement('p'),{link:'cancel',duration: 500, transition: 'cubic:out'});

				//Hack for ie7 ,it displays black otherwise
				item.tween('opacity',0.3);
				//End
				if (item.id != 'references') {
					item.addEvent('click', function(e){
						var e = new Event(e)
						e.stop();
						that.currentId = item.retrieve('id');
						that.getContent(that.currentId);
						that.collapseNavigationDescription();
					});
				}
				item.addEvents({
					mouseenter: function(){
						item.morph({
							'opacity': [0.3, 1],
							'background-color': [color, '#3c004c']
						});
						if (item.retrieve('id') != that.currentId) {
							myFx.slideIn();
						}
					},
					mouseleave: function(){
						this.morph({
							'opacity': [1, 0.3],
							'background-color': ['#3c004c', color]
						});
						if (item.retrieve('id') != that.currentId) {
							myFx.slideOut();
						}
					}
				});
			}
		);
		this.collapseNavigationDescription();
	},
	prepareEntryForWriting:function(element,text){
		if (element.value == text){
			element.value = '';
		}
	},
	restoreEntryHint:function(element,text){
		if (element.value == ''){
			element.value = text;
		}
	},	
	initContactForm:function(){
		var that = this;
		var myFormArr = new Array($('mailaddress'),$('subject'),$('answer'));
		var myTxtArr = new Array(3);
		myFormArr.each(function(item, index){
			myTxtArr[index] = item.value;
			item.addEvents({
				click:function(){
					that.prepareEntryForWriting(this,myTxtArr[index]);
				},
				blur:function(){
					that.restoreEntryHint(this,myTxtArr[index]);
				}
			});
		});
			
		new FormCheck('contactform',{
            submitByAjax:true,
			onAjaxRequest: function(){
				var elem = document.id('sendbutton')
				elem.set('value','Sendet...');
				elem.set('src', 'pictures/sitedesign/ajax-loader.gif');
			},
			onAjaxSuccess: function(response){
				var elem = document.id('sendbutton')
				if (response == 'ok') {
					elem.set('src', 'pictures/sitedesign/mailok.png');
				} else{
					elem.set('src', 'pictures/sitedesign/mailerror.png');
				}
				(function(){ elem.set('src', 'pictures/sitedesign/sendmail.png'); }).delay(3000);
			},
			onAjaxFailure: function(){
				var elem = document.id('sendbutton');
				elem.set('src', 'pictures/sitedesign/mailerror.png');
				(function(){ elem.set('src', 'pictures/sitedesign/sendmail.png'); }).delay(3000);
			},
			display : {
                scrollToFirst : false
            }
		});
	},
	initNavigation:function(){
		var that = this;
		var myContentSlide = new Fx.Slide('navigationitems');
		var myTwitterSlide = new Fx.Slide('twittersection').hide();
		var myContactSlide = new Fx.Slide('contactsection').hide();
		var myNaviChain = new Chain();
	
		var offset = new Array(44,152,257);
		$('navigationhighlighter').show().setStyle('left',offset[0]);
		$$('.switchitem').each(function(item,index){
			item.addEvent('click',function(e){
				e = new Event(e);
				e.stop();
				var setHighlight = function(){
    				$('navigationhighlighter').show().tween('left',offset[index]);
				};
				switch (index){
					case 0:
						myNaviChain.chain(
							function(){ myTwitterSlide.slideOut(); this.callChain(); },
							function(){ myContactSlide.slideOut(); this.callChain(); },
							function(){ myContentSlide.slideIn(); setHighlight();}
            			).callChain();
						  
					break;
					case 1:
						myNaviChain.chain(
							function(){ myContentSlide.slideOut(); this.callChain(); },
							function(){ myContactSlide.slideOut(); this.callChain(); },
							/*function(){ that.getTweets('Evented', 'twittersection', myNaviChain); },*/
							function(){ myTwitterSlide.slideIn(); setHighlight();}
						).callChain();
 					break;
					case 2:
						myNaviChain.chain(
							function(){ myContentSlide.slideOut(); this.callChain(); },
							function(){ myTwitterSlide.slideOut(); this.callChain(); },
							function(){ myContactSlide.slideIn(); setHighlight();}
						).callChain();
					break;
				}
				var elem = $('navigationdescription');
				elem.store('currenttitle', elem.get('html'));
			}.bind(offset));
			
			//Zu dem jeweiligen Menüpunkt die Bezeichnung anzeigen
			var elem = $('navigationswitcher').getElement('p');
			item.addEvent('mouseenter',function(){
				var desc = item.get('title');
				var mouse ='<img src="pictures/sitedesign/mouse.png" class="navihelper" alt="Mouse"/>';
				var elem = $('navigationdescription');
				elem.store('currenttitle', elem.get('html'));
				elem.set('html',mouse+desc+mouse);
			});
			item.addEvent('mouseleave',function(){
				var elem = $('navigationdescription');
				elem.set('html',elem.retrieve('currenttitle'));
			});
		});
	},
	getTweets:function(twittername, elementname, chain){
		/* + tweet.user.profile_image_url.replace("\\",'')*/
		var el = $(elementname);
		el.set('html','Twitter lädt...');
		var myTwitter = new Request.Twitter(twittername,{
			data: {
				count: 5
			},
			onSuccess: function(tweets) {
				el.set('html','<a href="http://twitter.com/plasmasolutions"><img src="pictures/sitedesign/twitter1.png" id="twitter" alt="twitter"></a>');
				tweets.each(function(tweet,i) {
					new Element('div',{
						html: '<img src="pictures/sitedesign/twitter2.png" align="left" alt="' + tweet.user.name + '" /> <strong>' + tweet.user.name + '</strong><br />' + tweet.text + '<br /><span>' + tweet.created_at + ' via ' + tweet.source.replace("\\",'') + '</span>',
						'class': 'tweet clear'
					}).inject(el);
				});
				if (chain){
					chain.callChain();
				}
			}
		}).send();
	},
	scrollPageTo:function(direction){
		if(direction=='top'){
			this.fastScroller.toTop();
		} else{
			this.fastScroller.toBottom();
		}
	},
	setAppropriateWidth:function(){
		if (document.window.getSize().x <= 1300) {
			$('container').setStyle('width', '1300px');
			//$('presenter').setStyle('width', '1300px');
		}
		else {
			$('container').set('style', '');
			//$('presenter').setStyle('width', '');
		}
	},
	greetTheUser:function(){
		var maxViews = 12;
		var myTexts = new Array(
			'Hier werden Ihnen nach und nach Tipps zur Navigation dieser Seite gegeben...<br/><br/>Viel Spaß dabei!',
			'Falls Sie etwas suchen und nicht finden, zögern Sie nicht: Fragen Sie mich mit Hilfe des Kontaktformulars.',
			'Falls Sie Fragen haben können Sie neben elektronischem Kontakt auch gerne telefonischen Kontakt mit uns aufnehmen: 0176 20 17 95 65.',
			'Da Sie mich mittlerweile wohl bereits häufig genug gesehen haben und die Tipps in- und auswendig kennen werde ich jetzt nicht mehr erscheinen.',
			'Viel Spaß!'
		);
		if (this.visits < maxViews) {
			var times = '';
			var additionalText = '';
			var now = new Date();
			var hours = now.getHours();

			if (this.visits>0) {
				this.myRoar.setDuration(8000);
				times = 'bereits zum ' + (parseInt(this.visits)+1) + '. Mal ';
				if (this.visits == maxViews / 4) {
					additionalText = myTexts[1];
				} else if(this.visits == maxViews / 2){
					additionalText = myTexts[2];	
					this.myRoar.setDuration(20000);
				}
				else {
					if (this.visits > maxViews - 1) {
						this.myRoar.setDuration(15000);
						additionalText = myTexts[3];
					}
					else {
						additionalText = myTexts[4];
					}
				}
			}
			else {
				this.myRoar.setDuration(15000);
				additionalText = myTexts[0];
			}
			var text = 'Ich freue mich sehr, Sie ' + times + 'bei Plasmasolutions begrüßen zu dürfen';
			if ((hours >= 22) || (hours < 2)) {
				text = text + ', besonders zu dieser späten Stunde!';
			} else {
				if ((hours >= 2) && (hours < 8)) {
					text = text + ', besonders so früh am Morgen!';
				}
			}
			text = text +'<br/><br/>' + additionalText;
			this.myRoar.alert('Sehr geehrter Besucher!', text);
			Cookie.write("PsVisits", ++this.visits, {duration: 31});
		}
	},

	initController: function(){
		var that = this;
		
		this.initHelpers();
		this.initContent();
		this.initNavigation();
		this.initContactForm();
		this.initContentNavigation();		

		//Anpassungen fürs design
		document.body.setStyle('overflow','hidden');
		this.setAppropriateWidth();
		
		var timer;
        document.window.addEvent('resize', function(){
            $clear(timer);
			timer = that.setAppropriateWidth.delay(100);
        });
		document.window.addEvent('load',function(){
			that.setAppropriateWidth();
		});
	
		//Automatisches Scrollen beim Seitenrand
		this.scroll = new Scroller(document.body, {area: 30, velocity: 1});
		this.scroll.start();

		//Begrüßungen
		this.greetTheUser();

		window.addEvent('scroll', function() {
			var scrollPosition = document.body.getScroll().y;
			var difference = Math.abs(this.lastScrollPosition - scrollPosition); 
			if (difference > 40) {
				if (scrollPosition > 250) {
					this.tocEl.tween('top', document.body.getScroll().y - 250);
				}
				else {
					this.tocEl.tween('top', 0);
				}
				this.lastScrollPosition = scrollPosition;
			} else{
				this.lastScrollPosition += this.lastScrollPosition - scrollPosition;
			}
			 
			
		}.bind(this));	

		var myGallerySet = null;
			
		$('references').addEvent('click', function(e){
			e = new Event(e);
			e.stop();
			
			var myChain= new Chain();
			var presenter = $('presenter');
			var close = $('closegallery');
			var header = $('header');
			var bgpos = 40;
			var headerFx = new Fx.Tween(header,{unit:'%',
				onComplete: function(){
					myChain.callChain();
				}
			});
			var myFx= new Fx.Morph(presenter,{duration:1000,
				onComplete: function(){
					myChain.callChain();
				}
			});
			if (Browser.Engine.trident){
				$('mainarea').hide();
			} else{
				$('mainarea').fade('toggle');
			}
			
			myChain.chain(			
				function(){ headerFx.start('background-position',bgpos,50); },
				function(){ presenter.show(); presenter.fade('in'); this.callChain(); },
				function(){ 
					myFx.start({
						'height': [0, $(window).getSize().y],
						'width' : [0, $(window).getSize().x]
					}); 
				},
				function(){
					if (myGallerySet == null) {
						myGallerySet = new gallerySet($('myGallerySet'), {
							timed: false,
							textGallerySelector: 'Referenzen',
							textShowGallerySelector: 'Weitere Referenzen',
							textGalleryInfo: '{0} Referenzen',
							startWithSelector: true,
							textShowCarousel: 'Referenz {0}/{1}',
							useMultiBox: true
						});
					}
					myChain.callChain();
				},
				function(){	$('myGallerySet').fade('in'); this.callChain(); },
				function(){ close.fade('in'); close.show(); this.callChain(); },
				function(){ 
					that.myRoar.setDuration(12000); 
					that.myRoar.alert('Hinweis', 'Falls Sie die Ansicht der Referenzen beenden möchten, so klicken Sie'+
												 ' einfach auf den Kopf Bereich dieser Seite (das Plasmasolutions-Logo).');
					this.callChain();
				},
				function(){	$('header').addEvent('click', 
					function(e){
						var e= new Event(e);
						e.stop();
						headerFx.start('background-position',50,bgpos);
						$('myGallerySet').fade('out');
						presenter.fade('out');
						presenter.hide();
						close.hide();
						if (Browser.Engine.trident){
							$('mainarea').show();
						} else{
							$('mainarea').fade('in');
						}
					}
				 )}
			).callChain();		
			
		});
				
	/*
		var fx = new Fx.Tween($('mainarea'),{
			duration: 1000,
			link: 'cancel',
			transition: 'quad:in'
		});

		var drop = $$('h1');
		var mydrag = new Drag.Move('logodrag', { droppables:drop } );

	 	mydrag.addEvents({
			'emptydrop': function(){
				this.setStyle('background-color', '#000000');
			},
			'drag': function(){
				
			},
			'leave': function(el, obj){
				$$('h1').morph({
					'background-color': '#1d1d20'
				});
			},
			'drop': function(el, obj){
					fx.start('margin-top',0);
					
				//	me2 = new MathmosEffectClass({colorElement:'header'});
				//	me2.start(100);
				
			}
		});
	*/
			
	},
	
	initialize: function(options){
		this.tocEl = document.getElements('.toc')[0];
		this.fastScroller = new Fx.Scroll(document.body);
		this.scroll = Class.empty;
		this.cookie = new Cookie();
		this.currentId = 0;
		this.currentNavigatorContext = 'navigation';
		this.lastScrollPosition = 0;
		this.visits = Cookie.read("PsVisits");
		if (this.visits == null)	{
			this.visits = 0;
		}
		this.myRoar = new Roar({'offset': 10,duration: 10000});
		this.wheelUsageCount = 0;

		this.initController();
	}
	
});

