var uploadInfo = {};

function getUploadForm(id) {
  if (typeof(id) == 'undefined') {
    return document.forms['upload'];
  }
  return document.forms['upload_' + id];
}

function ajaxGetUploadForm(handler_name) {
  var args = {
    'url' : '/ajax/handlers/getuploadform.xml',
    'groupName' : 'global'
  };
  if (typeof(tags) == 'undefined') {
    tags = '';
  }
  var params = {
    'handler_name' : handler_name
  };
  var handlers = {
    'onSuccess' : manageGetUploadForm
  };
  AjaxEngine.makeReplaceCall('getupladform', args, params, handlers);
  return false;
}

function manageGetUploadForm(response, response_data) {
  prefillAndShowPopup(response_data['PopupContent']);
  setTimeout(response_data['HandlerName'], 500);
  return false;
}

function showUploadPopup() {
  uploadInfo = {};
  return ajaxGetUploadForm("showUploadPopupLazy()");
}

function showUploadSamplesPopup() {
  return ajaxGetUploadForm("showUploadPopupLazy('sample')");
}

function showUploadPopupLazy(tags) {
  var form = getUploadForm();
  if (typeof(form.elements['username']) != 'undefined') {
    form.elements['username'].focus();
  } else {
    form.elements['title'].focus();
  }
  if (tags) {
    form.elements['tags'].value = tags;
  }
}

function showEditPopup() {
  return ajaxGetUploadForm("showEditPopupLazy()");
}

function showEditPopupLazy() {
  setPopupImage(uploadInfo['thumb_url']);
  var form = getUploadForm();
  form.elements['hidden'].checked = uploadInfo['hidden'] == '1' ? true : false;
  for (var f in uploadInfo) {
    try {
      form.elements[f].value = uploadInfo[f];
    } catch(e) {}
  }
  form.elements['title'].focus();
}

function editWidget(widget_id) {
  return ajaxGetWidget(widget_id);
}

function ajaxGetWidget(widget_id) {
  addHistory(ajaxGetWidget, widget_id);
  var args = {
    'url' : '/ajax/handlers/getwidget.xml',
    'groupName' : 'global'
  };
  var params = {
    'widget_id' : widget_id
  };
  var handlers = {
    'onSuccess' : manageGetWidget
  };
  AjaxEngine.makeReplaceCall('getwidget', args, params, handlers);
  return false;
}

function manageGetWidget(response, response_data) {
  uploadInfo = response_data;
  showEditPopup();
  return false;
}

function getUploadPlatforms() {
  return getUploadForm().elements['platforms'].value.split(/,/);
}

function hasUploadData(id) {
  var form = getUploadForm(id);
  var winput = form.elements['widgets[' + id + ']'];
  var uinput = form.elements['url[' + id + ']'];
  if (typeof(winput) != 'undefined' && winput.value != '' ||
      typeof(uinput) != 'undefined' && uinput.value != '') {
    return true;
  }
  return false;
}

function updateAttachedFile(id) {
  if (hasUploadData(id)) {
    s('wpdc_attached_file_' + id);
  } else {
    h('wpdc_attached_file_' + id);
  }
}

function focusFileInput(id) {
  var form = getUploadForm(id);
  var winput = form.elements['widgets[' + id + ']'];
  var uinput = form.elements['url[' + id + ']'];
  if (typeof(uinput) != 'undefined' && uinput.value != '') {
    return;
  }
  if (typeof(winput) == 'undefined') {
    return;
  }
  winput.focus();
}

function showUploadFile(id) {
  if (typeof(showUploadFile.timeout) != 'undefined') {
    clearTimeout(showUploadFile.timeout);
  }
  var platforms = getUploadPlatforms();
  for (var i=0; i<platforms.length; i++) {
    var cid = platforms[i];
    if (cid == id) {
      document.getElementById('wpdc_upload_file_bar_' + cid).className =
        document.getElementById('wpdc_upload_file_bar_' + cid).className.replace('off', 'on');
      s('wpdc_upload_file_form_' + cid);
      showUploadFile.timeout = setTimeout("focusFileInput('" + cid + "')", 500);
    } else {
      document.getElementById('wpdc_upload_file_bar_' + cid).className =
        document.getElementById('wpdc_upload_file_bar_' + cid).className.replace('on', 'off');
      h('wpdc_upload_file_form_' + cid);
    }
    updateAttachedFile(cid);
  }
}

function showUploadStatus() {
  s('wpdc_upload_status');
  h('wpdc_upload_submit');
}

function hideUploadStatus() {
  s('wpdc_upload_submit');
  h('wpdc_upload_status');
}

function uploadWidget() {
  var un = getUploadForm().elements['username'];
  if (typeof(un) == 'undefined' || un.disabled) {
    return ajaxUpload();
  }
  return doLogin('submitupload');
}

function manageUploadLogin(type, data) {
  w('wpdc_upload_status', data['status_message']);
  if (type == 'gallery') {
    refreshGallery(1);
  } else {
    refreshMenu(type);
  }
  if (type == 'submitupload') {
    ajaxUpload();
  } else {
    hideUploadStatus();
    showSuccess(data['success_message']);
  }
  return false;
}

function ajaxUpload(id) {
  var form = getUploadForm(id);
  if (typeof(id) == 'undefined') {
    uploadInfo['platforms'] = {};
  } else {
    showUploadFile(id);
    uploadInfo['platforms'][id] = 1;
  }
  showPopupLoader();
  showUploadStatus();
  setTimeout("ajaxUploadLazy(" + (id ? "'" + id + "'" : '') + ")", 100);
  return false;
}

function ajaxUploadLazy(id) {
  var form = getUploadForm(id);
  if (uploadInfo['widget_id']) {
    form.elements['widget_id'].value = uploadInfo['widget_id'];
  }
  form.action = '/ajax/handlers/upload.xml';
  form.target = 'upload_frame';
  form.submit();
}

function manageUpload() {
  hidePopupLoader();
  hideUploadStatus();
  var error_code = '';
  var error_message = '';
  try {
    var response = window.frames['upload_frame'].Response;
    if (response.widget_id) {
      uploadInfo['widget_id'] = response.widget_id;
    }
    if (response.Error == '1') {
      var status_message = response.StatusMessage;
      w('wpdc_upload_status', status_message);
      error_message = response.Message;
      error_code = response.Code;
      throw "Error";
    }

    var platform_names = response.PlatformNames;
    var os_names = response.OSNames;
    var platforms = getUploadPlatforms();
    for (var i=0; i<platforms.length; i++) {
      var id = platforms[i];
      var po = id.split(/_/);
      var platform = po[0];
      var os = po[1];
      if (hasUploadData(id)) {
        if (!uploadInfo['platforms'][id]) {
          var status_message = response.StatusMessage;
          if (status_message) {
            var name = '';
            if (platform_names[platform] && os_names[os]) {
              name = platform_names[platform] + ' (' + os_names[os] + ')';
            }
            w('wpdc_upload_status', status_message.replace(/%s/, name));
          }
          return ajaxUpload(id);
        }
      }
    }
    reloadPopupImage();
    getMyWidgets(uploadInfo['widget_id']);
    hidePopup();
    var needvalidation = response.NeedValidation;
    if (needvalidation == '1') {
      return showSuccess(response.Message, undefined, popupHandler(showValidateAccountInfo));
    } else {
      return showSuccess(response.Message);
    }
  } catch(e) {
    if (error_message.length) {
      showError(error_message);
    } else {
      showFatalError();
    }
  }
}

function showValidateAccountInfo() {
  if (fetchCachedResource('validateaccount', '/ajax/resources/validateaccount.xml', 1)) {
    return showInfo(cachedResources['validateaccount']);
  }
  return false;
}
