;(function($)
{
  $.extend(( function()
  {
    return {
      sizeOf : function( oObject, oOptions )
      {
        var sProp,
            iSize    = 0,
            oWorking = null,
            retval   = oObject;

        if( oObject instanceof jQuery )
        {
          if( oObject.length > 1 )
          {
            retval = oObject.length;
          }
          else if( oObject.length == 1 )
          {
            oWorking = oObject[0];
          }
        }
        else
        {
          oWorking = oObject;
        }

        if( oWorking !== null )
        {
          oOptions = $.extend({
            propertiesOnly : true
          }, ( oOptions || {} ));

          for( sProp in oWorking )
          {
            if( oOptions.propertiesOnly === true )
            {
              if( typeof oWorking[sProp] !== 'function' )
              {
                iSize++;
              }
            }
            else
            {
              iSize++;
            }
          }

          retval = iSize;
        }

        return retval;
      }
    };
  })());

  $.fn.sizeOf = function( oOptions )
  {
    return $.sizeOf( this, oOptions );
  };
})(jQuery);
