/*
	fileBrowser.js
	DHTML file browser

the itemClickHandler parameter should be a function that will handle when an item is clicked. a parameter will be passed to the handler indicating which file was clicked.
the itemMouseOverHandler parameter should provide a fuunction to handle when an item is hovered by the mouse
the path parameter is used to determine where in the structure the current path is (relative to the basepath setting)
*/
function fileBrowser(path) {
	me = this;
	this.Path = path
	this.items=Array();
	//this.itemClickHandler = itemClickHandler;
	this.addItem = function(FileItem) {
		me.items[me.items.length] = FileItem;
	}

	//this.icons = Image[];
	//this.previews = Image[];

	this.render = function(elem, itemClickHandler, itemMouseOverHandler, itemMouseOutHandler) {
		var ret = '<table class=fileContainer>';
		me.items.sort(fileItemSort);
		for (var i = 0; i < me.items.length ; i++) {
			var item = me.items[i];
			if (item.type == 'folder') {
				item.icon += './ico/icon_folder2.gif';
				item.typeDescription = 'Folder';
			} else {
				//alert(item.fileName + '  extloc: ' + item.fileName.lastIndexOf('.'));
				var extloc = item.fileName.lastIndexOf('.') + 1;
				if (extloc > 0) {
					var ext = item.fileName.substr(extloc, item.fileName.length - extloc);
					//alert(item.fileName + '  ext: ' + ext);
					switch (ext) {
						case "flv":
							item.icon += './ico/icon_video.gif';
							item.typeDescription = 'Video file';
							break;
						case "mp3":
						case "wav":
						case "au":
							item.icon += './ico/icon_audio.gif';
							item.typeDescription = 'Audio file';
							break;
						case "jpg":
						case "jpeg":
						case "png":
						case "gif":
						case "bmp":
							item.icon += './ico/icon_image.gif';
							item.typeDescription = 'Image file';
							break;
						default:
							item.icon = './ico/icon_unknown.gif';
							item.typeDescription = 'Unknown file';
							break;

					}
				} else {
					icon = './ico/icon_unknown.gif';
				}
			}
			ret += '<tr><td onclick="' + itemClickHandler + '(this, ' + i + ')" onMouseOver="' + itemMouseOverHandler + '(this, ' + i + ')" onMouseOut="' + itemMouseOutHandler + '(this, ' + i + ')"><img src="' + item.icon + '" border=0 height=15 align=absmiddle>' + item.fileName + '</td></tr>';
		}
		ret +='</table>';
		if (elem == null) 
			return ret;
		else if (elem.style != null)
			elem.innerHTML = ret;
		else
			Obj(elem).innerHTML = ret;
	}
}

function fileItemSort(fileItem1, fileItem2) {
	var ret = 0;
	switch (fileItem1.type) {
		case 'folder':
			switch (fileItem2.type) {
				case 'folder':
					if (fileItem1.fileName > fileItem2.fileName)
						ret = 1;
					else if (fileItem1.fileName < fileItem2.fileName)
						ret = -1;
				break;
				case 'file':
					ret = -1; //folders are above files
				break;
				default:
					//alert('unhandled item2 type: ' + fileItem2.type);
					break;

			}
		break;
		case 'file':
			switch (fileItem2.type) {
				case 'folder': //folders are above files
					ret = 1;
				break;
				case 'file':
					if (fileItem1.fileName > fileItem2.fileName)
						ret = 1;
					else if (fileItem1.fileName < fileItem2.fileName)
						ret = -1;
				break;
				default:
					//alert('unhandled item2 type: ' + fileItem2.type);
					break;

			}
		break;
		default:
			//alert('unhandled item1 type: ' + fileItem1.type);
			break;
	}	
//	alert('sort: (' + fileItem1.type.substring(0,3) + ')'  + fileItem1.fileName + ' and (' + fileItem2.type.substring(0,3) + ')' + fileItem2.fileName + ' ret: ' + ret);
	return ret;
}

//fileItem class def.
function fileItem(fileName, type, thumbNail, description, size, srcFilePath, srcFileName, srcSize) {
	this.type = type;
	this.typeDescription = 'Unknown file';
	this.fileName = fileName;
	this.description = description;
	this.icon = '';
	this.thumbNail=thumbNail;
	this.size = size;
	this.srcFilePath = srcFilePath;
	this.srcFileName = srcFileName;
	this.srcSize = srcSize;
}
