var POSTS_NO = 10;
var urlDescriptionHTML = '';
var urlTitleHTML = '';
var urlLinkHTML = '';

VIEWZI.view.processGoogleResult = function(evtId, evt) {
	if (evt[0].id != 'google') {return;}

	var data = evt[0].data;
	var googleContainer = document.getElementById("url_view_top_results");
	var urlDescriptionContainer = document.getElementById("url_view_description_text");

	var resultsHTML = '<h2>Top Search Results</h2><ol style="list-style-type:decimal-leading-zero;">';

	if(data.length === 0) {
		resultsHTML += 'No results.';
		urlDescriptionHTML = '';
	}
	else {
		urlDescriptionHTML =  data[0].summary;
		for (var i = 0; i < data.length; i++) {
			var nodeHtml = "<li><div class=\"url_view_ol_text\"><h3><a href=\"" + data[i].url + "\">";
			nodeHtml +=  data[i].title + "</a></h3>" + data[i].summary + "	</div></li>";

			resultsHTML += nodeHtml;
		}
	}
	urlDescriptionContainer.innerHTML = urlDescriptionHTML;
	googleContainer.innerHTML = resultsHTML + '</ol>';
};

VIEWZI.view.processDeliciousResult = function(evtId, evt) {
	if (evt[0].id != 'delicious') {return;}

	var data = evt[0].data;

	var bookmarkContainer = document.getElementById("url_view_bookmarks");
	var tagsContainer = document.getElementById("url_view_tags");

	var tags = [];
	var tagsHTML = "";
	var bookmarksHTML = "";

	if(data.length === 0) {
		bookmarksHTML += '<h2>Popular Bookmarked Pages</h2><span class="url_view_noresults">No bookmarked pages found.</span>';
		tagsHTML += '<h2>Related Tags</h2><span class="url_view_noresults">No tags found.</span>';
	}
	else {
		bookmarksHTML = '<h2>Popular Bookmarked Pages</h2><table border="0" width="">';
		tagsHTML = '<h2>Related Tags</h2><ul>';

		for (var i = 0; i < data.length; i++) {
			bookmarksHTML += "<tr><th scope=\"1\"><a href=\"" + data[i].url + "\">" + data[i].title + "</a></th><td>" + data[i].count + "</td></tr>";
			theseTags = data[i].metadata.tags;
			for (var j = 0; j < theseTags.length; j++) {
				if(tags.indexOf(theseTags[j].name) == -1) {
					tags.push(theseTags[j].name);
					tagsHTML += '<li><a href="' + theseTags[j].url + '">' + theseTags[j].name + '</a></li>';
				}
			}
		}
	}
	tagsContainer.innerHTML = tagsHTML + '</ul>';
	bookmarkContainer.innerHTML =  bookmarksHTML + '</table>';
};

VIEWZI.view.processTweetResult = function(evtId, evt) {
	if (evt[0].id != 'summize') {return;}

	var data = evt[0].data;

	var tweetContainer = document.getElementById("url_view_recently_heard");

	//tweetContainer.innerHTML += dumpObj(data[0], 'Tweet Evt', '&nbsp;', 0);
	var tweetsHTML = '';
	if(data.length === 0) {
		tweetsHTML = '<span class="url_view_noresults">Nobody is talking about this site right now.</span>';
	}
	else {
		tweetsHTML = '<ol>';
		for (var i = 0; i < data.length; i++) {
			tweetsHTML += "<li><div class=\"url_view_twitter_ico\"><a href=\"" + data[i].url + "\">";
			tweetsHTML += "<img src=\"" + data[i].metadata.user.profile_image_url + "\" alt=\"" + data[i].metadata.user.name + "\" /></a></div>";
			tweetsHTML += "<div class=\"url_view_twitter_msg\"><h3> " + data[i].summary + " </h3>Twittered by ";
			tweetsHTML += "<a href=\"" + data[i].metadata.user.profile_url + "\">" + data[i].metadata.user.name + "</a> on " + data[i].pubdate + "</div></li>";
		}
		tweetsHTML += '</ol>';
	}
	tweetContainer.innerHTML = '<h2>Recently Overheard</h2>' + tweetsHTML;
};

VIEWZI.view.processAlexaResult = function(evtId, evt) {
	if (evt[0].id != 'alexa') {return;}

	var data = evt[0].data;

	var alexaReachContainer = document.getElementById("url_view_reach");
	var alexaRankContainer = document.getElementById("url_view_rank");
	var alexaViewsContainer = document.getElementById("url_view_views");
	//alexaReachContainer.innerHTML += dumpObj(data[0], ' Evt', '&nbsp;', 0);

	var urlTitleContainer = document.getElementById('url_view_title');
	var urlLinkContainer = document.getElementById('url_view_link');

	urlTitleHTML = '<a href="http://' + data[0].title + '">' + data[0].title + '</a>';
	urlLinkHTML = '<a href="http://' + data[0].title + '" title="Go to this site"><img src="'+VIEWZI.CODEBASE+'img/go_to_site.png" width="220" height="59" alt="Go To Site"></a>';

	urlTitleContainer.innerHTML = urlTitleHTML;
	urlLinkContainer.innerHTML = urlLinkHTML;

	var reachNodeHTML = '<h2>Reach</h2>';
	var rankNodeHTML = '<h2>Traffic Rank</h2>';
	var viewsNodeHTML = '<h2>Page Views <span class=\"url_view_secondary_info\">(Per User)</span></h2>';

	if(data[0].rank === '') {
		urlLinkHTML = '';
		reachNodeHTML += '<table><tr><td><span class="url_view_noresults">No data.</span></td></tr></table>';
		rankNodeHTML += '<table><tr><td><span class="url_view_noresults">No data.</span></td></tr></table>';
		viewsNodeHTML += '<table><tr><td><span class="url_view_noresults">No data.</span></td></tr></table>';
	}
	else {
		reachNodeHTML += "<table><tr><th scope=\"1\">Yesterday</th><td>" + round(stringToNumber(data[0].metadata.reach['1d'].permillion.value) / 10000) + "%</td></tr>";
		reachNodeHTML += "<tr><th scope=\"1\">1 Week Average</th><td>" + round(stringToNumber(data[0].metadata.reach['1wk'].permillion.value) / 10000) + "%</td></tr>";
		reachNodeHTML += "<tr><th scope=\"1\">3 Month Average</th><td>" + round(stringToNumber(data[0].metadata.reach['3months'].permillion.value) / 10000) + "%</td></tr>";
		var reachDelta = data[0].metadata.reach['3months'].permillion.delta;
		var reachDeltaClass = 'url_view_trend_up';
		if(reachDelta[0] == '-') {
		 	reachDeltaClass = 'url_view_trend_down';
		}
		reachNodeHTML += "<tr><th scope=\"1\">3 Month Change</th><td class=\"" + reachDeltaClass + "\">" + reachDelta.substring(1) + "</td></tr></table>";


		rankNodeHTML += "<table><tr><th scope=\"1\">Yesterday</th><td>" + zeroIfEmpty(data[0].metadata.traffic_rank['1d'].value) + "</td></tr>";
		rankNodeHTML += "<tr><th scope=\"1\">1 Week Average</th><td>" + zeroIfEmpty(data[0].metadata.traffic_rank['1wk'].value)+ "</td></tr>";
		rankNodeHTML += "<tr><th scope=\"1\">3 Month Average</th><td>" + zeroIfEmpty(data[0].metadata.traffic_rank['3months'].value) + "</td></tr>";
		var rankDelta = data[0].metadata.traffic_rank['3months'].delta;
		var rankDeltaClass = 'url_view_trend_up';
		if(rankDelta[0] == '-') {
		 	rankDeltaClass = 'url_view_trend_down';
		}
		rankNodeHTML += "<tr><th scope=\"1\">3 Month Change</th><td class=\"" + rankDeltaClass + "\">" + rankDelta.substring(1) + "</td></tr></table>";


		viewsNodeHTML += "<table><tr><th scope=\"1\">Yesterday</th><td>" + zeroIfEmpty(data[0].metadata.page_views['1d'].peruser.value) + "</td></tr>";
		viewsNodeHTML += "<tr><th scope=\"1\">1 Week Average</th><td>" + zeroIfEmpty(data[0].metadata.page_views['1wk'].peruser.value) + "</td></tr>";
		viewsNodeHTML += "<tr><th scope=\"1\">3 Month Average</th><td>" + zeroIfEmpty(data[0].metadata.page_views['3months'].peruser.value) + "</td></tr>";
		var viewsDelta = data[0].metadata.page_views['3months'].peruser.delta;
		var viewsDeltaClass = 'url_view_trend_up';
		if(viewsDelta[0] == '-') {
		 	viewsDeltaClass = 'url_view_trend_down';
		}
		viewsNodeHTML += "<tr><th scope=\"1\">3 Month Change</th><td class=\"" + viewsDeltaClass + "\">" + viewsDelta.substring(1) + "</td></tr></table>";
	}

	alexaReachContainer.innerHTML = reachNodeHTML;
	alexaRankContainer.innerHTML = rankNodeHTML;
	alexaViewsContainer.innerHTML = viewsNodeHTML;

	VIEWZI.screenshot.addScreen('url_view_screenshot', data[0].title, 300, 400, 'large', true);
	VIEWZI.screenshot.flushScreens();
};

var MAX_DUMP_DEPTH = 10;

	function dumpObj(obj, name, indent, depth) {
		if (depth > MAX_DUMP_DEPTH) {
			return indent + name + ": [Maximum Depth Reached]<br>";
		}
		if (typeof obj == "object") {
			var child = null;
			var output = indent + name + "<br>";
			indent += "&nbsp;&nbsp;&nbsp;";
			for (var item in obj)
			{
				try {
					child = obj[item];
				} catch (e) {
					child = "[Unable to Evaluate]";
				}
				if (typeof child == "object") {
					output += dumpObj(child, item, indent, depth + 1);
				} else {
					output += indent + item + ": " + child + "<br>";
				}
			}
			return output;
		} else {
			return obj;
		}
	}

VIEWZI.view.pullResults = function() {
	var searchterm = normalizeQuery(VIEWZI.searchterm);
	VIEWZI.dataresult.subscribe(VIEWZI.view.processGoogleResult);
	VIEWZI.datapull.getData(searchterm, "goog", "", 0, POSTS_NO, "google");

	VIEWZI.dataresult.subscribe(VIEWZI.view.processTweetResult);
	VIEWZI.datapull.getData(searchterm, "summize", "", 0, POSTS_NO, "summize");

	VIEWZI.dataresult.subscribe(VIEWZI.view.processAlexaResult);
	VIEWZI.datapull.getData(searchterm, "alexa", "", 0, POSTS_NO, "alexa");

	VIEWZI.dataresult.subscribe(VIEWZI.view.processDeliciousResult);
	VIEWZI.datapull.getData(searchterm, "delicious", "", 0, POSTS_NO, "delicious");
};

function normalizeQuery(query) {
	var new_query = query.replace(/ /g, '').replace(/[^a-zA-Z0-9\.\-]/g, '');

	if (!new_query.match('.'))
	{
		new_query += '.com';
	}

	return new_query;
}

function stringToNumber(str) {
	var result = parseFloat(str.replace(',', ''));
	if(isNaN(result)) {result = 0;}
	return result;
}

function round(val) {
	return Math.round(val*1000)/1000;
}

function zeroIfEmpty(val) {
	if(val === null || val === '') {
		return 0;
	}
	return val;
}

VIEWZI.view.pageLoad = function()
{
	VIEWZI.view.pullResults();
};