/*
AjaxExplorer Copyright (C) 2007 Syed Mohammad Sidque Tahir Al-Habshi

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Head to
GNU site http://www.gnu.org/licenses/ for license copy.
*/

function fileBrowse(data)
{
  var dir='';

  if(data=='*')
  {
    var a=dirc.split('/');
    for(i=0; i<(a.length-2); i++) dir+=a[i]+'/';

  }
  else dir=data? dirc+data+'/':get('dirc').value;

  fileCaller(dir? dir:'/');
}

function fileCaller(dir)
{
  hX=hY=edit=fnew=hold=mark=over=renm=sdir=0;
  dir=dir.indexOf('..')==-1? dir:'/';

  if(strd)
  {
    cdir=fileDirc.length;
    if((','+fileDirs.toString().toLowerCase()+',').indexOf(','+dir.toLowerCase()+',')==-1) fileDirs.push(dir);
    fileDirc.push(dir);
  }

  stop=1;
  userSystemHide();
  display('list', 0);
  setData('address', dir);
  setData('storage', fileDirs);
  ajaxRequest('loader', 'dirc='+getSwap(dir)+'&hist='+dirc+'&save='+sort+':'+view);

  dirc=dir;
  getDirc();
}

function fileCopy(flag)
{
  if(rdir) return;
  var file='';

  for(i=1; i<=maxs; i++)
  {
    if(obj=get('item'+i))
    {
      if(obj.className=='mark')
      {
	file+=fileList[i][0]+':';
	flag? get(i+'').className='drag':0;
      }
      else flag? get(i+'').className='over':0;
    }
  }

  if(file)
  {
    setData('clip_file', file);
    setData('clip_from', dirc);
    setData('clip_task', flag? 'move':'copy');
  }
}

function fileCreate(flag)
{
  if(flag)
  {
    fnew=1;
    if(name=prompt('Folder Name?')) if(name!='0') ajaxRequest('create', 'dirc='+getSwap(dirc)+'&name='+getSwap(name)+'&task=folder');
  }
  else if(name=prompt('File Name?')) if(name!='0') ajaxRequest('create', 'dirc='+getSwap(dirc)+'&name='+getSwap(name)+'&task=file');
}

function fileCreateDone(data)
{
  if(rdir) return;

  fileSelectNone();
  var a=data.split('|');

  for(f=0; f<(a.length-1); f++)
  {
    var b=a[f].split(':');
    fileDraw(b[0], b[1], b[2]);
  }

  fileSort();
}

function fileDelete()
{
  if(confirm('Delete selected files?'))
  {
    var file='', item='';

    for(i=1; i<=maxs; i++)
    {
      if(obj=get('item'+i))
      {
	if(obj.className=='mark')
	{
	  file+=fileList[i][0]+':';
	  item+=i+':';
	}
      }
    }

    if(item) ajaxRequest('delete', 'dirc='+getSwap(dirc)+'&file='+getSwap(file)+'&item='+item);
  }
}

function fileDeleteDone(item)
{
  var a=item.split('|');

  for(i=0; i<(a.length-1); i++)
  {
    if(drag) fileDrop();
    fileList[a[i]][0]='';

    obj=get('item'+a[i]);
    obj.style.display='none';
    obj.innerHTML='';
    obj.id='t'+a[i];
  }
}

function fileDetail(id)
{
  userTips(post=='dirc=/&spot=0'? 1:(sdir || rdir? 2:0));
  if(fileList[0]) writeAt('detail', '<div class="label">'+fileName(id)+'</div>'+fileTypeName(id)+'<br /><br />Modified: '+fileTime(id)+((size=fileList[id][1])=='folder'? '':'<br /><br />Size: '+fileSize(size)));
}

function fileDrag(pX, pY)
{
  var tX, tY;
  obj1=get('item'+drag).style;
  obj1.left=(pX<nX? nX:(pX+zX+3<mX? pX:mX-zX-3))+'px';
  obj1.top=(pY<nY? nY:(pY+zY+1<mY? pY:mY-zY-1))+'px';

  for(i=1; i<=maxs; i++)
  {
    if(i!=drag)
    {
      if(obj=get('item'+i))
      {
	obj2=obj.style;
	if(obj.className=='item' && (kX=parseIt(obj2.left))<(jX=parseIt(obj1.left)) && (kY=parseIt(obj2.top))<(jY=parseIt(obj1.top)) && kX>jX-zX && kY>jY-zY) over=i;
      }
    }
  } 
}

function fileDraw(name, size, mdft)
{
  if(isNaN(mdft)) return;

  for(i=1; i<=maxs; i++)
  {
    if(get(id='item'+i))
    {
      if(fileList[i][0]==name)
      {
	fileList[i][1]=size;
	fileList[i][2]=mdft;
	writeAt('item'+i+'-size', fileSize(size));
	fileSelect(i);
	return;
      }
    }
    else break;
  }

  if(i==maxs) maxs++;
  fileList[i]=new Array(name, size, mdft);
  
  writeAt('desktop', '<div id="'+id+'" class="item" style="width: '+zX+'px; height: '+zY+'px"><div id="'+i+'" class="over" title=""></div><div id="'+id+'-view"><img id="'+id+'-icon" alt="" src="" class="'+view+'" /></div><div class="attr"><div id="'+id+'-name" class="name"'+(zC? ' style="text-align: center"':'')+'>'+fileName(i)+'</div><div id="'+id+'-size"'+(zD? '':' style="display: none"')+'>'+(size=='folder'? size:fileSize(size))+'</div></div></div>', 1);
  fileSelect(i);
  fileImage(i);
}

function fileDrop()
{
  for(i=1; i<=maxs; i++)
  {
    if(obj=get('item'+i))
    {
      if(obj.className=='mark')
      {
	get(i+'').className='over';
      }
    }
  }

  userTips(0);
  over && over!=sver && fileList[over][1]=='folder'? fileMoving():0;
  drag=0;
  zI++;
}

function fileEmptyBin()
{
  fileSelectAll();
  fileDelete();
}

function fileFolder()
{
  if(fold)
  {
    flag=get('fold').style.display!='none'? 1:0;
    get('flds').src='images/'+(flag? 'closed.png':'opened.png');

    display('fold', flag? 0:1);
    display('pane', flag? 1:0);
  } else {
    get('flds').src='images/opened.png';
    ajaxRequest('folder', 'dirc=/&spot=0');
  }
}

function fileFolderLoad(data)
{
  display('pane', 0);
  display('fold', 1);

  if(data)
  {
    var nbsp='', text='', xtra='', a=data.split('|'), b=a[1].split('/');

    fold? (a[0]!='0'? get('I'+a[0]).src='images/opened.png':0):fold=1;
    for(i=1; i<b.length; i++) nbsp+='&nbsp; &nbsp;'; 

    for(i=2; i<(a.length-1); i++)
    {
      fcnt++;
      text+='<br />'+nbsp+'<img id="I'+fcnt+'" alt="" src="images/closed.png" onclick="ajaxRequest(\'folder\', \'dirc='+a[i]+'/&spot='+fcnt+'\')" /> <span class="href" onclick="fileCaller(\''+a[i]+'/\')">'+a[i].replace(a[1], '')+'</span><span id="F'+fcnt+'"></span>';
    }

    writeAt('F'+a[0], text);
  }
}

function fileGenerate(data)
{
  maxs=park=strd=1;
  done=fnew=0;

  fraw=data.split('*');
  a=fraw[0].split(':');

  root=a[1];
  rbin=a[2];
  rdir=dirc==rbin? 1:0;
  perm=parseInt(a[0]);

  if(data.indexOf('?')==-1)
  {
    get('dirc').value=gtxt='';
    display('desktop', stop=0);

    fileList[0]=Array(a[3], a[4], a[5]);
    if(a[6]) sort=a[6];
    if(a[7]) view=a[7];

    gstr=fraw[1].split('|');
    gcnt=132/gstr.length;

    if(!halt) fileGenerating();
  } else {
    writeAt('desktop', '<div class="note"><div class="title">The '+(dirc=='/'? 'file path':'directory')+' does not exist!</div>'+(dirc=='/'? '<br />If you are the admin of the system, check the file path at:<br />System Account > Manage > Set Permission > File Path':'- '+dirc)+'</div>');
    menuGenerate('P');
    stop=1;
  }
}

function fileGenerating()
{
  if(gstr.length>maxs)
  {
    var bars='';

    var a=fileList[maxs]=gstr[(maxs-1)].split(':');
    gtxt+='<div id="'+(id='item'+maxs)+'" class="item" style="width: '+zX+'px; height: '+zY+'px"><div id="'+maxs+'" class="over" title="'+(rdir || sdir? (sdir? 'Located at /'+a[0].slice(0, a[0].lastIndexOf('/')+1):'Deleted at '+a[0].replace(/\$/g, '/').slice((a[0].indexOf('^')+1), -11)):'')+'"></div><div id="'+id+'-view"><img id="'+id+'-icon" alt="" src="" class="'+view+'" /></div><div class="attr"><div id="'+id+'-name" class="name"'+(zC? ' style="text-align: center"':'')+'>'+fileName(maxs)+'</div><div id="'+id+'-size"'+(zD? '':' style="display: none"')+'>'+(a[1]=='folder'? a[1]:fileSize(a[1]))+'</div></div></div>';

    var gbar=gcnt*((maxs++)+1);
    for(i=0; i<gbar; i++) bars+='|';
    get('dirc').value=bars;

    stop? 0:(safe? setTimeout('fileGenerating()', 0):fileGenerating());
  } else {
    writeAt('desktop', gtxt);
    fileViewLoad(view);
    fileSortLoad(sort);
    menuGenerate('P');

    obj=get('dirc');
    obj.value=dirc;
    obj.blur();

    display('desktop', 1);
    userScreen();
    done=1;
  }
}

function fileImage(id)
{
  get('item'+id+'-icon').src=(img=fileType(id))? 'images/'+img+'.gif':root.substr(3)+dirc+fileList[id][0];
}

function fileMoveTo()
{
  if(drag)
  {
    rdir? fileRestore():fileMoving();
  }
}

function fileMoving()
{
  var file='', item='';

  for(i=1; i<=maxs; i++)
  {
    if(obj=get('item'+i))
    {
      if(obj.className=='mark')
      {
	file+=fileList[i][0]+':';
	item+=i+':';
      }
    }
  }

  if(item) ajaxRequest('moving', 'dirc='+getSwap(dirc)+(over? getSwap(fileList[over][0]+'/'):'../')+'&file='+getSwap(file)+'&item='+item+'&move='+getSwap(dirc));
}

function fileName(id)
{
  if(!fileList[id]) return;
  name=fileList[id][0];

  if(name.indexOf('/')!=-1)
  {
    name=name.substr(name.lastIndexOf('/')+1);
  }

  if(name.indexOf('^')!=-1)
  {
    name=name.substr(0, name.indexOf('^'));
  }

  return name;
}

function fileNameExt(id)
{
  if(fileList[id][1]!='folder')
  {
    name=fileName(id);
    return name.slice(name.lastIndexOf('.')+1).toLowerCase();
  }
  else return '---';
}

function fileOpen(type)
{
  hold=renm=0;
  if(rdir) return;
  if(rtmr) clearTimeout(rtmr);

  for(i=1; i<=maxs; i++)
  {
    if(obj=get('item'+i))
    {
      if(obj.className=='mark') fileOpenMethod(type, i);
    }
  }

  return;
}

function fileOpenMethod(type, id)
{
  var name=fileList[id][0];

  switch(type)
  {
    case 'download':
	getDirc();
	frame.document.form.download.value=getSwap(fileList[sver][0]);
	frame.document.form.submit();
	return;

    case 'editor':
	window.open('editor.php?'+dirc+name);
	break;

    case 'newtab':
	window.open(fileList[id][1]!='folder'? root.substr(3)+dirc+name:'?'+dirc+name);
	break;

    default:
	if(fileList[id][1]!='folder')
	{
	  if(load)
	  {
	    opener.textOpenFile(dirc+name);
	    opener.focus();
	    return;
	  }
	 else window.open(root.substr(3)+dirc+name);
	} else {
	  fileBrowse(fileList[sver][0]);
	  return;
	}
  }
}

function fileOpenResult()
{
  name=fileList[sver][0];
  fileCaller('/'+name.substr(0, name.lastIndexOf('/'))+'/');
}

function filePaste()
{
  if(getData('clip_task')=='move') ajaxRequest('moving', 'dirc='+getSwap(dirc)+'&file='+getSwap(getData('clip_file'))+'&item=0&move='+getSwap(getData('clip_from')));
  else ajaxRequest('create', 'dirc='+getSwap(dirc)+'&name='+getSwap(getData('clip_file'))+'&move='+getSwap(getData('clip_from'))+'&task=copy');
}

function filePasteDone(data)
{
  if(getData('clip_task')=='move')
  {
    var a=data.split('|');

    for(f=0; f<(a.length-1); f++)
    {
      var b=a[f].split(':');
      fileDraw(b[0], b[1], b[2]);
    }

    setData('clip_file', '');
    setData('clip_from', '');
    setData('clip_task', '');
    menuGenerate('P');
    fileSort();
  }
  else fileDeleteDone(data);
}

function filePick()
{
  for(i=1; i<=maxs; i++)
  {
    if(obj=get(id='item'+i))
    {
      if(obj.className=='mark')
      {
	get(i+'').className='drag';

	if(i==over)
	{
	  drag=i;
	  hX=hY=0;
	  dY=parseIt(obj.style.top);
	  dX=parseIt(obj.style.left);
	  userTips(4);
	}
      }
    }
  }
}

function fileProperty(path)
{
  var file='';
  atrc=atrd=0;

  for(i=1; i<=maxs; i++)
  {
    if(path) break;
    if(obj=get('item'+i))
    {
      if(obj.className=='mark')
      {
	atrc++;
	if(!file) atrd=i;
	file+=fileList[i][0]+':';
      }
    }
  }

  ajaxRequest('attrib', 'dirc='+getSwap(path? prop=path:dirc)+'&file='+getSwap(atrb=file));
}

function filePropertyLoad(data)
{
  var a=data.split(':'), b=a[2].split('');

  flag=fileList[atrd][1]=='folder'? 1:0;
  get('S58').disabled=flag? false:true;
  opacity('S59', flag? 1:0.5);

  syst=1;
  exts=atrc>1? atrb.replace(/:/g, ',').substr(0, 30)+'...':fileTypeName(atrd);
  name=atrc>1? 'Multiple Files ('+atrc+')':(prop? 'My Folder':fileName(atrd));

  writeAt('S50', name);
  writeAt('S52', name);
  writeAt('S53', exts);
  writeAt('S54', a[3]);
  writeAt('S55', a[4]);
  writeAt('S56', fileSize(a[5]));
  writeAt('S57', a[0]=='0'? '':a[0]);
  writeAt('S58', a[1]=='0'? '':a[1]);
  get('S51').src='images/'+(atrc>1? 'file':(prop? 'server':fileType(atrd)))+'.gif';

  for(i=6; i<9; i++)
  {
    get('S'+i+'1').checked=b[(i-6)] & 0x0004? 'checked':'';
    get('S'+i+'2').checked=b[(i-6)] & 0x0002? 'checked':'';
    get('S'+i+'3').checked=b[(i-6)] & 0x0001? 'checked':'';
  }

  iX=250;
  iY=330;
  obj=get('S5').style;
  obj.left=(oX+iX<mX? oX:mX-iX)+'px';
  obj.top=(oY+iY<mY? oY:mY-iY)+'px';
  userSystem(5);
  prop=0;
}

function filePropertySave()
{
  var sum=0, cmod='';
  userSystemHide();

  for(i=6; i<9; i++)
  {
    sum=0;
    for(j=1; j<4; j++)
    {
      sum-=get('S'+i+j).checked? -(j==1? 4:(j==2? 2:1)):0;
    }

    cmod+=sum;
  }

  ajaxRequest('change', 'dirc='+getSwap(dirc)+'&file='+getSwap(atrb)+'&cmod=0'+cmod+'&each='+(get('S58').checked? 1:0));
  get('S58').checked='';
}

function fileSelect(id)
{
  if(obj=get('item'+(id=id? id:over)))
  {
    if(obj.className!='mark' || keys!=2)
    {
      mark=park=id;
      fileDetail(id);
      obj.className='mark';
    }
    else obj.className='item';
  }
}

function fileRename(flag)
{
  if(sver && !rdir && !sdir && !renm && (obj=get('item'+sver)))
  {
    if(obj.className=='mark')
    {
      if(flag)
      {
	writeAt('item'+(renm=sver)+'-name', '<input id="item'+sver+'-edit" type="text" class="fname" value="'+fileList[sver][0]+'" onblur="fileRenaming()" onfocus="edit=3" />');
	get('item'+sver+'-edit').select();
	edit=3;
      }
      else rtmr=setTimeout('fileRename(1)', menu? 0:800);
    }
  }
}

function fileRenameDone(name)
{
  if(name && rens) writeAt('item'+rens+'-name', fileList[rens][0]=name);
  fileImage(rens);
}

function fileRenaming()
{
  if(rdir) return;

  var id='item'+(rens=renm);
  var name=get(id+'-edit').value;
  writeAt(id+'-name', fileList[renm][0]);

  if(name && name!=fileList[renm][0])
  {
    ajaxRequest('rename', 'dirc='+getSwap(dirc)+'&file='+getSwap(fileList[renm][0])+'&name='+getSwap(name));
  }

  edit=renm=0;
}

function fileRestore()
{
  var file='', item='';

  for(i=1; i<=maxs; i++)
  {
    if(obj=get('item'+i))
    {
      if(obj.className=='mark')
      {
	file+=fileList[i][0]+'|';
	item+=i+'|';
      }
    }
  }

  if(item) ajaxRequest('restore', 'dirc='+getSwap(dirc)+'&file='+getSwap(file)+'&item='+item);
}

function fileRestoreAll()
{
  fileSelectAll();
  fileRestore();
}

function fileSearch()
{
  if(stop) return;
  userSystemHide();
  var flag=0, look='';

  switch(get('look').value)
  {
    case '0': fileSearchLocal(); return;
    case '1': look=dirc; break;
    case '2': look='/'; break;
  }

  sdir=stop=1;
  hX=hY=edit=hold=mark=over=renm=0;
  ajaxRequest('search', 'dirc='+look+'&find='+get('find').value+'&hist='+dirc+'&save='+sort+':'+view);
  dirc=look;
  getDirc();
}

function fileSearchLocal()
{
  data=get('find').value.toLowerCase();

  for(i=1; i<=maxs; i++)
  {
    if(get(id='item'+i)) display(id, (fileList[i][0].toLowerCase().indexOf(data)!=-1? 1:0));
  }

  fileSort();
}

function fileSelectAll()
{
  var item=size=0;

  for(i=1; i<=maxs; i++)
  {
    if(obj=get('item'+i))
    {
      if(!obj.style.display || obj.style.display=='block')
      {
	item++;
	mrk1+=':'+i+':';
	size-=fileList[i][1]=='folder'? 0:-fileList[i][1];
	obj.className='mark';
      }
    }
  }

  mark=1;
  mrk2=mrk1;
  menuGenerate('P');
  writeAt('detail', item? item+' Items selected<br /><br />Total Size: '+fileSize(size):'');
}

function fileSelectBox()
{
  var x1=0, x2=0, y1=0, y2=0, item=0, size=0;
  move=hX;

  pX=cX+sX;
  pY=cY+sY;

  if(pX>hX){x1=hX; x2=pX;}
  else{x1=pX; x2=hX;}
  if(pY>hY){y1=hY; y2=pY;}
  else{y1=pY; y2=hY;}

  if(x1<nX) x1=nX;
  if(x2>mX) x2=mX;
  if(y1<nY) y1=nY;
  if(y2>mY) y2=mY;

  obj=get('select').style;
  obj.top=y1+'px';
  obj.left=x1+'px';
  obj.width=x2-x1+'px';
  obj.height=y2-y1+'px';
  obj.display='block';

  for(i=1; i<=maxs; i++)
  {
    if(obj=get('item'+i))
    {
      if(!obj.style.display || obj.style.display=='block')
      {
	var temp='', tX=parseIt(obj.style.left), tY=parseIt(obj.style.top);

	var isin=x2>tX-2 && x1<tX+parseIt(obj.style.width) && y2>tY-2 && y1<tY+parseIt(obj.style.height)? 1:0;
	var isit=mrk2.indexOf(':'+i+':')!=-1? 1:0;

	if(temp=mrk1.indexOf(':'+i+':')==-1? (isin? 'mark':(!isit? 'item':'')):(isin? (keys==2 && isit? 'item':'mark'):((keys==1 && isit) || (keys==2 && isit)? 'mark':'item'))) obj.className=temp;
	if(temp=='mark')
	{
	  item++;
	  mrk1+=':'+i+':';
	  size-=fileList[i][1]=='folder'? 0:-fileList[i][1];
	}
      }
    }
  }

  if(item)
  {
    mark=1;
    writeAt('detail', item+' Items selected<br /><br />Total File Size: '+fileSize(size));
  }
}

function fileSelectNone()
{
  mark=0;
  for(i=1; i<=maxs; i++)
  {
    if(obj=get('item'+i)) obj.className='item';
  }
}

function fileSize(data)
{
  var i=0, xtra=0;

  while(data>1024)
  {
    xtra=data%1000;
    data/=1024;
    i++;
  }

  return Math.round(data-0.49)+(i? '.'+(xtra>99? '':(xtra>9? '0':'00'))+Math.round(xtra):'')+' '+fileByte[i];
}

function fileSort()
{
  var j=sum=0, rX=nX, rY=nY;
  rows=0;

  for(i=1; i<=maxs; i++)
  {
    if(obj=get('item'+i))
    {
      obj=obj.style;

      if(!obj.display || obj.display=='block')
      {
	if(!j) rows++;
	obj.left=rX+'px';
	obj.top=rY+'px';

	if(nX+rX+zX*1.8>wX)
	{
	  j=1;
	  rX=nX;
	  rY+=zY+10;
	}
	else rX+=zX+10;
      }
    }
  }

  if(done) userScreen();
}

function fileSortLoad(type)
{
  var j=0;
  sort=type;
  var tmp1=new Array();
  var tmp2=new Array();

  for(i=1; i<=maxs; i++)
  {
    if(obj1=get(id='item'+i))
    {
      if(fileList[i][1]!='folder')
      {
	name=(obj2=get(id+'-name')).innerHTML;
	obj2.id='temp'+i+'-name';
	obj1.id='temp'+i;
	get(i+'').id=i+'t';

	tmp1[i]=fileList[i];
	tmp2[j++]=type=='name'? name:name.slice(name.lastIndexOf('.')+1);
      }
      else tmp2[j++]='';
    }
  }

  tmp2.sort();

  for(i=1; i<=tmp2.length; i++)
  {
    if(tmp2[(i-1)])
    {
      for(j=1; j<=maxs; j++)
      {
	if(obj1=get(id='temp'+j))
	{
	  name=(obj2=get(id+'-name')).innerHTML;
	  if(tmp2[(i-1)]==(type=='name'? name:name.slice(name.lastIndexOf('.')+1)))
	  {
	    fileList[i]=tmp1[j];
	    obj2.id='item'+i+'-name';
	    obj1.id='item'+i;
	    get(j+'t').id=i;
	    break;
	  }
	}
      }
    }
  }

  fileSort();
}

function fileTime(id)
{
  date=new Date();
  date.setTime(fileList[id][2]*1000);
  a=String(date).split(mode? ' U':' G');

  return a[0];
}

function fileType(id)
{
  var exts=fileNameExt(id);
  exts=view=='icon' && (exts=='gif' || exts=='ico' || exts=='jpg' || exts=='jpeg' || exts=='png')? '-^-':exts;

  switch(exts)
  {
	case '-^-':	return '';
	case '---':	return 'dir';
	case 'adp':	return 'adp';
	case 'avi':	return 'mp3';
	case 'bmp':	return 'bmp';
	case 'css':	return 'css';
	case 'dll':	return 'dll';
	case 'doc':	return 'doc';
	case 'exe':	return 'exe';
	case 'gif':	return 'gif';
	case 'htm':
	case 'html':	return 'htm';
	case 'ico':	return 'gif';
	case 'js':	return 'js';
	case 'jpg':
	case 'jpeg':	return 'jpg';
	case 'log':	return 'txt';
	case 'mdb':	return 'adp';
	case 'mdw':	return 'adp';
	case 'mov':	return 'mov';
	case 'mp3':	return 'mp3';
	case 'pdf':	return 'pdf';
	case 'png':	return 'gif';
	case 'php':	return 'txt';
	case 'ppt':	return 'ppt';
	case 'psd':	return 'psd';
	case 'pub':	return 'pub';
	case 'rar':	return 'zip';
	case 'rtf':	return 'doc';
	case 'swf':	return 'swf';
	case 'sql':	return 'txt';
	case 'ttf':	return 'ttf';
	case 'txt':	return 'txt';
	case 'vdx':	return 'vdx';
	case 'vsd':	return 'vsd';
	case 'wav':	return 'mp3';
	case 'wma':	return 'mp3';
	case 'wmv':	return 'mp3';
	case 'xls':	return 'xls';
	case 'xml':	return 'xml';
	case 'zip':	return 'zip';
	default:	return 'non';
  }
}

function fileTypeName(id)
{
  var exts=fileNameExt(id);
  var data=!rdir && !sdir && !syst && (exts=='gif' || exts=='ico' || exts=='jpg' || exts=='jpeg' || exts=='png')? '<br /><img id="view" alt="" src="'+root.substr(3)+dirc+fileList[id][0]+'" />':'';

  switch(exts)
  {
	case '---':	return 'File Folder';
	case 'adp':	return 'Microsoft Access Project';
	case 'avi':	return 'Video Clip';
	case 'bmp':	return 'Bitmap Image';
	case 'css':	return 'Cascading Style Sheet';
	case 'dll':	return 'Dynamic Link Library';
	case 'doc':	return 'Microsoft Document';
	case 'exe':	return 'Executable File';
	case 'gif':	return 'GIF Image'+data;
	case 'htm':
	case 'html':	return 'HTML Document';
	case 'ico':	return 'Icon Image'+data;
	case 'js':	return 'Java Script';
	case 'jpg':
	case 'jpeg':	return 'JPEG Image'+data;
	case 'log':	return 'Text Document';
	case 'mdb':	return 'Microsoft Access Application';
	case 'mdw':	return 'Microsoft Access Workgroup';
	case 'mov':	return 'Adobe Quick Player';
	case 'mp3':	return 'MPEG Audio Stream';
	case 'pdf':	return 'Adobe Acrobat Document';
	case 'png':	return 'PNG Image'+data;
	case 'php':	return 'PHP File';
	case 'ppt':	return 'Microsoft Powerpoint';
	case 'psd':	return 'Adobe Photoshop Format';
	case 'pub':	return 'Microsoft Publish';
	case 'rar':	return 'WinRaR Archive';
	case 'rtf':	return 'Rich Text Format';
	case 'sql':	return 'SQL File';
	case 'swf':	return 'Adobe Flash';
	case 'ttf':	return 'TrueType Font';
	case 'txt':	return 'Text Document';
	case 'vdx':	return 'Vector Graphic File';
	case 'vsd':	return 'Microsoft Visio Drawing';
	case 'wav':	return 'Waveform Audio';
	case 'wma':	return 'Windows Media Audio';
	case 'wmv':	return 'Windows Media Video';
	case 'xls':	return 'Microsoft Excel';
	case 'xml':	return 'XML Document';
	case 'zip':	return 'Zip Archive';
	default:	return 'File';
  }
}

function fileView(data)
{
  switch(view=data)
  {
    case 'list':
	zC=0;
	zD=0;
	zX=550;
	zY=16;
	break;

    case 'icon':
	zC=1;
	zD=0;
	zX=104;
	zY=104;
	break;

    case 'tile':
	zC=0;
	zD=1;
	zX=180;
	zY=32;
	break;
  }
}

function fileViewLoad(data)
{
  fileView(data);

  for(i=1; i<=maxs; i++)
  {
    if(obj=get(id='item'+i))
    {
      obj.style.width=zX+'px';
      obj.style.height=zY+'px';
      get(id+'-icon').className=data;
      get(id+'-name').style.textAlign=zC? 'center':'';
      display(id+'-size', zD);
      fileImage(i);
    }
  }

  if(done) fileSort();
}

function fileUpload()
{
  if(!halt && !stop) frame.document.form.submit();
}

function fileWallpaper(name)
{
  name=name!=undefined? name:fileList[sver][0];
  setData('wallpaper', root+dirc+name);
  get('body').style.backgroundImage='url('+root+dirc+name+')';
}

function fileZip(flag)
{
  fileSelectNone();
  ajaxRequest('zip-'+(flag? 'in':'out'), 'dirc='+getSwap(dirc)+'&file='+getSwap(fileList[sver][0]));
}

function fileZipDone(data)
{
  if(data)
  {
    var a=data.split(':');
    fileDraw(a[0], a[1], a[2]);
    fileSort();
  }
}
