// ############
// (c) 2010 Elyon DeKoven - The contents of this file are not for redistribution
//  in part or whole without my explicit permission
//  http://dekoven.com/elyon
// ############

// Principle 1: Make it worth their time for having you there
// Principle 2: Make it very easy to get rid of you
// Principle 3: Make it expedient to bring you back in

var datathings = new Array();
var currentbump = -1;
var THINGID = -1;
var dfquotervisible = 0;
var dfactionvisible = 0;
var filepath = "http://dekoven.com/elyon/ts/";
var mediapath = filepath + "ttmedia/";
var sound_action = mediapath + "Tick.wav";
var sound_quotes = mediapath + "Tick.wav";
var sound_splat = mediapath + "bluesplat.mp3";	//splat2.wav";
var targt = "_blank";

$(document).ready(function(){
	initialize();
	return false;
});

function thingg (ttitle, timage, tdescription, tlink, twits, tcomments) {
   this.id = newid();
	this.ttitle = ttitle;
	this.timage = timage;
	this.tdescription = tdescription;
	this.tlink = tlink;
	this.ttwitsearch = twits;
	this.ttwitcachetimestamp = new Date();
	this.tcomments = tcomments;
	return this;
}

function initialize () {
    getThings();
    $(document).bind('click', function(e) {
        var $clicked=$(e.target);
        if ($clicked.is("a")) {
            reportit("link*clicked", $clicked.attr("href"));
        } else if (  ( $clicked.parents().is("#bumps") ) || ( $clicked.data("clickable")=="1" ) ) {
            reportit("clickable-parents-is-bumps*click",$clicked.attr("html"));
        } else {
            hidethings();
            reportit("unclickable*click","splat hidden");
            }
        });
    $().keypress(function(e){
        if (e.keyCode == 27) { //'esc' key}
            hidethings();
            reportit("escapepressed","splat hidden");
        }
    });
}

function getThings() {
	var versioner = $(".thingsplat").attr("id");
	var parser = versioner.indexOf("*");
	if (parser > 0) {
		var idnum = versioner.substr(parser + 1);
		versioner = versioner.substr(0, parser);
	}
	$.getJSON(filepath + "getthings.php?findit=" + idnum + "&callback=?",
		function(data){
			datathings = new Array();
			for (var i = 0; i < data.length; i++) {
				datathings[i] = new thingg(data[i].name, data[i].image, data[i].description, data[i].link, data[i].twitsearch, "");
			}
			setBumps();
			setThings();
			var counterr=-1;
			for (i = 0; i < datathings.length; i++) {
				var url = 'http://search.twitter.com/search.json?q='+datathings[i].ttwitsearch+'&rpp=5&callback=?';
				$.getJSON(url, function(data){
					counterr +=1;
					datathings[counterr].tcomments = data;
					var newbox = $("<div class='tweet' id='commentbox" + counterr + "'>Hey cutes! " + counterr + "</div>").appendTo($("#things"));
					newbox.html("");
					parsetweets(counterr, newbox);
					newbox.hide();
				});
			}
		});
}

function setBumps(){
	var NumThings = datathings.length;
	var bumpz;
	bumpz = "<div id='bumps'>";
   for (var i=0; i < NumThings; i++) {
		bumpz += "<img src='" + datathings[i].timage + "' class='innerbumpimage' id='innerbumpimage" + i + "'> </img>";
		}
	bumpz += "<img src='" + mediapath + "bgsplat4.gif" + "' class='innerbumpimage' id='maxbump'> </img>";
	bumpz += "</div>";
	var stuffhtml = "";
	stuffhtml += bumpz;
	$(".thingsplat").html(stuffhtml);
	$("#maxbump").hide();
	$(".innerbumpimage").click(function() {
		var g = stringToInnerBumpId($(this).attr("id"));
		if (g != currentbump) {
			hidethings();
			currentbump = g;
			showThing(g);
			reportit("bump*click",g);
		}
		else {
			hidethings();
		}
		});							
	$(".innerbumpimage").hover(
		function(e){
			var g = stringToInnerBumpId($(this).attr("id"));
				hidethings();
				currentbump=g;
				showThing(g);
				reportit("bump*hover",g);
			}, 
		function() {
		});
}

function setThings() {
	var thingz = "<div id='things'>";
		thingz += "<div id='xbox' alt='Close the Splat'>x</div>";
		thingz += "<div id='thingimagebox'>";
				  thingz += "<a href='' id='thingimagelink'>";
				  thingz += "<img src='Hshm' id='thingimage' border='0'>";
				  thingz += "</a>";
		thingz += "</div>";
		thingz += "<div id='thingtitle'></div>";
		thingz += "<div id='thingdescription'></div>";
		thingz += "<div id='aboutthis'></div>";
		thingz += "<div class='tweet' id='commentbox'></div>";
		thingz += "<div id='bottomlinks'>";
			 thingz += "<span id='contact'>Feedback</span>";
			 thingz += "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span id='hideit'>Hide</span>";
		thingz += "</div>";
		thingz += "<div id='dfquotes'>:-)</div>";
		thingz += "<div id='contacter'>";
			 thingz += "Your email:<textarea id='who' /><br />";
			 thingz += "Comment:<textarea id='comment' />";
			 thingz += "<button type='button' id='submitter'>Submit</button>";
			 thingz += "&nbsp;&nbsp;<button type='button' id='canceller'>Cancel</button>";
		thingz += "</div>";
	thingz += "</div>";
	thingz += "<div id='dfquoter'></div>";
	thingz += "<div id='calltoactioner'></div>";

	$(".thingsplat").append(thingz);

	$('a').data('clickable',1);
	$('#dfquotes').data('clickable',1);
	$('#dfquoter').hide().data('clickable',1);
	$('#calltoaction').data('clickable',1);
	$('#calltoactioner').hide().data('clickable',1);
	$('#contact').data('clickable',1);
	$('#contacter').hide().data('clickable',1);
	$('#comment').data('clickable',1);
	$('#who').data('clickable',1);
	$('#contactation').data('clickable',1);
	$('#submitter').data('clickable',1);
	$('#canceller').data('clickable',1);


	$("#submitter").click (
		function() {
			contactme();
		}
		)
	$("#canceller").click (
		function() {
			$("#contacter").hide();
		}
		)
	$("#contact").hover (
		function() {
			$("#contact").css({
				color:"red"
			});
		},
		function() {
			$("#contact").css({
				color:"white"
			});
		});

	$("#hideit").hover (
		function() {
			$("#hideit").css({
				color:"red"
			});
		},
		function() {
			$("#hideit").css({
				color:"white"
			});
		});

	$("#contact").click (
		function() {
			$("#contact").css({
				color:"white"
			});
			$("#contacter").show();
			reportit("contact*click",new Date().toString());
		//$('#contacter').hide();
		});
	$("#hideit").click (
		function() {
			hidethings();
			reportit("hideit*click",new Date().toString());
		});
	$("#xbox").click (
		function() {
			hidethings();
			reportit("xbox*click",new Date().toString());
		});
		
	$("#dfquotes").hover (
		function() {
			var qte=funquote();
			qte += "<div class='bliplabel'>[more <a href='http://deepfun.com/quotes.html' target='_blank'>fun quotes</a>]</div>";
			var xpos=$("#dfquotes").offset().left - 30 + "px";
			var ypos=$("#dfquotes").offset().top + "px";
			$("#dfquoter").css({
				left:xpos,
				top:ypos
			}).html(qte).show("slide", {
				direction: "left"
			});
			reportit("dfquotes*hover",qte);
			$.sound.play(sound_quotes);
			dfquotervisible = 1;
		},
		function() {
		//	$("#dfquoter").hide("slide", {direction: "left"});			
		});
	$("#dfquoter").hover (
		function() {
		},
		function() {
			$("#dfquoter").hide("slide", {
				direction: "left"
			});
			dfquotervisible = 0;
		});
	$("#things").hover (
		function() {
			if (dfquotervisible == 1) {
				$("#dfquoter").hide("slide", {
					direction: "left"
				});
				dfquotervisible = 0;
			}
			if (dfactionvisible == 1) {
				$("#calltoactioner").hide("slide", {
					direction: "left"
				});
				dfactionvisible = 0;	
			}
		},
		function() {
		});
	
	$("#calltoaction").hover (
		function() {
			var qte="This is really quite something! Go check it out: <a href='" + datathings[currentbump].tlink + "'>" + datathings[currentbump].ttitle + "</a>";
			var xpos=$("#calltoaction").offset().left - 30 + "px";
			var ypos=$("#calltoaction").offset().top + "px";
			$("#calltoactioner").css({
				left:xpos,
				top:ypos
			}).html(qte).show("slide", {
				direction: "left"
			});
			$.sound.play(sound_action); 
			reportit("calltoaction*hover","blah");
			dfactionvisible = 1;
		},
		function() {
		});
	$("#calltoactioner").hover (
		function() {
			reportit("calltoactioner*hover","blah");
		},
		function() {
			$("#calltoactioner").hide("slide", {
				direction: "left"
			});
			dfactionvisible = 0;							
		});

	$("#things").hide();
	$("#dfquoter").hide();
	$("#calltoactioner").hide();

}

function showThing(g) { 
    $.sound.play(sound_splat); 
    var x=$("#innerbumpimage"+g).offset().left-20;
    var y=$("#innerbumpimage"+g).offset().top-18.5;
    $("#maxbump").css({left:x+"px",top:y +"px"});
    $("#maxbump").fadeIn("fast");
    $("#thingtitle").html("<a href='" + datathings[g].tlink + "'>" + datathings[g].ttitle + "</a>" );
    var tmpp =  datathings[g].timage;
    $("#thingimage").attr({"src":tmpp});
    $("#thingimagelink").attr({"href":datathings[g].tlink});
    var tmp = datathings[g].tdescription;
    $("#thingdescription").html(tmp);
    $("#aboutthis").html("What people are saying about '" + datathings[g].ttwitsearch + "':");
    $('a').data('clickable',1);
    $("#funquoter").hide();
	 $("#commentbox"+g).show();
    $("#things").fadeIn("slow");
    }

function hidethings() {
	$("#things").hide();
	$("#maxbump").hide();
	$(".tweet").hide();
	currentbump=0;
	$("#contacter").hide();
	dfactionvisible = 0;
	dfquotervisible = 0;
}

function contactme() {
    var w = $("#who").attr("value");
    var c = $("#comment").attr("value");
    var tm = new Date().toLocaleString();
    $.get(filepath + "contact.php", {
            time: tm,
            who: w,
            comment: c
    }, function(d){
    });
    $("#who").attr("value","");
    $("#comment").attr("value","");
    $("#contacter").hide();
    alert("Thanks for your feedback!");
}

function reportit(rprt, params) {
	var tm = new Date().toLocaleString();	
 	$.get(filepath + "reports.php", {
		time: tm,
		report: rprt,
		params: params
	}, function(d){
	});
}

function stringToInnerBumpId (idstr) {
	var ret = idstr.substr(14);
	return ret;
}

function newid() {
    	THINGID +=1;
	return THINGID;	
}

//================

function parsetweets (tid, appendage) {
	var o = {
		tid: tid
	}
	var s = {
		username: ["thingsplat"],
		avatar_size: 8,
		auto_join_text_default: "  >>  "
	};
	$.extend(s, o);
	var list=$('<p class="tweet_list">').appendTo(appendage);
	var datta = datathings[tid].tcomments;
	var i;
	$.each(datta.results, function(i,item){
		var join_text;
		if (s.join_text == "auto") {
			if (item.text.match(/^(@([A-Za-z0-9-_]+)) .*/i)) {
				join_text = s.auto_join_text_reply;
			} else if (item.text.match(/(^\w+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+) .*/i)) {
				join_text = s.auto_join_text_url;
			} else if (item.text.match(/^((\w+ed)|just) .*/im)) {
				join_text = s.auto_join_text_ed;
			} else if (item.text.match(/^(\w*ing) .*/i)) {
				join_text = s.auto_join_text_ing;
			} else {
				join_text = s.auto_join_text_default;
			}
		} else {
			join_text = s.join_text;
		}
		var join_template = '<span class="tweet_join"> '+join_text+' </span>';
		var joinn = ((s.join_text) ? join_template : ' ');
		var avatar_template = '<a class="tweet_avatar" alt=' + item.from_user + ' title=' + item.from_user + ' target="_blank" href="http://twitter.com/'+ item.from_user+'">';
		avatar_template += '<img class="tweet_img" src="'+item.profile_image_url+'"alt="'+item.from_user+'" /></a>';
		var avatar = (s.avatar_size ? avatar_template : '')
		var date = '<a target="_blank" href="http://twitter.com/'+item.from_user+'/statuses/'+item.id+'" title="view ' + item.from_user + '\'s tweet on Twitter">'+relative_time(item.created_at)+'</a>';
		var text = '<span class="tweet_text">' +$([item.text]).linkUrl().linkUser().linkHash().makeHeart().capAwesome().capEpic()[0]+ ' <span class="via">via Twitter</span></span>';
		list.append('<p>' + avatar + date + joinn + text + '</p>');
		list.children('p:first').addClass('tweet_first');
		list.children('p:odd').addClass('tweet_even');
		list.children('p:even').addClass('tweet_odd');
	});
	if (s.outro_text) list.after(outro);
  }

function relative_time(time_value) {
  var parsed_date = Date.parse(time_value);
  var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
  var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
      var toreturn = "";
  if(delta < 60) {
  toreturn = 'less than a minute ago';
  } else if(delta < 120) {
  toreturn = 'about a minute ago';
  } else if(delta < (45*60)) {
  toreturn = (parseInt(delta / 60)).toString() + ' minutes ago';
  } else if(delta < (90*60)) {
  toreturn = 'about an hour ago';
  } else if(delta < (24*60*60)) {
  toreturn = 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
  } else if(delta < (48*60*60)) {
  toreturn = '1 day ago';
  } else {
  toreturn = (parseInt(delta / 86400)).toString() + ' days ago';
  }
      return toreturn;
}

$.fn.extend({
	linkUrl: function() {
		var returning = [];
		var regexp = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
		this.each(function() {
			returning.push(this.replace(regexp,"<a href=\"$1\">$1</a>"))
		});
		return $(returning);
	},
	linkUser: function() {
		var returning = [];
		var regexp = /[\@]+([A-Za-z0-9-_]+)/gi;
		this.each(function() {
			returning.push(this.replace(regexp,"<a href=\"http://twitter.com/$1\">@$1</a>"))
		});
		return $(returning);
	},
	linkHash: function() {
		var returning = [];
		var regexp = / [\#]+([A-Za-z0-9-_]+)/gi;
		this.each(function() {
			returning.push(this.replace(regexp, '&nbsp;<a href="http://search.twitter.com/search?q=&tag=$1&lang=all">#$1</a>'))
		});
		return $(returning);
	},
	capAwesome: function() {
		var returning = [];
		this.each(function() {
			returning.push(this.replace(/(a|A)wesome/gi, 'AWESOME'))
		});
		return $(returning);
	},
	capEpic: function() {
		var returning = [];
		this.each(function() {
			returning.push(this.replace(/(e|E)pic/gi, 'EPIC'))
		});
		return $(returning);
	},
	makeHeart: function() {
		var returning = [];
		this.each(function() {
			returning.push(this.replace(/[&lt;]+[3]/gi, "<tt class='heart'>&#x2665;</tt>"))
		});
		return $(returning);
	}
});