HD.community.Media = function(blog) {
	this.data = blog;
};

(function() {
	var classes = HD.CSS_CLASSES;
	
	/**
	 * The collection of hooks
	 */
	HD.community.Media.hooks = {
		
		/**
		 * Standalone: 0..n<br />
		 * Use: Media Container<br />
		 * @memberOf HD.community.Blog
		 */
		MEDIA_ITEM : classes.MEDIA + '-item',
		
		/**
		 * Dependencies: 0..1: MEDIA_ITEM <br/>
		 * Use: Media your star rating container<br />
		 * @memberOf HD.community.Media
		 */
		MEDIA_RATING_MY : classes.MEDIA + '-rating-my',
		
		/**
		 * Dependencies: 0..1: MEDIA_ITEM <br/>
		 * Use: Media average star rating container<br />
		 * @memberOf HD.community.Media
		 */
		MEDIA_RATING_AVG : classes.MEDIA + '-rating-avg',
		
		/**
		 * Dependencies: 0..1: MEDIA_ITEM <br/>
		 * Use: Media star rating container<br />
		 * @memberOf HD.community.Media
		 */
		MEDIA_RATING_STAR : classes.MEDIA + '-rating-star',
		
		/**
		 * Dependencies: 0..1: MEDIA_ITEM <br/>
		 * Use: Media rating container<br />
		 * @memberOf HD.community.Media
		 */
		MEDIA_RATING_TEXT : classes.MEDIA + '-rating-text',
		
		/**
		 * Dependencies: 0..1: MEDIA_ITEM <br/>
		 * Use: Media rating container<br />
		 * @memberOf HD.community.Media
		 */
		MEDIA_CAPTION : classes.MEDIA + '-caption',
		
		/**
		 * Dependencies: 0..1: MEDIA_ITEM <br/>
		 * Use: Media votes container<br />
		 * @memberOf HD.community.Media
		 */
		MEDIA_VOTES : classes.MEDIA + '-votes',
		
		/**
		  * Dependencies: 0..1: MEDIA_ITEM <br/>
		 * Use: Media category container<br />
		 * @memberOf HD.community.Media
		 */
		MEDIA_CATEGORY : classes.MEDIA + '-category',
		
		/**
		 * Dependencies: 0..1: MEDIA_ITEM <br/>
		 * Use: Media tags container<br />
		 * @memberOf HD.community.Media
		 */
		MEDIA_TAG : classes.MEDIA + '-tag',
		
		/**
		 * Dependencies: 0..1: MEDIA_ITEM <br/>
		 * Use: Media more link container<br />
		 * @memberOf HD.community.Media
		 */
		MEDIA_MORE : classes.MEDIA + '-more',
		
		/**
		 * Dependencies: 0..1: MEDIA_ITEM <br/>
		 * Use: Media small thumbnail container<br />
		 * @memberOf HD.community.Media
		 */
		MEDIA_THUMB : classes.MEDIA + '-thumb',
		
		/**
		 * Dependencies: 0..1: MEDIA_ITEM <br/>
		 * Use: Media large thumbnail container<br />
		 * @memberOf HD.community.Media
		 */
		MEDIA_THUMB_LG : classes.MEDIA + '-thumb-lg',
		
		/**
		 * Dependencies: 0..1: MEDIA_ITEM <br/>
		 * Use: Media comments button container<br />
		 * @memberOf HD.community.Media
		 */
		MEDIA_COMMENTS_BTN : classes.MEDIA + '-comments-btn',
		
		/**
		 * Dependencies: 0..1: MEDIA_ITEM <br/>
		 * Use: Media title container<br />
		 * @memberOf HD.community.Media
		 */
		MEDIA_TITLE : classes.MEDIA + '-title',
		
		/**
		 * Dependencies: 0..1: MEDIA_ITEM <br/>
		 * Use: Media author container<br />
		 * @memberOf HD.community.Media
		 */
		MEDIA_AUTHOR : classes.MEDIA + '-author',
		
		/**
		 * Dependencies: 0..1: MEDIA_ITEM <br/>
		 * Use: Media next button container<br />
		 * @memberOf HD.community.Media
		 */
		MEDIA_NEXT : classes.MEDIA + '-next',
		
		/**
		 * Dependencies: 0..1: MEDIA_ITEM <br/>
		 * Use: Media Previous button container<br />
		 * @memberOf HD.community.Media
		 */
		MEDIA_PREVIOUS : classes.MEDIA + '-previous'
		
	};
})();

HD.community.Media.prototype = {
	getHtml : function(config) {
		// Load templates from the dynamic config.
		this.loadTemplates(HD.community.Media.templates, HD.community.Media.hooks, { config: config, templates: 'mediaTemplates', hooks: 'mediaHooks'});
		return this.processTemplate(this.config.templates.getHtml(), {
			config : config
		});
	},
	
    incrementViews : function() {
    	var url = comSvcBaseUrl + '/hd/hd_media/assets/incrementCount.jsp?viewUrl=' + this.data.viewUrl;
    	HD.util.Common.requestContent(url, function(response) {
    		// do nothing
    	});
    },
    
    updateRating : function(medium, ratingObj) {
    	ratingObj.config.numOfVotes = medium.numberOfVotes;
    	ratingObj.config.averageRating = medium.rating;
    	ratingObj.config.myRating = parseInt(medium.currentUserRating);
    	if(ratingObj.config.myRating != null && ratingObj.config.myRating > 0) {
    		ratingObj.config.isRated = true;
    	}
    	ratingObj.render();
    },
    
    updateRatingWidgets : function(medium) {
    	var ratings = this.ratings;
    	if(ratings != null) {
    		for(var i = 0, len = ratings.length; i < len; i++) {
    			var rating = ratings[i];
    			if(rating != null) {
    				this.updateRating(medium, rating);
    			}
    		}
    	}
    },
    
    generatePermalink : function(params) {
    	var data = this.data;
    	// get page's base URL
    	var baseUrl = window.location.href;
		params = params || {};
    	
    	// extract locale param
    	var localeParam = HD.util.Common.getRequestParam("locale");
    	if(HD.util.Common.hasValue(localeParam)) {
    		localeParam = "locale=" + localeParam + "&";
    	} else {
    		localeParam = "";
    	}
    	
    	// construct deep link URL parameters
    	var parameters = "?" + localeParam + "mediaId=" + data.mediaId + "&contentType=" + data.contentType;
		for (var param in params) {
			parameters += '&' + param + '=' + params[param];
		}
		parameters += "#loc=detail/" +  data.contentType + "/" + data.mediaId + "/1";
    	
    	// remove any existing URL parameters
    	var questionIndex = baseUrl.indexOf("?");
    	var poundIndex = baseUrl.indexOf("#");
    	
    	var index = -1;
    	if(questionIndex > -1) {
    		index = questionIndex;
    	} else if(poundIndex > -1) {
    		index = poundIndex;
    	}
    	
    	if(index > -1) {
    		baseUrl = baseUrl.substr(0, index);
    	}
    	
    	// construct deep link URL
    	var permalink = baseUrl + parameters;
    	
    	return permalink;
    }
};

HD.extend(HD.community.Media, [HD.util.Template]);

HD.register('hd_media', 'HD.community.Media', {version: "1.0", build: "1"});