/*
 * Memorial University ccJquerySlideShow
 * Version: 2.0
 *
 * Copyright 2011, Memorial University
 * Author Dale Conway
 *
 * 
 *
 * ccJquerySlideShow
 *
 */


ccJquerySlideShow = {
    containerId: 'ccJquerySlideShow',
    imageContainerClass: 'ccJquerySlideShow_ImgContainer',
    imageContainerIdPrefix: 'ccJquerySlideShow_page',
    buttonIdPrefix: 'ccJquerySlideShow_button',
    buttonClass: 'ccJquerySlideShow_button',
    currentButtonClass: 'ccJquerySlideShow_current_button',
    linkClass: 'ccJquerySlideShow_link',
    linkIdPrefix:  'ccJquerySlideShow_link_',
    linkClassPrefix: 'ccJquerySlideShow_Link_',

    intervalID: null,
    slideConfig: {
        randomStart: true,
        random: false,
        pages:0,
        interval: 8,
        fadeTime: 800,
        callbacks:{}
    },
    basePath: null,

    currentPage : 1,

    
    init: function(){
        for (i in this.config){
            this.slideConfig[i] = this.config[i];
        }

        if(this.slideConfig.randomStart){
            this.currentPage = Math.ceil(Math.random() * this.slideConfig.pages);
        }

        for (i = 1; i <=this.slideConfig.pages; i++){
            imgId = this.imageContainerIdPrefix + i;
            imgSrc = this.basepath + 'slide' + i + '.jpg';
            buttonId = this.buttonIdPrefix + i;
            $('#' + this.containerId).append('<div class="' + this.imageContainerClass + '" id="' + imgId +'"><img src="' + imgSrc + '"/></div>');
            $('#' + this.containerId).append('<div id="' + buttonId + '" class="' + this.buttonClass + '">  ' + this.slideConfig[i].buttonName + '</div>');

            for (j in this.slideConfig[i].links){
                linkId = this.linkIdPrefix + i + '_' + j;
                linkClass = this.linkClass + ' ' + this.linkClassPrefix + i;
                $('#' + this.containerId).append('<div id="' + linkId + '" class="' + linkClass + '"><a href="' + this.slideConfig[i].links[j] + '">&nbsp;</a></div>');
            }

            if (i != this.currentPage){
                $('#' + imgId).css('display','none');
                $('.' + this.linkClassPrefix + i).css('display','none');
            }

            $('#' + buttonId).click(function(){
                ccJquerySlideShow.clickHandler($(this).attr('id'));
            });

            $('#' + buttonId).css('left',this.slideConfig[i].left + 'px');
            $('#' + buttonId).css('top',this.slideConfig[i].top  + 'px');
        }

        if (this.slideConfig.interval > 0){
            this.intervalID = setInterval(function(){
                ccJquerySlideShow.pageChangeHandler()
            },this.slideConfig.interval * 1000);
            
        }

        $('#' + this.buttonIdPrefix + (this.currentPage)).click();

    },


    clickHandler: function(id){
        nextPage = (id.substring(24,25));
        $('.' + this.buttonClass).removeClass(this.currentButtonClass);
        $('#' + this.buttonIdPrefix  + nextPage).addClass(this.currentButtonClass);
        if (this.currentPage != nextPage){
            $('.' + this.linkClassPrefix + this.currentPage).css('display','none');
            $('#' + this.imageContainerIdPrefix + this.currentPage).fadeOut(this.slideConfig.fadeTime);

            $('#' + this.imageContainerIdPrefix + nextPage).fadeIn(this.slideConfig.fadeTime);
            $('.' + this.linkClassPrefix + nextPage).css('display','block');

            this.currentPage =  nextPage;

            if (this.slideConfig.interval > 0){
                clearInterval(this.intervalID);
                this.intervalID= setInterval(function(){
                    ccJquerySlideShow.pageChangeHandler()
                },this.slideConfig.interval * 1000);
            }

        }
        for (i in this.slideConfig.callbacks){
            f = this.slideConfig.callbacks[i];
            if (typeof(f) == 'function'){
                pageno = String(id).replace(this.buttonIdPrefix,"");
                f(pageno);
            }
        }        
    },

    pageChangeHandler: function(){
        var newPageId;
        if (this.slideConfig.random){
            do{
                rnd = Math.ceil(Math.random() * this.slideConfig.pages).toString();
            }
            while (rnd == this.currentPage);
            newPageId = rnd;
        }else{
            if (this.currentPage == this.slideConfig.pages){
                newPageId  = 1;
            }else{
                newPageId = (parseInt(this.currentPage)+1)
            }
        }
        $('#' + this.buttonIdPrefix + newPageId).click();
    }

}

