var currentPostId;
var blogPostMode = "edit";
var lastPostMode;
var postFormElementsDeclared;
var postForm;
var postDisplay_previewButtons;

function editBlogPostOnLoad()
{
	setBlogPostMode();
	window.setTimeout(editBlogPost, 500);
}

function editBlogPost()
{
	if(originalPost != null)
	{
		if(lastPostMode == "preview")
			swapEditDisplayPostModes("edit");
		
		return;
	}
	
	setBlogPostMode();
	clearBlogPostForm();

	if(blogPostMode == "edit")
		CSharper.Net.ScriptService.GetBlogPost(currentPostId, getBlogPostCallback, onError);
	else
	{
		var post = new CSharper.Net.BlogPost();
		post.TimeStamp = new Date();
		post.Url = "";
		post.Title = "";
		post.Body = "";
		post.RelatedPostIDs = new Array();
		getBlogPostCallback(post);
	}
}

function getBlogPostCallback(post)
{
	originalPost = post;
	hydateBlogPostForm(post);
	displayBlogPostForm();
}

function displayBlogPostForm()
{
	postForm.style.position = "absolute";
	postForm.style.left = "-5000px";
	postForm.style.top = "-5000px";
	postForm.style.display = "";

	if(blogPostMode == "edit")
		Library.autoSizeScrollBox(postForm_body, 600, 100);

	var height = Library.getHeightStrict(postForm);

	if(blogPostMode == "edit")
		postForm.style.height = Library.getHeightStrict(postDisplay_body) + "px";
	else
		postForm.style.height = "1px";
	
	postDisplay_body.style.display = "none";
	//postDisplay_relatedPosts.style.display = "none";
	postForm.style.overflow = "hidden";
	postForm.style.position = "static";

	var attributes = { height: {to: height }};
	var anim = new YAHOO.util.Anim(postForm, attributes, 1, YAHOO.util.Easing.easeOut);
	anim.duration = Library.isSaf ? .75 : .5;
	anim.onComplete.subscribe(displayBlogPostFormComplete);
	anim.animate();

	if(!Library.isIe)
	{
		Library.setOpacity(postForm, 0);
		var attributes = { opacity: {to: 1}  };
		var animOp = new YAHOO.util.Anim(postForm, attributes, 1, YAHOO.util.Easing.easeOut);
		animOp.duration = 1;
		animOp.animate();
	}
}

function displayBlogPostFormComplete()
{
	resetAllPostHeights();
}

function hideBlogPostForm()
{
	postDisplay_body.style.position = "absolute";
	postDisplay_body.style.left = "-5000px";
	postDisplay_body.style.top = "-5000px";
	postDisplay_body.style.display = "";

	var height = Library.getHeightStrict(postDisplay_body);
	postDisplay_body.style.height = Library.getHeightStrict(postForm) + "px";
	
	postForm.style.display = "none";
	postDisplay_body.style.overflow = "hidden";
	postDisplay_body.style.position = "static";

	var attributes = { height: {to: height }};
	var anim = new YAHOO.util.Anim(postDisplay_body, attributes, 1, YAHOO.util.Easing.easeOut);
	anim.duration = Library.isSaf ? .75 : .5;
	anim.onComplete.subscribe(hideBlogPostFormComplete);
	anim.animate();

	if(!Library.isIe)
	{
		Library.setOpacity(postDisplay_body, 0);
		var attributes = { opacity: {to: 1}  };
		var animOp = new YAHOO.util.Anim(postDisplay_body, attributes, 1, YAHOO.util.Easing.easeOut);
		animOp.duration = 1;
		animOp.animate();
	}
}

function hideBlogPostFormComplete()
{
	resetAllPostHeights();
}

var lastPostMode;
function swapEditDisplayPostModes(mode)
{
	if(mode == "edit")
		displayBlogPostForm();
	else
		hideBlogPostForm();
}

function resetAllPostHeights()
{
	postForm.style.height = null;
	postDisplay_body.style.height = null;
}

function setBlogPostMode()
{
	lookupPostFormElements();
	currentPostId = postDisplay_body.parentNode.getAttribute("postId");

	if(currentPostId == "00000000-0000-0000-0000-000000000000")
		blogPostMode = "add";
	else
		blogPostMode = "edit";
}

function cancelEditBlogPostFromForm()
{	
	if(blogPostMode == "add")
	{
		history.go(-1);
		return;
	}
	else
	{
		hydrateBlogPostDisplay(originalPost);
		hideBlogPostForm();
		originalPost = null;
	}
}

function hydateBlogPostForm(post)
{
	postForm_body.value = post.Body;
	postForm_title.value = post.Title;
	postForm_url.value = post.Url;
	postForm_enabled.checked = post.Enabled;
	postForm_timeStamp.value = post.TimeStamp.format("mm/dd/yyyy hh:nn a/p");
	
	for(var i = 0; i < post.RelatedPostIDs.length; i++)
	{
		var id = post.RelatedPostIDs[i][0];
		var title = post.RelatedPostIDs[i][1];
			
		var option = new Option();
		option.innerHTML = title;
		option.value = id;
		postForm_relatedPosts.appendChild(option)
	}
}

function dehydrateBlogPostForm()
{
	try
	{
		var post = new CSharper.Net.BlogPost();
		post.ID = currentPostId;
		post.Body = postForm_body.value;
		post.Title = postForm_title.value;
		post.Url = postForm_url.value;
		post.TimeStamp = new Date(postForm_timeStamp.value);
		post.Enabled = postForm_enabled.checked;
		post.RelatedPostIDs = new Array();

		for(var i = 0; i < postForm_relatedPosts.options.length; i++)
			post.RelatedPostIDs.push(new Array(postForm_relatedPosts.options[i].value, ""));
	}
	catch(e)
	{
		alert(e);
	}

	return post;
}

function saveBlogPostFromPreview()
{
	var post = dehydrateBlogPostForm();
	
	if(originalPost != null)
		post.Notified = originalPost.Notified;

	postDisplay_previewButtons.style.overflow = "hidden";
	originalPost = null;
		
	var attributes = { height: {to: 0}  };
	var animSize = new YAHOO.util.Anim(postDisplay_previewButtons, attributes, 1, YAHOO.util.Easing.easeOut);
	animSize.duration = .75;
	animSize.onComplete.subscribe(function(){postDisplay_previewButtons.style.display='none';postDisplay_previewButtons.style.height=null});
	animSize.animate();

	CSharper.Net.ScriptService.SaveBlogPost(post, saveBlogPostFromPreviewCallback, onError);
}

function saveBlogPostFromPreviewCallback(success)
{
	var msg = success ? "Blog post saved" : "Error saving post";
	if(!success)
	{
		alert(msg);
		return;
	}
	
	var parts = window.location.href.split("/");
	var currentDoc = parts[parts.length - 1].toLowerCase().split("?")[0];
	var currentUrlVal = postForm_url.value.toLowerCase();
	var urlHasChanged = currentDoc != currentUrlVal;
	
	if(blogPostMode == "add" || urlHasChanged)
	{
		window.location = postForm_url.value;
		return;
	}
}

function sendNewPostNotification()
{
	if(!confirm("Are you sure you want to send out a new post notification for '" + originalPost.Title + "'?"))
		return;

	postForm_notifyButton.style.display = "none";
	CSharper.Net.ScriptService.SendNewBlogPostNotification(currentPostId, sendNewBlogPostNotificationCallback, onError);
}

function sendNewBlogPostNotificationCallback(success)
{
	if(success)
	{
		alert("Notification sent");
	}
	else
	{
		alert("Notification failed");
		postForm_notifyButton.style.display = "";
	}
}

function previewBlogPostFromForm()
{
	try
	{
		if(!validatePostForm())
			return;

		var post = dehydrateBlogPostForm();
		CSharper.Net.ScriptService.GetBlogPostDisplay(post, previewBlogPostCallback);
	}
	catch(e)
	{
		alert(e);
	}
}

function previewBlogPostCallback(post)
{
	hydrateBlogPostDisplay(post);
	swapEditDisplayPostModes("preview");
	postDisplay_previewButtons.style.display = "";
}

function validatePostForm()
{
	return Page_ClientValidate("post");
}

function editBlogPostFromPreview()
{
	postDisplay_previewButtons.style.display = "none";
	swapEditDisplayPostModes("edit");
}

function cancelEditBlogPostFromPreview()
{
	postDisplay_previewButtons.style.display = "none";

	if(blogPostMode == "add")
	{
		history.go(-1);
		return;
	}
	else
	{
		hydrateBlogPostDisplay(originalPost);
		originalPost = null;
	}
}

function deleteBlogPost()
{
	CSharper.Net.ScriptService.DeleteBlogPost(currentPostId, deleteBlogPostCallback);
}

function updatePseudoUrl()
{
	if(blogPostMode == "add")
	{
		if(postForm_title.value.length > 0)
			CSharper.Net.ScriptService.GetPsuedoUrl(postForm_title.value, getPsuedoUrlCallback);
		else
			postForm_url.value = "";
	}
	else
	{
		if(postForm_title.value.length > 0 && postForm_url.value.length == 0)
			CSharper.Net.ScriptService.GetPsuedoUrl(postForm_title.value, getPsuedoUrlCallback);
	}
}

function getPsuedoUrlCallback(url)
{
	postForm_url.value = url;
}

function getBlogPostTitles()
{
	var keyword = postForm_keyword.value;

	if(keyword.length < 3)
		return;

	CSharper.Net.ScriptService.GetMatchingPostTitles(keyword, currentPostId, getMatchingBlogPostTitlesCallback);
}

function getMatchingBlogPostTitlesCallback(results)
{
	Library.clearSelectList(postForm_availablePosts);

	for(var i = 0; i < results.length; i++)
	{
		var id = results[i][0];
		var title = results[i][1];
		var brk = false;

		for(var j = 0; j < postForm_relatedPosts.options.length; j++)
			if(postForm_relatedPosts.options[j].value.toLowerCase() == id.toLowerCase())
				brk = true;

		if(brk)
			continue;
			
		var option = new Option();
		option.innerHTML = title;
		option.title = title;
		option.value = id;

		postForm_availablePosts.appendChild(option)
	}
	
	if(postForm_availablePosts.options.length == 0)
	{
		postForm_availablePosts.appendChild(new Option());
		postForm_availablePosts.options[0].innerHTML = "No Results Found";
		postForm_availablePosts.options[0].disabled = true;
		postForm_availablePosts.options[0].style.color = "#ACA899";
		return;
	}
}

function toggleRelatedPosts()
{
	var relatedPosts = document.getElementById("relatedPosts");
	
	if(relatedPosts.style.display == "none")
	{
		relatedPosts.style.display = "";
		postForm_keyword.focus()
	}
	else
	{
		relatedPosts.style.display = "none";
	}
}

function addRelatedPost()
{
	if(postForm_availablePosts.selectedIndex < 0)
		return;

	var itm = postForm_availablePosts.options[postForm_availablePosts.selectedIndex];
	postForm_availablePosts.options[postForm_availablePosts.selectedIndex] = null;		

	var option = new Option();
	option.innerHTML = itm.text;
	option.title = itm.text;
	option.value = itm.value;

	postForm_relatedPosts.appendChild(option)
}

function removeRelatedPost()
{
	if(postForm_relatedPosts.selectedIndex < 0)
		return;

	var itm = postForm_relatedPosts.options[postForm_relatedPosts.selectedIndex];
	postForm_relatedPosts.options[postForm_relatedPosts.selectedIndex] = null;
}

function clearBlogPostForm()
{
	postForm_body.value = "";
	postForm_title.value = "";
	postForm_url.value = "";
	postForm_keyword.value = "";
	postForm_timeStamp.value = new Date().format("mm/dd/yyyy hh:nn a/p");
	postForm_enabled.checked = false;
	
	Library.clearSelectList(postForm_relatedPosts);
	Library.clearSelectList(postForm_availablePosts);
}

function lookupPostFormElements()
{
	if(postFormElementsDeclared)
		return;

	lookupPostElements();	
	postForm = document.getElementById("postForm");
	postDisplay_previewButtons = document.getElementById("postDisplay_previewButtons");
}