
(function($) {
	// plugin definition
	$.fn.gVideo = function(options) {		
		// build main options before element iteration		
		var defaults = {
			theme: 'simpledark',
			childtheme: ''
		};
		var options = $.extend(defaults, options);
		// iterate and reformat each matched element
		return this.each(function() {
			var $gVideo = $(this);
			
			//create html structure
			//main wrapper
			var $video_wrap = $('<div></div>').addClass('uber-video-player').addClass(options.theme).addClass(options.childtheme);
			//controls wraper
			var $video_controls = $('<div class="uber-video-controls"><a class="uber-video-play" title="Play/Pause"></a><div class="uber-video-seek"></div><div class="uber-video-timer">00:00</div><div class="uber-volume-box"><div class="uber-volume-slider"></div><a class="uber-volume-button" title="Mute/Unmute"></a></div></div>');						
			$gVideo.wrap($video_wrap);
			$gVideo.after($video_controls);
			
			//get new elements
			var $video_container = $gVideo.parent('.uber-video-player');
			var $video_controls = $('.uber-video-controls', $video_container);
			var $uber_play_btn = $('.uber-video-play', $video_container);
			var $uber_video_seek = $('.uber-video-seek', $video_container);
			var $uber_video_timer = $('.uber-video-timer', $video_container);
			var $uber_volume = $('.uber-volume-slider', $video_container);
			var $uber_volume_btn = $('.uber-volume-button', $video_container);
			
			$video_controls.hide(); // keep the controls hidden
						
			var gPlay = function() {
				if($gVideo.attr('paused') == false) {
					$gVideo[0].pause();					
				} else {					
					$gVideo[0].play();				
				}
			};
			
			$uber_play_btn.click(gPlay);
			$gVideo.click(gPlay);
			
			$gVideo.bind('play', function() {
				$uber_play_btn.addClass('uber-paused-button');
			});
			
			$gVideo.bind('pause', function() {
				$uber_play_btn.removeClass('uber-paused-button');
			});
			
			$gVideo.bind('ended', function() {
				$uber_play_btn.removeClass('uber-paused-button');
			});
			
			var seeksliding;			
			var createSeek = function() {
				if($gVideo.attr('readyState')) {
					var video_duration = $gVideo.attr('duration');
					$uber_video_seek.slider({
						value: 0,
						step: 0.01,
						orientation: "horizontal",
						range: "min",
						max: video_duration,
						animate: true,					
						slide: function(){							
							seeksliding = true;
						},
						stop:function(e,ui){
							seeksliding = false;						
							$gVideo.attr("currentTime",ui.value);
						}
					});
					$video_controls.show();					
				} else {
					setTimeout(createSeek, 150);
				}
			};

			createSeek();
		
			var gTimeFormat=function(seconds){
				var m=Math.floor(seconds/60)<10?"0"+Math.floor(seconds/60):Math.floor(seconds/60);
				var s=Math.floor(seconds-(m*60))<10?"0"+Math.floor(seconds-(m*60)):Math.floor(seconds-(m*60));
				return m+":"+s;
			};
			
			var seekUpdate = function() {
				var currenttime = $gVideo.attr('currentTime');
				if(!seeksliding) $uber_video_seek.slider('value', currenttime);
				$uber_video_timer.text(gTimeFormat(currenttime));							
			};
			
			$gVideo.bind('timeupdate', seekUpdate);	
			
			var video_volume = 1;
			$uber_volume.slider({
				value: 1,
				orientation: "vertical",
				range: "min",
				max: 1,
				step: 0.05,
				animate: true,
				slide:function(e,ui){
						$gVideo.attr('muted',false);
						video_volume = ui.value;
						$gVideo.attr('volume',ui.value);
					}
			});
			
			var muteVolume = function() {
				if($gVideo.attr('muted')==true) {
					$gVideo.attr('muted', false);
					$uber_volume.slider('value', video_volume);
					
					$uber_volume_btn.removeClass('uber-volume-mute');					
				} else {
					$gVideo.attr('muted', true);
					$uber_volume.slider('value', '0');
					
					$uber_volume_btn.addClass('uber-volume-mute');
				};
			};
			
			$uber_volume_btn.click(muteVolume);
			
			$gVideo.removeAttr('controls');
			
		});
	};

	//
	// plugin defaults
	//
	$.fn.gVideo.defaults = {		
	};

})(jQuery);
