(function($) {

$.widget("ui.newsbar", {
    options: {
        ajaxUrl: "",
        news: [],
        newsCount: 4,
        slideDelay: 8000
    },

    _divBg: null,
    _divList: null,
    _divDetail: null,
    _txtDate: null,
    _txtTitle: null,
    _txtText: null,
    _currNewsIdx: 0,
    _slideTimeoutId: 0,

    _create: function() {
        this.element.empty();
        this._getNewsAjax();
    },

    _destroy: function() {
        $.Widget.prototype.destroy.apply(this, arguments);
    },

    _setOption: function(key, value) {
        var i;

        $.Widget.prototype._setOption.apply(this, arguments);
        if (key == "news")
        {
            for (i = 0; i < this.options.news.length; i++)
            {
                this.options.news[i].dt_ref =
                    this._parseDate(this.options.news[i].dt_ref);
            }
        }
    },

    _getNewsAjax: function() {
        var self = this;
        if (this.options.ajaxUrl.length == 0)
            return;
        $.ajax({
            url: self.options.ajaxUrl,
            type: "GET",
            dataType: "json",
            data: {
                lim: self.options.newsCount,
                nfd: 1
            },
            success: function(data, textStatus, req) {
                var res = new volley.api.Response(data);
                res.handle({
                    error: function(err) {
                    },
                    success: function(result) {
                        self._setOption("news", result.data);
                        self._createDivBg();
                        self._createDivList();
                        self._createDivDetail();
                        if (self.options.news.length > 0)
                        {
                            self.selectNews(0);
                            self._execSlide(true);
                        }
                    }
                });
            }
        });
    },

    _createDivBg: function() {
        this._divBg = $('<div id="img_news"></div>').appendTo(this.element);
    },

    _createDivList: function() {
        var ctnr, i, nw, dt;
        var self = this;

        //Due div per sfondo e titolo
        $('<div id="el_news"></div>').appendTo(this.element);
        $('<div id="newstit">news</div>').appendTo(this.element);
        //Array con un div per ogni notizia
        this._divList = new Array(this.options.newsCount);
        for (i = 0; i < this.options.news.length; i++)
        {
            if (i >= this.options.newsCount)
                break;
            nw = this.options.news[i];
            ctnr = $("<div></div>");
            ctnr.attr("id", "news_" + (i + 1));
            ctnr.addClass("news");
            ctnr.append("<strong>" + this._formatDate(nw.dt_ref, false)
                + "</strong>");
            ctnr.append("<br />");
            ctnr.append("<span>" + nw.title + "</span>");
            ctnr.click(function() {
                var idx = /[0-9]*$/.exec($(this).attr("id"));
                self._suspendSlide();
                self.selectNews(idx - 1);
            });
            this._divList[i] = ctnr;
            ctnr.appendTo(this.element);
        }
    },

    _createDivDetail: function() {
        this._divDetail = $('<div></div>').appendTo(this.element);
        this._divDetail.css("position", "absolute")
            .css("width", "580px")
            .css("height", "65px")
            .css("bottom", "0")
            .css("left", "0")
            .css("background", "#000000")
            .css("opacity", "0.8") /* Standard CSS */
            .css("filter", "alpha(opacity=80)") /* IE */
            .css("-moz-opacity", "0.8") /* Mozilla */
            .css("-khtml-opacity", "0.8"); /* Safari */
        this._txtDate = $('<div></div>').appendTo(this.element);
        this._txtDate.css("position", "absolute")
            .css("width", "440px")
            .css("height", "15px")
            .css("bottom", "45px")
            .css("left", "10px")
            .css("font-family", "Verdana, Geneva, sans-serif")
            .css("font-size", "10px")
            .css("line-height", "15px")
            .css("color", "#ffffff")
            .css("overflow", "hidden");
        this._txtTitle = $('<div id="abstit"></div>').appendTo(this.element);
        this._txtText = $('<div id="abstext"></div>').appendTo(this.element);
    },

    selectNews: function(idx) {
        var nw = this.options.news[idx];
        var btm = 45;
        var i, a, lnk;
        var self = this;

        this._currNewsIdx = idx;
        //Sfondo
        this._divBg.fadeOut("slow", function() {
            if (nw.bg_path.length > 0)
                self._divBg.css("background", "url(" + nw.bg_path + ") no-repeat");
            else
                self._divBg.css("background-image", "none");
            self._divBg.fadeIn("slow");
        //Rimuove i links della notizia
        self.element.find(".abslink").remove();
        //Inserisce data, titolo e inizio del testo
        self._txtDate.html(self._formatDate(nw.dt_ref, true));
        self._txtTitle.html(nw.title);
        self._txtText.html(nw.subtitle);
        //Aggiunge i links
        for (i = 0; (i < self.options.newsCount && i < nw.links.length); i++)
        {
            lnk = nw.links[i];
            a = $('<a></a>');
            a.attr("href", lnk.url);
            a.addClass("abslink");
            a.css("bottom", btm);
            a.css("background", "url(" + lnk.bg_path + ") no-repeat");
            a.mouseover(function() {
                $(this).css("background", 
                    $(this).css("background").replace(".png", "_hover.png"));
            });
            a.mouseout(function() {
                $(this).css("background",
                    $(this).css("background").replace("_hover.png", ".png"));
            });
            self.element.append(a);
            btm -= 15;
        }
        });
    },

    _nextNews: function () {
        if (this._currNewsIdx == (this.options.news.length - 1))
            this.selectNews(0);
        else
            this.selectNews(this._currNewsIdx + 1);
    },

    _execSlide: function (init) {
        var self = this;

        if (!init)
            this._nextNews();
        if (this.options.slideDelay > 0) {
            this._slideTimeoutId = setTimeout(function() { 
                    self._execSlide(false);
                },
                this.options.slideDelay);
        }
    },

    _suspendSlide: function () {
        clearTimeout(this._slideTimeoutId);
    },

    _formatDate: function(dt, addYear) {
        var m, s;

        s = dt.getDate();
        if (s < 10)
            s = "0" + s;
        m = dt.getMonth() + 1;
        if (m == 1)
            s = s + " GENNAIO";
        else if (m == 2)
            s = s + " FEBBRAIO";
        else if (m == 3)
            s = s + " MARZO";
        else if (m == 4)
            s = s + " APRILE";
        else if (m == 5)
            s = s + " MAGGIO";
        else if (m == 6)
            s = s + " GIUGNO";
        else if (m == 7)
            s = s + " LUGLIO";
        else if (m == 8)
            s = s + " AGOSTO";
        else if (m == 9)
            s = s + " SETTEMBRE";
        else if (m == 10)
            s = s + " OTTOBRE";
        else if (m == 11)
            s = s + " NOVEMBRE";
        else if (m == 12)
            s = s + " DICEMBRE";
        if (addYear)
            s = s + " " + dt.getFullYear();
        return s;
    },

    _parseDate: function(dt) {
        //Parsing data ISO8601 (copiata da erp)
        var retxt = "^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])"
        + "T"
        + "([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])";
        var re = new RegExp(retxt);
        var res = re.exec(dt);
        if (res == null)
            return null;
        else
            return new Date(res[1], res[2] - 1, res[3], res[4], res[5], res[6]);
    }

});

}) (jQuery);


