
// ---------------------------------------------------------------------
// 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
	};
	
	var _objArr = [];
	var _cnt = 0;
	var _rollOver = false;
	var _download_link = false;
	
	this.toString = function() {	return '[object zvmgallery]';	};

	
	// --------------------------------------------------------------------------
	// 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();
		
	}
	
	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 () {
		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'),
						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() {
			me.fade_and_swop_single_image( $(this).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 () {
				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()} );
	}
	
	
	// --------------------------------------------------------------------------
	// Thumbnails

	this.register_gallery = function ( div ) {
		_divs.gallery = div;
		var mc = $(div + ' .item');
		mc.unbind();
		mc.mouseenter( function () {
			$(this).find('.image').stop( true, true );
			$(this).find('.image').fadeTo( 'fast', 0.5 ); 
		});
		mc.mouseleave( function () {	
			$(this).find('.image').stop( true, true );
			$(this).find('.image').fadeTo( 'slow', 1 ); 
		});

	}
	
	
	// --------------------------------------------------------------------------
	// 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;
		});
	}
	
	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 = this.get_form_url_and_vars();
		url += '&cb='+Math.random()*1000;

		this.show_spinning_wheel( _divs.result_list );
		$(_divs.result_list).load(url + ' ' + _divs.result_list);
		return false;
	}
	
	this.get_form_url_and_vars = function () {
		var form = $('form.'+_divs.search);
		var url = $( _divs.search ).attr('action') + '&' + $( _divs.search ).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;
	
	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;
		_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 } );
		_preloader_div.css( {top:o.top+_img_div.height()/2-5, left:o.left+(_img_div.width()-_preloader_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;
		me.open();
		me.fade_and_swop_image( _objArr[_cnt] );
	};
	
	this.fade_and_swop_image = function ( obj ) {
		_text_div.stop( true, true ).fadeOut('fast');
		_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');
			_img.css({width:'',height:''}).removeAttr('width').removeAttr('height');
			
			_img.unbind();
			_img.load( function () {
				_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();
			});
			_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();
	});
};








