// Mainmenu overlay duplicate
var showOverlayY;
window.addEvent('domready', function(){
	if( $('menu_overlay') != null ){
		$('menu_overlay').set('tween', {'duration':150});
	}
	if( $('content_items') != null ){
		showOverlayY = $('content_items').getCoordinates().top.toInt();
	}
});

window.addEvent('scroll', function(){
	if( $('menu_overlay') == null ){
		return;
	}
	if( window.getScroll().y.toInt() > showOverlayY ){
		$('menu_overlay').tween('top', -3);
	}else{
		$('menu_overlay').tween('top', -56);
	}
});

function toTop(){
	new Fx.Scroll(window).toElement($('wrapper'), 'y');
}

// Mainmenu and duplicate smooth hover
window.addEvent('domready', function(){
	$$('div.mainmenu ul li a.link').each(function(el){
		if( $(el).hasClass('active') ) return;
		$(el).set('tween', {'duration': 250});
		$(el).store('color', $(el).getStyle('color'));
		$(el).addEvent('mouseenter', function(){
			$(this).tween('color', '#7fc3e4');
		});
		$(el).addEvent('mouseleave', function(){
			$(this).tween('color', $(this).retrieve('color'));
		});
	});
});

// Submenu animate marker
function submenuMarkerXPos(el){
	var xpos = Math.round(el.getSize().x.toInt() / 2) - 16;
	return xpos;
}
window.addEvent('domready', function(){
	$$('div#submenu ul li').each(function(el){
		$(el).setStyle('background-position', submenuMarkerXPos($(el)) + 'px 35px');
		$(el).set('tween', {'duration':300, 'transition':Fx.Transitions.Sine.easeOut});
		if( $(el).getFirst('a.link').hasClass('active') ){
			$(el).tween('background-position', submenuMarkerXPos($(el)) + 'px 25px');
		}
		$(el).getFirst('a.link').addEvent('mouseenter', function(){
			if($(this).hasClass('active')) return;
			$(this).getParent().tween('background-position', submenuMarkerXPos($(this.getParent())) + 'px 30px');
		});
		$(el).getFirst('a.link').addEvent('mouseleave', function(){
			if($(this).hasClass('active')) return;
			$(this).getParent().tween('background-position', submenuMarkerXPos($(this.getParent())) + 'px 35px');
		});
	});
	$$('.content_item').each(function(el){
		$(el).set('tween', {'transition':Fx.Transitions.Sine.easeOut});

		addSwipeListener($(el), function(e) {
			swipePageChange(e, this);
		});

	});
});

// Filter contents and animate marker according to selected filter
function filterContent(type){
	$$('div#submenu ul li').each(function(el){
		if( $(el).getFirst('a.link').hasClass('active') ){
			$(el).tween('background-position', submenuMarkerXPos($(el)) + 'px 35px');
			$(el).getFirst('a.link').removeClass('active');
		}
		if( $(el).getFirst('a.link').hasClass(type) ){
			$(el).getFirst('a.link').addClass('active');
			$(el).tween('background-position', submenuMarkerXPos($(el)) + 'px 25px');
		}
	});
	var icount = 0;
	$$('.content_item').each(function(el){
		if( !$(el).hasClass(type) ){
			$(el).tween( 'height', 0 );
		}else{
			if(icount == 0){
				$(el).setStyle('background-image', 'none');
			}else{
				var bgimg = $(el).hasClass('odd') ? 'content_item_odd_bg.gif' : 'content_item_even_bg.gif';
				$(el).setStyle('background-image', 'url(css/assets/' + bgimg + ')');
			}
			$(el).tween( 'height', $(el).getFirst('.content_item_inner').getFirst('.content').getSize().y.toInt() );
			icount++;
		}
	});
}

window.addEvent('load', function(){
	var thisuri = new URI(window.location.href);
	var filtertype = thisuri.get('fragment');
	if( filtertype == null || filtertype.length == 0 ){
		return;
	}
	if( $$('.content_item.' + filtertype).length > 0 ){
		filterContent( filtertype );
	}
	if( $('project_' + filtertype) != null ){
		stepItem($('project_' + filtertype));
	}
});

// Solution first-child for MSIE 6
window.addEvent('domready', function(){
	if( $('content_items') == null || $('content_items').getFirst('.content_item') == null ){
		return;
	}
	$('content_items').getFirst('.content_item').setStyle('background-image', 'none');
});

// Fix autoheight on errorpages
window.addEvent('domready', function(){
	if( $('featured') != null && $('featured').hasClass('error') ){
		$('featured').setStyle('height', window.getSize().y.toInt());
	}
});

// Skip content items
function nextItem(from){
	var item = $(from).getParent().getParent().getParent().getParent();
	while(ni = item.getNext()){
		if(ni.getStyle('height').toInt() > 0){
			stepItem(ni);
			return;
		}
		item = ni;
	}
}
function prevItem(from){
	var item = $(from).getParent().getParent().getParent().getParent();
	while(pi = item.getPrevious()){
		if(pi.getStyle('height').toInt() > 0){
			stepItem(pi);
			return;
		}
		item = pi;
	}
	stepItem($('wrapper'));
}
function stepItem(to){
	var offset = Math.round((window.getSize().y.toInt() - $(to).getSize().y.toInt()) / -2);
	if(offset > 0) offset = 0;
	new Fx.Scroll(window, {'offset':{'y':offset}}).toElement($(to));
}

// Correct y-position of contents
// Called after executing init small slides
function correctContents(){
	$$('.content_item_inner').each(function(el){
		if( $(el).getFirst('.content') == null || $(el).getFirst('.smallslides') == null ){
			return;
		}
		var ch = $(el).getFirst('.content').getSize().y.toInt();
		var sh = $(el).getFirst('.smallslides').getSize().y.toInt();
		if(ch > sh){
			var sp = $(el).getFirst('.smallslides').getStyle('padding-top').toInt();
			$(el).getFirst('.smallslides').setStyle('padding-top', sp + (ch - sh));
			if($(el).getFirst('.smallslides').getFirst('a.projectlink') != null){
				$(el).getFirst('.smallslides').getFirst('a.projectlink').setStyle('top', $(el).getFirst('.smallslides').getFirst('a.projectlink').getStyle('top').toInt() + (ch - sh));
			}
		}else{
			if($(el).getFirst('.content').getFirst('p') == null){
				return;
			}
			var pp = $(el).getFirst('.content').getFirst('p').getStyle('margin-top').toInt();
			$(el).getFirst('.content').getFirst('p').setStyle('margin-top', pp + (sh - ch));
		}
	});
}

// Correct x-position of big slides
function correctSlides(){
	if(window.getSize().x.toInt() > 1280){
		var ml = 0;
	}else{
		var ml = Math.round((window.getSize().x.toInt() - 1280) / 2);
	}
	$$('.content_item .bigslides img').each(function(img){
		$(img).setStyle('margin-left', ml);
	});
	$$('.content_item .bigslides').each(function(slide){
		$(slide).setStyle('width', window.getSize().x.toInt());
	});
}
window.addEvent('domready', correctSlides);
window.addEvent('resize', correctSlides);

// Slideshow keycontrols
window.addEvent('keydown', function(evt){
	if( evt.key == 'up' || evt.key == 'down' ){
		evt.preventDefault();
	}
});

window.addEvent('keydown:throttle(500)', function(evt){
	if( evt.key != 'left' && evt.key != 'right' && evt.key != 'up' && evt.key != 'down' ){
		return;
	}
	var items = $$('.content_item');
	var active = null;
	for(var i=0; i<items.length; i++){
		if(items[i].getStyle('height').toInt() == 0){
			continue;
		}
		if(items[i].retrieve('mouseover')){
			active = i;
			break;
		}
	}
	if(active == null){
		return;
	}
	if( evt.key == 'up' || evt.key == 'down' ){
		var smenu = items[active].getFirst('.content_item_inner').getFirst('.content_item_menu').getFirst('.skip_menu');
		if(evt.key == 'up'){
			prevItem(smenu.getFirst('a.previous'));
		}else if(evt.key == 'down'){
			nextItem(smenu.getFirst('a.previous'));
		}
		return;
	}
	if( evt.key == 'left' || evt.key == 'right' ){
		if( items[active].getFirst('.content_item_inner').getFirst('.content_item_menu').getFirst('.slide_menu') == null ){
			return;
		}
		var anchor = items[active].getFirst('.content_item_inner').getFirst('.content_item_menu').getFirst('.slide_menu').getFirst('a.active');
		if(evt.key == 'right'){
			var next_anchor = anchor.getNext('a.slide_button');
			next_anchor = (next_anchor == null) ? anchor.getParent().getFirst('a.slide_button') : next_anchor;
			if(next_anchor != null){
				next_anchor.fireEvent('click');
			}
		}else if(evt.key == 'left'){
			var prev_anchor = anchor.getPrevious('a.slide_button');
			prev_anchor = (prev_anchor == null) ? anchor.getParent().getLast('a.slide_button') : prev_anchor;
			if(prev_anchor != null){
				prev_anchor.fireEvent('click');
			}
		}
		return;
	}
});

function swipePageChange(e, from){
	if( $(e.target).getFirst('.content_item_inner').getFirst('.content_item_menu').getFirst('.slide_menu') == null ){
		return;
	}
	var anchor = $(e.target).getFirst('.content_item_inner').getFirst('.content_item_menu').getFirst('.slide_menu').getFirst('a.active');
	if(e.direction == "left"){
		var next_anchor = anchor.getNext('a.slide_button');
		next_anchor = (next_anchor == null) ? anchor.getParent().getFirst('a.slide_button') : next_anchor;
		if(next_anchor != null){
			next_anchor.fireEvent('click');
		}
	}else if(e.direction == "right"){
		var prev_anchor = anchor.getPrevious('a.slide_button');
		prev_anchor = (prev_anchor == null) ? anchor.getParent().getLast('a.slide_button') : prev_anchor;
		if(prev_anchor != null){
			prev_anchor.fireEvent('click');
		}
	}
}


function showKeyboard(el){
	if( $$('.content_item_inner .content_item_menu .skip_menu').length == 0 ){
		return;
	}
	if( $('keycontrols') == null ){
		var kc = new Element('div', {'id':'keycontrols'});
		kc.inject($('container'), 'top');
		kc.setStyle('display', 'block');
		kc.setStyle('position', 'absolute');
		kc.setStyle('z-index', 425);
		kc.setStyle('width', 63);
		kc.setStyle('height', 44);
		kc.setStyle('top', 0);
		kc.setStyle('right', 15);
		kc.setStyle('background-image', 'url(css/assets/keyboard.png)');
		if( Browser.ie6 ){
			kc.setStyle('background-image', 'url(css/assets/keyboard.gif)');
		}
		kc.set('tween', {'duration':750});
	}
	var ny = $(el).getCoordinates().top.toInt() + 10;
	$('keycontrols').setStyle('display', 'block');
	$('keycontrols').tween('top', ny);
}

function hideKeyboard(){
	if( $$('.content_item_inner .content_item_menu .skip_menu').length == 0 ){
		return;
	}
	$('keycontrols').setStyle('display', 'none');
}

// Init big slides
window.addEvent('domready', function(){
	$$('.content_item').each(function(ci){
		// Find content items
		var citem = $(ci);
		if(citem.getFirst('.bigslides') == null || citem.getFirst('.bigslides').getChildren('img') == null || citem.getFirst('.bigslides').getChildren('img').length == 0){
			return;
		}
		// Find slide items
		var slides = citem.getFirst('.bigslides').getChildren('img');
		// Add mouseevents
		if(slides.length > 1){
			$(ci).addEvent('mouseenter', function(){
				$(this).store('mouseover', true);
				showKeyboard($(this));
			});
			$(ci).addEvent('mouseleave', function(){
				$(this).store('mouseover', false);
			});
			$('content_items').addEvent('mouseleave', function(){
				hideKeyboard();
			});
			$(ci).store('mouseover', false);
		}
		// Create slide menu
		var slide_menu = new Element('div');
		slide_menu.addClass('slide_menu');
		for(var s=0; s<slides.length; s++){
			// Manipulate slide items
			slides[s].setStyle('position', 'absolute');
			slides[s].setStyle('z-index', slides.length - s);
			slides[s].fade('hide');
			slides[s].set('tween', {'duration':600});
			// Create slide menu items
			var slide_menu_item = new Element('a', {'href':'javascript:void(0);'});
			slide_menu_item.addClass('slide_button');
			var slide_menu_item_inner = new Element('span');
			slide_menu_item_inner.set('html', s+1);
			slide_menu_item.adopt(slide_menu_item_inner);
			slide_menu_item.store('slide', slides[s]);
			slide_menu_item.addEvent('focus', function(){
				$(this).blur();
			});
			slide_menu_item.addEvent('click', function(){
				bigSlide($(this));
			});
			slide_menu.adopt(slide_menu_item);
		}
		// Add first slide menu item for actual content
		var slide_menu_item = new Element('a', {'href':'javascript:void(0);'});
		slide_menu_item.addClass('slide_button');
		slide_menu_item.addClass('active');
		var slide_menu_item_inner = new Element('span');
		slide_menu_item_inner.set('html', 0);
		slide_menu_item.adopt(slide_menu_item_inner);
		slide_menu_item.store('slidecontainer', citem.getFirst('.bigslides'));
		slide_menu_item.addEvent('focus', function(){
			$(this).blur();
		});
		slide_menu_item.addEvent('click', function(){
			closeBigSlide($(this));
		});
		slide_menu_item.inject(slide_menu, 'top');
		// Configure tween
		citem.set('tween', {'duration':750});
		// Add slide_menu to content item menu
		slide_menu.inject(citem.getFirst('.content_item_inner').getFirst('.content_item_menu'), 'bottom');
	});
});

// Execute big slides
function bigSlide(anchor){
	//Find slide
	var as = anchor.getParent().getChildren('a.slide_button');
	as.each(function(a){
		$(a).removeClass('active');
	});
	anchor.addClass('active');
	var slide = anchor.retrieve('slide');
	// Hide regular contents
	var contents = slide.getParent().getParent().getFirst('.content_item_inner').getChildren('div.smallslides, div.content');
	contents.each(function(content){
		content.set('tween', {'duration':250});
		content.fade('out');
	});
	// Hide slides
	var slides = slide.getParent().getChildren('img');
	slides.each(function(s){
		$(s).fade('out');
	});
	// Show the one
	slide.fade('in');
	// Correct heights
	slide.getParent().getParent().tween('height', slide.getSize().y.toInt());
	slide.getParent().setStyle('height', slide.getSize().y.toInt());
}

function closeBigSlide(anchor){
	// Find slide
	var as = anchor.getParent().getChildren('a.slide_button');
	as.each(function(a){
		$(a).removeClass('active');
	});
	anchor.addClass('active');
	var slidecontainer = anchor.retrieve('slidecontainer');
	var slides = slidecontainer.getChildren('img');
	// Hide slides
	slides.each(function(s){
		$(s).fade('out');
	});
	// Show regular contents
	var contents = slidecontainer.getParent().getFirst('.content_item_inner').getChildren('div.smallslides, div.content');
	contents.each(function(content){
		content.set('tween', {'duration':750});
		content.fade('in');
	});
	// Correct heights
	slidecontainer.getParent().tween('height', slidecontainer.getParent().getFirst('.content_item_inner').getFirst('.content').getScrollSize().y.toInt());
	slidecontainer.setStyle('height', 0);
}

// Init small slides
window.addEvent('domready', function(){
	$$('.content_item_inner').each(function(ci){
		// Find content items
		var citem = $(ci);
		// Add mouseevents
		$(ci).getParent('.content_item').addEvent('mouseenter', function(){
			$(this).store('mouseover', true);
			showKeyboard($(this));
		});
		$(ci).getParent('.content_item').addEvent('mouseleave', function(){
			$(this).store('mouseover', false);
		});
		$('content_items').addEvent('mouseleave', function(){
			hideKeyboard();
		});
		$(ci).getParent('.content_item').store('mouseover', false);
		// Exit if no slides
		if(citem.getFirst('.smallslides') == null || citem.getFirst('.smallslides').getChildren('img') == null || citem.getFirst('.smallslides').getChildren('img').length < 2){
			return;
		}
		// Find slide items
		var slides = citem.getFirst('.smallslides').getChildren('img');
		citem.getFirst('.smallslides').setStyle('height', slides[0].getSize().y.toInt());
		// Create slide menu
		var slide_menu = new Element('div');
		slide_menu.addClass('slide_menu');
		for(var s=0; s<slides.length; s++){
			// Manipulate slide items
			slides[s].setStyle('position', 'absolute');
			slides[s].setStyle('z-index', slides.length - s);
			slides[s].fade('hide');
			slides[s].set('tween', {'duration':600});
			// Create slide menu items
			var slide_menu_item = new Element('a', {'href':'javascript:void(0);'});
			slide_menu_item.addClass('slide_button');
			var slide_menu_item_inner = new Element('span');
			slide_menu_item_inner.set('html', s+1);
			slide_menu_item.adopt(slide_menu_item_inner);
			if(s==0){
				slide_menu_item.addClass('active');
			}
			slide_menu_item.store('slide', slides[s]);
			slide_menu_item.addEvent('focus', function(){
				$(this).blur();
			});
			slide_menu_item.addEvent('click', function(){
				smallSlide($(this));
			});
			slide_menu.adopt(slide_menu_item);
		}
		// Show first slide item
		slides[0].fade('show');
		// Add slide_menu to content item menu
		slide_menu.inject(citem.getFirst('.content_item_menu'), 'bottom');
	});
	// Execute correction of vertical positions
	correctContents();
});

// Execute small slides
function smallSlide(anchor){
	var as = anchor.getParent().getChildren('a.slide_button');
	as.each(function(a){
		$(a).removeClass('active');
	});
	anchor.addClass('active');
	var slide = anchor.retrieve('slide');
	var slides = slide.getParent().getChildren('img');
	slides.each(function(s){
		$(s).fade('out');
	});
	slide.fade('in');
}

// Automate smooth anchor-scrolling
window.addEvent('domready', function(){
	var mySmoothScroll = new Fx.SmoothScroll();
});

// Repoace .button_portfolio class
window.addEvent('domready', function(){
	$$('a.portfolio_button').each(function(button){
		$(button).removeClass('portfolio_button');
		$(button).addClass('button');
		$(button).addClass('museo_sans_rounded');
		$(button).addClass('icon');
		$(button).addClass('portfolio');
	});
});

// gMap stuff
var gmap_data = false;
function gmap_loadMap(){
	if(!gmap_data || gmap_data == null || gmap_data == undefined) return;
	if(GBrowserIsCompatible()){
		var map = new GMap2($(gmap_data.container));
		var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10,10));
		var topLeft = new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(10,10));
		map.addControl(new GSmallMapControl(), topLeft);
		map.addControl(new GMapTypeControl(), topRight);
		map.setCenter(new GLatLng(gmap_data.lat, gmap_data.lon), gmap_data.zoom);
		var infoTabs = new Array();
		if(gmap_data.marker && gmap_data.marker.length > 0){
			for(var m=0; m<gmap_data.marker.length; m++){
				if(gmap_data.marker[m]['icon']){
					var icon = new GIcon(G_DEFAULT_ICON);
					icon.image = gmap_data.marker[m]['icon_src'];
					icon.iconSize = new GSize(gmap_data.marker[m]['icon_width'], gmap_data.marker[m]['icon_height']);
					icon.iconAnchor = new GPoint(gmap_data.marker[m]['icon_width'] / 2, gmap_data.marker[m]['icon_height']);
					if(gmap_data.marker[m]['icon_hide_shadow']){
						icon.shadow = null;
					}
					var markerOptions = {'icon':icon};
					var marker = new GMarker(new GLatLng(gmap_data.marker[m]['lat'], gmap_data.marker[m]['lon']), markerOptions);
				}else{
					var marker = new GMarker(new GLatLng(gmap_data.marker[m]['lat'], gmap_data.marker[m]['lon']));
				}
				if(gmap_data.marker[m]['bubble']){
					marker.id = m;
					GEvent.addListener(marker, "click", function(){
						var bubble_html = '<h4>' + gmap_data.marker[this.id]['bubbletitle'] + '</h4>';
						if(gmap_data.marker[this.id]['bubbletext']){
							bubble_html += '<p>' + gmap_data.marker[this.id]['bubbletext'] + '</p>';
						}
						this.openInfoWindowHtml(bubble_html);
					});
				}else if(gmap_data.marker[m]['function'] && typeof(gmap_data.marker[m]['function']) == 'function'){
					marker.id = m;
					GEvent.addListener(marker, "click", function(){
						gmap_data.marker[this.id]['function'].attempt(this.id);
					});
				}
				map.addOverlay(marker);
			}
		}
		if(gmap_data.polygons && gmap_data.polygons.length > 0){
			for(var p=0; p<gmap_data.polygons.length; p++){
				var poly = gmap_data.polygons[p];
				if(poly && poly.poly.length > 0){
					var polygon = new GPolygon(poly.poly, poly.poly_properties.bordercolor, poly.poly_properties.bordersize, poly.poly_properties.borderalpha, poly.poly_properties.backgroundcolor, poly.poly_properties.backgroundalpha);
					map.addOverlay(polygon);
				}
			}
		}
	}
	if(navigator.appName != "Microsoft Internet Explorer"){
		window.onunload = function(){
			GUnload();
		}
	}
}

window.addEvent('load', function(){
	if(gmap_data) gmap_loadMap();
});

// Tests for wheel jumping
/*
window.addEvent('mousewheel', function(event){
	event.preventDefault();
	var items = new Array($('wrapper'));
	items.append($$('.content_item'));
	var to = null;
	if(event.wheel < 0){
		for(var i=0; i<items.length; i++){
			if(items[i].getStyle('height').toInt() == 0){
				continue;
			}
			if(items[i].getCoordinates().top.toInt() - window.getScroll().y.toInt() >= 0){
				from = i;
				while(ci = items[from + 1]){
					if(ci.getStyle('height').toInt() > 0){
						to = ci;
						break;
					}
					from++;
				}
				break;
			}
		}
	}else if(event.wheel > 0){
		for(var i=items.length-1; i>=0; i--){
			if(items[i].getStyle('height').toInt() == 0){
				continue;
			}
			if(items[i].getCoordinates().bottom.toInt() - window.getScroll().y.toInt() <= window.getSize().y.toInt()){
				from = i;
				while(ci = items[from - 1]){
					if(ci.getStyle('height').toInt() > 0){
						to = ci;
						break;
					}
					from--;
				}
				break;
			}
		}
	}
	if(to != null){
		stepItem(to);
	}
});
*/



function addSwipeListener(el, listener){
	var startX;
	var dx;
	var direction;

	function cancelTouch(){
		el.removeEventListener('touchmove', onTouchMove);
		el.removeEventListener('touchend', onTouchEnd);
		startX = null;
		startY = null;
		direction = null;
	}

	function onTouchMove(e){
		if(e.touches.length > 1){
			cancelTouch();
		}else{
			dx = e.touches[0].pageX - startX;
			var dy = e.touches[0].pageY - startY;
			if (direction == null){
				direction = dx;
			}else if((direction < 0 && dx > 0) || (direction > 0 && dx < 0) || Math.abs(dy) > 300){
				cancelTouch();
			}
		}
	}

	function onTouchEnd(e){
		cancelTouch();
		if(Math.abs(dx) > 50){
			listener({ target: el, direction: dx > 0 ? 'right' : 'left' });
			dx = 0;
		}
	}

	function onTouchStart(e){
		e.stopPropagation();
		if(e.touches.length == 1){
			startX = e.touches[0].pageX;
			startY = e.touches[0].pageY;
			el.addEventListener('touchmove', onTouchMove, false);
			el.addEventListener('touchend', onTouchEnd, false);
		}
	}

	el.addEventListener('touchstart', onTouchStart, false);
}

