/**
 * Defines step forward/back controls for zPlayer.
 * Configuration: {
 *	'key' => 'ACTION',
 *	'key2' => 'ACTION2',
 * };
 * 
 * The current list of ACTIONs is: PLAY, PAUSE, TOGGLEPLAY, TOGGLEMUTE, TOGGLEFULLSCREEN,
 * REMOVEFULLSCREEN, NEXTFRAME & PREVIOUSFRAME, TOGGLEOVERLAY, STOP
 * 
 * The list of potential ACTIONs to add is: SLOWER, FASTER, VOLUMEUP, VOLUMEDOWN
 *
 * NOTE: REMOVEFULLSCREEN removes overlay if fullscreen is disabled.
 * 
 * NOTE: This requires jquery.hotkeys.js from http://github.com/jeresig/jquery.hotkeys
 * 
 * @author Joey Line <joey.line@skiclubz.com>
 */
(function($) {
	zPlayer.prototype.keyboardControls = function() {
		var player = this;
		
		if(!zPlayer.utils.isNull(this.config.keyboardcontrols)) {
			for(var key in this.config.keyboardcontrols) {
				var action = this.config.keyboardcontrols[key];
				
				// if the handler exists
				if(zPlayer.keyboardControls.handlers[action]) {
					zPlayer.utils.log('handler exists!', key, action, zPlayer.keyboardControls);
					$(document).bind('keydown', key, zPlayer.keyboardControls.handlers[action](player, key));
				}
			}
		}
	};
	
	zPlayer.keyboardControls = {
		addTitle: function(player, element, key) {
			if(player.config.keyboardcontrolstooltips) {
				$(player.display.controlbar.elements[element]).attr('title', 'Press [' + key + '] on your keyboard');
			}
		},
		
		handlers: {
			'PLAY': function(player, key) { 
				zPlayer.keyboardControls.addTitle(player, 'playButton', key);
				
				return function(evt) {
					player.domelement.play();
					
					return false;
				};
			},
			'PAUSE': function(player, key) {
				zPlayer.keyboardControls.addTitle(player, 'pauseButton', key);
				
				return function(evt) {
					player.domelement.pause();
					
					return false;
				};
			},
			'STOP': function(player, key) {
				zPlayer.keyboardControls.addTitle(player, 'stopButton', key);
				
				return function(evt) {
					$(player.display.controlbar.elements.stopButton).mouseup();
				};
			},
			'TOGGLEPLAY': function(player, key) {
				zPlayer.keyboardControls.addTitle(player, 'playButton', key);
				zPlayer.keyboardControls.addTitle(player, 'pauseButton', key);
				
				return function(evt) {
					if(player.domelement.paused) {
						player.domelement.play();
					} else {
						player.domelement.pause();
					}
					
					return false;
				};
			},
			'TOGGLEMUTE': function(player, key) {
				zPlayer.keyboardControls.addTitle(player, 'muteButton', key);
				zPlayer.keyboardControls.addTitle(player, 'unmuteButton', key);
				
				return function(evt) {
					if(player.domelement.muted) {
						player.domelement.muted = false;
					} else {
						player.domelement.muted = true;
					}
				};
			},
			'TOGGLEFULLSCREEN': function(player, key) {
				if(player.config.enableFullscreen) {
					zPlayer.keyboardControls.addTitle(player, 'fullscreenButton', key);
					zPlayer.keyboardControls.addTitle(player, 'normalscreenButton', key);
					
					return function(evt) {
						if(player.fullscreen) {
							$(document).trigger('fullscreen.zplayer', [false]);
						} else {
							$(document).trigger('fullscreen.zplayer', [true]);
						}
					};
				} else {
					return function() {};
				}
			},
			'REMOVEFULLSCREEN': function(player, key) {
				if(!player.config.enableFullscreen && !zPlayer.utils.isNull(player.overlay) && typeof player.overlay == 'function') {
					return function(evt) {
						if(!zPlayer.utils.isNull(player.plugins.overlay.control) && zPlayer.overlay.isEnabled())
							player.plugins.overlay.control.change();
					};
				} else {
					return function(evt) {
						if(player.fullscreen) {
							$(document).trigger('fullscreen.zplayer', [false]);
						}
					};
				}
			},
			'NEXTFRAME': function(player, key) {
				zPlayer.keyboardControls.addTitle(player, 'stepForward', key);
				
				return function(evt) {
					var button = $(player.display.controlbar.elements.stepForward);
					if(button) button.click();
				};
			},
			'PREVIOUSFRAME': function(player, key) {
				zPlayer.keyboardControls.addTitle(player, 'stepBack', key);
				
				return function(evt) {
					var button = $(player.display.controlbar.elements.stepBack);
					if(button) button.click();
				};
			},
			'TOGGLEOVERLAY': function(player, key) {
				if(!zPlayer.utils.isNull(player.overlay) && typeof player.overlay == 'function') {
					return function(evt) {
						if(!zPlayer.utils.isNull(player.plugins.overlay.control))
							player.plugins.overlay.control.change();
					};
				} else {
					return function() {};
				};
			}
		}
	};
})(jQuery);

