var _site_id = "";
function show_ftp (site_id)
{
  show_disabled_layer();
  
  _site_files = new Array();
  reset_ftp_form ();
  
  _site_id = site_id;
  var popup = $('ftp_div');  
  center_obj (popup);
  
  x_get_site_ftp_info(_site_id, x_get_site_ftp_info_cb);
  
  show_loading ($('ftp_site_list'));
  x_get_site_file_list(site_id, x_get_site_file_list_cb);  
}

function reset_ftp_form ()
{
  $('ftp_host').value = '';
  $('ftp_path').value = '';
  $('ftp_port').value = '21';
  $('ftp_login').value = '';
  $('ftp_passwd').value = '';
  
  $('ftp_host_list').innerHTML = "";
  $('ftp_status').innerHTML = "";
  
  $('ftp_file_status').innerHTML = "";
  
  ftp_edit();
}

function x_get_site_ftp_info_cb (info)
{
  if (info)
  {
    $('ftp_host').value = info['host'];
    $('ftp_path').value = info['default_dir'];
    $('ftp_port').value = info['port'];
    $('ftp_login').value = info['login'];
    $('ftp_passwd').value = info['passwd'];
    
    ftp_connect ();
  }
}

function x_get_site_file_list_cb (html)
{
  $('ftp_site_list').innerHTML = html;
}

/*
* Check all children items that are in scope of the parent
*/
function handle_checkbox (start, scope)
{
  var curr_chkbox = $('site_item_'+start);
  var chk_status = curr_chkbox.checked;
  
  curr_chkbox.checked = chk_status;
  
  for (var i = start+1; i <= scope+start; i++)
  {
    var item = $('site_item_'+i);
    if (item)
    {
      item.checked = chk_status;
    }
  }
}

function move_site_files ()
{
  var ftp_host = $('ftp_host').value;
  var ftp_port = $('ftp_port').value;
  var ftp_login = $('ftp_login').value;
  var ftp_passwd = $('ftp_passwd').value;
    
  if (validate_ftp_params ())
  {
    var items = document.getElementsByClassName('site_item_chkbox');
    
    $('ftp_host_list').innerHTML = "Uploading files....<img src='images/indicator.gif' />";
    $('ftp_file_status').innerHTML = "";

    for (var i = 0; i < items.length; i++)
    {
      var item = items[i];
      if (item.checked)
      {
        var chk_id = parse_id(item.id); 
        
        var item_name = $('site_item_name_'+chk_id).value;
        var item_type = $('site_item_type_'+chk_id).value;
        var item_parent = $('site_item_parent_'+chk_id).value;
        var item_id = $('site_item_id_'+chk_id).value;
        
        var remote_path = get_parent_path (chk_id);
        remote_path = ftp_dir + '/' + remote_path;
        
        $('ftp_file_status').innerHTML += get_item_uploading_html (chk_id, item_name, item_type)
        
        if (item_type == 'FOLDER')
        {// ensure folder exists on server
          x_create_ftp_path (chk_id, ftp_host, ftp_port, ftp_login, ftp_passwd, remote_path, x_ftp_upload_file_cb);
        }
        else
        {// upload file 
          var id = item_id == "" ? _site_id : item_id; 
          x_ftp_upload_file(id, chk_id, ftp_host, ftp_port, ftp_login, ftp_passwd, remote_path, item_type, item_name, x_ftp_upload_file_cb);          
        }
      }    
    }
    get_ftp_dir_list (".", true);
  }
}

function get_item_uploading_html (chk_id, item_name, item_type)
{
  var img_type;
  if (item_type == 'FOLDER')
  {
    img_type = 'images/common/folder.gif';
  }
  else if (item_type == 'CSS')
  {
    img_type = 'images/common/css.png';
  }
  else if (item_type == 'HTML')
  {
    img_type = 'images/common/html.png';
  }
  else
  {
    img_type = 'images/doctypes/image.gif';
  }
  
  var html = "<div class='file_transfer_item'>";
  html += "<span><img src='"+img_type+"' />&nbsp;"+item_name + "</span>";
  html += "<span id='file_item_status_"+chk_id+"'></div>";
  
  return html;
}

function x_ftp_upload_file_cb (z)
{
  var chk_id = z['chk_id'];
  var elem = $('file_item_status_'+chk_id);
  div_ScrollToElement(elem);
  if (z['retVal'] == 1)
  { 
    elem.innerHTML = "<span class='success'>&nbsp;&nbsp;&nbsp;Complete</span>";    
  }
  else
  {
    elem.innerHTML = "<span class='error'>&nbsp;&nbsp;" + z['retVal'] + "</span>";
  }    
}

function div_ScrollToElement(elem)
{
  var i = elem.offsetTop - 30;
  $('ftp_file_status').scrollTop = i;
}


function get_parent_path (chk_id)
{
  var item = $('site_item_'+chk_id);
  var item_name = $('site_item_name_'+chk_id).value;
  var item_parent_id = $('site_item_parent_'+chk_id).value;
  
  if (item_parent_id == 0)
  {
    return item_name;
  }
  else
  {
    if ($('site_item_'+item_parent_id).checked)
    {
      return get_parent_path (item_parent_id) + "/" + item_name;
    }
    else
    {
      return item_name;
    }
  }
}

function ftp_connect ()
{
  var ftp_host = $('ftp_host').value;
  var ftp_path = $('ftp_path').value;
  var ftp_port = $('ftp_port').value;
  var ftp_login = $('ftp_login').value;
  var ftp_passwd = $('ftp_passwd').value;
    
  if (validate_ftp_params ())
  {
    var ftp_status = $('ftp_status');
    ftp_status.innerHTML = "Connecting.... <img src='images/ajax-loader.gif' />";
    $('ftp_host_list').innerHTML = "";    
    x_ftp_attempt_connection (_site_id, ftp_host, ftp_path, ftp_port, ftp_login, ftp_passwd, ftp_connect_cb);
  }
}

function validate_ftp_params ()
{
  var ftp_host = $('ftp_host').value;
  var ftp_path = $('ftp_path').value;
  var ftp_port = $('ftp_port').value;
  var ftp_login = $('ftp_login').value;
  var ftp_passwd = $('ftp_passwd').value;
  var ftp_status = $('ftp_status');
  
  if (ftp_host == '' ||  ftp_port == '' || ftp_login == '' || ftp_passwd == '')
  {
    ftp_status.innerHTML = "<div class='error'>Invalid FTP connection parameters</div>";
    return false;
  }
  else if (!IsWholeNumber(ftp_port))
  {
    ftp_status.innerHTML = "<div class='error'>Invalid FTP Port</div>";
    return false;
  }
  
  return true;
}


function ftp_connect_cb (z)
{
  if (z != 1)
  {
    $('ftp_status').innerHTML = "<div class='error'>Connection Error</div>";
    $('ftp_host_list').innerHTML = "<div align='center' class='error'>" + z + "</div>";
    $('btn_move_files').disabled = true;
  }
  else
  {// Successfully logged into FTP server
    set_ftp_disabled (true);
    $('btn_move_files').disabled = false;
    
    $('ftp_button').innerHTML = '<button onclick="ftp_edit();" >Edit</button>';
    
    $('ftp_status').innerHTML = "<div class='success'>Connected</div>";
    ftp_dir = "";
    get_ftp_dir_list ($('ftp_path').value, true);
  }
}

function set_ftp_disabled (disable)
{
  $('ftp_host').disabled = disable;
  $('ftp_path').disabled = disable;
  $('ftp_port').disabled = disable;
  $('ftp_login').disabled = disable;
  $('ftp_passwd').disabled = disable;
}

function ftp_edit() 
{
  set_ftp_disabled (false);
  $('ftp_button').innerHTML = '<button onclick="ftp_connect();" >Connect</button>';    
}

var ftp_dir = "";
function get_ftp_dir_list (path, show_loading)
{
  if (show_loading)
  {
    $('ftp_host_list').innerHTML = "Retrieving Directory Listing...<img src='images/indicator.gif' />";
  }
  
  var ftp_host = $('ftp_host').value;
  var ftp_port = $('ftp_port').value;
  var ftp_login = $('ftp_login').value;
  var ftp_passwd = $('ftp_passwd').value;
  
  ftp_dir = ftp_dir + "/" + path;
  
  x_ftp_get_dir_listing (ftp_host, ftp_port, ftp_login, ftp_passwd, ftp_dir, x_ftp_get_dir_listing_cb);
}

function x_ftp_get_dir_listing_cb (z)
{
  if (z['err'] == 0)
  {
    ftp_dir = z['dir'];
    $('ftp_host_list').innerHTML = z['html']; 
    $('btn_move_files').disabled = false;   
  }
  else
  {
    var ftp_status = $('ftp_status');
    ftp_status.innerHTML = "<div class='error'>Directory Listing Error</div>";
    $('ftp_host_list').innerHTML = "<div class='error'>"+z['errmsg']+"</div>";
    $('btn_move_files').disabled = true;
  }
}

function ftp_delete (item_name, is_dir)
{
  var ftp_div = $('ftp_div');
  if (is_dir == 1)
  {
    var msg = "Are you sure you want to delete the <b>"+item_name+"</b> folder and all files within?";
    var confirm_action = 'ftp_delete_folder(\''+item_name+'\');';   
  }
  else
  {
    var msg = "Are you sure you want to delete <b>"+item_name+"</b>?";
    var confirm_action = 'ftp_delete_file(\''+item_name+'\');';
  }
  var cancel_action = 'restore_ftp_div();';
  ftp_div.style.zIndex = 0;
  show_confirm (msg, confirm_action, cancel_action);
}

function ftp_delete_folder (item_name)
{
  restore_ftp_div ();
  
  var ftp_host = $('ftp_host').value;
  var ftp_port = $('ftp_port').value;
  var ftp_login = $('ftp_login').value;
  var ftp_passwd = $('ftp_passwd').value;
    
  if (validate_ftp_params ())
  {
    $('ftp_host_list').innerHTML = "Deleting directory '"+item_name+"'...<img src='images/indicator.gif' />";
    x_ftp_delete_folder (ftp_host, ftp_port, ftp_login, ftp_passwd, ftp_dir + "/" + item_name, x_ftp_delete_file_cb);
  }
}

function ftp_delete_file (item_name)
{
  restore_ftp_div ();
  
  var ftp_host = $('ftp_host').value;
  var ftp_port = $('ftp_port').value;
  var ftp_login = $('ftp_login').value;
  var ftp_passwd = $('ftp_passwd').value;
    
  if (validate_ftp_params ())
  {
    $('ftp_host_list').innerHTML = "Deleting file '"+item_name+"'...<img src='images/indicator.gif' />";
    x_ftp_delete_file (ftp_host, ftp_port, ftp_login, ftp_passwd, ftp_dir + "/" + item_name, x_ftp_delete_file_cb);
  }
}

function x_ftp_delete_file_cb (z)
{
  get_ftp_dir_list (".", true);
}

function restore_ftp_div ()
{
  Effect.DropOut('msg_popup');
  $('ftp_div').style.zIndex = 50;
  show_disabled_layer();
}

function show_new_ftp_folder ()
{
  $('new_folder_form').style.display = '';
  $('new_folder_name').focus();
}

function save_new_ftp_folder ()
{
  var folder_name = $('new_folder_name').value;
  
  if (folder_name == '' || !isAlphanumeric(folder_name))
  {
    alert ("Invalid Folder Name.");
  }
  else
  {
    var ftp_host = $('ftp_host').value;
    var ftp_port = $('ftp_port').value;
    var ftp_login = $('ftp_login').value;
    var ftp_passwd = $('ftp_passwd').value;
    
    remote_path = ftp_dir + '/' + folder_name;
    
    if (validate_ftp_params ())
    {
      $('ftp_host_list').innerHTML = "Creating Folder '"+folder_name+"'...<img src='images/indicator.gif' />";
      x_create_ftp_path (0, ftp_host, ftp_port, ftp_login, ftp_passwd, remote_path, new_folder_cb);
    }
  }  
}

function cancel_new_ftp_folder ()
{
  $('new_folder_name').value = '';
  $('new_folder_form').style.display = 'none';
}

function new_folder_cb()
{
  get_ftp_dir_list (".", true);
}

function init()
{
  new Draggable('ftp_div',{scroll:window,handle:'ftp_div_handle'});
  window.onresize = handle_window_resize;
  handle_window_resize();
}

function handle_window_resize ()
{
//  resize_elem_height('sites_list', 105);
  resize_body();
}
