
var swfu_redirect_url;
var swfu_error_url;
var prevHeight = "25px";
var mvp_upload_complete = 0;
var swfu_progressbar_width;

function checkFlashVersion () {
	var version = deconcept.SWFObjectUtil.getPlayerVersion();
	// var extVersion = String(version['major']) + String(version['minor']) + String(version['rev']);
	return ( ( version["major"] >= 8 ) ? true : false )
}

function initializeUploader ( config ) {
	media_cid = config.media_cid;
	session_id = config.session_id; 
	file_type_label = config.file_type_label;
	file_extensions = config.file_extensions;
	max_file_size = config.max_file_size;
	is_disabled = config.is_disabled;
	preserved_args = config.preserved_args;
	var args_hash = preserved_args.toQueryParams();
	var params = { 
			media_cid : media_cid, 
	 		sess_id : session_id
		};
	
	
	Object.keys( args_hash ).each(function(key, i) {
		params[key] = args_hash[key];
	});	

	swfu_redirect_url = '/publish/item/' + media_cid + ( preserved_args ? '?' + preserved_args : '' );
	swfu_error_url = '/publish/' + ( preserved_args ? '?' + preserved_args : '' );
	swfu = new SWFUpload({ 
		upload_url : "/publish/upload/flash_upload", 
		file_post_name: 'upload',
		post_params : params,
		flash_url : "/decor/widgets/SWFUpload/v2.2.0/swfupload.swf", 
		file_types : file_extensions,
		file_types_description : file_type_label,
		file_size_limit : max_file_size,
		file_queue_limit : 1,
		prevent_swf_caching : true,
		
		// new button config
		button_placeholder_id : 'mvp_swf_file_chooser',
		button_image_url : '/decor/widgets/SWFUpload/v2.2.0/swfupload_button.png',
		button_width : 100,
		button_height : 25,
		button_action : SWFUpload.BUTTON_ACTION.SELECT_FILE,
		button_disabled : is_disabled,
		
		// Event Handler Settings
		file_queued_handler : fileQueued,
		file_queue_error_handler : fileQueueError,
		file_dialog_complete_handler : fileDialogComplete,
		upload_progress_handler : showProgress,
		upload_error_handler : uploadError,			
		upload_complete_handler : uploadFinished,
		upload_success_handler : uploadSuccess,			
		debug : false
	}); 
}

function fileQueued(file) {
	if ( mvp_upload_disabled ) {
		swfu.setButtonDisabled(true);
		alert("You must agree to the terms of service before you can upload a video.");
		uploadFileCancelled(file.id);
		mvp_upload_complete = 1;
		return;
	} else {
		var listingfiles = $("SWFUploadFileListingFiles");
		if ( ! listingfiles.getElementsByTagName("ul")[0] ) {
			var ul = document.createElement("ul")
			listingfiles.appendChild(ul);
		}
		
		listingfiles = listingfiles.getElementsByTagName("ul")[0];
				
		var li = document.createElement("li");
		li.id = file.id;
		li.className = "SWFUploadFileItem";
		li.innerHTML = '<span id="progressContainer"> <span class="progressBar" id="' + file.id + 'progress"></span> </span> <span id="progressTitle">' + file.name + '</span>';
		listingfiles.appendChild(li);
		
		var buttonArea = $('swf_upload_form');
		// buttonArea.style.visibility = "hidden";
		prevHeight = buttonArea.style.height;
		buttonArea.style.height = "0px";
		
		var progressArea = $('swf_inprogress_bar');
		progressArea.style.display = "block";
		
		var progressBar = $(file.id + "progress");
		swfu_progressbar_width = progressBar.offsetWidth;
	
		// var fileChooser = $("mvp_swf_file_chooser");
		// if ( fileChooser ) {
		// 	fileChooser.style.display = "none";
		// }
		
	}
}
var hasError = false;
function fileDialogComplete(numFiles) {
	if ( !hasError ) {
		clearErrors();
	}
	swfu.startUpload();
}

function uploadFileCancelled(file_id) {
	swfu.cancelUpload(file_id);
	mvp_upload_complete = 1;
	
	var listingfiles = $("SWFUploadFileListingFiles");
	listingfiles.innerHTML = "";
	
	var queueinfo = $("queueinfo");
	if ( ! mvp_upload_disabled ) {
		queueinfo.innerHTML = "Upload cancelled; click browse to choose a different file.";
	}
	
	var buttonArea = $('swf_upload_form');
	buttonArea.style.visibility = "visible";
	buttonArea.style.height = prevHeight;
	
	var progressArea = $('swf_inprogress_bar');
	progressArea.style.display = "none";	
	
	// var fileChooser = $("mvp_swf_file_chooser");
	// if ( fileChooser ) {
	// 	fileChooser.style.display = "inline";
	// }
	return;
}

function startUpload(file) {
	clearErrors();
	
	var queueinfo = $("queueinfo");
	queueinfo.style.fontWeight = "bold";
	queueinfo.innerHTML = "Uploading file...";	
	
	var buttonArea = $('mvp_swf_container');
	prevHeight = buttonArea.style.height;
	buttonArea.style.height = "0px";
	
	// var fileChooser = $("mvp_swf_file_chooser");
	// if ( fileChooser ) {
	// 	fileChooser.style.display = "none";
	// }
	
	var fileUploading = $(file.id);
	fileUploading.className += " fileUploading";
}

function showProgress(file, bytesLoaded, totalBytes) {
	var proportion = bytesLoaded / file.size;
		
	var progressTitle = $('progressTitle');
	if ( progressTitle ) {
		// progressTitle.innerHTML = roundNumber(bytesLoaded/1048576, 1) + " MB " + " of " + roundNumber(file.size/1048576, 1)  + " MB (" + Math.ceil(percent) + "% complete)";
		 progressTitle.innerHTML = Math.floor(proportion * 100) + "% (" + showBytesAsMB(bytesLoaded) + " MB " + " of " + showBytesAsMB(file.size)  + " MB)";
	}
	var progressBar = $(file.id + "progress");
	if ( progressBar ) {
		progressBar.style.background = "#fff url(/decor/live/barbershop_bar.gif) no-repeat -" + Math.floor(214 - ( swfu_progressbar_width - 2 ) * proportion ) + "px -4px";
		// alert( "progress " + swfu_progressbar_width + " / " + Math.floor(proportion * 100) + " / " + Math.floor(214 - ( swfu_progressbar_width - 2 ) * proportion ) + " !" );
	}
}

function showBytesAsMB(bytes) {
	var string = Math.round( bytes * 10 / 1048576 ) + "";
	
	return ( string.substring( 0, string.length - 1 ) || "0" ) + "." + string.substring( string.length - 1 );
}

function uploadFinished(file) {
	if ( ! mvp_upload_complete ) {
		window.location.href = swfu_error_url;
	}
}

function uploadSuccess(file, serverdata) {
	var redirect_url = swfu_redirect_url;
	
	mvp_upload_complete = 1;
	// redirect
	var listingfiles = $("SWFUploadFileListingFiles");
	listingfiles.innerHTML = "";
	var progress = $("progressContainer");
	if ( progress ) {
		progress.style.display = "none";
	}
	
	// provide an alternate, manual link in case redirect fails.
	var queueinfo = $("queueinfo");
	queueinfo.innerHTML = 'File uploaded.  If you are not redirected, please <a href="' + redirect_url + '">click here.</a>';
	window.location.href = redirect_url;
	window.onbeforeunload = function() {
		return;
	}
}

function uploadError(fileObj, errno, message) {
	var listingfiles = $("SWFUploadFileListingFiles");
	listingfiles.innerHTML = "";
	
	var queueinfo = $("queueinfo");
	//queueinfo.innerHTML = "Error " + message;
	
	var buttonArea = $('mvp_swf_container');
	buttonArea.style.height = prevHeight;
	
	// var fileChooser = $("mvp_swf_file_chooser");
	// if ( fileChooser ) {
	// 	fileChooser.style.display = "inline";
	// }

	if ( ! mvp_upload_complete ) {
		window.location.href = swfu_error_url;
	}
}

function fileQueueError(fileObj, errno, message) {
	var listingfiles = $("SWFUploadFileListingFiles");
	listingfiles.innerHTML = "";
	
	var queueinfo = $("queueinfo");
	queueinfo.innerHTML = message;
	
	var buttonArea = $('mvp_swf_container');
	buttonArea.style.height = prevHeight;
	hasError = true;
	
	// var fileChooser = $("mvp_swf_file_chooser");
	// if ( fileChooser ) {
	// 	fileChooser.style.display = "inline";
	// }

	//if ( ! mvp_upload_complete ) {
	//	window.location.href = swfu_error_url;
	//}
}

function clearErrors () {
	$('queueinfo').innerHTML = 'Click the browse button to choose a file.';
	var upload_msg_el = $('upload_msg');
	if ( upload_msg_el ) {
		upload_msg_el.innerHTML = '';
	}
}
