var effectSpeed = 8;

function IncChoice()
{
	this.currentWorldIndex = 0;
	this.canSelectWord = true;
	this.image1;
	this.image2;
	this.image3;
	this.prefixCookieChosenWords = "niv1_ChosenWords";
	this.prefixCookieChosenVideos = "niv1_ChosenVideos";
	this.prefixCookiePlayedVideos = "niv1_PlayedVideos";
	this.prefixCookieSingleVideo = "niv1_SingleVideo";
	this.prefixCookieHD = "niv1_HD";
	this.prefixCookieSeekTime = "niv1_SeekTime";

	//----------------------------------------------------------------------------------------------------------------------------
	// Words display
	//----------------------------------------------------------------------------------------------------------------------------	

	this.setMosaicImages = function(images1, images2, images3, postFirstImageCallback)
	{
		// Choose 2 image for the effect
		this.image1 = images1[incMosaic.randomInt(0, images1.length)];
		this.image2 = images2[incMosaic.randomInt(0, images2.length)];
		this.image3 = images3[incMosaic.randomInt(0, images3.length)];

	    incMosaic.addImageUrl("static/res/img/" + this.image1);
	    incMosaic.addImageUrl("static/res/img/" + this.image2);
	    incMosaic.addImageUrl("static/res/img/" + this.image3);

	    incMosaic.start("mosaic", effectSpeed, 9, 5, true, true, function() {incChoice.effectIsDone();}, postFirstImageCallback);		
	};

	this.setWordsAndEffect = function(choiceIndex)
	{
		if (choiceIndex == 0) {
			$("#mot1").html("famille");
			$("#mot2").html("amour");
			$("#mot3").html("travail");
			$("#mot4").html("international");
			$("#mot5").html("dieu");
			$("#mot6").html("président");

			// class
			// by default there is the class blue

		} else if (choiceIndex == 1) {
			$("#mot1").html("actif");
			$("#mot2").html("passif");
			$("#mot3").html("corps");
			$("#mot4").html("charité");
			$("#mot5").html("patrie");
			$("#mot6").html("politique");

			// class
			$("#choice").removeClass("blue").addClass("whiteN");

		} else {
			$("#mot1").html("spleen");
			$("#mot2").html("idéal");
			$("#mot3").html("origines");
			$("#mot4").html("peur");
			$("#mot5").html("désir");
			$("#mot6").html("bonheur");

			// class
			$("#choice").removeClass("whiteN").addClass("red");
		}
	};

	this.effectIsDone = function()
	{
		this.canSelectWord = true;

        // Set the list of words and the mosaic effect
		this.setWordsAndEffect(this.currentWorldIndex);

		// Stop the mosaic effect
		incMosaic.UnpauseEffect(false);

		// Fade the text
		$('.big_txt').animate({opacity: 1}, 10000 * 1 / effectSpeed);
	};

	//----------------------------------------------------------------------------------------------------------------------------
	// Selected Words
	//----------------------------------------------------------------------------------------------------------------------------	

	this.selectWord = function(wordIndex)
	{
		if (!this.canSelectWord) {
			// Don't set the word 2 times
			return;
		}

		this.canSelectWord = false;

		// Save the word
		var allWorldIndex = this.currentWorldIndex * 6 + wordIndex;
		this.setCookie(this.prefixCookieChosenWords + this.currentWorldIndex, allWorldIndex);

		++this.currentWorldIndex;

		if (this.currentWorldIndex == 3) {
			// The 3 words get choosen
			location.href = "film-aleatoire-the-end-etc.html";
		} else {
			
			// Start the mosaic effect
			incMosaic.UnpauseEffect(true);

			// Fade the text
			$('.big_txt').animate({opacity: 0}, 20000 * 1 / effectSpeed);
		}
	};

	this.getChoosenWords = function()
	{
		var words = [];
		for (var i = 0; i < 3; ++i) {
			words.push(this.getCookie(this.prefixCookieChosenWords + i));
		}
		return words;
	};

	//----------------------------------------------------------------------------------------------------------------------------
	// Random Chosen Videos
	//----------------------------------------------------------------------------------------------------------------------------	

	this.saveChosenVideos = function(indexs)
	{
		for (var i = 0; i < indexs.length; ++i) {
			this.setCookie(this.prefixCookieChosenVideos + i, indexs[i]);
		}
	};

	this.getChosenVideos = function()
	{
		var indexs = [];
		for (var i = 0; i < 3; ++i) {
			var n = this.getCookie(this.prefixCookieChosenVideos + i);
			if (n !== null) {
				n = parseInt(n);
				if (n != -1) {
					indexs.push(n);
				}				
			}
		}
		return indexs;
	};		

	//----------------------------------------------------------------------------------------------------------------------------
	// All time played videos
	//----------------------------------------------------------------------------------------------------------------------------	

	this.getChoosenVideosFlags = function()
	{
		var var32bits = [];

		// Get previous used videos
		for (var i = 0; i < 3; ++i) {
			var v32 = this.getCookie(this.prefixCookiePlayedVideos + i);
			v32 = v32 === null ? 0 : parseInt(v32);
			var32bits.push(v32);
		}

		return var32bits;
	};

	this.savePlayedVideos = function(indexs, markPlayed)
	{
		// This function used 3 values of 32 bits to records used videos
		// This means we can record the state of 32 * 3 = 96 videos

		// Get previous used videos
		var var32bits = this.getChoosenVideosFlags();

		// Update 32 bits flags var
		var i;
		for (i = 0; i < indexs.length; ++i) {
			var index = indexs[i];
			for (var j = 0; j < var32bits.length; ++j) {
				var indexMax = (j+1)*32;
				if (index < indexMax) {
					var flag = 1 << (index - indexMax + 32);
					if (markPlayed) {
						var32bits[j] = var32bits[j] | flag;
					} else {
						var32bits[j] = var32bits[j] & ~flag;						
					}
					break;
				}
			}			
		}

		// Save updated flags
		for (i = 0; i < 3; ++i) {
			this.setCookie(this.prefixCookiePlayedVideos + i, var32bits[i]);
		}
	};

	this.IsThisVideoWasPlayed = function(var32bits, index)
	{
		for (var j = 0; j < var32bits.length; ++j) {
			var indexMax = (j+1)*32;
			if (index < indexMax) {
				return var32bits[j] & (1 << (index - indexMax + 32));
			}
		}
		return false;
	}

	this.clearAllVideosChoices = function()
	{
		for (i = 0; i < 3; ++i) {
			this.removeCookie(this.prefixCookiePlayedVideos + i);
		}
	};

	//----------------------------------------------------------------------------------------------------------------------------
	// Single video
	//----------------------------------------------------------------------------------------------------------------------------

	this.saveSingleVideo = function(name)
	{
		this.setCookie(this.prefixCookieSingleVideo, name);
	};

	this.getSingleVideo = function()
	{
		return this.getCookie(this.prefixCookieSingleVideo);
	};

	//----------------------------------------------------------------------------------------------------------------------------
	// Hd
	//----------------------------------------------------------------------------------------------------------------------------	

	this.setHD = function(state)
	{
		this.setCookie(this.prefixCookieHD, state); 
	};

	this.getHD = function()
	{
		var hd = this.getCookie(this.prefixCookieHD);
		if (hd == "0") {
			return false;
		}
		return true;
	};

	this.setSeekTime = function(time)
	{
		this.setCookie(this.prefixCookieSeekTime, time); 
	};

	this.getSeekTime = function()
	{
		var time = this.getCookie(this.prefixCookieSeekTime);
		if (time === null) {
			return 0;
		}
		return time;
	};

	//----------------------------------------------------------------------------------------------------------------------------
	// Url share
	//----------------------------------------------------------------------------------------------------------------------------			

	this.createShareUrl = function(index1, index2, index3)
	{
		var index = this.getChosenVideos();
		var code = 	index[0] + index[2]	
		var param = (index[0] << 24) | (index[1] << 16) | (index[2] << 8) | code;
		var urlBase = document.URL;
		urlBase = urlBase.replace("partage-du-film-aleatoire-the-end-etc", "film-aleatoire-the-end-etc");
		var url = urlBase + "?" + param;
		
		return url;
	}

	this.readUrlVideosIndex = function()
	{
		var query = window.location.search.substring(1);
		if (query.length == 0) {
			return [];
		}
		return this.decodeUrlIndex(query);
	};

	this.decodeUrlIndex = function(query)
	{
		var number = parseInt(query);

		var code = number & 255; 
		number >>= 8;
		var index3 = number & 255; 
		number >>= 8;
		var index2 = number & 255; 
		number >>= 8;
		var index1 = number & 255;

		if (code != index1 + index3) {
			return [];
		}

		if (typeof( incPlayer ) != "undefined") {
			var maxVideoIndex = incPlayer.allSequencesData.videos.length - 1;
			if (index1 > maxVideoIndex || index2 > maxVideoIndex || index3 > maxVideoIndex) {
				return [];
			}
		}

		return [index1, index2, index3]; 
	}				

	//----------------------------------------------------------------------------------------------------------------------------
	// Cookies tools
	//----------------------------------------------------------------------------------------------------------------------------		

	this.setCookie = function(name, value)
	{
		this.removeCookie(name);
		$.cookie(name, value, { expires: 7, path: '/' }); 
    };

	this.getCookie = function(name)
	{
		return $.cookie(name);
	};

	this.removeCookie = function(name)
	{
		$.removeCookie(name, { path: '/' });
	};	
}

var incChoice = new IncChoice();