﻿(function ($) {
    var Banner = function (element, options) {
        var _object = this;
        var _index = 0;
        var _element = $(element);
        var _zoneid = _element.attr('zoneid');
        var _width = _element.width();
        var _height = _element.height();
        var _count = _element.attr('count');
        var _timeoutID;


        var settings = $.extend({
            web: '/',
            info: false,
            preview: false,
            previewClass: '',
            paging: false,
            pagingClass: ''
        }, options || {});

        this.getpage = function () {
            return ((_index + 1) + '/' + _count);
        }

        this.indexChange = function (i) {
            _index += i;
            _object.populate();
        }

        this.indexReplace = function (i) {
            _index = i;
            _object.populate();
        }

        this.populate = function () {
            if (_timeoutID != null) {
                clearTimeout(_timeoutID);
            }

            if (_count <= 0) {
                return;
            }
            else if (_index < 0 || _index >= _count) {
                _index = 0;
                _object.populate(); return;
            }

            jQuery.ajax({
                url: settings.web + '/_layouts/dacka/banner.aspx?ZoneID=' + _zoneid + '&Index=' + _index + '&Info=' + settings.info,
		error: function (data) {
			$('body').attr('bannerUrl', settings.web + '/_layouts/dacka/banner.aspx?ZoneID=' + _zoneid + '&Index=' + _index + '&Info=' + settings.info);
		},
                success: function (result) {
                    _element.fadeIn('10', function () { $(this).html(result) });

                    var duration = ($(result).attr('duration') * 1);
                    if (isNaN(duration)) {
                        duration = 10;
                    }

                    if (settings.preview && settings.previewClass != '') {
                        var preview = $('.' + settings.previewClass);
//                        preview.css('width', _width);
                        preview.find('div').each(function () {
                            var div = $(this);
                            div.css('border', 'none');
                            div.css('padding', '6px 3px');
                            div.css('display', 'inline-block');
                            div.css('text-align', 'center');
                            div.css('vertical-align', 'middle');

                            if (_index == div.index()) {
                                div.css('background-color', 'Green');
                            }
                            else {
                                div.css('background-color', '#ffffff');
                            }

                            var img = div.children('img')
                            img.css('cursor', 'pointer');
                            img.unbind('click');
                            img.bind('click', function () {
                                _index = div.index();
                                _object.populate();
                            });
                        });
                    }

                    if (settings.paging && settings.pagingClass != '') {
                        $('.' + settings.pagingClass).find('page').html(_object.getpage());
                    }

                    if (_count > 1) {
                        _timeoutID = setTimeout(function () {
                            _object.indexChange(1);
                        }, (duration * 1000));
                    }
                }
            });
        };
    };

    $.fn.populate = function (options) {
        var element = $(this);
        if (!element.attr('zoneid')) {
            return;
        }

        var zoneid = element.attr('zoneid');
        // Return early if this element already has a plugin instance
        if (!element.data(zoneid)) {
            // Store plugin object in this element's data
            element.data(zoneid, new Banner(this, options));
            (element.data(zoneid)).populate();

            if (options.paging && options.pagingClass != '') {
                var paging = $('.' + options.pagingClass);
                var page = paging.find('.page');
                page.html((element.data(zoneid)).getpage());

                var prev = paging.find('.prev');
                prev.css('cursor', 'pointer');
                prev.click(function () {
                    (element.data(zoneid)).indexChange(-1);
                    page.html((element.data(zoneid)).getpage());
                });

                var next = paging.find('.next');
                next.css('cursor', 'pointer');
                next.click(function () {
                    (element.data(zoneid)).indexChange(1);
                    page.html((element.data(zoneid)).getpage());
                });
            }
        }
    }
})(jQuery);

$(document).ready(function () {
    $('.banner-zone1').each(function () {
        $(this).populate({ web: $(this).attr('web'), info: false, preview: true, previewClass: 'banner-preview' });
    });

    $('.banner-zone2').each(function () {
        $(this).populate({ web: $(this).attr('web'), info: false, preview: false, paging: true, pagingClass: 'banner-paging' });
    });
});
