var tc_fileExchange = {
	
	updateFileList : function(instanceName, newPath, device, nextList, nextPath ) {
	
	 	device = typeof(device) != 'undefined' ? device : 'default';

		if (newPath == '') {
		 	newPath = document.getElementById(instanceName).currentPath;
		}
		tc_fileExchange.updateProgress(instanceName, 'show');
		try { sortType = document.getElementById(instanceName).sortBy; } catch (e) { }
		try { sortDirection = document.getElementById(instanceName).sortDir; } catch (e) { }
		try { mode = document.getElementById(instanceName).viewMode; } catch (e) { }
		try { device = document.getElementById(instanceName).getAttribute('device'); } catch (e) { }
		
		if (window.XMLHttpRequest) { // Mozilla, Safari, ...
			io = new XMLHttpRequest();
		} else if (window.ActiveXObject) { // IE
			io = new ActiveXObject("Microsoft.XMLHTTP");
		}
        io.onreadystatechange = function() {  if (io.readyState == 4) { tc_fileExchange.processListReturn(io.responseText, nextList, nextPath) }; };
        var req = webPath + "/_innards/listFeed.php?" + "target=" + instanceName + "&path=" + escape(newPath) + "&sort=" + sortType + "&direction=" + sortDirection + "&mode=" + mode + "&device=" + device + "&rnd=" + Math.random();
        io.open('GET', req, true);
        io.send(null);
	},
	
	processListReturn : function(returnData, nextList, nextPath) {
		var returnParts = returnData.split('|');
		var workingDir = returnParts[2];
		var listHtml = returnParts[3];
		try { document.getElementById(returnParts[1]).innerHTML = listHtml; } catch (e) { }
		try { document.getElementById(returnParts[1]).currentPath = workingDir; } catch (e) { }
		tc_fileExchange.updateProgress(returnParts[1], 'hide');
				
		if ( typeof(nextList) != "undefined" ) {
			tc_fileExchange.updateFileList( nextList, nextPath );
		}
		
	},
	
	newFolder : function(instanceName, workingDir){
		var dirName = prompt('Folder Name', '');
		if(dirName != null) {
			if (window.XMLHttpRequest) { // Mozilla, Safari, ...
				io = new XMLHttpRequest();
			} else if (window.ActiveXObject) { // IE
				io = new ActiveXObject("Microsoft.XMLHTTP");
			}
			io.onreadystatechange = function() { if (io.readyState == 4) { tc_fileExchange.processFileOpsReturn(io.responseText) } }
			var req = webPath + "/_innards/fileOps.php?action=newFolder&target=" + instanceName + "&path=" + escape(workingDir) + "&name=" + escape(dirName);
			io.open('GET', req, true);
			io.send(null);
		}
	},

	deleteItem : function(instanceName, workingDir, fileToBin){
		var forSure = confirm("Are you SURE you wish to delete: \n\n" + fileToBin + "\n\nThis cannot be undone.");
		if(forSure != false) {
			if (window.XMLHttpRequest) { // Mozilla, Safari, ...
				io = new XMLHttpRequest();
			} else if (window.ActiveXObject) { // IE
				io = new ActiveXObject("Microsoft.XMLHTTP");
			}
			io.onreadystatechange = function() { if (io.readyState == 4) {	tc_fileExchange.processFileOpsReturn(io.responseText) } }
			var req = webPath + "/_innards/fileOps.php?action=delete&target=" + instanceName + "&path=" + escape(workingDir) + "&toDelete=" + escape(fileToBin);
			io.open('GET', req, true);
			io.send(null);
		}
	},
		
	processFileOpsReturn : function(returnData) {
		var returnParts = returnData.split('|');
		tc_fileExchange.updateFileList(returnParts[1], returnParts[2]);
	},
	
	showProgress : function(formType) {
		document.getElementById('progressMessage').style.display='block';
		if (formType == 'async') {
			window.setInterval("tc_fileExchange.getUploadProgress();", 6000);
		}
	},

	
	getUploadProgress : function() {
		// were doing async fun
		var thisSession = document.getElementById('uploadSession').value;
		if (window.XMLHttpRequest) { // Mozilla, Safari, ...
			io = new XMLHttpRequest();
		} else if (window.ActiveXObject) { // IE
			io = ''
			io = new ActiveXObject("Microsoft.XMLHTTP");
		}
		io.onreadystatechange = function() { if (io.readyState == 4) { tc_fileExchange.processUploadProgress(io.responseText) } }
		var req = "_innards/progressFeed.php?sessionId=" + thisSession + "&rnd=" + Math.random();
		io.open('GET', req, true);
		io.send(null);
		return true;
	},

	
	processUploadProgress : function(returnData) {
		var targetDiv = document.getElementById('uploadStats');
		var returnParts = returnData.split('|');
		var status = returnParts[1];
		var percent = returnParts[2];
		var current = returnParts[3];
		var total = returnParts[4];
		if (status ==  "inprogress") {
			var newMessage = total + " to upload, " + current + " complete.";
			targetDiv.innerHTML = newMessage;
			if ( percent > 98 ) { percent = 98 }
			document.getElementById('progressBarBar').style.width= percent + '%';
		}
		if (status == "complete") {
			document.location='upload.php?uploadSession=' + percent;
		}
		return true;

	},
	
	updateProgress : function(trget, disply) {
		if ( disply == 'show') {
			try { document.getElementById(trget + '_updateProgress').style.display='block'; } catch (e) { }
		} else {
			try { document.getElementById(trget + '_updateProgress').style.display='none'; } catch (e) { }
		}
	},
	
	toggleUploadBox : function(newstate) {
		if (newstate == 'show') {
			document.getElementById('uploadBoxClosed').style.display='none';
			document.getElementById('uploadBoxOpen').style.display='block';
		} else {
			document.getElementById('uploadBoxClosed').style.display='block';
			document.getElementById('uploadBoxOpen').style.display='none';
		}
	},
	
	toggleSort : function(instanceName, sortKey) {
		oldSort = document.getElementById(instanceName).sortBy;
		oldDir = document.getElementById(instanceName).sortDir;
		newDir = 'desc';
		if ( oldSort == sortKey ) {
			if ( oldDir == 'desc' ) { newDir = 'asc'; }
		} else {
			if ( sortKey == 'name' ) { newDir = 'asc' }
		}
		document.getElementById(instanceName).sortBy=sortKey;
		document.getElementById(instanceName).sortDir=newDir;
		tc_fileExchange.updateFileList(instanceName, document.getElementById(instanceName).currentPath);	
	},
	
	toggleView : function(instanceName, newMode) {
		document.getElementById(instanceName).viewMode = newMode;
		tc_fileExchange.updateFileList(instanceName, document.getElementById(instanceName).currentPath);	
	},
	
	showNewUploader : function(instanceName, basePath) {
		dateO = new Date();
		uid = dateO.getMilliseconds();
		uploadPath = document.getElementById(instanceName).currentPath;
		window.open(basePath + '/upload.php?path=' + uploadPath,uid ,'width=350,height=550,resizable=1,status=1,scrollbars=1,menubar=0');
	},
	
	showInViewer : function(path, area) {
		// window.open('_innards/viewer.php?file=' + path + '&' + area, 'fileExchangeViewer' ,'resizable=1,status=1,scrollbars=1,menubar=0');
		urlString = webPath + '/view' + path + '&' + area;
		urlString = urlString.replace(/\/+/, '/').replace(/&$/, '');
		window.open( urlString , 'fileExchangeViewer' ,'resizable=1,status=1,scrollbars=1,menubar=0');
	},
	
	playQTinPlayer : function ( parentLink, fileLink ) {
		
		var tdRef = parentLink.parentNode
		var oldContent = tdRef.innerHTML
		
		var toInsert = '<a onClick="this.parentNode.innerHTML=unescape(\'' + escape(oldContent) + '\');return false;">'
		toInsert += QT_GenerateOBJECTText( webPath + '/_stationary/buttons/playInQuicktimePlayer.mov','190','14','','bgcolor','FFFFFF','controller','false','href', fileLink, 'target','QuickTimePlayer', 'autoplay', 'true')
		toInsert += '<img style="margin-left: 5px;" src="' + webPath + '/_stationary/buttons/cancel.png" width=14 height=14/></a>'	
		tdRef.innerHTML = toInsert
	},
	
	playQTInPlace : function ( parentLink, fileLink ) {
		
		var tdRef = parentLink.parentNode
		var oldContent = tdRef.innerHTML
		
		var toInsert = QT_GenerateOBJECTText( fileLink,'200','16','','bgcolor','FFFFFF','controller','true', 'autoplay', 'true')
		toInsert += '<a onClick="this.parentNode.innerHTML=unescape(\'' + escape(oldContent) + '\');return false;"><img style="margin-left: 5px;" src="' + webPath + '/_stationary/buttons/cancel.png" width=14 height=14/></a>'	
		tdRef.innerHTML = toInsert
	},
	
	hashPw : function() {
		
		var pwField = document.getElementById('pwField')
		if ( pwField.value.length != 32 ) {
			pwField.value = hex_md5(pwField.value)
		}
		return true;	
	},

	
	addFileField : function(targetId) {
		dateO = new Date();
		uid = dateO.getMilliseconds();
		try {
			newField = document.createElement("<input name='file" + uid + "' type='file' />");
		} catch (e) {
			newField = document.createElement("input");
			newField.setAttribute("name", "file" + uid);
			newField.setAttribute("type", "file");
		}
		var targetEl = document.getElementById(targetId);
		targetEl.appendChild(newField);
	},
		
	closeUploadWindow : function(newpath) {
		window.close();
		window.opener.tc_fileExchange.refreshWindow(newpath);
	},
	
	refreshWindow : function(newPath) {
		dateO = new Date();
		uid = dateO.getMilliseconds();
		document.location = webPath + '/browse/' + newPath + '&noCache=' + uid;
	},
	
	checkUploadForm : function(formType, formObj ) {
		if ( (document.getElementById('sendEmail') && document.getElementById('sendEmail').checked==true) || document.getElementById('forceSendEmail') ) {
			// we have email stuff to check
			if ( document.getElementById('to') && (!tc_fileExchange.checkEmail(document.getElementById('to').value)) ) {
				alert('Please enter a valid "to" address.');
				return false;
			}			
			if ( document.getElementById('from') && (!tc_fileExchange.checkEmail(document.getElementById('from').value)) ) {
				alert('Please check your email address.');
				return false;
			}
			if ( document.getElementById('toFilter') ) {
				var validEmails = document.getElementById('toFilter').value.split(' ');
				var matchCount = 0;
				for (var i=0; i<validEmails.length; i++) {
					matchExpr = new RegExp(validEmails[i] , 'i')
					if ( document.getElementById('to').value.match( matchExpr )) { matchCount++ }
				}
				if (matchCount == 0) {
					alert('desitnation address not allowed, only emails to ' + document.getElementById('toFilter').value);
					return false;
				}
			}	
		}
		
		
		if ( checkExtensions == 1 ) {
			for( i=0; i< formObj.elements.length; i++ ) {			
				if ( formObj.elements[i].type == "file" ) {			
					var name = formObj.elements[i].value
					if ( name == '' ) { continue; }
					var ext = name.match(/[a-zA-Z0-9]+$/)					
					if ( allowedExtensions.search(' ' + ext + ' ') == -1 ) {
						alert("Sorry, you can only upload files of type:\n\n" + allowedExtensions)
						return false
					}
				}
			}
		}
		
		window.scroll(0,0)
		tc_fileExchange.showProgress(formType);
	}, 
	
	checkEmail : function(email) {
   		return (email.indexOf(".") > 2) && (email.indexOf("@") > 0);
	},
	
	toggleEmailFields : function() {
		if (document.getElementById('emailFields') ) {
			thatDiv = document.getElementById('emailFields')
			if (thatDiv.style.display=='none') {
				thatDiv.style.display='block'
			} else {
				thatDiv.style.display='none'
			}
		}
	},
	
	switchViewerAjax : function(chooser, area) {
		if (window.XMLHttpRequest) { // Mozilla, Safari, ...
			io = new XMLHttpRequest();
		} else if (window.ActiveXObject) { // IE
			io = new ActiveXObject("Microsoft.XMLHTTP");
		}
		io.onreadystatechange = function() { if (io.readyState == 4) { tc_fileExchange.handleViewerSwitchReturn(io.responseText) } }
		// var req = "fileFeed.php?htmlmode=on&area=" + area + "&path=" + escape(chooser.options[chooser.selectedIndex].value);
		var req = "../file/" + escape(chooser.options[chooser.selectedIndex].value) + "&htmlmode=on&area=" + area;
		io.open('GET', req, true);
		io.send(null);
	},
	
	switchViewer : function(chooser, area) {
		if (area == 'user') {
			// document.location = "viewer.php?file=" + escape(chooser.options[chooser.selectedIndex].value);
			document.location = webPath + "/_innards/viewerFile.php?file=" + escape(chooser.options[chooser.selectedIndex].value);
		} else {
			//document.location = "viewer.php?file=" + escape(chooser.options[chooser.selectedIndex].value) + "&area=" + area;
			document.location = webPath + "/_innards/viewerFile.php?file=" + escape(chooser.options[chooser.selectedIndex].value) + "&area=" + area;
		}
	},
	

	handleViewerSwitchReturn : function(returnData) {
		document.getElementById('viewer').innerHTML = returnData;
	},
	
	toggleCheckBox : function( img, triState ) {
		
		var oldVal = img.attributes.boxval.value
		var dataField = document.getElementById(img.id + "Field")
		
		if ( oldVal == 0) {
				img.attributes.boxval.value = 1
				img.src = "../_stationary/buttons/checkBoxOn.png"
		}
		
		if ( oldVal == 1) {
				if ( triState == 1 ) {
					img.attributes.boxval.value = ''
					img.src = "../_stationary/buttons/checkBoxDisabled.png"
				} else {
					img.attributes.boxval.value = '0'
					img.src = "../_stationary/buttons/checkBoxOff.png"
				}
		}
		
		if ( oldVal == '') {
				img.attributes.boxval.value = '0'
				img.src = "../_stationary/buttons/checkBoxOff.png"
		}
		
		dataField.value = img.attributes.boxval.value
	
	},
	
	toggleFieldDiv : function( id ) {
	
		var grpImg = document.getElementById( id + "Img" )
		var grpBody = document.getElementById( id + "Body" )
		
		if ( grpBody.style.display == "block" ) {
		
			grpBody.style.display = "none"
			grpImg.src = "../_stationary/buttons/fieldGroupClosed.png"
		
		} else {
		
			grpBody.style.display = "block"
			grpImg.src = "../_stationary/buttons/fieldGroupOpen.png"

		}
		
	},
	
	confirmUserDelete : function( link ) {
	
		var uid = link.attributes.userId.value;
		var name = link.attributes.userName.value;
	
		if ( confirm("Are you sure you wish to delete '" + name + "'?\n\nThis cannot be undone, but their files will remain on the system until deleted manually.") ) {
			document.location = "users.php?delete=" + uid	
		}
	
	},
	
	checkUserEdit : function () {
	
		var editUser = document.getElementById('username').value
		var adminUser = document.getElementById('adminUser').value
		var adminState = document.getElementById('canSeeAllUsersField').value
		var defaultAdminState = document.getElementById('defaultAdminState').value
				
		if ( (editUser == adminUser) && (adminState == "" && defaultAdminState == 0) ) {
			alert("You are editing yourself, youve asked to revoke your own admin priviledges, that would be a BAD thing.");
			return false;
		}
		if ( (editUser == adminUser) && (adminState == 0) ) {
			alert("You are editing yourself, youve asked to revoke your own admin priviledges, that would be a BAD thing.");
			return false;
		}
		
		
		var pw = document.getElementById('newPassword').value
		var newPw = document.getElementById('confirmNewPassword').value
		
		if ( pw != newPw ) {
			alert("New password fields dont match. please check new password.")
			return false
		}
		
		var editType = document.getElementById('dataPosted').value
		if ( editType == "new" && pw == "" ) {
			alert("Missing password, all users must have a password...");
			return false
		}
		
		
		return true;
	
	},
	
	
	importOldStyleUser : function( link ) {
	
		var userName = link.attributes.userName.value;
		
		var newPw = prompt("Enter a new password for " + userName)
		if ( newPw == "" ) { return; }
		var newPwC = prompt("Confirm new password for " + userName)
		if ( newPwC != newPw ) {
			alert("Sorry, passwords dont match...")
			return;
		}

		var hashPw = hex_md5(newPw)
		document.location = "import.php?user=" + userName  + "&pw=" + hashPw

	}
	
}
