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