function __FilestoreData()
{
	this.init();
	this.constants = {
		maxFolders: 255,
		maxLenFolderName: 63,
		maxLenFileName: 63,
		maxLenFileExt: 15,
		maxLenFileTitle: 63,
		maxLenSetName: 63,
		fCommonSizeQuota: 1073741824	//квота на общий размер файлов в байтах (100Mb) 104857600
	};
	this.nums = {
		fCommonSize: 0	//общий размер файлов
	}

	this.fileIcons = {
		'xxx': 'xxx',
		'arj': 'rar',
		'avi': 'mov',
		'bmp': 'bmp',
		'chm': 'chm',
		'djv': 'djv',
		'dll': 'dll',
		'doc': 'doc',
		'eml': 'eml',
		'exe': 'exe',
		'gif': 'gif',
		'hlp': 'hlp',
		'inf': 'inf',
		'jpg': 'jpg',
		'js': 'js',
		'm3u': 'm3u',
		'mdb': 'mdb',
		'mid': 'mid',
		'mov': 'mov',
		'mp3': 'mp3',
		'msg': 'eml',
		'msi': 'msi',
		'nfo': 'nfo',
		'psx': 'psx',
		'pdf': 'pdf',
		'pic': 'pic',
		'png': 'png',
		'ppt': 'ppt',
		'ps': 'ps',
		'psd': 'psd',
		'rar': 'rar',
		'reg': 'reg',
		'rtf': 'rtf',
		'tif': 'tif',
		'ttf': 'ttf',
		'txt': 'txt',
		'url': 'url',
		'wav': 'mp3',
		'wma': 'mp3',
		'wmv': 'mov',
		'xls': 'xls',
		'xml': 'xml',
		'zip': 'zip'
	};
}

__FilestoreData.prototype.init = function()
{
	this.loadComplete = false;
	this.loadInProgress = false;
	this.topFolderId = null;	//id нередактируемой папки верхнего уровня
	this.files = {};
	this.folders = {};
	this.fStructure = {};
	this.sets = {};
}

__FilestoreData.prototype.load = function(data)
{
	this.folders = {};
	if(data.folders.length)	//зачастую массив наборов от сервера может предстать и для нас массивом - спасибо Prototype :(
		for(var i=0; i<data.folders.length; i++)
		{
			this.folders[i] = data.folders[i];
			if(this.folders[i].parent == 0)
				this.topFolderId = i;
		}
	else if(!isEmpty(data.folders))
		for(var i in data.folders)
		{
			this.folders[i] = data.folders[i];
			if(this.folders[i].parent == 0)
				this.topFolderId = i;
		}

	this.files = {};
	if(data.files.length)
		for(var i=0; i<data.files.length; i++)
			this.files[i] = data.files[i];
	else if(!isEmpty(data.files))
		for(var i in data.files)
			this.files[i] = data.files[i];

	this.sets = {};
	this.nextSetId = 0;
	if(!isEmpty(data.sets))
	{
		if(data.sets.length)
			for(var i=0; i<data.sets.length; i++)
			{
				if((i-0) > this.nextSetId) this.nextSetId = (i-0);
				this.sets[i] = data.sets[i];
			}
		else 
			for(var i in data.sets)
			{
				if((i-0) > this.nextSetId) this.nextSetId = (i-0);
				this.sets[i] = data.sets[i];
			}
		this.nextSetId++;
	}
	
	this.fStructure = {};
	for(var i in this.files)
	{
		if(!this.fStructure[this.files[i].folderId])
			this.fStructure[this.files[i].folderId] = [];
		this.fStructure[this.files[i].folderId].push(i);
	}
	this.fCommonSizeCalculate();
	this.loadComplete = true;
	this.loadInProgress = false;
}

__FilestoreData.prototype.fCommonSizeCalculate = function()
{
	this.nums.fCommonSize = 0;
	for(var i in this.files)
	{
		this.nums.fCommonSize += this.files[i].size-0;
	}
}

//Форматирует для вывода размер в байтах
__FilestoreData.prototype.formatFileSize = function(inBytes)
{
	inBytes = inBytes - 0;
	if(inBytes < 1024)
		return inBytes +'&nbsp;b';
	else if(inBytes < 1048576)
		return Math.round(inBytes/1024*100)/100 +'&nbsp;kb';
	else if(inBytes < 1073741824)
		return Math.round(inBytes/1048576*100)/100 +'&nbsp;Mb';
	else if(inBytes < 1099511627776)
		return Math.round(inBytes/1073741824*100)/100 +'&nbsp;Gb';
	else
		return Math.round(inBytes/1099511627776*100)/100 + '&nbsp;Tb';
}

FSDATA = new __FilestoreData();
FSDATA.init();