var formChecker = null;
function swfUploadLoaded() {
	var btnSubmit       = document.getElementById("button");
	//btnSubmit.onclick   = $jQuery("#uploadInitial").validationEngine(); doSubmit;
	formChecker         = window.setInterval(validateForm, 1000);
	validateForm();
}

function validateForm() {
	var txtFileName = document.getElementById("txtFileName");
	var isValid = true;

	if (txtFileName.value === "") {
		isValid = false;
	}

}

// 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;
}

 // Called by the queue complete handler to submit the form
function uploadDone() {
	try {
		document.forms["uploadInitial"].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 fileQueued(file) {
	try {
        // This makes it so FileProgress only makes a single UI element, instead of one for each file
        //file.id             = "singlefile";
		var txtFileName     = document.getElementById("txtFileName");
		txtFileName.value   = file.name;
		var progress        = new FileProgress(file, this.customSettings.progress_target);
        progress.setGreen();
        var MBTotal         = readablizeBytes(file.size);
		progress.setStatus("Pending... (" + MBTotal + ")");
        this.customSettings.file_selected = true;
		progress.toggleCancel(true, this);
        this.setButtonDisabled(true);

	} catch (ex) {
		this.debug(ex);
	}

}

function validateSelect() {
    if (this.customSettings.file_selected == true)
    {
        this.setButtonDisabled(true);
    }
    else
    {
        this.setButtonDisabled(false);
    }
}

function fileDialogComplete(numFilesSelected, numFilesQueued) {
	validateForm();
}

/*function uploadProgress(file, bytesLoaded, bytesTotal) {

	try {
		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 MBLoaded = Math.round((bytesLoaded / 1024 / 1024) * 100) / 100 ;
        var MBTotal = Math.ceil((bytesTotal / 1024 / 1024) * 100) / 100 ;
        progress.setStatus('Uploading... ' + percent + '% (' + MBLoaded + ' of ' + MBTotal + ' MB done)');
        document.title = percent + '% uploaded for ' + file;
	} catch (e) {
	}
}*/

function uploadProgress(file, bytesLoaded, bytesTotal) {
    try {
        //file.id         = "singlefile";
        document.getElementById("button").disabled = true;
        var percent     = Math.ceil((bytesLoaded / bytesTotal) * 100);
        var MBLoaded    = Math.round((bytesLoaded / 1024 / 1024) * 100) / 100 ;
        var MBTotal     = Math.round((bytesTotal / 1024 / 1024) * 100) / 100 ;
        var TimeLeft    = SWFUpload.speed.formatTime(file.timeRemaining);
        var TimeSpent   = SWFUpload.speed.formatTime(file.timeElapsed);
        var CurSpeed    = SWFUpload.speed.formatBPS(file.currentSpeed);
        var progress    = new FileProgress(file, this.customSettings.progress_target);
        progress.setProgress(percent);
        progress.setStatus('Uploading... ' + percent + '% (' + MBLoaded + '/' + MBTotal + ' MB complete). ' + 'ETA: ' + TimeLeft);
        //document.title = percent + '% of ' + file.name + ' uploaded. ' + 'Upload speed: ' + CurSpeed + '. Elapsed time: ' + TimeSpent;
        document.title = percent + '% of ' + file.name + ' uploaded. ETA: ' + TimeLeft + '. Elapsed time: ' + TimeSpent;

/*		            $jQuery.blockUI({
			            theme:     true, // true to enable jQuery UI support
			            draggable: true, // draggable option is only supported when jquery UI script is included
			            title:    'Uploading Attachment...', // only used when theme == true
			            message:  '<p><img style="vertical-align: text-top" src="/images/icons/arrow-ajax-loader.gif" border="0"> Uploading '+file.name+'. '+percent + '% (' + MBLoaded + '/' + MBTotal + ' MB complete). ' + 'ETA: ' + TimeLeft+'...</p>'
		            });*/

    } catch (e) {
        this.debug(e);
    }
}

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);
		progress.setComplete();
		progress.setStatus("Complete.");
		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) {
            //file.id = "singlefile";
            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 = "data";
			validateForm();

			alert("There was a problem with the upload.\nThe server did not accept it.");
		}
	} catch (e) {
	}
}

/*function uploadError(file, errorCode, message) {
	try {

		var progress = new FileProgress(file, this.customSettings.progress_target);
		progress.setError();
		progress.toggleCancel(false, this);
        this.setButtonDisabled(false);

		if (errorCode === SWFUpload.UPLOAD_ERROR.FILE_CANCELLED) {
            progress.setStatus("Upload Cancelled");
		}

		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:
			// If there aren't any files left (they were all cancelled) disable the cancel button
			if (this.getStats().files_queued === 0) {
				document.getElementById(this.customSettings.cancelButtonId).disabled = true;
			}
			progress.setStatus("Cancelled");
			progress.setCancelled();
            this.debug("Upload Cancelled.");
            return;
		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

		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:
			// If there aren't any files left (they were all cancelled) disable the cancel button
			if (this.getStats().files_queued === 0) {
				document.getElementById(this.customSettings.cancelButtonId).disabled = true;
			}
			progress.setStatus("Upload Cancelled");
			progress.setCancelled();
            this.debug("Upload Cancelled");
			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) {
	}
}*/

/*function uploadError(file, errorCode, message) {
	try {
		var progress = new FileProgress(file, this.customSettings.progress_target);
		progress.setError();
		progress.toggleCancel(false);
        this.setButtonDisabled(false);
        document.getElementById("btnSubmit").disabled = false;

		if (errorCode === SWFUpload.UPLOAD_ERROR.FILE_CANCELLED) {
            progress.setStatus("Upload Cancelled");
            swfu.cancelUpload('singlefile');
		}

		switch (errorCode) {
		case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
			progress.setStatus("Upload Error: " + message);
			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.UPLOAD_LIMIT_EXCEEDED:
			progress.setStatus("Upload limit exceeded.");
			this.debug("Error Code: Upload Limit Exceeded, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
			progress.setStatus("Failed Validation.  Upload skipped.");
			this.debug("Error Code: File Validation Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
			// If there aren't any files left (they were all cancelled) disable the cancel button
			if (this.getStats().files_queued === 0) {
				document.getElementById(this.customSettings.cancelButtonId).disabled = true;
			}
			progress.setStatus("Cancelled");
			progress.setCancelled();
			break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
			progress.setStatus("Stopped");
			break;
		default:
			progress.setStatus("Unhandled Error: " + errorCode);
			this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		}
	} catch (ex) {
        this.debug(ex);
    }
}*/

function uploadError(file, errorCode, message) {
	try {
	    //file.id = "singlefile";
		var progress = new FileProgress(file, this.customSettings.progress_target);
        progress.setRed();
        progress.setError();
		progress.toggleCancel(false);
        progress.setStatus("Upload Cancelled");
        this.setButtonDisabled(false);

        var txtFileName = document.getElementById("txtFileName");
		txtFileName.value = "";
		validateForm();

		switch (errorCode) {
		case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
			progress.setStatus("Upload Error: " + message);
			this.debug("Error Code: HTTP Error, File name: " + file.name + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.MISSING_UPLOAD_URL:
			progress.setStatus("Configuration Error");
			this.debug("Error Code: No backend file, 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.UPLOAD_LIMIT_EXCEEDED:
			progress.setStatus("Upload limit exceeded.");
			this.debug("Error Code: Upload Limit Exceeded, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.SPECIFIED_FILE_ID_NOT_FOUND:
			progress.setStatus("File not found.");
			this.debug("Error Code: The file was not found, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
			progress.setStatus("Failed Validation.  Upload skipped.");
			this.debug("Error Code: File Validation Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
			if (this.getStats().files_queued === 0) {
				document.getElementById(this.customSettings.cancelButtonId).disabled = true;
			}
			progress.setStatus("Cancelled");
			progress.setCancelled();
			break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
			progress.setStatus("Stopped");
			break;
		default:
			progress.setStatus("Unhandled Error: " + error_code);
			this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		}
	} catch (ex) {
        this.debug(ex);
    }
}

function readablizeBytes(bytes) {
    var s = ['bytes', 'kb', 'MB', 'GB', 'TB', 'PB'];
    var e = Math.floor(Math.log(bytes)/Math.log(1024));
    return (bytes/Math.pow(1024, Math.floor(e))).toFixed(2)+" "+s[e];
}

function convertbytes(f) {
  f.kb.value=Math.round(f.byte.value/1024*100000)/100000
  f.mb.value=Math.round(f.byte.value/1048576*100000)/100000
  f.gb.value=Math.round(f.byte.value/1073741824*100000)/100000
}

function convertkb(f) {
  f.byte.value=Math.round(f.kb.value*1024*100000)/100000
  f.mb.value=Math.round(f.kb.value/1024*100000)/100000
  f.gb.value=Math.round(f.kb.value/1048576*100000)/100000
}

function convertmb(f) {
  f.byte.value=Math.round(f.mb.value*1048576*100000)/100000
  f.kb.value=Math.round(f.mb.value*1024*100000)/100000
  f.gb.value=Math.round(f.mb.value/1024*100000)/100000
}

function convertgb(f) {
  f.byte.value=Math.round(f.gb.value*1073741824*100000)/100000
  f.kb.value=Math.round(f.gb.value*1048576*100000)/100000
  f.mb.value=Math.round(f.gb.value*1024*100000)/100000
}

/* This is an example of how to cancel all the files queued up.  It's made somewhat generic.  Just pass your SWFUpload
object in to this method and it loops through cancelling the uploads. */
function cancelQueue(instance) {
	document.getElementById(instance.customSettings.cancelButtonId).disabled = true;
	instance.stopUpload();
	var stats;

	do {
		stats = instance.getStats();
		instance.cancelUpload();
	} while (stats.files_queued !== 0);

}

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 */
        //file.id         = "singlefile";
        var progress    = new FileProgress(file, this.customSettings.progress_target);
		progress.setStatus("Starting Upload...");
		progress.toggleCancel(true, this);
	}
	catch (ex) {
	}

	return true;
}
