/*globals alert, $, window, navigationManager*/
/*jslint white: true, onevar: true, undef: true, nomen: true, regexp: true, plusplus: true, bitwise: true, newcap: true, maxerr: 50, indent: 4 */


/* Manager della gallery. */
var initHomepageManager = function () {
    // JSLint strict
    'use strict';

    // That and mine.
    var that = {},
        my = {};

    my.index = 0;

    // Days to
    my.getDaysTo = function () {
        var today, theDay;
        today = new Date();
        theDay = new Date(my.data.counter.formattedData);
        return Math.ceil((theDay.getTime() - today.getTime()) / (1000 * 60 * 60 * 24));
    };

    // Loading...
    my.setLoading = function () {
        my.bigImg.children().remove();
        my.bigImg.css({
            backgroundImage: 'url(/img/loader.gif)'
        });
    };


    // Render the counter
    my.renderCounter = function () {
        my.counter = $("<div>").hide().attr('id', 'homepageCounterDiv').appendTo(navigationManager.contentBody).fadeIn('fast', my.renderGallery);

        my.counter.width(264);
        $('<p>').attr('id', 'counterNumber').append(my.getDaysTo()).appendTo(my.counter).css({
            fontSize: '60px'
        });
        $('<p>').append("Days to go").appendTo(my.counter).css({
            fontSize: '30px'
        });
        $('<p style="color:#cdc3bd;">').append(my.data.counter.data).appendTo(my.counter).css({
            fontSize: '17px'
        });
        $('<p>').append(my.data.counter.title).appendTo(my.counter).css({
            fontSize: '19px'
        });
        $('<p style="color:#cdc3bd;">').append(my.data.counter.club).appendTo(my.counter).css({
            fontSize: '17px'
        });
    };
	
    // Render links
    my.renderClass = function () {
        $.each(my.data.classifica.premi_speciali, function (index, item) {
					$("<p>").append(item.descrizione).append(item.giocatori).append(item.punteggio);
        });
    };
	
	// Render the  leaderboard
    my.renderClassifica = function () {
        my.classifica = $("<div>").hide().attr('id', 'homepageClassificaDiv').appendTo(navigationManager.contentBody).fadeIn('fast', my.renderGallery);

        my.classifica.width(264);
        /*$('<p>').attr('id', 'counterNumber').append(my.getDaysTo()).appendTo(my.classifica).css({
            fontSize: '60px'
        });
        $('<p>').append("Days to go").appendTo(my.classifica).css({
            fontSize: '30px'
        });*/
        $('<p style="color:#cdc3bd;text-align:center;margin:30px 10px;">').append(my.data.classifica.title).appendTo(my.classifica).css({
            fontSize: '22px'
        });
        $('<p style="font-weight: bold;text-align:center;margin-bottom:30px;">').append(my.data.classifica.club_data).appendTo(my.classifica).css({
            fontSize: '16px'
        });

		/*var paragrafo = $('<p style="color:#ffffff;">');
		paragrafo.append("<h3>Premi speciali</h3>");
		$.each(my.data.classifica.premi_speciali, function (index, item) {
					paragrafo.append(item.descrizione).append(": " + item.giocatori + "<br>").appendTo(my.classifica).css({
						fontSize: '11px'
					});
        });
		paragrafo.append("<h3>Classifica individuale</h3>");
		$.each(my.data.classifica.class_indiv_amici, function (index, item) {
					paragrafo.append("Cat. AMICI - ").append(item.descrizione).append(": " + item.giocatori + "<br>").appendTo(my.classifica).css({
						fontSize: '11px'
					});
        });
		$.each(my.data.classifica.class_indiv_agire, function (index, item) {
					paragrafo.append("Cat. AGIRE - ").append(item.descrizione).append(": " + item.giocatori + "<br>").appendTo(my.classifica).css({
						fontSize: '11px'
					});
        });
		paragrafo.append("<h3>Classifica a squadre aziendali</h3>");
		$.each(my.data.classifica.class_squadre_aziendali, function (index, item) {
					paragrafo.append(item.descrizione).append(": " + item.giocatori + "<br>").appendTo(my.classifica).css({
						fontSize: '11px'
					});
        });*/
		$("</p>").append($("<a>").attr('title', 'Classifica 2011').attr('href', '/pages/classifica.html').append('Classifica 2011')).appendTo(my.classifica);
		my.classifica.append('<br/>');
		$("</p>").append($("<a>").attr('title', 'Classifica 2011').attr('href', '#').
			append('Photogallery 2011')).appendTo(my.classifica).click(function () {
				galleriesManager.openItem('2011')
			});
    };

    // Scrolla se l'item non è visibile.
    my.checkThumbVisible = function (item) {
        my.thumbsContainer.children().each(function (index) {
            if ($(this).children().data('data') == item) {
                my.thumbs.scrollTo($(this), 500, {margin: true, offset: -200});
            }
        });
    };

    // Seleziona una immagine.
    that.stopTimer = function () {
        if (my.timer) {
            my.timer.stop();
            my.timer = undefined;
        }
    };

    // Seleziona una immagine.
    my.selectImage = function (item) {
        var img, ratioX, ratioY, didascalia;
        my.selectedIndex = item.index;

        if (my.bigImg.find('> *:visible').size()) {
            my.bigImg.find('> *:visible').fadeOut(function () {
                if (!my.bigImg.find('> *:visible').size()) {
                    my.selectImage(item);
                }
            });
            return;
        }
        my.checkThumbVisible(item);
        my.bigImg.children().remove();

        img = $("<img>").attr('src', item.image).hide();
        didascalia = $("<div>").addClass("homepageDidascalia").append(item.label).hide();
        my.bigImg.append(img);
        /*my.bigImg.append(didascalia);*/

        img.scaleImage({
            center: true,
            scale: 'fit'
        });
        img.load(function () {
            img.fadeIn('slow', function () {
                my.timer = $.timer(4000, function (timer) {
                    timer.stop();
                    my.timer = undefined;
                    my.selectImage(my.data.gallery[item.index + 1] || my.data.gallery[0]);
                });
            });
            didascalia.fadeTo(0, 0.1, function () {
                $(this).css({
                    top: "-" + ($(this).height() + 4) + "px",
					width: $(this).width() + "px"
                });
            }).hide().fadeTo('fast', 0.7);
        });
    };

    // Add image
    my.addThumb = function (index, item) {
        var img, div;
        item.index = index;
        div = $("<div>").addClass('thumbSelector');
        img = $("<img>").data('data', item).attr('src', item.thumb);
        img.click(function (event) {
            if (my.timer) {
                my.timer.stop();
                my.timer = undefined;
            }
            my.selectImage(item);
        });
        div.appendTo(my.thumbsContainer);
        img.appendTo(div);
        if (my.first) {
            $.timer(200, function (timer) {
                timer.stop();
                my.selectImage(item);
            });
        }
        my.first = false;
    };

    // Debug
    that.debug = function (str) {
        $('pre').append(str + "\n");
    };

    // Render the gallery
    my.renderGallery = function () {
        my.galleryDiv = $("<div>").hide().appendTo(navigationManager.contentBody).fadeIn('fast', my.renderSponsors);
        my.bigImg = $("<div>").width(490).attr('id', 'homepageGalleryDiv').appendTo(my.galleryDiv);
        my.setLoading();

        my.thumbs = $("<div>").css({
            overflow: 'hidden'
        }).appendTo(my.galleryDiv);

        if (my.bigImg.outerHeight() < my.classifica.outerHeight()) {
            my.bigImg.height(my.classifica.outerHeight());
        }
        my.thumbsContainer = $("<div>").appendTo(my.thumbs).css({
            background: '#223351',
			height: '760px'
        });
        //my.thumbs.mouse
        my.first = true;
        $.each(my.data.gallery, my.addThumb);
        my.thumbs.height(my.classifica.outerHeight());
    };

    // Render sponsors
    my.renderSponsors = function () {		
		my.sponsors = $("<div>");
		$.each(my.data.sponsors, function (index, item) {
			var img = $("<img>").attr("src", item.image);
			if (item.href) {
				img.click(function (event) {
					window.open(item.href, '_blank');
				});
			}
			img.load(function (event) {
				$(this).css({marginTop: (($(this).parent().height() - $(this).height()) / 2) + "px"});
			});
			my.sponsors.append($("<div>").attr("class", item.href ? "homepageSponsorLink" : "homepageSponsorLink1")
					.append(img));
		});
        my.sponsors.appendTo(navigationManager.contentBody).attr('id', 'homepageSponsorDiv').fadeIn('fast', my.renderLinks);
    };

    // Render links
    my.renderLinks = function () {
		var table, tr;
		table = $('<table>').appendTo(navigationManager.contentBody).css({width: "100%"}).fadeIn('fast');
		tr = $('<tr>').appendTo(table);
        $.each(my.data.links, function (index, item) {
			$("<td>").css({textAlign: 'center'})
					.append(
					$("<a>").attr('title', item.label).attr('href', item.href).append(
					$("<img>").attr('src', item.image).attr('title', item.label).attr('alt', item.label))
					).appendTo(tr);
        });
    };

    // Load JSON
    my.loadJSON = function (callback) {
        $.getJSON('ajax/homepage.json', function (data) {
            my.initialized = true;
            my.data = data;
            if (callback) {
                callback();
            }
        });
    };

    // Apertura homepage.
    that.open = function () {
        if (!my.initialized) {
            my.loadJSON(that.open);
        } else {
            navigationManager.fadeOut(my.renderClassifica);
        }
        return false;
    };

    my.initialized = false;

    return that;
};

