var Tampopo = new Class({
	
	m_page:""
	,m_scrollbar:{}
	,m_timer:{}
	,m_menu:{}
	,m_transition:{}
	,m_segments:{}
	
	,initialize: function() {
		window.addEvent('domready', this.onDomReady.bind(this));
		window.addEvent('resize', this.onResize.bind(this));
	}
	
	,onDomReady:function() {
		this.m_transition = new Fx.Transition(Fx.Transitions.Expo);
	
		this.m_menu = new Swiff('/assets/swf/tagcloud.swf?'+Math.random(), {
			container: $('menu'),
			id: 'menuSwiff',
			width: 750,
			height: 220,
			params: {
				wmode: 'transparent',
				bgcolor: '#ffffff',
				allowScriptAccess:'always'
			},
			properties: {
				name:'menuSwiff'
			}
		});
	

		document.body.onselectstart = function() {
			return false;
		};
		
		this.createScrollBar();
		if (document.location.pathname == "/") {
			//this.loadPage('/blog/');
		}
		this.enableXHR();
		this.initTopMenu();
		
		$$('.submit').addEvent("mouseover", function(){this.set('class', 'submit-hover');});
		$$('.submit').addEvent("mouseout", function(){this.set('class', 'submit');});
		
		this.onPageLoad();
	}
	
	,createScrollBar:function() {
		m_scrollbar = new MooScroller($E('div.scroller div.content'), $E('div.scroller .scroll-knob'), {
			scrollLinks: {
				forward: $E('div.scroller div.scroll-forward'),
				back: $E('div.scroller div.scroll-back')
			},
			scrollSteps: 25,
			hideWhenNoOverflow: true
		});
		
		m_scrollbar.addEvent('startMouseOver', function() {
			$('scroll-knob-top').removeClass('scroll-knob-top-off');
			$('scroll-knob-top').addClass('scroll-knob-top-on');
			
			$E('div.scroller div.scroll-knob').removeClass('scroll-knob-bottom-off');
			$E('div.scroller div.scroll-knob').addClass('scroll-knob-bottom-on');
		});
		
		m_scrollbar.addEvent('stopMouseOver', function() {
			$('scroll-knob-top').removeClass('scroll-knob-top-on');
			$('scroll-knob-top').addClass('scroll-knob-top-off');
			
			$E('div.scroller div.scroll-knob').removeClass('scroll-knob-bottom-on');
			$E('div.scroller div.scroll-knob').addClass('scroll-knob-bottom-off');
		});
		
		$E('div.scroller div.scroll-knob').addEvent('mouseleave', function(){
			$('scroll-knob-top').removeClass('scroll-knob-top-on');
			$('scroll-knob-top').addClass('scroll-knob-top-off');
			
			$E('div.scroller div.scroll-knob').removeClass('scroll-knob-bottom-on');
			$E('div.scroller div.scroll-knob').addClass('scroll-knob-bottom-off');
		});
		
		$E('div.scroller div.scroll-knob').addEvent('mouseenter', function(){
			$('scroll-knob-top').removeClass('scroll-knob-top-off');
			$('scroll-knob-top').addClass('scroll-knob-top-on');
			
			$E('div.scroller div.scroll-knob').removeClass('scroll-knob-bottom-off');
			$E('div.scroller div.scroll-knob').addClass('scroll-knob-bottom-on');
		});
	
		
		$E('div.scroller div.scroll-back').autoMouseOvers({
			cssOver: 'scrollbtn-back-on', 
			cssOut: 'scrollbtn-back-off'
		});
		
		$E('div.scroller div.scroll-forward').autoMouseOvers({
			cssOver: 'scrollbtn-forward-on', 
			cssOut: 'scrollbtn-forward-off'
		});
		
		window.addEvent('load', this.onResize.bind(this));
		this.onResize();
	
	}
	
	,setPage:function(sPage) {
		m_page = sPage;
	}
	
	,getPage:function() {
		return m_page;
	}
	
	,setTargetsToBlank: function(oParent) {
		if (!oParent) {
			return;
		}
		try {
			oParent.getElements('a').set('target','_blank');
		}
		catch (oErr) {
		}
	}
	
	,loadPage:function(sUrl, bClear) {
		
		if(bClear) {
			Swiff.remote(this.m_menu.toElement(), "clearSelected");
		}
		
		this.setPage(sUrl);
		var req = new Request.HTML({update:$E('div.scroller div.content'),evalScripts:true});
		req.addEvent('success', this.onPageLoad.bind(this));
		req.get(sUrl);
	}
	
	,onPageLoad:function() {
		this.onResize();
		$E('div.scroller div.content').scrollTop = 0;
		
		this.m_timer = this.checkLoad.periodical(100, this, this);
		
		// reset xhr requests.
		this.enableXHR();
	}
	
	,enableXHR : function() {
		var me = this;
		$('content').getElements('a.xhr').each(function(oEl) {
			oEl.addEvent('click', function(oEv){
				oEv.stop();
				me.loadPage(this.get('href'));
			});
		});
	}
	
	,checkLoad:function(oTampopo) {
		//console.log('loading...');
		var imagesloaded = true;
		var images = document.images;

		for (var i=0;i<images.length;i++)
		{
			if(!images[i].complete) {
				imagesloaded = false;
			}
		}
		
		if(imagesloaded) {
			$clear(this.m_timer);
		}
		
		oTampopo.onResize();
	}
	
	,enableAll:function() {
		this.enableButton($('qa'));
		this.enableButton($('contact'));
		this.enableButton($('webcam'));
		this.enableButton($('jobs'));
		this.enableButton($('catering'));
		this.enableButton($('onlineshop'));
	}
	
	,enableButton:function(oEl) {
		oEl.store('mouseOverEnabled', true);
		oEl.swapClass('topselected', 'topdeselected');
	}
	
	,selectButton:function(oEl) {
		oEl.store('mouseOverEnabled', false);
		oEl.swapClass('topdeselected', 'topselected');
	}
	
	,initTopMenu:function() {
		var qa_f = function(e) {
			e.stop();
			this.enableAll();
			this.selectButton($('qa'));
			this.loadPage('/faq/', true);
		}
		$('qa').addEvent('click', qa_f.bind(this));	
		$('qa').autoMouseOvers({
			cssOver: 'topselected', 
			cssOut: 'topdeselected'
		});
		
		var contact_f = function(e) {
			e.stop();
			this.enableAll();
			this.selectButton($('contact'));
			this.loadPage('/contact/', true);
		}
		$('contact').addEvent('click', contact_f.bind(this));
		$('contact').autoMouseOvers({
			cssOver: 'topselected', 
			cssOut: 'topdeselected'
		});
		
		var webcam_f = function(e) {
			e.stop();
			this.enableAll();
			this.selectButton($('webcam'));
			this.loadPage('/webcam', true);
		}
		$('webcam').addEvent('click', webcam_f.bind(this));
		$('webcam').autoMouseOvers({
			cssOver: 'topselected', 
			cssOut: 'topdeselected'
		});
		
		var jobs_f = function(e) {
			e.stop();
			this.enableAll();
			this.selectButton($('jobs'));
			this.loadPage('/page/jobs/', true);
		}
		try {
			$('jobs').addEvent('click', jobs_f.bind(this));
			$('jobs').autoMouseOvers({
				cssOver: 'topselected', 
				cssOut: 'topdeselected'
			});
		
			var catering_f = function(e) {
				e.stop();
				this.enableAll();
				this.selectButton($('catering'));
				this.loadPage('/catering/', true);
			}
			
			$('catering').autoMouseOvers({
				cssOver: 'topselected', 
				cssOut: 'topdeselected'
			});
			$('catering').addEvent('click', catering_f.bind(this));
			
			var onlineshop_f = function(e) {
				e.stop();
				this.enableAll();
				window.location = "/products/";
			}
			
			$('onlineshop').autoMouseOvers({
				cssOver: 'topselected', 
				cssOut: 'topdeselected'
			});
			$('onlineshop').addEvent('click', onlineshop_f.bind(this));
			
			if(this.m_segments[0] == "products") {
				this.selectButton($('onlineshop'));
			}
		}
		catch (Error) {
		}
	}
	
	,setSegments:function(aSegments) {
		this.m_segments = aSegments;
	}
	
	,initNewsletter:function() {
		var me = this;
		
		var nlval = new Validate();
		me.onResize();
		
		$$('.submit').addEvent("mouseover", function(){this.set('class', 'submit-hover');});
		$$('.submit').addEvent("mouseout", function(){this.set('class', 'submit');});
		$('form').addEvent('submit', function(oEv) {oEv.stop();});
		$('form').addEvent('submit', function(oEvent){
			oEvent.stop();
			var params = {
				'gender':$('gender').get('value')
				,'firstname':$('firstname').get('value')
				,'lastname':$('lastname').get('value')
				,'email':$('email').get('value')
				,'form_key':$$('input[name=form_key]')[0].get('value')
			}
			
			var o_req = new Request({
				'url': '/newsletter/send',
				'method': 'post',
				'data':params,
				'onComplete': function(r){
					
					$('firstname').set('value', '');
					$('lastname').set('value', '');
					$('email').set('value', '');
					$('newsletter-done').setStyle('display', 'block');
					me.onResize();
				}
			});

			o_req.send();
		});
		
		
	}
	
	,initCatering:function() {
		var me = this;
		var nlval = new Validate();
		me.onResize();
		
		$$('.submit').addEvent("mouseover", function(){this.set('class', 'submit-hover');});
		$$('.submit').addEvent("mouseout", function(){this.set('class', 'submit');});
		$('form').addEvent('submit', function(oEvent) { oEvent.stop();});
		
		$('form').addEvent('submit', function(oEvent){
			oEvent.stop();
			var params = {
				'gender':$('gender').get('value')
				,'firstname':$('firstname').get('value')
				,'lastname':$('lastname').get('value')
				,'email':$('email').get('value')
				,'phone':$('phone').get('value')
				,'date':$('date').get('value')
				,'location':$('location').get('value')
				,'guests':$('guests').get('value')
				,'comments':$('comments').get('value')
				,'form_key':$$('input[name=form_key]')[0].get('value')
			}
			
			var o_req = new Request({
				'url': '/catering/send',
				'method': 'post',
				'data':params,
				'onComplete': function(r){
					
					$('catering-content').setStyle('display', 'none');
					$('catering-done').setStyle('display', 'block');
					me.onResize();
				}
			});
	
			o_req.send();
		});
	}
	
	,initFaq:function() {
		var me = this;
		me.onResize();
		
		var val = new Validate();
		
		$('faq_request').addEvent("mouseover", function(){this.set('class', 'submit-hover');});
		$('faq_request').addEvent("mouseout", function(){this.set('class', 'submit');});
		$('form').addEvent('submit', function(oEv) {oEv.stop();});
		val.addEvent('validated', function(oEvent){
			var params = {
				'gender':$('gender').get('value')
				,'firstname':$('firstname').get('value')
				,'lastname':$('lastname').get('value')
				,'email':$('email').get('value')
				,'phone':$('phone').get('value')
				,'question':$('question').get('value')
				,'form_key':$$('input[name=form_key]')[0].get('value')
			}
			//$('form').toQueryString();
			
			var o_req = new Request({
				'url': '/faq/send',
				'method': 'post',
				'data':params,
				'onComplete': function(r){
					$('faq-content').setStyle('display', 'none');
					$('faq-done').setStyle('display', 'block');
					me.onResize();
				}
			})
		
			if(val.getErrors().length == 0) {
				o_req.send();
			}
		
			//var val_test = new Validate();
			//val_test.getErrors();
			//o_req.send();
		});
	
		
		var disclaimer = new Accordion($('disclaimer'), 'div.toggler', 'div.element', {
			opacity: false
			,show:-1
			,alwaysHide:true
			,transition:this.m_transition.easeOut
			,duration:'long'
		});
		disclaimer.addEvent('step', function() {
			me.onResize();
		});
	}
	
	,initMovies:function() {
		var me = this;
		
		var batik_slide = new Fx.Slide('batik-movie', {transition:this.m_transition.easeOut,duration:'long'});
		batik_slide.addEvent('step', function() {
			me.onResize();
		});
		$('batik-slider').addEvent('click', function() {
			batik_slide.toggle();
		});
		batik_slide.hide();
		
		var tampopo_slide = new Fx.Slide('tampopo-movie', {transition:this.m_transition.easeOut,duration:'long'});
		tampopo_slide.addEvent('step', function() {
			me.onResize();
		});
		$('tampopo-slider').addEvent('click', function() {
			tampopo_slide.toggle();
		});
	}
	
	,initWebcam:function() {
		var webcam = new Swiff('http://webcam.datamaniacs.nl/tampopo.swf?'+Math.random(), {
			container: $('webcam-container'),
			id: 'webcamSwiff',
			width: 400,
			height: 280,
			params: {
				wmode: 'transparent',
				bgcolor: '#ffffff',
				allowScriptAccess:'always'
			},
			properties: {
				name:'webcamSwiff'
			}
		});
	
	}
	
	,showVideo:function(sURL, sImage, sContainer, iWidth, iHeight) {
		var vid = new Swiff('/assets/swf/player.swf', {
			 container:$(sContainer)
			,width:iWidth
			,height:iHeight
			,params:{
						 allowfullscreen:true
						,allowscriptaccess:'always'
						,wmode:'transparent'
			}
			,vars:{
				file:sURL,
				skin:'/assets/swf/bekle.swf',
				image:sImage,
				logo:'/assets/flv/logo.png',
				backcolor:'0xb9231a',
				screencolor:'0X000000',
				controlbar:'over'
			}
		});
		
		this.onResize();
	}
	
	,initStoreProducts:function() {
		var images = $$('.product-image');
		for(var i=0; i<images.length; i++) {
			if(!images[i].hasClass('no-image')) {
				images[i].removeEvents('click');
				images[i].addEvent('click', function(e){
					e.preventDefault();
					Milkbox.showThisImage(e.target.src, e.target.alt);
				});
			}
		}
		
		
		$('product-country').removeEvents('change');
		$('product-cat').removeEvents('change');
		
		var me = this;
		//var filter = $('product-country').get('value')+'/'+$('product-type').get('value');
		$('product-country').addEvent('change', function(e) {
			e.stop();
			var country = $('product-country').get('value');
			var filter = country+'/'+$('product-cat').get('value');
			
			if(country!="")
				me.loadPage('/storeproducts/'+filter);
		});
		
		$('product-cat').addEvent('change', function(e) {
			e.stop();
			var country = $('product-country').get('value');
			var filter = country+'/'+$('product-cat').get('value');
			
			if(country!="")
				me.loadPage('/storeproducts/'+filter);
		});
	}
	
	,onResize:function() {
		// resize the content div
		var h = window.size().height - 325;
		$E('div.scroller').setStyle('height', h+'px');
		$E('div.scroller div.content').setStyle('height', h+'px');
		$E('div.scroller div.scrollarea').setStyle('height', (h-15));
		$E('div.scroller div.scrollarea div.scrollbar-container').setStyle('height', (h-30)+'px');
		
		try {
			m_scrollbar.update();
			
			var r = (m_scrollbar.scrollRatio <= 1.1) ? false : true;
	
			if(!r) {
				$E('div.scroller div.scrollarea').setStyle('visibility', 'hidden');
				$E('div.scroller .scroll-knob').setStyle('visibility', 'hidden');
			} else {
				$E('div.scroller div.scrollarea').setStyle('visibility', 'visible');
				$E('div.scroller .scroll-knob').setStyle('visibility', 'visible');
			}
		} catch(e) {}
	}
});
var tp = new Tampopo();