


$(document).ready(function() {
  $("#filemanager_main").each(function(){
    fileManager({
      con: $(this),
      multiple: true
    });
  });
});

function fileManager(settings)
  {
    settings = jQuery.extend({
      
      id: '',
      con: new Object(),
      multiple: true,
      session_id: '',
      
      classList: 'fm_list',
      classListFiles: 'fm_list_files',
      classInfo: 'fm_info',
      classToolbar: 'fm_toolbar',
      classTree: 'fm_tree',
      classSelected: 'fm_selected',
      classHover: 'fm_hover',
      classLoading: 'fm_loader',
      classFolderOpen: 'fm_fld_open',
      classItemSelectable: 'item_selectable',
      classHidden: 'fm_hidden',
      classFolderActive: 'fm_fld_active',
      classPath: 'fm_path',
      
      script: '/index.php',
      scriptManager: './scripts/components/system/files/ajax/ajax.FileManager.php',
      Root: "./docs/files",
      Path: "/",
      template: 'list',
      pathLoader: '/templates/admin/common/images/filemanager/spinner.gif',
      Filter: new Array(),
      
      labelLoading: 'Načítání ...',
      labelCreateNewFolder: 'Vytvořit nový adresář',
      labelNewFolder: 'Nový adresář',
      labelShowFilesList: 'Zobrazit seznam souborů',
      labelShowList: 'Seznam',
      labelShowThumbnails: 'Zobrazit miniatury',
      labelShowThumbs: 'Miniatury',
      labelAreYouSureRemovingFolder: 'Určitě chcete odstranit vybraný adresář?',
      labelAreYouSureRemovingFile: 'Určitě chcete odstranit vybraný soubor?',
      labelRenameFile: 'Přejmenovat soubor',
      labelRename: 'Přejmenovat',
      labelRemove: 'Odstranit',
      labelSelect: 'Vybrat',
      labelRotateMinus: 'Otočit proti směru',
      labelRotatePlus: 'Otočit po směru',
      labelCrop: 'Oříznout',
      labelWatermark: 'Vodoznak',
      labelRotateImageMinus: 'Otočit obrázek proti směru hodinových ručiček',
      labelRotateImagePlus: 'Otočit obrázek po směru hodinových ručiček',
      labelCropImage: 'Oříznout obrázek',
      labelAddWatermark: 'Přidat do obrázku vodoznak',
      labelMoreInfo: 'Pro více informací poklikejte na vybraný soubor v prostředním sloupci',
      labelNoFiles: 'Žádné soubory',
      labelPath: 'Cesta:',
      
      enableRotateMinus: true,
      enableRotatePlus: true,
      enableCrop: false,
      enableWatermark: false,
      enableEdit: false,
      enableRemoveFile: true,
      enableRemoveFolder: true,
      enableRenameFile: true,
      enableRenameFolder: true,
      enableSelectAll: true,
      
      
      selectedFile: new Array(),
      
      cssPadding: 5,
      cssBorderWidth: 1,
      cssMargin: 5,
      
      menuFile: [ 
            {'Detail':{ onclick:function(menuItem,menu) { showInfo($(this).find("input").attr("value")); } } }, 
            {'Vybrat':{ onclick:function(menuItem,menu) { if($(this).hasClass(settings.classItemSelectable)){toggleFileSelect($(this)); }} } }, 
            $.contextMenu.separator, 
            {'Přejmenovat':{ onclick:function(menuItem,menu) { name = $(this).find("input").attr("value").split("/");name = name.pop();if(new_name = prompt(settings.labelRenameFile, name)){renameFile(name, new_name);} }, disabled:false } }, 
            {'Ostranit':{ onclick:function(menuItem,menu) { if(confirm(settings.labelAreYouSureRemovingFile)){removeFile($(this).find("input").attr("value"));} }, icon:'/scripts/components/system/menu/icon/delete-icon-16.png', disabled:false } }, 
          ], 
        
      menuFolder: [ 
            {'Přejmenovat':{ onclick:function(menuItem,menu) { name = $(this).attr("path").split("/");name = name.pop();if(new_name = prompt(settings.labelRenameFolder, name)){renameFolder(name, new_name);} }, disabled:false } }, 
            $.contextMenu.separator, 
            {'Ostranit':{ onclick:function(menuItem,menu) { if(confirm(settings.labelAreYouSureRemovingFolder)){removeFolder($(this).attr("path"));} }, icon:'/scripts/components/system/menu/icon/delete-icon-16.png', disabled:false } }, 
          ] 
    },settings);
		
		show();
		
		function show()
      {
        //settings.con = settings
        //settings.con = $("#" + settings.id);
        
        settings.con.append('\n<div class="'+settings.classTree+'"><p class="fm_toolbar"></p><div></div></div>');
        settings.con.append('\n<div class="'+settings.classList+'"><p class="fm_toolbar"></p><div></div></div>');
        settings.con.append('\n<div class="'+settings.classInfo+'"><p class="fm_toolbar"></p><div><strong class="empty_note">'+settings.labelMoreInfo+'</strong></div></div>');
        settings.con.append('\n<div class="'+settings.classHidden+'"></div>');
        
        settings.oHidden = $("."+settings.classHidden);
        settings.oTree = $("."+settings.classTree+" > div");
        settings.oList = $("."+settings.classList+" > div");
        settings.oInfo = $("."+settings.classInfo+" > div");
        settings.tTree = $("."+settings.classTree+" > p");
        settings.tList = $("."+settings.classList+" > p");
        settings.tInfo = $("."+settings.classInfo+" > p");
        
        settings.tTree.append('<a class="butt_small bs_makedir" href="javascript: void(0);" title="'+settings.labelCreateNewFolder+'">'+settings.labelNewFolder+'</a>');
        settings.tList.append('<input class="input_file" type="file" name="file_to_upload" id="file_to_upload" />');
        settings.tList.append('<a class="butt_small bs_list bs_right" href="javascript: void(0);" title="'+settings.labelShowFilesList+'">'+settings.labelList+'</a>');
        settings.tList.append('<a class="butt_small bs_thumbs bs_right" href="javascript: void(0);" title="'+settings.labelShowThumbnails+'">'+settings.labelThumbs+'</a>');
        settings.tList.append('<input type="checkbox" class="input_checkbox" />');
        
        settings.tTree.find("a.bs_makedir").click(function(){if(name = prompt(settings.labelCreateNewFolder, settings.labelNewFolder)){makeDir(name);}});
        settings.tList.find("a.bs_thumbs").click(function(){settings.template = "thumbs";showList(settings.Path);});
        settings.tList.find("a.bs_list").click(function(){settings.template = "list";showList(settings.Path);});
        settings.tList.find("input:checkbox").click(function(){selectAllFiles($(this).attr("checked"))});
        
        showTree(settings.Path);
        showList(settings.Path);
        
        resizeManager();
        
        showUploadify(settings.session_id, settings.Path);
        
        $(window).resize(function(){resizeManager();});
      }
		
		function selectAllFiles(value)
		  {
        if(value)
          {
            $(settings.oList).find(".item."+settings.classItemSelectable).each(function(){
              setItemSelected($(this));
              selectFile($(this).find("input").attr("value"));
            });
          }
        else
          {
            $(settings.oList).find(".item").each(function(){
              unsetItemSelected($(this));
              deselectFile($(this).find("input").attr("value"));
            });
          }
      }
		
		function showLoading()
      {
        return '<div class="'+settings.classLoading+'"><img src="'+settings.pathLoader+'" /><span>' + settings.labelLoading + '</span></div>';
      }
    
    function showTree(path)
      {
        settings.oTree.html(showLoading());
        $.post(settings.script, {'PHPSESSID':settings.session_id, initialize_for_ajax: '1', file: settings.scriptManager,  fm_action: "tree", fm_root: settings.Root, fm_dir: path }, function(data) {
						settings.oTree.html(data);
						
						highlightTree();
						
            $(settings.oTree).find("a.fm_folder").contextMenu(settings.menuFolder,{theme:'xp', shadow: false}); 
            
            $(settings.oTree).find("a").click(function(){
              showList($(this).attr("path"));
              settings.Path = $(this).attr("path");
              highlightTree();
            });
					});
      }
    
    function highlightTree()
      {
        $(settings.oTree).find("a").each(function(){
          $(this).removeClass(settings.classFolderActive);
          if($(this).attr("path") == settings.Path){$(this).addClass(settings.classFolderActive);};
        });
      }
    
    function showList(path)
      {
        settings.oList.html(showLoading());
        
        $.post(settings.script, { 'PHPSESSID':settings.session_id,'initialize_for_ajax':'1', file: settings.scriptManager, fm_action: "list", fm_root: settings.Root, fm_dir: path, fm_template: settings.template, fm_filter: settings.Filter }, function(data) {
						settings.oList.html('<div class="'+settings.classListFiles+'">'+data+'</div>');
						settings.oList.append('<div id="file_to_uploadQueue" style="display:none"></div>');
						settings.oList.prepend('<div class="'+settings.classPath+'">'+settings.labelPath+' <strong>'+settings.Path.substring(1).split("/").join(" &gt; ")+'</strong><div>');
						$("#file_to_upload").uploadifySettings("scriptData", {'initialize_for_ajax':'1', 'file':settings.scriptManager, fm_action: "uploadfile", fm_root: settings.Root, fm_dir: settings.Path});
            
            if(!$(settings.oList).find(".item").length) {$(settings.oList).append('<strong class="empty_note">'+settings.labelNoFiles+'</strong>');}
            
            $(settings.oList).find(".item").contextMenu(settings.menuFile,{theme:'xp', shadow: false}); 
						
            $(settings.oList).find(".item").each(function(){
              if(in_array($(this).find("input").attr("value"), settings.selectedFile))
                {
                  setItemSelected($(this));
                }
              });
						
            $(settings.oList).find(".item input").click(function(){$(this).attr("checked", !$(this).attr("checked"));});
            
            $(settings.oList).find(".item").mouseover(function(){
						  $(this).addClass(settings.classHover);
            });
            
            $(settings.oList).find(".item").mouseout(function(){
						  $(this).removeClass(settings.classHover);
            });
						
            $(settings.oList).find(".item.item_selectable").click(function(){
              toggleFileSelect($(this));
             });
                
              $(settings.oList).find(".item").dblclick(function(){
                showInfo($(this).find("input").attr("value"));
              });
              
            
          });
      }
    
    function showFileToolbar(file_path)
      {
        settings.tInfo.html('');
        var ext = file_path.split(".");
        switch(ext.pop())
          {
            case "bmp": case "jpg": case "jpeg": case "gif": case "png":
              settings.tInfo.append((settings.enableRotateMinus ? '<a class="butt_small bs_rotate_minus" href="javascript: void(0);" title="'+settings.labelRotateImageMinus+'">'+settings.labelRotateMinus+'</a>' : '<span class="butt_small bs_rotate_minus">'+settings.labelRotateMinus+'</span>'));
              settings.tInfo.append((settings.enableRotatePlus ? '<a class="butt_small bs_rotate_plus" href="javascript: void(0);" title="'+settings.labelRotateImagePlus+'">'+settings.labelRotatePlus+'</a>' : '<span class="butt_small bs_rotate_plus">'+settings.labelRotatePlus+'</span>'));
              settings.tInfo.append((settings.enableCrop ? '<a class="butt_small bs_crop" href="javascript: void(0);" title="'+settings.labelCropImage+'">'+settings.labelCrop+'</a>' : '<span class="butt_small bs_crop">'+settings.labelCrop+'</span>'));
              settings.tInfo.append((settings.enableWatermark ? '<a class="butt_small bs_watermark" href="javascript: void(0);" title="'+settings.labelAddWatermark+'">'+settings.labelWatermark+'</a>' : '<span class="butt_small bs_watermark">'+settings.labelWatermark+'</span>'));
              settings.tInfo.find("a.bs_rotate_minus").click(function(){rotateImage(file_path, 90);});
              settings.tInfo.find("a.bs_rotate_plus").click(function(){rotateImage(file_path, -90);});
              break;
            case "txt": case "css": case "csv":
              settings.tInfo.append((settings.enableEdit ? '<a class="butt_small bs_edit" href="javascript: void(0);" title="'+settings.labelEditFile+'">'+settings.labelEdit+'</a>' : '<span class="butt_small bs_edit">'+settings.labelEdit+'</span>'));
              break;
            case "zip":
              settings.tInfo.append((settings.enableExtract ? '<a class="butt_small bs_extract" href="javascript: void(0);" title="'+settings.labelExtractArchive+'">'+settings.labelExtract+'</a>' : '<span class="butt_small bs_extract">'+settings.labelExtract+'</span>'));
              break;
          }
      //  settings.tInfo.append('<a class="butt_small bs_rotate_minus" href="javascript: void(0);" title="'+settings.labelRotateImageMinus+'">'+settings.labelRotateMinus+'</a>');
                
      }
    
    function showInfo(file_path)
      {
        settings.oInfo.html(showLoading());
        $.post(settings.script, { 'PHPSESSID':settings.session_id,'initialize_for_ajax':'1', file: settings.scriptManager, fm_action: "info", fm_root: settings.Root, fm_dir: settings.Path, fm_file: file_path}, function(data) {
						settings.oInfo.html(data);
						showFileToolbar(file_path);
					});
      }
		
		function showUploadify(session_id, path)
      {
        $('#file_to_upload').uploadify({
		      'uploader'       : '/scripts/components/system/files/flash/uploadify.swf',
		      'script'         : settings.script,
		      'folder'         : settings.Root+settings.Path,
		      'queueID'        : 'file_to_uploadQueue',
		      'method'         : 'POST',
		      'scriptData': {'PHPSESSID':session_id,'initialize_for_ajax':'1', 'file':settings.scriptManager, fm_action: "uploadfile", fm_root: settings.Root, fm_dir: settings.Path},
          'buttonImg': '/scripts/components/system/files/icon/browseBtn.png',
          'cancelImg': '/scripts/components/system/files/icon/cancelBtn.png',
		      'width': 100,
		      'height': 20,
		      'wmode':'transparent',
		      'fileDataName': 'file_to_upload',
		      'auto'           : true,
		      'multi'          : true,
  		
          'onInit'    : function() {
            
            },
    
          'onCancel' : function (event, data) {
			       if (data.fileCount == 0) {
              $('#file_to_uploadQueue').css('display','none');
              settings.oList.find("."+settings.classListFiles).css('display','block');
              //location.href=location.href;
              showList(settings.Path);
            }
          },
    
          'onSelectOnce' : function(event, data) {
			     if (data.fileCount > 0) {
			       $('#file_to_uploadQueue').css('display','block');
              settings.oList.find("."+settings.classListFiles).css('display','none');
            }
          },

          'onAllComplete' : function(event, data) {
		        showList(settings.Path);
            }
	       });
      }
		
		//**********************************************************************************************************************************
		
		function removeFile(path)
      {
        $.post(settings.script, {'PHPSESSID':settings.session_id, initialize_for_ajax: '1', file: settings.scriptManager,  fm_action: "remove", fm_root: settings.Root, fm_dir: settings.Path, fm_remove_path: path }, function(data) {
						showList(settings.Path);
					});
      }
     
    function removeFolder(path)
      {
        $.post(settings.script, {'PHPSESSID':settings.session_id, initialize_for_ajax: '1', file: settings.scriptManager,  fm_action: "remove_fld", fm_root: settings.Root, fm_dir: settings.Path, fm_remove_path: path }, function(data) {
						showTree(settings.Path);
					});
      }
      
    function renameFile(old_name, new_name)
      {
        $.post(settings.script, {'PHPSESSID':settings.session_id, initialize_for_ajax: '1', file: settings.scriptManager,  fm_action: "rename", fm_root: settings.Root, fm_dir: settings.Path, fm_rename_old_name: old_name, fm_rename_new_name: new_name }, function(data) {
						showList(settings.Path);
					});
      }
    
    function renameFolder(old_name, new_name)
      {
        $.post(settings.script, {'PHPSESSID':settings.session_id, initialize_for_ajax: '1', file: settings.scriptManager,  fm_action: "rename_fld", fm_root: settings.Root, fm_dir: settings.Path, fm_rename_old_name: old_name, fm_rename_new_name: new_name }, function(data) {
						showTree(settings.Path);
					});
      }
    
    function makeDir(name)
      {
        $.post(settings.script, {'PHPSESSID':settings.session_id, initialize_for_ajax: '1', file: settings.scriptManager,  fm_action: "makedir", fm_root: settings.Root, fm_dir: settings.Path, fm_makedir_name: name }, function(data) {
						showTree(settings.Path);
					});
      }
    
    function rotateImage(file_path, degrees)
      {
        $.post(settings.script, {'PHPSESSID':settings.session_id, initialize_for_ajax : '1', file: settings.scriptManager, fm_action: "rotate_image", fm_root: settings.Root, fm_dir: settings.Path, fm_rotate_path: file_path, fm_degrees: degrees}, function(data){
            showInfo(file_path);
          });
      }
    
    //**********************************************************************************************************************************
		
    function resizeManager()
      {
        settings.width = settings.con.width();
        settings.height = settings.con.height();
        settings.toolbarHeight = $("."+settings.classToolbar).height()+settings.cssMargin;
        
        settings.treeWidth = Math.floor(settings.width / 4);  
        settings.listWidth = Math.floor(((settings.width - settings.treeWidth) / 3)*2);
        settings.infoWidth = Math.floor(settings.width - settings.listWidth - settings.treeWidth);
        
        $("."+settings.classTree).css({height: settings.height+"px", width: (settings.treeWidth-settings.cssMargin) + "px", left: 0});
        $("."+settings.classList).css({height: settings.height+"px", width: (settings.listWidth-settings.cssMargin) + "px", left: settings.treeWidth+"px"});
        $("."+settings.classInfo).css({height: settings.height+"px", width: settings.infoWidth + "px", right: 0});
        settings.oTree.css({height: ((settings.height-settings.toolbarHeight)-(settings.cssBorderWidth*2)-(settings.cssPadding*4))+"px"});
        settings.oList.css({height: ((settings.height-settings.toolbarHeight)-(settings.cssBorderWidth*2)-(settings.cssPadding*4))+"px"});
        settings.oInfo.css({height: ((settings.height-settings.toolbarHeight)-(settings.cssBorderWidth*2)-(settings.cssPadding*4))+"px"});
      }
   
    //**********************************************************************************************************************************
		
    function setItemSelected(o)
      {
        $(o).find("input").attr("checked", true); 
        $(o).addClass(settings.classSelected);
      }
    
    function unsetItemSelected(o)
      {
        if(o)
          {
            $(o).find("input").attr("checked", false); 
            $(o).removeClass(settings.classSelected);
          }
        else
          {
            settings.oList.find(".item input").attr("checked", false); 
            settings.oList.find(".item").removeClass(settings.classSelected);
          }
      }
    
    function toggleFileSelect(o)
      {
        o.find("input").attr("checked", !o.find("input").attr("checked"));
        
        if(o.find("input").attr("checked"))
          {
            if(!settings.multiple)
              {
                unsetItemSelected();
              }
            setItemSelected(o);
            selectFile(o.find("input").attr("value"));
          }
        else
          {
            unsetItemSelected(o);
            deselectFile(o.find("input").attr("value"));
          }
      }
    
    function selectFile(path)
      {
        settings.selectedFile[(settings.multiple ? settings.selectedFile.length : 0)]=path;
        showHiddenList();
      }
    
    function showHiddenList()
      {
        settings.oHidden.html('');
        for(x in settings.selectedFile)
          {
            if(settings.selectedFile[x].length)
              {
                settings.oHidden.append('<input type="hidden" name="selected_file" value="' + settings.Root + settings.selectedFile[x] + '" />');
              }
          }
      }
    
    function deselectFile(path)
      {
        for(x in settings.selectedFile)
          {
            if(settings.selectedFile[x] == path){delete settings.selectedFile[x];}
          }
        showHiddenList();
      }
  }