var s3Post = {
  // Start the asynchronous upload of a form
  uploadAttachment : function (s3formEle) {
    if (slideshare_object.dev) { log( 'DEBUG: s3_upload ' ); }
    
    // Get the span element of this upload form
    var spanEle = s3formEle.getElementsByTagName("span")[0];

    // Get the file element of this upload form
    var fileEle = YAHOO.util.Dom.getElementsBy(function(ele) { return (ele.getAttribute("name") == "file") ? true : false; }, "input", s3formEle)[0];
    var fileName = fileEle.value;

    var s3url = s3formEle.getAttribute("action");
    
    if (!fileName) {
      alert("* Please select a file to upload.");
    } else {
      // Attach s3form to the YUI Connect Manager
      jQuery(s3formEle).find('input[name=authenticity_token]').remove();
      YAHOO.util.Connect.setForm(s3formEle, true);

      // Here is a callback for the asyncRequest function (below)
      var callback = {
        upload: function(o) {
          if (!o.responseText) {
            alert("The upload failed."); // while POSTing the file
          } else {
            // The upload was successfull, now parse the JSON data.  Let's use the YUI JSON
            // utility so that we can make sure the response if valid a JSON string
            try {
              // do something with response, if needed
              complete_form_submission(); // define this in the page needed, with appropriate actions.
            } catch (e) {
              alert("Problem with upload completion:\n" + o.responseText);
            }
          }
        },
        // The attempt to upload failed
        failure: function(o) {
          alert("Failed to send POST: " + o.statusText);
        }
      };
      // Make the Connect request
      var transaction = YAHOO.util.Connect.asyncRequest("POST", s3url, callback);
    }
  }
};

// generic function
function sanitize(str) {
  return Base64.encode(str);
}

function gen_file_title(n) {
  n = n.gsub("'|\"", "");
  n = n.underscore().dasherize();
  n = n.gsub(/\.|-/, " ");
  n = n.gsub(/\w+/, function(match){return match[0].capitalize();});
  return n;
}

function file_basename(filename) {
  var str = "" + filename;
  var brkpoint = str.lastIndexOf(".");
  brkpoint = brkpoint != -1 ? brkpoint : str.length;
  return str.substr(0,brkpoint);
}

function file_extension(filename) {
  var str = "" + filename;
  var i = str.lastIndexOf(".");
  i = i != -1 ? i : str.length;
  return str.substr(i+1, str.length);
}

function check_extension(fn, extensions) {
  if (slideshare_object.dev) { try{_firebug.clear();}catch(e){} }
  exts = fn.split(".");
  ext = exts[exts.length-1];
  
  jQuery('#slideshow_title').val('');

  // check for disallowed extensions
  if(disallowed_entensions[ext.toLowerCase()]){
    jQuery('.unknown-format-error').show();
    jQuery('.upload_submit_button').attr('disabled','disabled');
    return false;
  }
  
  // hide notices, undo input modifications
  jQuery('.unknown-format-error').hide();
  jQuery('.video-quota-exceeded').hide();
  jQuery('.video-guest-message').hide();
  jQuery('.video-size-message').hide();
  jQuery('.upload_submit_button').removeAttr('disabled').click(single_upload_submitform);
  jQuery('#dwnld_chk').attr('checked',true).removeAttr('disabled');
  jQuery('#slideshow_title').val(gen_file_title(file_basename(fn)).escapeHTML());
  
  if (extensions[ext.toLowerCase()]) {
    if (slideshare_object.dev) { log('non-video upload'); }
    return true;
  } else {
    // VIDEO start
    // if it's not a presentation/document, is it a video?
    jQuery('.singleUploadCheck').show();
    jQuery('.upload_submit_button').attr('disabled','disabled');
    videoSingleUpload.getMimeType(fn);
    return true;
    // VIDEO end
  }
}

function toggleSuggestion(id,state,msg) {
  if (state==1) {
    $('suggestionAlert'+id).style.display='';
    $('suggestionAlert'+id).innerHTML=msg;
  } else
    $('suggestionAlert'+id).style.display='none';
}

// generate key for s3 upload
// get just the file name without extension, and then replace all others with alphabets and -
// replace no alphabet characters with -
function generate_s3_key(filename, type) {
  var ts = new Date().getTime();
  var fn = file_basename(filename);
  var ex = file_extension(filename);
  fn = fn.toLowerCase().gsub(/[^a-z0-9\-\.]+/, '');
  return fn + '-u-' + ts + '-' + type + '-u' + "." + ex;
}

// VIDEO start
function video_check_extension( name ) {
  if ( slideshare_object.video
       && slideshare_object.video_extensions
       && slideshare_object.video_extensions[ file_extension( name ) ] ) {
    return true;
  } else {
    return false;
  }
}

var videoSingleUpload = {
  getMimeType: function( name ) {
    if ( slideshare_object.dev ) { log( 'DEBUG: video_mime ' ); }
    new Ajax.Request(
      slideshare_object.video_mime_url,
      {
        method: 'get',
        parameters: {
          filename: name
        },
        onSuccess: function ( response ) {
          jQuery('.singleUploadCheck').hide();
          var mimeType = response.responseText;
          if ( slideshare_object.dev ) {
            log( 'DEBUG: mime type:', mimeType );
          }
          if( mimeType == 'video' ) {
            if(slideshare_object.dev){ log('video upload'); }
            // check if the user is allowed to upload video
            if( slideshare_object.video ) {
              // all good
              if (slideshare_object.dev) { log('video:allgood:setup'); }
              jQuery('.video-size-message').show();
              // uncheck and disable download checkbox
              jQuery('#dwnld_chk').attr('checked',false).attr('disabled','disabled');
              jQuery('.upload_submit_button').removeAttr('disabled');
            } else {
              if (slideshare_object.dev) { log("shit went wrong"); }
              (slideshare_object.user.userGroup == 'member') ? jQuery('.video-quota-exceeded').show() : jQuery('.video-guest-message').show();
              jQuery('.singleUploadCheck').hide();
            }
          } else {
            // check if the user is logged in
            if (slideshare_object.user.userGroup == 'member') {
              // check if the user is allowed to upload video
              if( slideshare_object.video ) {
                if (slideshare_object.dev) { log('unknown:member:good:setup'); }
                jQuery('.upload_submit_button').removeAttr('disabled');
              } else {
                if (slideshare_object.dev) { log('unknown:member:bad:error'); }
                jQuery('.unknown-format-error').show();
                jQuery('.singleUploadCheck').hide();
              }
            } else {
              if (slideshare_object.dev) { log('unknown:guest:bad:error'); }
              jQuery('.unknown-format-error').show();
              jQuery('.singleUploadCheck').hide();
            }
          }
          
        },
        onFailure: function ( response ) {
          jQuery('.singleUploadCheck').hide();
          if ( slideshare_object.dev ) {
            log( 'DEBUG: mime type: fail' );
          }
          return 'unknown';
        }
      }
    );
  }
};
// VIDEO end
