function noSpam(user, domain) {
  locationstring = 'mailto:'+user+'@'+domain;
  window.location = locationstring;
}

var pages = {
  build: function() {
    this.containerPages = new Element('div', { id: mySite.containerPagesId }).inject($('containerMainNavigation'), 'after');

    switch(mySite.currentPage) {
			case '/home':
				$$('.btnJobs').set('opacity', 1);
				break;

      case '/collection':
				$$('.btnJobs').set('opacity', 0);
        //Required elements
        var containerProductDetails = new Element('div', { id: 'containerProductDetails', 'class': 'slideshow' });
        var containerCollectionNavigation = new Element('div', { id: 'containerCollectionNavigation' });
        var containerGrid = new Element('div', { id: 'containerGrid' });
        this.containerPages.adopt(containerProductDetails, containerCollectionNavigation, containerGrid);
        new collection(null, {
  				imagesDirectory: 'assets/images/content/collections/',
  				thumbnailsDirectory: 'assets/images/content/collections/thumbnails/'
  			});
        break;

      case '/contact':
      case '/press':
			case '/trade-fairs':
      case '/store-locator':
			case '/jobs':
				$$('.btnJobs').set('opacity', 0);
        this.load(mySite.currentPage);

        if(mySite.currentPage == '/store-locator') {
          mySite.addEvent('pageInitStoreLocatorComplete', function() {
  				  $('countries').addEvent('click:relay(a)', function(e) {
  				    e.stop();
  				    var a = e.target;
  				    a.getParent('ul').getElements('a').removeClass('active');
  				    a.addClass('active');
      				new Request.HTML({
      					url: 'assets/handlers/handler.pages.php',
      					data: {
      						page: mySite.currentPage,
      						country: e.target.get('href').split('/').getLast()
      					},
      					update: $('containerAddresses')
      				}).send();
  				  });
  				});
        }
        break;

			case '/newsletter':
				newsletter.subscribe();
				break;
    }
  },

  load: function(page) {
    new Request.HTML({
			url: 'assets/handlers/handler.pages.php',
			data: {
				page: mySite.currentPage
			},
			onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
				this.containerPages.set('html', responseHTML);
				this.animateIn();
			}.bind(this)
		}).send();
  },
  
  animateIn: function() {
    if(mySite.currentPage == '/contact') var pageContainer = $('containerContact');
			else if(mySite.currentPage == '/store-locator') var pageContainer = $('containerStoreLocator');
			  else if(mySite.currentPage == '/press') var pageContainer = $('containerPress');
			  	else if(mySite.currentPage == '/trade-fairs') var pageContainer = $('containerTradeFairs');
						else if(mySite.currentPage == '/jobs') var pageContainer = $('containerJobs');

		var myChainsObserver = new chainsObserver();
		myChainsObserver.addEvent('chainsCompleted', function() {
      if(mySite.currentPage == '/store-locator') mySite.fireEvent('pageInitStoreLocatorComplete');
			var btnClosePage = new Element('div', {
				'class': 'btnPageClose',
				events: {
					click: function(e) {
						e.stop();
	          mySite.fireEvent('setActiveInNavigation', '/home');
  	        mySite.fireEvent('changePage', '/home');
					}
				}
			}).set('html', '<a href="/home" title="Close window">X</a>');
			pageContainer.getFirst('div').grab(btnClosePage);
		});

		var elementsChain = new Hash({
			container: {
				content: [pageContainer]
			},
			textContent: {
				content: [pageContainer.getFirst('div')]
			}
		});
		var chain = new Chains(elementsChain);
		myChainsObserver.add(chain);

		chain.startup();
  }
}

var newsletter = {
  subscribe: function() {
    mySite.fireEvent('dialogOpen');
  	new dialog({
			container: pages.containerPages,
  	  modal: false,
      title: 'Subscribe & hear all the news first!',
      url: 'assets/handlers/handler.newsletter.php',
      ajaxData: {
        action: 'formSubscribe'
      },
  		ajaxDelay: 50,
  		cancelBtn: true,
  		cancelValue: 'Cancel',
      submitValue: 'Subscribe'
    }).addEvents({
      close: function() {
        mySite.fireEvent('dialogClose');
      },
      confirm: function() {
        new Request.JSON({
          url: 'assets/handlers/handler.newsletter.php',
          data: document.id('newsletterSubscribeForm').toQueryString(),
          onSuccess: function(response) {
      			if(response.result == 'success') this.showMessage.delay(600, this, ['ok', response.data.message]);
              else this.showMessage.delay(600, this, ['error', response.data.message]);
    			}.bind(this)
        }).send();
  	  }.bind(this)
	  });
  },

  showMessage: function(type, message) {
    var options = {
			container: pages.containerPages,
 		  modal: false,
 		  title: (type == 'error' ? 'Ooops!' : 'Thank you!'),
 		  message: message
 		} 
 		dialog.alert(options, function() {
      mySite.fireEvent('dialogClose');
    });
  }
}
$extend(newsletter, new Events());

function initFloom(slides) {
	//Non sucking browsers
	var amount = 24;
	var animation = 200;
	if(Browser.Engine.trident) { //IE
		var amount = 1;
		var animation = 1200;
	}

  mySite.myFloom = new Floom(document.id('background'), slides, {
		slidesBase: mySite.wallpaperPath,
		captions: false,
		amount: amount,
		animation: animation,
    interval: 12000,
		axis: 'vertical',
		id: 'container-background'
	});

  mySite.addEvents({
		wallpaperDimensionsChanged: mySite.myFloom.setCoordinates,
		changeWallpaper: mySite.myFloom.nextSlide.bind(mySite.myFloom, true),
		changePage: function(page) {
	  	if(page == '/home' && mySite.myFloom.paused) mySite.fireEvent('floomPlay');
				else if(page != '/home' && !mySite.myFloom.paused) mySite.fireEvent('floomPause');
		},
    dialogOpen: function() {
      mySite.dialogOpen = true;
		  mySite.fireEvent('floomPause');
    }
	});

	var myMask = new Mask.Extended(document.id('container-background'), {
	  'class': 'maskExtended',
	  opacity: 0.5,
	  fxOptions: {
	    duration: 250
	  }
	});
	myMask.addEvents({
	  hide: function() {
	    mySite.timer = mySite.myFloom.nextSlide.delay(1600, mySite.myFloom);
    }.bind(mySite.myFloom)
	});
	mySite.addEvents({
		floomPause: function() {
			mySite.myFloom.pause();
			myMask.show();
		},
		floomPlay: myMask.hide.bind(myMask),
		wallpaperDimensionsChanged: myMask.position.bind(myMask),
		screensaverStart: function() {
			$each(arguments, function(el) {
				var element = $(el);
				if(element) {
					var originalOpacity = element.get('opacity');
					if(!originalOpacity) originalOpacity = 1;
					element.store('originalOpacity', originalOpacity).fade('out');
				}
			});
			myMask.hide();
		},
		screensaverStop: function() {
			$clear(mySite.timer);
			mySite.myFloom.pause();
			$each(arguments, function(el) {
				var element = $(el);
				if(element) element.fade(element.retrieve('originalOpacity'));
			});
			myMask.show();
		}
	});
}

wallpapers = {
	options: {
		path: '/assets/images/wallpapers/',
		wallpaperId: 'background',
		maxQuantity: 2,
		exclude: [],
		loadPeriodical: 10000
	},

	allDataLoaded: false,
	stack: [],
	floomRunning: false,
	timer: '',

	initLoad: function() {
		this.load();
		this.timer = this.load.periodical(this.options.loadPeriodical, this);
	},

	load: function() {
		if(this.allDataLoaded) return;
		new Request.JSON({
			url: 'assets/handlers/handler.wallpapers.php',
			data: {
				path: this.options.path,
				maxQuantity: this.options.maxQuantity,
				exclude: this.options.exclude.join('|')
			},
			onSuccess: function(response) {
				if(response.result == 'success' && response.data) {
					if(response.data.length > 0) {
						this.options.exclude.combine(response.data);
						if(this.floomRunning == false) this.setup(response.data);
							else this.addFloomSlides(response.data);
					} else {
						this.allDataLoaded = true;
						clearInterval(this.timer);
					}
				}
			}.bind(this)
		}).send();
	},

	addFloomSlides: function(stack) {
		var newStack = [];
		for(var i=0; i<stack.length; i++) {
			newStack.push({
				image: stack[i]
			});
		}
		newStack.each(function(image){
			mySite.myFloom.addImage(image);
		});
		mySite.myFloom.preload();
	},

	setup: function(stack) {
		var firstWallpaper = stack.getRandom();
		stack.erase(firstWallpaper);
		for(var i=0; i<stack.length; i++) {
			this.stack.push({
				image: stack[i]
			});
		}
		//Add first wallpaper to end of stack
		this.stack.push({
			image: firstWallpaper
		});

		new Asset.image(this.options.path+firstWallpaper, {
			onload: function(image) {
				image.set('id', this.options.wallpaperId).inject(document.body);
				this.create();
			}.bind(this)
		});
	},

	create: function() {
	  new wallpaper(this.options.wallpaperId, {
	    mode: 'fill',
			verticalAnchor: 'top'
	  }).addEvents({
	    dimensionsChanged: function(element) {
	      mySite.fireEvent('wallpaperDimensionsChanged');
	    },
	    reset: function(element, dimensions) {
	      mySite.fireEvent('wallpaperDimensionsChanged');
	    }
	  });

	  initFloom(this.stack);
		this.floomRunning = true;
	}
}

var screensaver = {
	elementsToHide: [],

	initialize: function() {
		this.myTimer = new IdleTimer(window, {
			timeout: 25000,
			events: ['mousemove', 'mousewheel', 'mousedown', 'mouseup']
		}).addEvents({
			idle: function() {
				if(mySite.currentPage != '' && mySite.currentPage != '/home') mySite.fireEvent('screensaverStart', this.elementsToHide);
			}.bind(this),
			active: function() {
				if(mySite.currentPage != '' && mySite.currentPage != '/home') mySite.fireEvent('screensaverStop',this.elementsToHide);
			}.bind(this)
		});
		this.myTimer.start();
	},

	kill: function() {
		$clear(this.myTimer);
	}
}

var newElements = {
  initialize: function(data, parent, callbackElementsCreated, callbackElementCreated) {
		if(!$defined(parent)) parent = document.body;

		if(!$defined(callbackElementsCreated)) callbackElementsCreated = 'elementsCreated';
		if(!$defined(callbackElementCreated)) callbackElementCreated = 'elementCreated';
		this.callbacks = new Hash({
			'elementsCreated': callbackElementsCreated,
			'elementCreated': callbackElementCreated
		});

		this.processData(data, parent);
    mySite.fireEvent(this.callbacks.elementsCreated, parent);
	},

  processData: function(data, parent) {
		$each(data, function(element) {
			this.make(element, parent);
		}.bind(this));
  },

  make: function(data, parent) {
		var newElement = new Element(data.type);
		if(data.id) newElement.set('id', data.id);
		if(data.cssClass) newElement.addClass(data.cssClass);
		if(data.text) newElement.set('text', data.text);
		if(data.rel) newElement.set('rel', data.rel);
		if(data.title) newElement.set('title', data.title);
		if(data.type == 'a' && data.href) newElement.set('href', data.href);
		if(data.configuration) newElement.store('configuration', data.configuration);
		parent.grab(newElement);
	  mySite.fireEvent(this.callbacks.elementCreated, newElement);

		if(data.elements) this.processData(data.elements, newElement);
	}
}
$extend(newElements, new Events());

var chainsObserver = new Class({
	Implements: [Events],

	initialize: function() {
		this.chains = [];
	},

  add: function(chain) {
    this.chains.push(chain);
    chain.addEvent('chainComplete', this.chainComplete.bind(this));
  },

	chainComplete: function(args) {
	  //console.log('chainsWatcher: chainComplete for args: ', args);
		this.chains.each(function(chain, index) {
			//console.log('chains index: ', index, ' met length: ', this.chains.length);
			if($defined(this.chains[index]) && this.chains[index].isComplete()) this.chains.splice(index, 1);
		}.bind(this));

		if(this.chains.length <= 0) { //console.log('completed');
			this.fireEvent('chainsCompleted'); }
	},

  cancelChains: function() {
    this.chains.each(function(chain, index) {
      if($defined(this.chains[index])) {
        this.chains[index].removeEvents();
        this.chains[index].stop();
      }
    }.bind(this));
    this.chains = [];
  },

  reset: function() {
    this.chains = [];
  }
});

var seqImageLoader = {
	started: false,
	queue: 'closed',
	counter: 0,
	imageStack: [],

	initialize: function() {
		this.open();
		return true;	
	},

	addImage: function(imageUrl, returnChain) {
		if(this.queue != 'open') return false;
		this.imageStack[this.imageStack.length] = new Hash({
			'imageUrl': imageUrl,
			'returnChain': returnChain
		});
		this.chain(
			function() {
				this.imageStack[this.counter].loadedImage = new Asset.image(this.imageStack[this.counter].imageUrl, {
					onload: function() {
						this.imageLoaded(this.imageStack[this.counter])
					}.bind(this)
				});
				return true;
			}
		)

		if(!this.started) {
			this.started = true;
			this.callChain();
		}
	},
	
	imageLoaded: function(stackItem) {
		if(stackItem) stackItem.returnChain.callChain(stackItem.loadedImage);
		if(this.imageStack.length > 0) this.nextImage();
	},
	
	nextImage: function () {
		this.counter++;
		if(this.counter == this.imageStack.length) {
			this.clearChain();
			this.imageStack = [];
			this.counter = 0;
			this.started = false;
		} else {
			this.callChain();
		}
	},

	open: function() {
		this.queue = 'open';
	},
	
	close: function() {
		this.clearChain();
		this.imageStack = [];
		this.counter = 0;
		this.started = false;
		this.queue = 'closed';
	}
};
$extend(seqImageLoader, new Chain());
seqImageLoader.initialize();



//Add fx to SlideShow
SlideShow.add('pushUpFunky', function(previous, next, duration, instance) {
	var distance = instance.element.getSize().y;
	next.setStyle('top', distance);
	new Fx.Elements([previous, next], {
		duration: duration,
		transition: 'back:in:out'
	}).start({
		0: { top: [-distance] },
		1: { top: [0] }
	});
	return this;
});
SlideShow.add('pushDownFunky', function(previous, next, duration, instance) {
	var distance = instance.element.getSize().y;
	next.setStyle('top', -distance);
	new Fx.Elements([previous, next], {
		duration: duration,
		transition: 'back:in:out'
	}).start({
		0: { top: [distance] },
		1: { top: [0] }
	});
	return this;
});

SlideShow.add('pushUpFunkyFade', function(p,n,d,i) {
	this.pushUpFunky(p,n,d,i).fade(p,n,d,i);
});
SlideShow.add('pushDownFunkyFade', function(p,n,d,i) {
	this.pushDownFunky(p,n,d,i).fade(p,n,d,i);
});

SlideShow.add('pushLeftFunky', function(previous, next, duration, instance) {
	var distance = instance.element.getSize().x;
	next.setStyle('left', distance);
	new Fx.Elements([previous, next], {
		duration: duration,
		transition: 'quint:in:out'
	}).start({
		0: { left: [-distance] },
		1: { left: [0] }
	});
	return this;
});
SlideShow.add('pushRightFunky', function(previous, next, duration, instance) {
	var distance = instance.element.getSize().x;
	next.setStyle('left', -distance);
	new Fx.Elements([previous, next], {
		duration: duration,
		transition: 'quint:in:out'
	}).start({
		0: { left: [distance] },
		1: { left: [0] }
	});
	return this;
});
