/*
    Copyright (c) 2010 STRAIGHTLINE<http://www.straightline.jp/> All rights reserved.
*/

/*
---------------------------------------------------------------------------------------------------

script: Tips.js

description: Class for creating nice tips that follow the mouse cursor when hovering an element.
             Based on More 1.2.4.4.
             Modified by STRAIGHTLINE. 2010/05/12

license: MIT-style license

authors:
- Valerio Proietti
- Christoph Pojer

requires:
- core:1.2.4/Options
- core:1.2.4/Events
- core:1.2.4/Element.Event
- core:1.2.4/Element.Style
- core:1.2.4/Element.Dimensions
- /MooTools.More

provides: [Tips]

...
*/

(function(){

var read = function(option, element){
	return (option) ? ($type(option) == 'function' ? option(element) : element.get(option)) : '';
};

this.Tips = new Class({

	Implements: [Events, Options],

	options: {
		/*
		onAttach: $empty(element),
		onDetach: $empty(element),
		*/
		onShow: function(){
			this.tip.setStyle('display', 'block');
		},
		onHide: function(){
			this.tip.setStyle('display', 'none');
		},
		title: 'title',
		text: function(element){
			return element.get('rel') || element.get('href');
		},
		showDelay: 100,
		hideDelay: 100,
		className: 'tip-wrap',
		offset: {x: 16, y: 16},
		windowPadding: {x:0, y:0},
		fixed: false
	},

	initialize: function(){
		var params = Array.link(arguments, {options: Object.type, elements: $defined});
		this.setOptions(params.options);
		if (params.elements) this.attach(params.elements);
		this.container = new Element('div', {'class': 'tip'});
	},

	toElement: function(){
		if (this.tip) return this.tip;

		return this.tip = new Element('div', {
			'class': this.options.className,
			styles: {
				position: 'absolute',
				top: 0,
				left: 0
			}
		}).adopt(
			new Element('div', {'class': 'tip-top'}),
			this.container,
			new Element('div', {'class': 'tip-bottom'})
		).inject(document.body);
	},

	attach: function(elements){
		$$(elements).each(function(element){
			var title = read(this.options.title, element),
				text = read(this.options.text, element);
			
			element.erase('title').store('tip:native', title).retrieve('tip:title', title);
			element.retrieve('tip:text', text);
			this.fireEvent('attach', [element]);
			
			var events = ['enter', 'leave'];
			if (!this.options.fixed) events.push('move');
			
			events.each(function(value){
				var event = element.retrieve('tip:' + value);
				if (!event) event = this['element' + value.capitalize()].bindWithEvent(this, element);
				
				element.store('tip:' + value, event).addEvent('mouse' + value, event);
			}, this);
		}, this);
		
		return this;
	},

	detach: function(elements){
		$$(elements).each(function(element){
			['enter', 'leave', 'move'].each(function(value){
				element.removeEvent('mouse' + value, element.retrieve('tip:' + value)).eliminate('tip:' + value);
			});
			
			this.fireEvent('detach', [element]);
			
			if (this.options.title == 'title'){ // This is necessary to check if we can revert the title
				var original = element.retrieve('tip:native');
				if (original) element.set('title', original);
			}
		}, this);
		
		return this;
	},

	elementEnter: function(event, element){
		this.container.empty();
		
		['title', 'text'].each(function(value){
			var content = element.retrieve('tip:' + value);
			if (content) this.fill(new Element('div', {'class': 'tip-' + value}).inject(this.container), content);
		}, this);
		
		$clear(this.timer);
		this.timer = (function(){
			this.show.run([element], this);
			this.position((this.options.fixed) ? {page: element.getPosition()} : event);
		}).delay(this.options.showDelay, this);
	},

	elementLeave: function(event, element){
		$clear(this.timer);
		this.timer = (function() { this.hide.run([element],this); }.bind(this)).delay(this.options.hideDelay);
		this.fireForParent(event, element);
	},

	fireForParent: function(event, element){
		element = element.getParent();
		if (!element || element == document.body) return;
		if (element.retrieve('tip:enter')) element.fireEvent('mouseenter', event);
		else this.fireForParent(event, element);
	},

	elementMove: function(event, element){
		this.position(event);
	},

	position: function(event){
		if (!this.tip) document.id(this);

        this.tip.removeClass('tip-overflow');
        
		var size = window.getSize(), scroll = window.getScroll(),
			tip = {x: this.tip.offsetWidth, y: this.tip.offsetHeight},
			props = {x: 'left', y: 'top'},
			obj = {};
		
		for (var z in props){
			obj[props[z]] = event.page[z] + this.options.offset[z];
			if ((obj[props[z]] + tip[z] - scroll[z]) > size[z] - this.options.windowPadding[z]) {
                obj[props[z]] = event.page[z] - this.options.offset[z] - tip[z];
                this.tip.addClass('tip-overflow');
            }
		}
		
		this.tip.setStyles(obj);
	},

	fill: function(element, contents){
		if(typeof contents == 'string') element.set('html', contents);
		else element.adopt(contents);
	},

	show: function(element){
		if (!this.tip) document.id(this);
		this.fireEvent('show', [this.tip, element]);
	},

	hide: function(element){
		if (!this.tip) document.id(this);
		this.fireEvent('hide', [this.tip, element]);
	}

});

})();
/*
---------------------------------------------------------------------------------------------------

*/
/* 
    Init
*/
var Init = new Class({
    Implements: Options,
    options: {
        ajaxLoaderSrc: null
    },
    initialize: function(options) {
        this.setOptions(options);
        
        var ajaxLoader = new Element('div', {
            id: 'ajax-loader'
        });
        var ajaxLoaderImage = new Element('img', {
            id: 'ajax-loader-img',
            src: this.options.ajaxLoaderSrc
        });
        ajaxLoader.adopt(ajaxLoaderImage);
        $(document.body).adopt(ajaxLoader);
        
        $$('.grid').each(function(grid) {
            grid.setStyle('opacity', 0);
        });
        
        $$('blockquote').each(function(blockquote) {
            var quote = new Element('span', {
                'class': 'quote',
                html: '&ldquo;'
            });
            blockquote.grab(quote, 'top');
        });
        
        if ($('sidebar').getElement('#location .entry-body')) {
            var title = $('sidebar').getElement('#location .entry-body').get('text').trim();
            $('sidebar').getElement('#location .entry-title').set('text', title.slice(0, 1));
        }
        
        
        $$('a:[class=wpfp-link])').each(function(a) {
            var text = a.get('text');
            if (text == 'x' || text == 'remove') {
                a.setProperty('title', 'Remove from favorites');
            } else if (text == 'Clear favorites') {
                a.setProperty('title', 'Clear favorites');
            } else {
                a.setProperty('title', 'Add to favorites');
            }
        });
        
        var tipMinWidth = 50;
        var triangleLeft = 10;
        var triangleWidth = 5;
        var triangleHeight = 5;
        
        $$('a:not([class*=attach-tip])').each(function(a) {
            var classString = a.getProperty('class');
            if (
                classString.contains('cute_profiles') == false &&
                classString.contains('wpfp-link') == false
            ) {
                a.setProperty('title', '');
            }
        });
        
        var tips = new Tips(['a[class*=attach-tip]', 'a[class*=cute_profiles]', 'a[class*=wpfp-link]'], {
            showDelay: 0,
            hideDelay: 0,
            offset: {x: 0, y: 0},
            fixed: true
        });
        
        tips.addEvent('show', function(tip, el){
            tip.addClass('tip-animation');
            tip.setStyle('width', 'auto');
            
            var marginTop = el.getStyle('padding-top').toInt() - (tip.getComputedSize().totalHeight + triangleHeight * 2);

            tip.setStyles({
                width: Math.max(tip.getSize().x, tipMinWidth),
                'margin-top': marginTop + triangleHeight,
                'margin-left': el.getStyle('padding-left').toInt() - (triangleLeft + triangleWidth * 2),
                opacity: 0,
                'z-index': 999999
            });
            tip.get('morph', {
                duration: '250',
                transition: 'expo:out'
            }).start({
                'margin-top': marginTop,
                opacity: 0.9
            });
        });
        
        tips.addEvent('hide', function(tip, el){
            tip.removeClass('tip-animation');
        });
        
        new Fx.SmoothScroll({
            links: $$('a[href^=#]:not([href=#])'),
            wheelStops: false,
            duration: 'long',
            transition: 'expo:out'
        });
        
        var adjustGrid = new AdjustGrid();
        adjustGrid.adjust(true);
    }
});


/* 
    Adjust Grid
*/
var AdjustGrid = new Class({
    Implements: Options,
    isFirst: true,
    isAdjusting: false,
    resizeTimer: null,
    prevWrapperWidth: null,
    baseCellWidth: null,
    imgRate: 1,
    heightRate: 0.6,
    heightRange: 100,
    warp: 10,
    delay: 100,
    options: {
    },
    nextUrl: null,
    initialize: function(options) {
        this.setOptions(options);
        
        if ($$('.base-cell')) {
            this.baseCellWidth = $$('.base-cell')[0].getStyle('width').toInt();
            
            $$('.entry-image img').each(function(img) {
                var imgWidth = img.getSize().x;
                
                if (img.getSize().y > imgWidth * this.imgRate) {
                    img.getParent('.entry-image-inner').setStyles({
                        overflow: 'hidden',
                        height: imgWidth * this.imgRate
                    });
                }
            }.bind(this));
        }
        
        $$('.grid-item').each(function(gridItem, index) {
            gridItem.store('zIndex', index);
            gridItem.store('padding', gridItem.getStyle('padding').toInt());
            gridItem.setStyle('z-index', index);
            if (gridItem.get('id') != 'header' && 
                gridItem.get('id') != 'global-nav' && 
                gridItem.hasClass('full-cell') == false
            ) {
                gridItem.addEvent('mouseenter', function() {
                    this.gridEnter.run([gridItem], this);
                }.bind(this));
                gridItem.addEvent('mouseleave', function() {
                    this.gridLeave.run([gridItem], this);
                }.bind(this));
            }
        }.bind(this));
        
        window.addEvent('load', function() {
            this.readjust.run([false], this);
        }.bind(this));
        
        window.addEvent('resize', function() {
            $clear(this.resizeTimer);
            this.resizeTimer = (function() {
                if (this.isAdjusting == false) {
                    this.readjust.run([false], this);
                }
            }.bind(this)).delay(200);
        }.bind(this));
    },
    
    readjust: function(isAnimation) {
        var timer = (function() {
            if (this.isFirst == false) {
                $clear(timer);
                this.adjust.run([isAnimation], this);
            }
        }.bind(this)).periodical(50);
    },
    
    adjust: function(isAnimation) {
        this.isAdjusting = true;
        
        var wrapper = $('wrapper');
        wrapper.setStyles({
            width: 'auto',
            overflow: 'hidden'
        });
        wrapper.set('tween', {
            duration: 'normal',
            transition: 'expo:in:out',
            link: 'cancel'
        });
        
        if ($defined(this.prevWrapperWidth) == false) {
            this.prevWrapperWidth = wrapper.getSize().x;
        }
        
        var wrapperWidth = 0;
        var grids = $$('.grid');
        grids.each(function(grid) {
        
            grid.setStyles({
                position: 'relative',
                width: 'auto'
            });
            
            var gridItems = grid.getElements('.grid-item');
            
            if (!gridItems) {
                return;
            }
            
            var w = wrapper.getSize().x;
            var offsetTop = 0;
            var offsetLeft = 0;
            var row = 0;
            var col = 0;
            var cell = 0;
            var maxWidth = 0;
            var maxHeight = 0;
            var maxGridHeight = 0;
            var maxCellHeight = 0;
            var sheet = new Array();
            var startRowIndex = 0;
            var baseGridItem = gridItems[0];
            var prevFirstGridItem = baseGridItem;
            var sidebar = $('sidebar');
            
            gridItems.each(function(gridItem, index) {
                $clear(gridItem.retrieve('timer'));
                gridItem.removeClass('base-col2-cell');
                gridItem.removeClass('grid-cell-start');
                gridItem.removeClass('grid-cell-end');
                gridItem.removeClass('grid-cell-body-visible');
                gridItem.eliminate('top-position');
                gridItem.eliminate('timer');
                if ($defined(sidebar) == false ||
                    gridItem.get('id') == 'sidebar'
                ) {
                    gridItem.setStyles({
                        position: 'absolute',
                        top: grid.getStyle('top').toInt(),
                        left: grid.getStyle('left').toInt(),
                        padding: gridItem.retrieve('padding')
                    });
                } else {
                    gridItem.setStyles({
                        position: 'absolute',
                        top: sidebar.getStyle('top').toInt(),
                        left: sidebar.getSize().x - (sidebar.getStyle('border-left-width').toInt() || sidebar.getStyle('border-right-width').toInt()),
                        padding: gridItem.retrieve('padding')
                    });
                }
                if (gridItem.hasClass('base-cell')) {
                    gridItem.setStyle('width', this.baseCellWidth);
                }
                if (gridItem.hasClass('large-cell')) {
                    gridItem.setStyle('width', this.baseCellWidth * 2 + (gridItem.getStyle('border-left-width').toInt() || gridItem.getStyle('border-right-width').toInt()));
                }
                if (gridItem.hasClass('full-cell')) {
                    gridItem.setStyle('width', this.baseCellWidth * 3 + (gridItem.getStyle('border-left-width').toInt() || gridItem.getStyle('border-right-width').toInt()) * 2);
                }
                gridItem.setStyle('height', 'auto');
            }.bind(this));

            for (var i = 0; i < gridItems.length; i++) {
                if (!sheet[row]) {
                    sheet[row] = new Array();
                }
                if (!sheet[row][col]) {
                    sheet[row][col] = new Array();
                }
                
                var gridItem = gridItems[i];
                
                var curGridWidth = gridItem.getSize().x + 
                        gridItem.getStyle('border-left-width').toInt() + 
                        gridItem.getStyle('border-right-width').toInt();
                var curGridHeight = gridItem.getSize().y + 
                        gridItem.getStyle('border-top-width').toInt() + 
                        gridItem.getStyle('border-bottom-width').toInt();
                
                if (row == 0 && col == 0 && cell == 0) {
                    offsetTop = baseGridItem.getCoordinates(grid).top;
                    offsetLeft = baseGridItem.getCoordinates(grid).left;
                } else if (col > 0 && cell == 0) {
                    offsetTop = baseGridItem.getCoordinates(grid).top;
                    offsetLeft = baseGridItem.getCoordinates(grid).right - baseGridItem.getStyle('border-left-width').toInt();
                } else {
                    offsetTop = baseGridItem.getCoordinates(grid).bottom - (baseGridItem.getStyle('border-top-width').toInt() || baseGridItem.getStyle('border-bottom-width').toInt());
                    offsetLeft = baseGridItem.getCoordinates(grid).left;
                }
                offsetTop = offsetTop - grid.getCoordinates(grid).top;
                oddsetLeft = offsetLeft - grid.getCoordinates(grid).left;
                
                if ($defined(sidebar) && i + 1 < gridItems.length && i == 0) {
                    baseGridItem = gridItems[i + 1];
                    gridItem.store('left-position', 0);
                    continue;
                }
                
                if (cell > 0 && (baseGridItem.hasClass('large-cell') || baseGridItem.hasClass('base-col2-cell'))) {
                    gridItem.addClass('base-col2-cell');
                    gridItem.setStyle('width', baseGridItem.getStyle('width'));
                }

                maxCellHeight = maxCellHeight + curGridHeight;
                if (maxCellHeight > maxHeight) {
                    maxHeight = maxCellHeight;
                    if (col != 0) {
                        col = 0;
                        cell = 0;
                        maxCellHeight = 0;
                        i = startRowIndex;
                        baseGridItem = prevFirstGridItem;
                        sheet[row].empty();
                        i--;
                        continue;
                    }
                }
                sheet[row][col][cell] = gridItem;
                
                gridItem.setStyles({
                    top: offsetTop,
                    left: offsetLeft
                });
                gridItem.store('left-position', offsetLeft);

                if (gridItems.length == i + 1 ||  
                    maxCellHeight + gridItems[i + 1].getSize().y + 
                        gridItems[i + 1].getStyle('border-top-width').toInt() + 
                        gridItems[i + 1].getStyle('border-bottom-width').toInt() - maxHeight > this.heightRange ||
                    gridItems[i + 1].hasClass('base-cell') == false
                ) {
                } else {
                    if (maxHeight / maxCellHeight > this.heightRate) {
                        baseGridItem = gridItem;
                        cell++;
                        continue;
                    } 
                }
                
                if (gridItems.length == i + 1 || 
                    w < gridItem.getCoordinates(grid).right + gridItems[i + 1].getSize().x
                ) {
                    for (var colIndex = sheet[row].length - 1; colIndex >= 0; colIndex--) {
                        if (!sheet[row][colIndex]) {
                            continue;
                        }
                        if (sheet[row][colIndex].length == 1) {
                            var cell = sheet[row][colIndex][0];
                            cell.addClass('grid-cell-start grid-cell-end');
                            if (cell.getSize().y / maxHeight < this.heightRate) {
                                cell.addClass('grid-cell-body-visible');
                            }
                            if (cell.getSize().y > maxHeight) {
                                cell.removeClass('grid-cell-body-visible');
                            }
                            cell.setStyle('height', maxHeight);
                            
                            if (row == 0 && colIndex == sheet[row].length - 1) {
                                cell.store('top-position', cell.getStyle('top').toInt());
                            } else {
                                if (row > 0) {
                                    for (upperColIndex = colIndex; upperColIndex >= 0; upperColIndex--) {
                                        if (!sheet[row - 1][upperColIndex]) {
                                            continue;
                                        }
                                        var upperCell = sheet[row - 1][upperColIndex].getLast();
                                        cell.store('top-position', upperCell.retrieve('top-position') + upperCell.getSize().y - cell.getStyle('border-top-width').toInt());
                                        break;
                                    }
                                } else {
                                    for (var nextColIndex = colIndex + 1; nextColIndex < sheet[row].length; nextColIndex++) {
                                        if (sheet[row][nextColIndex]) {
                                            cell.store('top-position', sheet[row][nextColIndex][0].retrieve('top-position') + this.warp);
                                            break;
                                        }
                                    }
                                }
                            }
                        } else {
                            sheet[row][colIndex][0].addClass('grid-cell-start');
                            sheet[row][colIndex].getLast().addClass('grid-cell-end');
                            var missingHeight = Math.floor((maxHeight - (sheet[row][colIndex].getLast().getCoordinates(grid).bottom - sheet[row][colIndex][0].getCoordinates(grid).top)) / sheet[row][colIndex].length);
                            
                            for (var cellIndex = 0; cellIndex < sheet[row][colIndex].length; cellIndex++) {
                                var cell = sheet[row][colIndex][cellIndex];
                                if (cell.hasClass('similar')) {
                                    if (cellIndex + 1 == sheet[row][colIndex].length) {
                                        cell.setStyle('height', maxHeight - (sheet[row][colIndex].getLast().getCoordinates(grid).top - sheet[row][colIndex][0].getCoordinates(grid).top));
                                    }
                                } else {
                                    if (cellIndex > 0 && cellIndex + 1 == sheet[row][colIndex].length) {
                                        cell.setStyle('height', cell.getSize().y + missingHeight + cell.getStyle('border-bottom-width').toInt());
                                    } else {
                                        cell.setStyle('height', cell.getSize().y + missingHeight);
                                    }
                                    if (cellIndex == 0) {
                                        cell.setStyle('top', cell.getStyle('top').toInt() + missingHeight * cellIndex);
                                    } else {
                                        cell.setStyle('top', cell.getStyle('top').toInt() + missingHeight * cellIndex + sheet[row][colIndex][cellIndex - 1].getStyle('border-bottom-width').toInt());
                                    }
                                }
                                
                                if (cellIndex == 0 && colIndex == sheet[row].length - 1) {
                                    cell.store('top-position', cell.getStyle('top').toInt());
                                } else if (cellIndex == 0) {
                                    if (row > 0) {
                                        for (upperColIndex = colIndex; upperColIndex >= 0; upperColIndex--) {
                                            if (!sheet[row - 1][upperColIndex]) {
                                                continue;
                                            }
                                            var upperCell = sheet[row - 1][upperColIndex].getLast();
                                            cell.store('top-position', upperCell.retrieve('top-position') + upperCell.getSize().y - cell.getStyle('border-top-width').toInt());
                                            break;
                                        }
                                    } else {
                                        for (var nextColIndex = colIndex + 1; nextColIndex < sheet[row].length; nextColIndex++) {
                                            if (sheet[row][nextColIndex]) {
                                                cell.store('top-position', sheet[row][nextColIndex][0].retrieve('top-position') + this.warp);
                                                break;
                                            }
                                        }
                                    }
                                } else if (cellIndex > 0) {
                                    var prevCell = sheet[row][colIndex][cellIndex - 1];
                                    cell.store('top-position', prevCell.retrieve('top-position') + prevCell.getSize().y - prevCell.getStyle('border-top-width').toInt());
                                }
                            }
                        }
                    }
                    if (gridItem.getCoordinates(grid).right > maxWidth) {
                        maxWidth = gridItem.getCoordinates(grid).right;
                    }
                    baseGridItem = sheet[row][0].getLast();
                    prevFirstGridItem = baseGridItem;
                    maxGridHeight += maxHeight;
                    maxHeight = 0;
                    startRowIndex = i + 1;
                    row++;
                    col = 0;
                    cell = 0;
                } else {
                    baseGridItem = sheet[row][col][0];
                    cell = 0;
                    col++;
                    if (gridItem.hasClass('large-cell')) {
                        col += 1;
                    }
                    if (gridItem.hasClass('full-cell')) {
                        col += 2;
                    }
                    
                }
                
                maxCellHeight = 0;
            }

            if ($defined(sidebar)) {
                if (sidebar.getSize().y > maxGridHeight) {
                    maxGridHeight = sidebar.getSize().y;
                } else {
                    sidebar.setStyle('height', maxGridHeight + sidebar.getStyle('border-bottom-width').toInt());
                }
                if (gridItems[1]) {
                    sidebar.store('top-position', gridItems[1].retrieve('top-position') + this.warp);
                }
            }
            
            grid.setStyles({
                width: maxWidth,
                height: maxGridHeight + this.warp * sheet[row - 1].length + 50
            });
            
            if (maxWidth > wrapperWidth) {
                wrapperWidth = maxWidth;
            }
            
            grid.setStyle('opacity', 1);
            
            gridItems.each(function(gridItem, index) {
                if (isAnimation == false) {
                    gridItem.setStyle('top', gridItem.retrieve('top-position'));
                }
            }.bind(this));

            sheet.empty();
            
        }.bind(this));
        
        $('ajax-loader').tween('opacity', 0);
        
        if (wrapperWidth < this.baseCellWidth * 4) {
            wrapperWidth = this.baseCellWidth * 4;
        }
        
        wrapper.setStyles({
            width: this.prevWrapperWidth
        });
        wrapper.get('morph', {
            duration: 'normal',
            transition: 'expo:in:out',
            link: 'cancel',
            onComplete: function() {
                wrapper.setStyle('overflow', 'visible');
                if (isAnimation == false) {
                    this.isAdjusting = false;
                    this.isFirst = false;
                } else {
                    var allGridItems = $$('.grid-item');
                    allGridItems.each(function(gridItem, index) {
                        (function(){
                            gridItem.get('tween', {
                                property: 'top',
                                duration: 'normal',
                                transition: 'expo:in:out',
                                link: 'chain',
                                onComplete: function() {
                                    if (index + 1 == allGridItems.length) {
                                        this.isAdjusting = false;
                                        this.isFirst = false;
                                    }
                                }.bind(this)
                            }).start(gridItem.retrieve('top-position'));
                        }.bind(this)).delay(this.delay * index + 500);
                    }.bind(this));
                }
            }.bind(this)
        }).start({
            width: wrapperWidth,
            opacity: 1
        });
        this.prevWrapperWidth = wrapperWidth;
    },
    
    gridEnter: function(gridItem) {
        if (!Browser.Engine.trident || Browser.Engine.version >= 5) {
            gridItem.getElements('img').each(function(img) {
                img.setStyle('opacity', 0.5);
                img.get('tween', {
                    property: 'opacity',
                    duration: '1000',
                    transition: 'expo:out',
                    link: 'cancel'
                
                }).start(1);
            });
        }
        
        gridItem.store('enterTimer',
            (function() {
                if (this.isAdjusting == false) {
                    var offsetTop = gridItem.retrieve('padding') + 12;
                    var offset = offsetTop;
                    if (gridItem.getStyle('border-top-style') == 'none') {
                        gridItem.setStyle('top', gridItem.getStyle('top').toInt() - 1);
                        offsetTop += 1;
                    }
                    gridItem.addClass('grid-item-focused');
                    gridItem.setStyle('z-index', 9999 + gridItem.retrieve('zIndex'));
                    gridItem.get('morph', {
                        property: 'opacity',
                        duration: '200',
                        transition: 'expo:out',
                        link: 'chain'
                    }).start({
                        top: gridItem.retrieve('top-position') - offsetTop,
                        left: gridItem.retrieve('left-position') - offset,
                        padding: offset
                    });
                }
            }.bind(this)).delay(1000)
        );
    },
    
    gridLeave: function(gridItem) {
        $clear(gridItem.retrieve('enterTimer'));
        gridItem.store('enterTimer', null);

        gridItem.removeClass('grid-item-focused');
        if (gridItem.getStyle('padding').toInt() > gridItem.retrieve('padding')) {
            if (this.isAdjusting) {
                gridItem.setStyles({
                    padding: gridItem.retrieve('padding'),
                    'z-index': gridItem.retrieve('zIndex')
                });
            } else {
                if (gridItem.getStyle('border-top-style') == 'none') {
                    gridItem.setStyle('top', gridItem.getStyle('top').toInt() + 1);
                }
    
                gridItem.get('morph', {
                    property: 'opacity',
                    duration: '200',
                    transition: 'expo:in',
                    link: 'chain',
                    onComplete: function() {
                        gridItem.setStyle('z-index', gridItem.retrieve('zIndex'));
                    }
                }).start({
                    top: gridItem.retrieve('top-position'),
                    left: gridItem.retrieve('left-position'),
                    padding: gridItem.retrieve('padding')
                });
            }
        }
    }
    
});

