The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
[% static = catalyst.uri_for('/static') %]
[% title = "YUI Uploader: Advanced Example" %]
[% CLEAR -%]
[% WRAPPER upload_frame.tt.html %]
<div id="single" style="margin-top:2em;"></div>
<script type="text/javascript">
YAHOO.util.Event.onDOMReady(function(){
});

	this.myLogReader = new YAHOO.widget.LogReader();
	
	YAHOO.widget.Uploader.SWFURL = "[% static %]/js/yui/build/uploader/assets/uploader.swf";
	
	var uploader = new YAHOO.widget.Uploader( "uploaderPlaceHolder" );
	uploader.addListener('fileSelect',onFileSelect);
	uploader.addListener('uploadError',onUploadError);
	uploader.addListener('uploadComplete',onUploadComplete);
	uploader.addListener('uploadCompleteData',onUploadResponse);
	uploader.addListener('uploadProgress',onUploadProgress);
	uploader.addListener('uploadStart',onUploadStart);
	var uploadCounter = 0;
	var fileIdHash;
	var dataArr;

	function browse() {
		uploader.clearFileList();
		uploader.browse(true, [{description:"Images", extensions:"*.jpg;*.png;*.gif"}]);
        document.getElementById('uploadBtn').disabled = false;
	}
	
	function createDataTable(entries) {
		rowCounter = 0;
		fileIdHash = [];
		dataArr = [];
		for(var i in entries) {
			var entry = entries[i];
			dataObj = {};

			for (var j in entry) {
				dataObj[j] = entry[j];
			}
			dataArr.push(dataObj);
			fileIdHash[dataObj["id"]] = rowCounter;
			rowCounter++;
		}
		
		this.allData = {data: dataArr}

        var myColumnDefs = [
            {key:"name", label: "File Name", sortable:false},
			{key:"size", label: "Size", sortable:false},
			{key:"progress", label: "Upload progress", sortable:false}
        ];
        this.myDataSource = new YAHOO.util.DataSource(this.allData);
		this.myDataSource.dataType = YAHOO.util.DataSource.TYPE_JSARRAY;
        this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
        this.myDataSource.responseSchema = {
            resultsList: ["data"],
            fields: ["id","name","created","modified","type", "size", "progress"]
        };
		
	    this.singleSelectDataTable = new YAHOO.widget.DataTable("single",
	            myColumnDefs, this.myDataSource, {
	                caption:"Files To Upload",
	                selectionMode:"single"
	            });
	
	}
	
	function upload() {
		YAHOO.log(dataArr);
		var idToUpload = dataArr[uploadCounter]["id"];
		uploader.upload(idToUpload, '[% catalyst.uri_for('/upload') %]');
		document.getElementById('uploadBtn').disabled = true;
	}
	
	function onUploadProgress(event) {
		rowNum = fileIdHash[event["id"]];
		prog = Math.round(100*(event["bytesLoaded"]/event["bytesTotal"]));
		progbar = "<hr style=\"color: #f00; background-color: #f00; text-align:left; margin: 0 auto 0 0; height: 5px; width: " + prog + "px\"/>";
		singleSelectDataTable.updateRow(rowNum, {name: dataArr[rowNum]["name"], size: dataArr[rowNum]["size"], progress: progbar});
		
	}
	

	function onFileSelect(event) {
		fileList = event.fileList;
		YAHOO.log(event);
		createDataTable(fileList);

	}
	
	function onUploadStart(event) {
		YAHOO.log(event);
		rowNum = fileIdHash[event["id"]];
		singleSelectDataTable.updateRow(rowNum, {name: dataArr[rowNum]["name"], size: dataArr[rowNum]["size"], progress: "Starting..."});		
	}
	
	function onUploadComplete(event) {
		YAHOO.log(event);
		rowNum = fileIdHash[event["id"]];
		progbar = "<hr style=\"color: #f00; background-color: #f00; text-align:left; margin: 0 auto 0 0; height: 5px; width: 100px\"/>";
		singleSelectDataTable.updateRow(rowNum, {name: dataArr[rowNum]["name"], size: dataArr[rowNum]["size"], progress: progbar});
		
		if (uploadCounter < dataArr.length - 1) {
			uploadCounter++;
			upload();
		}
		else {
			YAHOO.log("All files uploaded!");
		    document.getElementById('uploadBtn').disabled = false;
		    uploader.clearFileList();
		}
	}
	
	function onUploadError (event) {
		YAHOO.log(event);
	}

	function onUploadResponse(event) {
		YAHOO.log(event);
        handleUploads(event);
	}
</script>
[% END %]