/*
	file_browser.js
*/

function FileBrowser_c (dlgId)
{
	this.dlg_id = dlgId;
	this.dlg = document.getElementById(dlgId);
	
	this.csc_handler = 0;
	this.onOk = function ()
	{
		alert('Default onOk()\nSelected file: '+this.sel_file+'\nSelected folder: '+this.sel_folder+'\nFilename: '+this.getFilename());
	}
	this.onSelect = function () { return 1; };
	
	this.folder_mode = 0;
	this.save_mode = 0;
	
	this.view_mode = 1;
	
	this.sel_file = 0;
	this.sel_folder = 0;
	this.cur_folder = 3;
	
	this.folders = {};
	this.files = {};
	
	//---------------------------------
	
	this.setup = function (csc, ok_handler, select_handler, folder_mode, save_mode)
	{
		this.csc_handler = csc;
		if (ok_handler) this.onOk = ok_handler;
		if (select_handler) this.onSelect = select_handler;
		this.folder_mode = folder_mode;
		this.save_mode = save_mode;
	}
	
	//---------------------------------
	
	this.setCurrentFolder = function (folder)
	{
		this.cur_folder = folder;
	}
	
	this.getCurrentFolder = function ()
	{
		return this.cur_folder;
	}
	//---
	this.setSelectedFile = function (f)
	{
		this.sel_file = f;
	}
	
	this.getSelectedFile = function ()
	{
		return this.sel_file;
	}
	//---
	this.setSelectedFolder = function (f)
	{
		this.sel_folder = f;
	}
	
	this.getSelectedFolder = function ()
	{
		return this.sel_folder;
	}
	
	this.getFilename = function ()
	{
		return document.forms[this.dlg_id + "_filename"].elements[this.dlg_id + "_file"].value;
	}
	
	this.isNewFile = function ()
	{
		if (this.sel_file == 0 && this.getFilename().length > 0) return 1;
	}
	
	//---------------------------------
	
	this.newFolder = function ()
	{
		var name = prompt('Name of new folder');
		if (name)
		{
			this.req("newFolder", { 'name': name });
		}
	}
	
	this.deleteFolder = function (folder)
	{
		if (confirm('Vald mapp kommer att raderas från systemet.\nTryck OK för att forsätta'))
		{
			this.req("deleteFolder", {'folder': folder});
		}
	}
	
	this.getFileInfo = function (file)
	{
		this.req('getFileInfo', {'file': file});
	}
	
	//---------------------------------
	
	this.createDlg = function (w, h, file_types, img_max_size)
	{
		var e = this.dlg;
		if (e)
		{
			dlgActivate(e);
			
			this.req("createDlg", { 'dlgId': this.dlg_id, 'w': w, 'h': h, 'fileTypes': file_types, 'imgMaxSize': img_max_size, 'folderMode': this.folder_mode, 'saveMode': this.save_mode, 'folder': this.cur_folder });
		}
	}
	
	this.setViewMode = function (mode)
	{
		this.req("setViewMode", { 'mode': mode });
	}
	
	this.fetchFolderContent = function (folder)
	{
		this.req("fetchFolderContent", { 'folder': folder });
	}
	
	this.show = function ()
	{
		var e = this.dlg;
		if (e)
		{
			dlgCenter(e);
			dlgDisplay(e);
		}
	}
	
	this.destroy = function ()
	{
		var e = this.dlg;
		if (e)
		{
			dlgDelayedDestroy(e);
		}
	}
	
	this.finish = function ()
	{
		if (this.folder_mode)
		{
			if (this.sel_folder == 0) return;
		}
		else
		{
			if (this.save_mode)
			{
				if (this.sel_file == 0 && !this.isNewFile()) return;
			}
			else
			{
				if (this.sel_file == 0) return;
			}
		}
		
		this.onOk();
		this.destroy();
	}
	this.onFileChange = function ()
	{
		if (this.save_mode)
		{
			this.sel_file = 0;
		}
	}
	
	this.dblClicked = function (type, id)
	{
		if (type == 1)
		{
			if (this.onSelect(type, id))
			{
				this.sel_file = id;
				this.finish();
			}
		}
		if (type == 2 || this.folder_mode)
		{
			if (this.onSelect(type, id))
			{
				this.sel_folder = id;
			}
			this.cur_folder = id;
			this.fetchFolderContent(id);
		}
		
		this.refreshSelected();
	}
	
	this.clicked = function (type, id)
	{
		if (type == 1)
		{
			if (this.onSelect(type, id))
			{
				this.sel_file = id;
			}
		}
		if (this.folder_mode)
		{
			if (this.onSelect(type, id))
			{
				this.sel_folder = id;
			}
		}
			
		this.refreshSelected();
	}
	
	this.refreshSelected = function ()
	{
		if (this.folder_mode)
		{
			if (this.sel_folder > 0 && this.folders[this.sel_folder])
				document.forms[this.dlg_id + "_filename"].elements[this.dlg_id + "_file"].value = this.folders[this.sel_folder].name;
		}
		else
		{
			if (this.sel_file > 0 && this.files[this.sel_file])
				document.forms[this.dlg_id + "_filename"].elements[this.dlg_id + "_file"].value =  this.files[this.sel_file].name;
		}
	}
	
	this.showUpload = function ()
	{
		var e = document.getElementById('uploadWin');
		if (e) e.style.display = 'block';
		e = document.getElementById('uploadButton');
		if (e) e.style.display = 'none';
	}
	
	//---------------------------------
	
	this.req = function (request, params)
	{
		CSC_Request(this.csc_handler, request, params);
	}
}

//-------------------------------------------------------
