
// ---------------------------------------------------------------------
// http://gettopup.com/documentation




// ---------------------------------------------------------------------
// http://flowplayer.org/tools/demos/scrollable/index.html

var zvmgallery = new function () {
	
	var me = this;
	var _divs = {
		thumbs:false,
		single:false,
		search:false,
		result_list:false,
		gallery: false,
		flvplayer: false
	};
	
	var _params = {};
	
	var _events = {
		onResultsLoaded:false
	}
	
	var _objArr = [];
	var _cnt = 0;
	var _rollOver = false;
	var _download_link = false;
	
	this.toString = function() {	return '[object zvmgallery]';	};

	this.onResultsLoaded = function ( func ) {
		_events.onResultsLoaded = func;
	}
	
	// --------------------------------------------------------------------------
	// Grossansicht der Bilder
	
	this.register_single = function ( div ) {
		_divs.single = div;
		
		$(div + ' a.next').click( me.next_image );
		$(div + ' a.prev').click( me.prev_image );
		$(div + ' a.fullscreen').click( me.fullscreen );		
		$(div + ' .single_image').click( me.fullscreen );
		$(div + ' .download a').click( me.download_image );
		$(div + ' .back_next').click( me.fullscreen );
		
		$(div).unbind();
		
		$(div).mouseenter( function () {
			if (_objArr.length == 1) return;
			if (_rollOver) return;
			_rollOver = true;
			me.update_image_info( _objArr[_cnt] );	
			$(div + ' .back_next').fadeIn('fast');
			$(div + ' .info_layer').fadeIn('fast');
			$(div + ' .info_layer .info_inner').stop(true,true).show('slide', {direction:'down'}, 500);
			$(div + ' .back_next .next').stop(true,true).show('slide', {direction:'right'}, 500);
			$(div + ' .back_next .prev').stop(true,true).show('slide', {direction:'left'}, 500);
			me.update_image_info( _objArr[_cnt] );	
		});

		$(div).mouseleave( function () {
			_rollOver = false;
			$(div + ' .back_next').fadeOut('fast');
			$(div + ' .info_layer').fadeOut('fast');
		});

		$(div + ' .back_next').hide();
		$(div + ' .info_layer').hide();
		
		$(_divs.single + ' .single_image img').hide().fadeIn('fast');
	}
	
	this.next_image = function ( e ) {
		_cnt = (_cnt+1)%_objArr.length;
		me.fade_and_swop_single_image( _objArr[_cnt], true );
		e.stopPropagation();
	}
	
	this.prev_image = function ( e ) {
		_cnt--;
		if (_cnt < 0) _cnt = _objArr.length-1;
		me.fade_and_swop_single_image( _objArr[_cnt], true );
		e.stopPropagation();
	}
	
	this.fullscreen = function () {
		if (_objArr[_cnt].flv) return false;
		zvmlightbox.display( _objArr, _cnt );
	}
	
	this.update_navigation_buttons = function () {
		
	}
	
	this.download_image = function () {
		if (!_download_link) _download_link = $(_divs.single + ' .download a').attr('href');
		if (_download_link) {
			$(_divs.single + ' .download a').attr('href', _download_link+'&tx_zvmgallery_pi1[num]='+_cnt);
			return true;
		}
	}
	
	this.show_spinning_wheel = function ( target ) {
		var w = $(target).width();
		var h = Math.max(100, $(target).height());
		$('<div class="wait_sheet"><div class="bg">&nbsp;</div><div class="wheel">&nbsp;</div></div>').prependTo(target);
		$('.wait_sheet').stop(true,true).css( {width:w+'px', height:h+'px', display:'none'} ).fadeIn('fast');
		$('.wait_sheet .wheel').stop(true,true).css( {top:((h-40)/2) + 'px', left:((w-40)/2)+'px', display:'none'} ).fadeIn('fast');
	}
	
	// --------------------------------------------------------------------------
	// Thumbnails

	this.register_thumbs = function ( div, opt ) {
	
		_divs.thumbs = div;
		_objArr = [];
		_cnt = 0;
		
		$( div ).scrollable( { 
			items: '.zvmgallery_items',
			mousewheel: (opt.mousewheel === false ? false : true)		
		}).navigator({
			navi: 'ul.zvmgallery_pagenavi'
		});
		
		$.each( $(div + ' .zvmgallery_items a.zoom'), function (key, ref) {
			var obj = {
						ref: 	ref,
						zoom: 	$(ref).attr('href'),
						img:	$(ref).find('img').attr('src'),
						full:	$(ref).next().attr('href'),
						text:	$(ref).find('span'),
						flv:	$(ref).parent().find('a.flv').attr('href'),
						cnt:	key
					};
					
			$(ref).data( obj );
			
			/*
			var str = "";
			for (var i in obj) str += i + " = " + obj[i] + "\n";
			alert( str );
			//*/
			_objArr.push( obj );
		});
		
		$( div + ' .zvmgallery_items a.zoom'  ).unbind();
		
		$( div + ' .zvmgallery_items a.zoom'  ).click( function() {
			var data = $(this).data();
			me.fade_and_swop_single_image( data );
			me.select_current_thumb();
			return false;
		});
		
		if (_objArr.length == 1) {
			$( div + ' .zvmgallery_items'  ).hide();
			return false;
		}
		me.select_current_thumb();
	}
	
	this.select_current_thumb = function () {
		$(_divs.thumbs + ' .zvmgallery_items a.zoom').stop( true, true );
		$(_divs.thumbs + ' .zvmgallery_items a.zoom').fadeTo( 'fast', 1 );
		$(_objArr[_cnt].ref).fadeTo( 'fast', 0.4 );
	}
	
	this.fade_and_swop_single_image = function ( obj, force ) {
		if (_cnt == obj.cnt && force != true) return;
		_cnt = obj.cnt;		
		if (_divs.single) {
			var img = $(_divs.single + ' .single_image img');
			img.fadeOut('fast', function () {
			
				if (obj.flv) {
				
					// Es ist ein Video!
					me.build_flv_player( obj );
				} else {
				
					// normales Bild
					me.hide_flv_player();
					
					if (img.attr('src') == obj.zoom) img.fadeIn('fast');
					img.attr('src', obj.zoom );
					img.unbind();
					img.load( function () {
						img.fadeIn( 'fast' );
					});
				}
			});
		}
		me.select_current_thumb();
		me.update_image_info( obj );
	}
	
	this.update_image_info = function ( obj ) {

		var txt = $(obj.ref).find('span').html();
		if (!txt) txt = $(obj.ref).find('img').attr('alt');
		
		var single_div = $(_divs.single);
		var info_div = $(_divs.single + ' .info_layer');
		info_div.find('.text').html( txt );
		info_div.css( {width:single_div.width(), 'margin-top':single_div.height()-info_div.height()} );
	}


	// --------------------------------------------------------------------------
	// FLV-Player in jQuery Thumbs
	
	
	this.register_flvplayer = function ( div, opt ) {
		_divs.flvplayer = div;
		var def = {	swf:			'typo3conf/ext/zvmgallery/res/flvplayer/flv_player.swf', 
					skin:			'typo3conf/ext/zvmgallery/res/flvplayer/skin.swf',
					expressInstall: 'typo3conf/ext/zvmgallery/res/flvplayer/expressInstall.swf'
					};
		_params.flvplayer = $.extend( def, opt);
		if (_objArr[0].flv) {
			me.build_flv_player( _objArr[0] );
			$(_divs.single + ' .single_image img').hide();
		}
	}
	
	this.build_flv_player = function ( obj ) {
		
		if (!_divs.flvplayer) alert("FLV-Player DIV nicht in Template gefunden");
		if (!swfobject) alert("SWFObject wurde nicht eingebettet!");
		
		$(_divs.flvplayer).show();
		
		$(_divs.flvplayer).html('<div id="flvplayerdiv">Das Video kann nur mit dem Flash-Player angeschaut werden...</div>');
		var opt = _params.flvplayer;
		
		var flashvars = {
			url_base: 			$('base').attr('href'),
			flv:				obj.flv,
			flv_player_skin:	opt.skin,
			languageID:			0
		};
		
		var params = {
			allowFullScreen: 	'true',
			wmode:				'transparent',
			bgcolor: 			'#323232'
		};
		
		var attributes = { id: "flvplayer", name: "flvplayer" };
		var div = $(_divs.single + ' .single_image');

		swfobject.embedSWF( opt.swf, "flvplayerdiv", $(div).width(), $(div).height(), "9", opt.expressInstall, flashvars, params, attributes);
		
	}
	
	this.hide_flv_player = function () {
		if (_divs.flvplayer) $(_divs.flvplayer).hide();
	}
	
	// --------------------------------------------------------------------------
	// Thumbnail-Sammlung

	this.register_gallery = function ( div, opt ) {
		_divs.gallery = div;
		
		var sheet = $( div + ' .sheet');
		if (sheet.length > 1) {
		
			var h = sheet.height();
			var w = sheet.width();
			sheet.css({'width':w, float:'left'});
			
			$(div + ' .scrollable').css({width:((w+10)*sheet.length), height:h});
			$(div).css( {width:w, height:h+200, position:'relative'} );
			
			$('ul.zvmgallery_thumbview_pagenavi li').each( function (i) {
				$(this).data('div', $(sheet[i]) );
				$(this).unbind().click( function () {
					$(div + ' .scrollable').animate( {'margin-left':-i*w}, {duration:1000,easing:'easeInOutQuint'} );
					$('ul.zvmgallery_thumbview_pagenavi li').removeClass('active');
					$(this).addClass('active');
					return false;
				});
			});
		}
	}
	
	
	// --------------------------------------------------------------------------
	// Such-Formular
	
	this.register_search_form = function ( div ) {
		_divs.search = div;
		$(div + ' .yeartabs li').click( function() {
			$(div + ' .yeartabs li').removeClass('selected');
			$(this).addClass('selected');
			var obj = {from_date: 1, from_month: 1, to_date:31, to_month:12, to_year: $(this).find('a').html()};
			var ref = document.tx_zvmgallery_form;
			for (var i in obj) {
				document.tx_zvmgallery_form['tx_zvmgallery_pi1['+i+']'][ me.find_value_pos_in_form('tx_zvmgallery_form', 'tx_zvmgallery_pi1['+i+']', obj[i] ) ].selected = '1';
			}
			me.form_changed();
			return false;
		});
		$(div + ' select').unbind().change( function(){
			var val = $(this).val();
			// Enthält der Wert einen Slash statt einer ID, dann ist es wahrscheinlich eine URL
			if (val.indexOf('/') > -1 || val.indexOf('?') > -1) {
				if (val.substr(0,4) != 'http') val = $('base').attr('href')+val;
				window.location = val;
				return false;
			}
			
			$(div).find('option').removeAttr('selected');
			//$(div).find('option[value=""]').attr('selected', 'true');
			$(this).find('option[value="'+val+'"]').attr('selected', 'true');
			setTimeout( me.form_changed, 100 );
			return false;
		});
	}
	
	this.find_value_pos_in_form = function ( form, name, val ) {
		var p = -1;
		var ref = document[form][name];
		for (var i = 0; i < ref.length; i++) if (ref[i].value == val) p = i;
		return p;
	}
	
	this.form_changed = function () {
		if (!_divs.result_list) return true;
		var url = me.get_form_url_and_vars();
		url += '&cb='+Math.random()*1000;

		if ($.fn.showPreloader) {
			var iv = setTimeout( function () {
				$( _divs.result_list ).showPreloader({offsetX:-50});
			}, 1500);
		} else {
			me.show_spinning_wheel( _divs.result_list );
		}
		$(_divs.result_list).stop(true,true).animate({'opacity':0}).load(url + ' ' + _divs.result_list, function () {
			
			var el = $(_divs.result_list);
			el.animate({'opacity':1}, {duration:1000, complete:function(){
				var el = $(this)[0];
				if (el.style.filter && el.style.removeAttribute) el.style.removeAttribute('filter');
			}});
			if (_divs.gallery) me.register_gallery(_divs.gallery);
			if (_events.onResultsLoaded) _events.onResultsLoaded();
			if ($.fn.hidePreloader) $(_divs.result_list).hidePreloader();
			if (iv) clearTimeout( iv );
		});
		return false;
	}
	
	this.get_form_url_and_vars = function () {
		var form = $('form.'+_divs.search);
		var url = form.attr('action') + '&' + form.serialize();
		return url;
	}
	
	// --------------------------------------------------------------------------
	// Ergebnis-Liste
	
	this.register_result_list = function ( div ) {
		_divs.result_list = div;
	}
	

};



var zvmlightbox = new function () {

	var me = this;
	var _open = false;
	var _img = false;
	var _img_src_size = {w:0,h:0};
	var _img_div = false;
	var _close_div = false;
	var _navi_div = false;
	var _next_div = false;
	var _back_div = false;
	var _text_div = false;
	var _preloader_div = false;
	var _preloader_balken = false;
	var _objArr = [];
	var _cnt = 0;
	var _loaded = 0;
	
	this.init = function () {
		$('body').append('\
			<div id="zvmlightbox">\
				<div class="zvmlightbox_bg"></div>\
				<div class="zvmlightbox_close"></div>\
				<div class="zvmlightbox_navi">\
					<div class="back"></div>\
					<div class="next"></div>\
				</div>\
				<div class="zvmlightbox_preloader">\
					<div class="balken"></div>\
				</div>\
				<div class="zvmlightbox_info"></div>\
				<div class="zvmlightbox_img">\
					<img src="" />\
				</div>\
			</div>\
			');
		_img = $('.zvmlightbox_img img');
		_img_div = $('.zvmlightbox_img');
		_close_div = $('.zvmlightbox_close');
		_navi_div = $('.zvmlightbox_navi');
		_next_div = $('.zvmlightbox_navi .next');
		_back_div = $('.zvmlightbox_navi .back');
		_preloader_div = $('.zvmlightbox_preloader');
		_preloader_balken = $('.zvmlightbox_preloader .balken');
		_text_div = $('.zvmlightbox_info');

	}
	
	this.open = function () {
		if (_open) return;
		_open = true;
		me.adjust_position();
		$('#zvmlightbox').hide().fadeIn('fast');
		$('.zvmlightbox_bg').unbind().click( me.close );
		_close_div.unbind().click( me.close );
		_next_div.unbind().click( me.next_image );
		_back_div.unbind().click( me.prev_image );
				
		$(window).resize( me.adjust_position );
		$(window).scroll( me.adjust_position );
		
	};
	
	this.close = function () {
		if (!_open) return;
		_open = false;
		$('#zvmlightbox').fadeOut( 'fast', function () {
			$('#zvmlightbox').hide();
			$(window).unbind( 'resize', me.adjust_position );
			$(window).unbind( 'scroll', me.adjust_position );			
			_img.attr('src', '');
			_img_div.hide();
		});
	};
	
	this.adjust_position = function () {
		$('#zvmlightbox').css( {top:$(document).scrollTop() } );
		var w = $(window);
		var f = Math.min( w.height() / _img_src_size.h, w.width() / _img_src_size.w)*0.8;
		if (f > 1) f = 1; 
				
		_img.css( {width:_img_src_size.w*f, height:_img_src_size.h*f} );
		_img_div.css( {top:($(window).height()-_img.height())/2, left:($(window).width()-_img.width())/2 } );
		var o = _img_div.position();
		_close_div.css( {top:o.top-10, left:o.left+_img_div.width()-25} );
		_navi_div.css( {top:o.top+_img_div.height()-50, left:o.left+(_img_div.width()-_navi_div.width())/2 } );
		_text_div.css( {top:o.top+_img_div.height(), left:o.left, width:_img_div.width()} );
		
	};
	
	this.display = function ( objArr, cnt ) {
		_objArr = objArr.full ? [objArr] : objArr;
		_cnt = cnt ? cnt : 0;
		_loaded = 0;
		me.open();
		me.fade_and_swop_image( _objArr[_cnt] );
		if (_objArr.length <= 1) _navi_div.remove();

	};
	
	this.fade_and_swop_image = function ( obj ) {
		_text_div.stop( true, true ).fadeOut('fast');
		_close_div.hide();
		_navi_div.hide();
		_img_div.stop( true, true ).fadeOut('fast', function () {

			_preloader_balken.stop(true, true).css({width:0});
			_preloader_balken.animate({width:_preloader_div.width()}, 5000);
			_preloader_div.stop(true, true).show().fadeIn('fast');
			
			_preloader_div.css( {top:$(window).height()/2, left:($(window).width()-_preloader_div.width())/2} );
			
			_img.css({width:'',height:''}).removeAttr('width').removeAttr('height');
						
			_img.unbind();
			_img.load( function () {
				_loaded++;
				_img_div.stop(true, true).fadeIn( 'fast' );
				_text_div.delay(500).stop(true, true).fadeIn( 'fast' );
				_preloader_div.stop(true, true).hide();
				_img_src_size = {w:_img.width(),h:_img.height()};
				_text_div.html( _objArr[_cnt].text );
				me.adjust_position();
				_close_div.show();
				_navi_div.show();
				if ($.fn.copyProtectImage) _img.copyProtectImage();
			});
			
			_img.attr('src', obj.full );
		});
	};
	
	this.next_image = function () {
		_cnt = (_cnt+1)%_objArr.length;
		me.fade_and_swop_image( _objArr[_cnt] );
	}

	this.prev_image = function () {
		_cnt--;
		if (_cnt < 0) _cnt = _objArr.length-1;
		me.fade_and_swop_image( _objArr[_cnt] );
	}
	
	$(function () {
		me.init();
	});
};









