var Slider =
    {
    init: function() {
var $ = mnjQuery;
        // hide the display div till we're ready for it
        if ($('.mn_letterBox').length > 0) {
            $('.mn_letterBox').hide();

            // get slides and hide them
            $('#mn_timeBasedAds').hide();
            var theSlides = $('#mn_timeBasedAds').children();
            if ($(theSlides).length > 0){

                // give them unique ids so we can remove them later
                $(theSlides).generateId();
                $(theSlides).each(function(i) {
                    this.id = this.id + 'zz';

                    var divClass = this.className;
                    var imgClass = this.lastChild.firstChild;
                    var imgSrc = imgClass.src;
                    var imgTitle = imgClass.title;


                    // figure out which ads should display timers
                    if (imgTitle != 'timed'){
                    $(this).children().addClass('mn_noTimer');

                    if (divClass == '' && imgClass.className == ''){
                        this.className = 0;
                        $(this).children().addClass('mn_noTimer');
                    }
                    if (divClass == '' && imgClass.className != ''){
                        this.className = 0;
                        $(this).children().addClass('mn_noTimer');
                    }
                    if (divClass != '' && imgClass.className == ''){
                        $(this).children().addClass('mn_noTimer');
                        imgClass.className = 25000;
                    }
                    }
                });

                // the div where we'll show them
                var $readySlides = $('#mn_letterBoxPics');

                // find the ones we can show now
                var filterAd = $('.0');

                // how many?
                var filterAdCount = filterAd.length;

                // copy them to display div
                $(filterAd).clone().prependTo($readySlides);

                // the copied slides
                var copySlide = $readySlides.children();

                // add timers
                Slider.addTime();

                if (filterAdCount > 0) {
                    $('.mn_letterBox').show();
                }

                // if no timers, add page numbers
                var tet = $(copySlide).find('.mn_noTimer').size();
                var paging = '';
                if (tet >= filterAdCount){
                    paging = '#mn_controlLinks';
                }
                else {
                    paging = 'null';
                }

                // start slideshow
                if (copySlide.length > 1) {
                    Slider.startCycle($readySlides, paging);
                }
                else if ((copySlide.length == 1) && $(copySlide).find('img').get(0).title == 'timed'){
                    $('.mn_timer').css({
                      left: '38%',
                      width: 'auto'
                    });
                    $('.mn_controlBar a').hide();
                }
                else if ((copySlide.length == 1)){
                    $('.mn_controlBar').hide();
                    $('.mn_controlPages').hide();
                    $('.mn_letterBox').height('200px')
                }
            }
            else {
                // no slides available
                $('.mn_letterBox').hide();

            }
        }
    },

    startCycle: function(container, paging){
        var $ = mnjQuery;
        container.cycle({
            fx:     'turnDown',
            speed:  2000,
            timeout: 5000,
            pager:  paging,
            next:   '#mn_controlNext',
            prev:   '#mn_controlPrev'
        });

        $('.mn_pauseButton').toggle(function () {
            container.cycle('pause');
            $(this).addClass('mn_playButton').html('Play >>');
            return false;
        },
        function() {
            container.cycle('resume');
            $(this).removeClass('mn_playButton').html('Pause ||');
            return false;
        });

        //fix the control bar if only one img
        if ($('#mn_letterBoxPics img').length < 2 && $('#mn_letterBoxPics a').hasClass('.mn_noTimer')) {
            $('.mn_controlBar a').hide();
            $('.mn_controlBar').css("top", 0);
        }
    },


    addTime: function() {
var $ = mnjQuery;
        $('.mn_letterBoxHref').each(function(i) {

            // time to expire is the image class name
            var timeLeft = this.firstChild.className;

            // create div for timer display
            if (timeLeft != ''){ //if slide is time based
                $(this).after('<div class="mn_timer"></div>');

                // the timer div
                var countDiv = this.nextSibling;

                if ($(this).hasClass('mn_noTimer')){
                    $(countDiv).css('display', 'none');
                }
                // each timer needs unique id
                $(countDiv).each(function(i) {
                    var newId = $.generateId(newId);
                    this.id = newId + 'xx';

                    // set timers
                    var startElem = this.parentNode;
                    var getClassName = this.parentNode.className;

                    // set time till expire on hidden slides, these never get reset
                    if (startElem.parentNode.id == 'mn_timeBasedAds'){
                        mnjQuery(this).countdown({
                            until: timeLeft,
                            compact: true,
                            format: 'HMS',
                            onExpiry: function(){
                                mnjQuery(this).countdown('destroy');
                                $(this).parent().remove();
                            }
                        });
                    }

                    // using timeouts to set time till start on slides not ready to show yet
                    if (startElem.parentNode.id == 'mn_timeBasedAds' && !(getClassName == "0" || getClassName == '')){
                        setTimeout(function(){
                            startElem.className = "0";
                            var dumpTimer = $('#mn_letterBoxPics').find('.mn_letterBoxHref').next();
                            mnjQuery(dumpTimer).countdown('destroy');
                            $('#mn_letterBoxPics, #mn_controlLinks').cycle('stop').empty();
                            Slider.resetSlide();
                        }, getClassName * 1000)
                    }

                    // set time till expire on slides being displayed, these get removed with each reset
                    else {
                        mnjQuery(this).countdown({
                            until: timeLeft,
                            compact: true,
                            format: 'HMS',
                            layout: 'Expires in: <strong>%H%nn%H:%M%nn%M:%S%nn%S</strong>',
                            onExpiry: function(){
                                var timeToDie = $('#mn_letterBoxPics').find('.mn_letterBoxHref').next();
                                mnjQuery(timeToDie).countdown('destroy');
                                $('#mn_letterBoxPics, #mn_controlLinks').cycle('stop').empty();

                                Slider.resetSlide();
                            }
                        });
                    }
                });
            }
        });
    },


    resetSlide: function (){
        var $ = mnjQuery;
        // rinse and repeat
        var $resetSlides = $('#mn_letterBoxPics');
        $('#mn_timeBasedAds').children().children('.mn_timer').each(function(i) {

            // get the current running timer value
            var curTimeArray = mnjQuery(this).countdown('getTimes');

            // put it in format timer plugin understands
            var sec = curTimeArray[6];
            var min = curTimeArray[5];
            var hr = curTimeArray[4];
            var dy = curTimeArray[3];
            var wk = curTimeArray[2];
            var mt = curTimeArray[1];
            var yr = curTimeArray[0];
            var curTime = '+' +yr+ 'y' + '+' +mt+ 'o' + '+' +wk+ 'w' + '+' +dy+ 'd' + '+' +hr+ 'h' + '+' +min+ 'm' + '+' +sec+ 's';

            //replace class name with new timer value
            if (this.parentNode.className == "0"){
                var adImg = $(this).prev().find('img');
                $(adImg).removeClass().addClass(curTime);
            }
        });

        if ($('#mn_timeBasedAds').children('.0').length > 0){
            $('.mn_letterBox').show();

            // get the ones we can show now and copy
            $('.0').clone().prependTo($resetSlides);

            //do something with the control bar if only one img
            if ($resetSlides.children().length < 2 && $resetSlides.find('img').get(0).title != 'timed') {
                $('.mn_controlBar').hide();
                $('#mn_letterBox').height('140px')
                }
            else if ($resetSlides.children().length < 2 && $resetSlides.find('img').get(0).title == 'timed') {
                $('.mn_controlBar a').hide();
                $('.mn_controlBar').css('top', '140px');
            }
            else {
              $('.mn_controlBar a').show();
                $('.mn_controlBar').css('top', '140px');
            }

            // apply timers
            $('.mn_letterBoxHref').each(function(i){
                if (this.parentNode.parentNode.id == 'mn_letterBoxPics'){

                    // get the class name to set timer
                    var timeClass = $(this).find('img');
                    if (timeClass[0].className != ''){
                        var newTimeLeft = timeClass[0].className;


                        $(this).next().remove();
                        $(this).after('<div class="mn_timer"></div>');
                        var countDiv = this.nextSibling;

                        if ($(this).hasClass('mn_noTimer')){
                            $(countDiv).css('display', 'none');
                            $('#mn_letterBox').height('140px')
                        }

                         //ie7 needs this
                        $(countDiv).css({
                  color: '#fff',
                  zIndex: 999999
                });

                        // assigning unique id to each slide for countdown
                        $(countDiv).each(function(i) {
                            var newId = $.generateId(newId);
                            this.id = newId + 'qq';

                            mnjQuery(this).countdown({
                                until: newTimeLeft,
                                compact: true,
                                format: 'HMS',
                                layout: 'Expires in: <strong>%H%nn%H:%M%nn%M:%S%nn%S</strong>',
                                onExpiry: function(){
                                    var timeToDie = $('#mn_letterBoxPics').find('.mn_letterBoxHref').next();
                                    mnjQuery(timeToDie).countdown('destroy');
                                    var allDone = $(this).parent().attr('id');
                                    var idxx = '#' + allDone;
                                    var findOrig =  $('#mn_timeBasedAds').find(idxx);
                                    mnjQuery(findOrig).find('.mn_timer').countdown('destroy');
                                    $(findOrig).remove();
                                    $('#mn_letterBoxPics, #mn_controlLinks').cycle('stop').empty();
                                    Slider.resetSlide();
                                }
                            });
                        });
                    }
                }
            });

            // if no timers, add page numbers
            var tet = $resetSlides.children().find('.mn_noTimer').length;
            var paging = '';
            if (tet == $('#mn_timeBasedAds').children('.0').length){
                paging = '#mn_controlLinks';
            }
            else {
                paging = 'null';
            }
            // start slideshow
            if ($resetSlides.children().length > 1){
            Slider.startCycle($resetSlides, paging);
            }
        }
        else {
            // no slides exist
            $('.mn_letterBox').hide();
        }
    }
};


//TODO: move this to plugins
//id generator plugin
mnjQuery.generateId = function() {
    return arguments.callee.prefix + arguments.callee.count++;
};

mnjQuery.generateId.prefix = 'mn_';
mnjQuery.generateId.count = 0;

mnjQuery.fn.generateId = function() {
    return this.each(function() {
        this.id = mnjQuery.generateId();
    });
};
