﻿Class.create("RSS", {
    defaultOptions: {
        url: null,
        xsl: null,
        useProxy: false,
        proxyPath: "/Proxy.ashx",
        formatPath: "/Format.ashx",
        loadingImage: "/loading.gif",
        onError: function(msg)
        {
            if (console)
            {
                console.log(msg);
            }
        }
    },
    initialize: function(element, options)
    {
        this.options = Object.extend(Object.extend({ }, this.defaultOptions), options || { });
        this.currentRequest = null;
        var ref = this;
        Event.observe(window, "load", function(event)
        {
            ref.element = $(element);
            ref.fetchContent();
        });
    },
    fetchContent: function()
    {
        var ref = this;
        //this.clearErrors();
 		if (!this.options.url) { return; }
        this.showLoading();
        var requestUrl = this.options.url;
        if (this.options.useProxy)
        {
            requestUrl = this.options.proxyPath + "?url=" + encodeURIComponent(this.options.url);
        }        
        //console.log(requestUrl);
        // If there is already an Ajax request in process, abort it.
        if (this.currentRequest != null)
        {
            this.currentRequest.transport.abort();
        }
        
        this.currentRequest = new Ajax.Request(requestUrl,
        {
            method: 'POST',
            onSuccess: function(request)
            {
                ref.formatContent(request.responseText);
                //ref.currentRequest = null;
            },
            onException: function(request, error)
            {
                ref.logError("Request Error: " + request.errorCode);
            },
            onFailure: function(request)
            {
                ref.logError("Request Error: " + request.status);
            }
         }); 
    },
    formatContent: function(content)
    {
        var ref = this;
        if (this.options.xsl != null)
        {
            var requestUrl = this.options.formatPath;
            var params = "xml=" + encodeURIComponent(content) + "&xsl=" + this.options.xsl;// + "&args=container:" + this.element.identify() + ",moduleid:" + this.options.id;
            this.currentRequest = new Ajax.Request(requestUrl,
            {
                method: 'POST',
                parameters: params,
                onSuccess: function(request)
                {
                    ref.element.update(request.responseText);
                    //ref.currentRequest = null;
                },
                onException: function(request, error)
                {
                    ref.logError("Format Error: " + error);
                },
                onFailure: function(request)
                {
                    ref.logError("Format Error: " + request.errorCode);
                }
            });     
        }
        else
        {
            this.element.update(content);
        }

        this.loaded = true;
    },
    showLoading: function()
    {
        this.element.update("<img src='" + this.options.loadingImage + "' border='0' alt='Loading' title='Loading' />");
    },
    logError: function(msg)
    {
        this.options.onError(msg);
    }
});