text: /**
   * @description	This module is used for bindings.
   * @copyright	2015 by Markus Kosmal (corrected and fixed work formerly maintained by Tobias Reich)
   */
  
  $(document).ready(function() {
  
  	/* Event Name */
  	var event_name = (mobileBrowser()) ? 'touchend' : 'click';
  
  	/* Disable ContextMenu */
  	$(document).bind('contextmenu', function(e) { e.preventDefault() });
  
  	/* Multiselect */
  	$('#content')	.on('mousedown',	multiselect.show);
  	$(document)		.on('mouseup',		multiselect.getSelection);
  
  	/* Header */
  	$('#button_share').on(event_name, function(e) {
  		if (photo.json.public==1||photo.json.public==2)	contextMenu.sharePhoto(photo.getID(), e);
  		else											photo.setPublic(photo.getID(), e);
  	});
  	$('#button_share_album').on(event_name, function(e) {
  		if (album.json.public==1)	contextMenu.shareAlbum(album.getID(), e);
  		else						album.setPublic(album.getID(), e);
  	});
  	$('#button_signin')			.on(event_name, lychee.loginDialog);
  	$('#button_settings')		.on(event_name, contextMenu.settings);
  	$('#button_info_album')		.on(event_name, view.infobox.show);
  	$('#button_info')			.on(event_name, view.infobox.show);
  	$('#button_more')			.on(event_name, function(e) { contextMenu.photoMore(photo.getID(), e) });
  	$('#button_move')			.on(event_name, function(e) { contextMenu.move([photo.getID()], e) });
  	$('#hostedwith')			.on(event_name, function() { window.open(lychee.website) });
  	$('#button_trash_album')	.on(event_name, function() { album.delete([album.getID()]) });
  	$('#button_trash')			.on(event_name, function() { photo.delete([photo.getID()]) });
  	$('#button_archive')		.on(event_name, function() { album.getArchive(album.getID()) });
  	$('#button_star')			.on(event_name, function() { photo.setStar([photo.getID()]) });
  	$('#button_back_home')		.on(event_name, function() { lychee.goto('') });
  	$('#button_back')			.on(event_name, function() { lychee.goto(album.getID()) });
  
  	/* Search */
  	$('#search').on('keyup click', function() { search.find($(this).val()) });
  
  	/* Clear Search */
  	$('#clearSearch').on(event_name, function () {
  		$('#search').focus();
  		search.reset();
  	});
  
  	/* Image View */
  	lychee.imageview
  		.on(event_name, '.arrow_wrapper.previous',	photo.previous)
  		.on(event_name, '.arrow_wrapper.next',		photo.next);
  
  	/* Infobox */
  	$('#infobox')
  		.on(event_name, '.header a',				view.infobox.hide)
  		.on(event_name, '#edit_title_album',		function() { album.setTitle([album.getID()]) })
  		.on(event_name, '#edit_description_album',	function() { album.setDescription(album.getID()) })
  		.on(event_name, '#edit_title',				function() { photo.setTitle([photo.getID()]) })
  		.on(event_name, '#edit_description',		function() { photo.setDescription(photo.getID()) })
  		.on(event_name, '#edit_tags',				function() { photo.editTags([photo.getID()]) })
  		.on(event_name, '#tags .tag span',			function() { photo.deleteTag(photo.getID(), $(this).data('index')) });
  
  	/* Keyboard */
  	Mousetrap
  		.bind('left',			function() { if (visible.photo()) $('#imageview a#previous').click() })
  		.bind('right',			function() { if (visible.photo()) $('#imageview a#next').click() })
  		.bind(['u', 'ctrl+u'],	function() { $('#upload_files').click() })
  		.bind(['s', 'ctrl+s', 'f', 'ctrl+f'], function(e) {
  			if (visible.photo()) {
  				$('#button_star').click();
  			} else if (visible.albums()) {
  				e.preventDefault();
  				$('#search').focus();
  			}
  		})
  		.bind(['r', 'ctrl+r'], function(e) {
  			e.preventDefault();
  			if (visible.album())		album.setTitle(album.getID());
  			else if (visible.photo())	photo.setTitle([photo.getID()]);
  		})
  		.bind(['d', 'ctrl+d'], function(e) {
  			e.preventDefault();
  			if (visible.photo())		photo.setDescription(photo.getID());
  			else if (visible.album())	album.setDescription(album.getID());
  		})
  		.bind(['t', 'ctrl+t'], function(e) {
  			if (visible.photo()) {
  				e.preventDefault();
  				photo.editTags([photo.getID()]);
  			}
  		})
  		.bind(['i', 'ctrl+i'], function() {
  			if (visible.infobox())				view.infobox.hide();
  			else if (visible.multiselect())		return false;
  			else if (visible.infoboxbutton())	view.infobox.show();
  		})
  		.bind(['command+backspace', 'ctrl+backspace'], function() {
  			if (visible.photo()&&!visible.message())		photo.delete([photo.getID()]);
  			else if (visible.album()&&!visible.message())	album.delete([album.getID()]);
  		})
  		.bind(['command+a', 'ctrl+a'], function() {
  			if (visible.album()&&!visible.message())		multiselect.selectAll();
  			else if (visible.albums()&&!visible.message())	multiselect.selectAll();
  		});
  
  	Mousetrap.bindGlobal('enter', function() {
  		if ($('.message .button.active').length) $('.message .button.active').addClass('pressed').click()
  	});
  
  	Mousetrap.bindGlobal(['esc', 'command+up'], function(e) {
  		e.preventDefault();
  		if (visible.message()&&$('.message .close').length>0)		modal.close();
  		else if (visible.contextMenu())								contextMenu.close();
  		else if (visible.infobox())									view.infobox.hide();
  		else if (visible.photo())									lychee.goto(album.getID());
  		else if (visible.album())									lychee.goto('');
  		else if (visible.albums()&&$('#search').val().length!==0)	search.reset();
  	});
  
  
  	if (mobileBrowser()) {
  
  		$(document)
  
  			/* Fullscreen on mobile */
  			.on('touchend', '#image', function(e) {
  				if (swipe.obj===null||(swipe.offset>=-5&&swipe.offset<=5)) {
  					if (visible.controls())	view.header.hide(e, 0);
  					else					view.header.show();
  				}
  			})
  
  			/* Swipe on mobile */
  			.swipe().on('swipeStart',	function() { if (visible.photo()) swipe.start($('#image')) })
  			.swipe().on('swipeMove',	function(e) { if (visible.photo()) swipe.move(e.swipe) })
  			.swipe().on('swipeEnd',		function(e) { if (visible.photo()) swipe.stop(e.swipe, photo.previous, photo.next) });
  
  	}
  
  	/* Document */
  	$(document)
  
  		/* Login */
  		.on('keyup', '#password', function() { if ($(this).val().length>0) $(this).removeClass('error') })
  
  		/* Header */
  		.on(event_name, '#title.editable', function() {
  			if (visible.photo())	photo.setTitle([photo.getID()]);
  			else					album.setTitle([album.getID()]);
  		})
  
  		/* Navigation */
  		.on('click', '.album', function() { lychee.goto($(this).attr('data-id')) })
  		.on('click', '.photo', function() { lychee.goto(album.getID() + '/' + $(this).attr('data-id')) })
  
  		/* Modal */
  		.on(event_name, '.message .close',			modal.close)
  		.on(event_name, '.message .button:first',	function() { if (modal.fns!==null) modal.fns[0](); if (!visible.signin()) modal.close() })
  		.on(event_name, '.message .button:last',	function() { if (modal.fns!==null) modal.fns[1](); if (!visible.signin()) modal.close() })
  
  		/* Add Dialog */
  		.on(event_name, '.button_add', contextMenu.add)
  
  		/* Context Menu */
  		.on('contextmenu', '.photo',			function(e) { contextMenu.photo(photo.getID(), e) })
  		.on('contextmenu', '.album',			function(e) { contextMenu.album(album.getID(), e) })
  		.on(event_name, '.contextmenu_bg',		contextMenu.close)
  
  		/* Infobox */
  		.on(event_name, '#infobox_overlay', view.infobox.hide)
  
  		/* Upload */
  		.on('change', '#upload_files',				function() { modal.close(); upload.start.local(this.files) })
  		.on(event_name, '.upload_message a.close',	upload.close)
  		.on('dragover',								function(e) { e.preventDefault(); }, false)
  		.on('drop', function(e) {
  
  			e.stopPropagation();
  			e.preventDefault();
  
  			// Close open overlays or views which are correlating with the upload
  			if (visible.photo())		lychee.goto(album.getID());
  			if (visible.contextMenu())	contextMenu.close();
  
  			// Detect if dropped item is a file or a link
  			if (e.originalEvent.dataTransfer.files.length>0)				upload.start.local(e.originalEvent.dataTransfer.files);
  			else if (e.originalEvent.dataTransfer.getData('Text').length>3)	upload.start.url(e.originalEvent.dataTransfer.getData('Text'));
  
  			return true;
  
  		});
  
  	/* Init */
  	lychee.init();
  
  });