﻿(function (GSD, $) {
	var state = {
		PLAYING: 'PLAYING',
		PAUSED: 'PAUSED',
		STOPPED: 'IDLE'
	},
    type = {
    	VIDEOX: 'type-video-x',
    	VIDEOY: 'type-video-y',
    	EXTENSION: 'mp4'
    },
    productNodeIds = ['#ProductLeft', '#ProductDetailImage', '#ProductDetailsContainer', '#ProductMediaButtons'],
    productNodes,
	// jwPlayer video settings
    settings = {
    	streamingUrl: '',
    	jwPlayer: {
    		flashplayer: '/ui/flash/jwplayer/player.swf',
    		skin: '/ui/flash/jwplayer/skins/glow/glow.zip',
    		wmode: 'opaque',
    		autostart: true,
    		stretching: "exactfit",
			height: 400,
			repeat: 'always',
			plugins: {
			  "gapro-2": {
				"trackstarts": true,
				"trackpercentage": false,
				"trackseconds": false
			  }
			}
    	}
    },

    getVideoFromNodeUrl = function (el) {
    	var src = el.find('img').attr('src');
    	if (!src) {
    		return '';
    	}

    	var url = new URI(src),
            dir = url.directory(),
            filename = url.filename();

    	return dir + '/' + new URI(filename).suffix(type.EXTENSION);
    },

    getVideoType = function (el) {
    	if (el.hasClass(type.VIDEOX)) {
    		return type.VIDEOX;
    	}

    	return type.VIDEOY;
    },

    displayOptions = {},
    productVideoContainer,
    mainimagewrap,
    player;

	GSD.productVideo = {

		isPlaying: function () {
			return player && player.getState() === state.PLAYING;
		},

		isPaused: function () {
			return player && player.getState() === state.PAUSED;
		},

		isStopped: function () {
			return player && player.getState() === state.STOPPED;
		},

		isVideoNode: function (node) {
			var parent = node.parent();
			return parent.hasClass(type.VIDEOX) || parent.hasClass(type.VIDEOY);
		},

		// returns true if the player is visible (active)
		isActive: function () {
			return productVideoContainer && productVideoContainer.is(':visible');
		},

		close: function () {
			productVideoContainer.css({ display: 'none' });
			productNodes.add(mainimagewrap).removeClass("invisible");

			$.publish('/gsd/modal/video/close');
		},

		open: function (node, jwSettings) {
			$.extend(settings.jwPlayer, jwSettings);

			var parentNode = node.parent(),
                videoType = getVideoType(parentNode),
                displaySettings = displayOptions[getVideoType(parentNode)];

			displaySettings.toggle();

			productVideoContainer.attr({ 'class': videoType }).css({ display: 'block' });

			$.extend(settings.jwPlayer, {
				width: displaySettings.width,
				file: settings.streamingUrl + getVideoFromNodeUrl(parentNode)
			});

			player = jwplayer('productvideo').setup(settings.jwPlayer);
		},

		init: function (options) {
			$.extend(settings, options);

			settings.jwPlayer.autostart = !$('body').hasClass('ios');

			productNodes = $(productNodeIds.join(','));
			productVideoContainer = $('#productvideocontainer');
			mainimagewrap = $('#mainimage_wrap');

			displayOptions[type.VIDEOX] = {
				width: 700,
				container: mainimagewrap,
				toggle: function () {
					this.container.addClass("invisible");
					productNodes.addClass("invisible");
				}
			};

			displayOptions[type.VIDEOY] = {
				width: 284,
				container: productNodes.add(mainimagewrap),
				toggle: function () {
					this.container.addClass("invisible");
					productNodes.removeClass("invisible");
				}
			};
		}
	};

	$.subscribe('/gsd/modal/product/init', function (options) {
		GSD.productVideo.init(options);
	});

	$(document).ready(function () {
		$('#closeVideo').live('click', function () {
			GSD.productVideo.close(true);
		});
	});

})(window.GSD || {}, window.jQuery);
