var preload = new Array();

var scCurrent 	= 0;
var scNum		= 0;
var scData		= new Array();
var scLastID	= 0;

var lb;
var lbFade;
var lbContainerFade;
var lbCurrent 	= 0;
var lbNum		= 0;
var lbImages	= new Array();
		
var Site = {
	
	init: function(){
		if ($('contentHome')) Site.initShowcases();
		
		Site.removeBorders();
		
		Site.initSubmit();
		
		Site.initVerify();
		
		if ($('notification')) Site.hideNotification();
		
		if ($('nodes')) Site.browseNodes($('path').getValue());
	},
	
	start: function(){
		if (!$('frontend')) setupZoom();
		
		Site.preloadImages();
		
		if ($('googleMaps')) Site.googleMaps();
	},
	
	preloadImages: function(){
		var images = [];
		
		$$('.over').each(function(el){
			if (el.get('src')) {
				src	= el.get('src');
				src = src.replace(/_active/, '');
				src = src.replace(/_inactive/, '');
				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.remove();
		});
		
		$$('.over').each(function(el){
			if (el.get('src')) {
				el.addEvent('mouseover', function(){
					src	= el.get('src');
					src = src.replace(/_active/, '');
					src = src.replace(/_inactive/, '');
					
					var extension = src.substring(src.lastIndexOf('.'), src.length)
					
					el.setProperty('src', src.replace(extension, '_over'+extension));
				});
				
				el.addEvent('mouseout', function(){
					el.setProperty('src', src);
				});     
			}                                              
		});
	},
	
	removeBorders: function(){
		$$('a').each(function(el){
			el.addEvent('focus', function(){
				el.blur();
			});
		});
	},
	
	initSubmit: function(){
		$$('.submit').each(function(el){
			var button 	= el.getElement('a');
			var form	= $(button.get('rel'));
			
			function submit(){
				el.getElements('a').each(function(button){
					button.remove();
				});
				
				el.setHTML('');
				
				var loader = $('loader').clone().injectInside(el).setStyle('display', 'block');
				
				form.submit();
			}
			
			form.addEvent('submit', function(e){
				e = new Event(e).stop();
				
				submit();
			});
			
			button.addEvent('click', function(e){
				e = new Event(e).stop();
				
				submit();
			});
		});
	},
	
	initVerify: function(){
		$$('a').each(function(el){
			if (el.get('rel') == 'confirm') {
				el.addEvent('click', function(e){
					if (confirm('Sind Sie sicher?') == false) {
						e = new Event(e).stop();
					}
				});
			}
		});
	},
	
	deleteObject: function(url, query, object){
		var request = new Request.HTML({
			method: 'post',
			url: site_url+url,
			update: $(object)
		}).send(query);
	},
	
	alternating: function(object){
		var i = 1;
		
		object.getElements('tr').each(function(el){
			if (el.hasClass('odd')) {
				el.removeClass('odd');
			} else if (el.hasClass('even')) {
				el.removeClass('even');
			}
			
			if (i == 1) {
				el.addClass('odd');
				
				i = 2;
			} else {
				el.addClass('even');
				
				i = 1;
			}
		});
	},
	
	sortables: function(object, url, alternating){
		var sortables = new Sortables(object, {
			handle: 'u',
			onComplete: function(){
				if (alternating == true) Site.alternating(object);
				
				var order 		= 1;
				var elements 	= new Array();
				
				object.getElements('li').each(function(el){
					elements.push(el.get('id')+'_'+order);
					
					order++;
				});
	
				var request = new Request.HTML({
					method: 'post',
					url: site_url+url
				}).send('elements='+elements.join(';'));
			}
		});
	},
	
	hideNotification: function(){
		var slide = new Fx.Slide($('notification'));
		
		(function(){ slide.slideOut(); }).delay(2000);
	},

	initShowcases: function(){
		var jsonRequest = new Request.JSON({url: site_url+'/site/get_references', onComplete: function(result){
			if (result.status == 'ok') {
				$each(result.data, function(showcase){
					scData.push(showcase);
					
					scNum++;
					scLast = showcase.id;
				});
			}	
			
			Site.nextShowcase();
		}}).post({'get': '1'});
	},
	
	nextShowcase: function(){
		if ($('showcaseContainer'+scData[scCurrent].id)) $('showcaseContainer'+scData[scCurrent].id).remove();
		
		scData[scCurrent].obj = new Element('div').set('id', 'showcaseContainer'+scData[scCurrent].id).injectInside($('contentHome'));
			
		var preloadImage = new Asset.images(scData[scCurrent].file, {
			onComplete: function(){
				var request = new Request.HTML({
					method: 'post',
					url: site_url+'/site/get_reference',
					update: scData[scCurrent].obj,
					data: 'id='+scData[scCurrent].id,
					evalScripts: true,
					onComplete: function(){
						if ($('loading')) $('loading').remove();
						
						$('showcase'+scData[scCurrent].id).setOpacity(0);
						$('showcase'+scData[scCurrent].id).setStyle('display', 'block');
						
						var fadeIn = new Fx.Styles($('showcase'+scData[scCurrent].id), {
							duration: 500,
							wait: true
						});
						
						if ($defined(scData[scCurrent-1])) {
							var fadeOut = new Fx.Styles($('showcase'+scData[scCurrent-1].id), {
								duration: 500,
								wait: true
							});
						
							fadeOut.start({
								'opacity': 0
							});
							
							fadeIn.start({
								'opacity': 1
							});
						} else {
							fadeIn.start({
								'opacity': 1
							});
						}
							
						if (scCurrent+1 == scNum) {
							scCurrent = 0;
						} else {
							scCurrent++;
						}
						
						Site.initMouseovers();
						Site.removeBorders();
					}
				}).send();
			}
		});
	},
	
	googleMaps: function initialize(){
		if (GBrowserIsCompatible()) {
			var map = new GMap2($('googleMaps'));
			var p = new GLatLng(25.021675, 121.536598);
			map.setCenter(p, 14);
						var marker = new GMarker(p);
						map.addOverlay(marker);
						map.addControl(new GSmallMapControl());
						map.addControl(new GMapTypeControl());
						map.openInfoWindow(map.getCenter(), '<img src="'+base_url+'data/images/pix/NTUPHYS_small.jpg" alt="We are here!" /><font size=2>  NTUPHYS Building</font>');
		}
	},
	
	openGallery: function(dataset, allocation){
		var windowSize = window.getScrollSize();
		var scrollSize = window.getScroll();
		
		if ($('lighbox')) $('lightbox').remove();
		
		lb = new Element('div', {
			'styles': {
				'width': windowSize.x+'px',
				'height': windowSize.y+'px'
			}
		}).setProperty('id', 'lightbox').setOpacity('0').injectInside(document.body);
		
		lbFade = new Fx.Styles($('lightbox'), {
			duration: 1000,
			wait: true
		});
		
		lbFade.start({
			'opacity': 1
		});
		
		var jsonRequest = new Request.JSON({url: site_url+'/site/get_images', onComplete: function(result){
			if (result.status == 'ok') {
				$each(result.files, function(image){
					preload.push(image.file);
					lbImages.push(image);
					
					lbNum++;
				});
			}

			new Element('div').set('id', 'container').setStyles({
				width: lbImages[lbCurrent].width+'px',
				top: scrollSize.y+50+'px'
			}).setOpacity(0).setHTML('<center><div class="left"><strong class="green" id="caption"></strong></div><div class="right"><a href="javascript:void(0);" onClick="Site.closeGallery();"><img class="over" src="'+base_url+'assets/images/btn_schliessen.gif" alt="" /></a></div><br /><img src="" id="currentImage" alt="" /><br /><div class="left"><a href="javascript:void(0);" onClick="Site.prevImage();" id="prevImage"><img class="over" src="'+base_url+'assets/images/btn_vorherigesbild.gif" alt="" /></a></div><div class="right"><a href="javascript:void(0);" onClick="Site.nextImage();" id="nextImage"><img class="over" src="'+base_url+'assets/images/btn_naechstesbild.gif" alt="" /></a></div><br /></center>').injectInside($('lightbox'));
			
			lbContainerFade = new Fx.Styles($('container'), {
				duration: 500,
				wait: true
			});
			
			if (lbNum == 1) {
				if ($('prevImage')) $('prevImage').remove();
				if ($('nextImage')) $('nextImage').remove();
			}
			
			Site.preloadImages();
			Site.removeBorders();
			Site.displayImage();
		}}).post({'dataset': dataset, 'allocation': allocation});
	},
	
	prevImage: function(){
		Site.showLoader();
		
		if (lbCurrent == 0) {
			lbCurrent = lbNum-1;
		} else {
			lbCurrent--;
		}
		
		Site.displayImage();
	},
	
	nextImage: function(){
		Site.showLoader();
		
		if (lbCurrent == lbNum-1) {
			lbCurrent = 0;
		} else {
			lbCurrent++;
		}
		
		Site.displayImage();
	},
	
	showLoader: function(){
		var coords = $('currentImage').getCoordinates();
		
		if (!$('loader')) {
			new Element('div').set('id', 'loader').setStyles({
				width: lbImages[lbCurrent].width+'px',
				height: lbImages[lbCurrent].height+'px',
				top: coords.top,
				left: coords.left
			}).setOpacity(0).setHTML('<table width="100%" height="100%" cellpadding="0" cellspacing="0"><tr><td height="100%" width="100%" valign="middle"><img src="'+base_url+'assets/images/loading.gif" alt="" /></td></tr></table>').injectInside($('lightbox'));
		}
		
		$('loader').setOpacity(.8);
	},
	
	displayImage: function(){
		var windowSize = window.getSize();
		
		var preloadImage = new Asset.images(lbImages[lbCurrent].file, {
			onComplete: function(){
				$('caption').setHTML(lbImages[lbCurrent].caption);
				$('container').setStyle('width', lbImages[lbCurrent].width+'px');
				$('container').setStyle('left', ((windowSize.x/2)-(lbImages[lbCurrent].width/2))+'px');
				$('currentImage').set('src', lbImages[lbCurrent].file);
				
				lbContainerFade.start({
					'opacity': 1
				});
				
				if ($('loader')) $('loader').setOpacity(0);
			}
		});
	},
	
	closeGallery: function(){
		lbFade.start({
			'opacity': 0
		});
		
		lbCurrent 	= 0;
		lbNum		= 0;
		lbImages	= new Array();
		preload		= new Array();
		
		(function(){ $('lightbox').remove(); }).delay(1000);
	}

}

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