var scData 			= new Array();
var scNum  			= 0;
var scLast 			= 0;
var scCurrent   	= 0;
var scNext   		= 0;
var scPrev   		= 0;
var loaded   		= new Array();

var transTime		= 600;
var transMode		= Fx.Transitions.Quad.easeInOut;

var actives 		= new Array();
var activesBig 		= new Array();
var tooltip 		= new Array();
var mtoolTip		= new Array();
var mtoolTipBack	= new Array();

var menuStatus 		= 'closed';
var menuTriggered 	= false;

var pStatus 		= false;

var Site = {
	init: function(){
		Site.preloadImages();
		
		if ($('events')) {
			Site.initEvents();
		} 
		
		if ($$('.initSubmit')) Site.initSubmit();
		
		if ($('pagination')) Site.placePagination();
		
		if ($('textDescription')) Site.workaroundPagination();
		
		if ($('submenu')) Site.handleSubmenu();
		
		if ($('formCheck')) Site.initializeFormCheck();
		
		if ($$('.downloadMedia')) Site.coordinateDownloads();
		
		if ($('loginForm')) Site.checkUserLogin();
		if ($('commentForm')) Site.writeComment();
		
		if ($('passwordRecovery')) Site.handlePasswordRecovery();
		
		if ($$('.resident')) Site.handleResidentsContainer();
		
		if ($('scrollAreaNormal')) if (!scrollAreaNormal) var scrollAreaNormal = new MooScroll({selector:'#scrollAreaNormal'});
 	},
	
	start: function(){
		Site.loadPage();
		if ($$('input.clear')) Site.clearInputFields();
		if ($$('.takeMeThereTrigger')) Site.handleToolTips(1);
		if ($$('.takeMeThereSmallTrigger')) Site.handleToolTips(2);
		
		if ($('avatarCrop')) Site.cropImage();
	},
		
	coordinateDownloads: function(){
		i = 1; all = $$('.downloadMedia').length;
		$$('.downloadMedia').each(function(download){
			id 		= download.get('id').replace('media_', '');
			coords	= download.getCoordinates();
			
			$('media_container_'+id).setStyles({
				top: coords.top + 80 - 16,
				left: coords.left + 270 + 53
			});
			
			$('media_container_'+id).setStyle('visibility', 'visible');
			
			if (i == all) {
				//$('pagination').setStyle('position', 'absolute');
				//$('pagination').setStyle('top', $('media_container_'+id).getStyle('top').replace('px', ''));
			}
			
			i++;
		});
	},
	
	initializeFormCheck: function(){
		new FormCheck('formCheck', {
			display: {
				closeTipsButton: 0,
				flashTips: true,
				fadeDuration: 450,
				titlesInsteadNames: 1,
				ajaxEvalScripts: true
			}
		});
	},
	
	handleSubmenu: function(withoutClick){
		var slide 		= new Fx.Slide('infoContainer', {duration: 700, transition: Fx.Transitions.Sine.easeOut});
		var morph 		= new Fx.Morph('submenu');

		var scrollArea 	= new MooScroll({selector:'#scrollArea'});
		
		$$('.eventTrigger').addEvent('click', function(e){
			e.stop();
			
			if (!menuTriggered) {
				if (menuStatus == 'closed') {
					menuStatus = 'open';
				} else {
					menuStatus = 'closed';
				}
			
				switch (menuStatus) {
					case 'open':
						slide.slideOut();
						
						morph.start({
							'margin-top': [0, 5]
						});
						
						morph.complete = function(){
							morph.cancel();
							$('submenu').addClass('arrowBottom');
							menuTriggered = false;
						}
						
					break;
					case 'closed':
						slide.slideIn();
						
						morph.start({
							'margin-top': [5, 15]
						});
	
						morph.complete = function(){
							morph.cancel();
							$('submenu').removeClass('arrowBottom').addClass('arrowTop');
							menuTriggered = false;
						}
					break;
				}
				
				menuTriggered = true;
			}
		});
	},

	workaroundPagination: function(){
		if ($('pagination')) {
			var textHeight 			= $('textDescription').getCoordinates().height;
			var descriptionHeight	= $$('.description.photos').getStyle('height').toString().replace('px', '');
			
			var newHeight			= descriptionHeight - textHeight - 15;
			
			if (newHeight > 0) $$('.description.photos').setStyle('height', newHeight);
		} else {
			var textHeight 			= $('textDescription').getCoordinates().height;
			var descriptionHeight	= $$('.description.photos').getStyle('height').toString().replace('px', '');
			
			var newHeight			= descriptionHeight - textHeight;
			
			if (newHeight > 0) $$('.description.photos').setStyle('height', newHeight);
		}
	},

	placePagination: function(){
		if ($('pagination').hasClass('photo')) {
			if (Browser.Engine.name == 'trident') {
				$('pagination').setStyles({
					width: 305,
					top: $('photo').getCoordinates().height + $('photo').getCoordinates().top - $('pagination').getCoordinates().height-54,
					position: 'absolute'
				});			
			}
		}

		if ($('pagination').hasClass('myhome')) {
			downloads = $$('.download').length;
			
			if (downloads < 4) {
				fix = 34;
			} else {
				fix = 52;
			}
			
			$('pagination').setStyles({
				width: 290,
				top: $('downloadContent').getCoordinates().height + $('pagination').getCoordinates().height + fix, // 52
				position: 'absolute'
			});	
		}
	},

	preloadImages: function(){
		essentials = new Array(site_url + 'assets/images/nav/btn_anfahrt.gif', site_url + 'assets/images/nav/btn_gallerien.gif', site_url + 'assets/images/nav/btn_kontakt.gif', site_url + 'assets/images/nav/btn_myhome.gif',site_url + 'assets/images/nav/btn_videos.gif');
		
		var pImages = new Asset.images(essentials);

		var images = [];
		
		$$('.over').each(function(el){
			if (el.get('src')) {
				src	= el.get('src');
				src = src.replace(/-over/, '');
				
				var extension = src.substring(src.lastIndexOf('.'), src.length)
				
				images.push(src.replace(extension, '-over'+extension));
			}
		});
		
		new Asset.images(images, {
    		onComplete: function(){
        		Site.initMouseovers();
    		}
		});
	},
	
	initMouseovers: function(){
		var src;
		
		$$('.over').each(function(el){
			var clone = el.clone().injectAfter(el);
			
			el.dispose();
		});
		
		$$('.over').each(function(el){
			if (el.get('src')) {
				el.addEvent('mouseover', function(){
					src	= el.get('src');
					
					var extension = src.substring(src.lastIndexOf('.'), src.length)
					
					el.setProperty('src', src.replace(extension, '-over'+extension));
				});
				
				el.addEvent('mouseout', function(){
					el.setProperty('src', src);
				});     
			}                                              
		});
	},
	
	handleToolTips: function(type){
		switch (type) {
			case 1:
				$$('.takeMeThereTrigger').addEvents({
					'mouseover': function() {
						object			= this;
						id				= this.get('id');
						coords  		= this.getCoordinates();

						timeout = window.setTimeout(function(){ 
							if (!actives.contains(id)) {
								actives.push(id);
					
								action			= true;
						

								if (tooltip[id]) {
									action = false;
									if ($('toolTip-'+id).dispose()) {
										action = true;
									}
									
									if (mtoolTip[id]) mtoolTip[id] = false;
								} 
								
								if (action) {
									tooltip[id] = new Element('div', {'id': 'toolTip-'+id, 'class': 'toolTip-takeMeThere'});
									
									tooltip[id].addClass('invisible').inject(id+'_container');
									
									tooltip[id].setStyles({
										padding: 0,
										margin: 0,
										left: coords.width/2-$('toolTip-'+id).getStyle('width').replace('px', '').toInt()/2,
										top: '-' + coords.height/2-$('toolTip-'+id).getStyle('height').replace('px', '').toInt()/2 + 29 + 'px'
									});
	
									tooltip[id].setStyle('background-image', 'url('+base_url+'assets/images/takemethere.png)');
									
									tooltip[id].setOpacity(0.1).removeClass('invisible');
									
									mtoolTip[id] = new Fx.Morph(tooltip[id], {
										duration: transTime/3,
										transition: transMode
									})
									
									mtoolTip[id].start({
										'top': '-' + coords.height/2-$('toolTip-'+id).getStyle('height').replace('px', '').toInt()/2 + 10 + 'px',
										'opacity': [0, 1]
									});
								}
							}
						}, 450);
					},
					'mouseleave': function() {
						object			= this;
						id				= this.get('id');
						coords  		= this.getCoordinates();
						
						window.clearTimeout(timeout);

						if (actives.contains(id)) {
							tooltip[id] 	= $('toolTip-'+id);
							
							mtoolTipBack[id] = new Fx.Morph(tooltip[id], {
								duration: transTime/4,
								transition: transMode
							})
							
							mtoolTipBack[id].start({
								'top': '-' + coords.height/2-$('toolTip-'+id).getStyle('height').replace('px', '').toInt()/2 + 29 + 'px',
								'opacity': [1, 0]
							});
							
							actives.erase(id);
						}
					}
				});
			break;
			case 2:
				$$('.takeMeThereSmallTrigger').each(function(wrapper){
					wrapper.addEvents({
						'mouseover': function(){
							timeout = window.setTimeout(function(){ 
								id				= wrapper.get('id');
								coords  		= wrapper.getCoordinates();
								
								if (!actives.contains(id)) {
									actives.push(id);
	
									tooltip[id] = new Element('div', {'id': 'toolTip-'+id, 'class': 'toolTip-takeMeThereSmall'});

									tooltip[id].addClass('invisible').inject(id+'_container');
									
									tooltip[id].setStyles({
										left: coords.width/2-$('toolTip-'+id).getStyle('width').replace('px', '').toInt()/2,
										top: '-' + coords.height/2-$('toolTip-'+id).getStyle('height').replace('px', '').toInt()/2 + 10 + 'px'
									});

									tooltip[id].setStyle('background-image', 'url('+base_url+'assets/images/takemetheresmall.png)');
									
									tooltip[id].setOpacity(0.1).removeClass('invisible');
									
									mtoolTip[id] = new Fx.Morph(tooltip[id], {
										duration: transTime/2,
										transition: transMode
									})
									
									mtoolTip[id].start({
										'top': '-' + coords.height/2-$('toolTip-'+id).getStyle('height').replace('px', '').toInt()/2 + 0 + 'px',
										'opacity': [0, 1]
									});
								} 
							}, 300);
						},
						'mouseleave': function() {
							window.clearTimeout(timeout);

							id				= wrapper.get('id');
							
							if ($('toolTip-'+id)) {

								if (actives.contains(id)) {
									tooltip[id] 	= $('toolTip-'+id);
									
									mtoolTipBack[id] = new Fx.Morph(tooltip[id], {
										duration: transTime/2,
										transition: transMode
									})
									
									if (mtoolTipBack[id]) {
										mtoolTipBack[id].start({
											'top': '-' + coords.height/2-$('toolTip-'+id).getStyle('height').replace('px', '').toInt()/2 + 10 + 'px',
											'opacity': [1, 0]
										});
										
										mtoolTipBack[id].complete = function () {
											if ($('toolTip-'+id) != null) {
												if (mtoolTipBack[id]) {
													mtoolTipBack[id].cancel();
													$('toolTip-'+id).dispose();
													actives.empty();
												}
											}
										}
									}
								}
							}
						}
					});
				});			
			break;
		}
	},

	initEvents: function(){
		var jsonRequest = new Request.JSON({url: site_url+'/events/get_events', onComplete: function(result){
			if (result.status == 'ok') {
				$each(result.data, function(event){
					scData.push(event);
					
					scNum++;
					scLast = event.id;
				});
				
				scData.reverse();
				
				scCurrent = scNum-1;
				
				loaded.push(scCurrent);
				
				Site.handleEventSlider();
			}	
		}}).post();
	},
	
	slideEvent: function(method, direction) {
		var morphInfoContainer = new Fx.Morph('infoContainerWrapper', {
			duration: transTime,
			transition: transMode
		});

		var morphTeaserContainer = new Fx.Morph('teaserContainerWrapper', {
			duration: transTime,
			transition: transMode
		});

		var morphSubmenuWrapper = new Fx.Morph('submenuWrapper', {
			duration: transTime,
			transition: transMode
		});

		var morphScrollAreaContainer = new Fx.Morph('scrollArea', {
			duration: transTime,
			transition: transMode
		});

		var submenuContainer 	= new Fx.Slide('submenu', {
			mode: 'horizontal',
			duration: transTime,
			transition: transMode,
			onStart: function(){
				morphSubmenuWrapper.start({
					'width': '0px',
					'left': '-20px'
				});
			}
		});
		
		var infoContainer 	= new Fx.Slide('infoContainer', {
			mode: 'horizontal',
			duration: transTime,
			transition: transMode,
			onStart: function(){
				morphInfoContainer.start({
					'width': '0px',
					'left': '-20px'
				});
			}
		});
		
		var teaserContainer = new Fx.Slide('teaserContainer', {
			mode: 'horizontal',
			duration: transTime,
			transition: transMode
		});
		
		switch (method) {
			case 0:		
				// slide out
				infoContainer.slideOut();
				(function(){
					morphTeaserContainer.start({
						'left': '-960px'
					});
				}).delay(transTime/2);

				submenuContainer.slideOut();
				
				(function(){
					morphSubmenuWrapper.start({
						'left': '-960px'
					});
					
					morphScrollAreaContainer.start({
						'left': '-960px'
					});
					
					menuStatus = 'closed';
				}).delay(transTime/2);


				(function(){
					Site.prepareEvent(1); 
				}).delay(transTime+(transTime/2));
			break;
			case 1:
					// slide in
				$('infoContainer').setStyle('padding', '0 0 0 20px');
				$('submenu').setStyle('padding', '10px 0 10px 35px');
				$('scrollArea').setStyle('padding', '0 38px 0 35px');

				morphTeaserContainer.start({
					'left': '0'
				});

				(function(){
					infoContainer.slideIn();
				}).delay(transTime/2);

				(function(){
					submenuContainer.slideIn();
					menuStatus = 'closed';
				}).delay(transTime/2);
			break;
		}
	},
	
	prepareEvent: function(mode) {
		var req = new Request.HTML({url:site_url+'/events/get_event/'+scData[scCurrent].id, 
			evalResponse: true,
			evalScripts: true,
			onSuccess: function(html) {
				$('events').empty();
				
				$('events').adopt(html);

				$('teaserContainerWrapper').setStyle('left', '-960px');
				$('infoContainerWrapper').setStyle('left', '-305px');
				
				Site.slideEvent(mode);
	
				Site.handleSubmenu();
			},
			onFailure: function() {
				$('events').set('text', 'The request failed.');
			}
		}).send();
	},
	
	handleEventSlider: function()
	{
		$('nextEvent').addEvent('click', function(e){
			//e.stop();
			
			if (scCurrent+1 < scNum && !loaded.contains(scCurrent+1)) {
				$('events').setOpacity(0.3);
				$('event-loader').removeClass('hide').setOpacity(0.2);

				$('eventSliderContainer').addClass('invisible');
				
				(function(){
					var preload = new Asset.images(scData[scCurrent+1].image, {
						onComplete: function(){
							loaded.push(scCurrent+1);
							
							$('event-loader').addClass('hide').setOpacity(1);
							$('events').setOpacity(1);
	
							$('eventSliderContainer').addClass('invisible');
				
							if (scCurrent+1 == scNum) {
								scCurrent = 0;
							} else {
								scCurrent++;
							}
							
							(function(){ Site.prepareEventBtns(); }).delay((transTime+(transTime/2))*2);
							
							Site.slideEvent(0, 'next');
						}				
					});
				}).delay(500);
			} else {
				$('eventSliderContainer').addClass('invisible');
	
				if (scCurrent+1 == scNum) {
					scCurrent = 0;
				} else {
					scCurrent++;
				}
				
				(function(){ Site.prepareEventBtns(); }).delay((transTime+(transTime/2))*2);
				
				Site.slideEvent(0, 'next');
			}
		});

		$('prevEvent').addEvent('click', function(event){
			$('eventSliderContainer').addClass('invisible');		
			event.stop();
			
			if (scCurrent-1 <= scNum && !loaded.contains(scCurrent-1)) {
				$('events').setOpacity(0.3);
				$('event-loader').removeClass('hide').setOpacity(0.2);

				$('eventSliderContainer').addClass('invisible');
				
				(function(){
					var preload = new Asset.images(scData[scCurrent-1].image, {
						onComplete: function(){
							loaded.push(scCurrent-1);
							
							$('event-loader').addClass('hide').setOpacity(1);
							$('events').setOpacity(1);
	
							$('eventSliderContainer').addClass('invisible');
				
							if (scCurrent-1 == scNum) {
								scCurrent = 0;
							} else {
								scCurrent--;
							}
							
							(function(){ Site.prepareEventBtns(); }).delay((transTime+(transTime/2))*2);
							
							Site.slideEvent(0, 'prev');
						}				
					});
				}).delay(500);
			} else {
				$('eventSliderContainer').addClass('invisible');
	
				if (scCurrent-1 == scNum) {
					scCurrent = 0;
				} else {
					scCurrent--;
				}
				
				(function(){ Site.prepareEventBtns(); }).delay((transTime+(transTime/2))*2);
				
				Site.slideEvent(0, 'prev');
			}

			/*
			if (scCurrent == 0) {
				scCurrent = scNum-1;
			} else {
				scCurrent--;
			}
			
			(function(){ Site.prepareEventBtns(); }).delay((transTime+(transTime/2))*2);

			Site.slideEvent(0, 'prev');	*/
		});
	},
	
	prepareEventBtns: function(){
		$('eventSliderContainer').removeClass('invisible');
		
		if (scCurrent == 0) {
			$('prevEvent').addClass('hide');
		} else {
			$('prevEvent').removeClass('hide');
		}
		
		if (scCurrent == scNum-1) {
			$('nextEvent').addClass('hide');
		} else {
			$('nextEvent').removeClass('hide');
		}
	
	},
	
	clearInputFields: function(){
		var backup = new Array();
		
		$$('input.clear, textarea.clear').each(function(input){
			backup[input.name] = input.value;
			
			input.addEvent('focus', function(){
				input.value = '';
			});			
			
			input.addEvent('blur', function(){
				if (input.value == '') {
					input.value = backup[input.name];
				}
			});

		});
	},
	
	loadPage: function(){
		$$('.invisible').each(function(div){
			(function(){
				div.setOpacity(0).fade(1);
				$$('input.normal').each(function(input){
					input.setStyle('display', 'inline');
				});
				div.removeClass('invisible');
			}).delay(750);
		});
		
		$$('.loader').each(function(loader){
			(function(){ 
				if (loader.hasClass('remove')) {
					loader.dispose();
				} else {
					loader.addClass('invisible');
				}
			}).delay(750);
		});
	},
	
	removeToolTip: function(){
		$('messageToolTip').fade('out');
		
		(function(){ $('messageToolTip').dispose(); }).delay(500);
	},
	
	messageToolTip: function(options, html, noCufon){
		var scroll = $('siteBody').getScrollTop();
		
		if (options) {
			options.each(function(value, key){
				switch (key) {
					case 'duration':
						durationTime 	= value;
					break;
					case 'wait':
						wait 			= value;
					break;
					case 'top':
						fromTop 		= value;
					break;
					case 'delay':
						delayTime		= value;
					break;
				}
			});
		} else {
			durationTime 	= 500;
			wait			= false;
			fromTop 		= 200;
			delayTime		= 2500;
		}
		
		if (scroll > 0) {
			fromTop += scroll;
		}
		
		var wrapper = new Element('div', {'id': 'messageToolTip'});
		var top 	= new Element('div', {'class': 'top'}).inject(wrapper);
		var middle 	= new Element('div', {'class': 'middle'}).inject(wrapper);

		var content = new Element('div', {'class': 'content', 'html': html}).inject(middle);		
		
		var top 	= new Element('div', {'class': 'bottom'}).inject(wrapper);
		
		var windowSize = window.getCoordinates();
		
		wrapper.setStyles({
			left: (windowSize.width/2)-270/2
		});
		
		if (!$('messageToolTip')) {
			wrapper.inject(document.body);
			
			if (!noCufon) {
				Cufon.replace('h3.notice');
			}

			var wrapperMorph = new Fx.Morph(wrapper, {
				duration: durationTime
			});
			
			wrapperMorph.start({
				'top': 	[0, fromTop]
			});
			
			wrapperMorph.complete = function(){
				wrapperMorph.cancel();
			}
			
			if (!wait) {
				(function(){
					var wrapperMorph = new Fx.Morph(wrapper, {
						duration: durationTime
					});
					
					wrapperMorph.start({
						'top': [fromTop, fromTop*2],
						'opacity': [1,0]
					});
					
					wrapperMorph.complete = function(){
						wrapperMorph.cancel();
						wrapper.dispose();
					}
				}).delay(delayTime);
			}
		}
	},
	
	checkUserLogin: function(){
		$('loginForm').addEvent('submit', function(){
			return false;
		});
		
		$('login').addEvent('click', function(){
			value = $$('input[id=nickname]').get('value').toString();
			value = value.replace(',','');
			
			$$('input[id=nickname]').set('value', value);
			
			var checkLogin = new Request({
				url: site_url+'/myhome/user_login/' + $time()+$random(1, 1000), 
				method: 'post',
				evalScripts: true,
				evalResponse: true,
				noCache: true
			}).send('nickname='+$('nickname').get('value')+'&password='+$$('input[id=password]').get('value')+'&remember_me='+$('rememberMe').checked);
		});
	},

	writeComment: function(){
		$('commentForm').addEvent('submit', function(){
			return false;
		});
		
		$('writeAComment').addEvent('click', function(){
			if ($('commentTextarea').get('value') != 'Dein Kommentar...' && $('commentTextarea').get('value').length > 5) {
				var writeComment = new Request({
					url: site_url+'/myhome/add_comment/' + $time()+$random(1, 1000), 
					method: 'post',
					evalScripts: true,
					evalResponse: true,
					onRequest: function(){
						$('commentLoader').setStyle('visibility', 'visible');
					},
					onComplete: function(){
						$('commentLoader').setStyle('visibility', 'hidden');
					}
				}).send('comment='+$('commentTextarea').get('value')+'&type='+$('type').get('value')+'&dataset='+$('dataset').get('value'));
			} else {
				html = '<h3 class="notice">Fehler!</h3>Du musst einen Text eingeben der länger als 5 Zeichen ist!';
				Site.messageToolTip(false,html);
				
				Cufon.replace('h3.notice');
			}
		});
	},
	
	initSubmit: function(){
		$$('.initSubmit').addEvent('click', function(){
			el 		= this;
			html 	= el.get('rel').replace(/{/g, '<').replace(/}/g, '>');
			
			options = new Hash({ duration: 500, wait: true, top: 200 });

			Site.messageToolTip(options,html);
		});
	},
	
	checkNickname: function(obj){
		var checkNickname = new Request({
			url: site_url+'/myhome/check_nickname/' + $time()+$random(1, 1000), 
			method: 'post',
			evalScripts: true,
			evalResponse: true
		}).send('nickname='+$('nicknameSignup').get('value'));
	},
	
	handleResidentsContainer: function(){
		i = 2;
		
		$$('.resident').each(function(el){
			if (i % 2 == 0 && i > 2) {
				alert(el);
				i += 2;
			}
		});
	},
	
	cropImage: function(){
		if ($('showCrop').hasClass('toggle')) {
			var cropArea = new Fx.Slide('cropAreaDiv').show();
		} else {
			var cropArea = new Fx.Slide('cropAreaDiv').hide();
		}
	
		$('showCrop').addEvent('click', function(){
			cropArea.toggle();
		});

		var crop = new Lasso.Crop('avatarCrop', {
			color: '#000',
			ratio: [1,1],
			min: [50,50]
		});
		
		crop.addEvent('complete', function(coords){
			var saveImage = new Request({
				url: site_url+'/myhome/crop_image/' + $time()+$random(1, 1000), 
				method: 'post',
				evalScripts: true,
				evalResponse: true
			}).send('x='+coords.x+'&y='+coords.y+'&user='+myhome_user+'&w='+coords.w+'&h='+coords.h);
		});
 	}
}

window.addEvent('domready', Site.init);
window.addEvent('load', Site.start);
