var iTime = "";	//intial time
var Timeleft = "";	//time left

//minsec created by Daem0nX (03.29.08)
function minsec(time, tempTime) {
var ztime;
	if (time == "m") {
		ztime = Math.floor(tempTime/60);
		if (ztime < 10) {
			ztime = "0" + ztime;	
		}
	} else if (time == "s") {
		ztime = Math.ceil(tempTime % 60);
		if (ztime < 10) {
			ztime = "0" + ztime;	
		}
	} else {
		ztime = "minsec error...";
	}
return ztime;
}

var formChecker = null;
function swfUploadLoaded() {
	var btnSubmit = document.getElementById("btnSubmit");
	
	btnSubmit.onclick = doSubmit;
	btnSubmit.disabled = true;
	
	/*txtLastName.onchange = validateForm;
	txtFirstName.onchange = validateForm;
	txtEducation.onchange = validateForm;
	txtReferences.onchange = validateForm;
	*/
	formChecker = window.setInterval(validateForm, 1000);
	
	validateForm();
}

function validateForm() {
	var isValid = true;
	document.getElementById("btnSubmit").disabled = !isValid;
}

// Called by the submit button to start the upload
function doSubmit(e) {
	if (formChecker != null) {
		clearInterval(formChecker);
		formChecker = null;
	}
	
	e = e || window.event;
	if (e.stopPropagation) {
		e.stopPropagation();
	}
	e.cancelBubble = true;
	
	try {
		swfu.startUpload();
	} catch (ex) {

	}
	return false;
}



function uploadStart(file) {
	try {
		/* I don't want to do any file validation or anything,  I'll just update the UI and
		return true to indicate that the upload should start.
		It's important to update the UI here because in Linux no uploadProgress events are called. The best
		we can do is say we are uploading.
		 */
		 //Capture start time
		var currentTime = new Date();
		iTime = currentTime;

		//Set Timeleft to estimating
		Timeleft = "Estimating...";
				
		var progress = new FileProgress(file, this.customSettings.progress_target);
		progress.setStatus("Uploading...");
		progress.toggleCancel(true, this);
	}
	catch (ex) {}
	
	return true;
}


 // Called by the queue complete handler to submit the form
function uploadDone() {
	try {
		document.uploadform.submit();
	} catch (ex) {
		alert("Error submitting form");
	}
}

function fileDialogStart() {
	var txtFileName = document.getElementById("txtFileName");
	txtFileName.value = "";

	this.cancelUpload();
}



function fileQueueError(file, errorCode, message)  {
	try {
		// Handle this error separately because we don't want to create a FileProgress element for it.
		switch (errorCode) {
		case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:
			alert("You have attempted to queue too many files.\n" + (message === 0 ? "You have reached the upload limit." : "You may select " + (message > 1 ? "up to " + message + " files." : "one file.")));
			return;
		case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
			alert("The file you selected is too big.");
			this.debug("Error Code: File too big, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			return;
		case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
			alert("The file you selected is empty.  Please select another file.");
			this.debug("Error Code: Zero byte file, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			return;
		case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
			alert("The file you choose is not an allowed file type.");
			this.debug("Error Code: Invalid File Type, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			return;
		default:
			alert("An error occurred in the upload. Try again later.");
			this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			return;
		}
	} catch (e) {
	}
}

function fileQueued(file) {
	try {
		var txtFileName = document.getElementById("txtFileName");
		txtFileName.value = file.name;
	} catch (e) {
	}

}
function fileDialogComplete(numFilesSelected, numFilesQueued) {
	validateForm();
}

function uploadProgress(file, bytesLoaded, bytesTotal) {
	try {
		var currentTime = new Date();
		var percent = Math.ceil((bytesLoaded / bytesTotal) * 100);
		
		file.id = "singlefile";	// This makes it so FileProgress only makes a single UI element, instead of one for each file

		var progress = new FileProgress(file, this.customSettings.progress_target);
		progress.setProgress(percent);

		var tempTime = 0;
		//rndfilesize = round file size		
		var rndfilesize = Math.round(((file.size/1024)/1024)*100)/100;
		//uploaded = how much has been uploaded
		var uploaded = Math.round(((bytesLoaded/1024)/1024)*100)/100;
		//uTime = uploadTime (time spent uploading)
		var uTime = (Math.ceil(currentTime-iTime)/1000);
		//uSpeed = uploadSpeed (40 kB/s)
		var uSpeed = Math.floor(Math.round(((bytesLoaded/uTime)/1024)*100)/100);
		
		//tempTime = store time for following functions
		var tempTime = uTime;
		//uploadTime in min:sec
		uTime = minsec("m", tempTime) + ":" + minsec("s", tempTime) + " elapsed";
		//tempTime = reassign val
		tempTime = Math.round(((((bytesTotal-bytesLoaded)/uSpeed)/60)/10)*100)/100;

		if (tempTime != "Infinity") {
			if (tempTime > 0) {
				//if greater than 0
				//Timeleft in min:sec
				Timeleft = minsec("m", tempTime) + ":" + minsec("s", tempTime) + " remain";
			} else {
				Timeleft = "Estimating...";
			}
		} else {
			Timeleft = "Estimating...";
		}
		
		//Variables available
		//uSpeed = the rate of upload (40 kB/s)
		//uploaded = how much of the file has upload in MB
		//rndfilesize = file size in MB
		//uTime = how much time has been spent uploading in min:sec (xx:yy elapsed)
		//Timeleft = how much time is left in min:sec (xx:yy remain)
		progress.setStatus(uploaded + ' of ' + rndfilesize + ' MB at ' + uSpeed + ' KB/sec; ' + Timeleft + ' (' + percent + '%)');
				
	} catch (ex) {
		this.debug(ex);
	}
}


function uploadSuccess(file, serverData) {

	try {
		file.id = "singlefile";	// This makes it so FileProgress only makes a single UI element, instead of one for each file
		var progress = new FileProgress(file, this.customSettings.progress_target);
		var currentTime = new Date()
		progress.setComplete();
		//Calculate upload time
		var cTime = (Math.ceil(currentTime-iTime)/1000);
		var zmin = 0;
		var zsec = 0;
		zmin = Math.floor(cTime/60);
		if (zmin < 10) {
			zmin = "0" + zmin;	
		}
		zsec = Math.ceil(cTime % 60);
		if (zsec < 10) {
			zsec = "0" + zsec;	
		}
		//Show how long the upload took
		progress.setStatus("Completed in " + zmin + ":" + zsec);
		progress.toggleCancel(false);		
		
		if (serverData === " ") {
			this.customSettings.upload_successful = false;
		} else {
			this.customSettings.upload_successful = true;
			document.getElementById("hidFileID").value = serverData;
		}
		
		
	} catch (e) {
	}
}


function uploadComplete(file) {
	try {
		if (this.customSettings.upload_successful) {
			this.setButtonDisabled(true);
			uploadDone();
		} else {
			file.id = "singlefile";	// This makes it so FileProgress only makes a single UI element, instead of one for each file
			var progress = new FileProgress(file, this.customSettings.progress_target);
			progress.setError();
			progress.setStatus("File rejected");
			progress.toggleCancel(false);
			
			var txtFileName = document.getElementById("txtFileName");
			txtFileName.value = "";
			validateForm();

			alert("There was a problem with the upload.\nThe server did not accept it.");
		}
	} catch (e) {
	}
}

function uploadError(file, errorCode, message) {
	try {
		
		if (errorCode === SWFUpload.UPLOAD_ERROR.FILE_CANCELLED) {
			// Don't show cancelled error boxes
			return;
		}
		
		var txtFileName = document.getElementById("txtFileName");
		txtFileName.value = "";
		validateForm();
		
		// Handle this error separately because we don't want to create a FileProgress element for it.
		switch (errorCode) {
		case SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL:
			alert("There was a configuration error.  You will not be able to upload a resume at this time.");
			this.debug("Error Code: No backend file, File name: " + file.name + ", Message: " + message);
			return;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
			alert("You may only upload 1 file.");
			this.debug("Error Code: Upload Limit Exceeded, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			return;
		case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
		case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
			break;
		default:
			alert("An error occurred in the upload. Try again later.");
			this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			return;
		}

		file.id = "singlefile";	// This makes it so FileProgress only makes a single UI element, instead of one for each file
		var progress = new FileProgress(file, this.customSettings.progress_target);
		progress.setError();
		progress.toggleCancel(false);

		switch (errorCode) {
		case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
			progress.setStatus("Upload Error");
			this.debug("Error Code: HTTP Error, File name: " + file.name + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
			progress.setStatus("Upload Failed.");
			this.debug("Error Code: Upload Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.IO_ERROR:
			progress.setStatus("Server (IO) Error");
			this.debug("Error Code: IO Error, File name: " + file.name + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
			progress.setStatus("Security Error");
			this.debug("Error Code: Security Error, File name: " + file.name + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
			progress.setStatus("Upload Cancelled");
			this.debug("Error Code: Upload Cancelled, File name: " + file.name + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
			progress.setStatus("Upload Stopped");
			this.debug("Error Code: Upload Stopped, File name: " + file.name + ", Message: " + message);
			break;
		}
	} catch (ex) {
	}
}
