var $active_inode;
var $last_click;
var $current_dir;

function $(id) {
	return document.getElementById(id);
}

function do_faction(inode) {
	eval($('faction').options[$('faction').selectedIndex].value + '(' + inode + ');');
}

function mkdir() {
	location.href = '/alter/browsedirs/mkdir/' + (escape($current_dir.b)).replace(/%2F/g, "/");
}

function upload_file() {
	location.href = '/alter/browsedirs/upload/' + (escape($current_dir.b)).replace(/%2F/g, "/");
}

function download(inode) {
	location.href = '/browse/' + (escape($inodes[inode].b)).replace(/%2F/g, "/");
}

function copy(inode) {
	location.href = '/alter/browsedirs/copy/' + (escape($inodes[inode].b)).replace(/%2F/g, "/");
}

function move(inode) {
	var path;
	
	if (inode) {
		path = $inodes[inode].b;
	} else {
		path = $current_dir.b;
	}
	
	location.href = '/alter/browsedirs/move/' + (escape(path)).replace(/%2F/g, "/");
}

function del(inode) {
	var path;
	
	if (inode) {
		path = $inodes[inode].b;
	} else {
		path = $current_dir.b;
	}
	
	location.href = '/alter/delete/' + (escape(path)).replace(/%2F/g, "/");
}

function show_file(inode) {
	if ($active_inode == inode) {
		download(inode);
		return false;
	}
	
	clear_current_file();
	
	var finfo = $inodes[inode];
	
	$active_inode = inode;
	
	$('finfo').innerHTML = "<table>" +
	                       "<tr><td class=\"label\">File name:</td><td>" + finfo.d + "</td></tr>" +
	                       "<tr><td class=\"label\">Size:</td><td>" + commaify(finfo.s) + ' bytes' + "</td></tr>" +
	                       "<tr><td class=\"label\">Last modified:</td><td>" + friendly_date(finfo.m) + "</td></tr>" +
	                       "</table>";
	
	$('fbutton').innerHTML = '<select id="faction" onchange="do_faction(' + inode + ');">' +
	                         '<option value="download">Download</option>' +
	                         '<option value="del">Delete</option>' +
	                         '<option value="copy">Copy</option>' +
	                         '<option value="move">Move</option>' +
	                         '</select>' +
	                         '&nbsp;<input type="button" onclick="do_faction(' + inode + ');" value="&gt;"/>';
	
	$last_click = (new Date).getTime();
	
	$('inode' + inode).className = 'file current_file';
	
	return false;
}

function show_current_dir() {
	var d = $current_dir.d ? $current_dir.d : 'Home Folder';
	
	if ($current_dir.b == undefined)
		$current_dir.b = '';
	
	var fbselect = '<select id="faction" onchange="do_faction(null);">' +
		           '<option value="mkdir">Make Directory</option>' +
		           '<option value="upload_file">Upload File</option>';
	
	if ($current_dir.d) {
		fbselect = fbselect +
		           '<option value="del">Delete</option>' +
		           '<option value="move">Move</option>';
	}
	
	fbselect = fbselect +
		       '</select>' +
		       '&nbsp;<input type="button" onclick="do_faction(null);" value="&gt;"/>';
	
	$('fbutton').innerHTML = fbselect;	       
		
	$('finfo').innerHTML = "<table>" +
	                       "<tr><td class=\"label\">Folder:</td><td>" + d + "</td></tr>" +
	                       "<tr><td class=\"label\">Files:</td><td>" + $current_dir.f + "</td></tr>" +
	                       "<tr><td class=\"label\">Sub-folders:</td><td>" + $current_dir.s + "</td></tr>" +
	                       "</table>";
}

function clear_current_file() {
	if ($active_inode) {
		$('inode' + $active_inode).className = 'file';
		$active_inode = null;
	}
}

function clear_file() {
	if ((new Date).getTime() - $last_click >= 100) {
		clear_current_file();
		show_current_dir();
	}
}

function friendly_date(utime) {
	var months = {0:'Jan', 1:'Feb', 2:'Mar', 3:'Apr', 4:'May', 5:'Jun', 6:'Jul', 7:'Aug', 8:'Sep', 9:'Oct', 10:'Nov', 11:'Dec'};
	var d = new Date();
	var hour;
	var ampm;
	var min;
	
	d.setTime(utime * 1000);
	
	hour = d.getHours();
	
	if (hour > 12) {
		hour -= 12;
		ampm = 'pm';
	} else {
		ampm = 'am';
	}

	min = d.getMinutes();
	min = min.toString().length == 1 ? '0' + min : min;
	
	return months[d.getMonth()] + ' ' + d.getDate() + ', ' + d.getFullYear() + ' at ' +
	       hour + ':' + min + ampm;
}

function commaify(nStr) {
	// Marked as public domain as of 1/1/2008: http://www.mredkj.com/javascript/nfbasic.html
	nStr += '';
	var x = nStr.split('.');
	var x1 = x[0];
	var x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}
