var fullMonthNames = new Array("January", "February", "March", "April", "May", "June", "July", 
"August", "September", "October", "November",  "December");


_iFeedObjects = new Array();


function InternationalFeed(feedId, container, data, itemsPerPage) {

	this.feedId = feedId;
	this.container = container;
	this.data = data;
	this.itemsPerPage = itemsPerPage;
	this.pageNumber = 0;
	this.pageCount = 0;	
	this.feedEntries;
	
	this.containerId;
	this.articlesId;
	this.nextButtonId;
	this.prevButtonId
	
	this.init();
	
}

InternationalFeed.prototype.init = function(){

	_iFeedObjects[this.feedId] = this;

	var id = this.container.attr("id");
	this.containerId = id;
	this.articlesId = id + "-feedHolder";
	this.nextButtonId = id + "-next";
	this.prevButtonId = id + "-prev";

	this.container.empty();
	var feedDom = parseFeed(this.data);
	var entries = new Array();
	jQuery('entry', feedDom).each(function(){
		var entry = new Object();
		
		entry.title = jQuery(this).find('title').eq(0).text();
		entry.link = jQuery(this).find('link').attr('href');
		entry.description = jQuery(this).find('content').eq(0).text();
		entry.baseURL = jQuery(this).find('content').attr('xml:base');
		entry.updated = jQuery(this).find('updated').eq(0).text();
		entry.id = jQuery(this).find('id').eq(0).text();
		entry.author = jQuery(this).find('author').eq(0).text();
		
		entries.push(entry);
	});
	this.feedEntries = entries;

	this.pageCount = Math.ceil(this.feedEntries.length/this.itemsPerPage);
	jQuery(this.container).append('<ul id="' + this.articlesId +'" class="articles"></ul>');
	jQuery(this.container).append("<div class='int_nav_page'>" +
	"<a class='intNextEnabled' id='" + this.nextButtonId + "' href='#' onClick='_iFeedObjects[\"" + this.feedId + "\"].showNextPage()'>Next</a>" +
	"<a class='intPrevDisabled' id='" + this.prevButtonId + "' href='javascript:void(0)' onClick='_iFeedObjects[\"" + this.feedId + "\"].showPreviousPage()'>Previous</a>" +
	"<div class='clear'></div></div>");
}


InternationalFeed.prototype.showPage = function(){

	$( "#" + this.articlesId).empty();
	
	var start = this.itemsPerPage * (this.pageNumber - 1);
	var end = this.itemsPerPage * this.pageNumber;

	for(var d = start; d<this.feedEntries.length && d<end; d++){
		var e = '<li class="article">';
		var f = this.feedEntries[d];
		
		var description = f.description;
		if(f.baseURL) {
			
			var count=0;
			var prevDesc;;
			do {
			prevDesc = description;
			description = description.replace( 
			/(<\s*(img)\s+[^>]*(src)\s*=\s*[\"'])(?!http)(.+)([\"'])/gim, '$1' + f.baseURL + '$4$5' );			
			} while (description != prevDesc && count++ <20);
		}

		var urlPrefix = "";
		e += '<div class="title"><h4>';
		if(f.link.length>0){
			/* Removed as blog tilte link needs not to be clickable */
			/* var link = f.link;
			   e += '<a href="' + f.link + '">'+ f.title +"</a>"; */
			e += f.title;
		}else{
			e += f.title;
		}
		e+="</h4></div>";
		if(f.author) {
			e+='<div class="author">'+ f.author +"</div>";
		}
		e+='<div class="date">'+ formatISODate(f.updated) +"</div>";
		e+='<div class="description">'+ description +"</div>";
		if(f.image){
			e+='<div class="image"><img src="'+f.image+'"></div>'
		}
		e+="</li>";
		$( "#" + this.articlesId).append(e);
		
		/*
		if(f.baseURL) { //backup
			$( "#" + this.articlesId + " .description img").each(function(i) {
			  if ($(this).attr('src')) {
			    src = $(this).attr('src');
			    if( src.indexOf('http') == -1) {
				$(this).attr('src', f.baseURL + src);
			    }
			  }
			});
		}
		*/
		$("#" + this.articlesId + " .description a").attr("target", "_new");
	}
}

InternationalFeed.prototype.showPreviousPage = function(){

	if (this.pageNumber > 1){
		this.pageNumber--;
		this.showPage();
		$('#' + this.nextButtonId).removeClass('intNextDisabled');
		$('#' + this.nextButtonId).addClass('intNextEnabled');
		$('#' + this.nextButtonId).attr('href', '#');
	}
	if (this.pageNumber <= 1){
		$('#' + this.prevButtonId).removeClass('intPrevEnabled');
		$('#' + this.prevButtonId).addClass('intPrevDisabled');
		$('#' + this.prevButtonId).attr('href', 'javascript:void(0)');
	}

}

InternationalFeed.prototype.showNextPage = function(){

	if (this.pageNumber < this.pageCount){
		this.pageNumber++;
		this.showPage();
		if(this.pageNumber > 1) {
		$('#' + this.prevButtonId).removeClass('intPrevDisabled');
		$('#' + this.prevButtonId).addClass('intPrevEnabled');
		$('#' + this.prevButtonId).attr('href', '#');
		}
	}
	if (this.pageNumber >= this.pageCount){
		$('#' + this.nextButtonId).removeClass('intNextEnabled');
		$('#' + this.nextButtonId).addClass('intNextDisabled');
		$('#' + this.nextButtonId).attr('href', 'javascript:void(0)');
	}

}

function formatISODate(strISOtime) {

	var tmp = (strISOtime || "").replace(/-/g,"/").replace(/[TZ]/g," ");
	var timeOffset = new Date().getTimezoneOffset();
	
	if(strISOtime.indexOf('+') > -1) {
		tmp = (tmp.split('+'))[0];
	}
	if(strISOtime.indexOf('-') > -1) {
		tmp = (tmp.split('-'))[0];
	}
	var date = new Date(tmp);
	date = new Date(date.getTime() - date.getTimezoneOffset()*60);
	
	return fullMonthNames[date.getMonth()] + " " + date.getDate() + ", " + date.getFullYear();
}


function parseFeed(xml){

    if( window.ActiveXObject && window.GetObject ) {
        var dom = new ActiveXObject( 'Microsoft.XMLDOM' );
        dom.async="false";
        dom.loadXML( xml );
        return dom;
    }
    if( window.DOMParser ) {
        return new DOMParser().parseFromString( xml, 'text/xml' );
    }
       
    throw new Error( 'No XML parser available' );
}

