// JavaScript Document
var oUserOptions = { 
	success:       	fInsertUser,  								// post-submit callback 
	url:        	"includes/asp/ajaxSetUserData.asp?date="+Date(),         // override for form's 'action' attribute 
	dataType:  		'json',        								// 'xml', 'script', or 'json' (expected server response type) 
	type:      		'post'        								// 'get' or 'post', override for form's 'method' attribute 

	// other available options: 
	//clearForm: 	true,	      								// clear all form fields after successful submit 
	//beforeSubmit: showRequest,  								// pre-submit callback 
	//resetForm: 	true       									// reset the form after successful submit 

	// $.ajax options can be used here too, for example: 
	//timeout:   3000 
}; 

var oUploadOptions = { 
	success:       	fUploadFiles,  								// post-submit callback 
	url:        	"includes/asp/ajaxUploadFiles.asp?date="+Date(),         // override for form's 'action' attribute 
	dataType:  		'json',        								// 'xml', 'script', or 'json' (expected server response type) 
	type:      		'post',        								// 'get' or 'post', override for form's 'method' attribute 
	iframe:			true,
	resetForm: 		true       									// reset the form after successful submit 

	// other available options: 
	//clearForm: 	true,	      								// clear all form fields after successful submit 
	//beforeSubmit: showRequest,  								// pre-submit callback 

	// $.ajax options can be used here too, for example: 
	//timeout:   3000 
}; 

var oLoginOptions = { 
	success:       	fLoginUser,  								// post-submit callback 
	url:        	"includes/asp/ajaxLoginUser.asp?date="+Date(),         // override for form's 'action' attribute 
	dataType:  		'json',        								// 'xml', 'script', or 'json' (expected server response type) 
	type:      		'post',        								// 'get' or 'post', override for form's 'method' attribute 
	resetForm: 		false       									// reset the form after successful submit 

	// other available options: 
	//clearForm: 	true,	      								// clear all form fields after successful submit 
	//beforeSubmit: showRequest,  								// pre-submit callback 

	// $.ajax options can be used here too, for example: 
	//timeout:   3000 
}; 

function fErrorAlert(sErrorMessage){
	$.blockUI({message: '<span class="errortext">' + sErrorMessage + '</span><br /><br /><input type="button" id="btnOk" value="Ok" />'});
	$('#btnOk').click(function(){
		$.unblockUI();
	})
}

function fLoginUser(jData){
	if (jData.errorcode == "0") {
		$.blockUI({
			message: '<h1><img src="images/ajax-loader.gif" align="absmiddle" /> Logging you in...</h1>'
		});
		location.href="index.asp";
	} else {
		fErrorAlert(jData.errormessage);
	}	
}

function fClearAddUser(){
	$('#frmUser #txtCompanyName').val('');
	$('#frmUser #txtUsername').val('');
	$('#frmUser #txtPassword').val('');
	$('#frmUser #selUserLevel').val('');
	$('#frmUser #selFolder').val('');
	$('#frmUser #txtUserId').val(0);
	$('#frmUser').slideDown('slow');
}
function fFillInUserData(data){
	$('#frmUser #txtCompanyName').val(data[0].companyname);
	$('#frmUser #txtUsername').val(data[0].username);
	$('#frmUser #txtPassword').val(data[0].password);
	$('#frmUser #selUserLevel').val(data[0].userlevel);
	$('#frmUser #selFolder').val(data[0].homefolder);
	$('#frmUser #txtUserId').val(data[0].userid);
	$('#frmUser').slideDown('slow');
	$.unblockUI();
}
function fInsertUser(data){
	if (data.errorcode == "0") {
		var nUserId = data.userid;
		var sType = data.type;
		if (sType == 'insert'){
			$.post("includes/asp/ajaxGetUserData.asp?date="+Date(), { uid: nUserId }, function(jData){
				var sNewRow = "";
				sNewRow += '<tr id="UserRow' + jData[0].userid + '">';
				sNewRow += '<td>'+jData[0].companyname+'</td>';
				sNewRow += '<td>'+jData[0].username+'</td>';
				if (jData[0].userlevel == 10){
					sNewRow += '<td>Administrator</td>';
				} else {
					sNewRow += '<td>User</td>';
				}
				sNewRow += '<td>'+jData[0].homefolder+'</td>';
				if (jData[0].lastlogin != null){
					sNewRow += '<td>'+jData[0].lastlogin+'</td>';
				} else {
					sNewRow += '<td>-</td>';
				}
				sNewRow += '<td class="right"><a class="jqEditUser" rel="' + jData[0].userid + '" href="#" title="Edit User"><img src="images/user__pencil.png" alt="Edit User" /></a>&nbsp;&nbsp;&nbsp;<a class="jqDeleteUser" rel="' + jData[0].userid + '" href="#" title="Delete User"><img src="images/user__minus.png" alt="Delete User" /></a></td>';
				sNewRow += '</tr>';
				if ($("#tblUsers td:contains('There are no users currently')").length == 0){
					$('#tblUsers tbody').html($('#tblUsers tbody').html() + sNewRow);
				} else {
					$('#tblUsers tbody').html(sNewRow);
				}
				fUserEvents();
				if ($('#tblUsers tbody tr').length > 1){
					$("#tblUsers").trigger("update"); 
					var sorting = [[0,0]]; 
					$("#tblUsers").trigger("sorton",[sorting]); 
				}
				$.unblockUI();
				$('#UserRow'+jData[0].userid).slideDown();
				$('#frmUser').slideUp('slow');				
			}, "json");
		}
		if (sType == 'update'){
			$.post("includes/asp/ajaxGetUserData.asp?date="+Date(), { uid: nUserId }, function(jData){
				var sNewRow = '';
				$('#UserRow' + jData[0].userid + ' td:eq(0)').html(jData[0].companyname);
				$('#UserRow' + jData[0].userid + ' td:eq(1)').html(jData[0].username);
				if (jData[0].userlevel == 10){
					$('#UserRow' + jData[0].userid + ' td:eq(2)').html('Administrator');
				} else {
					$('#UserRow' + jData[0].userid + ' td:eq(2)').html('User');
				}
				$('#UserRow' + jData[0].userid + ' td:eq(3)').html(jData[0].homefolder);
				if (jData[0].lastlogin != null){
					$('#UserRow' + jData[0].userid + ' td:eq(4)').html(jData[0].lastlogin);
				}else{
					$('#UserRow' + jData[0].userid + ' td:eq(4)').html('-');
				}
				if ($('#tblUsers tbody tr').length > 1){					
					$("#tblUsers").trigger("update"); 
					var sorting = [[0,0],[1,0]]; 
					$("#tblUsers").trigger("sorton",[sorting]); 
				}
				$.unblockUI();
				$('#frmUser').slideUp('slow');
			}, "json");
		}
		$.unblockUI();
	} else {
		fErrorAlert(data.errormessage);
	}
}

function fDropUserRow(jData){
	if (jData.errorcode == "0") {
		var nUserId = jData.userid;
		$.unblockUI();
		$('#UserRow'+nUserId).fadeOut('slow',function(){
			$(this).remove();
			if ($('#tblUsers tbody tr').length == 0){
				var sNewRow = '<tr id="norow"><td colspan="6">There are no users currently.</td></tr>';
				$('#tblUsers tbody').append(sNewRow);
			}
		});
	} else {
		fErrorAlert(jData.errormessage);
	}	
}
function fUserEvents(){
	$('a.jqEditUser').click(function(){
		fEditUser($(this).attr('rel'));
		return false;
	});

	$('a.jqDeleteUser').click(function(){
		fDeleteUser($(this).attr('rel'));
		return false;
	});
}
function fEditUser(nUserId){
	$('#frmUser').slideUp('slow', function(){
		$('#frmUser h1').html('Edit User');
		$.blockUI();
		$.post("includes/asp/ajaxGetUserData.asp?date="+Date(), { uid: nUserId }, fFillInUserData, "json");
	});
}

function fDeleteUser(nUserId){
	var nAnswer = confirm('Are you sure you want to delete this User?');
	if (nAnswer){
		$('#frmUser').slideUp('slow');
		$.blockUI();
		$.post("includes/asp/ajaxDeleteUserData.asp?date="+Date(), { uid: nUserId }, fDropUserRow, "json");
	}
}

function fAddFolder(data){
	if (data.errorcode == "0") {
		var sFName = data.foldername;
		if ($("#selFolder").length > 0){
			sFName = '\\'+sFName+'\\';
			$("#selFolder").addOption(sFName, sFName); 
			$("#selFolder").sortOptions();
			$("#selFolder").val(sFolderName);
		} else {
			sFName = '\\'+sFName;
			$.post("includes/asp/ajaxGetFolderList.asp?date="+Date(), { sFolderName: sFName }, function(responseText){
				$('#bodycontentfiles div.leftcolumn div#folders').html(responseText);
				fFolderEvents();
				$('a.jqSelectFolder[rel="'+sFName+'"]').click();
			}, "html");
		}
		$.unblockUI();
	} else {
		fErrorAlert(data.errormessage);
	}
}

function fRenameFolder(jData){
	if (jData.errorcode == "0") {
		var sOldFolderName = jData.foldername;
		var sNewFolderName = jData.newfoldername;
		$('#currentfilepath').html(sNewFolderName);
		$.post("includes/asp/ajaxGetFolderList.asp?date="+Date(), { sFolderName: sNewFolderName }, function(responseText){
			$('#bodycontentfiles div.leftcolumn div#folders').html(responseText);
			fFolderEvents();
			$.unblockUI();
		}, "html");
	} else {
		fErrorAlert(jData.errormessage);
	}
}

function fFolderEvents(){
	$('a.jqSelectFolder').click(function(){
		fFolderSelect(this)
		return false;
	});
}
function fFolderSelect(oATAG){
	$('#folderlist li span a').each(function(nIndex){
		if (oATAG.rel == this.rel){
			$(this).parent('span').attr('class','folderopen');
		} else {
			$(this).parent('span').attr('class','folder');
		}
	});
	$.blockUI();
	$.post("includes/asp/ajaxGetFilesTable.asp?date="+Date(), { sFolderName: oATAG.rel }, function(responseText){
		$('#bodycontentfiles div.rightcolumn div#files').html(responseText);
		fFileEvents();
		$('#currentfilepath').html(oATAG.rel);
		$('a.jqAddFolder').attr('rel',oATAG.rel);
		$('a.jqDeleteFolder').attr('rel',oATAG.rel);
		$.unblockUI();
	}, "html");
}
function fDropFolderItem(jData){
	if (jData.errorcode == "0") {
		var sFName = jData.foldername;
		$('#folderlist li:has("span.folderopen")').slideUp('normal',function(){
			$(this).remove();
			$('#folderlist li').removeClass('last');
			$('#folderlist li:last').addClass('last');
			$('a.jqSelectFolder:eq(0)').click();
		});
	} else {
		fErrorAlert(jData.errormessage);
	}
}
function fTableSort(){
	if ($("#tblUsers").length > 0){
		$("#tblUsers").tablesorter();
	}
	if ($("#tblFiles").length > 0){
		$("#tblFiles").tablesorter();
	}
}
function fUploadFiles(jData){
	if (jData.errorcode == "0") {
		var sFName = jData.foldername;
		oUploadOptions.url="includes/asp/ajaxUploadFiles.asp?date="+Date();
		$.post("includes/asp/ajaxGetFilesTable.asp?date="+Date(), { sFolderName: sFName }, function(responseText){
			$('#bodycontentfiles div.rightcolumn div#files').html(responseText);
			fFileEvents();
			$('#frmUpload div.jqFileRow:gt(0)').slideUp('normal');
			$.unblockUI();
		}, "html");
	} else {
		fErrorAlert(jData.errormessage);
	}
}
function fFileEvents(){
	$('a.jqSelectFile').click(function(){
		var sFolderName = $('#currentfilepath').html();
		var sFileName = $(this).html();
		var sOptions = "height=1,width=1,top=0,left=0,toolbar=no,status=no,menubar=no,location=no";
		location.href = 'download.asp?foldername='+escape(sFolderName)+'&filename='+escape(sFileName);
		return false;
	});
	$('a.jqRenameFile').click(function(){
		var sFolderName = $('#currentfilepath').html();
		var sFileName = this.title.split(": ")[1];
		var nRowId = this.rel;
		var sNewFileName = prompt('What would you like to rename the file to?');
		if (sNewFileName){
			var arrFileName = sFileName.split(".");
			arrFileName[0] = sNewFileName;
			sNewFileName = arrFileName.join('.');
			$.blockUI();
			$.post("includes/asp/ajaxRenameFile.asp?date="+Date(), { foldername: sFolderName, filename: sFileName, newfilename: sNewFileName }, function(jData){
				if (jData.errorcode == "0"){
					$.post("includes/asp/ajaxGetFilesTable.asp?date="+Date(), { sFolderName: sFolderName }, function(responseText){
						$('#bodycontentfiles div.rightcolumn div#files').html(responseText);
						fFileEvents();
						$.unblockUI();
					}, "html");
				} else {
					fErrorAlert(jData.errormessage);
				}
			}, "json");
		}
		return false;
	});
	$('a.jqDeleteFile').click(function(){
		var sFolderName = $('#currentfilepath').html();
		var sFileName = this.title.split(": ")[1];
		var nRowId = this.rel;
		var nAnswer = confirm('Are you sure you want to delete this file?');
		if (nAnswer){
			$.blockUI();
			$.post("includes/asp/ajaxDeleteFile.asp?date="+Date(), { filename: sFileName, foldername: sFolderName }, function(jData){
				if (jData.errorcode == "0"){
					$.unblockUI();
					$('#tblFiles #FileRow'+nRowId).fadeOut('slow',function(){
						$(this).remove();
					});
				} else {
					fErrorAlert(jData.errormessage);
				}
			}, "json");
		}
		return false;
	});
	fTableSort();
}

$(document).ready(function(){
	// change message border 
	$.blockUI.defaults.css.border = '5px solid #232323'; 
	$.blockUI.defaults.css.padding = '20px';
	$.blockUI.defaults.css.fontFamily = 'Arial, Helvetica, sans-serif'; 
	$.blockUI.defaults.message = '<h1><img src="images/ajax-loader.gif" align="absmiddle" /> Processing...</h1>'; 
	$.blockUI.defaults.baseZ = 100000;
	 
	// make fadeOut effect shorter 
	$.blockUI.defaults.fadeOut = 200; 

	$('a.jqAddNewUser').click(function(){
		$('#frmUser').slideUp('slow', function(){
			$('#frmUser h1').html('Add New User');
			fClearAddUser();
		});
		return false;
	});
	
	fUserEvents();

	$("#frmUser").validate({										 
		submitHandler: function(form) {
			$.blockUI();
			$(form).ajaxSubmit(oUserOptions);
			return false; 
		},
		errorClass: "errortext",
		rules: {
			txtCompanyName: "required",
			txtUsername: "required",
			txtPassword: "required",
			selUserLevel: "required",
			selFolder: "required"
		}
	}); 

	fTableSort();
	
	fFolderEvents();
	
	$('a.jqAddFolder').click(function(){
		var sNewFolderName = prompt('Type a folder name:');
		if (sNewFolderName != null){
			$.blockUI();
			$.post("includes/asp/ajaxCreateFolder.asp?date="+Date(), { sFolderName: sNewFolderName }, fAddFolder, "json");
		}
		return false;
	});
	$('a.jqRenameFolder').click(function(){
		var sFolderName = $('#currentfilepath').html();
		if (sFolderName != '\\'){
			var sNewFolderName = '\\' + prompt('What would you like to rename the folder to?');
			if (sNewFolderName != null){
				$.blockUI();
				$.post("includes/asp/ajaxRenameFolder.asp?date="+Date(), { foldername: sFolderName, newfoldername: sNewFolderName }, fRenameFolder, "json");
			}
		}
		return false;
	});
	$('a.jqDeleteFolder').click(function(){
		var sFName = $('#currentfilepath').html();
		if (sFName != '\\'){
			var nAnswer = confirm('Are you sure you want to delete this folder?\n(Doing so will delete all files within the folder.)');
			if (nAnswer){
				$.blockUI();
				$.post("includes/asp/ajaxDeleteFolder.asp?date="+Date(), { sFolderName: sFName }, fDropFolderItem, "json");
			}
		}
		return false;
	});
	
	fFileEvents();
	
	$('a#jqAddMoreFiles').click(function(){
		var bCompleted = false;
		$('#frmUpload div.jqFileRow').each(function(){
			if (bCompleted == false && $(this).css('display') == 'none'){
				$(this).slideDown('normal');
				bCompleted = true;
			}
		});
		return false;
	});
	$("#frmUpload").validate({										 
		submitHandler: function(form) {
			$.blockUI({
				message: '<h1><img src="images/ajax-uploader.gif" align="absmiddle" /><br /><br />Uploading...</h1>'
			});
			oUploadOptions.url += "&sFolderName=" + $('#currentfilepath').html();
			$(form).ajaxSubmit(oUploadOptions);
			return false; 
		},
		errorClass: "errortext",
		rules: {
			file1: "required"
		}
	});  

	$("#frmLogin").validate({										 
		submitHandler: function(form) {
			$.blockUI();
			$(form).ajaxSubmit(oLoginOptions);
			return false; 
		},
		errorClass: "errortext",
		rules: {
			txtUsername: "required",
			txtPassword: "required"
		}
	});  

});