var JSESSIONID = "JSESSIONID";
var FILE_SUBMIT_PAGE_OFFSET=2;
var FILE_PROXY_CLASS_NAME = "fileProxy";
var FILE_PROXY_INPUT_NAME = "fileText";
var FILE_PROXY_BUTTON_ID = "fileButton";
var SWFU_MOVIE_NAME_PREFIX = "SWFUpload_";
var barVisible = false;
var barWidth = 183;
var barContainer = $('progresscontainer');
var barLine = $('progressline');
var barPercent = $('progresspercent');
var uploadSuccessCount = 0;
var filesQueued = 0;
var action;
var sessionId;
var cookieHash;
var form;
var files;
var textFileInputProxies;
var fileInputs;
var fileIds;
var submitted = false;
var isDebug=false;

window.onload = function ()  {
	action = window.location.pathname;

	form = $('contestForm');
	fileInputs = form.getInputs("file");
	
	files = new Array(fileInputs.length);
	fileIds = new Array(fileInputs.length);
	textFileInputProxies = new Array();
}

function formtest(someform) {
	 if(formSubmit(someform)) {
	 	someform.submit();
	 }
}
function formSubmit() { 
	if(submitted) return false;
	submitted = true;
	
	//load working.gif
	$('submitBtn').hide();
	$('working').show();
	
	var formIsValid = formAjaxSubmit();
	if(!formIsValid) {
		form['submitType'].value=13;
		// disable if form validation failed
		for(var i = 0; i < fileInputs.length; i++)
			form['file['+i+'].file'].disabled=true;
		return true;
	}
	
	if(isSwfuMode() && files[0].getFile(0)) { 
		for(var i = 0; i < files.length; i++) {
			files[i].startUpload(fileIds[i]);
		}
		return false;
	}
	
	return true;
}

function isSwfuMode() {
	return false;
	//return fileInputs.first() && fileInputs.first().value.blank();
}

function formAjaxSubmit() {
	var formIsValid = false;
	
	var nonFileInputs = new Hash();
	var serializedForm = Form.serialize(form, true);
	if(form.isSwfuMode) {
		serializedForm["submitType"] = 101;
	}
	else {
		serializedForm["submitType"] = 11;
	}
	nonFileInputs.update(serializedForm);

	for(var i = 0; i < fileInputs.length; i++) {
		if(isSwfuMode()) {
			nonFileInputs.set(textFileInputProxies[i].name, textFileInputProxies[i].value);
		}
		else {
			nonFileInputs.unset(fileInputs[i].name);
			nonFileInputs.set(FILE_PROXY_INPUT_NAME+"["+i+"]", fileInputs[i].value);
		}
	}
	
	new Ajax.Request(action, 
		{
			parameters : nonFileInputs,
			asynchronous : false,
			onSuccess : function(transport) {
				formIsValid = true;
			},
			
			onFailure : function(transport) {
			}
		}
	);
	
	return formIsValid;
}

function createSwfu(index, fileInput, submitValue) {
	if(!submitValue) var submitValue = "Browse";

	var settings_object = 
	{
		upload_url : action,
		post_params : { "fileIndex" : index+"", "submitType" : 102 },
		flash_url : ctx+"_flash/swfupload.swf", 
		file_size_limit : fileDefinitions[index].maxByte,
		file_types : fileDefinitions[index].extensions,
		file_upload_limit : "0",
		file_queue_limit : "1",
		flash_width : "1px", 
		flash_height : "1px", 
		flash_color : "#FFFFFF",
		swfupload_loaded_handler : flashReadyHandler,
		
		// Button settings
		button_image_url : root+'_images/submission/browse_btn_clear.png' ,
		button_text : "<span class='whiteText'>" + submitValue + "</span>",
		button_text_style : ".whiteText {color: #FFFFFF; font-family:Arial,Helvetica,sans-serif; font-size:11px;display:block; width:61px; text-align:center; text-transform:lowercase;}", 
		button_placeholder_id : "spanButtonPlaceHolder"+index,
		button_width: 90,
		button_height: 30,
		button_window_mode : SWFUpload.WINDOW_MODE.TRANSPARENT,
		button_text_left_padding : buttonTextLeftPadding,
		button_text_top_padding : 6,
		debug : isDebug,
		
		file_dialog_start_handler : fileDialogStart,
		file_dialog_complete_handler : fileDialogComplete,
		file_queued_handler : fileQueuedEventHandler,
		file_queue_error_handler : fileQueueErrorEventHandler,
		
		upload_progress_handler : uploadProgressEventHandler,
		upload_start_handler : uploadStartEventHandler, 
		upload_success_handler : uploadSuccessEventHandler,
		//upload_complete_handler : uploadCompleteEventHandler,
		upload_error_handler : uploadErrorEventHandler
	};
	files[index] = new SWFUpload(settings_object);
	var parent = fileInput.parentNode;
	var fileInputProxyText = new Element("input", {"class":FILE_PROXY_CLASS_NAME, "type":"text" , "disabled":"true", "name":FILE_PROXY_INPUT_NAME+"["+index+"]", "id":"fileText["+index+"]", "size":"34"});

	fileInputProxyText.hide();
	parent.insertBefore(fileInputProxyText, fileInput);
	textFileInputProxies.push(fileInputProxyText);
}
var flashReadyHandler = function () {
	textFileInputProxies.each(function(input) { input.show() });
	fileInputs.each(function(input) { input.disable=true; input.hide() });
}
var uploadStartEventHandler = function (file) 
{
	return true;
};

var uploadSuccessEventHandler = function (file, server_data)
{
  	if(++uploadSuccessCount == filesQueued) {
		form['submitType'].value=103;
		form.submit();
	} else {
		files[uploadSuccessCount].startUpload(fileIds[uploadSuccessCount]);
	}
}

var uploadErrorEventHandler = function (file, error_code, message) {
	if(error_code != -280) alert('upload error on file ' + file.id + " with message: " + error_code + " : " + message);
};

var uploadProgressEventHandler = function (file, bytes_complete, total_bytes)
{
	if (barVisible == false) {
		barVisible = true;
		barContainer.style.display="block";		
	}	
	barPercent.innerHTML = Math.round(100*bytes_complete/total_bytes) + '%';	
	barLine.style.width = Math.round(barWidth*bytes_complete/total_bytes) + 'px';			
}

function fileDialogStart() {
	var swfuMovieNamePrefixLength = SWFU_MOVIE_NAME_PREFIX.length;
	var fileIndex = this.movieName.substring(swfuMovieNamePrefixLength);
	var fileText = $(FILE_PROXY_INPUT_NAME+"["+fileIndex+"]");
	
	if(fileText.value != '') {
		filesQueued--;
		fileText.value='';
	}
	
	this.cancelUpload();
}

function fileDialogComplete(filesSelected, filesQueued, totalInQueue) {}

function fileQueuedEventHandler (file)
{
	var index = file.id.substring(file.id.indexOf('_')+1,file.id.lastIndexOf('_'));
	var fileText = $(FILE_PROXY_INPUT_NAME+"["+index+"]");

	fileText.value=file.name;
	fileIds[index] = file.id;
	filesQueued++;
}

var fileQueueErrorEventHandler = function (file, error_code, message)
{
	qns = SWFUpload.QUEUE_ERROR;
	switch(error_code)
	{
		case qns.FILE_EXCEEDS_SIZE_LIMIT:
			alert(errorFileSizeExceeded);
			break;
		case qns.ZERO_BYTE_FILE:
			alert(errorFileSizeZero);
			break;
		case qns.INVALID_FILETYPE:
			alert(errorFileType);
			break;
		default:
			alert(errorFileUnknown);
			break;
	}
}

