$(function() {
    
    $('.product-hover').hover(function() {
       
       startAnims(this);
        
    },function() { this.cycle_cancelled = true; });
    
    function startAnims(elem)
    {
        
        if(!elem.cycling)
        {
            elem.cycle_stage = 0;
            elem.cycling = true;
            elem.cycle_cancelled = false;
            elem.orig_height = parseInt($(elem).height());
            elem.orig_width = parseInt($(elem).width());
            elem.orig_top = parseInt($(elem).css('top'));
            elem.orig_left = parseInt($(elem).css('left'));

            var newheight = (parseInt($(elem).height()) + 20);
            var newwidth = (parseInt($(elem).width()) + 20);
            var newtop = (parseInt($(elem).css('top')) - 20);
            var newleft = (parseInt($(elem).css('left')) - 20);

            $(elem).animate({ height:newheight, width:newwidth, top:newtop, left:newleft },'slow',function() { cycle(elem); });
        }
        
        
    }
    
    function cycle(elem)
    {

        if(elem.cycling && !elem.cancelled)
        {
            switch(elem.cycle_stage)
            {

                case 0:
                    
                    var newheight = (parseInt($(elem).height()) - 20);
                    var newwidth = (parseInt($(elem).width()) - 20);
                    var newtop = (parseInt($(elem).css('top')) + 20);
                    var newleft = (parseInt($(elem).css('left')) + 20);

                    $(elem).animate({ height:newheight, width:newwidth, top:newtop, left:newleft },'slow',function() { cycle(elem); });
                    elem.cycle_stage = 1;

                break;
                case 1:
                    
                    var newheight = (parseInt($(elem).height()) + 20);
                    var newwidth = (parseInt($(elem).width()) + 20);
                    var newtop = (parseInt($(elem).css('top')) - 20);
                    var newleft = (parseInt($(elem).css('left')) - 20);

                    $(elem).animate({ height:newheight, width:newwidth, top:newtop, left:newleft },'slow',function() { cycle(elem); });
                    elem.cycle_stage = 0;
                    
                break;
                
                
            }
            
        }
        checkCancel(elem);
        
    }
    
    function checkCancel(elem)
    {
        
        if(elem.cycle_cancelled)
        {

            elem.cycle_stage = 0;
            elem.cycling = false;
            $(elem).animate({ height:elem.orig_height, width:elem.orig_width, top:elem.orig_top, left:elem.orig_left },'slow',function() { elem.cancelled = false; });

        }
        
    }
    
});
