	var globalSparkwordId = -1;

	function tinyMCE_dynamicLoad(){
		tinyMCE.init({
			mode: "textareas",
			editor_selector: "editable",
			theme: "advanced",
			plugins: "paste",
			theme_advanced_buttons1 : "bold,italic,link,unlink,bullist,numlist",
			theme_advanced_buttons2 : "",
			theme_advanced_buttons3 : "",
			valid_elements : "a[href|target=_self|title],b,strong,i/em,br,ul,ol,li,p",
			theme_advanced_toolbar_align : "left",
			theme_advanced_toolbar_location : "top"
		});
	}

	function toggleReplies(postid,indent,e){
		if($(e).hasClass("closed")){
				$(e).removeClass("closed").addClass("open");
				getReplies(postid,indent);
				$('#reply' + postid).css('display','block');
				$('#reply' + postid).css('clear','both');
		} else {
				$(e).removeClass("open").addClass("closed");
				$('#reply' + postid).css('display','none');
		}
	}
	
	
	function getReplies(postid, indent, e) {
		$.get("../discussionreply.htm", { replyid: postid, indent: indent},
		  function(data){
		  var rd = document.getElementById("reply" + postid);
			$(rd).html(data);
		  });
	}
	
	function makeReply(text, postid) {
		//alert("Reply Text" +  text + " postid " + postid);
		if (text == null || text.length < 1) {
			alert("Please enter a reply.");
		}
		else {
			$.post("../addReplyPost.htm", { replyPostId: postid, post: text },
					function(data){
				//alert("Comment added: " + data);
				window.location.reload();
			});	
			tinyMCE.activeEditor.setContent("");
		}
	}

    var captchaRefreshCounter = 0;
	function makeComment(comment, topicId, topicEntityId, action, captcha, username, password, email) {
		if (action == 'captcha' &&
				(captcha == null || captcha.length < 1)) {
			alert("Please match the provided text.");
		}
		else if (action == 'login' &&
				(username == null || username.length < 1 ||
				password == null || password.length < 1)) {
			alert("Please supply a username and password.");
		}
		else if (action == 'register' &&
				(username == null || username.length < 1 ||
				password == null || password.length < 1 ||
				email == null || email.length < 1)) {
			alert("Please supply a username, password, and an email address.");
		}
		else {
			$.post("../../addComment.htm",
						{ topicEntityType: 'sparkword',
							comment: comment,
							topicId: topicId,
							topicEntityId: topicEntityId,
							action: action,
							captcha: captcha,
							username: username,
							password: password,
							email: email },
					function(data){
						var parsedData = null;
						if (data != null && data.length > 0) {
							parsedData = JSON.parse(data);
							if (parsedData.authenticated == 'true') {
								confirmAbort.confirmAbortActive(false, null);
								if (action == 'register') {
									alert("Thank you for registering.  " +
									"Your post will be valid as soon as you validate this registration.  " +
									"An email is being sent to the email supplied with the validation link to click on.");
								}
								var location = window.location.href;
								var bookmarkIndex = location.indexOf("#");
								if (bookmarkIndex > -1) {
									location = location.substring(0, bookmarkIndex);
								}
								location = location + "#my2bits";
								window.location = location;
								window.location.reload();
							}
							else {
								$(".postTextAreaWrapper").css('display', 'none');

								if (parsedData.fatalException == 'true') {
									alert("ERROR!  Unknown error.  Post not saved.");
								}
								if (action == 'register') {
									if (parsedData.usernameExists == 'true') {
										alert("This username exists. Please try another username.");
									}
									else if (parsedData.emailExists == 'true') {
										alert("This email address is already used. Please supply another email address.");
									}
									else {
										alert("Invalid registration.  Please try again.");
									}
								}
								else if (action == 'login') {
									alert("Username or password not found.");
								}
								else if (action == 'captcha') {
								    captchaRefreshCounter = captchaRefreshCounter + 1;
									document.images.captchaImage.src = linkPrefix + "captcha.htm?refresh=" + captchaRefreshCounter;
									alert("Your Text did not match. Please try again with new text.");
								}
								else if (action == 'post') {
									alert("ERROR!  Post not saved for some unknown reason.");
								}
								else {
									alert("ERROR! Internal error - unpported action '" + action + "'.  Post not saved.");
								}
							}
						}
						else {
							alert("ERROR! No response information - post not saved.");
						}
				}, 'text');
		}
	}
	function makeCommentPost(comment, topicId, sparkwordId) {
		makeComment(comment, topicId, sparkwordId, 'post', '', '', '', '');
	}
	function makeCommentCaptcha(comment, topicId, sparkwordId, captcha) {
		makeComment(comment, topicId, sparkwordId, 'captcha', captcha, '', '', '');
	}
	function makeCommentLogin(comment, topicId, sparkwordId, username, password) {
		makeComment(comment, topicId, sparkwordId, 'login', '', username, password, '');
	}
	function makeCommentRegister(comment, topicId, sparkwordId, username, password, email) {
		makeComment(comment, topicId, sparkwordId, 'register', '', username, password, email);
	}

	function initAuthFlow(comment) {
		if (comment == null || comment.length < 1) {
			alert("Please enter a post.");
			return false;
		}
		else {
			initCaptchaFlow();
		}
	}
	function initCaptchaFlow() {
	    $(".postTextAreaWrapper").css('display', 'none');
		$("#initAuthFlowLink").css('display', 'none');
		$(".captchaForm").css('display', '');
		$(".loginForm").css('display', 'none');
		$(".registerForm").css('display', 'none');
		//$("#captchaFormCommentLink").css('display', '');
		//$("#loginFormCommentLink").css('display', 'none');
		//$("#registerFormCommentLink").css('display','none');
	}
	function initLoginFlow() {
	    $(".postTextAreaWrapper").css('display', 'none');
		$("#initAuthFlowLink").css('display', 'none');
		$(".captchaForm").css('display', 'none');
		$(".loginForm").css('display', '');
		$(".registerForm").css('display', 'none');
		//$("#captchaFormCommentLink").css('display', 'none');
		//$("#loginFormCommentLink").css('display', '');
		//$("#registerFormCommentLink").css('display','none');
	}
	function initRegisterFlow(username, password) {
		$(".postTextAreaWrapper").css('display', 'none');
		$("#initAuthFlowLink").css('display', 'none');
		$(".captchaForm").css('display', 'none');
		$(".loginForm").css('display', 'none');
		$(".registerForm").css('display', '');
		//$("#captchaFormCommentLink").css('display', 'none');
		//$("#loginFormCommentLink").css('display', 'none');
		//$("#registerFormCommentLink").css('display','');
		document.my2bitsForm.registerUsername.value = username;
		document.my2bitsForm.registerPassword.value = password;
	}


	var votedArray = new Array();
	function storeILike(postId, userId) {
		if (votedArray["" + postId] == null) {
			$.post("../../likeComment.htm", { postId: postId },
					function(data){
						var parsedData = null;
						if (data != null && data.length > 0) {
							parsedData = JSON.parse(data);
							var numberOfLikes = document.getElementById("numberOfLikes-" + postId);
							if (numberOfLikes != null) {
								var message = "You liked this";
								if (parsedData.likes > 2) {
									message = "You and " + (parsedData.likes - 1) + " other people liked this";
								} else if (parsedData.likes > 1) {
									message = "You and 1 other person liked this";
								}
								numberOfLikes.innerHTML = message;
								votedArray["" + postId] = true;
							}
							else {
								alert("ERROR!  Internal - Could not find 'numberOfLikes-" + postId + "'");
							}
						}
						else {
							alert("ERROR! No response information - iLike not saved.");
						}
				}, 'text');
		}
		else {
			return false;
		}
	}
	
	function removePost(postId, sparkwordId) {
		var removeIt = confirm("Confirm:\n\nAre you sure you want to delete this comment?");
		if (removeIt == true) {  
		    $.post("../../removePost.htm", { postId : postId, sparkwordId: sparkwordId },
		    	function(data) {
		    		var parsedData = null;
		    		if (data != null && data.length > 0) {
		    			parsedData = JSON.parse(data);
		    			var status = parsedData.status;
		    			if (status != "error") {
		    				var postDiv = document.getElementById("post-" + postId);
		    				if (status == "success") {
		    					postDiv.style.display = "none";
		    				} else {
		    					alert("ERROR! Internal - got weird response from server.");
		    				}
		    			} else {
		    				alert("ERROR! Internal - got error response from server.");
		    			}
		    		} else {
		    			alert("ERROR! No reponse from server.");
		    		}
		    	},'text');
	    }
	}


	var currentCheckedId = -1;
	var _hasVoted;
	function storePollChoice(pollChoiceId, userId)
	{
		var radioButton;
		if (currentCheckedId > -1 && pollChoiceId == currentCheckedId) {
			setPollChecked(currentCheckedId);
			return;
		}

		if ((userId == null || userId.length < 1) && currentCheckedId > -1) {
			setPollChecked(currentCheckedId);
			return;
		}
	
		var pollChoice = null;
		var pollOptionObject = getPollOptionObject(pollChoiceId);
		var previousCheckedId = currentCheckedId;
		var obj;

		//Reset checked statuses and identify checked poll choice object
		for (var index = 0; index < pollOptionObjects.length; ++index) {
			obj = pollOptionObjects[index];
			if(obj == pollOptionObject){
				obj.optionChecked = true;
				if (currentCheckedId != pollChoiceId) {
					currentCheckedId = pollChoiceId;
					pollChoice = obj;
				}
			}else{
				obj.optionChecked = false;
			}
			radioButton = document.getElementById("pollChoiceId_" + obj.id);
			radioButton.checked = obj.optionChecked;
		}

		//calc new numbers/percentages and update backend and display
		if (pollChoice != null) {
			pollChoice.numberOfVotes++;

			if (previousCheckedId > -1) {
				var previousPollChoice = getPollOptionObject(previousCheckedId);
				previousPollChoice.numberOfVotes--;
			}
			var tmpTotalVotes = 0;
			for (var index = 0; index < pollOptionObjects.length; ++index) {
				obj = pollOptionObjects[index];
				tmpTotalVotes += obj.numberOfVotes;
			}
			// should always calculate this
			for (var index = 0; index < pollOptionObjects.length; ++index) {
				obj = pollOptionObjects[index];
				obj.totalVotes = tmpTotalVotes;
				obj.percent = (obj.numberOfVotes/obj.totalVotes) * 100;
			}

			//post data to server
			if (userId == null || userId.length < 1) {
				$.post("../../storePollChoice.htm", { pollChoiceId: pollChoiceId},
						function(data) {
				});
			}
			else {
				$.post("../../storePollChoice.htm", { pollChoiceId: pollChoiceId, userId: userId},
						function(data) {
				});
			}
			updateDisplay();
		}
	}
	
	function setCurrentCheckedPollChoiceId(pollChoiceId)
	{
		currentCheckedId = pollChoiceId;
	}

	function setPollChecked(pollChoiceId)
	{
		/*var obj;
		for (var index = 0; index < pollOptionObjects.length; ++index) {
			obj = pollOptionObjects[index];
			radioButton = document.getElementById("pollChoiceId_" + index);
			if (obj.id == pollChoiceId) {
				radioButton.checked = true;
			}
			else {
				radioButton.checked = false;
			}
		}*/
	}

	function updateDisplay()
	{
		$(".pollOptions").css("width","200px");
		$(".pollOption_results").css("display", "block");
		$(".pollImagery").css("display", "none");
		for(var i=0; i<pollOptionObjects.length; i++){
			var obj = pollOptionObjects[i]
			var divID = "#pollOption_" + obj.id;
			$(divID).removeClass("selected");
			if(obj.optionChecked) $(divID).addClass("selected");
			var prettyPercent = String(Math.round(obj.percent)) + "%";
			$(divID).find(".pollOption_percent").html(prettyPercent);
			var barWidth = 174 * (obj.percent/100);
			$(divID).find(".pollOption_barChartFill").animate({"width":barWidth}, "slow");
			$(divID).find(".pollOption_numberOfVotes").html(obj.numberOfVotes);
			//alert(obj.answer +"-"+ obj.numberOfVotes +"-"+ prettyPercent);
		}
	}

	function checkForUpdateDisplay()
	{
		if (currentCheckedId > -1 && _hasVoted) {
			updateDisplay();
		}
	}

	var pollOptionObjects = new Array();
	function setPollOptionObject(pollChoiceId, answer, numberOfVotes, percent, totalVotes, optionChecked) {
		var newPollOptionObject = new Object();
		newPollOptionObject.id = parseInt(pollChoiceId + '');
		newPollOptionObject.answer = answer;
		newPollOptionObject.numberOfVotes = parseInt(numberOfVotes + '');
		newPollOptionObject.percent = parseFloat(percent + '');
		newPollOptionObject.totalVotes = parseInt(totalVotes + '');
		newPollOptionObject.optionChecked = optionChecked + '' == "true" ? true : false;

		if (newPollOptionObject.optionChecked) {
			currentCheckedId = newPollOptionObject.id;
		}

		pollOptionObjects[pollOptionObjects.length] = newPollOptionObject;
		return newPollOptionObject;
	}

	function getPollOptionObjects()
	{
		return pollOptionObjects;
	}

	function getPollOptionObject(pollChoiceId)
	{
		var index;
		for (index = 0; index < pollOptionObjects.length; ++index) {
			if (pollOptionObjects[index].id == pollChoiceId) {
				return pollOptionObjects[index];
				break;
			}
		}
		return null;
	}

	function goToThankYouScreen()
	{
		$(".thanksForVotingMessage").css("display", "block");
		$(".pollOptions").css("display", "none");
		$(".pollImagery").css("display", "none");
	}

	function goToPollResults()
	{
		$(".thanksForVotingMessage").css("display", "none");
		$(".pollOptions").css("display", "block");
	}


	function sendEmail(entityId, recipients, sender, subject, message, captcha, entityType) {
		$.post("../../shareEmail.htm", {
					entityId: entityId,
					recipients: recipients,
					sender: sender,
					subject: subject,
					message: message,
					captcha: captcha,
					entityType: entityType },
				function(data){
					var parsedData = null;
					if (data != null && data.length > 0) {
						parsedData = JSON.parse(data);
						var emailStatus = parsedData.status;

						if (emailStatus == 'invalidCaptcha') {
						    captchaRefreshCounter = captchaRefreshCounter + 1;
							document.images.emailPanelcaptchaImage.src = linkPrefix + "captcha.htm?refresh=" + captchaRefreshCounter;
							alert("Your Text did not match. Please try again with new text.");
						}
						else if (emailStatus == 'noRecipients') {
							alert("Please provide address(es) to send to.");
						}
						else if (emailStatus == 'noSender') {
							alert("Please provide your email address.");
						}
						else if (emailStatus != 'ok') {
							alert("ERROR:  Your email did not get sent.  Please try again");
						}
						else {
							$(".smartbar_expanded").css("display", "none");
						}
					}
					else {
						alert("ERROR:  Unknown error.  Please try again");
					}
			}, 'text');
	}


	function addReplyArea(replydiv, postid) {
		var postText = "replytext" + postid;
		var str = '<div style=\"clear:both\"></div><form>'+
							'<textarea class=\"editable\" id=\"replytext' + postid + '\" rows=\"5\"></textarea>'+
							'<input type=\"submit\" value=\"Submit Reply\" class=\"smallbtn\" onclick=\'makeReply(tinyMCE.activeEditor.getContent(),' + postid + ')\' href=\'#\'>'+
							'</div>';
		$(replydiv).html(str);
		tinyMCE_dynamicLoad();
	}

	function initSpinspotterJSCallback(cookieOriginatingPathWithinApplication, cookieTabBookmark) {
		var redirectTabDestination = document.getElementById(cookieTabBookmark + "-li");
		if (redirectTabDestination != null) {
			changeTab(redirectTabDestination, cookieTabBookmark);
		}
	}

	function countClick(sparkwordId, action) {
		$.post(linkPrefix + "logClick?pg=thread&sw=" + sparkwordId + "&action=" + action);
	}
	
	function validateComment(comment) {
		if (comment == null || comment.length < 1) {
			showAlert("Empty posts are not allowed, please try again.","Oops!");
			return false;
		}
		return true;
	}
	
	function showAlert(message, title) {
		var text = isEmpty(title) ? message : title + ":\n\n" + message;
		alert(text);
	}
	
	function isEmpty(string) {
		return string == null || string.length < 1;
	}
	
	function submit(formId) {
		var form = document.getElementById(formId);
		form.submit();
	}
	
	function showTweetDiv(tweet) {
		var tweetText = document.getElementById('tweetText');
		tweetText.value = tweet;
		var tweetDiv = document.getElementById("tweetDiv");
		tweetDiv.style.display = "";
	}
	
	function hideTweetDiv() {
		var tweetDiv = document.getElementById("tweetDiv");
		tweetDiv.style.display = "none";
	}

	var charsLeft = 120;
	function updateTweetChars() {
		var tweetText = document.getElementById('tweetText');
		var tweetChars = document.getElementById('tweetChars');
		charsLeft = 120 - tweetText.value.length;
		if (charsLeft >= 0) {
			tweetChars.style.color = "black";
		} else {
			tweetChars.style.color = "red";
		}
		tweetChars.innerHTML = charsLeft;
	}
	
	function validateTweet() {
		var tweetText = document.getElementById('tweetText');
		if ((120 - tweetText.value.length) >= 0) {
			var tweetForm = document.getElementById('tweetForm');
			var processingDiv = document.getElementById('processingDiv');
			tweetForm.style.display = "none";
			processingDiv.style.display = "";
			return true;
		} else {
			return false;
		}
	}
	