/*
	Requires prototype js library to work!
*/

Event.observe(window, 'load', initContentPackager);

var requestHandler = 'libs/request.ContentPackager.php';
var defaultSceneNum = 1;
var movieData = new Array();
var downloadQueue = new Array();
var itemsQueued = new Array();

function sortNumber(a, b) {	return a - b; }

function initContentPackager() {
	var eMovies = $('movie_select');
	var internalCount = 0;
	for (var count = 2; count < eMovies.options.length; count++) {
		var tmpData = eMovies.options[count].value.split(';');
		movieData[internalCount] = new Object();
		movieData[internalCount].movie_id = tmpData[0];
		movieData[internalCount].movie_dir = tmpData[1];
		movieData[internalCount].studio_id = tmpData[2];
		movieData[internalCount].studio_dir = tmpData[3];
		movieData[internalCount].cat_ids = tmpData[4];
		movieData[internalCount].studio_name = tmpData[5];
		movieData[internalCount].cat_names = tmpData[6];
		movieData[internalCount].movie_name = eMovies.options[count].text;
		internalCount++;
	}
	$('niche_select').selectedIndex = 0;
	$('studio_select').selectedIndex = 0;
	eMovies.selectedIndex = 2;
	loadSceneList(eMovies.options[eMovies.selectedIndex].value.split(';')[0]);
	new Effect.Appear('settings_area');
	loadProgress('done');
}

function updateMovieList() {
	loadProgress(1);
	new Effect.Fade('scene_select_cont');
	var eNiches = $('niche_select');
	var eStudios = $('studio_select');
	var nicheId = eNiches.options[eNiches.selectedIndex].value;
	var studioId = eStudios.options[eStudios.selectedIndex].value;
	if (nicheId != 'spacer' && studioId != 'spacer') rewriteMovieList(nicheId, studioId.split(';')[0]);
	loadProgress('done');
}

function rewriteMovieList(nicheId, studioId) {
	var eMovies = $('movie_select');
	for (var count = 0; count < movieData.length; count++) {
		if (count == 0) {
			removeOptionsAll(eMovies);
			appendOptionLast(eMovies, 'Select a Movie', 's1;spacer', true);
			appendOptionLast(eMovies, '----------------------------------------', 's2;spacer', true);
		}
		var nicheSuccess = false;
		var studioSuccess = false;
		if (nicheId != 'all') {
			var cats = movieData[count].cat_ids.split('+');
			for (var countCats = 0; countCats < cats.length; countCats++) if (cats[countCats] == nicheId) nicheSuccess = true;
		} else nicheSuccess = true;
		if (studioId != 'all') {
			if (movieData[count].studio_id == studioId) studioSuccess = true;
		} else studioSuccess = true;
		if (nicheSuccess && studioSuccess) appendOptionLast(eMovies, movieData[count].movie_name, movieData[count].movie_id+';'+movieData[count].movie_dir+';'+movieData[count].studio_id+';'+movieData[count].studio_dir+';'+movieData[count].cat_ids+';'+movieData[count].studio_name+';'+movieData[count].cat_names, true);
	}
}

function loadSceneList(movieId, aSelection) {
	loadProgress(1);
	new Ajax.Request(requestHandler, {
		method: 'post',
		parameters: {movieId: movieId},
		onSuccess: function(transport) {
			var eSelect = $('scene_select');
			var aResults = transport.responseText.split('|');
			removeOptionsAll(eSelect);
			for (var count = 0; count < aResults.length; count++) {
				var aItem = aResults[count].split(';');
				appendOptionLast(eSelect, aItem[2], aItem[0]+';'+aItem[1], true);
			}
			new Effect.Appear('scene_select_cont');
			if (defaultSceneNum != 1) {
				eSelect.selectedIndex = defaultSceneNum-1;
				defaultSceneNum = 1;
			}
			if (aSelection != 1) displayResultSet(aSelection);
		},
		onFailure: function() { alert('Something went wrong...'); }
	});
}

function selectItem(eImg) {
	var eImgCon = eImg.parentNode;
	if (eImgCon.selected) {
		eImgCon.selected = false;
		eImgCon.className = 'result_image';
		for (var count = 0; count < itemsQueued.length; count++) if (itemsQueued[count] == eImgCon.id) itemsQueued.splice(count, 1); 
	} else if (itemsQueued.length < 4) {
		eImgCon.selected = true;
		eImgCon.className = 'result_image_selected';
		itemsQueued[itemsQueued.length] = eImgCon.id;
	}
	itemsQueued.sort();
	updateSelectedClass();
}

function updateSelectedClass() {
	var itemCount = $('item_count');
	$('num_of_items').innerHTML = itemsQueued.length;
	if (itemsQueued.length > 0 && ($('include_mpeg').checked || $('include_wmv').checked || $('include_flv').checked || $('include_gallery').checked)) {
		var eAddToQueue = $('add_to_queue');
		eAddToQueue.className = 'buildlinkcodes';
		eAddToQueue.disabled = false;
	} else {
		var eAddToQueue = $('add_to_queue');
		eAddToQueue.className = 'disabled';
		eAddToQueue.disabled = true;
	}
	if (itemsQueued.length == 4) {
		itemCount.className = 'item_count_all';
		for (var count = 0; count < itemsQueued.length; count++) {
			var eCell = $(itemsQueued[count]);
			eCell.className = 'result_image_selected_all';
		}
	} else if (itemsQueued.length > 0) {
		itemCount.className = 'item_count_some';
		for (var count = 0; count < itemsQueued.length; count++) {
			var eCell = $(itemsQueued[count]);
			eCell.className = 'result_image_selected_some';
		}
	} else {
		itemCount.className = 'item_count';
	}
}

function resetSelection() {
	$('num_of_items').innerHTML = 0;
	$('item_count').className = 'item_count';
	for (var count = 0; count < itemsQueued.length; count++) {
		var eCell = $(itemsQueued[count]);
		eCell.className = 'result_image';
		eCell.selected = false;
	}
	var eAddToQueue = $('add_to_queue');
	eAddToQueue.className = 'disabled';
	eAddToQueue.disabled = true;
	itemsQueued = new Array();
}

function changeScene(direction, skipCheck) {
	loadProgress(1);
	checkReloadSelection();
	var eQueue = $('queue');
	var eScene = $('scene_select');
	var movieDir = getSelectedValue($('movie_select')).split(';')[1];
	if (direction == 'previous') var sceneDir = eScene.options[eScene.selectedIndex-1].value.split(';')[1];
	else if (direction == 'next') var sceneDir = eScene.options[eScene.selectedIndex+1].value.split(';')[1];
	else var sceneDir = getSelectedValue(eScene).split(';')[1];
	var currentSceneDir = getSelectedValue(eScene).split(';')[1];
	var bFound = false;
	var bNextFound = false;
	var bAnswer = false;
	for (var count = 0; count < eQueue.length; count++) {
		var aQueueItem = eQueue.options[count].value.split('+');
		if (movieDir == aQueueItem[4] && sceneDir == aQueueItem[5]) {
			bNextFound = true;
			eQueue.selectedIndex = count;
			loadQueueItem(eQueue.options[eQueue.selectedIndex]);
			loadResultSet(direction);
			return;
		}
		if (movieDir == aQueueItem[4] && currentSceneDir == aQueueItem[5]) {
			bFound = true;
		}
	}
	if (itemsQueued.length > 0 && !bFound && !skipCheck) bAnswer = confirm('Would you like to add your selection\nto the queue before continuing?');
	if (bAnswer) addToQueue();
	if (!bNextFound) {
		var eScene = $('scene_select');
		switch (direction) {
			case 'previous':
				eScene.selectedIndex = eScene.selectedIndex-1;
				break;
			case 'next':
				eScene.selectedIndex = eScene.selectedIndex+1;
				break;
		}
		displayResultSet();
	}
}

function checkSceneIndex() {
	var eScene = $('scene_select');
	var ePrevious = $('previous_scene');
	var eNext = $('next_scene');
	switch (eScene.selectedIndex) {
		case 0:
			// First scene, disable previous scene button.
			ePrevious.className = 'disabled';
			ePrevious.disabled = true;
			if (eScene.selectedIndex != eScene.options.length-1) {
				eNext.className = 'downloadlinkcodes';
				eNext.disabled = false;
			}
			break;
		case eScene.options.length-1:
			// Last scene, disable next scene button.
			eNext.className = 'disabled';
			eNext.disabled = true;
			if (eScene.selectedIndex != 0) {
				ePrevious.className = 'downloadlinkcodes';
				ePrevious.disabled = false;
			}
			break;
		default:
			eNext.className = 'downloadlinkcodes';
			eNext.disabled = false;
			ePrevious.className = 'downloadlinkcodes';
			ePrevious.disabled = false;
			break;
	}
}

function checkReloadSelection() {
	var eNiche = $('niche_select');
	var eMovie = $('movie_select');
	var fullMovieName = $('results_title').innerHTML;
	if (getSelectedText(eMovie) != fullMovieName.split(' - ')[1]) {
		var foundMovie = false;
		for (var count = 0; count < eMovie.options.length; count++) {
			if (eMovie.options[count].text == fullMovieName.split(' - ')[1]) {
				foundMovie = count;
				break;
			}
		}
		if (!foundMovie) {
			var eStudio = $('studio_select');
			var foundStudio = false;
			for (var count = 0; count < eStudio.options.length; count++) {
				if (eStudio.options[count].text == fullMovieName.split(' - ')[0]) {
					foundStudio = count;
					break;
				}
			}
			eNiche.selectedIndex = 0;
			if (foundStudio) {
				eStudio.selectedIndex = foundStudio;
				var studioId = getSelectedValue(eStudio).split(';')[0];
			} else {
				eStudio.selectedIndex = 0;
				var studioId = 'all';
			}
			rewriteMovieList('all', studioId);
			var foundMovie = false;
			for (var count = 0; count < eMovie.options.length; count++) {
				if (eMovie.options[count].text == fullMovieName.split(' - ')[1]) {
					foundMovie = count; 
					break;
				}
			}
			eMovie.selectedIndex = foundMovie; 
		} else eMovie.selectedIndex = foundMovie;
		defaultSceneNum = fullMovieName.split(' - ')[2].split(' ')[1];
		loadSceneList(getSelectedValue(eMovie).split(';')[0], 1);
	}
}

function addToQueue() {
	loadProgress(1);
	checkReloadSelection();
	var eQueue = $('queue');
	var eMovie = $('movie_select');
	var movie = getSelectedValue(eMovie);
	var studio = getSelectedValue($('studio_select'));
	var scene = getSelectedValue($('scene_select'));
	var aSelected = new Array();
	for (var count = 0; count < itemsQueued.length; count++) aSelected[count] = itemsQueued[count].split('_')[2];
	aSelected.sort(sortNumber);
	for (var count = 0; count < aSelected.length; count++) {
		if (!selectedList) var selectedList = aSelected[count];
		else selectedList = selectedList+', '+aSelected[count];
	}
	var fullMovieName = $('results_title').innerHTML;
	var itemTitle = movie.split(';')[3]+'_'+movie.split(';')[1]+'_'+scene.split(';')[1];
	var itemValue = fullMovieName+'+'+movie.split(';')[6]+'+'+selectedList+'+'+movie.split(';')[3]+'+'+movie.split(';')[1]+'+'+scene.split(';')[1]+'+'+$('include_mpeg').checked+'+'+$('include_wmv').checked+'+'+$('include_flv').checked+'+'+$('include_gallery').checked;
	appendOptionLast(eQueue, itemTitle, itemValue);
	setSelectedIndex(eQueue, itemValue);
	loadQueueItem(eQueue.options[eQueue.selectedIndex]);
	checkDownloadAll();
	checkUpdateType();
	loadProgress('done');
}

function checkDownloadAll() {
	var eDownloadAll = $('download_all');
	if ($('queue').options.length == 0) {
		eDownloadAll.className = 'disabled';
		eDownloadAll.disabled = true;
	} else {
		eDownloadAll.className = 'buildlinkcodes';
		eDownloadAll.disabled = false;
	}
}

function removeFromQueue(index) {
	loadProgress(1);
	var eQueue = $('queue');
	if (!index) removeOptionSelected(eQueue);
	else eQueue.remove(index);
	checkDownloadAll();
	checkUpdateType();
	new Effect.Fade('queue_details');
	loadProgress('done');
}

function loadQueueItem(eItem) {
	new Effect.Appear('queue_details');
	var aDetails = eItem.value.split('+');
	$('queue_movie').innerHTML = aDetails[0].split(' - ')[1];
	$('queue_scene').innerHTML = aDetails[0].split(' - ')[2];
	$('queue_studio').innerHTML = aDetails[0].split(' - ')[0];
	$('queue_categories').innerHTML = aDetails[1];
	$('queue_selected').innerHTML = aDetails[2];
	if (aDetails[6] == 'true') if (!videoTypes) var videoTypes = 'MPEG';
	if (aDetails[7] == 'true') {
		if (!videoTypes) var videoTypes = 'WMV';
		else videoTypes = videoTypes+', WMV';
	}
	if (aDetails[8] == 'true') {
		if (!videoTypes) var videoTypes = 'FLV';
		else videoTypes = videoTypes+', FLV';
	}
	if (aDetails[9] == 'true') {
		if (!videoTypes) var videoTypes = 'Images';
		else videoTypes = videoTypes+', Images';
	}
	$('queue_video').innerHTML = videoTypes;
}

function loadResultSet(direction) {
	loadProgress(1);
	var eQueue = $('queue');
	var eMovie = $('movie_select');
	if (eQueue.selectedIndex >= 0) {
		var bFound = false;
		var aDetails = getSelectedValue(eQueue).split('+');
		$('results_title').innerHTML = aDetails[0];
		checkReloadSelection();
		var movieName = aDetails[0].split(' - ')[1];
		for (var count = 0; count < eMovie.options.length; count++) {
			if (eMovie.options[count].text == movieName) {
				eMovie.selectedIndex = count;
				bFound = true;
				break;
			}
		}
		if (direction) {
			defaultSceneNum = aDetails[0].split(' - ')[2].split(' ')[1];
			loadSceneList(eMovie.options[eMovie.selectedIndex].value.split(';')[0], aDetails[2].split(', '));
		} else {
			defaultSceneNum = getSelectedText($('scene_select'));
			loadSceneList(eMovie.options[eMovie.selectedIndex].value.split(';')[0]);
		}
		loadProgress(1);
		switch (aDetails[6]) {
			case 'true':
				$('include_mpeg').checked = true;
				break;
			case 'false':
				$('include_mpeg').checked = false;
				break;
		}
		switch (aDetails[7]) {
			case 'true':
				$('include_wmv').checked = true;
				break;
			case 'false':
				$('include_wmv').checked = false;
				break;
		}
		switch (aDetails[8]) {
			case 'true':
				$('include_flv').checked = true;
				break;
			case 'false':
				$('include_flv').checked = false;
				break;
		}
		switch (aDetails[9]) {
			case 'true':
				$('include_gallery').checked = true;
				break;
			case 'false':
				$('include_gallery').checked = false;
				break;
		}
	} else {
		displayResultSet();
		loadProgress(1);
	}
	loadProgress('done');
}

function displayResultSet(aSelection) {
	loadProgress(1);
	resetSelection();
	checkSceneIndex();
	checkUpdateType();
	var eMovie = $('movie_select');
	var eScene = $('scene_select');
	var studio = getSelectedValue($('studio_select'));
	var movie = getSelectedValue(eMovie);
	var scene = getSelectedValue(eScene);
	if (studio.split(';')[0] != 'spacer' && movie.split(';')[1] != 'spacer' && scene.split(';')[1] != 'spacer') {
		$('results_title').innerHTML = getSelectedValue($('movie_select')).split(';')[5]+' - '+eMovie.options[eMovie.selectedIndex].text+' - Scene '+eScene.options[eScene.selectedIndex].text;
		new Effect.Appear('results_area');
		new Effect.Appear('download_queue');
		var eSelect = $('results');
		var dataPath = script_host+img_pre_path+movie.split(';')[3]+'/'+movie.split(';')[1]+'/'+scene.split(';')[1]+'/';
		for (var count = 1; count <= 12; count++) {
			if (count < 10) var num = '0'+count;
			else var num = count;
			var filename = movie.split(';')[1]+'_'+scene.split(';')[1]+'_120x90_'+num+'.jpg';
			if (document.images) {
				var eImg = new Image(imagesSize.tWidth, imagesSize.tHeight);
				eImg.src = dataPath+filename;
				var eLoc = $('results_image_'+count);
				if (eLoc.hasChildNodes()) eLoc.removeChild(eLoc.firstChild);
				eLoc.appendChild(eImg);
			}
		}
	}
	if (aSelection) for (var count = 0; count < aSelection.length; count++) selectItem($('results_image_'+aSelection[count]).firstChild);
	loadProgress('done');
}

function checkUpdateType() {
	var finBtn = $('add_to_queue');
	var eQueue = $('queue');
	var movieDir = getSelectedValue($('movie_select')).split(';')[1];
	var sceneDir = getSelectedValue($('scene_select')).split(';')[1];
	var found = false;
	for (var count = 0; count < eQueue.length; count++) {
		var aQueueItem = eQueue.options[count].value.split('+');
		if (movieDir == aQueueItem[4] && sceneDir == aQueueItem[5]) {
			found = count;
			break;
		}
	}
	if (found == parseInt(found)) {
		finBtn.value = 'Re-Add to Download Queue';
		finBtn.onclick = function() { removeFromQueue(found); addToQueue(); };
	} else {
		finBtn.value = 'Add to Download Queue';
		finBtn.onclick = function() { addToQueue(); };
	}
}

function downloadAll() {
	loadProgress(1);
	new Effect.Appear('downloading');
	var eQueue = $('queue');
	for (var count = 0; count < eQueue.options.length; count++) {
		if (!count) var fileData = eQueue.options[count].value;
		else fileData = fileData+'|'+eQueue.options[count].value;
	}
	new Ajax.Request(requestHandler, {
		method: 'post',
		parameters: { fileData: fileData },
		onSuccess: function(transport) {
			$('link').href = transport.responseText;
			new Effect.Fade('queue_details', {afterFinish: function() { new Effect.Appear('download_link'); new Effect.Fade('downloading'); loadProgress('done'); }});
		},
		onFailure: function() { alert('Something went wrong...'); }
	});
}

function hideDownloadLink() {
	new Effect.Fade('download_link');
}

function removeAllQueueItems() {
	loadProgress(1);
	var eQueue = $('queue');
	var downloadQueue = new Array();
	removeOptionsAll($('queue'));
	new Effect.Fade('queue_details', {afterFinish: function() { loadProgress('done'); }});
}
