var requiredElements = {};


$(document).ready(blog_Ready);


var proxy_Error = function(code, msg)
{
	alert("::ERROR::\n\n" + code + "\n" + msg);
}

function blog_Ready()
{
	assignEventHandlers();
	initBlogArchiveNav();
}

	
function dumpObject(obj)
{
	var output = "";
	for(var attr in obj)
	{
		output += "\n" + attr + " : " + obj[attr];
	}
	alert(output);
}

function assignEventHandlers()
{
	$("#leaveCommentSubmit").click(comments_Submit);
}


function validateCommentForm()
{
	var isValid = $("#commentName").val() != "name" && $("#commentName").val() != "";
	isValid = isValid && $("#commentEmail").val() != "email" && $("#commentEmail").val() != "";
	
	return isValid;
}


function comments_Submit()
{
	var formComplete = validateCommentForm();
	if(formComplete)
	{
		var author = {};
		// get form values
		author.Username = $("#commentName").val();
		author.Email = $("#commentEmail").val();
		author.Website = $("#commentURL").val();
		author.FollowUpNotifications = false;
		// account id exists if already logged in
		var accountID = $("#BlogAccountID").val();
		if(accountID != null)
		{
			author.BlogAccountID = accountID;
		}
		
		var comments = $("#commentComment").val();
		var postID = $("#BlogPostID").val();
		
		var proxy = new BlogProxy();
		var proxy_Result = function(results)
		{
			var hrs = $("#BlogPostDelayHours").val();
			var mins = $("#BlogPostDelayMinutes").val();
			if (hrs == "0" && mins == "0")
			{
				location.reload(true);
			}
			else
			{
				alert("Comment posted successfully.");
				comments_Clear();
			}
		}
		var proxy_Error = function(code,msg)
		{
			alert("You must be logged in to post a comment.");
			alert(code + " : " + msg);
		}
		
		proxy.setCallbackHandler(proxy_Result);
		proxy.setErrorHandler(proxy_Error);
		
		proxy.PostComment(author, postID, comments);
	}
	else
	{
		alert("Please fill out the comment form completely.")
	}
	
	return formComplete;
}


function comments_Clear()
{
	$("#Comments_Name").val("");
	$("#Comments_Email").val("");
	$("#Comments_Website").val("");
	
	$("#Comments_Captcha").val("")
	
	$("#Comments_Comments").val("");
	
	comments_ShowCommentForm();
}


function comments_RateUp()
{
	var commentID = $(this).attr("CommentID");
	rateComment(commentID, "up");
}

function comments_RateDown()
{
	var commentID = $(this).attr("CommentID");
	rateComment(commentID, "down");
}

function rateComment(commentID, direction)
{
	var proxy = new BlogProxy();
	var proxy_Result = function(results)
	{
		alert("Rated.");
	}
	
	proxy.setCallbackHandler(proxy_Result);
	proxy.setErrorHandler(proxy_Error);
	
	proxy.RateComment(commentID, direction);
}


function comments_ReportOffensiveContent()
{
	var commentID = $(this).attr("CommentID");
	
	var proxy = new BlogProxy();
	var proxy_Result = function(results)
	{
		alert("Report submitted successfully. Thank you.");
		if( parseInt($("#DisableCommentOnOffenseReport").val()) )
		{
			$("div[CommentID=" + commentID + "]").remove();
		}
	}
	
	proxy.setCallbackHandler(proxy_Result);
	proxy.setErrorHandler(proxy_Error);
	
	proxy.ReportOffensiveContent(commentID);
}


function comments_ShowCommentForm()
{
	var reqLogin = parseInt( $("#LoginRequired").val() );
	if(reqLogin)
	{
		showLoginForm();
		return;
	}
	var formContainer = $("#CommentsFormContainer");
	var link = $(".PostCommentLink");
	if(formContainer.css("display") == "none")
	{
		formContainer.show(350);
		link.text("[Hide comment form]");
	}
	else
	{
		formContainer.hide(350);
		link.text("[Post a comment]");
	}
	
	// if logged in, SELECT comments
	if($("#BlogAccountID").val() != -1)
	{
		setTimeout(function(){ $("#Comments_Comments").select(); }, 500);
	}
}


function showLoginForm()
{
	var regForm = $("#RegistrationFormContainer");
	var link = $(".PostCommentLink");
	if(regForm.css("display") == "none")
	{
		regForm.show(250);
		// delay select() until after animation completes
		setTimeout(function(){  $("#Comments_Login_Email").select();  }, 500);
		link.text("[Hide login form]");
	}
	else
	{
		regForm.hide(250);
		link.text("[Post a comment]");
	}
}


function comments_login_Submit()
{
	if (validateForm( $(this).attr("BoundForm") ))
	{
		var proxy = new BlogProxy();
		var proxy_Result = function(results){
			if (results) 
			{
				// results is the user's account id
				$("#BlogAccountID").val(results);
				
				$("*[AccountException=1]").remove();
				assignRequiredElements("CommentsFormContainer");
				
				// clear form
				$("#Comments_Login_Email").val("");
				$("#Comments_Login_Password").val("");
				$("#LoginRequired").val(0);
				// show comment forms
				$("#RegistrationFormContainer").hide(350);
				$("#CommentsFormContainer").show(350);
				$(".LogoutLink").show();
				$(".PostCommentLink").text("[Hide comment form]");
			}
			else 
			{
				alert("Some of your login credentials were not recognized. Please try again.");
			}
		}
		
		proxy.setCallbackHandler(proxy_Result);
		proxy.setErrorHandler(proxy_Error);
		
		proxy.Login($("#Comments_Login_Email").val(), $("#Comments_Login_Password").val());
	}
}


function logout()
{
	var proxy = new BlogProxy();
	var proxy_Result = function(results)
	{
		if(results)
		{
			//location.reload();
			$("#RegistrationFormContainer").hide(350);
			$("#CommentsFormContainer").hide(350);
			$(".LogoutLink").hide();
			$("#LoginRequired").val(1);
			$(".PostCommentLink").text("[Post a comment]");
		}
	}
	
	proxy.setCallbackHandler(proxy_Result);
	proxy.setErrorHandler(proxy_Error);
	
	proxy.Logout();
}


function showRegistrationForm()
{
	alert("Register.");
}


function initBlogArchiveNav(){
	var Blog_MainContainer = $('#blogArchive');
	var BlogUL_Lv1 = $('a[open="MonthOptions"]');
	
	var openMonthLinks = $('a[open="MonthLinks"]');
	
	BlogUL_Lv1.click(function(e){
		var setThis = $(this).parent().parent();
		
		if(setThis.find('.monthUL').css('display') != 'block'){
			setThis.find('.monthUL').slideDown(200);
			setThis.addClass('open');
		}
		else{
			setThis.find('.monthUL').slideUp(200);
			setThis.removeClass('open');
		}
		
	});
	
	openMonthLinks.click(function(e){
		var setThis = $(this);
		
		if(setThis.parent('li').find('div').css('display') == 'block'){
			setThis.parent('li').find('div').slideUp(200);
			setThis.parent('li').removeClass('open');
		}
		else{
			setThis.parent('li').find('div').slideDown(200);
			setThis.parent('li').addClass('open');
		}
	});
	
	// finds current blog entry and shows all parents until blog archive container to expand them
	$("a[IsCurrentBlogEntry='true']").parentsUntil("div.Blog_Archive").show().addClass('open');
	
	
	//open current years if archive
	
}


