var slideshow = null;

var slideshow_config = {
	'thumbnails': false, 
	'medianame_classes': ['proxima']
};

window.addEvent('load', function(){
	if($('slideshow_container') == null || $('slideshow_prev') == null || $('slideshow_next') == null || slideshow == null || slideshow.slides.length < 2){
		return;
	}
	$('slideshow_next').addEvent('click', function(){slideshow_next();});
	$('slideshow_prev').addEvent('click', function(){slideshow_prev();});
	slideshow_init();
});

function slideshow_init(){
	var centerview = false;
	var uri = new URI(window.location.href);
	var fragment = uri.get('fragment');
	if(fragment != null && fragment.length > 0){
		if(fragment.substring(0,6) == 'slide_'){
			slideshow.slideindex = parseInt(fragment.substring(6), 10);
			centerview = true;
		}
	}
	switch(slideshow.slides[slideshow.slideindex].type){
		case 'image':
		case 'movie':
		case 'leafs':
			slideshow_show(centerview);
			break;
		default:
			alert('Slidetype not supported');
			break;
	}
	if(slideshow_config.thumbnails) slideshow_findThumbnails();
}

function slideshow_next(){
	if(slideshow.slides.length < 2) return;
	slideshow.slideindex = (slideshow.slideindex < slideshow.slides.length-1) ? slideshow.slideindex + 1 : 0;
	slideshow_show(true);
}

function slideshow_prev(){
	if(slideshow.slides.length < 2) return;
	slideshow.slideindex = (slideshow.slideindex > 0) ? slideshow.slideindex - 1 : slideshow.slides.length - 1;
	slideshow_show(true);
}

function slideshow_to(index){
	if(slideshow.slideindex == index) return;
	slideshow.slideindex = parseInt(index, 10);
	slideshow_show(true);
}

function slideshow_show(centerview){
	switch(slideshow.slides[slideshow.slideindex].type){
		case 'image':
		case 'movie':
		case 'leafs':
			if($('slideshow_movieplayer_swf') != null) $('slideshow_container').empty();
			if($('slideshow_leafs_container') != null) $('slideshow_leafs_container').destroy();
			if($('slideshow_overlay') != null) $('slideshow_overlay').setStyle('display', 'none');
			var fadeout = new Fx.Tween($('slideshow_container'));
			fadeout.onComplete = function(){
				var image = $('slideshow_container').getFirst('img');
				var new_image = new Element('img', {
					'class': 'media_item_img', 
					'alt': slideshow.slides[slideshow.slideindex].name
				});
				new_image.addEvent('load', function(){
					var resize = new Fx.Tween($('slideshow_container'));
					resize.onComplete = function(){
						$('slideshow_container').fade('in');
						if(centerview) slideshow_center();
						slideshow_setMedianame();
						if(slideshow_config.onChange) slideshow_config.onChange();
					}
					resize.start('height', this.getStyle('height').toInt());
					if(slideshow_config.thumbnails) slideshow_highlightThumbnails();
					slideshow_setUrl();
				});
				if(Browser.Engine.trident){
					var img_uri = slideshow.slidepath + slideshow.fullview + slideshow.slides[slideshow.slideindex].file + '?rand=' + Math.random();
				}else{
					var img_uri = slideshow.slidepath + slideshow.fullview + slideshow.slides[slideshow.slideindex].file;
				}
				new_image.setProperty('src', img_uri);
				if($('slideshow_container').getFirst('img') == null){
					$('slideshow_container').adopt(new_image);
				}else{
					new_image.replaces(image);
				}
			}
			fadeout.start('opacity', 0);
			break;
		default:
			alert('Slidetype not supported');
			break;
	}
	slideshow_hideMedianame();
}

function slideshow_highlightThumbnails(){
	var highlights = $$('div.media_item_info.link_active');
	highlights.destroy();
	var thumbnail_path = slideshow.slidepath + slideshow.thumbnails + slideshow.slides[slideshow.slideindex].file;
	var thumbnails = $$('img[src=' + thumbnail_path + ']');
	var highlighter = new Element('div');
	highlighter.addClass('media_item_info');
	highlighter.addClass('link_active');
	for(var t=0; t<thumbnails.length; t++){
		var highclone = highlighter.clone();
		if(is_evil_msie()){
			highclone.setStyle('width', thumbnails[t].getParent().getStyle('width').toInt() - 26);
			highclone.setStyle('height', thumbnails[t].getParent().getStyle('height').toInt() - 26);
		}
		highclone.inject(thumbnails[t], 'after');
	}
}

function slideshow_findThumbnails(){
	for(var s=0; s<slideshow.slides.length; s++){
		var thumbnails = $$('img[src=' + slideshow.slidepath + slideshow.thumbnails + slideshow.slides[s].file + ']');
		for(var t=0; t<thumbnails.length; t++){
			if(thumbnails[t].getProperty('rel') != null){
				thumbnails[t].removeProperty('rel');
			}
			thumbnails[t].setProperty('rel', s);
			thumbnails[t].addEvent('click', function(){
				slideshow_to(this.getProperty('rel'));
			});
		}
	}
}

function slideshow_center(){
	var position = $('slideshow_container').getCoordinates();
	var winSize = window.getSize();
	var new_scroll = Math.round(position.top.toInt() + position.height.toInt() / 2 - winSize.y.toInt() / 2);
	new Fx.Scroll(window).start(0, new_scroll);
}

function slideshow_setMedianame(){
	if($('slideshow_medianame') == null) return;
	var new_p = new Element('p');
	if(slideshow_config.medianame_classes && slideshow_config.medianame_classes.length > 0){
		for(var c=0; c<slideshow_config.medianame_classes.length; c++){
			new_p.addClass(slideshow_config.medianame_classes[c]);
		}
	}
	new_p.appendText(slideshow.slides[slideshow.slideindex].name);
	if($('slideshow_medianame').getFirst('p') == null){
		$('slideshow_medianame').adopt(new_p);
	}else{
		new_p.replaces($('slideshow_medianame').getFirst('p'));
	}
}

function slideshow_hideMedianame(){
	if($('slideshow_medianame') == null || $('slideshow_medianame').getFirst('p') == null) return;
	$('slideshow_medianame').getFirst('p').destroy();
}

function slideshow_setUrl(){
	var uri = new URI(window.location.href);
	uri.set('fragment', 'slide_' + String(slideshow.slideindex));
	uri.go();
}

/* EXTERNAL VIEWS */
function slideshow_renderoverlay(type){
	$('slideshow_overlay').empty();
	switch(type){
		case 'movie':
			var button = new Element('a', {
				'href': 'javascript:void(0);',
				'class': 'slideshow_videobutton',
				'html': '<span>Play movie</span>',
				'styles':{
					'margin-top': (($('slideshow_container').getStyle('height').toInt() - 75) / 2)
				},
				'events':{
					'click': function(){
						$('slideshow_overlay').setStyle('display', 'none');
						slideshow_embedMoviePlayer($('slideshow_container').getStyle('height').toInt());
					},
					'focus': function(){
						this.blur();
					}
				}
			});
			break;
		case 'leafs':
			var button = new Element('a', {
				'href': 'javascript:void(0);',
				'class': 'slideshow_leafsbutton',
				'html': '<span>Open magazine</span>',
				'styles':{
					'margin-top': (($('slideshow_container').getStyle('height').toInt() - 75) / 2)
				},
				'events':{
					'click': function(){
						slideshow_createLeafs();
					},
					'focus': function(){
						this.blur();
					}
				}
			});
			break;
	}
	$('slideshow_overlay').adopt(button);
	$('slideshow_overlay').setStyle('display', 'block');
}

function slideshow_createLeafs(){
	var windim = window.getCoordinates();
	var winscroll = window.getScroll();
	var sdim = $('slideshow_container').getCoordinates(window);
	var leafs_container = new Element('div', {
		'class': 'slideshow_leafs',
		'id': 'slideshow_leafs_container',
		'styles': {
			'display': 'block',
			'position': 'absolute',
			'width': sdim.width,
			'height': sdim.height,
			'left': sdim.left,
			'top': sdim.top,
			'padding': 0,
			'z-index': '100',
			'background-image': 'url(css/assets/slideshow/leafs_overlay_pattern.png)'
		}
	});
	leafs_container.set('opacity', 0);
	var mybody = $$('body');
	mybody[0].adopt(leafs_container);
	var leafs_zoom = new Fx.Morph('slideshow_leafs_container', {duration:500, transition:Fx.Transitions.Sine.easeOut, onComplete:function(){slideshow_embedLeafs();}});
	leafs_zoom.start({
		'width': windim.width.toInt(),
		'height': windim.height.toInt(),
		'left': 0,
		'top': winscroll.y.toInt(),
		'opacity': 1
	});
	window.addEvent('scroll', slideshow_scrollLeafs);
}

function slideshow_scrollLeafs(){
	var winscroll = window.getScroll();
	$('slideshow_leafs_container').setStyle('top', winscroll.y.toInt());
}

function slideshow_embedLeafs(){
	var sdim = $('slideshow_leafs_container').getCoordinates();
	var leafs = new SWFObject("css/assets/mag2web/leafs_ver3.054.swf", "slideshow_leafs_container_swf", String(sdim.width), String(sdim.height), "9", "#000000", "best");
	leafs.addParam("allowScriptAccess", "always");
	leafs.addParam("menu", "false");
	leafs.addParam("wmode", "transparent");
	leafs.addVariable('issuedir', slideshow.slides[slideshow.slideindex].issue);
	leafs.addVariable('languagefile', 'de');
	leafs.addVariable('themefile', 'markenwerk');
	leafs.addVariable('usr', '');
	leafs.addVariable('pass', '');
	leafs.write('slideshow_leafs_container');
}

function closeLeafs(){
	if($('slideshow_leafs_container') == null) return;
	$('slideshow_leafs_container').empty();
	window.removeEvent('scroll', slideshow_scrollLeafs);
	var sdim = $('slideshow_container').getCoordinates(window);
	var leafs_zoom = new Fx.Morph('slideshow_leafs_container', {duration:750, transition:Fx.Transitions.Sine.easeOut, onComplete:function(){slideshow_removeLeafs();}});
	leafs_zoom.start({
		'width': sdim.width.toInt(),
		'height': sdim.height.toInt(),
		'left': sdim.left.toInt(),
		'top': sdim.top.toInt(),
		'opacity': 0
	});

}

function slideshow_removeLeafs(){
	if($('slideshow_leafs_container') == null) return;
	$('slideshow_leafs_container').destroy();
}

function slideshow_embedMoviePlayer(height){
	var player = new SWFObject("css/assets/slideshow/movieplayer.swf", "slideshow_movieplayer_swf", "672", height, "9", "#000000", "best");
	player.addParam("allowScriptAccess", "sameDomain");
	player.addParam("allowFullScreen", "true");
	player.addParam("menu", "false");
	player.addVariable("videosrc", slideshow.slidepath + slideshow.fullview + slideshow.slides[slideshow.slideindex].movie);
	player.write('slideshow_container');
}

function slideshow_sizeMoviePlayer(height){
	if(isNaN(height)) return;
	var resize = new Fx.Tween($('slideshow_container'));
	resize.onComplete = function(){
		slideshow_center();
	}
	resize.start('height', height);
	if(Browser.Engine.trident){
		// MSIE DONT LIKE TWEENING HEIGHT OF OBJECT OR EMBED //
		document.getElementById('slideshow_movieplayer_swf').style.height = String(height) + "px";
	}else{
		var resize_inner = new Fx.Tween($('slideshow_movieplayer_swf'));
		resize_inner.start('height', height);
	}
}
