$(function() {
	var QS = (function () {
			var s = window.location.search.substring(1).split("&"),q={};
			for(var i=0; i<s.length; i++) { q[s[i].split('=')[0]] = s[i].split('=')[1]; }
			return q;
	})(),
	fb_connected = false,
	fb_init = false,
	require_fb = function(fn) {
		if(fb_init) { fn(); return; }
		window.fbAsyncInit || (window.fbAsyncInit = function() {
			FB.init({appId: '111548228880268', status: true, cookie: true});
			fb_init = true;
		});
		var old = window.fbAsyncInit;
		window.fbAsyncInit = function() { old(); fn(); }
	},
	urls = (function() {
				var urls = {
					'Huffington Post':{url:'huffingtonpost.com',type:'News',popular:1},
					'YouTube':{url:'youtube.com',type:'Videos',popular:1},
					'Daily Motion':{url:'dailymotion.com',type:'Videos'},
					'CNN':{url:'cnn.com',type:'News',popular:1},
					'Boing Boing':{url:'boingboing.net',type:'Entertainment'},
					'Slate':{url:'slate.com',type:'News',popular:1},
					'Washington Post':{url:'washingtonpost.com',type:'News',popular:1},
					'Tech Crunch':{url:'techcrunch.com',type:'Tech',popular:1},
					'New York Times':{url:'nytimes.com',type:'News'},
					'All Facebook':{url:'allfacebook.com',type:'Social Media'},
					'Break':{url:'break.com',type:'Videos'},
					'Metacafe':{url:'metacafe.com',type:'Videos'},
					'Mashable':{url:'mashable.com',type:'Social Media'},
					'Splendora':{url:'splendora.com','type':'Style'},
					'GQ':{url:'gq.com','type':'Style'},
					'Style':{url:'style.com','type':'Style'},
					'Telegraph':{url:'telegraph.co.uk', type:'UK News'},
					'Gizmodo':{url:'gizmodo.com',type:'Tech'},
					'Apple':{url:'apple.com',type:'Apple'},
					'Clicker':{url:'clicker.com',type:'Entertainment'},
					'Mac Rumors':{url:'macrumors.com',type:'Apple'},
					'TUAW':{url:'tuaw.com',type:'Apple'},
					'The Apple Blog':{url:'theappleblog.com',type:'Apple'},
					'Apple Insider':{url:'appleinsider.com',type:'Apple'},
					'Guardian':{url:'guardian.co.uk',type:'UK News'},
					'Daily Mail':{url:'dailymail.co.uk',type:'UK News'},
					'BBC':{url:'bbc.co.uk',type:'UK News'},
					'Wall Street Journal':{url:'online.wsj.com',type:'News'},
					'TED':{url:'ted.com',type:'Information'},
					'Addicting Games':{url:'addictinggames.com',type:'Games'},
					'MTV':{url:'mtv.com',type:'Entertainment'},
					'Levi\'s':{url:'levi.com',type:'Brand'},
					'Trip Advisor':{url:'tripadvisor.com',type:'Travel'},
					'Kayak':{url:'kayak.com',type:'Travel'},
					'Pandora':{url:'pandora.com',type:'Music'},
					'Wired':{url:'wired.com',type:'Tech'},
					'Ars Technica':{url:'arstechnica.com',type:'Tech'},
					'Rotten Tomatoes':{url:'rottentomatoes.com',type:'Movies'},
					'CNET':{url:'cnet.com',type:'News'},
					'Forbes':{url:'forbes.com',type:'Business'},
					'Fast Company':{url:'fastcompany.com',type:'Business'},
					'Yelp':{url:'yelp.com',type:'Reviews'},
					'Last.fm':{url:'last.fm',type:'Music'},
					'Time': {url: 'time.com',type:'News'},
					'Engadget':{url:'engadget.com',type:'Tech'},
					'Hulu':{url:'hulu.com',type:'Videos'},
					'Kongregate':{url:'kongregate.com',type:'Games'},
					'Flickr':{url:'flickr.com',type:'Pictures'},
					'xkcd':{url:'xkcd.com',type:"Pictures"},
					'Inside Facebook':{url:'insidefacebook.com',type:'Social Media'},
					'Vimeo':{url:'vimeo.com',type:'Videos'},
					'MLB':{url:'mlb.com',type:'Sports'},
					'ABC News':{url:'abcnews.go.com',type:'News'},
					'Fandango':{url:'fandango.com',type:'Movies'},
					'ESPN':{url:'espn.com',type:'Sports'},
					'NFL':{url:'nfl.com',type:'Sports'},
					'NHL':{url:'nhl.com',type:'Sports'},
					'NBA':{url:'nba.com',type:'Sports'},
					'MLB':{url:'mlb.com',type:'Sports'},
					'Golf':{url:'golf.com',type:'Sports'},
					'Sports Illustrated':{url:'si.com',type:'Sports'},
					'MLS':{url:'mlsnet.com',type:'Sports'},
					'IMDb':{url:'imdb.com',type:'Movies'},
					'LIFE':{url:'life.com',type:'Entertainment'}
				};
				
				if(localStorage) {
					var cookie = localStorage.favorites;
				} else {
					var cookie = $.cookie('added_items');
				}
	
				if(cookie != null) {
					cookie = cookie.split(',');
					for(var c in cookie) {
						if(cookie[c] != '') {
							var o = {url:cookie[c],type:'My Favorites'};
							urls[cookie[c]] = o;
						}
					}
				}
				
				return urls;
	})(),
	categories = ["Popular","My Favorites","News","UK News","Videos","Pictures","Apple","Style","Tech","Travel","Games","Social Media","Information","Sports","Entertainment","Movies"],
	$page = $("#page"),
	cache = {},
	tmpl = function tmpl(str, data) {
	    var fn = !/\W/.test(str) ? cache[str] = cache[str] || tmpl(document.getElementById(str).innerHTML) :
	    	new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};" +
	    		"with(obj){p.push('" +

	        str.replace(/[\r\t\n]/g, " ")
	    	   .replace(/'(?=[^%]*%>)/g,"\t")
	    	   .split("'").join("\\'")
	    	   .split("\t").join("'")
	    	   .replace(/<%=(.+?)%>/g, "',$1,'")
	    	   .split("<%").join("');")
	    	   .split("%>").join("p.push('")
	    	   + "');}return p.join('');");
	      
	    return data ? fn( data ) : fn;
	},
	box = tmpl("tmpl_box"),
	viewing = "",
	search = function (q) {
	    var sresults = tmpl("tmpl_results"), html = [],
	    loading = box({"title":"Search Results","type":"Live results from Facebook","content":"Loading results from Facebook..."});
	    $page.html(loading);
	    require_fb(function() {
		   /* if(FB.getSession()) {
		    	FB.api("me/home","get",{"q":q}, function(res) {
		    		html.push(sresults(res));
			    	html = box({"title":"Search Results","type":"Live results from Facebook","content":html.join('')});
			    	$page.html(html).highlight(q);
		    	});
		    } else {*/
			    $.getJSON("http://graph.facebook.com/search/?callback=?&q=" + q, function(res) {
			    	html.push(sresults(res));
			    	html = box({"title":"Search Results","type":"Live results from Facebook","content":html.join('')});
			    	$page.html(html).highlight(q);
			    });
			/*}*/
		});
	},
	trends = function() {
	    $.getJSON('/trends/trends.json', function(trends) {	
	    	var i = 1, html = [];
	    	for(var t in trends) {
	    		if(i==10) { break; }
	    		var et = encodeURIComponent(t);
	    		html.push("<div class='trend'>" + i + ". <a href='/?q=" + et + "'>" + t + "</a></div>");
	    		i++;
	    	}
	    	var html = box({"title":"Hot Trends on Facebook","type":"Updated every 15 minutes","content":html.join('')});
	    	$page.html(html);
	    });
	},
	likes = function() {
		require_fb(function() {
			FB.api("me/likes", function(res) {
				for(var like in res.data) {
				    //console.log(res.data[like].name);
				}
			});
		});
	},
	detail = function(url,title) {
	    var iframe = tmpl("tmpl_activity",{"url":url,"width":1030,"height":2000}),
	    html = '<div class="mega_frame"><h2>' + title + '</h2>' + iframe + '</div>';
	    $page.html(html);
	},
	site_cache = {},
	sites = function(filter) {
		$page.find(".frame_wrap,.box").remove();
		if(site_cache[filter]) {
			$page.find("#iframes").html(site_cache[filter]);
			var frameHeight = $page.find("#iframes").height();
			if(frameHeight > $page.find("#sidebar").height()) {
				$page.find("#sidebar").height(frameHeight);			
			}
			return;
		}
		var html = [], recs = (($.cookie("hide_recs") == '1') ? 'false' : 'true');
		for(var url in urls) {
			if(filter == "Popular") {
				if(urls[url].popular) {
					urls[url].title = url;
					urls[url].recs = recs;
					html.push(tmpl("tmpl_iframe", urls[url]));
				}
			} else {
				if(urls[url].type == filter) {
					urls[url].title = url;
					urls[url].recs = recs;
					html.push(tmpl("tmpl_iframe", urls[url]));
				}
			}
		}
		html = html.join('');
		$page.find("#iframes").append(html || box({"title":"My Favorites Sites","type":"","content":"You haven't added any favorites yet. Use the 'Add a site' option in the left column to add a site you would like to see here."}));
		site_cache[filter] = html;
		$page.find("#sidebar").height($page.find("#iframes").height());
	},
	add_site = function(url) {
		try {
			url = url.replace("http://",'').replace("https://","").replace("www.","").split("/")[0];
			if(/^[a-zA-Z0-9\-\.]+$/.test(url)) {
				if(localStorage) {
					var cookie = (localStorage.favorites || '').split(',');
					cookie.push(url);
					localStorage.favorites = cookie.join(",");
				} else {
					var cookie = ($.cookie('added_items') || '').split(',');
					cookie.push(url);
					$.cookie('added_items',cookie.join(','),{ expires: 100 });
				}
				urls[url] = {"url":url,"type":'My Favorites'};
				site_cache['My Favorites'] = false;
				sites('My Favorites');
				
				if(fb_connected) {
					FB.api('/me/feed', 'post', {message: "added " + url + " to my favorite sites",
						picture: "http://likebutton.me/like.png",
						link: "http://likebutton.me",
						name: "Like Button",
						description: "What people you know like on the internet right now"
					}, function() {});
				}
				$(document).trigger('close.facebox');
			} else {
				$.facebox('There was a problem with the URL you entered, sorry!');
			}
		} catch(e) {
			$.facebox('There was a problem, sorry!');
		}
	},
	remove_site = function(url) {
		try {
			url = decodeURIComponent(url);
			if(localStorage) {
				var cookie = (localStorage.favorites || '').split(',');
				delete cookie[cookie.indexOf(url)];
				delete urls[url];
				localStorage.favorites = cookie.join(",");
			} else {
				var cookie = ($.cookie('added_items') || '').split(',');
				delete cookie[cookie.indexOf(url)];
				delete urls[url];
				$.cookie('added_items',cookie.join(','),{ expires: 100 });
			}
			site_cache['My Favorites'] = false;
			sites('My Favorites');
		} catch(e) { }
	},
	homepage = function() {
		try {
			document.body.style.behavior='url(#default#homepage)';
			document.body.setHomePage('http://likebutton.me');
		} catch(e) {
			$.facebox('Unfortunately, "Set as Homepage" only works in Internet Explorer. To set Like Button as your homepage in your browser, you will need to do so through your browser settings.');
		}
		return false;
	};
	
	// Figure out which page to show
	if(QS.url) {
	    detail(QS.url,"Details for " + QS.url);
	} else if(QS.likes) {
		likes();
	} else if(QS.trends) {
	    trends();
	} else if(QS.q) {
	    search(QS.q);
	} else {
		$page.html(tmpl("tmpl_sidebar", {"categories":categories})).append("<div id='iframes'></div>");
		if($.cookie("last_view")) {
			sites($.cookie("last_view"));
		} else {
			$.cookie('last_view','Popular',{ expires: 100 });
			sites('Popular');
		}
		$(".category a", "#sidebar").live("click", function() {
			var text = $(this).parent().siblings()
						.find("a").removeClass("selected")
						.end().end().end()
						.addClass("selected").text();
			sites(text);
			$.cookie('last_view',text,{ expires: 500 });
			return false;
		}).filter(function() { return $(this).text() == $.cookie("last_view"); }).addClass("selected");
		
		$('someElement').filter(function() {
  return $(this).text() == 'Some text';
});
	}
	
	// Handle hiding the welcome message
	if($.cookie('hide_info')) {
		$(".info").remove();
	} else {
		$(".info").show();
		$("#hide_info,#info_x").click(function() {
			$.cookie('hide_info',1,{ expires: 500 });
			$(".info").slideUp();
			return false;
		});
	}
	
	// Event handler for adding sites
	$("#add").live("submit", function() {
		add_site($("#add_item").val());
		return false;
	});
	
	$("#create_like").live("keyup", function() {
		var el = $("#create_like"),
			text = el.val(),
			url = encodeURIComponent("http://likebutton.me/?status=" + text);
		
		if(text.length > 2) {
			$("#create_like_preview").html("<b>Facebook Preview:</b> You like " + text);
			$("#create_like_button").html(' Click Like &rarr; <iframe src="http://www.facebook.com/plugins/like.php?&layout=button_count&show_faces=false&width=100&action=like&href=' + url + '" scrolling="no" frameborder="0" allowTransparency="true" style="width:100px;height:20px;"></iframe>');
		} else {
			$("#create_like_button").empty();
			$("#create_like_preview").text("");
		}
	});
	
	if($("#create_like").val() != '') {
		$("#create_like").trigger("keyup");
	}
	
	// Event handler for hovers
	$("h2").live("mouseover mouseout", function() {
		var action = $(this).find(".type");
		if(action.text() == "My Favorites") {
			action.text("Remove").addClass("remove").bind("click", function() {
				remove_site(action.attr("title"));
			});
		} else if (action.text() == "Remove") {
			action.text("My Favorites").removeClass("remove").unbind("click");
		}
	});
	
	// Event handler for adding homepage
	$("#homepage").live("click", homepage);
	
	
	// Facebook Stuff
	require_fb(function() {
		FB.getLoginStatus(function(res) {
			var $link = $("#fb_login"), perms = 'read_stream,publish_stream,user_likes,user_interests';
			if(!res.session) {
				$link.text("Login Using Facebook").live("click", function() {
					FB.login(function() { 
						FB.api("/me/feed","post",{"link":"http://likebutton.me","name":"Like Button","caption":"Using like button to find awesome stories shared by my friends!"}, function() {
							window.location.reload();
						});
					}, {'perms': perms});
					return false;
				});
			} else {
				FB.api({method: 'Users.hasAppPermission',ext_perm: 'user_likes'}, function(res) {
					if(res) {
						fb_connected = true;
						$link.text("Logout of Facebook").live("click", function() {
							FB.logout(function() { window.location.reload(); });
							return false;
						});
					} else {
						$link.text("Allow Facebook Access").live("click", function() {
							FB.login(function() { window.location.reload(); }, {'perms': perms});
							return false;
						});
					}
				});
			}
		});
	});
	(function() {
	    var e = document.createElement('script'); e.async = true;
	    e.src = "https://connect.facebook.net/en_US/all.js";
	    document.getElementById('fb-root').appendChild(e);
	}());
	
	// Init Plugins
	$('a[rel*=facebox]').facebox();
	$(".frame_wrap h2 a,.search_link a").tipsy({gravity: 's'});
});

// JQ plugins
jQuery.cookie=function(name,value,options){if(typeof value!='undefined'){options=options||{};if(value===null){value='';options.expires=-1;}var expires='';if(options.expires&&(typeof options.expires=='number'||options.expires.toUTCString)){var date;if(typeof options.expires=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));}else{date=options.expires;}expires='; expires='+date.toUTCString();}var path=options.path?'; path='+(options.path):'';var domain=options.domain?'; domain='+(options.domain):'';var secure=options.secure?'; secure':'';document.cookie=[name,'=',encodeURIComponent(value),expires,path,domain,secure].join('');}else{var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=jQuery.trim(cookies[i]);if(cookie.substring(0,name.length+1)==(name+'=')){cookieValue=decodeURIComponent(cookie.substring(name.length+1));break;}}}return cookieValue;}};

(function($){$.fn.tipsy=function(options){options=$.extend({},$.fn.tipsy.defaults,options);return this.each(function(){var opts=$.fn.tipsy.elementOptions(this,options);$(this).hover(function(){$.data(this,'cancel.tipsy',true);var tip=$.data(this,'active.tipsy');if(!tip){tip=$('<div class="tipsy"><div class="tipsy-inner"/></div>');tip.css({position:'absolute',zIndex:100000});$.data(this,'active.tipsy',tip);}if($(this).attr('title')||typeof($(this).attr('original-title'))!='string'){$(this).attr('original-title',$(this).attr('title')||'').removeAttr('title');}var title;if(typeof opts.title=='string'){title=$(this).attr(opts.title=='title'?'original-title':opts.title);}else if(typeof opts.title=='function'){title=opts.title.call(this);}tip.find('.tipsy-inner')[opts.html?'html':'text'](title||opts.fallback);var pos=$.extend({},$(this).offset(),{width:this.offsetWidth,height:this.offsetHeight});tip.get(0).className='tipsy';tip.remove().css({top:0,left:0,visibility:'hidden',display:'block'}).appendTo(document.body);var actualWidth=tip[0].offsetWidth,actualHeight=tip[0].offsetHeight;var gravity=(typeof opts.gravity=='function')?opts.gravity.call(this):opts.gravity;switch(gravity.charAt(0)){case'n':tip.css({top:pos.top+pos.height,left:pos.left+pos.width/2-actualWidth/2}).addClass('tipsy-north');break;case's':tip.css({top:pos.top-actualHeight,left:pos.left+pos.width/2-actualWidth/2}).addClass('tipsy-south');break;case'e':tip.css({top:pos.top+pos.height/2-actualHeight/2,left:pos.left-actualWidth}).addClass('tipsy-east');break;case'w':tip.css({top:pos.top+pos.height/2-actualHeight/2,left:pos.left+pos.width}).addClass('tipsy-west');break;}if(opts.fade){tip.css({opacity:0,display:'block',visibility:'visible'}).animate({opacity:0.8});}else{tip.css({visibility:'visible'});}},function(){$.data(this,'cancel.tipsy',false);var self=this;setTimeout(function(){if($.data(this,'cancel.tipsy'))return;var tip=$.data(self,'active.tipsy');if(opts.fade){tip.stop().fadeOut(function(){$(this).remove();});}else{tip.remove();}},100);});});};$.fn.tipsy.elementOptions=function(ele,options){return $.metadata?$.extend({},options,$(ele).metadata()):options;};$.fn.tipsy.defaults={fade:false,fallback:'',gravity:'n',html:false,title:'title'};$.fn.tipsy.autoNS=function(){return $(this).offset().top>($(document).scrollTop()+$(window).height()/2)?'s':'n';};$.fn.tipsy.autoWE=function(){return $(this).offset().left>($(document).scrollLeft()+$(window).width()/2)?'e':'w';};})(jQuery);

jQuery.fn.highlight=function(pat){function innerHighlight(node,pat){var skip=0;if(node.nodeType==3){var pos=node.data.toUpperCase().indexOf(pat);if(pos>=0){var spannode=document.createElement('span');spannode.className='highlight';var middlebit=node.splitText(pos);var endbit=middlebit.splitText(pat.length);var middleclone=middlebit.cloneNode(true);spannode.appendChild(middleclone);middlebit.parentNode.replaceChild(spannode,middlebit);skip=1;}}else if(node.nodeType==1&&node.childNodes&&!/(script|style)/i.test(node.tagName)){for(var i=0;i<node.childNodes.length;++i){i+=innerHighlight(node.childNodes[i],pat);}}return skip;}return this.each(function(){innerHighlight(this,pat.toUpperCase());});};jQuery.fn.removeHighlight=function(){return this.find("span.highlight").each(function(){this.parentNode.firstChild.nodeName;with(this.parentNode){replaceChild(this.firstChild,this);normalize();}}).end();};
