window.addEvent(
	 'domready'
	, function( ) {
		
		// Fade up content
		$$( '.fade' ).each( function( node ) {
//			if( !hasMoved( node ) ) {
				node.fade( 'hide' );
				node.fade( );
//			}
		} );
		
		// Attach external link icons
		$$( 'a[href^=http://]' ).each( attachExternalIcon );
		$$( 'a[href^=https://]' ).each( attachExternalIcon );
		
		// Expand menu
		if( $( 'Menu' ) ) {
//			if( !hasMoved( $( 'Menu' ) ) ) {
				$( 'Menu' ).setStyle( 'height', $( 'Menu' ).getSize( ).y );
				$( 'Menu' ).getElements( '.tertiary' ).each( function( n ) {
					if( n.hasClass( 'current' ) ) {
						return;
					}
					n.store( 'height', n.getSize( ).y );
					n.setStyle( 'height', 0 );
					n.fade( 'hide' );
					n.morph( { height: n.retrieve( 'height' ), opacity: 1 } );
				} );
//			}
		}
	  }
);

window.addEvent(
	 'load'//use 'domready' for fade effect, use 'load' for draggable init
	, function( ) {
		
		var key = 'pos';
		var first = true;  // Is the first drag ever or after a reset
		var last = null;  // The last element to have been dragged
		var showReset = function( ) {
			if( !isIE6( ) ) {
				$( 'Reset' ).setStyle( 'opacity', 0 );
			}
			
			$( 'Reset' ).setStyle( 'display', 'block' );
			
			if( !isIE6( ) ) {
				$( 'Reset' ).fade( .95 );
			}
		}
		var hideReset = function( ) {
			if( isIE6( ) ) {
				$( 'Reset' ).setStyle( 'display', 'none' );
			}
			else {
				$( 'Reset' ).fade( 'out' );
			}
		}
		var abort = function( e ) {
			e.stop( );
		}
		
		var cookie = new Hash.Cookie( key, { path: auri( ), autoSave: false } );
		if( Cookie.read( key ) ) {
			first = false;
		}
		var hasMoved = function( n ) {
			return cookie.has( n.id );
		}
		
		var draggables = $$( '.draggable' );
		
		// Read coords
		draggables.each( function( n ) {
			n.store( 'position', n.getPosition( n.getOffsetParent( ) ) );
			n.store( 'size', n.getSize( ) );
		} );
		
		// Write coords
		draggables.each( function( n ) {
			var uid = n.id;
			var pos = n.retrieve( 'position' );
			var dim = n.retrieve( 'size' );
			
			if( cookie.has( uid ) ) {
				pos = cookie.get( uid );
				n.addClass( 'moved' );
			}
			
			n.addClass( 'positioned' );
			n.setStyles( { 'width': dim.x - ( parseInt( n.getStyle( 'padding-left' ) ) + parseInt( n.getStyle( 'padding-right' ) ) ), 'height': dim.y } );
			
//			pos.x += parseInt( n.getStyle( 'margin-top' ) );
//			pos.y += parseInt( n.getStyle( 'margin-left' ) );
			n.setPosition( pos  );
			
			n.drag = new Drag(
				  n
				, {
					  snap: 0
					, onBeforeStart: function( n ) {
						Element.getElements( n, 'a' ).removeEvent( 'click', abort );

//						console.log('Start:',uid,n.getPosition(n.getOffsetParent( )),n.getOffsetParent( ));
					  }
					, onSnap: function( n ) {
					  	if( first ) {
					  		first = false;
					  		showReset( );
					  	}
						n.addClass( 'dragging' );
						n.addClass( 'moved' );
						
						if( last ) {
							last.removeClass( 'last' );
						}
						last = n;
						n.addClass( 'last' );
					  }
					, onComplete: function( n, e ) {
						n.removeClass( 'dragging' );
						n.addClass( 'positioned' );
						
//						console.log(n,e);
						Element.getElements( n, 'a' ).addEvent( 'click', abort );
						
						cookie.set( uid, n.getPosition( n.getOffsetParent( ) ) )
						cookie.save( );
//						console.log( 'Stop:',uid,n.getPosition(n.getOffsetParent( )),n.getOffsetParent( ) );
					  }
					, onReset: function( n ) {
						var pos = n.retrieve( 'position' );
						n.addClass( 'positioned' );
						n.removeClass( 'moved' );
						n.morph( { top: pos.y, left: pos.x } );
					  }
				  }
			);
		} );
		
		$( document.body ).grab(
			  new Element(
				 'div'
				, {
					 'html': 'Reset'
					,'id': 'Reset'
					,'events': {
						'click': function( ) {
							draggables.each( function( n ) {
								n.drag.fireEvent( 'reset', n );
							} );
							
							hideReset( );
							
							first = true;
							cookie.empty( );
							cookie.save( );
						}
					  }
				  }
			  )
			,'top'
		);
		
		if( !first ) {
			showReset( );
		}
	  }
);



function attachExternalIcon( n ) {
	if( n.get( 'text' ) ) {
		n.set( 'title', 'Leads to a different website.' );
		n.addClass( 'external' );
	}
}