	var selectedCount=0;
	var lastSelected=0;

	var WEXPERMISSION_READ = 1;
	var WEXPERMISSION_WRITE = 2;
	var WEXPERMISSION_UPLOAD = 4;
	var WEXPERMISSION_DELETE = 8;
	
	var uploadWin=null, aboutWin=null, propertiesWin=null, downloadWin=null, infoWin=null;
	var first=0, next=0, previous=0, last=0;
	var firstOn=false, nextOn=false, previousOn=false, lastOn=false;
	var canLevelUp = false;
	
	function ToggleRow(theRow) {
		var itemIndex;
		var values, state;
		var msg;

		itemIndex = parseInt(theRow.id.replace("row",""));
		values = formListing.item[itemIndex].value.split("|");
		state = values[2]=="1"?false:true;
		
		selectedCount+=state?1:-1;
		values[2]=state?"1":"0";;
		theRow.className=state?"selected":"";
		formListing.item[itemIndex].value = values[0] + "|" + values[1] + "|" + values[2];
		lastSelected = itemIndex;
		msg = selectedCount + " item(s) selected";
		if (selectedCount==1) msg+=" (Use CTRL and SHIFT to select multiple items)";
		AwareUser(msg);
	}
	
	function ToggleAllRows(state) {
		var i;
		var values;
		for(i=0;i<parent.wexList.document.forms.formListing.item.length-1;i++) {
			values = parent.wexList.document.forms.formListing.item[i].value.split("|");
			values[2] = state?"1":"0";
			parent.wexList.document.forms.formListing.item[i].value = values[0] + "|" + values[1] + "|" + values[2];
			eval("parent.wexList.row" + i).className = state?"selected":"";
		}
		parent.wexList.selectedCount = state?(parent.wexList.document.forms.formListing.item.length-1):0;
		AwareUser(parent.wexList.selectedCount + " item(s) selected");
	}

	function ToggleSomeRows(theRow) {
		var itemIndex;
		var values;
		var i, start, end;
		
		itemIndex = parseInt(theRow.id.replace("row",""));
		if(lastSelected>itemIndex) {
			start = itemIndex;
			end = lastSelected;
		} else {
			start = lastSelected;
			end = itemIndex;
		}
		
		for(i=start;i<=end;i++) {
			if (eval("parent.wexList.row" + i).className != "selected") {
				values = parent.wexList.document.forms.formListing.item[i].value.split("|");
				values[2] = "1";
				parent.wexList.document.forms.formListing.item[i].value = values[0] + "|" + values[1] + "|" + values[2];
				eval("parent.wexList.row" + i).className = "selected";
				selectedCount+= 1;
			}
		}
		AwareUser(parent.wexList.selectedCount + " item(s) selected");
	}
		
	function SelectRow(theRow) {
		if (selectedCount==1) {
			if (!event.ctrlKey && !event.shiftKey) ToggleRow(eval("row" + lastSelected));
		} else if (selectedCount>1) {
			if (!event.ctrlKey && !event.shiftKey) ToggleAllRows(false);
		}
		
		if (event.shiftKey) {
			ToggleSomeRows(theRow);
		} else {
			ToggleRow(theRow);
		}
	}
	
	function ExecuteItem(theRow) {
		var itemIndex;
		var values;
		itemIndex = parseInt(theRow.id.replace("row",""));
		values = formListing.item[itemIndex].value.split("|");
		if (values[1]=="1") Command("OpenFolder",document.forms.formBuffer.folder.value + values[0])
		else Command("Download", values[0]);
	}
	
	function PressColumn(theColumn) {
		theColumn.className = "3dPanelClicked";	
	}

	function ReleaseColumn(theColumn) {
		var colIndex;
		
		theColumn.className = "3dPanel";
		
		colIndex = theColumn.id.replace("col","");
		Command("Sort", colIndex);
	}

	function RestoreColumn(theColumn) {
		theColumn.className = "3dPanel";
	}

	function HoverOnButton(button) {
		button.className = "3dPanel";
		window.status = button.alt;
	}
	function HoverOffButton(button) {
		button.className = "toolbarButton";
		window.status = "";
	}

	function PressButton(button) {
		button.className = "3dPanelClicked";	
	}

	function ReleaseButton(button, cmd) {
		button.className = "3dPanel";
		Command(cmd,'');
	}

	function CreateSelection () {
		var i;
		var values;
		var selection = "";
		for(i=0;i<parent.wexList.document.forms.formListing.item.length-1;i++) {
			values = parent.wexList.document.forms.formListing.item[i].value.split("|");
			if (values[2] == "1") {
				if (selection!="") selection += "|";
				selection += values[1] + "?" + values[0];
			}
		}
		return selection;
	}

	function GetFirstSelected() {
		var i;
		var values;
		for(i=0;i<parent.wexList.document.forms.formListing.item.length-1;i++) {
			values = parent.wexList.document.forms.formListing.item[i].value.split("|");
			if (values[2] == "1") break;
		}
		return parent.wexList.document.forms.formListing.item[i].value;
	}
	
	function Command (cmd, param) {
		var str, arr;
		switch (cmd) {
			case "OpenFolder":
				if (!parent.wexList.document.forms.formBuffer) return;
				parent.wexList.document.forms.formBuffer.command.value = cmd;
				parent.wexList.document.forms.formBuffer.parameter.value = param;
				parent.wexList.document.forms.formBuffer.submit();
				break;
			case "JumpFolder":
				if (!parent.wexList.document.forms.formBuffer) return;
				parent.wexList.document.forms.formBuffer.command.value = cmd;
				parent.wexList.document.forms.formBuffer.parameter.value = param;
				parent.wexList.document.forms.formBuffer.parameter2.value = parent.wexTree.document.forms.formBuffer.access.value;
				parent.wexList.document.forms.formBuffer.submit();
				break;
			case "AccessFolder":
				if (!parent.wexTree.document.forms.formBuffer) return;
				parent.wexTree.document.forms.formBuffer.command.value = cmd;
				parent.wexTree.document.forms.formBuffer.parameter.value = param;
				parent.wexTree.document.forms.formBuffer.submit();
				Command("OpenFolder", param);
				break;
			case "SelectFolder":
				var i;
				var folder;
				
				param = param.toLowerCase();
				if (!parent.wexTree.document.forms.formNavigator) return;
				i = parent.wexTree.document.forms.formNavigator.accessList.selectedIndex;
				str = parent.wexTree.document.forms.formNavigator.accessList.options[i].text.toLowerCase();
				for(i=0;i<parent.wexTree.document.forms.formNavigator.folderTree.length;i++) {
					folder = parent.wexTree.document.forms.formNavigator.folderTree.options[i].text.toLowerCase();
					if (folder == "<root>") folder = "";
					if (str + folder == param) {
						parent.wexTree.document.forms.formNavigator.folderTree.selectedIndex = i;
						break;
					}
				}
				break;
			case "Sort":
				arr = eval('parent.wexList.document.forms.formListing.' + 'colData' + param + '.value.split("|")');
				parent.wexList.document.forms.formBuffer.sortBy.value = arr[0];
				if (arr[1]=="NONE") 
					parent.wexList.document.forms.formBuffer.order.value = "ASC";
				else
					parent.wexList.document.forms.formBuffer.order.value = (arr[1]=="ASC")?"DESC":"ASC";

				parent.wexList.document.forms.formBuffer.command.value = cmd;
				parent.wexList.document.forms.formBuffer.parameter.value = "";
				parent.wexList.document.forms.formBuffer.submit();
				break;
			case "Home":
				Command("AccessFolder", document.forms.formBuffer.home.value);
				break;
			case "Refresh":
				if (!parent.wexList.document.forms.formBuffer) return;
				parent.wexList.document.forms.formBuffer.command.value = cmd;
				parent.wexList.document.forms.formBuffer.parameter.value = "";
				parent.wexList.document.forms.formBuffer.submit();
				break;
			case "Pager":
				if (param == "disable") {
					if(!parent.wexToolbar) return;
					parent.wexToolbar.firstOn = false;
					parent.wexToolbar.nextOn = false;
					parent.wexToolbar.previousOn = false;
					parent.wexToolbar.lastOn = false;
				} else {
					arr = param.split("|");
					eval("parent.wexList." + arr[0].toLowerCase() + " = arr[1]");
					eval("parent.wexToolbar." + arr[0].toLowerCase() + "On=true");
				}
				break;
			case "GoToPage":
				if (!parent.wexList.document.forms.formBuffer) return;
				parent.wexList.document.forms.formBuffer.command.value = cmd;
				parent.wexList.document.forms.formBuffer.index.value = param;
				parent.wexList.document.forms.formBuffer.submit();
				break;
			case "First":
				if (parent.wexToolbar.firstOn)
					Command("GoToPage", eval("parent.wexList." + cmd.toLowerCase()));
				else
					AwareUser("It's already first page");
				break;
			case "Previous":
				if (parent.wexToolbar.previousOn)
					Command("GoToPage", eval("parent.wexList." + cmd.toLowerCase()));
				else
					AwareUser("It's first page, there is no previous page");
				break;
			case "Next":
				if (parent.wexToolbar.nextOn)
					Command("GoToPage", eval("parent.wexList." + cmd.toLowerCase()));
				else
					AwareUser("It's last page, there is no next page");				
				break;
			case "Last":
				if (parent.wexToolbar.lastOn)
					Command("GoToPage", eval("parent.wexList." + cmd.toLowerCase()));
				else
					AwareUser("It's already last page");
				break;
			case "LevelUp":
				if (!parent.wexList.document.forms.formBuffer) return;
				if (!parent.wexToolbar.canLevelUp) {
					AwareUser("No upper level! Use access list.");
					return;
				}
				parent.wexList.document.forms.formBuffer.command.value = cmd;
				parent.wexList.document.forms.formBuffer.parameter.value = "";
				parent.wexList.document.forms.formBuffer.submit();
				break;
			case "CanLevelUp":
				if(!parent.wexToolbar) return;
				if(param=="true") parent.wexToolbar.canLevelUp=true;
				else parent.wexToolbar.canLevelUp=false;
				break;
			case "Message":
				if (!parent.wexTree.document.forms.formNavigator) return;
				parent.wexTree.document.forms.formNavigator.wexMessage.value = parent.wexList.document.forms.formBuffer.message.value; 
				parent.wexTree.document.forms.formNavigator.wexMessage.scrollTop=0;
				parent.wexTree.document.forms.formNavigator.wexMessage.scrollLeft=0;
				break;
			case "Aware":
				if (!parent.wexTree.document.forms.formNavigator) return;
				parent.wexTree.document.forms.formNavigator.wexMessage.value = param; 
				parent.wexTree.document.forms.formNavigator.wexMessage.scrollTop=0;
				parent.wexTree.document.forms.formNavigator.wexMessage.scrollLeft=0;
				break;
			case "NewFolder":
				if (!parent.wexList.document.forms.formBuffer) return;	
				if (!(parseInt(parent.wexList.document.forms.formBuffer.access.value) & WEXPERMISSION_WRITE)) {
					WarnUser(cmd, "WRITE");
					return;
				}
				str = prompt("Enter the name for the new folder","New Folder");
				if (!str) return;
				parent.wexList.document.forms.formBuffer.command.value = cmd;
				parent.wexList.document.forms.formBuffer.parameter.value = str;
				parent.wexList.document.forms.formBuffer.submit();
				break;	
			case "NewFile":
				if (!parent.wexList.document.forms.formBuffer) return;	
				if (!(parseInt(parent.wexList.document.forms.formBuffer.access.value) & WEXPERMISSION_WRITE)) {
					WarnUser(cmd, "WRITE");
					return;
				}
				str = prompt("Enter the name for the new file","New File");
				if (!str) return;
				parent.wexList.document.forms.formBuffer.command.value = cmd;
				parent.wexList.document.forms.formBuffer.parameter.value = str;
				parent.wexList.document.forms.formBuffer.submit();
				break;	
			case "Upload":
				if (!parent.wexList.document.forms.formBuffer) return;	
				if (!(parseInt(parent.wexList.document.forms.formBuffer.access.value) & WEXPERMISSION_UPLOAD)) {
					WarnUser(cmd, "UPLOAD");
					return;
				}
				if (uploadWin!=null && !uploadWin.closed) {
					uploadWin.focus(); 
				} else {
					str = parent.wexList.document.forms.formBuffer.folder.value;
					uploadWin = openWin(cmd, "", 320, 290, true, false);
					createPage(uploadWin,cmd,str,"./upload.asp");
				}
				break;
			case "SelectAll":
				if (!parent.wexList.document.forms.formBuffer) return;	
				if (!parent.wexList.document.forms.formListing.item.length-1==0) return;
				ToggleAllRows(true);
				break;
			case "SelectNone":
				if (!parent.wexList.document.forms.formBuffer) return;	
				if (!parent.wexList.document.forms.formListing.item.length-1==0) return;
				ToggleAllRows(false);
				break;
			case "Delete":
				if (!parent.wexList.document.forms.formBuffer) return;	
				if (!(parseInt(parent.wexList.document.forms.formBuffer.access.value) & WEXPERMISSION_DELETE)) {
					WarnUser(cmd, "DELETE");
					return;
				}
				if (parent.wexList.selectedCount==0) {alert("No item(s) selected!"); return;}
				str = "Are you sure to delete " + parent.wexList.selectedCount + " item(s) ?";
				str += "\n(Folders will be deleted recursively)";
				if (!confirm(str)) return;
				parent.wexList.document.forms.formBuffer.command.value = cmd;
				parent.wexList.document.forms.formBuffer.parameter.value = CreateSelection();
				parent.wexList.document.forms.formBuffer.submit();
				break;
			case "Cut":
				if (!parent.wexList.document.forms.formBuffer) return;	
				if (!(parseInt(parent.wexList.document.forms.formBuffer.access.value) & WEXPERMISSION_DELETE) 
					|| !(parseInt(parent.wexList.document.forms.formBuffer.access.value) & WEXPERMISSION_READ)) {
					WarnUser(cmd, "READ and DELETE");
					return;
				}
				if (parent.wexList.selectedCount==0) {alert("No item(s) selected!"); return;}
				parent.wexToolbar.document.forms.formBuffer.command.value = cmd;
				str = parent.wexList.document.forms.formBuffer.folder.value;
				str += ":" + CreateSelection();
				parent.wexToolbar.document.forms.formBuffer.clipboard.value = str;
				AwareUser(parent.wexList.selectedCount + " item(s) are cut");
				break;
			case "Copy":
				if (!parent.wexList.document.forms.formBuffer) return;	
				if (!(parseInt(parent.wexList.document.forms.formBuffer.access.value) & WEXPERMISSION_READ)) {
					WarnUser(cmd, "READ");
					return;
				}
				if (parent.wexList.selectedCount==0) {alert("No item(s) selected!"); return;}
				parent.wexToolbar.document.forms.formBuffer.command.value = cmd;
				str = parent.wexList.document.forms.formBuffer.folder.value;
				str += ":" + CreateSelection();
				parent.wexToolbar.document.forms.formBuffer.clipboard.value = str;
				AwareUser(parent.wexList.selectedCount + " item(s) are copied");
				break;
			case "Paste":
				if (!parent.wexList.document.forms.formBuffer) return;	
				if (!(parseInt(parent.wexList.document.forms.formBuffer.access.value) & WEXPERMISSION_WRITE)) {
					WarnUser(cmd, "WRITE");
					return;
				}
				if(parent.wexToolbar.document.forms.formBuffer.clipboard.value=="") {
					alert("The clipboard is empty!");
					return;
				}
				str = parent.wexToolbar.document.forms.formBuffer.command.value + cmd;
				parent.wexList.document.forms.formBuffer.command.value = str;
				parent.wexList.document.forms.formBuffer.parameter.value = parent.wexToolbar.document.forms.formBuffer.clipboard.value;
				parent.wexList.document.forms.formBuffer.submit();
				break;
			case "Rename":
				if (!parent.wexList.document.forms.formBuffer) return;	
				if (!(parseInt(parent.wexList.document.forms.formBuffer.access.value) & WEXPERMISSION_WRITE)) {
					WarnUser(cmd, "WRITE");
					return;
				}
				if (parent.wexList.selectedCount==0) {alert("No item(s) selected!"); return;}
				var item, values;
				item = GetFirstSelected();
				values = item.split("|");
				str = "Enter the new name for the ";
				str+= (values[1]==1)?"folder ":"file ";
				str+= '"' + values[0] + '"';
				str=prompt(str, values[0]);
				if (!str || str==values[0]) return;
				parent.wexList.document.forms.formBuffer.command.value = cmd;
				parent.wexList.document.forms.formBuffer.parameter.value = values[1] + "?" + values[0] + "?" + str;
				parent.wexList.document.forms.formBuffer.submit();
				break;
			case "Properties":
				if (!parent.wexList.document.forms.formBuffer) return;
				if (propertiesWin!=null && !propertiesWin.closed) {
					propertiesWin.focus(); 
				} else {
					if (parent.wexList.selectedCount==0) {alert("No item(s) selected!"); return;}
					str = parent.wexList.document.forms.formBuffer.folder.value;
					str += ":" + CreateSelection();
					propertiesWin = openWin(cmd, "", 320, 280, false, false);
					createPage(propertiesWin,cmd,str,"./properties.asp");
				}
				break;
			case "Logout":
				parent.document.location = "./logout.asp";
				break;
			case "About":
				if (aboutWin!=null && !aboutWin.closed) {
					aboutWin.focus(); 
				} else {
					aboutWin = openWin(cmd, "", 350, 150, false, false);
					createPage(aboutWin,cmd,"","./list.asp");
				}
				break;
			case "Download":
				if (!(parseInt(parent.wexList.document.forms.formBuffer.access.value) & WEXPERMISSION_READ)) {
					WarnUser(cmd, "READ");
					return;
				}
				
				str = parent.wexList.document.forms.formBuffer.folder.value;
				str += "|" + param;
				
				parent.document.forms.formBuffer.action = "./download.asp";
				parent.document.forms.formBuffer.command.value = cmd;
				parent.document.forms.formBuffer.parameter.value = str;
				parent.document.forms.formBuffer.submit();
				break;
			case "GoToLogin":
				parent.document.location = "./login.asp";
				break;
			case "View":
				if (!parent.wexList.document.forms.formBuffer) return;	
				if (!(parseInt(parent.wexList.document.forms.formBuffer.access.value) & WEXPERMISSION_READ)) {
					WarnUser(cmd, "READ");
					return;
				}
				if (parent.wexList.selectedCount==0) {alert("No item(s) selected!"); return;}
				var item, values, somewin;
				item = GetFirstSelected();
				values = item.split("|");
				
				if (values[1]=="1") {alert("Selected item is a folder!"); return;}

				str = parent.wexList.document.forms.formBuffer.folder.value + values[0];
				str = str.replace(/\W/gi,"_");
				someWin = openWin(cmd + str, "", 600, 440, false, true);
				
				str = parent.wexList.document.forms.formBuffer.folder.value + "|" + values[0];
				someWin.focus(); 
				createPage(someWin,cmd,str,"./viewer.asp");
				someWin = null;
				break;	
			case "Edit":
				if (!parent.wexList.document.forms.formBuffer) return;	
				if (!(parseInt(parent.wexList.document.forms.formBuffer.access.value) & WEXPERMISSION_READ)) {
					WarnUser(cmd, "READ");
					return;
				}
				if (parent.wexList.selectedCount==0) {alert("No item(s) selected!"); return;}
				var item, values, somewin;
				item = GetFirstSelected();
				values = item.split("|");

				if (values[1]=="1") {alert("Selected item is a folder!"); return;}
			
				str = parent.wexList.document.forms.formBuffer.folder.value + values[0];
				str = str.replace(/\W/gi,"_");
				someWin = openWin(cmd + str, "", 600, 440, false, true);
				
				str = parent.wexList.document.forms.formBuffer.folder.value + "|" + values[0];
				someWin.focus();
				createPage(someWin,cmd,str,"./editor.asp");
				someWin = null;
				break;
			case "Info":
				if (infoWin!=null && !infoWin.closed) {
					infoWin.focus(); 
				} else {
					infoWin = openWin(cmd, "", 350, 280, false, true);
					createPage(infoWin,"Users","","./info.asp");
				}
				break;
			case "Preferences":
				parent.document.location = "./prefs.asp";
				break;
			case "Administration":
				parent.document.location = "./admin.asp";
				break;
		}
	}
	
	function openWin(winName, urlLoc, w, h, showStatus, isViewer) {
		l = (screen.availWidth - w)/2;
		t = (screen.availHeight - h)/2;
		features  = "toolbar=no";      // yes|no 
		features += ",location=no";    // yes|no 
		features += ",directories=no"; // yes|no 
		features += ",status=" + (showStatus?"yes":"no");  // yes|no 
		features += ",menubar=no";     // yes|no 
		features += ",scrollbars=" + (isViewer?"yes":"no");   // auto|yes|no 
		features += ",resizable=" + (isViewer?"yes":"no");   // yes|no 
		features += ",dependent";      // close the parent, close the popup, omit if you want otherwise 
		features += ",height=" + h;
		features += ",width=" + w;
		features += ",left=" + l;
		features += ",top=" + t;
		return window.open(urlLoc,winName,features);
	} 
	
	function createPage (theWin, cmd, param, action){
		parent.wexToolbar.document.forms.formPopup.action = action;
		parent.wexToolbar.document.forms.formPopup.target = theWin.name;
		parent.wexToolbar.document.forms.formPopup.command.value = cmd;
		parent.wexToolbar.document.forms.formPopup.parameter.value = param;
		parent.wexToolbar.document.forms.formPopup.submit();
	}
	
	function CheckLogin() {
		if (document.forms.formLogin.user.value == "") {
			alert("You haven't entered the username!"); 
			return false;
		} else if (document.forms.formLogin.pwd.value == "") {
			alert("You haven't entered the password!"); 
			return false;
		} else return true;
	}
	
	function Upload() {
		if (!parent.uploadSlots.document.forms.formBuffer) return;
		if (parent.uploadSlots.document.forms.formBuffer.complete) {
			parent.uploadSlots.document.location = "./upload.asp?slots=true";
			window.status = "";
			return;
		}
		parent.uploadSlots.document.forms.formBuffer.action += "?command=Upload";
		parent.uploadSlots.document.forms.formBuffer.action += "&parameter=" + document.forms.formBuffer.parameter.value;
		parent.uploadSlots.document.forms.formBuffer.submit();
		window.status = "Please wait...";
		parent.uploadButton.style.visibility = "hidden";
	}
	
	function ApplyProperties() {
		document.forms.formBuffer.command.value = "ApplyProperties";
		document.forms.formBuffer.submit();
	}
	
	function WarnUser(action, msg) {
		alert("Permission denied for action " + action.toUpperCase() + " !\nYou don't have " + msg + " permission in this folder.")		;
	}

	function AwareUser(msg) {
		window.status = msg;
		Command("Aware", msg)
	}
	
	function Choose(group,index) {
		eval("document.forms.formBuffer." + group + "[" + index + "].click()");
	}

	function ViewerCommand (cmd) {
		switch (cmd) {
			case "Info":
				var info, imgInfo;
				info = document.forms.formBuffer.info.value.split("|");
				if (document.theImage.complete)
					imgInfo = "Dimensions: " + document.theImage.width + " x " + document.theImage.height + " pixels";
				else 
					imgInfo = "Dimensions: (image load not complete)";
				alert(info[0] + "\n" + imgInfo + "\n" + info[1] + "\n" + info[2]);
				break;
			case "Reload":
				document.forms.formBuffer.submit();
				break;
		}
	}
	
	function EditorCommand (cmd) {
		switch (cmd) {
			case "Info":
				var info;
				info = document.forms.formBuffer.info.value.split("|");
				alert(info[0] + "\n" + info[1] + "\n" + info[2]);
				break;
			case "Reload":
				document.forms.formBuffer.reset();
				break;
			case "Save":
				document.forms.formBuffer.command.value = "Save";
				document.forms.formBuffer.submit();
				break;
			case "SaveAs":
				var str, arr;
				arr = document.forms.formBuffer.parameter.value.split("|");
				str = prompt("Save as the file :", arr[1]);
				if (!str || str==arr[1]) return;
				document.forms.formBuffer.parameter.value = arr[0] + "|" + str;
				document.forms.formBuffer.command.value = "SaveAs";
				document.forms.formBuffer.submit();
				break;
		}
	}

	function PrefsCommand (cmd) {
		switch (cmd) {
			case "Apply":
				document.forms.formBuffer.command.value=cmd;
				document.forms.formBuffer.submit();
				break;
			case "Reload":
				document.forms.formBuffer.command.value="";
				document.forms.formBuffer.submit();
				break;
			case "Cancel":
				document.location = "./default.asp";
				break;
		}
	}