/**
 * Copyright (c) 2009 Sylvain Gougouzian (sylvain@gougouzian.fr)
 * MIT (http://www.opensource.org/licenses/mit-license.php) licensed.
 * GNU GPL (http://www.gnu.org/licenses/gpl.html) licensed.
 *
 * jQuery moodular effects by Sylvain Gougouzian http://sylvain.gougouzian.fr
 */
jQuery(function($) {
    $.extend($.fn.moodulite.effects.init,{
        right: function (m) {
            m.opts.move = function (c, b) {
                c.e.animate({
                    left: (c.dir == 1 ? '+=' : '-=') + c.size + 'px'
                }, c.opts.speed, c.opts.easing, function () { 
                    b(); 
                });
            };
        },
        top: function (m) {
            m.vertical = true;
            m.opts.move = function (c, b) {
            	c.e.animate({
                    top: (c.dir == 1 ? '-=' : '+=') + c.size + 'px'
                }, c.opts.speed, c.opts.easing, function () {
                    b();
                });
            };
        },
        bottom: function (m) {
            m.vertical = true;
            m.opts.move = function (c, b) {
                c.e.animate({
                    top: (c.dir == 1 ? '+=' : '-=') + c.size + 'px'
                }, c.opts.speed, c.opts.easing, function () {
                    b();
                });
            };
        },
        fade: function (m) {
            $('> ' + m.opts.item, m.e).css({
                'position' : 'absolute',
                'z-index' : 1,
                'opacity' : 0
            });
            $('> ' + m.opts.item + ':first', m.e).css({
                'z-index' : 3,
                'opacity' : 1
            });
            $('> ' + m.opts.item, m.e).eq(1).css('z-index', 2);
            m.opts.move = function (c, b) {
                $('> ' + m.opts.item, m.e).css({
                    'z-index' : 1,
                    'opacity' : 0
                });
				$('> ' + m.opts.item + '[data-position=' + m.current + ']', m.e).css({
					'z-index' : 2,
					'opacity' : 1
				});
				$('> ' + m.opts.item + '.current', m.e).css({
					'z-index' : 3,
					'opacity' : 1
				}).animate({
					opacity: 0
				}, c.opts.speed, c.opts.easing, function () {
					b();
				});
            };
        },
        legend: function (m) {
            $('#' + m.opts.legendId).html($('> ' + m.opts.item + ':first .legend', m.e).html());
        },
        thumb: function (m) {
            $('> ' + m.opts.item, m.e).bind('click', function () {
                m.moveTo($(this).attr('data-position'));
            });
            if (m.opts.main != undefined) {
                m.opts.main.opts.speed = m.opts.speed;
                m.opts.main.opts.easing = m.opts.easing;
            }
            m.opts.move = function (c, b) {
                $('> ' + c.opts.item, c.e).eq(c.current + c.dir).trigger('click');
                c.e.animate({
                    left: (c.dir == 1 ? '-=' : '+=') + c.size + 'px'
                }, c.opts.speed, c.opts.easing, function () {
                    b();
                });
            }
        },
        paralax: function (m) {
            m.opts.move = function (c, b) {
                c.e.animate({
                    left: (c.dir == 1 ? '-=' : '+=') + c.size + 'px'
                }, c.opts.speed, c.opts.easing, function () {
                    b();
                });
                $('.paralax', $('> ' + c.opts.item, c.e).eq(1)).each(function (i) {
                    var $this = $(this);
                    $this.css('left', $this.data('speed') * $('> ' + c.opts.item, c.e).eq(1).width());
                    $this.animate({
                        'left' : 0
                    }, c.opts.speed, c.opts.easing);
                });
                $('.paralax', $('> ' + c.opts.item, c.e).eq(0)).each(function (i) {
                    var $this = $(this);
                    $this.animate({
                        'left' : $this.data('speed') * $('> ' + c.opts.item, c.e).eq(0).width()
                    }, c.opts.speed, c.opts.easing);
                });
            };
        }
    });
    $.extend($.fn.moodulite.effects.before,{
        right: function (m) {
            if (m.dir == 1) {
                m.e.prepend($('> ' + m.opts.item, m.e).eq(1));
                m.e.css('left', '-' + m.size + 'px');
            }
        },
        top: function (m) {
            if (m.dir == -1) {
                m.e.prepend($('> ' + m.opts.item + ':last', m.e));
                m.e.css('top', '-' + m.size + 'px');
            } else {
				$('>' + m.opts.item + '[data-position=' + m.current + ']', m.e).insertAfter($('>' + m.opts.item + ':first', m.e));
			}
        },
        bottom: function (m) {
            if (m.dir == 1) {
                m.e.prepend($('> ' + m.opts.item, m.e).eq(1));
                m.e.css('top', '-' + m.size + 'px');
            }
        },
        legend: function (m) {
            $('#' + m.opts.legendId).fadeOut(m.opts.legendSpeed);
        },
        thumb: function (m) {
            if (m.dir == -1) {
                m.e.prepend($('> ' + m.opts.item + ':last', m.e));
                m.e.css('left', '-' + m.size + 'px');
            }
            if (m.opts.main != undefined)
                m.opts.main.moveTo(m.current);
        },
        paralax: function (m) {
            if (m.dir == -1) {
                m.e.prepend($('> ' + m.opts.item + ':last', m.e));
                m.e.css('left', '-' + m.size + 'px');
            }
        }
    });
    $.extend($.fn.moodulite.effects.after,{
        right: function (m) {
            if (m.dir == -1) {
                m.e.append($('> ' + m.opts.item + ':first', m.e));
                m.e.css('left', 0);
            } else {
				$('>' + m.opts.item + '[data-position=' + m.current + ']', m.e).insertAfter($('>' + m.opts.item + ':first', m.e));
			}
        },
        top: function (m) {
            if (m.dir == 1) {
                m.e.append($('> ' + m.opts.item + ':first', m.e));
                m.e.css('top', 0);
            }
        },
        bottom: function (m) {
            if (m.dir == -1) {
                m.e.append($('> ' + m.opts.item + ':first', m.e));
                m.e.css('top', 0);
            }
        },
        fade: function (m) {
            $('>' + m.opts.item, m.e).removeClass('current');
			$('>' + m.opts.item + '[data-position=' + m.current + ']', m.e).addClass('current');
        },
        legend: function (m) {
            $('#' + m.opts.legendId).html($('.legend', $('> ' + m.opts.item, m.e).eq(0)).html()).fadeIn(m.opts.legendSpeed);
        },
        thumb: function (m) {
            if (m.dir == 1) {
                m.e.append($('> ' + m.opts.item + ':first', m.e));
                m.e.css('left', 0);
            }
            m.locked = false;
            $('> ' + m.opts.item, m.e).removeClass('active');
            $('> ' + m.opts.item + ':first', m.e).addClass('active');
        },
        paralax: function (m) {
            if (m.dir == 1) {
                m.e.append($('> ' + m.opts.item + ':first', m.e));
                m.e.css('left', 0);
            }
        }
    });
    $.extend($.fn.moodulite.effects.resize,{
        top: function (m) {
            m.size = parseInt(m.e.parent().height());
            m.e.height(2 * m.size + 'px');
            $('>' + m.opts.item, m.e).height(m.size);
        },
        bottom: function (m) {
            m.size = parseInt(m.e.parent().height());
            m.e.height(2 * m.size + 'px');
            $('>' + m.opts.item, m.e).height(m.size);
        },
        thumb: function (m) {
            var mif = $('>' + m.opts.item + ':first', m.e).addClass('active');
            if (m.vertical) {
                m.size = parseInt(mif.outerHeight(true));
            } else {
                m.size = parseInt(mif.outerWidth(true));
            }
            var mil = $('> ' + m.opts.item, m.e).length;
            if (mil <= m.opts.dispMaxItems) {
                if (m.vertical) {
                    m.e.parent().height(m.size * (mil - 1));
                } else {
                    m.e.parent().width(m.size * (mil - 1));                    
                }
            }
            if (m.vertical) {
                m.e.height(9999);
            } else {
                m.e.width(9999);
            }
        }
    });
});
