var ticker_id = -1;
var poll_id = -1;
var meet_id = -1;
var postreq = false;
var getreq = false;
var defaultInputText ='Login to post message';
var resizeTO = false;
var fadeTime = 500;
var growlFade = 1250;
var messageLen = 140;
var postEnable = true;
var buttons = { };
var IE = false;
buttons['qabutton'] = {normal: 'qabutton.png', clicked: 'qabuttonPress.png' };
var Comets;
var RemotePtr = "";

$(document).ready(function(){
	// register click handlers
	$("#voteup").bind("click", {}, tickerVoteClick);
	$("#votedown").bind("click", {}, tickerVoteClick);
	$("#postbtn").bind("click", {}, postComment);
	$("#sessionCol").find("span.paginationLink").bind("click", {}, paginate);
	$("#post_text").bind("click", {}, inputHandler);
	$("#post_text").bind("blur", {}, inputHandler);
	$("#post_text").bind("keypress", {}, inputHandler);
	$("#qabutton").bind("click", {}, postComment);
	$("#twittertoggle").bind("click", {}, function() {toggleTwitter("reinitializeScroll");});
	$("#twitterCheckBox").bind("click", {}, twitterBoxClick);
	registerButtonClicks();
	registerPaginationHandlers();
	setInterval(charsLeft,500);
	get('post_text').value = defaultInputText;
	loadNewSessions(sessions);
	updateTime(updateClock);
	$("#growl").fadeTo(0,0);
	$("#growl").css("display","block");
	$(window).resize(function(){
		if(resizeTO !== false)
			clearTimeout(resizeTO);
		resizeTO = setTimeout(reinitializeScroll, 200); //200 is time in miliseconds
	});
	if(isIdentified) {
		defaultInputText = 'Type your message, press enter';
	}
	twitterBoxClick(null);
	exportComments();
	Comets = CometsHandler(ajaxUpdateTimeout);
	window.onbeforeunload = confirmUnload;
	if(toPush) {
		openSession(toPush);
	}
	toggleTwitter();
	refreshList();
	$("#refreshButton").bind("click", {}, refreshList);
});

function exportComments() {
	if(identifiedType == "twitter") {
		$("#post-to-twitter").css("display","block");
	}
}

function registerPaginationHandlers() {
	$("#paginationPrev").bind("click", {}, paginate);
	$("#paginationPrev").bind("mouseover", {}, paginate);
	$("#paginationPrev").bind("mouseout", {}, paginate);
	$("#paginationNext").bind("click", {}, paginate);
	$("#paginationNext").bind("mouseover", {}, paginate);
	$("#paginationNext").bind("mouseout", {}, paginate);
}
function growl() {
	$("#growl").fadeTo(growlFade,.90,growlOut);
}

function growlOut(e) {
	setTimeout("$('#growl').fadeTo(growlFade,0)",1100);
	//setTimeout("alert('sup')",2000);
}

function updateName(name) {
	$("#welcome").html("Welcome " + name);
}

function confirmUnload() {
	if(get('post_text').value === '' || get('post_text').value === defaultInputText) {
		return null;
	} else {
		msg = "Leaving this page will end your session";
		return msg;
	}
}

function updateClock(time) {
	$("#datetime").html(time.month + " " + time.day + " " + time.hours + ":" + time.min);
}

// post_text click/blur handler
function inputHandler(e) {
	if (!e) var e = window.event;
	if(e.type == 'click') {
		if(get('post_text').value == defaultInputText && !twitterChecked()) {
			get('post_text').value = '';
		}
	} else if(e.type == 'blur') {
		if(get('post_text').value == '') {
			get('post_text').value = defaultInputText;
		}
	} else if(e.type == 'keypress') {
		if(e.which == 13 || e.keyCode == 13) {
			postComment();
		}
		
	}	
}
// pagination "link" handler
function paginate(e) {
	if(e.type == 'click') {
		var url = "/conferences/getSessions/id:" + conference_id + "/";
		if(e.target.id == "paginationPrev") {
			url += "first_time:" + first_time;
		} else {
			url += "last_time:" + last_time;
		}
		ajax(url,loadNewSessions);
	} else if(e.type == 'mouseover') {
		if(e.target.id == 'paginationPrev') {
			e.target.src = '/images/portal/paginationPrevHover.png';
		} else {
			e.target.src = '/images/portal/paginationNextHover.png';
		}
	} else if(e.type == 'mouseout') {
		if(e.target.id == 'paginationPrev') {
			e.target.src = '/images/portal/paginationPrev.png';
		} else {
			e.target.src = '/images/portal/paginationNext.png';
		}
	}
}
//
function loadNewSessions(json) {
	if(json.pagination && json.sessions) {
		var html = '';
		var prevDate = false;
		$("#sessions").html("");
		for(var i in json.sessions) {
			//alert(json.sessions[i].Meet.start_time);
			if(json.sessions[i].Meet.date != prevDate) {
				html += '<div class="dateheader">' + json.sessions[i].Meet.date + '</div>';
			} else {
				html += '<div class="sessionborder"></div>';
			}
			if (json.sessions[i].Meet.start_time == "00:00" && json.sessions[i].Meet.end_time == "00:00") {
				timehtml = "";
			} else {
				timehtml = json.sessions[i].Meet.start_time + ' - ' + json.sessions[i].Meet.end_time;
			}
			html += '<div class="sessionColContent session" id="session-' + json.sessions[i].Meet.id + '">';
			//TODO add meet time
			//html += json.sessions[i].Meet.start_time + ' - ' + json.sessions[i].Meet.end_time + '<br />';
			html += json.sessions[i].Meet.name;
			//html += '<div class="sessionspeaker">' + json.sessions[i].Meet.speaker + '</div>';
			html += '<div class="sessionspeaker">' + timehtml + '</div>';
			html += '<img class="opensession" src="/images/portal/sessionOpen.png" />';
			html += '</div>';
			$("#sessions").append(html);
			html = '';
			prevDate = json.sessions[i].Meet.date;
		}
		$("#sessions").append('<div class="sessionborder"></div>');
		html = '';
		if(json.pagination.prev) {
			$("#paginationPrev").css("visibility","visible");
		} else {
			$("#paginationPrev").css("visibility","hidden");
		}
		if(json.pagination.next) {
			$("#paginationNext").css("visibility","visible");
		} else {
			$("#paginationNext").css("visibility","hidden");
		}
		
		if(json.pagination.prev || json.pagination.next) {
			$("#paginationText").css("visibility","visible");
		} else {
			$("#paginationText").css("visibility","hidden");
		}
		if(json.pagination.prev || json.pagination.next) {
			// show pages
			$("#totPages").html(json.pagination.totPages);
			$("#curPage").html(json.pagination.curPage);
		}
		first_time = json.pagination.prev;
		last_time = json.pagination.next;
	
		// redefine click handlers
		$("#sessions").find("div.session").bind("click", {}, sessionClick);	
	}
}
// vote + or - click handler
function tickerVoteClick(e) {
	var data;
	if(e.target.id == "voteup") {
		data = "1";
	} else {
		data = "-1";
	}
	ajaxPost("/tickers/vote/" + ticker_id,"data[vote]="+data);
}

// click handler for session list
function sessionClick(e) {
	var sessionid = getID(e.currentTarget.id);
	if(sessionid) {
		if(sessionid != meet_id) {
			openSession(sessionid);
			//setTimeout('openSession(' + sessionid + ')',fadeTime);
		}
	} else {
		throw new Error("Cannot open session");
	}

}

// sends ajax request for session data
function openSession(id) {
	meet_id = id;
	// make sure right panel "content" (Q/A,etc) is visible
	$("#initialpanel").css("display","none");
	$("#pollsCol").css("display","block");
	$("#middleCol").css("display","block");
	
	$("#sessionCol").find("div.sessionactive").removeClass("sessionactive");
	$("#session-" + id).addClass("sessionactive");
	$("#sessions").find("img").attr("src","/images/portal/sessionOpen.png");
	$("#session-" + id).find("img").attr("src","/images/portal/sessionOpenActive.png");
	$("#projectorLink").remove();
	$("#session-" + id).append('<a id="projectorLink" href="'+'/meets/projector/'+id+'>projector</a>');
	// change image
	
	
	clearPanels();

	//$("#commentsPane").html('<img class="loadingimg" src="/images/loadingAnimation.gif" />');
	// get polls/ticker data
	ajax("/conferences/getSessionData/" + id,loadSessionData);
	var url="/comments/importcomments/"+id+"/";
	if (RemotePtr != "") {
		clearInterval(RemotePtr);
	} else {
		remoteCall(url);
	}
	//RemotePtr = setInterval(function() {remoteCall(url);}, 1000*60);
	
	// get comment backlog
	startCommentsListener(id);
	firstLoad = 1;
}

// cleans up old session's content in preparation for loading new session
function clearPanels() {
	panelInitialized = false;
	last_comment = -1;
	get('post_text').value = defaultInputText;
	if(update_request)
		update_request.cancel();
	var toClear = new Array('pollsContainer','tickerFlash','tickerQuestion','message');
	for(var i in toClear) {
		$('#' + toClear[i]).html("");
	}
	$('#commentsPane').find(".comment").remove();

	$('#nocomments').css('display', 'block');
	reinitializeScroll(0);
	
	// hide the nocomment box during fading phase
	$('#nocomments').css('visibility', 'hidden');
	$("#loading").fadeIn(fadeTime);
	setTimeout(function() { $('#nocomments').css('visibility', 'visible') }, fadeTime);
}

// open session ajax complete handler, interprets json data for ticker/polls
function loadSessionData(json) {
	if(json.Poll && json.Poll.length > 0) {
		$("#pollsContainer").html("");
		$("#pollsContainer").append('<div class="pollsColContent pollsheader">new polls</div>');
		for(var i in json.Poll) {
			loadPoll(json.Poll[i]);
		}
		$("#pollsContainer").find("span.pollVote").bind("click", {}, pollClick);
		$("#pollsContainer").find("span.pollResults").bind("click", {}, pollClick);
		
	} else {
		$("#pollsContainer").append('<div class="pollsColContent pollTitle">No polls in this session</div>');
	}
	$("#loading").fadeOut(fadeTime);
}

// returns the id from an element formed <something>-id. e.g. pollVote-##, session-##
function getID(objid) {
	var re = new RegExp("[0-9]+$");
	var m = re.exec(objid);
	if (m != null) {
		return m[0];
	} else {
		return null;
	}
}

// click handler for poll voting
function pollClick(e) {
	poll_id = getID(e.target.id);
	var success;
	var url = "/polls/";
	var title;
	if($('#' + e.target.id).hasClass('pollVote')) {
		// vote click
		url += "vote/" + poll_id;
	} else {
		// results click
		url += "view/";
		url += poll_id + '/portal';
	}
	title = $("#pollTitle-" + poll_id).text();
	tb_show(title,url + '?keepThis=true&TB_iframe=true&height=225&width=375');
}

// loads poll in right column
function loadPoll(poll) {
	var html = '<div class="pollsColContent poll">';
	html += '<div class="pollTitle" id="pollTitle-' + poll.id + '" >' + poll.question + '</div>';
	html += '<span class="pollAction pollVote" id="pollVote-' + poll.id + '">Vote</span>';
	if(poll.public_results == "yes") {
		html += ' | <span class="pollAction pollResults" id="pollResults-' + poll.id + '">View Results</span>';
	}	
	$("#pollsContainer").append(html);
}

