//-------------------------------
// Class
//-------------------------------

function NewsView() {

	var _self = this;
	

	//-------------------------------
	// Constants
	//-------------------------------
	
	NewsView.prototype.CLEAR_SEARCH = "clear_search";

	var MONTHS = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];

	//-------------------------------
	// Properties
	//-------------------------------
	
	var _searchActive = false;
	
	//-------------------------------
	// Constructor
	//-------------------------------
	
	$j(function() {
		$j("a.clear-search, label.clear-search").bind("click", onClearSearchClick);
	});
	
	//-------------------------------
	// Public Methods
	//-------------------------------
	
	_self.deploy = function(data, index) {
		var items_per_page = 15;
        var max_elem = Math.min((index + 1) * items_per_page, data.length);
        
         $j("#results").empty();
        
        for ( var i = index * items_per_page; i < max_elem; i++ ) {
        	var content;
        	
        	switch(data[i].type) {
        		case "news" :
        			content = view.news(data[i]);
        			break;
        		case "twitter" :
        			content = view.twitter(data[i]);
        			break;
        		case "blogs" :
        			content = view.blogs(data[i]);
        			break;
        		default :
        			content = view.news(data[i]);
        			break;
        	}
        	
			$j("#results").append(content);
        }
        
        $j("a.share").click(function(event) {
        	Meebo('share', { url: event.target });
        	return false;
        });
	}
	
	_self.noresult = function(category) {
		$j("#results").html("<li class='noresults'>No articles under <small><em><strong>" + category + "</strong></em></small> found.</li>");
		
		$j("#pagination").hide();
	}
	
	_self.search = function() {
		
		function displayResult(total, terms, category) {
			$j("#pagination").show();
			
			var content 	= "<h3>Search Results</h3>";
			content			+= "Showing <small><strong>" + total + " </strong>" + ((total > 1) ? "matches" : "match") + " for <em><strong>" + terms + "</strong></em></small>&nbsp;";
			content			+= "<small>in <strong><em>" + category + "</em></strong></small>&nbsp;";
			content			+= "<small class='alt'>or <a href='#' class='clear-search'>clear search</a></small>";
			
			$j("h2#title-search").html(content).fadeIn();
			
			_searchActive = true;
			
			$j("a.clear-search, label.clear-search").bind("click", onClearSearchClick);
		}
		
		function hideResult(total, terms, category) {
			$j("h2#title-search").hide();
			var content 	= "<h3>Search Results</h3>";
			content			+= "Showing <small><strong>0</strong> matches for <em><strong>" + terms + "</strong></em></small>&nbsp;";
			content			+= "<small>in <strong><em>" + category + "</em></strong></small>&nbsp;";
			content			+= "<small class='alt'>or <a href='#' class='clear-search'>clear search</a></small>";
			
			$j("h2#title-search").html(content).fadeIn();
			$j("#results").empty();
			$j("#pagination").hide();
			
			_searchActive = true;
			
			$j("a.clear-search, label.clear-search").bind("click", onClearSearchClick);
		}
		
		function hideSearch() {
			$j("h2#title-search").hide();
			$j("#pagination").show();
			_searchActive = false;
		}
		
		return { result: displayResult, noresult: hideResult, hide: hideSearch }
	}();
	
	//-------------------------------
	// Private Methods
	//-------------------------------
	
	var view = function() {
	
		var htmlExp = /<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)\/?>/gi;
        var urlExp = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
		
		function news(data) {
			var description = $j(data.content).find("description").text();
			var date = new Date($j(data.content).find("pubDate").text());
			
			var content 	= "<li><ul class='content'>";
			content			+= "<li class='col l'>";
			content			+= "<em>From <a href='" + data.site + "'>" + data.source + "</a> /<br/>"
			content			+= MONTHS[date.getMonth()] + " " + date.getDate() + " " + date.getFullYear();
			content			+= "</em></li>";
			content			+= "<li class='col r'>";
			content			+= "<h3><a href='" + $j(data.content).find("link").text() + "'>" + $j(data.content).find("title").text() + "</a></h3>";
			content			+= "<p>" + description.replace(htmlExp, "").substr(0, 400) + ((description.length > 400) ? "..." : "") + "</p>";
			content			+= "<a href='" + $j(data.content).find("link").text() + "'>Continue Reading</a>";
			content			+= "</li>";
			content			+= "<li class='col r alt'>";
			content			+= "<a href='" + $j(data.content).find("link").text() + "' class='share'>Share</a>";
			content			+= "</li><div class='clear'></div></ul></li>";
			
			return content;
		}
		
		function twitter(data) {
			var description = $j(data.content).find("description").text();
			var date = new Date($j(data.content).find("pubDate").text());
			
			var content 	= "<li><ul class='content'>";
			content			+= "<li class='col l'>";
			content			+= "<em>From <a href='" + data.site + "'>" + data.source + "</a> /<br/>"
			content			+= MONTHS[date.getMonth()] + " " + date.getDate() + " " + date.getFullYear();
			content			+= "</em></li>";
			content			+= "<li class='col r'>";
			content			+= "<h3>@pdxtrailblazers:</h3>";
			content			+= "<p>" + description.substr(17, description.length).replace(urlExp, "<a href='$1' target='_blank'>$1</a>") + "</p>";
			content			+= "</li>";
			content			+= "<li class='col r alt'>";
			content			+= "<a href='" + $j(data.content).find("link").text() + "' class='share'>Share</a>";
			content			+= "</li><div class='clear'></div></ul></li>";
			return content;
			
			return content;
		}
		
		function blogs(data) {
			var description = $j(data.content).find("description").text();
			var date = new Date($j(data.content).find("pubDate").text());
			
			var content 	= "<li><ul class='content'>";
			content			+= "<li class='col l'>";
			content			+= "<img src='" + data.image + "'/><br/></li>";
			content			+= "<li class='col r'>";
			content			+= "<em>From <a href='" + data.site + "'>" + data.source + "</a> / Last Updated on " + MONTHS[date.getMonth()] + " " + date.getDate() + " " + date.getFullYear() + "</em>";
			content			+= "<h3><a href='" + $j(data.content).find("link").text() + "'>" + $j(data.content).find("title").text() + "</a></h3>";
			content			+= "<p>" + description.replace(htmlExp, "").replace(urlExp, "<a href='$1' target='_blank'>$1</a>").substr(0, 400) + ((description.length > 400) ? "..." : "") + "</p>";
			content			+= "<a href='" + $j(data.content).find("link").text() + "'>Continue Reading</a>";
			content			+= "</li>";
			content			+= "<li class='col r alt'>";
			content			+= "<a href='" + $j(data.content).find("link").text() + "' class='share'>Share</a>";
			content			+= "</li><div class='clear'></div></ul></li>";
			return content;
		}
		
		return { news: news, twitter: twitter, blogs: blogs }
		
	}();
		
	//-------------------------------
	// Listeners
	//-------------------------------
	
	function onClearSearchClick() {
		if(_searchActive) $j(_self).trigger(_self.CLEAR_SEARCH);
		$j("input#search").val("").keyup();
		return false;
	}
	
	//-------------------------------
	// Setters/Getters
	//-------------------------------

}
