var AJAXFTP = {
	
	response: document.getElementById("ajaxFTPResponse"),
	browser: document.getElementById("ajaxFTPBrowser"),
	currentPath: "",
	currentFile: "",
	currentFileNode: "",
	currentSlideDown: "",
	
	getPreviousPath: function() {
		if (AJAXFTP.currentPath == "" || AJAXFTP.currentPath == null) {
			return false;
		}
		return AJAXFTP.currentPath.substring(0, AJAXFTP.currentPath.lastIndexOf("/"));
	},
	
	connect: function(directory, highlightFile) {
		AJAXFTP.clear();
		
		aju = document.getElementById("ajaxFTPUser").value;
		ajp = document.getElementById("ajaxFTPPassword").value;
		ajs = document.getElementById("ajaxFTPServer").value;
		
		pa = "server=" + ajs + "&password=" + ajp + "&user=" + aju;
		if (directory) {
			pa += "&directory=" + directory;
		}	

		ar = new Ajax.Request(ajaxFTPBaseURL + "/ajaxftp/process.xml.php", {parameters: pa, onSuccess: function(xm) {
			xmr = xm.responseXML;
			tRes = xmr.getElementsByTagName("result");
			tMsg = xmr.getElementsByTagName("message");
			if (tRes[0].firstChild.nodeValue == 0) {
				AJAXFTP.response.className = "ajaxFTPError";
				AJAXFTP.hideDetails();
			} else {
				AJAXFTP.response.className = "ajaxFTPSuccess";
				AJAXFTP.showDetails();
				AJAXFTP.setInfoPane('directory');
				
				
				itemNodes = xmr.getElementsByTagName("node");
				brs = AJAXFTP.browser; 
				var _toHighlight;
				var _scrollTo = 0;
				var _scrollToSet = 0;
				setTimeout(function() {
					if (directory) {
						upNode = document.createElement("DIV");
						upNode.className = "up";
						upNode.onclick = function() {
							prevPath = AJAXFTP.getPreviousPath();
							AJAXFTP.connect(prevPath);
						}
						AJAXFTP.currentPath = directory;
						upNode.innerHTML = 'Up a level';
						brs.appendChild(upNode);
						document.getElementById("lblFTPDirectory").innerHTML = directory.replace(/\//gi," /");

					} else {
						AJAXFTP.currentPath = "";
						document.getElementById("lblFTPDirectory").innerHTML = "";
					}
					
					document.getElementById("files-current-directory").innerHTML = itemNodes.length + " item(s)";
					document.getElementById("btn-remove-directory").disabled = (itemNodes.length == 0) ? false : true;
					
					for (i = 0; i < itemNodes.length; i++) {
						nodeObj = document.createElement("DIV");
						try {
							itemType = itemNodes[i].attributes["type"].value;
						} catch (ex) {
							itemType = itemNodes[i].getAttribute("type");
						}
						nodeObj.className = itemType;
						
						highlightClass = '';
						if (highlightFile) {
							if (highlightFile == itemNodes[i].firstChild.nodeValue) {
								_toHighlight = i;
								_scrollToSet = _scrollTo;
								highlightClass = " class=\"highlighted\" ";
							}
						}
						
						/*
						nodeObj.innerHTML = (itemType == "directory") ? '<a ' + highlightClass + ' id="ajn' + i +'" href="javascript:AJAXFTP.connect(\'' + AJAXFTP.currentPath + "/" + itemNodes[i].firstChild.nodeValue + '\')">' + itemNodes[i].firstChild.nodeValue + '</a>' 
						: '<a ' + highlightClass + ' id="ajn' + i +'" href="javascript:AJAXFTP.downloadFile(\'' + AJAXFTP.currentPath + "/" + itemNodes[i].firstChild.nodeValue + '\')">' + itemNodes[i].firstChild.nodeValue + '</a>';
						*/
						
						attribs = '';
						if (itemType == 'directory') {
							attribs = 'date="' + itemNodes[i].getAttribute("date") + '" time="' + itemNodes[i].getAttribute("time") + '"';
						} else {
							attribs = 'size="' + itemNodes[i].getAttribute("size") + '" date="' + itemNodes[i].getAttribute("date") + '" time="' + itemNodes[i].getAttribute("time") + '"';
						}
						
						nodeObj.innerHTML = "<span " + attribs + " id=\"ajn" + i + "\" " + highlightClass + ">" + itemNodes[i].firstChild.nodeValue + "</span>";
						if (itemType == "directory") {
							nodeObj.onclick = function() {
								sp = this.getElementsByTagName("SPAN");
								AJAXFTP.connect(AJAXFTP.currentPath + "/" + sp[0].firstChild.nodeValue);
							}
						} else {
							nodeObj.onclick = function() {
								sp = this.getElementsByTagName("SPAN");
								AJAXFTP.selectFile(this, AJAXFTP.currentPath + "/" + sp[0].firstChild.nodeValue);
							}
						}
						
						brs.appendChild(nodeObj);
						_scrollTo += nodeObj.offsetHeight;
						
						
						if (_toHighlight == i) {
							_scrollToSet = _scrollTo - nodeObj.offsetHeight;
						}
						
					}
					
					if (_toHighlight) {
						brs.scrollTop = _scrollToSet;
						new Effect.Highlight(document.getElementById("ajn" + _toHighlight));
					}

					
				},
				50);
				
				connectButton = document.getElementById("btnConnect");
				/*
				addButton = document.getElementById("btnAdd");
				addButton.style.display = "inline";
				addButtonDir = document.getElementById("btnAddDirectory");
				addButtonDir.style.display = "inline";
				*/
				connectButton.style.display = "none";
				disconnectButton = document.getElementById("btnDisconnect");
				disconnectButton.style.display = "inline";
				disconnectButton.onclick = function() {
					AJAXFTP.clear();
					AJAXFTP.currentPath = "";
					AJAXFTP.hideDetails();
					disconnectButton.style.display = "none";
					connectButton.style.display = "inline";
					//addButton.style.display = "none";
					//addButtonDir.style.display = "none";
					document.getElementById("ajaxFTPAddForm").style.display = "none";
					document.getElementById("ajaxFTPAddDirectoryForm").style.display = "none";
					document.getElementById("ajaxFTPRenameDirectoryForm").style.display = "none";

					document.getElementById("btnAdd").onclick = function() {
						AJAXFTP.addFile();
					};
				}							
			}
			AJAXFTP.response.innerHTML = tMsg[0].firstChild.nodeValue;
		}});
	},
	
	selectFile: function(node, path) {
		node.className = "selected-file";
		if (AJAXFTP.currentFile != path && AJAXFTP.currentFile != "") {
			AJAXFTP.currentFileNode.className = "file";
		}
		AJAXFTP.currentFileNode = node;
		AJAXFTP.currentFile = path;
		AJAXFTP.setInfoPane('file');
		fip = document.getElementById("file-info");
		sp = node.getElementsByTagName("SPAN");
		fip.innerHTML = "<strong>File Size</strong>: " + sp[0].getAttribute("size") + "<br/>";
		fip.innerHTML += "<strong>Modified</strong>: " + sp[0].getAttribute("date") + " " + sp[0].getAttribute("time");
		
	},
	
	downloadFile: function() {
		path = AJAXFTP.currentFile;
		
		aju = document.getElementById("ajaxFTPUser").value;
		ajp = document.getElementById("ajaxFTPPassword").value;
		ajs = document.getElementById("ajaxFTPServer").value;
		
		pa = "server=" + ajs + "&password=" + ajp + "&user=" + aju + "&filePath=" + path;
		AJAXFTP.response.innerHTML = "Attempting to Download File...";
		ar = new Ajax.Request("ajaxftp/process.xml.php", {parameters: pa, onSuccess: function(xm) {
			xmr = xm.responseXML;
			tRes = xmr.getElementsByTagName("result");
			tMsg = xmr.getElementsByTagName("message");
			tFile = xmr.getElementsByTagName("file");
			if (tRes[0].firstChild.nodeValue == 0) {
				AJAXFTP.response.className = "ajaxFTPError";
			} else {
				AJAXFTP.response.className = "ajaxFTPSuccess";
				// file is available
				// pass the file through a php script that will force download
				location.href = "ajaxftp/force_download.php?file=" + tFile[0].firstChild.nodeValue;
			}
			AJAXFTP.response.innerHTML = tMsg[0].firstChild.nodeValue;
		}});
	},
	
	setInfoPane: function(state) {
		document.getElementById("info-pane-inner").style.display="block";
		switch(state) {
			case "file":
				document.getElementById("info-current-directory").style.display = "none";
				document.getElementById("directory-controls").style.display = "none";
				document.getElementById("files-current-directory").style.display = "none";
				document.getElementById("directory-info").style.display = "none";
				
				document.getElementById("file-info").style.display = "block";
				document.getElementById("title-selected-file").style.display = "block";
				document.getElementById("file-controls").style.display = "block";
			
				break;
		
			default: // directory
				document.getElementById("title-selected-file").style.display = "none";
				document.getElementById("file-controls").style.display = "none";
				document.getElementById("file-info").style.display = "none";
				
				document.getElementById("directory-info").style.display = "block";
				document.getElementById("info-current-directory").style.display = "block";
				document.getElementById("directory-controls").style.display = "block";
				document.getElementById("files-current-directory").style.display = "block";
			
				break;
		}	
	},
	
	addFile: function() {
		document.getElementById("ajaxFTPAddDirectoryForm").style.display = "none";
		document.getElementById("ajaxFTPRenameDirectoryForm").style.display = "none";
		document.getElementById("ajaxFTPRenameFileForm").style.display = "none";
		if (AJAXFTP.currentSlideDown == "") {
			Effect.SlideDown('ajaxFTPAddForm',  0.4);
		} else {
			document.getElementById("ajaxFTPAddForm").style.display = "block";
		}
	
		AJAXFTP.currentSlideDown = "file";
	},
	
	doAddFile: function() {
		document.getElementById("ajaxFTPProcessTask").value = "addFile";
		document.getElementById("ajaxFTPForm").action = document.getElementById("ajaxFTPProcessFileAdd").value;
		document.getElementById("ajaxFTPForm").target = "ajaxFTPIFrame";
		document.getElementById("ajaxFTPDirectory").value = AJAXFTP.currentPath;
		document.getElementById("ajaxFTPForm").onsubmit = function() {};
		document.getElementById("ajaxFTPForm").submit();
	},
	
	doAddDirectory: function() {
		document.getElementById("ajaxFTPProcessTask").value = "addDirectory";
		document.getElementById("ajaxFTPForm").action = document.getElementById("ajaxFTPProcessFileAdd").value;
		document.getElementById("ajaxFTPDirectory").value = AJAXFTP.currentPath;
		document.getElementById("ajaxFTPForm").target = "ajaxFTPIFrame";
		document.getElementById("ajaxFTPForm").onsubmit = function() {};
		document.getElementById("ajaxFTPForm").submit();
	},
	
	doRenameDirectory: function() {
		document.getElementById("ajaxFTPProcessTask").value = "renameDirectory";
		document.getElementById("ajaxFTPForm").action = document.getElementById("ajaxFTPProcessFileAdd").value;
		document.getElementById("ajaxFTPDirectory").value = AJAXFTP.currentPath;
		document.getElementById("ajaxFTPForm").target = "ajaxFTPIFrame";
		document.getElementById("ajaxFTPForm").onsubmit = function() {};
		document.getElementById("ajaxFTPForm").submit();
	},
	
	doRenameFile: function() {
		document.getElementById("ajaxFTPProcessTask").value = "renameFile";
		document.getElementById("ajaxFTPForm").action = document.getElementById("ajaxFTPProcessFileAdd").value;
		document.getElementById("ajaxFTPFilePath").value = AJAXFTP.currentFile;
		document.getElementById("ajaxFTPForm").target = "ajaxFTPIFrame";
		document.getElementById("ajaxFTPForm").onsubmit = function() {};
		document.getElementById("ajaxFTPForm").submit();
	},
	
	addDirectory: function() {
		document.getElementById("ajaxFTPAddForm").style.display = "none";
		document.getElementById("ajaxFTPRenameDirectoryForm").style.display = "none";
		document.getElementById("ajaxFTPRenameFileForm").style.display = "none";
		if (AJAXFTP.currentSlideDown == "") {
			Effect.SlideDown('ajaxFTPAddDirectoryForm',  0.4);
		} else {
			document.getElementById("ajaxFTPAddDirectoryForm").style.display = "block";
		}
		
		AJAXFTP.currentSlideDown = "directory";
		
	},
	
	renameDirectory: function() {
		document.getElementById("ajaxFTPAddForm").style.display = "none";
		document.getElementById("ajaxFTPAddDirectoryForm").style.display = "none";
		document.getElementById("ajaxFTPRenameFileForm").style.display = "none";
		if (AJAXFTP.currentSlideDown == "") {
			Effect.SlideDown('ajaxFTPRenameDirectoryForm',  0.4);
		} else {
			document.getElementById("ajaxFTPRenameDirectoryForm").style.display = "block";
		}
		
		AJAXFTP.currentSlideDown = "rename_directory";
		
	},
	
	renameFile: function() {
		document.getElementById("ajaxFTPAddForm").style.display = "none";
		document.getElementById("ajaxFTPAddDirectoryForm").style.display = "none";
		document.getElementById("ajaxFTPRenameDirectoryForm").style.display = "none";
		if (AJAXFTP.currentSlideDown == "") {
			Effect.SlideDown('ajaxFTPRenameFileForm',  0.4);
		} else {
			document.getElementById("ajaxFTPRenameFileForm").style.display = "block";
		}
		
		AJAXFTP.currentSlideDown = "rename_file";
		
	},
	
	removeFile: function() {
		if (confirm('Remove selected file?') && AJAXFTP.currentFile != "") { 
			aju = document.getElementById("ajaxFTPUser").value;
			ajp = document.getElementById("ajaxFTPPassword").value;
			ajs = document.getElementById("ajaxFTPServer").value;
			pa = "server=" + ajs + "&password=" + ajp + "&user=" + aju + "&filePath=" + AJAXFTP.currentFile + "&task=rmfile";
				
			ar = new Ajax.Request(ajaxFTPBaseURL + "/ajaxftp/process.xml.php", {parameters: pa, onSuccess: function(xm) {
				xmr = xm.responseXML;
				tRes = xmr.getElementsByTagName("result");
				tMsg = xmr.getElementsByTagName("message");
				if (tRes[0].firstChild.nodeValue == 0) {
					AJAXFTP.response.className = "ajaxFTPError";
					AJAXFTP.response.innerHTML = tMsg[0].firstChild.nodeValue;
					
				} else {
					AJAXFTP.response.className = "ajaxFTPSuccess";
					AJAXFTP.response.innerHTML = tMsg[0].firstChild.nodeValue;
					setTimeout(function() {
						AJAXFTP.connect(AJAXFTP.currentPath);	
					}, 1000);
				}
			}});		
		}	
	},
	
	removeDirectory: function() {
		if (confirm('Remove current directory?')) { 
			aju = document.getElementById("ajaxFTPUser").value;
			ajp = document.getElementById("ajaxFTPPassword").value;
			ajs = document.getElementById("ajaxFTPServer").value;
			pa = "server=" + ajs + "&password=" + ajp + "&user=" + aju + "&directory=" + AJAXFTP.currentPath + "&task=rmdir";
				
			ar = new Ajax.Request(ajaxFTPBaseURL + "/ajaxftp/process.xml.php", {parameters: pa, onSuccess: function(xm) {
				xmr = xm.responseXML;
				tRes = xmr.getElementsByTagName("result");
				tMsg = xmr.getElementsByTagName("message");
				if (tRes[0].firstChild.nodeValue == 0) {
					AJAXFTP.response.className = "ajaxFTPError";
					AJAXFTP.response.innerHTML = tMsg[0].firstChild.nodeValue;
					
				} else {
					AJAXFTP.response.className = "ajaxFTPSuccess";
					AJAXFTP.response.innerHTML = tMsg[0].firstChild.nodeValue;
					setTimeout(function() {
						AJAXFTP.connect(AJAXFTP.getPreviousPath());	
					}, 1000);
				}
			}});
		}
	},
	
	toggleAddLocal: function(btnObj) {
		if (btnObj.checked) {
			ajaf = document.getElementById("ajaxFTPAddTypeContent");
			ajaf.innerHTML = '<input type="file" name="ajaxFTPAddSRC" id="ajaxFTPAddSRC" />';
		}
	},
	
	toggleAddRemote: function(btnObj) {
		if (btnObj.checked) {
			ajaf = document.getElementById("ajaxFTPAddTypeContent");
			ajaf.innerHTML = '<input type="text" name="ajaxFTPAddRemote" id="ajaxFTPAddRemote" value="http://" />';
		}	
	},

	clear: function() {
		AJAXFTP.response.innerHTML = "&nbsp;";
		document.getElementById("info-pane-inner").style.display = "none";
		AJAXFTP.currentSlideDown = "";
		document.getElementById("ajaxFTPAddForm").style.display = "none";
		document.getElementById("ajaxFTPAddDirectoryForm").style.display = "none";
		document.getElementById("ajaxFTPRenameDirectoryForm").style.display = "none";
		document.getElementById("ajaxFTPRenameFileForm").style.display = "none";		
		brs = AJAXFTP.browser;
		if (document.all) { // stupid IE
			currentLength= brs.childNodes.length;
			for (x = 0; x < currentLength; x++) {
				if (brs.childNodes[x]) {
					brs.removeChild(brs.childNodes[x]);
				}
			}
		}
		brs.innerHTML = "";
	},
	
	showDetails: function() {
		rows = document.getElementsByTagName("TR");
		for (j = 0; j < rows.length; j++) {
			if (rows[j].className == "ftp-detail") {
				rows[j].style.display = (document.all) ? "block" : "table-row";
			} else if (rows[j].className == "ftp-disconnected") {
				rows[j].style.display = "none";
			}
		}
		document.getElementById("lblFTPDirectory").style.display = "inline";
	},
	
	hideDetails: function() {
		rows = document.getElementsByTagName("TR");
		for (j = 0; j < rows.length; j++) {
			if (rows[j].className == "ftp-detail") {
				rows[j].style.display = "none";
			} else if (rows[j].className == "ftp-disconnected") {
				rows[j].style.display = (document.all) ? "block" : "table-row";
			}
		}
	}

}