YAHOO.util.Event.onDOMReady(function () { 
	var uiLayer = YAHOO.util.Dom.getRegion('selectLink');
	var overlay = YAHOO.util.Dom.get('uploaderOverlay');
	YAHOO.util.Dom.setStyle(overlay, 'width', uiLayer.right-uiLayer.left + "px");
	YAHOO.util.Dom.setStyle(overlay, 'height', uiLayer.bottom-uiLayer.top + "px");
});

YAHOO.widget.Uploader.SWFURL = "assets/uploader.swf";
var uploader = new YAHOO.widget.Uploader( "uploaderOverlay" );
	
uploader.addListener('contentReady', handleContentReady);
uploader.addListener('fileSelect', onFileSelect)
uploader.addListener('uploadStart', onUploadStart);
uploader.addListener('uploadProgress', onUploadProgress);
uploader.addListener('uploadCancel', onUploadCancel);
uploader.addListener('uploadComplete', onUploadComplete);
uploader.addListener('uploadCompleteData', onUploadResponse);
uploader.addListener('uploadError', onUploadError);
uploader.addListener('click', handleClick);
    	
// Variable for holding the filelist.
var fileList;
var fileCache;
	
// When the Flash layer is clicked, the "Browse" dialog is invoked.
// The click event handler allows you to do something else if you need to.
function handleClick () {

}

function handleContentReady () {

  uploader.setAllowLogging(false);
	uploader.setAllowMultipleFiles(true);
		
	var ff = new Array(	 {description:"Images", extensions:"*.jpg;*.png;*.gif;*.nef;*.dng;*.raw;*.tiff;*.tif"},
		     		 {description:"Videos", extensions:"*.avi;*.mov;*.mpg"},
				 {description:"MP3s", extensions:"*.mp3"},
				 {description:"Documents", extensions:"*.pdf;*.doc;*.xls;*.ppt;*.odt;*.txt"},
				 {description:"Archives", extensions:"*.zip;*.tar;*.tar.gz;*.gz;*.7z"});
		                   
	uploader.setFileFilters(ff);
}

// Actually uploads the files. In this case,
// uploadAll() is used for automated queueing and upload 
// of all files on the list.
// You can manage the queue on your own and use "upload" instead,
// if you need to modify the properties of the request for each
// individual file.
function upload() {
	if (fileList != null) {
		uploader.setSimUploadLimit(parseInt(3));
		uploader.uploadAll("/upload.php", "POST",
		{mfsid:"<? echo session_id(); ?>"},
		"Filedata");
	}	
}
	
function cancelUpload() {
	if (fileList != null) {
		uploader.cancel();
		uploader.clearFileList();
		var upFileStat = YAHOO.util.Dom.get('urlFieldWrapper');		
		var bCancel = YAHOO.util.Dom.get('btnCancel');
		progbar = "<div style='height:5px;width:100px;background-color:#ccc;margin-top:5px;'><div style='height:5px;background-color:#ccc;width:100px;'></div></div>";
		cancelb = "<div style='height:10px;width:10px;margin-left:8px;'><img src='images/cancelbutton.gif'></div>";
		for (var j = 0; j < dataArr.length; j++) {
	    singleSelectDataTable.updateRow(j, {name: dataArr[j]["name"], size: dataArr[j]["size"], progress: progbar, status: cancelb});
	  }
		upFileStat.innerHTML = "Your upload has been canceled. Click <a href='/'>here</a> to start over.";
    bCancel.disabled = true;			
	}	
}
	
// Fired when the user selects files in the "Browse" dialog
// and clicks "Ok".
function onFileSelect(event) {
	fileList = event.fileList;
	fileCache = event.fileList;
	createDataTable(fileList);
	upload();
}

function createDataTable(entries) {
	rowCounter = 0;
	this.fileIdHash = {};
	this.dataArr = [];
	for(var i in entries) {
	  var entry = entries[i];
		entry["progress"] = "<div style='height:5px;width:100px;background-color:#CCC;margin-top:5px;'></div>";
		entry["status"] = "";
	  dataArr.unshift(entry);
	}
	
	for (var j = 0; j < dataArr.length; j++) {
	  this.fileIdHash[dataArr[j].id] = j;
	}
	
	var myColumnDefs = [
	  {key:"name", label: "File Name", sortable:false},
	  {key:"size", label: "Size", sortable:false},
	  {key:"progress", label: "Upload progress", sortable:false},
		{key:"status", label: "Status", sortable:false}
	];

	this.myDataSource = new YAHOO.util.DataSource(dataArr);
	this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
  this.myDataSource.responseSchema = {
    fields: ["id","name","created","modified","type", "size", "progress", "status"]
  };

	this.singleSelectDataTable = new YAHOO.widget.DataTable("dataTableContainer",
	  myColumnDefs, this.myDataSource, {selectionMode:"single"});
}

	
	
// Do something on each file's upload start.
function onUploadStart(event) {
	var upFileLink = YAHOO.util.Dom.get('uploadFilesLink');
	var selButton = YAHOO.util.Dom.get('selectLink');
	var bCancel = YAHOO.util.Dom.get('btnCancel');
	YAHOO.util.Dom.setStyle(upFileLink, 'visibility', 'hidden');
	selButton.disabled = true;
	bCancel.disabled = false;
}
	
// Do something on each file's upload progress event.
function onUploadProgress(event) {
	rowNum = fileIdHash[event["id"]];
	prog = Math.round(100*(event["bytesLoaded"]/event["bytesTotal"]));
	if(prog == 100) { cancelb = "<div style='height:10px;width:10px;'><img src='images/ajax-loader.gif'></div>"; } else { cancelb = ""; }
	progbar = "<div style='height:5px;width:100px;background-color:#CCC;margin-top:5px;'><div style='height:5px;background-color:#F00;width:" + prog + "px;'></div></div>";
	singleSelectDataTable.updateRow(rowNum, {name: dataArr[rowNum]["name"], size: dataArr[rowNum]["size"], progress: progbar, status: cancelb});	
}
	
// Do something when each file's upload is complete.
function onUploadComplete(event) {		
	delete(fileCache[event["id"]]);
	var empty = true;
  for(var i in fileCache) if (fileCache.hasOwnProperty(i)) {
    empty = false;    
	}        
  //if none are left, call the final function to clean up a bit
  if(empty) {
    //alert("done");
	  allUploadsComplete();				
  }
}

function allUploadsComplete() {
	var upFileStat = YAHOO.util.Dom.get('uploadFilesStatus');
	var upFileLink = YAHOO.util.Dom.get('selectFilesLink');
	var upFileDebug = YAHOO.util.Dom.get('debugArea');
	var bCancel = YAHOO.util.Dom.get('btnCancel');
	if(dataArr.length > 1) { filePlural = 's have'; linkPlural = 's'; } else { filePlural = ' has'; linkPlural = ''; }
	upFileLink.innerHTML = "<br /><b>Yay! Your file" + filePlural + " been uploaded! Copy and paste the link" + linkPlural + " below to share...</b>";
	YAHOO.util.Dom.setStyle(bCancel, 'visibility', 'hidden');
	upFileDebug.innerHTML = "<br /><b>Click <a href='/'>here</a> to upload more!</b>";
}
	
function onUploadResponse(event) {
	rowNum = fileIdHash[event["id"]];
	serverResp = event["data"];
			
	progbar = "<div style='height:5px;width:100px;background-color:#ccc;margin-top:5px;'><div style='height:5px;background-color:#659d3b;width:100px;'></div></div>";
	cancelb = "<div style='height:10px;width:10px;'><img src='images/checkmark.gif'></div>";
	singleSelectDataTable.updateRow(rowNum, {name: dataArr[rowNum]["name"], size: dataArr[rowNum]["size"], progress: progbar, status: cancelb});
		
	fileName = dataArr[rowNum]["name"];
	//alert(dataArr[rowNum]["name"]);
	//alert(serverResp);
	var urlField = document.createElement("div"); urlField.id = "urlFieldDiv";
	urlField.innerHTML = "File: <b>" + fileName + "</b><br /><span id='fileLinkstxt'>URL: </span><input type='text' class='fileLinks' value='" + serverResp + "' onclick=\"this.select();\"><span id='fileLinksTxtSm'> (click + ctrl-c to copy)&nbsp;&nbsp;or&nbsp;&nbsp;</span><a href='http://www.addthis.com/bookmark.php' style='text-decoration:none;' onclick=\"return addthis_open(this, 'email', '" +serverResp+ "', '" +fileName+ "');\"><img src='http://mediaflow3.com/images/button1-email.gif' width='54' height='16' border='0' alt='Email This' style='vertical-align:middle;'/></a><br />";

	document.getElementById('urlArea').appendChild(urlField);
}
	
// Do something if a file upload throws an error.
// (When uploadAll() is used, the Uploader will
// attempt to continue uploading.
function onUploadError(event) {
	rowNum = fileIdHash[event["id"]];
	errResp = event["status"];
	alert("There has been an error.");
	alert(errResp);
}
	
// Do something if an upload is cancelled.
function onUploadCancel(event) {

}
