/* jFeed : jQuery feed parser plugin
 * Copyright (C) 2007 Jean-François Hovinne - http://www.hovinne.com/
 * Dual licensed under the MIT (MIT-license.txt)
 * and GPL (GPL-license.txt) licenses.
 */

jQuery.getFeed = function(options) {

    options = jQuery.extend({
    
        url: null,
        data: null,
        success: null,
		language: null
        
    }, options);

    if (options.url) 
	{
        $.ajax({
            type: "GET",
            url: options.url,
			data: "lang="+options.language,
            dataType: ($.browser.msie) ? "html" : "xml",
            success: function(xml) 
			{				
				xml = parseXml(xml);
                var feed = new JFeed(xml);
                if (jQuery.isFunction(options.success)) 
					options.success(feed);
            },
			error: function(request,error)
			{
				document.getElementById("feed").innerHTML = "<br><p>Dati attualmente non disponibili</p>";
			}			
        });
    }
};

//IE workaround to parseXML
function parseXml(xml)
{
	if (jQuery.browser.msie)
	{
		var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.loadXML(xml);
		xml = xmlDoc;
	}
	return xml;
};	

function JFeed(xml) {
	
    if(xml) this.parse(xml);
};

JFeed.prototype = {

    type: '',
    version: '',
    title: '',
    link: '',
    description: '',
	author: '',
    parse: function(xml) { 
		
        if (jQuery('channel', xml).length >=0) {
        
            this.type = 'rss';
            var feedClass = new JRss(xml);

        } else if(jQuery('feed', xml).length == 1) {
        
            this.type = 'atom';
            var feedClass = new JAtom(xml);
        }
        
        if(feedClass) jQuery.extend(this, feedClass);
    }
};

function JFeedItem() {};

JFeedItem.prototype = {

    title: '',
    link: '',
    description: '',
    updated: '',
    id: '',
	author: '',
	comments: '',
	commentsNumber: ''
};

function JAtom(xml) {
    this._parse(xml);
};

JAtom.prototype = {
    
    _parse: function(xml) {
    
        var channel = jQuery('feed', xml).eq(0);

        this.version = '1.0';
        this.title = jQuery(channel).find('title:first').text();
        this.link = jQuery(channel).find('link:first').attr('href');
        this.description = jQuery(channel).find('subtitle:first').text();
		this.author = jQuery(channel).find('author:first').text();		
		this.comments = jQuery(channel).find('comments:first').text();		
		this.commentsNumber = jQuery(channel).find('slash:comments').text();		
        this.language = jQuery(channel).attr('xml:lang');
        this.updated = jQuery(channel).find('updated:first').text();
        
        this.items = new Array();
        
        var feed = this;
        
        jQuery('entry', xml).each( function() {
        
            var item = new JFeedItem();            
            item.title = jQuery(this).find('title').eq(0).text();
            item.link = jQuery(this).find('link').eq(0).attr('href');
            item.description = jQuery(this).find('content').eq(0).text();
			item.author = jQuery(this).find('author').eq(0).text();
			item.comments = jQuery(this).find('comments').eq(0).text();
			item.commentsNumber = jQuery(this).find('slash:comments').eq(0).text();
            item.updated = jQuery(this).find('updated').eq(0).text();
            item.id = jQuery(this).find('id').eq(0).text();            
            feed.items.push(item);
        });
    }
};

function JRss(xml) {
    this._parse(xml);
};

JRss.prototype  = {
    
    _parse: function(xml) {
    
        if (jQuery('rss', xml).length == 0) this.version = '1.0';
        else this.version = jQuery('rss', xml).eq(0).attr('version');

        var channel = jQuery('channel', xml).eq(0);		
        this.title = jQuery(channel).find('title:first').text();
        this.link = jQuery(channel).find('link:first').text();
        this.description = jQuery(channel).find('description:first').text();
		this.author = jQuery(channel).find('author:first').text();		
		this.comments = jQuery(channel).find('comments:first').text();		
		this.commentsNumber = jQuery(channel).find('slash\\:comments:first').text();		
        this.language = jQuery(channel).find('language:first').text();
        this.updated = jQuery(channel).find('lastBuildDate:first').text();
    
        this.items = new Array();
        
        var feed = this;
        
        jQuery('item', xml).each( function() {
        
            var item = new JFeedItem();
            
            item.title = jQuery(this).find('title').eq(0).text();
            item.link = jQuery(this).find('link').eq(0).text();
            item.description = jQuery(this).find('description').eq(0).text();
			item.author = jQuery(this).find('author').eq(0).text();
			item.comments = jQuery(this).find('comments').eq(0).text();
			item.commentsNumber = jQuery(this).find('slash\\:comments').eq(0).text();
            item.updated = jQuery(this).find('pubDate').eq(0).text();
            item.id = jQuery(this).find('guid').eq(0).text();
            
            feed.items.push(item);
        });
    }
};

