


$(document).ready(function() {
  $(".f_gallery").each(function(){
    fieldType_File({showField: !$(this).hasClass("field_disabled"), fieldName: $(this).attr("id"),fieldType: "gallery",containerId: "container_"+$(this).attr("id"),fieldFile: FieldFile[$(this).attr("id")]});
  });
  $(".f_files").each(function(){
    fieldType_File({showField: !$(this).hasClass("field_disabled"), fieldName: $(this).attr("id"),fieldType: "files",containerId: "container_"+$(this).attr("id"),fieldFile: FieldFile[$(this).attr("id")]});
  });
  $(".f_file").each(function(){
    fieldType_File({showField: !$(this).hasClass("field_disabled"), fieldName: $(this).attr("id"),fieldType: "file",containerId: "container_"+$(this).attr("id"),fieldFile: FieldFile[$(this).attr("id")]});
  });
  $(".f_image").each(function(){
    fieldType_File({showField: !$(this).hasClass("field_disabled"), fieldName: $(this).attr("id"),fieldType: "image",containerId: "container_"+$(this).attr("id"),fieldFile: FieldFile[$(this).attr("id")]});
  });
}); 

var FLD_FILEMANAGER = "/scripts/components/system/files/";
var FieldFile = new Array();

function fieldType_File(settings)
  {
    settings = jQuery.extend({
      
      fieldName: '',
      fieldType: 'image',
      containerId: '',
      fieldFile: new Array(),
      hiddenFields: '',
      showField: true,
      
      labelOpenManager: 'Otevřít průzkumník',
      labelManager: 'Průzkumník', 
      labelNoFilesSelected: 'Není vybrán žádný soubor',  
      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',
      labelRotateMinus: 'Otočit proti směru',
      labelRotatePlus: 'Otočit po směru',
      labelRemoveThisFile: 'Odebrat tento soubor',
      labelRemove: 'Odebrat',
      labelMoveItemUp: 'Posunout nahoru',
      labelMoveItemDown: 'Posunout dolů',
      labelMoveUp: 'Nahoru',
      labelMoveDown: 'Dolů',
      labelThumb: 'Náhled',
      labelMainImage: 'Hlavní',
      labelAddFiles: 'Přidat soubory',
      labelSelectFile: 'Vybrat soubor',
      labelFileName: 'Název',
      labelFileDescription: 'Popis',
      imagesOnLine: 6,
      
      idFilesTable: 'default_filestable',
      
      pathIconManager:  FLD_FILEMANAGER + 'icon/ico_filemanager_40x40.png',
      pathDefaultIcon: FLD_FILEMANAGER + 'icon/white/ico_file_20x20.png',
      maxWidth: 126,
      maxHeight: 110
      
		},settings);
		
		initialize();
		
    if(settings.showField){show();}
    else{remove();}
    
    function initialize()
      {
        $('#' + settings.fieldName + ' label input').unbind("click").click(function(){
          if($(this).attr("checked")){show();}
          else{remove();}
          //$('#' + settings.fieldName).toggleClass("field_disabled");
        });
        
        
        settings.idFilesTable = settings.fieldName + '_filestable';
        settings.idButton = settings.fieldName + '_buttonManager';
        settings.idList = settings.fieldName + '_list';
        settings.container = $('#' + settings.containerId);
        settings.multiple = (settings.fieldType == "files" || settings.fieldType == "gallery") ? true : false;
        
        for(x in settings.fieldFile)
          {
            if(settings.fieldFile[x]["order"] == 0){repairFileOrder();break;}
          }
      }
    
    function show()
      {
        settings.container.append('<a class="butt_text bt_filemanager" id="' + settings.idButton + '" title="' + settings.labelOpenManager+ '" href="javascript: void(0);">'+(settings.fieldType == 'gallery' || settings.fieldType == 'files' ? settings.labelAddFiles : settings.labelSelectFile)+'</a>');
        settings.container.append('<div class="block_fileslist bf_'+settings.fieldType+'" id="'+settings.idList+'"></div>');
        showList();
        $('#'+settings.idButton).click(function(){showManager(settings.fieldType);});
      }
    
    function remove()
      {
        settings.container.html('');
      }
    
    function showList()
      {
        var image_no = 1;
        settings.hiddenFields = '';
        $("#" + settings.idList).html('');
        
        settings.fieldFile.sort(function(a, b){return a["order"]-b["order"];});
        
        if(!arrayLength(settings.fieldFile))
          {
            $("#" + settings.idList).append('<strong class="empty_note">' + settings.labelNoFilesSelected + '</strong>');
          }
        else
          {
            switch (settings.fieldType)
              {
                case "file":
                case "files":
                  //$("#" + settings.idList).append('<table cellspacing="0" class="table_fileslist" id="' + settings.idFilesTable + '"></table>');
                  for(x in settings.fieldFile)
                    {
                      showFile(x, image_no);
                      image_no++;
                    }
                  break;
                
                case "image":
                case "gallery":
                  for (x in settings.fieldFile)
                    {
                      showImage(x, image_no);
                      image_no++;
                    }
                  $("#" + settings.idList).append('<div class="cleaner"></div>');
                  break;
              }
            $("#" + settings.idList).append(settings.hiddenFields);
          }
        
        updateThumbnails();
      }
    
    function showManager(type, key)
      {
        var key = key || ''; 
        var filter = new Array();
        var multiple = false;
        
        switch(type)
          {
            case 'image': 
              multiple = false;
              filter = ["jpg", "jpeg", "bmp", "gif", "png"];
              break;
            case 'gallery': 
              multiple = true;
              filter = ["jpg", "jpeg", "bmp", "gif", "png"];
              break;
            case 'thumb': 
              multiple = false;
              filter = ["jpg", "jpeg", "bmp", "gif", "png"];
              break;
            case 'file':
              multiple = false;
              filter = new Array();
              break;
            case 'files':
            default: 
              multiple = true;
              filter = new Array();
              break;
          }
        
        ShowDialogWindow({
          windowID: 'dlg_file', 
          title: settings.labelManager, 
          width: 900, 
          height: 600, 
          callin: function(win){
          
          fileManager({
            con: win,
            multiple: true,
            Filter: filter
          });
          
          }, 
          callback: function(win){
            switch(type)
              {
                case "thumb": returnThumbnail(win,key);break;
                default: returnFile(win); break;
              } 
            }
          });
      }
    
    function maxImageSize(width, height)
      {
        if(width>=height)
          {
            width = settings.maxWidth; 
            height = (height/width)*settings.maxHeight; 
          }
        else
          {
            width = (width/height)*settings.maxWidth; 
            height = settings.maxHeight; 
          }
        imgSize = new Array(width,height);
        return imgSize;
      }
    
    function showImage(x, arr_key)
      {
        id_blockItem = settings.fieldName + '_item_' + x;
        
        path_thumb = modFilePath((settings.fieldFile[x]["thb"].length ? settings.fieldFile[x]["thb"] : settings.fieldFile[x]["full"])) + '?unique=' + new Date().valueOf();
        
        $("#" + settings.idList).append(
          '\n<div class="block_image' + ((arr_key%settings.imagesOnLine) == 0 ? ' bi_last' : '') + '" id="' + id_blockItem + '">' + 
          '\n<div class="bi_image">' + 
          '\n<img src="' + path_thumb + '" alt="' + settings.fieldFile[x]["caption"] + '" />' + 
          '\n<a class="butt_small bs_rotate_minus" href="javascript:void(0);" title="'+settings.labelRotateImageMinus+'">'+settings.labelRotateMinus+'</a>' + 
          '\n<a class="butt_small bs_rotate_plus" href="javascript:void(0);" title="'+settings.labelRotateImagePlus+'">'+settings.labelRotatePlus+'</a>' +
          '\n</div>' + 
          '<input class="input_default input_caption" type="text" name="'+settings.fieldName+'_caption['+arr_key+']" value="' + (settings.fieldFile[x]["caption"].length ? settings.fieldFile[x]["caption"] : settings.labelFileName) + '" />' +
          '\n<textarea class="input_description" name="'+settings.fieldName+'_description['+arr_key+']">'+(settings.fieldFile[x]["description"].length ? settings.fieldFile[x]["description"] : settings.labelFileDescription)+'</textarea>' +
          
          '\n<a href="javascript:void(0);" id="' + id_blockItem + '_butt_remove" class="butt_small bs_remove" title="' + settings.labelRemoveThisFile + '">'+settings.labelRemove+'</a>' +
          
          (arrayLength(settings.fieldFile)>1 ? 
              '\n<input class="input_radio" type="radio"' + (settings.fieldFile[x]["switch_main"] == 1 ? ' checked="checked"' : '') + ' name="'+settings.fieldName+'_switch_mainimage" value="'+settings.fieldFile[x]["id"]+'" /><label for="'+settings.fieldName+'_switch_mainimage">'+settings.labelMainImage+'</label>' + 
              (settings.fieldFile[x]["order"] > 1 ? '\n<a href="javascript:void(0);" id="' + id_blockItem + '_butt_moveleft" class="butt_small bs_moveleft" title="'+settings.labelMoveItemUp+'"><span>'+settings.labelMoveUp+'</span></a>' : '<span class="butt_small bs_moveleft">'+settings.labelMoveUp+'</span>') + 
              (settings.fieldFile[x]["order"] < arrayLength(settings.fieldFile) ? '\n<a href="javascript:void(0);" id="' + id_blockItem + '_butt_moveright" class="butt_small bs_moveright" title="'+settings.labelMoveItemDown+'"><span>'+settings.labelMoveDown+'</span></a>' : '<span class="butt_small bs_moveright">'+settings.labelMoveDown+'</span>')
              :
              '') + 
          
          '\n</div>\n');
        
        //imgSize = getImgSize(realFilePath(path_thumb));
        
        //var img = $('#' + id_blockItem + ' img');
        //var width = obj.clientWidth;
        //var height = obj.clientHeight;
        
        //maxSize = maxImageSize(width, height);
        
        //var width = img.naturalWidth;
        //var height = img.naturalHeight;
        
       // alert(width + "x" + height + ' -- ' + $('#' + id_blockItem + ' img').width() + "x"+ $('#' + id_blockItem + ' img').height());
        
        //$('#' + id_blockItem + ' img').width(maxSize[0]).height(maxSize[1]);
        $('#' + id_blockItem + ' .input_caption').focus(function(){if(!settings.fieldFile[x]['caption'].length){this.value = '';}});
        $('#' + id_blockItem + ' .input_caption').blur(function(){settings.fieldFile[x]['caption']=this.value;});
        $('#' + id_blockItem + ' .input_description').focus(function(){if(!settings.fieldFile[x]['description'].length){this.value = '';}});
        $('#' + id_blockItem + ' .input_description').blur(function(){settings.fieldFile[x]['description']=this.value;});
        
        $('#' + id_blockItem + ' .bs_remove').click(function(){removeFile(x);});
        $('#' + id_blockItem + ' .bs_moveleft').click(function(){moveFile(x, 0);});
        $('#' + id_blockItem + ' .bs_moveright').click(function(){moveFile(x, 1);});
        $('#' + id_blockItem + ' .bs_rotate_plus').click(function(){rotateImage(settings.fieldFile[x]["full"], 270);});
        $('#' + id_blockItem + ' .bs_rotate_minus').click(function(){rotateImage(settings.fieldFile[x]["full"], 90);});
        
        settings.hiddenFields +=
          '\n<input class="input_hidden" type="hidden" name="'+settings.fieldName+'_datetime['+arr_key+']" value="'+settings.fieldFile[x]["datetime"]+'" />' + 
          '\n<input class="input_hidden" type="hidden" name="'+settings.fieldName+'_path['+arr_key+']" value="'+settings.fieldFile[x]["full"]+'" />' + 
          '\n<input class="input_hidden" type="hidden" name="'+settings.fieldName+'_order['+arr_key+']" value="'+settings.fieldFile[x]["order"]+'" />' + 
          '\n<input class="input_hidden" type="hidden" name="'+settings.fieldName+'_id['+arr_key+']" value="'+settings.fieldFile[x]["id"]+'" />' + 
          '\n<input class="input_hidden" type="hidden" name="'+settings.fieldName+'_thb_path['+arr_key+']" value="'+settings.fieldFile[x]["thb"]+'" />' + 
          '\n<input class="input_hidden" type="hidden" name="'+settings.fieldName+'_new_thb_path['+arr_key+']" value="'+settings.fieldFile[x]["new_thb"]+'" />';
      }  
    
    function showFile(x, arr_key)
      {
        id_blockItem = settings.fieldName + '_item_' + x;
        
        path_icon = modFilePath(FLD_FILEMANAGER + 'icon/white/ico_' + settings.fieldFile[x]["type"] + '_20x20.png');
        
        path_thumb = modFilePath((settings.fieldFile[x]["new_thb"].length ? settings.fieldFile[x]["new_thb"] : settings.fieldFile[x]["thb"]));
        
        $("#" + settings.idList).append(
          '\n<div class="block_file" id="' + id_blockItem + '">' +
          (settings.fieldFile[x]["order"] > 1 ? '<a href="javascript:void(0);" class="butt_small bs_moveup" title="'+settings.labelMoveItemUp+'"><span>'+settings.labelMoveUp+'</span></a>' : '<span class="butt_small bs_moveup">'+settings.labelMoveUp+'</span>') +
          (settings.fieldFile[x]["order"] < arrayLength(settings.fieldFile) ? '<a href="javascript:void(0);" class="butt_small bs_movedown" title="'+settings.labelMoveItemDown+'"><span>'+settings.labelMoveDown+'</span></a>' : '<span class="butt_small bs_movedown">'+settings.labelMoveDown+'</span>') +
          '\n<img class="ico_small" src="' + (path_icon ? path_icon : settings.pathDefaultIcon ) + '" />' +
          '</td>' +
          '\n<strong>' + settings.fieldFile[x]["name"] + '</strong>' +
          '<input class="input_default input_caption" type="text" name="'+settings.fieldName+'_caption['+arr_key+']" value="' + (settings.fieldFile[x]["caption"].length ? settings.fieldFile[x]["caption"] : settings.labelFileName) + '" />' +
          '\n<input class="input_default input_description" type="text" name="'+settings.fieldName+'_description['+arr_key+']" value="'+(settings.fieldFile[x]["description"].length ? settings.fieldFile[x]["description"] : settings.labelFileDescription)+'" />' +
          '\n<a class="butt_small bs_remove" href="javascript:void(0);" title="' + settings.labelRemoveThisFile + '">'+settings.labelRemove+'</a>' +
          '\n<a class="butt_small bs_thumbnail" href="javascript:void(0);" title="' + path_thumb + '">' + settings.labelThumb + '</a>' +
          '\n</div>'
          );
        
        $('#' + id_blockItem + ' .input_caption').focus(function(){if(!settings.fieldFile[x]['caption'].length){this.value = '';}});
        $('#' + id_blockItem + ' .input_caption').blur(function(){settings.fieldFile[x]['caption']=this.value;});
        $('#' + id_blockItem + ' .input_description').focus(function(){if(!settings.fieldFile[x]['description'].length){this.value = '';}});
        $('#' + id_blockItem + ' .input_description').blur(function(){settings.fieldFile[x]['description']=this.value;});
        $('#' + id_blockItem + ' .bs_remove').click(function(){removeFile(x);});
        $('#' + id_blockItem + ' .bs_moveup').click(function(){moveFile(x, 0);});
        $('#' + id_blockItem + ' .bs_movedown').click(function(){moveFile(x, 1);});
        $('#' + id_blockItem + ' .bs_thumbnail').click(function(){showManager("thumb", x);});
        
        settings.hiddenFields += 
          '\n<input class="input_hidden" type="hidden" name="'+settings.fieldName+'_datetime['+arr_key+']" value="'+settings.fieldFile[x]["datetime"]+'" />' + 
          '\n<input class="input_hidden" type="hidden" name="'+settings.fieldName+'_path['+arr_key+']" value="'+settings.fieldFile[x]["full"]+'" />' + 
          '\n<input class="input_hidden" type="hidden" name="'+settings.fieldName+'_order['+arr_key+']" value="'+settings.fieldFile[x]["order"]+'" />' + 
          '\n<input class="input_hidden" type="hidden" name="'+settings.fieldName+'_id['+arr_key+']" value="'+settings.fieldFile[x]["id"]+'" />' + 
          '\n<input class="input_hidden" type="hidden" name="'+settings.fieldName+'_thb_path['+arr_key+']" value="'+settings.fieldFile[x]["thb"]+'" />' + 
          '\n<input class="input_hidden" type="hidden" name="'+settings.fieldName+'_new_thb_path['+arr_key+']" value="'+settings.fieldFile[x]["new_thb"]+'" />';
      }
  
    function rotateImage(file_path, degrees)
      {
        $.post("/index.php", {'initialize_for_ajax' : 'true', 'file': './scripts/components/system/files/mods/mod_rotate_image.php', 'file_path': file_path, 'degrees': degrees}, function(data){showList();});
      }
  
    function removeFile(x)
      {
        for(y in settings.fieldFile)
          {
            if(settings.fieldFile[y]["order"]>settings.fieldFile[x]["order"]) {settings.fieldFile[y]["order"]--;}
          }
        delete settings.fieldFile[x];
        showList();
      }
  
    function moveFile(x, direction)
      {
        nextItem = FindKey(settings.fieldFile, "order", (parseInt(settings.fieldFile[x]["order"])+1));
        peviousItem = FindKey(settings.fieldFile, "order", (parseInt(settings.fieldFile[x]["order"])-1));
        if(direction && nextItem!='undefined')
          {
            settings.fieldFile[x]["order"]++;
            settings.fieldFile[nextItem]["order"]--;
          }
        else if(!direction && peviousItem!='undefined')
          {
            settings.fieldFile[x]["order"]--;
            settings.fieldFile[peviousItem]["order"]++;
          }
        
        showList();
      }
    
    function addFile(path)
      {
        var temp_array = new Array();
        var file_type = path.split(".");
        var file_name = path.split("/");
    
        temp_array["id"]=0;
        temp_array["ico"]="";
        temp_array["type"]=file_type.pop();
        temp_array["name"]=file_name.pop();
        temp_array["caption"]=''; //settings.labelFileName;
        temp_array["description"]=''; //settings.labelFileDescription;
        temp_array["order"]=settings.multiple ? parseInt(arrMaxVal(settings.fieldFile, "order"))+1 : 1;
        temp_array["full"]=path;
        temp_array["thb"]=''; 
        temp_array["new_thb"] = path;
        temp_array["datetime"] = '';
        settings.fieldFile[(settings.multiple ? settings.fieldFile.length : 0)]=temp_array;
      }
     
    function returnFile(win)
      {
        $(win).find("input[name=selected_file]").each(function(){
          addFile(realFilePath($(this).attr("value")));
        });
        //for (a = 0; win.contents().find('#selected_file_'+a).length; a++)
        //  {
        //    if(win.contents().find('#selected_file_'+a).attr("checked"))
        //      {
        //        addFile(win.contents().find('#selected_file_'+a).attr("value"));
        //      }
        // }
        
        showList();
      }
      
    function returnThumbnail(win, x)
      {
        for (a = 0; win.contents().find('#selected_file_'+a).length; a++)
          {
            if(win.contents().find('#selected_file_'+a).attr("checked"))
              {
                settings.fieldFile[x]["new_thb"] = win.contents().find('#selected_file_'+a).attr("value");
                showList();return true;
              }
          }
        settings.fieldFile[x]["thb"] = '';
        settings.fieldFile[x]["new_thb"] = '';
        showList();
        return false;
      } 
    
    function repairFileOrder()
      {
        var order = 1;
        for(x in settings.fieldFile)
          {
            settings.fieldFile[x]["order"] = order;
            order++;
          }
      }
    
    function updateThumbnails()
      {
        $('#' + settings.containerId + " .block_fileslist a.bs_thumbnail").easyTooltip({
          showThumb: true,
          thumbParam: "title"
        });
      }
  }