(function($) {
    $.fn.innerLabel = function(text) {
        var $n = $(this);
        $n.bind('focus', function() {
            if($n.attr('value') == text)
                $n.removeClass('innerLabel').attr('value', '');
        });
        $n.bind('blur', function() {
            if($n.attr('value') == '')
                $n.addClass('innerLabel').attr('value', text);
        });
        $($n[0].form).bind('submit', function() {
            if($n.attr('value') == text)
                $n.attr('value', '');
        })
        $n.attr('value', text);
        $n.addClass('innerLabel');
    }
    $.fn.rotateImages = function(cfg) {
        cfg = cfg || {};
        var delay = cfg.delay || 5000;
        var speed = cfg.speed || 3000;
        var listener = cfg.listener || null;

        var $me = $(this);
        $me.css({
            position: 'absolute',
            opacity: 0,
            zIndex: 0,
            visibility: 'hidden'
        });
        $me.first().css({
            visibility: 'visible',
            opacity: 1
        });
        var currImgPos = 0;
        var fired = false;
        var going = true;
        function go() {
            var time = delay;
            if(fired) time += speed;
            setTimeout(function() {
                if(going) {
                    $($me[currImgPos]).animate({
                        opacity: 0
                    }, speed, 'swing', function() {
                        $(this).css('visibility', 'hidden'); //Lets links work
                    });
                    currImgPos ++;
                    if(currImgPos >= $me.length) currImgPos = 0;
                    $($me[currImgPos]).css('visibility', 'visible'); //Lets links work
                    $($me[currImgPos]).animate({
                        opacity: 1
                    }, speed, 'swing');
                    fired = true;
                    if(listener) {
                        listener(currImgPos);
                    }
                    go();
                }
            }, time);
        }
        go();
        return {
            start: function() {
                going = true;
                go();
            },
            stop: function() {
                going = false;
            },
            setTo: function(pos) {
                currImgPos = pos;
            }
        }
    }
    $.fn.directPager = function(cfg) {
        var $targets = this;
        cfg = cfg || {};
        var $ctr = $(cfg.container);
        var tpl = cfg.template;
        var active = cfg.active || 0;
        var listener = cfg.listener || null;
        var items = [];
        $(this).each(function(i) {
            var title = '';
            var nodeName = this.nodeName.toLowerCase();
            switch(nodeName) {
                case 'a':
                    title = this.title;
                    break;
                case 'img':
                    title= this.alt;
                    break;
            }
            items.push({
                index: i,
                cls: i == active ? 'active' : '',
                title: title
            });
        });
        var $els = $(tpl).tmpl(items).appendTo($ctr);
        $els.children('a').click(function(e) { e.preventDefault(); });
        var $curr = $($els[0]);
        $curr.addClass('active');
        $els.each(function(i) {
            $(this).click(function(e) {
                e.preventDefault();
                $curr.removeClass('active');
                $curr = $(this);
                $curr.addClass('active');
                if(listener) listener(i, items[i].title);
                $targets.css('visibility', 'hidden');
                $targets.css('opacity', 0);
                $($targets[i]).css('visibility', 'visible');
                $($targets[i]).css('opacity', 1);
            });
        });

        return {
            setListener: function(fn) {
                listener = fn;
            },
            setIndex: function(i) {
                $curr.removeClass('active');
                $curr = $($els[i]);
                $curr.addClass('active');
            }
        };
    };
    $.nav = function() {
        $('#menuInner ul ul').css('overflow', 'hidden');
        //Initialize each UL, making sure we open the active flag to keep things properly open or closed to start.
        $('#menuInner ul ul').each(function(i) {
            if($(this).find('.active').length > 0) {
                $(this).removeClass('closed');
                $(this).addClass('open');
                $(this).find('li').css('opacity', 1);
            } else {
                $(this).removeClass('open');
                $(this).addClass('closed');
                $(this).find('li').css('opacity', 0);
                $(this).slideUp(0);
            }
        });
        $('#menuInner li.container>a').click(function(e) {
            e.preventDefault();
            var $target = $(this).parent().find('ul');
            if($target.hasClass('open')) {
                $target.find('li').animate({ opacity: 0 });
                $target.slideUp();
                $target.removeClass('open');
                $target.addClass('closed');
            } else {
                $target.find('li').animate({ opacity: 1 });
                $target.slideDown();
                $target.removeClass('closed');
                $target.addClass('open');
            }
        });
    }
})(jQuery);
