/**
 * Global Javascript functions for the WTT site
 */
jQuery.fn.fadeToggle = function(speed, easing, callback) { 
   this.animate({opacity: 'toggle'}, speed, easing, callback); 
};

/**
 * Revert a trend back to a previous version number. 
 * Only will work if the user has permissions to do so
 * @param {Object} trend_id
 * @param {Object} version_id
 */
function revertTrend(trend_id, version_id) {
	
	jQuery.get("/api/v2/trend/revert", {"trend_id": trend_id, "blurb_id": version_id}, 
	function(data) {
  		if(data == false)
		{
			alert("Revert failed.");
		}
		else
		{
			jQuery("#blurbcontent").fadeOut();
			jQuery("#blurbcontent").queue(function()
			{
				jQuery(this).html(data);
				jQuery("#blurbta").val(data);
				jQuery(this).dequeue();
			});
			jQuery("#noblurb").hide();
			jQuery("#blurbcontent").fadeIn();
			// replace blurb text on screen if it exists
			
			setActiveVersion(version_id);
		}
	});
}

function setActiveVersion(version_id)
{
	var old_version = null;
	jQuery(".history_bullet > .revertButton").each(function (i) {
	        if (this.style.display == "none") {
	          old_version = this;
	        }});
	jQuery("#history_version_" + version_id + " > .revertButton").slideUp("fast");
	jQuery(old_version).slideDown("fast");
	jQuery(".history_bullet").css("border-left","2px solid #FFFFFF");
	jQuery("#history_version_" + version_id).css("border-left","2px solid #AAAAFF");
}

/*
 * Global function for updating a trend asynchronously
 */
var WhatTheTrend = new function() {

	var id;
	var trendname;
	var trendnameencoded;
	var locked;
	var user_id;
	var user_screen_name;
	var search;
	
	//Public methods
	this.init=function(id, trend_name, trend_name_encoded, locked, search, user_id, user_screen_name) {
		jQuery('.date').timeago();
		this.id=id;
		this.trendname=trend_name;
		this.trendnameencoded=trend_name_encoded;
		this.locked=locked;
		this.user_id=user_id;
		this.user_screen_name=user_screen_name;
		this.search = search;
	}
	this.handleTwitter=function(data) {
		var parsed=eval(data);
		renderTwitter(parsed.results);
	}
	this.handleFlickr=function(data) {
		var parsed=eval(data);
		renderFlickr(parsed.items);
	}
	this.handleGoogle=function(data) {
		var parsed=eval(data);
		renderGoogle(parsed.responseData.results);
	}

	this.editBlurb=function() {
		jQuery('#blurb').hide();
		jQuery('#related').hide();
		jQuery('#blurbform').show();
		jQuery('#edithints').show("slid");
		jQuery('#blurbta').height(jQuery('#blurb').height());
		this.autoresize(jQuery('#blurbta'));
	}
	this.saveBlurb=function() {
		var yourBlurb=jQuery('#blurbta').val();
		var user_screen_name_originator=jQuery('input[name=user_screen_name_originator]').val();
		var related_url=jQuery('input[name=related_url]').val();
		var categoryControl = jQuery("input[name=category]:checked");
		var yourCategory = -1;
		var your_user_screen_name = this.user_screen_name;
		if(categoryControl != null) {
			yourCategory = categoryControl.val();
		}
		//if(yourBlurb == null || yourBlurb == "")
		//{
		//	alert("You must add a definition");
		//	return;
		//}

		jQuery('#blurbta').attr("disabled", "disabled");
		jQuery('#okbtn').attr("disabled", "disabled");
		jQuery('#okbtn').text('Saving ...');
		jQuery('#cancelbtn').attr("disabled", "disabled");
		jQuery('.empty').removeClass('empty');
		var tweet='Q. Why is '+this.trendname+' trending? A. http://wttrend.com/'+this.id+' '+yourBlurb;
		jQuery('.rt a').attr('href','http://twitter.com/home?status='+encodeURIComponent(tweet))
		jQuery.post('/api/v2/trend/update',{blurb:yourBlurb,'trend_id':this.id,from:'web',trend:this.trendname,
					'category_id':yourCategory,user_id:this.user_id,'user_screen_name':your_user_screen_name,
					'user_screen_name_originator':user_screen_name_originator,'related_url':related_url},function(html){
			jQuery('#okbtn').text('OK');
			jQuery('#blurb').show();
			jQuery('#related').show();
			jQuery('#okbtn').removeAttr("disabled")
			jQuery('#cancelbtn').removeAttr("disabled")
			jQuery('#blurbta').removeAttr("disabled")
			jQuery('#blurbcontent').html(html);
			jQuery('#blurb_created').html("");
			if (yourCategory > 0) {
				cat_name = catIdToName(yourCategory);
				jQuery('#category_name').html(cat_name);
			}
			else
			{
				jQuery('#category_name').html('Unspecified');
			}
			
			if (user_screen_name_originator != '') {
				jQuery('#user_screen_name_originator').html("| Trend originated by <a href='http://www.twitter.com/" + user_screen_name_originator + "' target='_new'>@" + user_screen_name_originator + "</a>");
			}
			else
			{
				jQuery('#user_screen_name_originator').html('');
			}
			
			if (related_url != '') {
				jQuery('#related_url').html('<a href="' + related_url + '" target="_new" rel="nofollow">' + related_url + '</a>');
			}
			else
			{
				jQuery('#related_url').html('');
			}			
			
			jQuery('#blurbform').hide();
			jQuery('#noblurb').hide();
			jQuery('#edithints').hide("slide");
			if(your_user_screen_name != undefined && your_user_screen_name != "")
			{
				jQuery("#editor_screen_name").html(" by <a href='http://www.twitter.com/" + your_user_screen_name + " target='_new'>@" + your_user_screen_name + "</a>")
			}
			if (typeof(TrendHistory) != 'undefined') {
				TrendHistory.loadHistory(WhatTheTrend.trendnameencoded);
			}
		},'html');
	}
	this.cancelBlurb=function() {
		jQuery('#blurb').show();
		jQuery('#related').show();
		jQuery('#blurbform').hide();
		jQuery('#edithints').hide("slide");
	}
	
	this.autoresize=function(text,maxHeight) {
		var adjustedHeight = text.clientHeight;
		if ( !maxHeight || maxHeight > adjustedHeight )
		{
		adjustedHeight = Math.max(text.scrollHeight, adjustedHeight);
		if ( maxHeight )
			adjustedHeight = Math.min(maxHeight, adjustedHeight);
		if ( adjustedHeight > text.clientHeight )
			text.style.height = adjustedHeight + "px";
		}
	}
	

	this.enqueueTwitter = function() {
		enqueue(WhatTheTrend.search + '&rpp=20&callback=WhatTheTrend.handleTwitter');
	}

	this.enqueueFlickr = function() {
		enqueue('http://api.flickr.com/services/feeds/photos_public.gne?format=json&jsoncallback=WhatTheTrend.handleFlickr&tags=' + WhatTheTrend.trendnameencoded);
	}

	this.enqueueGoogle = function() {
		enqueue('http://ajax.googleapis.com/ajax/services/search/news?v=1.0&callback=WhatTheTrend.handleGoogle&rsz=large&q=' + WhatTheTrend.trendnameencoded);
	}
	
	//Private methods
	function enqueue(url) {
		var script=document.createElement('script');
		script.type="text/javascript";
		script.src=url;
		document.getElementsByTagName('head')[0].appendChild(script);
	}
	function renderTwitter(results) {
		jQuery('#tweets').empty();
		for (var i=0;i<Math.min(results.length,15);i++) {
			var div=document.createElement('div');
			div.className='tweet';
			var tweet=results[i]
			div.innerHTML=('<a href="http://twitter.com/'+tweet.from_user+'"><img src="'+tweet.profile_image_url+'" alt="" width="48" height="48" /></a><a href="http://twitter.com/'+tweet.from_user+'">'+tweet.from_user+"</a> "+autolink(tweet.text));
			jQuery('#tweets').append(div);
		}
	}
	function renderFlickr(results) {
		jQuery('#fphotos').empty();
		for (var i=0;i<Math.min(results.length,2);i++) {
			var div=document.createElement('div');
			div.className='fphoto';
			var fphoto=results[i];
			div.innerHTML='<p class="im"><a href="'+fphoto.link+'"><img src="'+fphoto.media.m+'" alt="'+fphoto.title+'"  /></a></p><p class="caption">'+fphoto.title+'</p>';
			jQuery('#fphotos').append(div);
		}

	}
	function renderGoogle(results)  {
		jQuery('#garticles').empty();
		for (var i=0;i<Math.min(results.length,10);i++) {
			var div=document.createElement('div');
			div.className='garticle';
			var garticle=results[i];
			div.innerHTML='<p><a href="'+garticle.unescapedUrl+'">'+garticle.titleNoFormatting+'</a> ('+garticle.publisher+')<br>'+garticle.content+'</p>';
			jQuery('#garticles').append(div);
		}

	}
	function autolink(input)
	{
    return input.replace(/(ftp|http|https|file):\/\/[\S]+(\b|$)/gim,
'<a href="$&">$&</a>').replace(/([^\/])(www[\S]+(\b|$))/gim,
'$1<a href="http://$2">$2</a>');
	} 
}

function catIdToName(catid)
{
	var catName = '';
	switch(catid)
	{
		case("1"):
			catName = "Entertainment";
			break;
		case("2"):
			catName = "Gaming";
			break;
		case("3"):
			catName = "Lifestyle";
			break;
		case("4"):
			catName = "Science";
			break;
		case("5"):
			catName = "Sports";
			break;
		case("6"):
			catName = "Technology";
			break;
		case("7"):
			catName = "World & Business";
			break;
		case("8"):
			catName = "SPAM";
			break;
		default:
			catName = "Unspecified";
			break;
	}
	
	return catName;
}

function countryToFlag(country)
{
	var country_image = '';
	switch(country)
	{
		case("United States"):
			country_image = "us.png";
			break;
		case("Canada"):
			country_image = "ca.png";
			break;
		case("United Kingdom"):
			country_image = "england.png";
			break;
		case("Philippines"):
			country_image = "ph.png";
			break;
		case("Brazil"):
			country_image = "br.png";
			break;
		case("Australia"):
			country_image = "at.png";
			break;
		case("Germany"):
			country_image = "de.png";
			break;
		case("India"):
			country_image = "in.png";
			break;
		case("China"):
			country_image = "cn.png";
			break;
		case("Norway"):
			country_image = "no.png";
			break;
		case("Ireland"):
			country_image = "ie.png";
			break;
		case("Puerto Rico"):
			country_image = "pr.png";
			break;
		case("Netherlands"):
			country_image = "nl.png";
			break;
		case("Switzerland"):
			country_image = "ch.png";
			break;
		case("Singapore"):
			country_image = "sg.png";
			break;
		case("Denmark"):
			country_image = "dk.png";
			break;
	}
	
	if(country_image != "")
	{
		country_image = "/images/flags/" + country_image;
	}
	
	return country_image;
}

