/ *  
   *   b a s e 6 4 . j s   -   B a s e 6 4   e n c o d i n g   a n d   d e c o d i n g   f u n c t i o n s  
   *  
   *   S e e :   h t t p : / / d e v e l o p e r . m o z i l l a . o r g / e n / d o c s / D O M : w i n d o w . b t o a  
   *             h t t p : / / d e v e l o p e r . m o z i l l a . o r g / e n / d o c s / D O M : w i n d o w . a t o b  
   *  
   *   C o p y r i g h t   ( c )   2 0 0 7 ,   D a v i d   L i n d q u i s t   < d a v i d . l i n d q u i s t @ g m a i l . c o m >  
   *   R e l e a s e d   u n d e r   t h e   M I T   l i c e n s e  
   * /  
  
 i f   ( t y p e o f   b t o a   = =   ' u n d e f i n e d ' )   {  
         f u n c t i o n   b t o a ( s t r )   {  
                 v a r   c h a r s   =   ' A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 + / = ' ;  
                 v a r   e n c o d e d   =   [ ] ;  
                 v a r   c   =   0 ;  
                 w h i l e   ( c   <   s t r . l e n g t h )   {  
                         v a r   b 0   =   s t r . c h a r C o d e A t ( c + + ) ;  
                         v a r   b 1   =   s t r . c h a r C o d e A t ( c + + ) ;  
                         v a r   b 2   =   s t r . c h a r C o d e A t ( c + + ) ;  
                         v a r   b u f   =   ( b 0   < <   1 6 )   +   ( ( b 1   | |   0 )   < <   8 )   +   ( b 2   | |   0 ) ;  
                         v a r   i 0   =   ( b u f   &   ( 6 3   < <   1 8 ) )   > >   1 8 ;  
                         v a r   i 1   =   ( b u f   &   ( 6 3   < <   1 2 ) )   > >   1 2 ;  
                         v a r   i 2   =   i s N a N ( b 1 )   ?   6 4   :   ( b u f   &   ( 6 3   < <   6 ) )   > >   6 ;  
                         v a r   i 3   =   i s N a N ( b 2 )   ?   6 4   :   ( b u f   &   6 3 ) ;  
                         e n c o d e d [ e n c o d e d . l e n g t h ]   =   c h a r s . c h a r A t ( i 0 ) ;  
                         e n c o d e d [ e n c o d e d . l e n g t h ]   =   c h a r s . c h a r A t ( i 1 ) ;  
                         e n c o d e d [ e n c o d e d . l e n g t h ]   =   c h a r s . c h a r A t ( i 2 ) ;  
                         e n c o d e d [ e n c o d e d . l e n g t h ]   =   c h a r s . c h a r A t ( i 3 ) ;  
                 }  
                 r e t u r n   e n c o d e d . j o i n ( ' ' ) ;  
         }  
 }  
  
 i f   ( t y p e o f   a t o b   = =   ' u n d e f i n e d ' )   {  
         f u n c t i o n   a t o b ( s t r )   {  
                 v a r   c h a r s   =   ' A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 + / = ' ;  
                 v a r   i n v a l i d   =   {  
                         s t r l e n :   ( s t r . l e n g t h   %   4   ! =   0 ) ,  
                         c h a r s :     n e w   R e g E x p ( ' [ ^ '   +   c h a r s   +   ' ] ' ) . t e s t ( s t r ) ,  
                         e q u a l s :   ( / = / . t e s t ( s t r )   & &   ( / = [ ^ = ] / . t e s t ( s t r )   | |   / = { 3 } / . t e s t ( s t r ) ) )  
                 } ;  
                 i f   ( i n v a l i d . s t r l e n   | |   i n v a l i d . c h a r s   | |   i n v a l i d . e q u a l s )  
                         t h r o w   n e w   E r r o r ( ' I n v a l i d   b a s e 6 4   d a t a ' ) ;  
                 v a r   d e c o d e d   =   [ ] ;  
                 v a r   c   =   0 ;  
                 w h i l e   ( c   <   s t r . l e n g t h )   {  
                         v a r   i 0   =   c h a r s . i n d e x O f ( s t r . c h a r A t ( c + + ) ) ;  
                         v a r   i 1   =   c h a r s . i n d e x O f ( s t r . c h a r A t ( c + + ) ) ;  
                         v a r   i 2   =   c h a r s . i n d e x O f ( s t r . c h a r A t ( c + + ) ) ;  
                         v a r   i 3   =   c h a r s . i n d e x O f ( s t r . c h a r A t ( c + + ) ) ;  
                         v a r   b u f   =   ( i 0   < <   1 8 )   +   ( i 1   < <   1 2 )   +   ( ( i 2   &   6 3 )   < <   6 )   +   ( i 3   &   6 3 ) ;  
                         v a r   b 0   =   ( b u f   &   ( 2 5 5   < <   1 6 ) )   > >   1 6 ;  
                         v a r   b 1   =   ( i 2   = =   6 4 )   ?   - 1   :   ( b u f   &   ( 2 5 5   < <   8 ) )   > >   8 ;  
                         v a r   b 2   =   ( i 3   = =   6 4 )   ?   - 1   :   ( b u f   &   2 5 5 ) ;  
                         d e c o d e d [ d e c o d e d . l e n g t h ]   =   S t r i n g . f r o m C h a r C o d e ( b 0 ) ;  
                         i f   ( b 1   > =   0 )   d e c o d e d [ d e c o d e d . l e n g t h ]   =   S t r i n g . f r o m C h a r C o d e ( b 1 ) ;  
                         i f   ( b 2   > =   0 )   d e c o d e d [ d e c o d e d . l e n g t h ]   =   S t r i n g . f r o m C h a r C o d e ( b 2 ) ;  
                 }  
                 r e t u r n   d e c o d e d . j o i n ( ' ' ) ;  
         }  
 }  
 