(function($){
  $.extend({
    fileUploader : function( form, type, callback )
    {
      /**
       * Form is required to have the following attributes:
       * method="post", enctype="multipart/form-data", target=""
       */
      form = $(form);
      $(form).find('.fileUploader').remove();		
      window.fileUploaderCallback = null;
      if ( form.find('input[type=file]').length > 0 )
      {
        if ( !form.attr('action') || form.attr('action').length < 1 )
      	{
          if( window.SERVICE_NAME )
          {
            form.attr('action', MyYearbook.URLs[MyYearbook.currentServiceName] + 'file/' + type ); 
          }
          else
          {
            form.attr( 'action', SITE_URL + 'apps/file/' + type );
          }
      	}
      	var iframe = $.fileUploaderMakeIFrame( form );
      	if($.browser.msie && $.browser.version.substring( 0, 1 ) == '6' )
      	{
      	  setTimeout(function(){$.fileUploaderComplete(form,iframe,type,callback);},500);
      	}
      	else
        {
          $.fileUploaderComplete(form,iframe,type,callback);
      	}
      }
    },

    fileUploaderComplete : function( form, iframe, type, callback )
    {
      form.attr('target', iframe.attr('name'));
      $('<input type="hidden" name="token" class="fileUploader" value="' + stok + '" />').appendTo(form);
      $('<input type="hidden" name="type" class="fileUploader" value="' + type + '" />').appendTo(form);
      
      form.find('input[type=file]').hide().each(function(){
        $('<div class="fileUploaderStatus">uploading...</div>').insertAfter(this);
      });
		
      window.fileUploaderStatus = form.find('.fileUploaderStatus');
      window.fileUploaderStatusCnt = 0;
      window.fileUploaderStatusInterval = setInterval( function(){
        var dots = '';
        for ( var i = 0; i <= window.fileUploaderStatusCnt; i++ )
        {
          dots += '.';
        }
        window.fileUploaderStatus.text('uploading'+dots);
      
        window.fileUploaderStatusCnt++;
        if ( window.fileUploaderStatusCnt == 3 ) window.fileUploaderStatusCnt = 0;
      }, 500 );

      if ( !$.isFunction( callback ) )
      {
        callback = function( resultObj ) { };
      }
      window.fileUploaderCallback = function( resultObj )
      {
        callback( resultObj );
        clearInterval( window.fileUploaderStatusInterval );
      };
      form.submit();
    },
		
    fileUploaderMakeIFrame : function( form )
    {
      var iframe = $('<iframe name="fileUploaderIFrame" id="fileUploaderIFrame" src="' + form.attr('action') + '" class="fileUploader" style="display:none;"/>').appendTo( form );
      return iframe;
    }
  });	
})($);
