/* ГАДЖЕТ ПРЕДСТАВЛЕНИЯ ФАЙЛОВОГО ХРАНИЛИЩА */
function __FilestoreSet(id)
{
	this.lang = Locale.Gadgets.FilestoreSet;
	this.Core = new __StdModuleCore(this, id, 'filestore', this.lang.title, this.lang.desc);
	if(!isEmpty(SProfile.user) && SProfile.user.id)
	{	//пользователь авторизован
		this.preload();
		this.current = {
			sortBy: 'name',
			sortOrder: 1,
			viewer: 'list'
		}
		this.fpanel = {};
		this.finput = {};
		
		this.declareSortFunctions();
		this.createPanelSettings();
	}
	else
	{//неавторизованным юзерам мы показываем пустышку
        this.Content.innerHTML = '<strong>'+ Locale['AuthNeed'] +'</strong><br><div align="center"><img src="/img/tpl/'+Skin+'/toolbar/register.gif" title="'+ Locale['Registration'] +'" class="href" onclick="Startup.DrawRegisterForm()"><img src="/img/tpl/'+Skin+'/toolbar/login.gif" title="'+ Locale['Enter'] +'" class="href" onclick="Startup.DrawLoginForm()" style="margin-left: 20px"></div>';
	}
}

__FilestoreSet.prototype.Relay = function(data, part)
{
	if(data.variables.errors && data.variables.type=='error' && data.variables.message=='denied')
	{
		window.alert(this.lang.msg['AuthNeedForUse']);
		return;
	}

	switch(data.event.action)
	{
		case 'startup':
			this.setId = data.variables.set;
			if(this.setId || this.setId==0)
				this.create(this.setId);
			break;
	
		case 'fileStructure':
			if(data.variables.status && data.variables.status == 'error')
			{
				window.alert(this.lang.msg['ErrorWhenRegister']);
				ModManager.Delete(this.id);
			}
			FSDATA.load(data.variables);
			break;
	}
}

__FilestoreSet.prototype.declareSortFunctions = function()
{
	this.sortFilesAsStr = function(a,b)
	{
	  if (String(a[self.sortBy]) > String(b[self.sortBy]))
		return 1*self.sortOrder;
	  if (String(a[self.sortBy]) < String(b[self.sortBy]))
		return -1*self.sortOrder;
	  return 0;
	}
	this.sortFilesAsNum = function(a,b)
	{
	  if (a[self.sortBy] > b[self.sortBy])
		return 1*self.sortOrder;
	  if (a[self.sortBy] < b[self.sortBy])
		return -1*self.sortOrder;
	  return 0;
	}

	this.fileSortFunctions = {
		'name': this.sortFilesAsStr,
		'ext': this.sortFilesAsStr,
		'size': this.sortFilesAsNum,
		'created': this.sortFilesAsNum
	}
}

__FilestoreSet.prototype.create = function(setId)
{
	if(!setId && setId!=0)
		Update.request('FilestoreSet', 'module', 'startup', {id: this.id}, null, true);
	this.setId = setId;
	this.Core.SetHeader(this.Core.GetHeader() + ': '+ FSDATA.sets[this.setId].name);
	this.createPanelSettings();
	this.Content.innerHTML = '';
	this.Content.style.padding = '10px';
	this.fpanel.files = ce('DIV', this.Content, null, {border: '1px #0000CC solid', padding: '5px', margin: '5px 0px', height: '100px', overflow: 'auto'});
	this.showFiles();
	Update.request('FilestoreSet', 'module', 'regSet', {id: this.id}, {set: this.setId}, false);
}

//(Ре-)Инициализация гаджета
__FilestoreSet.prototype.reInit = function()
{
	FSDATA.init();	//обнуляем хранилище данных
	this.preload();	//и приступаем к загрузке данных
}

//Сюда из конструктора переброшены действия, которым необходим флаг structureLoadComplete
__FilestoreSet.prototype.start = function()
{
	this.Options.innerHTML = '';
	this.Content.innerHTML = '';
	if(this.FromProfile)
	{
		Update.request('FilestoreSet', 'module', 'startup', {id: this.id}, null, true);
	}
}

//Предварительная загрузка файловой структуры
__FilestoreSet.prototype.preload = function()
{
	var self = this;
	if(!FSDATA.loadComplete)
	{
		if(!FSDATA.loadInProgress)
		{
			FSDATA.loadInProgress = true;
			Update.request('FilestoreSet', 'module', 'fileStructure', {id: self.id}, null, true);
		}
		var timer = window.setInterval(
			function() {
				if(FSDATA.loadComplete)
				{
					window.clearInterval(timer);
					self.start();
				}
			}, 500
		);
	}
	else
		this.start();
}

__FilestoreSet.prototype.createPanelSettings = function()
{
	var self = this;
	this.fpanel.frameFileDownload = ce('IFRAME', this.Options, {name: 'fileDownloadFrame', id: 'fileDownloadFrame'}, {display: 'none'});
	this.fpanel.formSetSelect = ce('FORM', this.Options);
	this.finput.selectSet = ce('SELECT', null);
	for(var i in FSDATA.sets)
	{
		ce('OPTION', this.finput.selectSet, {value: i, innerHTML: FSDATA.sets[i].name});
	}
	this.fpanel.formSetSelect.appendChild(this.finput.selectSet);
	ce('INPUT', this.fpanel.formSetSelect, {type: 'submit', className: 'std_button', value: Locale['OK']});
	this.fpanel.formSetSelect.onsubmit = function()
	{
		self.self.finput.selectSet.value;
		return false;
	}
}

__FilestoreSet.prototype.showFiles = function()
{
	var self = this;
	this.fpanel.files.innerHTML = '';
	this.fpanel.filesList = ce('TBODY', ce('TABLE', this.fpanel.files));
	if(!FSDATA.sets[this.setId] || !FSDATA.sets[this.setId].files) return false;

	this.sortBy = this.current.sortBy;
	this.sortOrder = this.current.sortOrder;
	FSDATA.sets[this.setId].files.sort(this.fileSortFunctions[this.current.sortBy]);	//сортируем файлы по нужному критерию

	for(var i=0; i<FSDATA.sets[this.setId].files.length; i++)
	{
		this.printFileItem(FSDATA.sets[this.setId].files[i]);
	}
}

//Показывает элемент списка с информацией об очередном файле
__FilestoreSet.prototype.printFileItem = function(fileId)
{
	var self = this;
	var oTr = ce('TR', this.fpanel.filesList, {id: this.id +'_fileItem_'+ fileId});
	var oTd = ce('TD', oTr, {valign: 'top'}, {paddingTop: '1px', paddingRight: '5px'});
	switch(FSDATA.files[fileId].kind)
	{
		case 'custom':
			if(FSDATA.fileIcons[FSDATA.files[fileId].ext])
				var ext = FSDATA.fileIcons[FSDATA.files[fileId].ext];
			else
				var ext = FSDATA.fileIcons.xxx;
			ce('IMG', oTd, {src: '/img/ico/'+ ext +'.gif'});
			ce('A', ce('TD', oTr, {valign: 'top'}, {paddingRight: '5px'}), {href: '#', fid: fileId, className: 'std_link', title: FSDATA.files[fileId].title, innerHTML: FSDATA.files[fileId].name +'.'+ FSDATA.files[fileId].ext,
				onclick: fileHrefOnclick,
				oncontextmenu: fileHrefOncontext,
				id: this.id +'_fileHref'+ fileId
			});
			ce('SMALL', ce('TD', oTr, {valign: 'top'}, {paddingRight: '5px'}), {innerHTML: ' <em>('+ FSDATA.formatFileSize(FSDATA.files[fileId].size) +')</em>'});
			break;
		case 'url':
			ce('IMG', oTd, {src: '/img/ico/'+ FSDATA.fileIcons.url +'.gif'});
			ce('A', ce('TD', oTr, {valign: 'top'}, {paddingRight: '5px'}), {href: FSDATA.files[fileId].url, className: 'std_link', target: '_blank', fid: fileId, title: FSDATA.files[fileId].desc, innerHTML: FSDATA.files[fileId].title});
			ce('SMALL', ce('TD', oTr, {valign: 'top'}), {innerHTML: ' <em>(html)</em>'});
			break;
		case 'mail':
			break;
	}
	oTd = ce('TD', oTr, null, {paddingLeft: '5px'});
	ce('IMG', oTd, {src: '/img/filestore/fold_settings.gif', fid: fileId, className: 'href', title: this.lang.msg['ToOpenFolder'], onclick: openFolder});

	function fileHrefOnclick()
	{
		self.fpanel.frameFileDownload.contentDocument.location.href = '/gateway/filestore/download_files.php?fid='+this.fid;
		return false;
	}
	function fileHrefOncontext()
	{
//		console.info('Must be menu!');
		return false;
	}

	function openFolder()
	{
		var moduleId = null;
		for(var i in Modules)
		{
			if(Modules[i].Object.type == 'Filestore')
			{
				moduleId = i;
			}
		}
		if(!moduleId) 
			moduleId = ModManager.Create('Filestore', self.cName, self.TabID);	//, self.workspaceId

		Modules[moduleId].Object.current.folder.id = FSDATA.files[this.fid].folderId;
		Modules[moduleId].Object.refresh();
	}
}