
// ---------------------------------------------------------------------
// 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,
		infos:false
	};
	
	var _params = {};
	
	var _events = {
		onResultsLoaded:false
	}
	
	var _objArr = [];
	var _cnt = 0;
	var _rollOver = false;
	var _curinfotext = '';
	var _download_link = false;
	
	this.toString = function() {	return '[object zvmgallery]';	};

	this.onResultsLoaded = function ( func ) {
		_events.onResultsLoaded = func;
	}
	
	$(function(){	me.init(); });

	this.init = function () {
		me.register_infolayer( '.info_layer' );
	}
	
	// --------------------------------------------------------------------------
	// 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;
			
			$(div + ' .back_next').fadeIn('fast');
			$(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] );
			if (_params.infolayer.autoHide) me.show_hide_image_infos( true );
		});

		$(div).mouseleave( function () {
			_rollOver = false;
			$(div + ' .back_next').fadeOut('fast');
			if (_params.infolayer.autoHide) me.show_hide_image_infos( false );
		});

		$(div + ' .back_next').hide();
		if (_params.infolayer.autoHide) $(_divs.infos).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 ) {

		if ( !$(div).html() ) return false;
		
		_divs.thumbs = div;
		_objArr = [];
		_cnt = 0;
		_curinfotext = '';
		
		/*
		$( div ).scrollable( { 
			items: '.zvmgallery_items',
			mousewheel: (opt.mousewheel === false ? false : true)		
		}).navigator({
			navi: 'ul.zvmgallery_pagenavi'
		});
		*/
		
		$(div + ', ' + div + ' .zvmgallery_items, ' + div + ' ul.zvmgallery_pagenavi li, ' + div + ' ul.zvmgallery_pagenavi li a' ).unbind();
		
		if ($.fn.scrollable) {
			$( div ).scrollable( { 
				items: '.zvmgallery_items',
				mousewheel: (opt.mousewheel === false ? false : true)		
			}).navigator({
				navi: 'ul.zvmgallery_pagenavi'
			});
		}

		$.each( $(div).find('.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', 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('obj');
			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 );
		me.update_image_info(_objArr[_cnt]);
	}
	
	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();
	}

	// --------------------------------------------------------------------------
	// DIV mir Info-Text
	
	this.register_infolayer = function ( div, opt ) {
		_divs.infos = div;
		var def = {	autoHide: true, autoSize: true };
		_params.infolayer = $.extend( def, opt );
		$(div).find('.text').html('');
	}

	
	this.update_image_info = function ( obj ) {

		if (!_divs.infos) return;
		var txt = $(obj.ref).find('span').html();
		if (!txt) txt = $(obj.ref).find('img').attr('alt');

		if (_curinfotext != txt) {
			_curinfotext = txt;
			
			var single_div = $(_divs.single);		
			var txt_div = $(_divs.infos).find('.text');
	
			if (!txt_div.is(':visible')) {
				txt_div.html( txt );
			} else {

				//window.console.log('hallo');
				txt_div.stop(true,true).fadeOut('fast', function () {
					txt_div.html( txt );
					txt_div.show();
					me.update_image_info_size();

					if (txt_div[0].style.filter && txt_div[0].style.removeAttribute) txt_div[0].style.removeAttribute('filter');

				});
			}
			
			me.update_image_info_size();
			me.show_hide_image_infos( txt != '' && _rollOver );

		}
	}

	this.update_image_info_size = function () {
		var vis = $(_divs.infos).find('.info_inner').is(':visible');
		$(_divs.infos).find('.info_inner').show();
		if (_params.infolayer.autoSize)	{
			$(_divs.infos).css( {width:$(_divs.single).width()} );
			$(_divs.infos).css( {'margin-top':$(_divs.single).height()-$(_divs.infos).height()} );
			if (!vis) $(_divs.infos).find('.info_inner').hide();
		}
	}
	
	this.show_hide_image_infos = function ( show ) {
		if (!_params.infolayer.autoHide) return;
		if (show && !$(_divs.infos).is(':visible') && _curinfotext) {
			me.update_image_info_size();
			$(_divs.infos).stop(true, true).fadeIn('fast');
			$(_divs.infos).find('.info_inner').stop(true,true).show('slide', {direction:'down'}, 500);
		} else if (!show && $(_divs.infos).is(':visible')){
			$(_divs.infos).stop(true, true).fadeOut('fast');
			$(_divs.infos).find('.info_inner').stop(true, true).hide('slide', {direction:'down'}, 500);
		}
	}

	// --------------------------------------------------------------------------
	// 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.length) return;
		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!");
		
		me.hide_flv_player();
		$(_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();
			$(_divs.flvplayer).find('embed, object').remove();
		}
	}

	
	// --------------------------------------------------------------------------
	// Thumbnail-Sammlung

	this.register_gallery = function ( div, opt ) {
	
		var def = { mousewheel: false };
		var opt = $.extend( def, opt);
		
		_divs.gallery = div;
		var sheet = $( div + ' .sheet');
		var cur_sheet = 0;
		
		if (opt.mousewheel) {
			$(div).mousewheel( function ( event, delta ) {
				if (Math.abs(delta) < 10 || $(div + ' .scrollable').is(':animated')) return false;
				//if (Math.abs(delta) < 10) return false;
				move_dir( delta < 0 ? -1 : 1 );
				return false;
			});
		}
		
		function move_dir ( dir ) {
			cur_sheet += dir;
			cur_sheet = Math.max(0, cur_sheet);
			cur_sheet = Math.min(sheet.length-1, cur_sheet);
			move_to_sheet( cur_sheet );
		}

		if ($.fn.swipe) {
			$(div).swipe( {swipe:function (e, dir) {
				move_dir( dir == 'right' ? -1 : 1 );
			}});
		}
		
		if (sheet.length > 0) {
		
			var w = sheet.width() + parseFloat(sheet.css('padding-right'),10)*2 + parseFloat(sheet.css('padding-left'),10);
			sheet.css({'width':w, float:'left', 'padding-right':0});
			var h = sheet.height();
			
			$(div + ' .scrollable').css({width:((w+10)*sheet.length), height:h});
			$(div).css( {width:w, height:h+60, position:'relative'} );
			
			$('ul.zvmgallery_thumbview_pagenavi').each( function () {
				$(this).find('li').each( function (i) {
					$(this).addClass( 'i'+i );
					$(this).data('div', $(sheet[i]) );
					$(this).unbind().click( function () {
						move_to_sheet(i);
						return false;
					});
				});
			});
			
			function move_to_sheet ( num ) {
				cur_sheet = num;
				$(div + ' .scrollable').stop(true,true).animate( {'margin-left':-num*w}, {duration:1000,easing:'easeInOutQuint'} );
				$('ul.zvmgallery_thumbview_pagenavi li').removeClass('active');
				$('li.i'+num).addClass('active');
			}
			
		}
	}
	
	
	// --------------------------------------------------------------------------
	// 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 );
		});
		*/
		
		$(_divs.result_list).stop(true,true).animate({'opacity':0}, {complete: function(){
		
			$.ajax( {
				url:		url, 
				success:	function ( resp ) {
				
					$(_divs.result_list).html($(_divs.result_list, resp).html());
					$('.zvmgallery_thumbview_navi').html($('.zvmgallery_thumbview_navi', resp).html());
								
					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.search) me.register_search_form(_divs.search);
					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();
			});
			
			_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();
	});
};


// ---------------------------------------------------------------------
// MouseWheel

//https://github.com/brandonaaron/jquery-mousewheel/downloads
(function(c){var a=["DOMMouseScroll","mousewheel"];c.event.special.mousewheel={setup:function(){if(this.addEventListener){for(var d=a.length;d;){this.addEventListener(a[--d],b,false)}}else{this.onmousewheel=b}},teardown:function(){if(this.removeEventListener){for(var d=a.length;d;){this.removeEventListener(a[--d],b,false)}}else{this.onmousewheel=null}}};c.fn.extend({mousewheel:function(d){return d?this.bind("mousewheel",d):this.trigger("mousewheel")},unmousewheel:function(d){return this.unbind("mousewheel",d)}});function b(i){var g=i||window.event,f=[].slice.call(arguments,1),j=0,h=true,e=0,d=0;i=c.event.fix(g);i.type="mousewheel";if(i.wheelDelta){j=i.wheelDelta/120}if(i.detail){j=-i.detail/3}d=j;if(g.axis!==undefined&&g.axis===g.HORIZONTAL_AXIS){d=0;e=-1*j}if(g.wheelDeltaY!==undefined){d=g.wheelDeltaY/120}if(g.wheelDeltaX!==undefined){e=-1*g.wheelDeltaX/120}f.unshift(i,j,e,d);return c.event.handle.apply(this,f)}})(jQuery);


// http://plugins.jquery.com/project/touchSwipe
// http://labs.skinkers.com/touchSwipe/
(function($)
{$.fn.swipe=function(options)
{if(!this)return false;var defaults={fingers:1,threshold:75,swipe:null,swipeLeft:null,swipeRight:null,swipeUp:null,swipeDown:null,swipeStatus:null,click:null,triggerOnTouchEnd:true,allowPageScroll:"auto"};var LEFT="left";var RIGHT="right";var UP="up";var DOWN="down";var NONE="none";var HORIZONTAL="horizontal";var VERTICAL="vertical";var AUTO="auto";var PHASE_START="start";var PHASE_MOVE="move";var PHASE_END="end";var PHASE_CANCEL="cancel";var phase="start";if(options.allowPageScroll==undefined&&(options.swipe!=undefined||options.swipeStatus!=undefined))
options.allowPageScroll=NONE;if(options)
$.extend(defaults,options);return this.each(function()
{var $this=$(this);var triggerElementID=null;var fingerCount=0;var start={x:0,y:0};var end={x:0,y:0};var delta={x:0,y:0};function touchStart(event)
{phase=PHASE_START;fingerCount=event.touches.length;distance=0;direction=null;if(fingerCount==defaults.fingers)
{start.x=end.x=event.touches[0].pageX;start.y=end.y=event.touches[0].pageY;if(defaults.swipeStatus)
triggerHandler(event,phase);}
else
{touchCancel(event);}}
function touchMove(event)
{if(phase==PHASE_END||phase==PHASE_CANCEL)
return;end.x=event.touches[0].pageX;end.y=event.touches[0].pageY;direction=caluculateDirection();fingerCount=event.touches.length;phase=PHASE_MOVE
validateDefaultEvent(event,direction);if(fingerCount==defaults.fingers)
{distance=caluculateDistance();if(defaults.swipeStatus)
triggerHandler(event,phase,direction,distance);if(!defaults.triggerOnTouchEnd)
{if(distance>=defaults.threshold)
{phase=PHASE_END;triggerHandler(event,phase);touchCancel(event);}}}
else
{phase=PHASE_CANCEL;triggerHandler(event,phase);touchCancel(event);}}
function touchEnd(event)
{event.preventDefault();distance=caluculateDistance();direction=caluculateDirection();if(defaults.triggerOnTouchEnd)
{phase=PHASE_END;if(fingerCount==defaults.fingers&&end.x!=0)
{if(distance>=defaults.threshold)
{triggerHandler(event,phase);touchCancel(event);}
else
{phase=PHASE_CANCEL;triggerHandler(event,phase);touchCancel(event);}}
else
{phase=PHASE_CANCEL;triggerHandler(event,phase);touchCancel(event);}}
else if(phase==PHASE_MOVE)
{phase=PHASE_CANCEL;triggerHandler(event,phase);touchCancel(event);}}
function touchCancel(event)
{fingerCount=0;start.x=0;start.y=0;end.x=0;end.y=0;delta.x=0;delta.y=0;}
function triggerHandler(event,phase)
{if(defaults.swipeStatus)
defaults.swipeStatus.call($this,event,phase,direction||null,distance||0);if(phase==PHASE_CANCEL)
{if(defaults.click&&fingerCount==1&&(isNaN(distance)||distance==0))
defaults.click.call($this,event,event.target);}
if(phase==PHASE_END)
{if(defaults.swipe)
{defaults.swipe.call($this,event,direction,distance);}
switch(direction)
{case LEFT:if(defaults.swipeLeft)
defaults.swipeLeft.call($this,event,direction,distance);break;case RIGHT:if(defaults.swipeRight)
defaults.swipeRight.call($this,event,direction,distance);break;case UP:if(defaults.swipeUp)
defaults.swipeUp.call($this,event,direction,distance);break;case DOWN:if(defaults.swipeDown)
defaults.swipeDown.call($this,event,direction,distance);break;}}}
function validateDefaultEvent(event,direction)
{if(defaults.allowPageScroll==NONE)
{event.preventDefault();}
else
{var auto=defaults.allowPageScroll==AUTO;switch(direction)
{case LEFT:if((defaults.swipeLeft&&auto)||(!auto&&defaults.allowPageScroll!=HORIZONTAL))
event.preventDefault();break;case RIGHT:if((defaults.swipeRight&&auto)||(!auto&&defaults.allowPageScroll!=HORIZONTAL))
event.preventDefault();break;case UP:if((defaults.swipeUp&&auto)||(!auto&&defaults.allowPageScroll!=VERTICAL))
event.preventDefault();break;case DOWN:if((defaults.swipeDown&&auto)||(!auto&&defaults.allowPageScroll!=VERTICAL))
event.preventDefault();break;}}}
function caluculateDistance()
{return Math.round(Math.sqrt(Math.pow(end.x-start.x,2)+Math.pow(end.y-start.y,2)));}
function caluculateAngle()
{var X=start.x-end.x;var Y=end.y-start.y;var r=Math.atan2(Y,X);var angle=Math.round(r*180/Math.PI);if(angle<0)
angle=360-Math.abs(angle);return angle;}
function caluculateDirection()
{var angle=caluculateAngle();if((angle<=45)&&(angle>=0))
return LEFT;else if((angle<=360)&&(angle>=315))
return LEFT;else if((angle>=135)&&(angle<=225))
return RIGHT;else if((angle>45)&&(angle<135))
return DOWN;else
return UP;}
try
{this.addEventListener("touchstart",touchStart,false);this.addEventListener("touchmove",touchMove,false);this.addEventListener("touchend",touchEnd,false);this.addEventListener("touchcancel",touchCancel,false);}
catch(e)
{}});};})(jQuery);






