﻿google.load('jquery', '1.3.2');
google.load("jqueryui", "1.7.2");
google.setOnLoadCallback(function() {

    $('.adverts').hide();

    $.Adverts = null;

    $.getJSON('update/js/specific/brighton/adverts.json', function(data) {
        $.Adverts = data;
    });

    $.RandomAdverts = function(requestedNumberOfAdverts) {
        var availableAdverts = [], url, img;

        $.each($.Adverts['adverts']['available'], function(i) {
            url = this['url'];
            img = '/update/img/specific/brighton/adverts/' + this['img'];
            availableAdverts.push([url, img]);
        });

        var container = $('.adverts');

        container.find('li').remove();

        var createAdvert = function(img, url) {
            if (url.length > 1) {
                $advert = $('<li><a href="' + url + '" target="_blank"><img width="199" height="80" src="' + img + '" /></a></li>');
            }
            else {
                $advert = $('<li><img width="199" height="80" src="' + img + '" /></li>');
            }
            return $advert;
        };

        var generateAdvertsArray = function() {
            var advertsArray = [], random;

            if (requestedNumberOfAdverts <= availableAdverts.length) {
                do {
                    random = Math.floor(Math.random() * (availableAdverts.length));
                    if ($.inArray(random, advertsArray) === -1) {
                        advertsArray.push(random);
                    }
                } while (advertsArray.length < requestedNumberOfAdverts);
            } else {
                var message = $('<p style="font-weight:bold; color:red;">The number of adverts available is less than the requested number of adverts!</p>');
                message.appendTo(container);
            }

            return advertsArray;
        };

        var setAdvert = function() {
            var advArray = generateAdvertsArray();
            var $advert, index, arr;

            for (var i = 0; i < advArray.length; i++) {
                index = advArray[i];
                arr = availableAdverts[index];
                $advert = createAdvert(arr[1], arr[0]);
                $advert.appendTo(container);
            }

            $('.adverts').fadeIn('fast');
        };

        setAdvert();
    };

    var checkRandomAdvertsJSonReady = setInterval(function() {
        if ($.Adverts !== null) {
            $.RandomAdverts($.Adverts['adverts']['requested']);
            clearInterval(checkRandomAdvertsJSonReady);
        };
    }, 100);

    $('#tbxPlace').focus();

    jQuery.fn.roundCorners = function() {
        return this.each(function() {
            var $this = $(this), classes = ['tl', 'tr', 'bl', 'br'], span;
            for (var i = 0, l = classes.length; i != l; ++i) {
                span = $('<span class="' + classes[i] + '"></span>');
                span.appendTo($this);
            }
        });
    };

    $('.round').roundCorners();

    // Public
    jQuery.jAlert = function(message, options) {
        var opts = $.extend({}, $.jAlert.defaults, options);

        var $container = _buildContainer();

        message = message.split('-')[1];

        $container.text(message);

        _show($container, opts);
    };

    jQuery.jAlert.defaults = { duration: 4000, persistent: false };

    // Private
    var _buildContainer = function() {
        var $container = $('#jAlert');

        if ($container.length === 0) {
            var $body = $(document.body);
            $container = $('<div id="jAlert"></div>');
            $container.appendTo($body);
        }

        return $container;
    };

    var _centerInViewport = function($obj) {
        var $viewport = $(window);

        var top = ($viewport.height() / 2) - ($obj.height() / 2);
        var left = ($viewport.width() / 2) - ($obj.width() / 2);

        $obj.css({
            'top': '350px',
            'left': left + 'px'
        });

        return $obj;
    };

    var _explode = function($obj, evt) {
        $obj.effect('highlight').effect('drop');
        if (typeof evt !== 'undefined') {
            clearTimeout(evt);
        }
    };

    var _show = function($obj, opts) {
        _centerInViewport($obj).effect('bounce').fadeIn('fast', function() {
            if (opts.persistent) {
                var $closeBtn = $('<a class="jAlertCloseBtn">Close</a>');
                $closeBtn.appendTo($obj).fadeIn('slow'); ;
                $closeBtn.click(function() {
                    _explode($obj);
                });
            } else {
                setTimeout(function(evt) { _explode($obj, evt); }, opts.duration);
            }
        });
    };

    // Init				
    window.alert = $.jAlert;

});

