
var EventHandler = {
        
        events: [],

        registerEvent: function( fn, object ) {
                if( $type( object ) != "object" ) {
                        this.events.push( fn );
                }
                else {
                        this.events.push( {func:fn, ob:object});
                }
        },
        
        fireEvents: function() {
                for( var i = 0; i < this.events.length; i++ ) {
                        if( $type( this.events[i] ) != "object" ) {
                                this.events[i].call();
                        }
                        else {
                                this.events[i].func.call( this.events[i].ob );
                        }
                }
        }
}


var App = {
	
	prefixTemplavoila: 'uploads/tx_templavoila/',
	prefixFileadmin: 'fileadmin/hortilux/templates/images/',
	prefix: '',
	
	boot: function() {
		this.backgroundRotator();
		this.menuBuilder();
	},
	
	menuBuilder: function(){
		var activeMenu = null;
		var mainMenu = $('nav');
		var mainMenuElements = $('nav').getChildren().getChildren();
		$each(mainMenuElements[0], function(mainMenuElement, index){
			if (mainMenuElement.className == 'on') activeMenu = mainMenuElement;
			mainMenuElement.addEvents({
				mouseenter: function(){
					hideActiveMenu()
					var subMenus = this.getChildren();
					$each(subMenus, function(subMenu, index){
						if(subMenu.tagName == 'UL'){
							subMenu.setStyle('display', 'block');
							subMenu.setStyle('left', subMenus.getParent().getPosition()[0].x - subMenus.getParent().getParent().getPosition()[0].x+'px');
						}
						if(subMenu.tagName == 'DIV'){
							subMenu.setStyle('display', 'block');
						}
					});

				},
				mouseleave: function(){
					var subMenus = this.getChildren();
					$each(subMenus, function(subMenu, Index){
						if(subMenu.tagName == 'UL'){
							subMenu.setStyle('display', 'none');
						}
						if(subMenu.tagName == 'DIV'){
							subMenu.setStyle('display', 'none');
						}						
					});
					showActiveMenu();
				}
			});
		});
		
		function showActiveMenu(){
			if(activeMenu){
				var subMenus = activeMenu.getChildren();
				$each(subMenus, function(subMenu, index){
					if(subMenu.tagName == 'UL'){
						subMenu.setStyle('display', 'block');
						subMenu.setStyle('left', subMenus.getParent().getPosition()[0].x - subMenus.getParent().getParent().getPosition()[0].x+'px');
					}
					if(subMenu.tagName == 'DIV'){
						subMenu.setStyle('display', 'block');
					}
				});
			}
		}
		
		function hideActiveMenu(){
			if(activeMenu){
				var subMenus = activeMenu.getChildren();
				$each(subMenus, function(subMenu, Index){
					if(subMenu.tagName == 'UL'){
						subMenu.setStyle('display', 'none');
					}
					if(subMenu.tagName == 'DIV'){
						subMenu.setStyle('display', 'none');
					}						
				});
			}
		}
		showActiveMenu();
	},
	
	
	backgroundRotator: function() {
		
		var contentID 			= $('content');
		var backgroundStyle 	= contentID.getStyle('background-image');
		var baseUrl				= $$('meta[name=base-url]')[0].get('content');
		
		var imageString			= backgroundStyle.replace('url("', '');	
		var imageString			= imageString.replace('")', '');
		var imageString			= imageString.replace('url(\'', '');	
		var imageString			= imageString.replace('\')', '');
		var imageString			= imageString.replace('url(', '');	
		var imageString			= imageString.replace(')', '');		
		
		if ( imageString.contains( baseUrl ) == true ) {
			imageString = imageString.replace(baseUrl, '');	
		}
		var images 				= imageString.split(',');
		
		if ( images.length == 1 ) {	
			prefix = this.setPrefix(images[0]);
			contentID.setStyle('background-image', 'url(' + prefix + images[0] + ')');
		}
		
		else {
		
			var slideshow  	= new Element('div', {'id':'slideshow' });
			var ulPictures 	= new Element('ul', {'id':'pictures'});
			var ulMenu 		= new Element('ul', {'id':'menu'});
			var loading		= new Element('span', {'id':'loading', 'html':'Loading'});
									
			images.each( function(image, index ) {
				prefix = this.setPrefix(image);							  
								
				var list  = new Element('li');
				var listText  = new Element('li');
				var img = new Element('img', {'src' : '/' + prefix + image });
							
				img.inject(list);				
				list.inject( ulPictures );
				
				listText.inject(ulMenu);	
				
				if ( index == 0 ) {
					contentID.erase('style');
					contentID.setStyle('background-image', 'url(/' + prefix + image + ')');
				}
				
			}, this);
			
			
			ulPictures.inject(slideshow);
			ulMenu.inject(slideshow);
			
			loading.inject(slideshow, 'top');
			slideshow.inject(contentID, 'top');
					
			var transition = 'fade';
			new BarackSlideshow('menu', 'pictures', 'loading', { transition: 'fade', auto: 'true', autostart: 'true', autointerval:1600 });
						
		}
		
		
	},
	
	
	setPrefix: function( input ) {
			
		if ( input.contains(this.prefixTemplavoila) == true || input.contains(this.prefixFileadmin) == true ) {
			return this.prefix;
		}
		
		else {
			return this.prefixTemplavoila;
		}
		
	}
	
				
}



EventHandler.registerEvent( App.boot, App );
window.addEvent( "domready", EventHandler.fireEvents.bind( EventHandler ) );


/*
Script: BarackSlideshow.js
	Lightweight slideshow script, based on Fx.MorphList

	License:
		MIT-style license.

	Authors:
		Guillermo Rauch
*/
Fx.MorphList = new Class({   
	
	Implements: [Events, Options],
	
	options: {/*             
		onClick: $empty,
		onMorph: $empty,*/
		bg: {'class': 'background', html: '<div class="inner"></div>', morph: {link: 'cancel'}}		
		
	},
	
	initialize: function(element, options){
		var self = this;
		this.setOptions(options);
		this.element = $(element);		
		this.items = this.element.getChildren().addEvents({
			mouseenter: function(){ self.morphTo(this); },
			mouseleave: function(){ self.morphTo(self.current); },
			click: function(ev){ self.onClick(ev, this); }
		});       
		this.bg = new Element('li', this.options.bg).inject(this.element).fade('hide');
		this.setCurrent(this.element.getElement('.current'));
	},

	onClick: function(ev, item){
		this.setCurrent(item, true).fireEvent('click', [ev, item]);
	},
	
	setCurrent: function(el, effect){  
		if (el && !this.current){
			this.bg.set('styles', el.getCoordinates(this.element));
			(effect) ? this.bg.fade('in') : this.bg.fade('show');
		}
		if (this.current) this.current.removeClass('current');
		if (el) this.current = el.addClass('current');    
		return this;
	},         
         
	morphTo: function(to){
		if (to){
			var c = to.getCoordinates(this.element);
			delete c['right']; delete c['bottom'];
			this.bg.morph(c);
			this.fireEvent('morph', to);
		}
		return this;
	}

});



var BarackSlideshow = new Class({
  
  Extends: Fx.MorphList,
  
  options: {/*
    onShow: $empty,*/
    auto: false,
    autostart: false,
    autointerval: 2000,
    transition: 'fade',
    tween: { duration: 1400 }
  },
  
  initialize: function(menu, images, loader, options){
	  //console.log(this.options); 
    this.parent(menu, options);
    this.images = $(images);
    this.imagesitems = this.images.getChildren().fade('hide');
    $(loader).fade('in');
    new Asset.images(this.images.getElements('img').map(function(el) { return el.setStyle('display', 'none').get('src'); }), { onComplete: function() {      
	  this.loaded = true;      
      $(loader).fade('out');
      if (this.current) this.show(this.items.indexOf(this.current));
      else if (this.options.auto && this.options.autostart) this.progress();
    }.bind(this) });
    if ($type(this.options.transition) != 'function') this.options.transition = $lambda(this.options.transition);
  },
  
  auto: function(){
    if (!this.options.auto) return false;
    $clear(this.autotimer);
    this.autotimer = this.progress.delay(this.options.autointerval, this);
  },
  			
  onClick: function(event, item){
    this.parent(event, item);
    event.stop();
    this.show(this.items.indexOf(item));
    $clear(this.autotimer);
  },
  
  show: function(index) {
    if (!this.loaded) return;
    var image = this.imagesitems[index];    
		if (image == this.curimage) return;
    image.set('tween', this.options.tween).dispose().inject(this.curimage || this.images.getFirst(), this.curimage ? 'after' : 'before').fade('hide');
		image.getElement('img').setStyle('display', 'block');
    var trans = this.options.transition.run(null, this).split('-');
    switch(trans[0]){
      case 'slide': 
        var dir = $pick(trans[1], 'left');
        var prop = (dir == 'left' || dir == 'right') ? 'left' : 'top';
        image.fade('show').setStyle(prop, image['offset' + (prop == 'left' ? 'Width' : 'Height')] * ((dir == 'bottom' || dir == 'right') ? 1 : -1)).tween(prop, 0); 
        break;
      case 'fade': image.fade('in'); break;
    }
    image.get('tween').chain(function(){ 
      this.auto();
      this.fireEvent('show', image); 
    }.bind(this));
    this.curimage = image;
    this.setCurrent(this.items[index])
    this.morphTo(this.items[index]);
		return this;
  },
  
  progress: function(){
    var curindex = this.imagesitems.indexOf(this.curimage);
    this.show((this.curimage && (curindex + 1 < this.imagesitems.length)) ? curindex + 1 : 0);
  }
  
});