/**
 *  Javascript file that defines the customized feed items
 * 
 *  @author luisat
 *  @requires jQuery 1.2.3
 *  @requires string-utils.js
 *  @requires array-utils.js
 *  @requires utils.js 
 */

if(!isLoggingEnabled) var isLoggingEnabled = false;
if(!citrix) var citrix = {};
if(!citrix.ws) citrix.ws = {};
if(!citrix.ws.isv) citrix.ws.isv = {};
if(ISV == null) var ISV = citrix.ws.isv;
if(ISV.log == null && isLoggingEnabled) ISV.log = log4javascript.getDefaultLogger();



/**
 * Parent feed item object which individual feed objects like blogs feed, ctv feed extend
 */
ISV.FeedItem = function(initParam) {	
	
	if(!initParam) {
		throw {
			name: "InitializeException",
			message: "Please provide all parameters when constructing a feed item"
		}
	}
	
	
	// private member variables
	var a = initParam.date;
	var t = /^([^:]+):(.*)$/.exec(initParam.title)[2];
	var d = initParam.description;		
	var s = initParam.source;		
	var c = initParam.category;
	var l = initParam.link;
	var i = initParam.icon;
	var n = initParam.displayName;
	
	return {		
		getTitle: function() {
			return t;
		},
		getDescription: function() {			
			var body =  d;
		
			// take out any HTML tags 
			body = body.replace(/<[^>]*>/g, StringUtils.EMPTY).replace(/<\/[^>]*>/g, StringUtils.EMPTY);
			
			// insert break long words				
			body = StringUtils.splitWords(body, 10);
			
			// truncate string at 20 words
			body = body.slice(0, 10 * 20) + " ...";
			return body;			
		},
		getSource: function() {
			return !StringUtils.isEmpty(s) ? s : "Unknown Source";
		},
		getCategories: function() {
			return !StringUtils.isEmpty(c) ? c : "No Categories";
		},
		getLink : function() {		
			return !StringUtils.isEmpty(l) ? l : "javaScript:void(0);";
		},
		getPubDate: function() {
			return a;
		},
		getIcon: function() {
			return i;
		},
		getDisplayName: function () {
			return n;
		},
		toString: function() {
			return "Feed Item: \n title: " + t + 
			                 " \n description: " + d + 
			                 " \n source: " + s;
		}		
	}
};



/**
 * Citrix TV custom feed item. 
 */
ISV.CTVFeedItem = function(initParam) {
	
	var parentObject = new ISV.FeedItem(initParam);		
	jQuery.extend(this, parentObject);	
	
	//Override
	this.getDescription = function () {		
		return initParam.description;
	}
	return this;
};
