var messageCount = 0;
var revealsCount = 0;
var messages = [];
var reveals = [];
var xhrActive = lastXhr = false;
var timer = focusTimer = watchdogTimer = false;
var xhrCount = xhrTime = 0;
var bing = lastBing = bingable = inputHasFocus = muted = false;
var status = -10;

var renderMessages = function(resp) {
	bingable = false;
	if (resp.s != status) {
		$("#dateActive, #dateIdle, #dateNotJoined, #dateLeft").hide();
		status = resp.s;
		if (status == -2)
			$("#dateLeft").show();
		else if (status == -1)
			$("#dateNotJoined").show();
		else if (status == 1)
			$("#dateActive").show();
		else if (status == 0)
			$("#dateIdle").show();
	}
	for(i in resp.r) {
		reveals.push(resp.r[i]);
		revealsCount++;
		if (resp.r[i].type == "facts")
			$('#reveals').append('<div><h4>' + resp.r[i].desc + ': <span style="font-weight:normal;">' + resp.r[i].reveal + '</span></h4></div>');			
		if (resp.r[i].type == "blurbs")
			$('#reveals').append('<div><h4><a href="#">' + resp.r[i].desc + '</a>: </h4><p style="display:none;">' + resp.r[i].reveal + '</p></div>');
		if (resp.r[i].type == "photos")
			$('#reveals').append('<div><h4><a href="#">' + resp.r[i].desc + '</a>: </h4><p style="display:none;"><img class="photo" src="' + resp.r[i].reveal['200pxh'] + '" rel="' + resp.r[i].reveal['600pxw'] + '" /></p></div>');
	}
	if (resp.r && resp.r.length > 0) {
		$("#reveals div h4 a").click(function(e) {
			e.preventDefault();
			$("#reveals p").hide();
			$(this).parent().parent().find("p").slideDown();
			return false;
		});
		$('img.photo').click(imgClick);
		$('#reveals p').hide();
		$('#reveals div p:last').slideDown();
	}
	for(i in resp.m) {
		messages.push(resp.m[i]);
		messageCount++;
		var msgClass = 'left';
		if (resp.m[i].from == 'System') { msgClass = 'center'; resp.m[i].message = "<em>"+resp.m[i].message+"</em>"; }
		if (resp.m[i].from == 'You') msgClass = 'right';
		if (resp.m[i].from == 'Your date') bingable = true;
		if ($("#messages div:last").hasClass(msgClass))
			$('#messages').append('<div class="'+msgClass+'"><p>'+resp.m[i].message+'</p></div>');
		else
			$('#messages').append('<div class="'+msgClass+'"><h5>'+resp.m[i].from+'</h5><p>'+resp.m[i].message+'</p></div>');
	}
	if (resp.m && resp.m.length > 0) {
		if (new Date() - lastBing > 2500 && bingable && !inputHasFocus && !muted) {
			lastBing = new Date();
			bing.play();
		}
		focusUser();
	}
}

var poll = function() {
	var start = new Date();
	if (xhrActive) {
// 		console.log("XHR Still active.");
		timer = setTimeout(poll, 1000);
		return;
	}
	xhrActive = true;
	$.post('/dates/update', {mc:messageCount, rc:revealsCount}, 
		function(resp) {
			lastXhr = new Date();
			renderMessages(resp);
			xhrActive = false;
			var end = new Date();
			xhrCount++;
			xhrTime+=(end-start);
			var delay = Math.round((xhrTime/xhrCount)*8);
			if (delay < 500) delay = 500;
			if (delay > 5000) delay = 5000;
			timer = setTimeout(poll, delay);
// 			console.log("Setting to " + delay);
		},
	'json')
		.error(function() {
// 			console.log("An error occurred");
			xhrActive = false;
			timer = setTimeout(poll, 5000);
		});
}
var watchdog = function() {
	if (new Date() - lastXhr > 10000) {
// 		alert("Watchdog intervened.");
		poll();
	}
}
var imgClick = function(e) {
	$("#lightbox .content").html("<img src=\"" + $(this).attr('rel') + "\" />");
	$("#lightboxWrapper").fadeIn();
}
var feedback = function() {
	$("#lightbox .content").html('');
	$("#lightbox .content").html($("form.feedback").clone());
	$("#lightbox .content form.feedback").show();
	$("#lightbox .content form.feedback").submit(function(e) {
		e.preventDefault();
		$.post("/info/feedback", {submit:"Send", feedback: $("#lightbox .content form.feedback textarea[name=feedback]").val()}, function() {
			$("#lightboxWrapper").fadeOut();
		}).error(function() {$("#lightboxWrapper").fadeOut();});
		return false;		
	});
	$("#lightboxWrapper").fadeIn();
	return false;
}
$(document).ready(function() {
	// Check to see if the message send box exists on the page, 
	// if so, we're in a date.
	if ($('#messageForm').length > 0) {
		watchdogTimer = setInterval(watchdog, 10000);
		poll();
		
		$('#messageForm').submit(function(e) {
			e.preventDefault();
			xhrActive = true;
			$.post('/dates/update', {mc:messageCount, rc:revealsCount, m:$('#message').val()}, 
				function(resp) {
					renderMessages(resp);
					xhrActive = false;
					focusView();
				}, 
			'json');
			$('#message').val('');
			
			return false;
		});
		//if user scrolls, kill scroll timer
		$("#messages").bind("scroll", function(){
			clearTimers();
// 			if ($(window).scrollTop() > 68)
// 				$("#reveals").css('top',0);
// 			else
// 				$("#reveals").css('top',68);
		});
		$("#shareH a").click(function(e) {
			e.preventDefault();
			$.post("/dates/addAllowedVisitors");
			$("#shareH").html("Profile shared!");
			$("#shareP").html("Your date can now visit your profile and ask you out on dates.");
			return false;
		});
		$("#message").blur(function() { inputHasFocus = false; console.log("lost focus"); })
				.focus(function() { inputHasFocus = true; console.log("got focus");});
		$("#muteButton").click(function(e) { 
			e.preventDefault();
			if ($(this).hasClass("muted")) {
				$(this).removeClass("muted");
				muted = false;
			} else {
				$(this).addClass("muted");
				muted = true;
			}
			return false;
		});
		bing = new Audio();
		bing.src = "/js/bing.wav";
		bing.volume = 0.5;
		lastBing = new Date();
	}
	$("a.blurbName").click(function(e) {
		e.preventDefault();
		if ($("textarea[name=" + $(this).attr('rel') + "]").length >= 1)
			return false;
		$(this).after('<textarea name="' + $(this).attr('rel') + '"></textarea>');
		var remainingBlurbs = parseInt($("#remainingBlurbs").text()) - 1;
		if (remainingBlurbs <= 0) { remainingBlurbs = 0; }
		$("#remainingBlurbs").text(remainingBlurbs);
		return false;
	});
	$("a.photoName").click(function(e) {
		e.preventDefault();
		$(this).after('<input type="file" name="' + $(this).attr('rel') + '" />');
		var remainingPhotos = parseInt($("#remainingPhotos").text()) - 1;
		if (remainingPhotos <= 0) { remainingPhotos = 0; }
		$("#remainingPhotos").text(remainingPhotos);
		return false;
	});
	$("img.photo").click(imgClick);
	$("#lightbox a.close").click(function(e) {
		e.preventDefault();
		$("#lightboxWrapper").fadeOut();
	});
	
	if (navigator.platform == 'iPad' || navigator.platform == 'iPhone' || navigator.platform == 'iPod') {
		$(window).scroll(function() {
			$("#background").animate({top: $(window).scrollTop()}, 'fast');
		});
	}
});

var focusUser = function() {
	if (focusTimer === false){
		if ($("#messages").prop("scrollHeight") - $("#messages").scrollTop() - $("#messages").height() < 100){
			focusView();
		} else{
			focusTimer = setTimeout(focusView, 1500);
		}
	}	
}

var clearTimers = function(){
	if (focusTimer !== false){
		clearTimeout(focusTimer);
		focusTimer = false;
	}
}
var focusView = function(){
	clearTimers();
	var target = $("#messages div:last").position().top;
	$("input#message").focus();
	$("#messages").animate({scrollTop:$("#messages").prop('scrollHeight')});
}
