﻿var page_size = 5;
var _source = "";
var configs = new Array();
var datas = new Array();
(function($) {
    $.fn.GetRSSTicker = function(options) {
        var defaults = {
            id: null,
            url: null,
            take: null,
            skip: null
        };
        var options = $.extend({}, defaults, options);
        var html = "";
        return this.each(function() {
            var $this = $(this);
            $this.parent().children("#LoadingLayer").removeClass("noDisplay");
            var data = getDataById(options.id);
            if (data == "") {
                $.get(options.url, function(input) {
                    try {
                        data = $.xml2json(input);
                        html = renderHtml(data, options);
                    } catch (ex) {
                        html = "<div class='error'>Error:" + ex + "</div>";
                    }
                    $this.parent().children("#LoadingLayer").addClass("noDisplay");
                    $this.empty();
                    $this.append(html);
                });
            } else {
                html = renderHtml(data, options);
                $this.parent().children("#LoadingLayer").addClass("noDisplay");
                $this.empty();
                $this.append(html);
            }
        });
    }
})(jQuery);

function renderHtml(data, options) {
    html = "";
    try {
        $.each(data.channel.item, function (index, item) {
            if (index >= options.skip && index < (options.skip + options.take)) {
                var title = item.title;
                var description = item.description;
                var link = options.tracking == null ? item.link : options.tracking + encodeURIComponent(item.link) + "&lnkname=" + options.trackingN;
                var date = item.pubDate;
                var target = "";
                if (link.indexOf(window.location.hostname.replace("www.", "")) == -1) {
                    target = " target='_blank'";
                }
                var descIndex = options.id + "_" + index;
                html += "<div class='item index" + index + "'>";
                html += "<span class='date'>" + getTimeFromDate(date) + "</span>";
                html += "<span class='title'><a id='link" + index + "' href=\"javascript:openDetail('" + descIndex + "');\" title='" + title + "'>" + cut(title, 32, '...') + "<a/></span>";
                html += "<div id='" + descIndex + "' class='description noDisplay'>" + cut(removeHTML(description), 100, '...') + " <a class='link detailLink' href='" + link + "'" + target + ">mehr...</a></div>";
                html += "</div>";
            }
        });
    } catch (ex) {
        html = "<div class='error'>Error:" + ex + "</div>";
    }
    return html;
}

/**
* Callback function that displays the content.
* Gets called every time the user clicks on a pagination link.
* @param {int}page_index New Page index
* @param {jQuery} jq the container with the pagination links as a jQuery object
*/
function pageselectCallback(page_index, pagination_container) {
    var conf = getConfigById($(pagination_container).parent().attr('id'));
    var options = { id: conf.id, url: conf.url, skip: (page_index * conf.take), take: conf.take, tracking: conf.tracking, trackingN: conf.trackingN };
    $(pagination_container).parent().children("#tickerContent").GetRSSTicker(options);
    return false;
}
function getConfigById(stringId) {
    for (i = 0; i < configs.length; i++) {
        if (configs[i].id == stringId)
            return configs[i];
    }
}
function getDataById(stringId) {
    for (i = 0; i < datas.length; i++) {
        if (datas[i].id == stringId)
            return datas[i];
    }
    return "";
}
function initTicker(stringId, source, pagesize, trackingLink, trackingName) {
    var count = 0;
    _source = "/scripts/ContentProxy.aspx?url=" + source;
    var conf = {
        id: stringId,
        url: _source,
        take: pagesize,
        tracking: trackingLink,
        trackingN: trackingName
    };
    configs.push(conf);
    $("#" + stringId).append('<div id="LoadingLayer" class="loadingLayer"><div id="LoadingLayerBg" class="loadingLayer layerBg"></div><div id="LoadingLayerImg" class="loadingLayer layerImg"></div></div><div id="tickerContent" class="content"></div><div id="tickerPagerBottom" class="paging"></div>');
    $.ajax({
        url: _source,
        type: 'get',
        dataType: 'xml',
        async: false,
        success: function (data) {
            $.each(data.firstChild.children[0].children, function (i, item) {
                if (item.localName == 'item') {
                    count++;
                };
            });
            //count = data.firstChild.children[0].childElementCount;
            createRssTicker("#" + conf.id, _source, count, conf.take, conf.tracking, conf.trackingN);
        }
    });
}

//init function to display the pagination
function createRssTicker(stringId, source, count, pagesize) {
    var num_entries = Math.floor((count / pagesize));
    // Create pagination element
    $(stringId + " #tickerPagerBottom").pagination(num_entries, {
        num_edge_entries: 1,
        num_display_entries: count,
        callback: pageselectCallback,
        items_per_page: 1,
        prev_text: '&lt;',
        next_text: '&gt;',
        current_page: 0
    });
}

function openDetail(itemId) {
    if ($('#' + itemId).hasClass('itemIsOpen') != true) {
        $('.itemIsOpen').slideUp('fast');
        $('.itemIsOpen').removeClass('itemIsOpen');
        $('#' + itemId).addClass('itemIsOpen');
    }
    $('#' + itemId).slideToggle('fast');
}
