﻿(function ($) {
    $.fn.tgcScroll = function (opts) {
        var defaults = {
            rows: 1,
            columns: 3,
            itemWidth: 232,
            itemHeight: 215,
            ul: 'scrlList',
            li: 'oneSlide',
            area: 'scrollArea',
            holder: 'scrlHldr',
            currPage: 'currPage',
            numPages: 'numPages',
            animate: true
        };
        var opts = $.extend(defaults, opts);

        this.each(function () {
            var obj = $(this),
                columns = opts.columns,
                slideWidth = columns * opts.itemWidth,
                slideHeight = opts.rows * opts.itemHeight,
                totalWidth = slideWidth * numSlides,
                scroller = $('ul.' + opts.ul, obj),
                numItems = $('div.scrlCourse', obj).length,
                numSlides = Math.ceil(numItems / columns),
                currLeft = scroller.position().left,
                thePage = parseInt($('span.' + opts.currPage, obj).text(thePage)),
                $li = $('<li></li>').attr('class', 'oneSlide'),
                strHTML = '',
                row2 = opts.columns * 2;
                row3 = opts.columns * 3;
                row4 = opts.columns * 4;
                row5 = opts.columns * 5;
                row6 = opts.columns * 6;
                row7 = opts.columns * 7;
                row8 = opts.columns * 8;
            $('div.next_back', obj).empty().html('<a href="#" class="prevPage" title="previous"><img src="https://secureImages.teach12.com/tgc/media/Images/btn_prev.gif" alt="previous" width="20" height="18" /></a>&nbsp;<a href="#" class="nextPage" title="next"><img src="https://secureImages.teach12.com/tgc/media/Images/btn_next.gif" alt="next" width="20" height="18" /></a>');
            if (thePage > numSlides) { thePage = numSlides; } else if (thePage < 1) { thePage = 1; }
            if (opts.rows == 2) {
                numSlides = Math.ceil(numSlides / 2);
            }
            if (opts.rows == 3) {
                numSlides = Math.ceil(numSlides / 3);
            }
            if (opts.rows == 4) {
                numSlides = Math.ceil(numSlides / 4);
            }
            if (opts.rows == 5) {
                numSlides = Math.ceil(numSlides / 5);
            }
            if (opts.rows == 6) {
                numSlides = Math.ceil(numSlides / 6);
            }
            if (opts.rows == 7) {
                numSlides = Math.ceil(numSlides / 7);
            }
            if (opts.rows == 8) {
                numSlides = Math.ceil(numSlides / 8);
            }
            for (var i = 0; i < numItems; i++) {
                var theItem = $('ul.scrlList div.scrlCourse:eq(' + i + ')', obj);
                if (i == 0) { strHTML += '<li class="' + opts.li + '">'; }
                strHTML += '<div class="' + theItem.attr('class') + '">' + theItem.html() + '</div>';
                if (opts.rows == 2) {
                    if ((i + 1) % columns == 0) {
                        if ((i + 1) % row2 == 0) {
                            strHTML += '</li><li class="' + opts.li + '">';
                        } else {
                            strHTML += '<br class="clear" />';
                        }
                    } else if ((i + 1) == columns) {
                        strHTML += '</li>';
                    }
                }
                else if (opts.rows == 3) {
                    if ((i + 2) % columns == 0) {
                        if ((i + 2) % row3 == 0) {
                            strHTML += '</li><li class="' + opts.li + '">';
                        } else {
                            strHTML += '<br class="clear" />';
                        }
                    } else if ((i + 2) == columns) {
                        strHTML += '</li>';
                    }
                }
                else if (opts.rows == 4) {
                    if ((i + 3) % columns == 0) {
                        if ((i + 3) % row4 == 0) {
                            strHTML += '</li><li class="' + opts.li + '">';
                        } else {
                            strHTML += '<br class="clear" />';
                        }
                    } else if ((i + 3) == columns) {
                        strHTML += '</li>';
                    }
                }
                else if (opts.rows == 5) {
                    if ((i + 4) % columns == 0) {
                        if ((i + 4) % row5 == 0) {
                            strHTML += '</li><li class="' + opts.li + '">';
                        } else {
                            strHTML += '<br class="clear" />';
                        }
                    } else if ((i + 4) == columns) {
                        strHTML += '</li>';
                    }
                }
                else if (opts.rows == 6) {
                    if ((i + 5) % columns == 0) {
                        if ((i + 5) % row6 == 0) {
                            strHTML += '</li><li class="' + opts.li + '">';
                        } else {
                            strHTML += '<br class="clear" />';
                        }
                    } else if ((i + 5) == columns) {
                        strHTML += '</li>';
                    }
                }
                else if (opts.rows == 7) {
                    if ((i + 6) % columns == 0) {
                        if ((i + 6) % row7 == 0) {
                            strHTML += '</li><li class="' + opts.li + '">';
                        } else {
                            strHTML += '<br class="clear" />';
                        }
                    } else if ((i + 6) == columns) {
                        strHTML += '</li>';
                    }
                }
                else if (opts.rows == 8) {
                    if ((i + 7) % columns == 0) {
                        if ((i + 7) % row8 == 0) {
                            strHTML += '</li><li class="' + opts.li + '">';
                        } else {
                            strHTML += '<br class="clear" />';
                        }
                    } else if ((i + 7) == columns) {
                        strHTML += '</li>';
                    }
                }
                 else {
                    if ((i + 1) % columns == 0) {
                        strHTML += '</li><li class="' + opts.li + '">';
                    } else if ((i + 1) == columns) {
                        strHTML += '</li>';
                    }
                }
            }
            scroller.empty().html(strHTML);

            obj.css('width', slideWidth + 'px');
            scroller.css('width', (numSlides * slideWidth) + 'px').css('height', slideHeight + 'px');
            scroller.css('left', '-' + (Math.floor((thePage - 1) * slideWidth)) + 'px');

            $('li.' + opts.li, obj).css('width', slideWidth + 'px').css('height', slideHeight + 'px');
            $('div.' + opts.area, obj).css('width', slideWidth + 'px').css('height', slideHeight + 'px').css('overflow', 'hidden');
            $('div.' + opts.holder, obj).show();

            if (thePage == '') { $('span.' + opts.currPage, obj).text(1); } else { $('span.' + opts.currPage, obj).text(thePage); }
            $('span.' + opts.numPages, obj).text(numSlides);

            function slideMe(dir) {
                currLeft = scroller.position().left;
                slideWidth = columns * opts.itemWidth;
                thePage = Math.round((-1) * (currLeft / slideWidth) + 1);
                var newLeft;
                switch (opts.animate) {
                    case true:
                        if (dir == 'next') {
                            if (thePage < numSlides) {
                                newLeft = Math.round(currLeft - slideWidth);
                                scroller.animate({ 'left': newLeft + 'px' }, 300);
                                thePage++;
                                $('span.' + opts.currPage, obj).text(thePage);
                            }
                        } else {
                            if (thePage > 1) {
                                newLeft = Math.round(currLeft + slideWidth);
                                scroller.animate({ 'left': newLeft + 'px' }, 300);
                                thePage--;
                                $('span.' + opts.currPage, obj).text(thePage);
                            }
                        }
                        break;
                    case false:
                        if (dir == 'next') {
                            if (thePage < numSlides) {
                                newLeft = Math.round(currLeft - slideWidth);
                                scroller.css('left', newLeft + 'px');
                                thePage++;
                                $('span.' + opts.currPage, obj).text(thePage);
                            }
                        } else {
                            if (thePage > 1) {
                                newLeft = Math.round(currLeft + slideWidth);
                                scroller.css('left', newLeft + 'px');
                                thePage--;
                                $('span.' + opts.currPage, obj).text(thePage);
                            }
                        }
                        break;
                }
                thePage = parseInt($('span.' + opts.currPage, obj).text());
                currLeft = newLeft;
            };
            $('div.next_back a', obj).click(function (e) {
                e.preventDefault();
                slideMe($(this).attr('title'));
            });
        });
    };
})(jQuery);
